PCINT

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Hallo Leute,
      ich möchte einen uhrenbaustein auslesen. Der sendet jede Sekunde ein Signal, welches ich als externen interrupt einbinden möchte. Leider sind die zwei Pins für externe interrupts INT0 und INT1 schon anderweitig belegt. Ich würde das Signal an den PortD1 anbinden. Das wäre der Pin für den Pin change Interrupt PCINT17. Ich habe zwei Register konfiguriert, und zwar PCICR = &B00000100 (PortD) und pcmsk2 = &B00000010 (PinD.1). Damit sollte eigentlich der richtige Interrupt definiert sein. Bei der Beschreibung der Interrupt Routine: "On pcint17 Zeit" gibt es beim kompilieren eine Fehlermeldung "Unknown Interrupt [Pcint17]". Ich habe natürlich auch die Interrupts global freigegeben "SREG.7=1". Kann auch in der Bascom Hilfe nichts brauchbares finden. Was ist hier falsch??? Hardware ist ein Arduino Uno mit Atmega328.
    • Bei mir ist die Initialisierung wie folgt und funktioniert (ATMega128):


      Source Code

      1. 'Interrupt für RTC aktivieren
      2. Config PIND.7 = Input 'ist PCInt31
      3. PORTD.7 = 1 'Pullup
      4. Pcmsk3.PCINT31 = 1 'enable pcint31 = Port D.7
      5. On PCInt3 RTC_1sec 'umfasst PCINT24....PCINT31
      6. Enable Pcint3 'Freigabe von pcint3 (pcint24-pcint31)
      7. Disable Interrupts
      Es gibt keinen PCINT17 es gibt nur globale Interrupts, hier PCINT2 (umfasst PCINT23..16 ). Wenn mehrere Interrupt-Pins verwendet werden muss das in der Interruptroutine auseinandergefädelt werden.
      Sehe gerade: im Datenblatt ist es PCI2 (um Verwechslungen mit PCINTxx zu vermeiden)

      The post was edited 2 times, last by jepe: uP nachgetragen ().

    • Jetzt ist keine Fehlermeldung mehr da. Aber ich kann der Logik nicht folgen. Mit PCINT2 ist im Register PCMSK0 der PinB2 definiert. Und ein Register mit der Bezeichnung PCINT2 gibt es nicht. Auch bei der Auswahl des betreffenden Ports im Register PCIFR ist das Bit mit der Bezeichnung PCIF2 zuständig. Also warum PCINT2???
    • Wie ich nachträglich geschrieben habe heisst es im Datenblatt PCI1/2/3. Bei BASCOM jedoch muss man PCInt schreiben wohl gemeint als Pin Change INTerrupt; schreibt man PCIx gibt es einen Fehler.
      BASCOM ist da feudal, man kann statt bei den Registern die Bit's abzuzählen auch einfach die Datenblattabkürzung verwenden.
      P.S. ich setze am Schluss der Interruptroutine immer noch zur Vorsicht das Flag zurück mit hier z.B. PCIFR.PCIF2 = 1 'Flagregister zurücksetzen

      The post was edited 1 time, last by jepe: P.S. nachgetragen ().

    • Auf alle Fälle funktioniert es auch in der Hardware. Ich bin ganz happy. Vielen dank für die Hilfe. Ich hab jedoch am PortB nichts weiter dran. Weiss also nicht, ob auch die anderen Pins einen Interrupt auslösen. Naja mal probieren.