Forum: Mikrocontroller und Digitale Elektronik LCD flackert - HD44780 kompatibel, Peter Fleury, Atmega32, C


von HeGr (Gast)


Lesenswert?

Hallo! Mein Bordcomputerprojekt hat es in die betaphase geschafft. Danke 
an alle, die mir geholfen haben!!
Nun hat jemand das Problem, dass die rechte Hälfte seines 16*2 Displays 
"flackert". Ich kann das bei mir nachvollziehen indem ich das Display 
stark schräg halte. Wenn ich aber in normalem Winkel draufschaue, dann 
ist alles ruhig...
Bevor ich hier jetzt ewig Code und Schaltpläne poste - vielleicht weiss 
ja jemand etwas aus dem Stehgreif, weil er das Problem auch schon mal 
hatte.
Nur so viel: 4 bit, Datenleitungen 0-3 liegen auf Masse. Sonst 
funktioniert alles Top.

von Klaus R. (klaus2)


Lesenswert?

...updatefrequenz zu hoch?

Klaus.

von Gast (Gast)


Lesenswert?

Servus,
ich vermute das du eine Schleife im Programm hast in der das Display 
ständig aktualisiert wird ohne das sich an den Einträgen was ändert, 
dadurch flackert es. Programmier es am besten so, das es nur 
aktualisiert wird wenn sich was fürs Display ändert.
Aber wie gesagt könnte auch was anderes sein.

von HeGr (Gast)


Lesenswert?

Und ich dachte zu niedrig und hab sie immer höher gesetzt ;)
Ich werde das mal so umstricken, dass nur neu beschrieben wird, wenn 
sich auch was ändert. Danke!

von HeGr (Gast)


Lesenswert?

updatefrequenz war es nicht. ich habe es jetzt folgendermaßen gemacht:

1
//globale variable in main:
2
uint16_t alterwert=0;
3
4
void ausgabe(uint16_t *alterwert)
5
{
6
//in functions:
7
uint16_t neuerwert=0;
8
for(int i=0;i<7;i++) neuerwert+=zeichenfolgefuerslcd[i];
9
10
if(neuerwert!=*alterwert) ausgabe(zeichen...);
11
*alterwert=neuerwert;
12
}
13
14
ausgabe(&alterwert);

leider funktioniert das nicht so ganz. zu beginn, wenn ich nix 
anschliesse flackert nix. wenn ich dann eine feste frequenz dranhänge 
und zB U:  880 dasteht, dann flackert die 880. komisch da ja eigentlich 
nix überschrieben werden dürfte.
oder hab ich mich irgendwo verhaspelt?

von HeGr (Gast)


Lesenswert?

der zweite ausgabe-aufruf steht natürlich nur symbolisch für die lcd 
ausgabe. ich habe keine zwei funktionen mit dem gleichen namen...

von Tom (Gast)


Lesenswert?

Schau mal nach ob die negative Spg. fürs LCD konstant ist (bzw. die 
Spannung für die Kontrasteinstellung).

von Gast (Gast)


Lesenswert?

bin mir nicht sicher obs der Fehler ist.
probier mal beim if
1
if(neuerwert!=*alterwert) *alterwert=neuerwert;
2
ausgabe(zeichen...);
3
}

da nun zu erst *altwert auf den neuesten Stand gebracht wird und
danach die Funktion ausgabe aufgerufen wird.
Weis jetzt nicht wie ausgabe aufgebaut ist, aber ich vermute
das du dann nicht mehr zurückspringst damit er
*alterwert=neuwert
machen kann.
Probiers mal aus wie ichs gschrieben hab vllt klappts

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.