PCINT

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • 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):


      Quellcode

      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)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jepe () aus folgendem Grund: 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

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jepe () aus folgendem Grund: P.S. nachgetragen