- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: ADC und Interrupt Verständnisproblem

  1. #1

    ADC und Interrupt Verständnisproblem

    Anzeige

    E-Bike
    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

  2. #2
    Unregistriert
    Gast
    Schaltplan der analogen Tastatur und Programm wären sinnvoll, ja praktisch unverzichtbar für eine Analyse.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Steffix Beitrag anzeigen
    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.
    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:
    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
    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.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    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)

  5. #5
    Hallo Witkatz
    Ich verstehe leider nicht ganz, was deine Frage ist. Wolltest du mit dem Tastendruck ein Interrupt auslösen?
    So habe ich die Doku verstanden, das eine Spannungsänderung am Pin einen Interrupt auslöst.

    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
    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:
    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.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Zitat Zitat von Steffix Beitrag anzeigen
    So habe ich die Doku verstanden, das eine Spannungsänderung am Pin einen Interrupt auslöst.
    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)

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Steffix Beitrag anzeigen
    So habe ich die Doku verstanden, das eine Spannungsänderung am Pin einen Interrupt auslöst.
    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.

    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.
    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.
    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.
    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.

    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 !

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Zitat Zitat von Klebwax Beitrag anzeigen
    Die Verwendung von Assembler würde ich mir noch mal überlegen. Die Unterstützung für C ist bei Microchip hervorragend.
    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

Ähnliche Themen

  1. Tiny13 externer Interrupt Verständnisproblem
    Von Rolle77 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 22.09.2008, 08:49
  2. Bumper Schalter gleichzeitig an Interrupt und ADC?
    Von masabuana im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 23.08.2007, 22:04
  3. ATMega16 und Timer Verständnisproblem
    Von -tim- im Forum Assembler-Programmierung
    Antworten: 14
    Letzter Beitrag: 30.12.2006, 12:03
  4. Interrupt ADC
    Von Night_MaKu im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 15
    Letzter Beitrag: 27.04.2006, 18:05
  5. ADC - Umrechnung - Verständnisproblem
    Von DIYLAB im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 16.03.2005, 22:06

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen