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
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
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
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.
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.
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.
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.
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
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.
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.
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.