Forum: Mikrocontroller und Digitale Elektronik Interrupt für 8 Eingänge


von Michael B. (gm8816)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Jadeclaw (Gast)


Lesenswert?

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.

von Alexander D. (alexander_d)


Lesenswert?

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

von Michael B. (gm8816)


Lesenswert?

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?

von Juhu (Gast)


Lesenswert?

Nachdem du keinerlei Zusatzinformation gibst, rate ich einfach mal:

Du willst 8 Taster anschließen.

Bitte nicht mit Interrupt.

von Peter D. (peda)


Lesenswert?

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

von Michael B. (gm8816)


Lesenswert?

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.

von Jadeclaw (Gast)


Lesenswert?

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.

von Magnus Müller (Gast)


Lesenswert?

Der mega8 kennt nur zwei externe Interrupts (INT0 und INT1)

Gruß,
Magnetus

von markus (Gast)


Lesenswert?

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?

von tex (Gast)


Lesenswert?

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.

von Wiesi (Gast)


Lesenswert?

@markus: XOR
Bei einem Oder würde ein Eingang, der auf high liegt, die 
Interruptmöglichkeit der anderen Eingönge blockieren.

von Hannes L. (hannes)


Lesenswert?

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.

...

von Michael B. (gm8816)


Lesenswert?

Ich werde den Controller jetzt durch einen Amega88 ersetzen. Damit hat 
sich dann zusätzliche Beschaltung auf der Platine auch erspart.

von Hannes L. (hannes)


Lesenswert?

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...

...

von Markus S. (e-moler)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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
Noch kein Account? Hier anmelden.