July 22nd, 2017

 vorheriger Artikel
« PIC18F4685 und HD44780


Interrupts mit dem PIC

Häufig muss man in einer elektronischen Schaltung, die ein Mikrocontroller beinhaltet ,externe Signale abfragen. Für dieses Problem gibt es zwei elementare Lösungen: Interrupts und Polling.

Bei kleinen Programmen, die nur dem temporären Testen einer Schaltung dienen, wird häufig das Polling verwendet. Auch wenn man mit dem Programmieren beginnt wird man eher zum Polling greifen, als sich sofort mit Interrupts zu beschäftigen. Beim Polling wird der Signalpegel eines Eingangs regelmäßig abgefragt.

Vorteile des Pollings:

  • einfacher zu implementieren, da die Abfrage im Hauptprogramm erfolgen kann
  • schneller als Interrupt, da der Prozessor sofort reagiert. Beim Interrupt wird der aktuelle Befehl noch ausgeführt und der Sprung zur ISR (Interrupt Service Routine) dauert eine gewisse Zeit

Auch ich habe bei meinem ersten Board ausschließlich die Taster durch Polling abgefragt.

Die andere Möglichkeit ist ein Interrupt auszulösen. Bei einem Interrupt, meist ein Signal von einem externen Gerät, wird der Prozessor aufgefordert den aktuellen Programmablauf zu unterbrechen um zur ISR zu springen. In der Interrupt Service Routine wird dann mit Hilfe von Interruptflags geprüft welcher Interrupt ausgelöst wurde um dann entsprechende Befehle auszuführen.

Vorteile der Interrupts:

  • Das Hauptprogramm wird einfacher, strukturierter und besser verständlich, da sich in diesem aufs Wesentliche konzentriert wird ohne ständig alle Signale abzufragen.
  • Das Auftreten eines externen Ereignisses wird immer überwacht. Beim Polling geschieht das nur in bestimmten Zeiten, da zwischendurch andere Signale abgefragt werden oder das Hauptprogramm läuft.
  • Oft stromsparender. Wenn das Hauptprogramm nichts mehr zu tun hat, kann man den Prozessor in den sleepmode versetzen und durch einen Interrupt wieder aktivieren.

In den meisten Fällen überwiegen die Vorteile des Interrupts deutlich. Die PIC18F-Serie hat mittlerweile sogar mehrere Interruptvektoren. Es gibt den Resetvektor, dort springt der Prozessor hin wenn ein Reset erfolgte, meist wird dann zum Hauptprogramm gesprungen. Des weiteren gibt es einen High-Interrupt-Vektor und einen Low-Interrupt-Vektor. Es werden allerdings nur beide Verktoren benötigt/verwendet, wenn man die Priorisierung aktiviert. Damit beschäftige ich mich in diesem Beitrag nicht.

Ohne Priorisierung gibt es nur einen Interruptvektor für externe Interrupts. D.h. der Prozessor springt an die Stelle, wenn ein externer Interrupt erfolgte (Im Falle des PICF4685 ist es 0×0008, weitere PICs sind mir noch nicht bekannt). An der Stelle des Interruptvektors muss dann der code stehen der ausgeführt werden soll, wenn ein Interrupt erfolgt. Welcher der aktivierten Interrupts erfolgte muss dann noch anhand der Flags geprüft werden. Diese muss man anschließend löschen, wenn ein entsprechender Interrupt ausgelöst wurde.
In diesem Beispielprogramm ist ein externer Interrupt (INT0) aktiviert. Demonstriert sind Abfrage und Ausführen eines einfachen Codes.

Tags: , , ,



One Response to 'Interrupts mit dem PIC'

  1. 1Elektronik - Externe Interrupts mit dem AVR leicht gemacht
    April 16th, 2009 at 9:41

    [...] Unterschiede zwischen Polling und Interrupt sind in einem älteren Beitrag schon aufgelistet. Theorie findet man jedoch sehr oft. Hier findet ihr ein einfaches Beispiel wie [...]


Leave a Response

Imhotep theme designed by Chris Lin. Proudly powered by Wordpress.
XHTML | CSS | RSS | Kommentare-RSS