Hallo, ich versuche die PCINT Eingänge zu nutzen. Leider klappt das nicht so ganz... Ich benutze den Atmel Mega48 und BASCOM Demoversion 1.11.8.3 Mein Problem: Ich verwende den PCINT21 (also PD5). Dazu habe ich der Einsprungadresse vom PCINT2 (also PORTD) mit dem Befehl 1 festgelegt. Mit 2 habe ich den Pin PCINT21 (PD5) aktiviert und mit 3 den Interrupt PCINT2 aktiviert. Im Interrupt soll bei aufsteigender Flanke von Pind.5 der Stand inkrementiert werden. Leider wird das nur ausgeführt wenn sich auch was an den Int0 und Int1 eingängen tut. Die sind anderweitig verwendet und haben mit der Zählfunktion nix zu tun. 1 On Pcint2 Zaehlen 2 Pcmsk2 = &B00100000 3 Pcicr.2 = 1 4 Zaehlen 5 if pind.5 = 1 then 6 incr Stand 7 Timer1=0 8 enable Timer1 9 end if Kann mir das einer Erklären? Gruß und Danke Florian
Sorry ich programmier' eigentlich in C aber liegt hier vielleicht der Hund: Pcicr.2 = 1 sollte das nicht Pcicr2 = 1 heißen ?
Ebenfalls kein BASCOM Programmierer, aber: muss da nicht noch ein ENABLE INTERRUPT oder so ähnlich hinein?
NEE leider nicht. das Register Pcicr ist für die PCINT eingänge zuständig und .2 kennzeichnet den PCINT2 Ja logo da steht auch noch mehr Code drum rum der Enable interrupt habe ich natürlich auch Wie gesagt er springt auch nin den Interrupt, aber nur wenn sich auch was am INT0 (PD1) tut. der ist aber durch das PCMSK register eigendlich ausgeschlossen und erzeugt auch nicht den Interrupt... Er muß nur da sein?!?!
> Ja logo da steht auch noch mehr Code drum rum
Und warum schickst Du den Code dann nicht? Glaubst Du, hier sitzen
überall Hellseher rum?
Oder anders rum. Hast du das gleiche Phänomen auch dann, wenn du nur das oben gepostete (+ Enable Interrupt natürlich) programmierst? Bei unerklärlichen Phänomenen ist ein Abspecken auf eine Minimalverison oft eine gute Idee. So vermeidet man dass man an der falschen Stelle sucht.
Das mit dem abspecken ist eine Prima Idee. werde ich morgen gleich mal probieren. ich kann ja wohl schlecht 2500 Codezeilen posten.
Ich habe mal nur den oben genannten Code versucht. durch immer mehr vom Programm dazunehmen konnte ich also tatsächlich den Int0 als Fehlerquelle bestimmen. Sobald ich den Interrupt mit Enable Int0 aktiviere, kann ein anderer Prozessor den Zählerstand abfragen. Solange ich den Bus nicht anshließe zählt der µC brav über den PCINT21. Sobald der Bus das erste mal abruft läuft die Zählung nur noch wenn der Bus aktiv ist. Vielleicht kann sich wer mal den Code anschauen und mir sagen, wiso das so sein kann.
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.