Hallo Leute Ich stehe vor dem Problem, dass ich von 6 Datenleitungen die Pegel überwachen will. Alle Leitungen haben normale 5V Logikpegel. Ziel ist es einen externen Interrupt am Atmel zu generieren sobald sich an einem der Leitungen ein Pegel von Low auf High oder High auf Low ändert. Sehr einfach wäre das ganze wenn ein normaler Atmel 6 externe Interrupt-Eingänge hätte, aber da kann ich wohl lange warten bis Atmel sowas rausbringt... Zweite Möglichkeit ist die Signale an einen der Ports zu leiten und die Pins dauerhaft in einer Schleife zu pollen. Das ist aber für meine Zwecke nicht machbar. Dritte Möglichkeit an der ich jetzt auch schon rumgerätselt habe ist, alle 6 Leitungen irgendwie über Flip-Flops, NAND-Gatter, Zähler oder sowas ähnliches in der Art miteinander zu verbinden um somit zum Schluss ein einziges Signal zu generieren, welches sich ändert (von high auf low oder anders rum) sobald sich an einer der Leitungen was ändert. Weiß jemand von euch an dieser Stelle weiter wie man so eine Schaltung aufbaut? Oder gibt es vielleicht noch eine vierte Möglichkeit an die ich noch nicht gedacht habe. Ich danke euch schon mal. Felix
Felix wrote: > Sehr einfach wäre das ganze wenn ein normaler Atmel 6 externe > Interrupt-Eingänge hätte, aber da kann ich wohl lange warten bis Atmel > sowas rausbringt... Oder Datenblatt lesen, alle neueren AVRs haben nen Pin-Change-Interrupt. Aber wenn die Eingänge mechanische Kontakte sind, nimmt man besser ne Entprellroutine, die entprellt und flankenerkennt 8 Eingänge gleichzeitig. Peter
Hallo Peter Dass man den externen Interrupt so konfigurieren kann, dass er auf Pegeländerung reagiert ist mir schon klar. Das Problem ist aber, dass ich eben nicht nur ein Signal zum Überwachen habe, sondern gleich sechs, oder in Zukunft vielleicht noch mehr. Es reicht aber, einen Interrupt auszuführen wenn sich eins der sechs Signale ändert. Ich müsste also diese Sechs Signale irgendwie zusammenfassen können, vielleicht so wie ich es oben beschrieben habe. Vielleicht fällt euch ja noch was ein. Danke schon mal. Gruß, Felix
Lies die Antwort von Peter nochmal genau. Es gibt AVRs so vielen Interrupt-Eingängen. Beispiel: Tiny2313 lg, Frank
Der Pin-Change Interrupt fasst alle Änderungen an den entsprechend konfigurierten Leitungen in einem Interrupt zusammen, entspricht also exakt deinen Anforderungen. Natürlich kann man sowas auch mit externer Schaltung machen, das ist aber deutlich aufwendiger.
Noch einmal zum Mitlesen: neuere AVRs haben Pin Change Interrupt Erkennung an vielen oder allen Pins. Beim Tiny2313 zum Beispiel 8 Stück, am Mega168 sind es sogar 24. Reicht das?
Such dir nen Atmel raus, an dem es Pins gibt, die mit PCINT0 - PCINT7 beschriftet sind; soweit ich weiß, lösen die alle zusammen einen Interrupt aus und der Auslöser muss aus einem weiteren Register ausgelesen werden
Felix wrote: > ... Oder gibt es vielleicht noch eine vierte Möglichkeit an die ich > noch nicht gedacht habe. 4.) Deine Datenleitungen an den AVR und parallel an einen PCF8574. Wenn du den als Eingang betreibst, löst der PCF bei jeder Änderung an den Eingängen einen Interupt aus, den du mit dem AVR auswerten kannst... Du benötigst aber I²C... nitraM
Hallo Die Möglichkeit des PCINT war mir nicht bekannt, aber das ist genau die Lösung die ich brauch. Bin ich wieder ein Stück schlauer :-) Dank euch nochmal. Felix
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.