Forum: Mikrocontroller und Digitale Elektronik Mehrere Interups an einem int


von Andy (Gast)


Lesenswert?

Hallo,
ich muss an einem mega16 an int1 zwei interuptauslöser
anschliessen.Ich muss deswegen,weil alle anderen  schon belegt sind.
Die zwei auslöser lösen den interupt durch steigende flanke aus.
Soweit läuft das auch alles.
Nun mein Problem:Wie kann ich feststellen,welcher der beiden den 
Interupt ausgelöst hat.Ich habe an portd nur noch einen pin frei.
Hat jemand eine Idee,wie ich das Hardware seitig hinbekomme.

Danke im voraus.
Andy

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Wenn das Signal lang genug ist, würde ich einfach eine der beiden 
Signalleitungen mit auf den PortD legen. In der ISR fragst du dann 
einfach den Pegel ab. Ist er H, wars das Signal, welches parallel mit 
auf dem Port liegt, ansonsten wars das andere Signal. Dumm wäre der 
Zustand, wenn beide gleichzeitig kämen, dann würde die Routine immer nur 
auf das an PortD mit anliegende Signal reagieren. Hm, grübel...

Sven

von Andy (Gast)


Lesenswert?

Hallo,
danke für die antwort.
Es handelt sich bei den auslösern um Türkontakt,die bei geöffneter Tür
ebenfalls öffnen,bei geschlossener Tür hängt die leitung an GND.
Int1 ist mit einem 10k Widerstand auf 5V und ist somit bei geschlossener 
Tür
auf low.Das Problem ist eben,es hängen 2 Von diesen Kontakten in 
seperaten Schleifen an int1.
Wie kann ich die bloss unterscheiden ,grübel seit vielen Stunden

Andy

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Mechanische Schalter hängt man nicht direkt an Interrupt-Eingänge, 
sondern man fragt sie periodisch z.B. in einem Timer-Interrupt ab. Siehe 
Artikel Entprellung.

von Andreas K. (a-k)


Lesenswert?

Mehrere flankengetriggerte Interrupts zusammen an einem Pin - das geht 
nur gut wenn man sich sicher sein kann, dass nie mehrere Ereignisse 
zeitnah drohen, weil sonst gern mal einer über Bord geht. Wobei man in 
dem Fall dann meist schon weiss welcher es sein muss.

Problemlos funktioniert es hingegen mit pegelgetriggerten Interrupts.

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Also wenn das Türkontakte sind, würde ich das nicht über Interrupt 
machen, sondern pollen. Und dann kannst du den einen TK an den einen Pin 
hängen und den anderen TK an den anderen Pin. Eine Abfrage alle 10ms 
sollte da vollkommen reichen.

von Andreas K. (a-k)


Lesenswert?

Naja, Taster als Interruptquelle kann schon sinnvoll sein: um den 
Kollegen aus dem Schlaf zu reissen. Man muss das Prellen halt mit 
berücksichtigen.

Wenn du den Pin an Port D mit einem an Port A tauschen kannst, dann 
kannst du verschiedene Taster mühelos per ADC unterscheiden. Der eine 
hat einen Serienwiderstand, der auf 1V runterzieht, der andere keinen 
und zieht auf 0V.

von Andy (Gast)


Lesenswert?

Hallo,
danke für die Antworten.Das mit dem entprellen habe ich schon 
beachtet.Wird ein Interupt ausgelöst,wird mit einem Timer 4 mal geprüft 
ob das Signal stabil anliegt.Wie gesagt,ich habe noch einen Pin frei und 
würde das
schon gerne über Interupt laufen lassen.
Keiner eine idee,wie ich einen von den beiden zusätzlich auf den anderen 
pin laufen lassen kann und damit sicher bestimmen kann,welcher ausgelöst 
hat.
gruss
Andy

von Andreas K. (a-k)


Lesenswert?

Läuft ähnlich. Einer der beiden Taster kriegt einen Serienwiderstand, 
mit dem der Pin wenn gedrückt auf 1V kommt, der andere hat keinen. Der 
zusätzliche Pin hängt mit einem Widerstand dran und zieht, wenn als 
Ausgang auf 1 (sonst Eingang) zusätzlich hoch, so dass bei dem Taster 
mit Widerstand dann nicht mehr 1V sondern 4V rauskommt. Beim Taster ohne 
Widerstand ändert der jedoch nix.

von Andreas K. (a-k)


Lesenswert?

Mit Diode geht's natürlich auch. Einer der Taster hängt direkt an dem 
Port D Pin, und hat eine Diode zwischen sich und dem Interrupt-Pin.

von AVRFan (Gast)


Lesenswert?

>wird mit einem Timer 4 mal geprüft ob das Signal stabil anliegt.

Warum lässt Du den Timer dann nicht einfach ständig laufen, um davon 
gesteuert die Tasten permanent z. B. alle 20 ms abzufragen?  Ist doch 
viel einfacher.  Die zusätzliche Rechenzeit dafür ist völlig peanuts. 
Ich kenn Dein Projekt zwar nicht, aber ich behaupte mal, die CPU-Last 
würde sich bei Dauer-Polling so beispielsweise von 1.36 % auf 1.38 % 
erhöhen - wow.

>Wie gesagt,ich habe noch einen Pin frei und würde das
>schon gerne über Interupt laufen lassen.

Tasten über Interrupts laufen lassen, um sie dann mit einem Timer zu 
entprellen, halte ich für unnötig umständlich, wenn man die Sache 
stattdessen genausogut ganz über den Timer abwickeln kann.

>Keiner eine idee,wie ich einen von den beiden zusätzlich auf den anderen
>pin laufen lassen kann

Was für nen "anderen Pin"?  Wieviele Pins hast Du jetzt noch frei - 
einen oder zwei?  Für zwei Tasten an einem Digital-Pin gibt es keine 
(einfache) Lösung.  Zeig mal den Schaltplan Deines Projekts. 
Möglicherweise lässt sich was finden, wodurch ein Portpin frei wird.

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.