www.mikrocontroller.net

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


Autor: Michael B. (gm8816)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jadeclaw (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexander D. (alexander_d)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael B. (gm8816)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Juhu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachdem du keinerlei Zusatzinformation gibst, rate ich einfach mal:

Du willst 8 Taster anschließen.

Bitte nicht mit Interrupt.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael B. (gm8816)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jadeclaw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ersetze den Atmega8 durch einen ATMega88 und beachte evtl. noch die 
Hinweise in diesem Dokument:
http://www.atmel-grenoble.com/dyn/resources/prod_d...

Gruß
Jadeclaw.

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der mega8 kennt nur zwei externe Interrupts (INT0 und INT1)

Gruß,
Magnetus

Autor: markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wiesi (Gast)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Michael B. (gm8816)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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...

...

Autor: Markus Sp. (e-moler)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.