Hallo,
ich möchte eine Matrixtastatur (9 Tasten) mit einem Widerstandsnetzwerk
versehen an den ADC (Atmega32) anschliessen. Jede Taste schaltet also
einen anderen Widerstandswert bzw. Spannungswert, der dann dem
Tastaturcode entsprechen soll.
Gibt es eine Möglichkeit, einen (ADC-)Interrupt auszulösen, wenn eine
Taste gedrückt wird, der dann die entsprechende Wandlungsroutine
aktiviert und den Tastencode erzeugt? Oder muss ein Hardwareinterrupt
auf einen Interruptpin verdrahtet werden?
So wie ich das verstanden habe wird ja im ADC erst ein Interrupt
ausgelöst, wenn die Wandlung bereits abgeschlossen ist. Ich benötige ja
aber in diesem Fall einen, der auslöst, wenn das Ergebnis der Wandlung
zB. ungleich 0 ist.
Danke schon mal für eure Hilfe
Sascha
Ganz allgemein gesehen gibt es keine "eingeborene" Möglichkeit,
einen Interrupt auszulösen, der auslöst, wenn sich der AD-Eingangswert
so ändert, das sich eine Messung lohnen würde.
Wenn Du mal darüber nachdenkst, wirst Du verstehen, dass sich das ja
gegenseitig bedingt. Um diesen Int auszulösen, müsstest Du einmal AD
wandeln. Um den AD-Wandler zu starten, brauchst Du den Interrupt.
Schau mal in das Datenblatt um die Interrupt-Quellen zu finden.
Ganz allgemein macht man es so, das man kontinuierlich wandelt um eine
Veränderung festzustellen. (Kenne mich mit diesen analogen
Tastatursachen nicht aus).
Deine Idee, mit dem zusätzlichen Anschluss einer Interrupt-Leitung von
der Tastatur aus, würde funktionieren. Mit einem RC-Differenzierglied
und einem Transistor oder OP könntest so einen Impuls erzeugen. Man
müsste mal durchrechnen/simulieren ob das schnell genug ist. Der
Benutzer drückt so ca. 200ms-400ms lang.
Aber wiegesagt, das ist garnicht nötig. Es sei denn Du hättest wirklich
sehr wenig Zeit übrig um kontinuierlich AD zu wandeln. Da das im Grunde
nur ein paar Befehle im "Fertig"-Int sind, würde das heissen, das Deine
Taktfrequenz ohnehin schon sehr niedrig ist. Dann besser schnelleren
Takt bzw. schnelleren uC.
Was mir gerade noch einfällt, ist, das viele AVRs noch einen Comparator
haben. Der löst aus, sobald die Eingangsspannung einen gewissen Wert
überschreitet. Das wäre auch noch eine Möglichkeit.
Vielen Dank für den Tipp, die Idee mit dem Comperator scheint mir die
effektivste Lösung zu sein. Die Idee, die Tastatur mit
Widerstandsnetzwerk anzuschliessen fand ich genial, weil so nur 2 Pins
am AVR belegt werden, im Gegensatz zu 4 Pins bei konventionellem
Anschluss. Oder fallen Euch da schwerwiegende Nachteile ein, die ich
bedenken sollte?
Sascha
>Oder fallen Euch da schwerwiegende Nachteile ein, die ich bedenken sollte?
Es sind Deiner Anfrage zu wenig Informationen zu entnehmen, um die
Nachteile in Deinem Fall zu nennen.
Je nach Einsatz, Umgebungsbedingen etc. gibt es verschiedene Vor- und
Nachteile.
Es soll eine einfache (mein 1. Projekt) Gewächshaussteuerung werden, mit
der Luftfeuchte, Bodenfeuchte, Temperatur und Licht gesteuert/ geregelt
werden soll. Eingabe über eine Matrixtastatur, 12 Zeichen, Ausgabe über
4-Zeilendisplay und einige Relais. Mit der Tastatur soll u.A. eine
Menüsteuerung realisiert werden.
>Gewächshaus
Naja. Feuchtigkeit! Also gut abdichten! Wenn die Tasten nicht mehr
gehen, mal gucken ob die Feuchtigkeit doch eindrigen konnte.
Was ist mit Lüftern usw. Elektromagnetische Umgebung?
Professionell oder Privat?
Dein erstes Projekt?
Was hast Du denn bisjetzt so mit dem uC gemacht?
Am besten jedes Teilstück für sich entwickeln und testen.
Dann erst die Teilstücke zusammenbauen.
Sascha schrieb:
> Es soll eine einfache (mein 1. Projekt) Gewächshaussteuerung werden
Dann wird ja wohl kein Batteriebetrieb in Frage kommen und damit ist
äußerstes Stromsparen unnötig. D.h. Du brauchst keinen Interrupt zum
Aufwecken.
Und da die Tasten eh entprellt werden müssen, nimm einfach nen
Timerinterrupt und gut is:
Beitrag "Tastenmatrix auslesen über nur 2 Leitungen"
Peter
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.