Forum: Mikrocontroller und Digitale Elektronik Peter Flueury's LCD lib toggelt mir falsche Pins


von peter (Gast)


Lesenswert?

In meiner Main schreibe ich ständig etwas auf meinen LCD raus...
in einer Timer ISR toggle ich eine Pin mit PORTB^=(1<<LED);.

Die LED hängt auf dem selben Port wie die DB7-DB4 lines.

Das Problem ist, das die LED eigentlich im Sekundentakt blinken sollte, 
toggelt aber random manchmal bis zu 3 Sekunden nicht.

Wenn ich es auf einen anderen Port probiere, die LED zu toggeln 
funktioniert es einwandfrei.

Ich habe mir das ganze mal mit dem Oszi angesehen und bemerkt, das wenn 
sie getoggelt wird, sofort wieder zurückgetoggelt wird. Sprich einen 
kurzen Spike.

Ich hoffe mir kann jemand helfen, verzweifle hier.

von holger (Gast)


Lesenswert?

>Ich hoffe mir kann jemand helfen, verzweifle hier.

Die Zugriffe auf dein LCD sind nicht atomar.
Deshalb solltest du auf PORTB keine
LED in einem Interrupt toggeln lassen.

von W.S. (Gast)


Lesenswert?

peter schrieb:
> Ich hoffe mir kann jemand helfen, verzweifle hier.

Versuche es doch zu allererst einmal, den Code den du von jemand anderem 
hast, wirklich verstehen zu lernen. Dann wirst du auch irgendwann 
verstehen, warum das so ist wie es ist. Vielleicht wirst du dann auch 
irgendwann mal ein Gefühl dafür bekommen, was man denn so in einer 
Interrupt-Routine sinnvollerweise tun und unterlassen sollte und wie 
man solche Dinge wie das Synchronisieren von Informationen zwischen zwei 
voneinander unabhängigen Programmabläufen (hier: Grundprogramm und 
Interruptprogramm) hinbekommt.

W.S.

von Falk B. (falk)


Lesenswert?


von chris (Gast)


Lesenswert?

holger schrieb:
> Die Zugriffe auf dein LCD sind nicht atomar.
> Deshalb solltest du auf PORTB keine
> LED in einem Interrupt toggeln lassen.

Oder halt atomar togglen:
1
PINB = (1<<LED);

geht aber bei alten AVRs nicht soweit ich weiß

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.