Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
de:avr:external_interrupts [2010/07/26 13:39] – angelegt Wemberde: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äteNormalerweise haben AVR's 1 bis 8 spezielle Pins, welche benutzt werden um Interrupts im Programm auszulösen, wenn ihr logischer WErt sich ändertoder sie ein bestimmten Status haben. +Externe Interrupts sind eine der einfachsten Funktionen der PeripheriegeräteNormalerweise haben AVR's 1 bis 8 spezielle Pins, welche benutzt werden um Interrupts im Programm auszulösen, wenn sich entweder ihr logischer Wert ändert oder sie einen bestimmten Status erreichen. Da diese Funktion normalerweise gebraucht wird um externe logische Signale zu überwachen, werden diese Pins auch externe Interrupt-Pins genannt.
-Da diese Funktion normalerweisse benutzt wird um externe logische Signale zu überwachen, werden diese Pins auch externe Interrupt-Pins genannt.+
  
-Um einen externen Interrupt zu nutzen, muss der Pins als standard IO Input (er kann auch als Output genutzt werden, jedoch kann dann der Interrupt nur vom Controller selbst ausgelöst werden) konfiguriert werden. Es ist notwendig das Emfpangen von Interrupts zu erlauben und man muss die Bedingungen im Externen Interrupt Konfigurationsregister spezifizieren, welche den Interrupt auslösen. +Um einen externen Interrupt zu nutzen, muss der Pins als Standard IO Input (er kann auch als Output genutzt werden, jedoch kann der Interrupt dann nur vom Controller selbst ausgelöst werden) konfiguriert werden. Außerdem muss der Empfang von Interrupts zugelassen sein und die Bedingung, welche den Interrupt auslöst, muss im externen Konfigurationsregister des Interrupts spezifiziert werden
-Es gibt vier mögliche Bedingungen:+
  
-  * Logische Null (Spannung von 0V) +Es existieren vier mögliche Bedingungen:
-  * Änderung im logischen Wert +
-  * "Descending front" - logische Änderung von Eins zu Null +
-  * "Rising front" - logische Änderung von Null zu Eins.+
  
 +  * 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 behaltensdaher 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 Controllerskann der Interrupt garnicht auslösen oder eine Fehlauslösung unterliegenAsynchrone Interrupts brauchen den Taktgeber des Controllers nicht und können so schnellere Änderungen im externen Signal erfassen - das logische Level muss jedoch immer noch für mind. 50 ns konstant sein. +Der Modus „logische Null“ bewirktdass der Interrupt durchgehend ausgelöst wirdsolange der Pin den Wert Null hatWährend dieser Periode wird die Ausführung des Hauptprogramms gestoppt.
-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, können Interrupts falsch oder gar nicht ausgelöst werden. Asynchrone Interrupts sind unabhängig vom Taktgeber des Controllers und können so schnellere Änderungen im externen Signal erfassen - das logische Level muss jedoch immer noch für mind. 50 ns konstant sein. Der ATmega128 hat 4 synchrone und 4 asynchrone externe Interrupts.
  
-~~PB~~ 
  
-<box 100% round #EEEEEE|Example>+<pagebreak>
  
-Aufgabe: Der ATmega128 Pin nummer 9 (pin 7 Bus E) soll einen Interrupt auslösen wenn sein Wert sich ändert. +<box 100% round #EEEEEE|Beispiel> 
-Der Pin bezieht sich auf den INT7 externen Interruptwelcher synchron ist.+ 
 +Aufgabe: Lassen Sie ATmega128 Pin Nummer 9 (Pin an Bus E) einen Interrupt auslösenwenn sich sein Wert ändert. Der Pin gehört zum externen, synchronen INT7 Interrupt.
  
 <code c> <code c>
Line 32: Line 30:
 ISR(INT7_vect) ISR(INT7_vect)
 { {
- // macht irgendetwas+ // mache irgendetwas
 } }
  
 int main() int main()
 { {
- // Andere Pin 7 an Bus E zum Input, indem man bit 7 auf Null setzt.+ // Ändere Pin 7 an Bus E zu einem Inputpin, indem Bit 7 auf 0 gesetzt wird
  DDRE &= ~(1 << PIN7);  DDRE &= ~(1 << PIN7);
  
- // Definiert den Pull-Up Widerstand zu Pin 7 Bus E+ // Definiere einen Pull-Up Widerstand für Pin 7 an Bus E 
         // um Input Floating zu verhindern.         // um Input Floating zu verhindern.
  PORTE |= (1 << PIN7);  PORTE |= (1 << PIN7);
  
- // Stetzt den Interrupt Modus auf logische Änderung für den Interrupt 7 + // Setzt den Interruptmodus auf “Logische Änderung” für den Interrupt 7 
-        // im externen Interrupt Konfigurationsregister.+        // im externen Interruptkonfigurationsregister.
  EICRB = (1 << ISC70);  EICRB = (1 << ISC70);
  
- // erlaubt Externen Interrupt 7+ // Erlaube externen Interrupt 7
  EIMSK |= (1 << INT7);  EIMSK |= (1 << INT7);
  
- // erlaubt global Interrupts+ // Erlaube globale Interrupts
  sei();  sei();
  
Line 61: Line 59:
 </box> </box>
  
-Zusätzlich zu einem Interrupt der von einem einzelnen Pin ausgelöst wird, ist es möglich, falls der AVR genug Pins hat, eine ganze Gruppe an Pins zu nutzen, um Interrupts durch logische Wertänderungen auszulösen. Diese Interrupts werden einfach "Pin change Interruptsgenannt. Sie lösen aus, sobald mindestens der Wert von einem Pin in der Gruppe sich ändert.+Verfügt der AVR über ausreichend Pins, ist es möglich, zusätzlich zu einem Interrupt der von einem einzelnen Pin ausgelöst wird, eine ganze Gruppe an Pins zu nutzen, um Interrupts durch logische Wertänderungen auszulösen. Diese Interrupts werden einfach Pin change Interrupts“ genannt. Sie lösen aus, sobald mindestens der Wert von einem Pin in der Gruppe sich ändert.
de/avr/external_interrupts.1280151587.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0