- LiFePO4 Speicher Test         
Ergebnis 1 bis 2 von 2

Thema: Interrupt durch Taster ausgelöst

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    22.12.2006
    Ort
    Steiermark
    Beiträge
    15

    Interrupt durch Taster ausgelöst

    Anzeige

    Powerstation Test
    Hallo

    Wie löse ich durch einen Taster ein Interrupt das zu einem gewissen Punkt im Programm springt aus.

    Atmega 32

    Taster auf Ground

    Kann mir jemand dabei helfen

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.187
    Nun du nimmst den PIN INT 0 oder INT 1 (PD2 oder PD3) und gibst den Interrupt mit "falling edge" frei - (MCUCR) GICR nicht vegessen zu setzen. Welche Register dazu wie eingestellt werden müssen findest Du im Datenblatt des ATMEGA 32 auf Seite 64...66.

    Wie dein Compiler das gebacken kriegt, das es sich bei deinem Programmteil um eine Interrupt Service Routine handelt musst Du im Manual deines Compilers nachlesen.

    Ein mögliches Problem dabei ist, das ein Taster nicht auf einmal schließt, sondern während des Einschaltens mehrfach schliest.
    Man nennt das auch "Kontaktprellen".

    Dadurch wird bei einem Tastendruck die Interruptroutine mehrfach angesprochen.
    Wenn das für dein Programm kein Problem ist kannst Du es lassen.
    Wenn Du irgendwelche Inkremente oder Dekremente damit machen willst musst Du dir noch eine Entprellprogramm überlegen oder aus dem Netz einen entsprechenden Codeschnipsel saugen.
    Manche Compiler (z.B. Bascom) haben die Routine schon in ihrem Wortschatz drin (debounce?).

    So wie Du das beschreibst soll dein Programm, nach dem Ende der Interruptroutine, dann aber an einer anderen Stelle im Hauptprogramm weiterarbeiten ?

    Man könnte das über Stack Manipulation machen, das würd ich aber auf keinen Fall empfehlen, da der Stack irgendwann auch wieder entladen werden muß und solche Eingriffe schon sehr nah am Herz des Controllers rumwerkeln.

    Setz lieber ein Flag (Bit) in deiner Interruptroutine, das in der Hauptprogrammschleife dann abgefragt wird und dann an die gewünschte Stelle springt.
    Dadurch kann dann auch deine Interruptroutine sehr kurz ausfallen.

Berechtigungen

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

12V Akku bauen