Forum: Mikrocontroller und Digitale Elektronik AVR PCINT am Mega48


von Florian D. (fdsurfer)


Lesenswert?

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

von Michael K. (mmike)


Lesenswert?

Sorry ich programmier' eigentlich in C aber liegt hier vielleicht der 
Hund:

Pcicr.2 = 1

sollte das nicht

Pcicr2 = 1 heißen ?

von Karl H. (kbuchegg)


Lesenswert?

Ebenfalls kein BASCOM Programmierer, aber:
muss da nicht noch ein
ENABLE INTERRUPT
oder so ähnlich hinein?

von Florian D. (fdsurfer)


Lesenswert?

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?!?!

von johnny.m (Gast)


Lesenswert?

> 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?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Florian D. (fdsurfer)


Lesenswert?

Das mit dem abspecken ist eine Prima Idee. werde ich morgen gleich mal 
probieren.

ich kann ja wohl schlecht 2500 Codezeilen posten.

von Rahul, der Trollige (Gast)


Lesenswert?

> ich kann ja wohl schlecht 2500 Codezeilen posten.

Als Anhang?!

von Florian D. (fdsurfer)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.