Schaltplan der analogen Tastatur und Programm wären sinnvoll, ja praktisch unverzichtbar für eine Analyse.
Hallo Alle,
Ok ich habe mit 4 Tasten eine Analoge Tastatur gebaut, benötigt nur einen Pin (RA0).
Den ADC Konfiguriert Interrupt eingeschaltet, zum Testen dachte ich mir ein Register Inkrementieren und an PortC Ausgeben, egal welche Taste ich drücke, soll das Register um 1 erhöhen werden.
So die Theorie, stattdessen waren alle LED's an ohne das eine Taste gedrückt wurde.
Da ich das Test Board selbst geätzt hatte, vermutete ich einen Fehler auf dem Board.
Einen Fehler auf dem Board kann ich ausschließen
Um den Fehler einzugrenzen habe ich das Ergebnis von ADRESH in der Interrupt Routine auf den PortC ausgeben lassen.
Mit dem Ergebnis das wenn keine Taste gedrückt wird auch keine LED an ist.
Drücke ich dagegen eine Taste wird der entsprechende wert angezeigt.
Also zu meiner Frage, laut Doku soll nur dann ein Interrupt ausgelöst werden wenn eine Conversion
beendet wurde.
Kann einer von den Profis unter euch, mir dieses Verhalten erklären
Vielleicht habe ich die Doku auch nur falsch interpretiert.
Mein Pic16F1829
Schon mal Danke im voraus.
Und freundliche Grüße
Schaltplan der analogen Tastatur und Programm wären sinnvoll, ja praktisch unverzichtbar für eine Analyse.
Ich kann da einen Sinn für die Verwendung eines Interrupts nicht erkennen, es macht alles nur komplizierter. Der Ablauf müßte eigentlich so sein:
Um festzustellen, ob der ADC fertig ist, gibt es ein Statusbit. Man kann aber auch das Interruptflag auswerten, ohne den Interrupt zu enablen. Beispiele gibts im Datenblatt oder in den App-Notes.Code:Pseudocde Init ADC Los: Falls nötig, richtigen Analogeingang anwählen ADC starten warten bis der ADC fertig ist Wert auslesen und weiterverarbeiten weiter bei Los
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Im Datenblatt Kapitel "16.2.6 A/D CONVERSION PROCEDURE" ist die ADC Prozedur beschrieben. Diese Prozedur sollte zyklisch wiederholt werden und anhand des Ergebnisses kann bestimmt werden, ob und wenn ja - welche Taste gedrückt wurde.
Ich verstehe leider nicht ganz, was deine Frage ist. Wolltest du mit dem Tastendruck ein Interrupt auslösen?
Geändert von witkatz (14.03.2015 um 11:20 Uhr)
Hallo Witkatz
So habe ich die Doku verstanden, das eine Spannungsänderung am Pin einen Interrupt auslöst.Ich verstehe leider nicht ganz, was deine Frage ist. Wolltest du mit dem Tastendruck ein Interrupt auslösen?
Ich Kann es mir eigentlich nur so erklären da es sich hier um einen analogen Eingang handelt, wird in einem bestimmten Intervall ein Interrupt ausgelöst und in der ISR werden die Daten ausgewertet.
Hallo Klebwax
Der Vorteil ist doch das ich nicht ständig die Prozedur für Tastendruck abfragen muss, schließlich soll der Pic auch noch was anderes tun.Ich kann da einen Sinn für die Verwendung eines Interrupts nicht erkennen, es macht alles nur komplizierter. Der Ablauf müßte eigentlich so sein:
Ich lasse z.B. auf PortA eine LED blinken, die blinkt auch weiter wenn ich eine Taste drücke.
Aber wie gesagt ich arbeite mich in ASM ein und lerne gerne was dazu also wenn es in der Praxis noch andere Techniken gibt um einen Tastendruck abzufragen.
So ist das aber nicht. Für das starten der ADC Conversion bist du zuständig. Mit dem zurücksetzen des GO/DONE und mit dem Interruptflag kann der ADC melden, dass das Konvertieren fertig ist. Der Interrupt (falls aktiviert) wird also jedesmal ausgelöst, wenn die vorher gestartete ADC Conversion fertig ist, unabhängig davon, ob sich die Spannung geändert hat oder nicht.
Wie Klebwax schon geschrieben hat, braucht man den ADC Interrupt für die Tastaturuswertung nicht. Der µC muss ja nicht ständig die Tastatur abfragen, das wäre schlecht. Es reicht, wenn der µC in der freien Zeit oder alle sagen wir mal 200ms nachschaut ob GO gelöscht ist, die Tastatur auswertet, GO setzt und dann andere Sachen macht. 200ms Reaktionszeit reichen für eine Tastatur idR aus.
Wenn es darum geht, den PIC mit dem Tastendruck zu wecken dann könntest du ein Interrupt on Change des Comparator Moduls nutzen.
Geändert von witkatz (14.03.2015 um 19:55 Uhr)
So etwas gibt es, das hat aber mit dem ADC nichts zu tun. PICs haben für soetwas einen Comparator. Der arbeitet aber nur gegen einen festen Wert, das passt zu deiner vierfach Geschichte nicht.
Ist auch möglich, hat aber ebenfalls mit dem ADC nichts zu tun. Ein Timer löst in einem bestimmten Intervall einen Interrupt aus. Da könnte man dann den ADC starten uns auswerten.Ich Kann es mir eigentlich nur so erklären da es sich hier um einen analogen Eingang handelt, wird in einem bestimmten Intervall ein Interrupt ausgelöst und in der ISR werden die Daten ausgewertet.
Wenn man etwas kennenlernen will, sollte man mit dem Einfachen anfangen. Bevor man in die Halfpipe geht sollte man Skaten lernen. Also erstmal den ADC zum Laufen bringen und richtig kennenlernen. Erst dann kommt der Interrupt.Der Vorteil ist doch das ich nicht ständig die Prozedur für Tastendruck abfragen muss, schließlich soll der Pic auch noch was anderes tun.
Ich lasse z.B. auf PortA eine LED blinken, die blinkt auch weiter wenn ich eine Taste drücke.
Aber wie gesagt ich arbeite mich in ASM ein und lerne gerne was dazu also wenn es in der Praxis noch andere Techniken gibt um einen Tastendruck abzufragen.
Wie man Tasten und andere asynchrone Ereignisse in seinen Programmablauf integriert, hängt von der Programmstruktur ab. Interrupte sind nur eins der möglichen Mittel. So kann man z.B. das Blinken von einem Timerinterrupt erledigen lassen. Das hat aber mit ASM nichts zu tun.
Die Verwendung von Assembler würde ich mir noch mal überlegen. Die Unterstützung für C ist bei Microchip hervorragend. Und wenn man den Prozessor wechselt, z.B zu den PIC18 oder den PIC24 wechselt, muß man nur die mächtigere Peripherie neu lernen, die Sprache bleibt die Gleiche.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Kann ich nur unterstreichen. Wenn man schon mit PIC16F1829 aus der Enhanced Mid-Range Familie anfängt, gibt es keinen zwingenden Grund für Assembler. Gute Tutorials u.a. für XC8 gibt es z.B. auch hier: http://pic-projekte.de/wordpress/?cat=13
Lesezeichen