Archiv verlassen und diese Seite im Standarddesign anzeigen : 12 interrupts
jclmaster
23.01.2006, 19:31
Guten Tag
Ich habe ein kleines Problem mit der Architektur meiner Schaltung oder warscheinlich auch nur die falsche Wahl des AVR's.
Aufgabe:
Es existieren 12 Schalter, bei jedem Statuswechsel eines Schalters soll ein Interrupt ausgelöst werden(Polling kommt nicht in Frage).
Meine Frage ist nun gibt es einen AVR Controller der von allen 12 IO's eine Unterbrechungsanforderung senden kann. So hat ja zB der Mega 8 nur 2 Interruptfähige Eingänge(unter Vorbehalt).
oder gibt es eine Beispielschaltung um diese zu vergößern ??
Anbei noch eine Skizze !
Es gibt vom MAX (Maxim) I2C Bausteine mit 24 I/O Ports
Btw: Wieso kommt polling nicht in Frage ? was hängst du da drauf ?
Wenn du die 12 an einen Interrupt ODERst (beim TIny2313 gehen 8 ), was glaubst du, was du machen mußt um draufzukommen, welcher es wirklich war ?
linux_80
23.01.2006, 20:57
Hallo jclmaster,
Du könntest zB auch einen Mega48, 88 oder 168 nehmen, die sind Pinkompatibel mit dem Mega 8 und an jedem Pin Interruptfähig, und laufen bis 20MHz.
Ich wollt nochmal die ursprüngliche Schaltung ansprechen.
Wenn immer nur ein Kontakt geschlossen wird dannn ist die Logik recht simpel.
Alle Leitungen per OR verbinden und auf den Entpsrechenden Pin geben.
Wie gesagt reagiert man hier nur auf den ersten Kontakt.
Werden Zwei gedrückt oder nacheinander mehrere Geschlossen dann ist das am Int nicht zu erkennen.
Auf welche Pegeländerung reagiert wird ist für den INT-Pin eunstellbar (Flanke/Pegel).
Das läst sich ggf. auch noch mit nem Monoflop kombinieren.
Wenn es aber zuviele Pinns werden dann tendiere ich auch zu nem Int. manager ala Max
jclmaster
24.01.2006, 10:13
Noch zur Ergänzung im Prinzip ist es egal wer den Interrrupt ausgelöst hat die Interrupt Routine liest die Ports komplett und schickt dies direkt per serieller Übertragung zum PC. Sicherlich währe Polling in diesem falle die einfachste Lösung. Ich habe aber festgestellt das beim Polling häufig Probleme auftretet mit prellenden Schaltern. Diese Schaltung stellt eine Ergänzung zu einem PC basierenden Zeit Einheit Abrechnungssystem dar. Dies bedeutet wenn eine Mieteinheit entnommen wird oder wieder eingesteckt wird wird diese Info an den PC übermittelt der dann Abrechnung, Sicherung Datenbankanbindung übernimmt. Es währe weiterhin von Vorteil wenn für spätere Erweiterungen die Schaltung kaskadiert oder einfach erweitert werden kann.
@PickNick kennst Du die Bezeichnung des Bausteins
Wieso nicht den PCF8574 verwenden ? Ist sehr einfach skalierbar..
Ich find's jetzt auch nicht, werd' noch nachschauen
Du mußt da ein wenig rumstöbern
http://www.maxim.de/view_press_release.cfm/release_id/651
http://www.semiconductors.philips.com/catalog/219/282/50807/41735/41850/index.html#41850
jclmaster
24.01.2006, 10:51
das hier habe ich noch gefunden ich glaube das sollte gehen
http://www.csdag.ch/produkte/develop/elab/evalboard/docs/I2CexpandSch.pdf
Geht auch, und wenn du noch die /INT mit Open Collector ODERST, hast du auch einen einzelnen Interrupt.
Sicherlich währe Polling in diesem falle die einfachste Lösung. Ich habe aber festgestellt das beim Polling häufig Probleme auftretet mit prellenden Schaltern.
Nun ,prellend Schalter sind eigentlich leicht abzufangen.
Dafür hab ich das Monoflop erwähnt.
SprinterSB
24.01.2006, 11:31
Auf Polling zu verzichten und statt dessen über Interrupts zu arbeiten, vermeidet auch nicht das Prellen eines Tasters. Zum ENtprellen muss eine Totzeit eingebaut werden, entweder über Hardware (RC-Glied) oder einfacher über die Software.
Gut geeignet ist z.B., alle 10ms in einem Timer-Interrupt auf die Ports zu schauen. Damit bist du auch unabhängig von externen Interrupts, hast die Entprellung und kommst ohne Warteschleifen aus.
Falls du die Taster selber verdrahtest, können sie auch in einer 3x4-Matrix angeordnet werden, falls Ports gespart werden sollen. Das braucht dann nur 3+4 Ports und nicht 12, muss dann aber anders angesteuert werden, und bei mehrern gleichzeitig gedrückten Tastern geht's auch nicht.
Also die klassische Art das prellen von Schaltern zu vermeiden
ist ein C über den Schalter zu hängen. Denke ist für den Anfänger
besser als im Code zu wühlen...
Das is ja nu auch nicht kompliziert.
Wenn die Tastatur ruft dann schauste hin welcher Pin (Taster) es ist,wartest ne angemessene Zeit (je nach Kontakt zb. 10-50ms) und schaust dann nochmal ob er imernoch geschlossen ist.
Wenn ja dann Gültig und wenn nein dann alles wieder auf Defcon 5.
Das dürfte wohl keinen überfordern.
Den Anfänger schon, der einen Bausatz zusamengelötet hat
und nun von uns erwartet das wir ihm mit minimalen Angaben seinerseits
eine pfannenfertige Lösung posten damit er sich selber mit der
Materie vertraut machen kann.
Vielleicht tue ich dem Ursprungsposter Unrecht, aber mir ist dieser
Gedankengang in diesem Forum schon verschiedendlich gekommen...
Hehehe,ja den Gedanken hab ich auch öfters aber da muß man sich entscheiden ob man sich vom Thema verabschiedet oder gebetsmühlenmäßig auf den Betreffenden Einredet das er sich das nötige Wissen nicht doch erstmal über nen Grundlagenkurs holt weils sonst quälend für beide seiten wird. :D
jclmaster
24.01.2006, 14:01
vielen Dank für die Post's
Ich werde die Lösung mit dem I2C wählen diese schein mir am "saubersten" zu sein, der PCF8574 kostet bei Reichelt knapp 1,70€. Damit sollte es kein Problem mehr darstellen.
thx
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.