Hallo, mir stehen 8 digitale Eingänge. Nun möchte ich, dass bei einer Änderung eines einganges ein Interrupt ausgeköst wird. Wie lässt sich sowas realisieren. Wenn möglich sollte es auch noch platzsparend sein. Ich habe schon daran gedacht alle Eingänge miteinander zu vergleichen und falls ein Unterschied da ist soll das Ganze dann am Interrupts Port des Mikrocontrollers einen Interrupt auslösen.
Es gibt MCs, die können ganze Ports überwachen. Z.B. einige AVR (Pin Change Interrupt) oder 8051 (Keyboardinterrupt). In der Regel wachen sie damit auch aus dem Sleep auf. Peter
Immer dieser Glaskugelverschleiß... Welcher Controller? Beim AVR haben neuere Typen einen PinChange-Interrupt. Egal, welcher Pin seinen Zustand ändert, es wird ein Interrupt ausgelöst. Es läßt sich auch einstellen, welche Pins den Interrupt auslösen dürfen. ( Siehe Datenblätter z.B. zum ATMega 48/88 ) Gruß Jadeclaw.
Hallo, wenn ein zusätzlicher Baustein nicht stört, könntest du einen I2C-I/O-Expander PCF8574 nehmen. Dieser gibt ein Signal, wenn sich der Zustand seiner I/O-Pins ändert. Wenn ein Interrupt ausgelöst wurde, kann der µC die Eingänge seriell auslesen und auf eine Änderung vergleichen. Gruß, Alexander
Das ist ein Atmega8. Der hat keinen Pin-Change Interrupt. Habe schon dran gedacht eine Attiny dafür zu nehmen aber das nimmt dann schon ganz schön viel Platz weg. Gibts noch eine kleinere Lösung?
Nachdem du keinerlei Zusatzinformation gibst, rate ich einfach mal: Du willst 8 Taster anschließen. Bitte nicht mit Interrupt.
Geoffrey M. wrote: > Das ist ein Atmega8. Der hat keinen Pin-Change Interrupt. Habe schon > dran gedacht eine Attiny dafür zu nehmen aber das nimmt dann schon ganz > schön viel Platz weg. Gibts noch eine kleinere Lösung? Ja, der ATmega88. Peter
Wie gesagt. Es handelt sich bei meinem Controller um einen ATmega8. Es sind 8 Eingänge an einem Port angeschlossen(Ob Taster oder nicht spilt keine Rolle). Wenn sich nun der Zustand von nur einem Eingang ändert, soll ein Interrupt ausgelöst werden.
Ersetze den Atmega8 durch einen ATMega88 und beachte evtl. noch die Hinweise in diesem Dokument: http://www.atmel-grenoble.com/dyn/resources/prod_documents/doc2553.pdf Gruß Jadeclaw.
Der mega8 kennt nur zwei externe Interrupts (INT0 und INT1) Gruß, Magnetus
Mit einem Oder IC, alle Eingänge zusammen schließen und dann auf den INT-Port des Controllers... Warum musst du Taster als Interrupt abfragen? Reicht es nicht im Pollingverfahren?
Was man Dir zu sagen versucht ist, dass Du den Mega8 8 durch einen pinkompatiblen Mega88 ersetzen kannst. Alternativ kannst Du Deinen Eingängen ein paar Logicgatter vorschalten und die Veränderung der Eingänge an die 2 ext. Interrupteingänge des Mega 8 weiterreichen.
@markus: XOR Bei einem Oder würde ein Eingang, der auf high liegt, die Interruptmöglichkeit der anderen Eingönge blockieren.
Geoffrey M. wrote: > (Ob Taster oder nicht spilt > keine Rolle). Das ist ein Irrtum, das spielt nämlich eine verdammt große Rolle. Taster prellen nämlich und müssen daher ganz anders abgefragt werden als elektronisch (digital) generierte Impulse. ...
Ich werde den Controller jetzt durch einen Amega88 ersetzen. Damit hat sich dann zusätzliche Beschaltung auf der Platine auch erspart.
Geoffrey M. wrote: > Ich werde den Controller jetzt durch einen Amega88 ersetzen. Damit hat > sich dann zusätzliche Beschaltung auf der Platine auch erspart. Na dann viel Spaß. Taster prellen nämlich auch am Mega88. Dagegen hilft der Pin-Change-Interrupt auch nicht. Viel Erfolg... ...
wenn hier schon so fröhlich über Interrupts philosophiert wird hätte ich auch mal ne frage! ich arbeite mit dem LPC936, habe 5 Tasten und einen Schalter. der Port 0 am LPC 936 ist für den Kyboardinterrupt vorgesehen. Jetzt möchte ich meine Menüsteuerung mit den fünf Tasten bedienen. Der Inerrupt 7 wird ausgelöst wenn ich eine Taste betätige. Das Problem das ich habe ist das ich nicht bestimmen kann welche Taste nun betätigt wurde um dies entsprechend auszuwerten. Ich habe das Buch vom Michael Baldischweiler doch daraus kann ich dies nicht entnemen. Wenn nu einer sich mit dem Kyboardinterrupt auskennt, möge er mir doch bitte einen Tipp geben damit die erfolglose rumprobiererei einende nimmt.
@ Markus Spitznagel (e-moler) >ich arbeite mit dem LPC936, habe 5 Tasten und einen Schalter. > der Port 0 am LPC 936 ist für den Kyboardinterrupt vorgesehen. Jetzt >möchte ich meine Menüsteuerung mit den fünf Tasten bedienen. Der >Inerrupt 7 wird ausgelöst wenn ich eine Taste betätige. Das ist nur sinnvoll, wenn der Prozessor im Sleep Mode ist um Strom zu sparen. Normalerweise werden Tasten zyklisch im Timerinterrupt gepollt. Entprellung >Das Problem das ich habe ist das ich nicht bestimmen kann welche Taste >nun betätigt wurde um dies entsprechend auszuwerten. Nein? Wie wäre es damit, einfach den Port auszulesen? >möge er mir doch bitte einen Tipp geben damit die erfolglose >rumprobiererei einende nimmt. Mal in Ruhe denken. MfG Falk
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.