-
        

Ergebnis 1 bis 9 von 9

Thema: Interrupt-Vektoren beim ATmega-168/ PCINT-Eingänge

  1. #1

    Interrupt-Vektoren beim ATmega-168/ PCINT-Eingänge

    Anzeige

    Hallo
    Ich habe einen ATmega-168, und will 5 Steuerkanäle einlesen, über die PCINT Eingänge 13-9. Jetzt finde ich nicht heraus welches die einzelnen Vektoren sind für die Kanäle, und mir schwant irgendwie nicht viel gutes... .
    Gruss Nils

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.190
    Wenn ich das Datenblatt richtig interpretiere dann heisst das PCINT1_vect
    Dann im Register PCICR das Bit PCIE1 setzen und allgemein den Interrupt enablen.
    Das heisst du hast nur einen Vector für alle 5 Kanäle und musst bei auslösen der ISR selbst abfragen welcher Kanal das ist.

  3. #3
    Wie geht das mit dem Kanal auslesen nach dem ISR genau? Einfach überprüfen welche Kanal geändert hat?
    Greez Nils

  4. #4
    Moderator Roboter Genie
    Registriert seit
    26.08.2004
    Beiträge
    1.228
    VERSCHOBEN [-(

    MfG
    Basti

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.190
    Ja, würde ich so machen, es könnten auch mehrere Kanäle gleichzeitig aktiv sein.

  6. #6
    Wen man nun über if abfragt welcher Kanal genau angesprochen wurde, wird da die ISR routine nicht ein wenig lange?
    Ein zweites Problem: Ich habe ja nicht 5 Timer zur verfügung, erst dacht ich mir das eben über einzel Interrupts zu lösen, und immer die gleichen Timer zu verwenden (andere Interrupts werden ignoriert, und nacher abgearbeitet). wie sieht das jetzt aus? Wird auf einen Interrupt an einem Pin immer noch generell der Interrupt unterbrochen, und später abgearbeitet?
    Gruss Nils

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.190
    Die Abfrage darf man nicht in der ISR machen, das ganze Port in eine Variable schieben und dann in der Main-Schleife abarbeiten. Interrupts werden nicht unterbrochen sondern abgearbeitet, der nächste wartet wenn man ihn nicht manuell löscht.

  8. #8
    Danke!
    Noch eine letzte Frage:
    Wie kann ich die Variablen aus einer Funktion auch im Main verwenden, oder an eine andere Funktion weitergeben (die Resultate)
    Gruss

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.190
    Wenn du die Variable ausserhalb einer Funktion definierst ist sie allgemein verwendbar, sonst als global definieren. Ich setzte solche definitionen gleich an den Anfang eines Programms nach den include und define.

Berechtigungen

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