-         

Ergebnis 1 bis 6 von 6

Thema: Atmel 2560 -> Pin Changed Interrupts

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.12.2007
    Beiträge
    18

    Atmel 2560 -> Pin Changed Interrupts

    Anzeige

    Hallo zusammen,
    ich würde gerne an dem Atmel 2560 die PCINT Interruppts verwenden.
    Am PinK.5 habe ich einen Taster angeschlossen und würde gerne mit PCINT21 überprüfen.

    Leider erhalt eich immer die Fehlermeldung:

    Unknown interrupt source [PCINT21]


    Auch wenn ich das mit Bascom mitgelieferte Beispiel ausführe klappt das zwar mit dem eingetragenen Chip, wenn ich diesen aber abändere auf den m2560def.dat dann erhalte ich auch die besagte Fehlermeldung.

    Kann der 2560 überhaupt PCINTs auswerten ?

    Vielen Dank
    avrbrauns

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,
    die PCINTs sind Byteweise organisiert, dH. PCINT0 - 7 von PortB sind Interrupt PCINT0 usw.
    Nicht jedes Pin hat einen eigenen Interrrupt. Welcher Eingang den IRQ ausgelöst hat, muss man in der ISR selber nachschauen, es können 8 pro ISR/Port sein.
    Wenn man aber nur einen freischaltet (in PCMSKx), kann man sich das sparen.
    Siehe auch DB.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    07.12.2007
    Beiträge
    18
    Hallo,
    vielen Dank für deine Antwort.

    Ich habe am ganzen Port K nur einen Pin belegt das ist der PinK.5
    An diesem hängt ein Taster, den ich gerne per Interrupt abfragen möchte.

    WIe kann ich den Interrupt ansprechen PCINT21 kennt der Compiler nicht

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Wie linux_80 schon sagte: Die PC-Interrupts gibt´s nur byteweise. Du kannst also nicht z.B. 20 verschiedene Interrupt-Routinen deklarieren, sonder nur 3: PCINT0, PCINT1 und PCINT2. Diese 3 Gruppen fassen die PCINT-Pins 0-7, 8-15 und 16-23 zusammen.

    Meistens ist es ja aber so, dass man nur von einem einzigen dieser jeweils 8 Pins den Interrupt ausgelöst haben möchte; dafür gibt´s dann die PCMSK-Register0-2, in denen man festlegen kann, welcher der 8 einen Interrupt auslösen kann und welcher eben nicht.

    Wenn Du konkret den PinK5 nehmen möchtest, musst Du die ISR für PCINT2 benennen und mit PCMSK2 = &B00100000 dafür sorgen, dass bei Pegeländerungen der anderen K-Ports eben nichts passiert.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    07.12.2007
    Beiträge
    18
    Vielen Dank für deine gute Erklärung. Deine Ausführung ist mir jetzt klar.
    Leider kannte mein Compiler keinen PCINT.

    Ich habe das Problemchen jetzt gefunden. beim 2560 heißen die 3 PCI0, PCI1, PCI2

    Vielen Dank
    avrbrauns

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Ja, das ist mal wieder typisch Bascom...
    Registernamen sind unterschiedlich und der Compiler sagt nur Bullshit wie "WHILE/WEND nicht erkannt in irgendeiner Zeile".

Berechtigungen

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