Moin! Kurze Frage: ich möchte unter Bascom beim Atmega 328P die Pins B2 bis B5 als pin change interrupt konfigurieren. Ich habe die 4 Pins über die internen Pullups auf high gelegt und möchte nun mit einem GND-Impuls den interrupt auslösen B2 und B3 laufen als PCINT einwandfrei. B4 und B5 nicht. Die Pins sind als Eingänge konfiguriert und (außer mit dem ISP-Stecker) mit nichts verbunden. ISP Stecker ist abgezogen. Die JTAG funktion muss man z.B. erst deaktivieren, um die betroffenen Pins als I/O nutzen zu können. Ist das hier ähnlich? B4 ist beim 328er "MISO" und B5 "SCK"... Mein Bascom Code ist dies: Enable Pcint0 On Pcint0 Isr ' das PCINT Register ist bei B2-B5 null Pcmsk0 = &B00111100 ' Pins B2-B5 als PCINT konfiguriert Ddrb = &B11000011 ' Pins B2-B5 als Eingänge konfiguriert Portb.2 = 1 'Pullups Portb.3 = 1 Portb.4 = 1 Portb.5 = 1 isr: 'ISR led_test= 1 waitms 100 led_test= 0 return Möchte zu gern wissen, woran es liegt. Vielen Dank für Eure Hilfe! Gruß Lars
Lars H. schrieb: > Die JTAG funktion muss man z.B. erst deaktivieren, um die betroffenen > Pins als I/O nutzen zu können. Ist das hier ähnlich? Nein. PCINT sollte problemlos gehen. Hast du ein Stromlaufplan? Foto vom Aufbau?
Kirsch schrieb: > Lars H. schrieb: >> Die JTAG funktion muss man z.B. erst deaktivieren, um die betroffenen >> Pins als I/O nutzen zu können. Ist das hier ähnlich? > > Nein. > > PCINT sollte problemlos gehen. > > Hast du ein Stromlaufplan? Foto vom Aufbau? ... und das vollständige Programm!?
Ist ein Fertigmodul. Aber das reicht mir eigentlich schon als Antwort. Wenn ich mit meiner Vermutung recht gehabt hätte, hätten hier schon leute geschrieben:" Ja, klar! Du musst natürlich den ISR deaktivieren, sonst gehen B4/B5 als PCINT nicht." Das ist nicht der Fall, also muss ich auf Fehlersuche gehen...
aha! langsam klärt sich das: Auf dem Modul ist eine SMD LED mit portb.5 verbunden. Wahrscheinlich als eine Art Status-LED für Programmdaten-Empfang. Dann wird B4 auch für irgendetwas auf dem Modul reserviert sein.
Lars H. schrieb: > Mein Bascom Code ist dies: > > Enable Pcint0 > On Pcint0 Isr ' das PCINT Register ist bei B2-B5 null > Pcmsk0 = &B00111100 ' Pins B2-B5 als PCINT konfiguriert > Ddrb = &B11000011 ' Pins B2-B5 als Eingänge konfiguriert > > Portb.2 = 1 'Pullups > Portb.3 = 1 > Portb.4 = 1 > Portb.5 = 1 > <<--- HIER Und was soll das Programm tun wenn es an dieser Stelle (HIER) angekommen ist? Hint: "Nichts" ist nicht die richtige Antwort, denn das kann ein Programm eben nicht!
hatte ich ja ob geschrieben: isr: 'ISR led_test= 1 waitms 100 led_test= 0 return Zum Test, ob die vier PCINT alle funktionieren, soll erstmal nur eine Kontroll- LED für 100ms aufleuchten. Das tut sie auch bei B2/B3 ordnungsgemäß
das Programm ist knapp 30KB groß. Das kann ich niemanden zumuten, alles durchzuflöhen... Ach ja.. ich hatte weiter oben in meinem Code Schnippsel "enable interrupts" vergessen. Ist aber im Hauptprogramm vorhanden.
Lars H. schrieb: > hatte ich ja ob geschrieben: > > isr: 'ISR > led_test= 1 > waitms 100 > led_test= 0 > return Das Programm soll einfach in die ISR reinlaufen, obwohl kein Interrupt vorliegt? Und wohin "return"t das Programm dann zum Schluss? Lars H. schrieb: > das Programm ist knapp 30KB groß. Aha! Das oben gepostete Programm ist also nicht der gesamte Code. Dann liegt der Fehler irgendwo in den 29kB die du eben nicht zeigst...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.