This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
de:avr:external_interrupts [2010/07/26 13:39] – angelegt Wember | de:avr:external_interrupts [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Externe Interrupts ====== | ====== Externe Interrupts ====== | ||
- | Externe Interrupts sind eine der einfachsten Funktionen der Peripheriegeräte, Normalerweise haben AVR's 1 bis 8 spezielle Pins, welche benutzt werden um Interrupts im Programm auszulösen, | + | Externe Interrupts sind eine der einfachsten Funktionen der Peripheriegeräte. Normalerweise haben AVR's 1 bis 8 spezielle Pins, welche benutzt werden um Interrupts im Programm auszulösen, |
- | Da diese Funktion | + | |
- | Um einen externen Interrupt zu nutzen, muss der Pins als standard | + | Um einen externen Interrupt zu nutzen, muss der Pins als Standard |
- | Es gibt vier mögliche Bedingungen: | + | |
- | * Logische Null (Spannung von 0V) | + | Es existieren vier mögliche Bedingungen: |
- | * Änderung im logischen Wert | + | |
- | * " | + | |
- | * " | + | |
+ | * Logische Null (Spannung von 0 V) | ||
+ | * Änderung des logischen Werts | ||
+ | * Fallende Flanke – logische Änderung von 1 zu 0 | ||
+ | * Steigende Flanke – logische Änderung von 0 zu 1 | ||
- | Wenn der Modus auf logische Null gesetzt wurde, wird der Interrupt durchgehend ausgelöst, solange der Pin den Wert Null hat. Während dieser Periode wird das Ausführen des Hauptprogramms gestoppt. | ||
- | Prinzipiell gibt es zwei Typen von Interrupts: Synchronisierte mit dem Taktgeber des Controllers und asynchrone Interrupts. Synchrone Interrupts funktionieren indem sie den Wert des Inputs behaltens, daher können logische Änderungen gefunden werden in dem die Werte zwischen zwei Taktzyklen verglichen werden. Wenn die logischen Änderungen im Signal schneller passieren als der Tastgrad des Controllers, kann der Interrupt garnicht auslösen oder eine Fehlauslösung unterliegen. Asynchrone Interrupts brauchen den Taktgeber | + | Der Modus „logische Null“ bewirkt, dass der Interrupt durchgehend ausgelöst wird, solange |
- | Der ATmega128 hat 4 synchrone und 4 asynchrone externe Interrupts. | + | |
+ | Prinzipiell gibt es zwei Typen von Interrupts: Mit dem Taktgeber des Controllers synchrone und asynchrone Interrupts. Synchrone Interrupts funktionieren indem sie den Wert des Inputs behalten. Auf diese Weise können Änderungen der logischen Werte aufgedeckt werden, indem die Werte zwischen zwei Taktzyklen verglichen werden. Erfolgen die Änderungen des Signals schneller als der Tastzyklus des Controllers, | ||
- | ~~PB~~ | ||
- | <box 100% round # | + | <pagebreak> |
- | Aufgabe: | + | <box 100% round # |
- | Der Pin bezieht sich auf den INT7 externen | + | |
+ | Aufgabe: | ||
<code c> | <code c> | ||
Line 32: | Line 30: | ||
ISR(INT7_vect) | ISR(INT7_vect) | ||
{ | { | ||
- | // macht irgendetwas | + | // mache irgendetwas |
} | } | ||
int main() | int main() | ||
{ | { | ||
- | // Andere | + | // Ändere |
DDRE &= ~(1 << PIN7); | DDRE &= ~(1 << PIN7); | ||
- | // Definiert den Pull-Up Widerstand | + | // Definiere einen Pull-Up Widerstand |
// um Input Floating zu verhindern. | // um Input Floating zu verhindern. | ||
PORTE |= (1 << PIN7); | PORTE |= (1 << PIN7); | ||
- | // Stetzt | + | // Setzt den Interruptmodus |
- | // im externen | + | // im externen |
EICRB = (1 << ISC70); | EICRB = (1 << ISC70); | ||
- | // erlaubt Externen | + | // Erlaube externen |
EIMSK |= (1 << INT7); | EIMSK |= (1 << INT7); | ||
- | // erlaubt global | + | // Erlaube globale |
sei(); | sei(); | ||
Line 61: | Line 59: | ||
</ | </ | ||
- | Zusätzlich | + | Verfügt der AVR über ausreichend Pins, ist es möglich, zusätzlich |