Forum: Compiler & IDEs LCD Ansteuerung fehlerhaft


von Johannes B. (aprendiz)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

gestern habe ich es erfolgreich geschafft mein Display "TC1602A-08" von 
Pollin ans laufen zu bekommen.
Leider habe ich ein Problem bei der Übertragung. Wenn ich das Programm 
kompiliere und übertrage erscheint beim ersten mal die korrekte 
Darstellung. Übertrage ich es erneut kommt in der ersten Zeile ein 
zufälliges Wirwar ab Zeichen 4. Übertrage ich es dann noch ein mal, 
erscheint wieder der korrekte Text. Und das wechselt sich irgendwie nach 
Lust und Laune ab.
(Die zufälligen zeichen variieren allerdings)

Wisst ihr woran das liegen könnte?

Ich habe extra schon alle Jumper von meinem Evaluations Board entfernt 
weil ich dachte irgendwas hackt mir da rein aber keine Besserung.

Gruß

Jo

von micha (Gast)


Lesenswert?

Wenn die Verkablung OK ist, dann ist es wohl ein Software-Problem. Wie 
sieht's mit dem Timing aus, machst du einfach delays oder nutzt du das 
busy-flag? Ohne source-code und Schaltplan kann man da eigentlich gar 
nichts sagen....

von Dennis (Gast)


Lesenswert?

Timing passt nicht

von Johannes B. (aprendiz)


Lesenswert?

micha schrieb:
> Ohne source-code und Schaltplan kann man da eigentlich gar
> nichts sagen....

AVR-GCC-Tutorial/LCD-Ansteuerung

Ich nutze die Routinen und das Beispielprogramm dieses Artikels.
Angeschlossen ist das Display im 4 Bit Modus

Dennis schrieb:
> Timing passt nicht

Habe den uC ausgelesen und die Frequenz auf 8 MHz gestellt.
ISP Clock Speed steht bei 1,2 kHz

Oder was meinst du genau?

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Aus deinem Posting von gestern

>  Dannach ging es zwar noch nicht aber durch eine erhöhung
> des ISP Clockspeed hat es dann funktioniert.

? ISP hat damit nichts zu tun.
Du stellst da einen Zusammenhang her, der nicht existiert. Das war 
maximal Zufall, dass es nach dem Erhöhen der ISP Clockspeed funktioniert 
hat.

Check noch mal deine Verkabelung. Kabelbruch, schlechte Lötstellen.
Auch gehen mir da ein wenig zu viele Kabel zum LCD. Die Lötstellen am 
LCD für die unteren 4 Datenbits bleiben einfach leer, wenn du das LCD im 
4-Bit Modus ansteuerst. Was hast du mit den entsprechenden Kabeln 
gemacht?

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Johannes Berger schrieb:
>
> Oder was meinst du genau?

die restlichen Zeiteinstellungen ein wenig höher stellen.
Gibt ja neben der Boot-Time noch ein paar andere.

von Karl H. (kbuchegg)


Lesenswert?

Johannes Berger schrieb:

> Habe den uC ausgelesen und die Frequenz auf 8 MHz gestellt.

Und hast du das auch KONTROLLIERT, ob der µC danach auch tatsächlich mit 
ca. 8Mhz läuft?

von Johannes B. (aprendiz)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Was hast du mit den entsprechenden Kabeln
> gemacht?

Die restlichen 4 Datenleitungen habe ich auf Masse gelegt.

Karl Heinz Buchegger schrieb:
> die restlichen Zeiteinstellungen ein wenig höher stellen.
> Gibt ja neben der Boot-Time noch ein paar andere.

Ja da habe ich mich noch nicht ganz dran getraut, werde ich aber jetzt 
mal probieren

Karl Heinz Buchegger schrieb:
> Und hast du das auch KONTROLLIERT, ob der µC danach auch tatsächlich mit
> ca. 8Mhz läuft?

durch erneutes auslesen?!
oder verstehe ich das jetzt was falsch?

gruß

von Karl H. (kbuchegg)


Lesenswert?

Johannes Berger schrieb:

>> Und hast du das auch KONTROLLIERT, ob der µC danach auch tatsächlich mit
>> ca. 8Mhz läuft?
>
> durch erneutes auslesen?!
> oder verstehe ich das jetzt was falsch?


AM e3infachstenb ist es, wenn dir der µC selber unmissverständlich 
mitteilt, ob das jetzt 8Mhz sind oder nicht.
Dann gibt es auch keine Fuse-Bits die man fehlinterpretieren könnte

einfach eine LED blinken lassen, wobei die Pausen mit _delay_ms gemacht 
werden.
1
#define F_CPU 8000000
2
3
....
4
5
int main()
6
{
7
8
  ...
9
10
  while( 1 )
11
  {
12
    LED einschalten
13
    _delay_ms( 1000 );
14
    LED ausschalten
15
    _delay_ms( 1000 );
16
  }
17
}

_delay_ms ist als in Software realisierte Zeitschleife, sensitiv darauf, 
dass die Angabe von F_CPU auch tatsächlich mit der Wahrheit 
übereinstimmt.

Und dann sieht man es schon. Brennt die LED tatsächlich 1 Sekunde und 
ist 1 Sekunde aus .... dann stimmen die 8Mhz mit der Realität überein. 
Sind es aber eher .... 8 Sekunden ein und 8 Sekunden aus, dann passt das 
nicht (dann läuft der µC mit 1Mhz und nicht mit 8).

Das sieht man mit freiem Auge.

Spann den µC dazu ein, dass er dir hilft!

von Johannes B. (aprendiz)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Spann den µC dazu ein, dass er dir hilft!

Super Idee. Aber klar, muss man erst mal drauf kommen :)

Habe den kleinen Versuch aufgebaut und stelle fest das der µC wie 
geplant auf 8MHz läuft.

Und auch ein erhöhen der BOOTUO_MS  etc. hat noch nichts ergeben.

Nur das die Fehler jetzt wandern und noch mehr variieren.
Vor allem wenn ich das Display nach einer bestimmten Zeit lösche und 
einen neuen text ausgebe kommt erst der richtige Murks.

von Karl H. (kbuchegg)


Lesenswert?

Johannes Berger schrieb:

> Und auch ein erhöhen der BOOTUO_MS  etc. hat noch nichts ergeben.

Wen das LCD initialisiert, dann ist das auch der falsche Ansatzpunkt.
Da ist die Boot-Zeit schon lange vorrüber.

Die anderen, die die Pulslängen des Enable Pulses, bzw. die Verzögerung 
bis zur Erzeugung des Pulses steuern, das sind die, die jetzt gefragt 
sind.


Um dir etwas die Angst zu nehmen:
Beim LCD hast du es mit Mindestzeiten zu tun!
D.h. du kannst die Zeiten alle beliebig lange machen. Auch Stunden, wenn 
du willst. Das spielt alles keine Rolle. Aber du kannst sie nicht 
beliebig kurz machen!

Im LCD werkelt selbet ein µC. Und der muss mit den Signalen bzw. 
Signalpegeln mitkommen können. Wenn dein Ansteuerprogramm langsamer als 
dieser µC agiert, dann ist das egal. Nur schneller darf es nicht sein.

von Johannes B. (aprendiz)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Im LCD werkelt selbet ein µC. Und der muss mit den Signalen bzw.
> Signalpegeln mitkommen können. Wenn dein Ansteuerprogramm langsamer als
> dieser µC agiert, dann ist das egal. Nur schneller darf es nicht sein.

Gut zu wissen, ich werde mich mit dieser Thematik noch ein wenig genauer 
befassen und versuchen das Problem mit feintuning zu lösen.
(Testweise alle Werte auf 100 ergeben auch nur Mist, also muss es ja die 
goldene Mitte sein)

Auf jeden Fall vielen vielen Dank für die Antworten und die Hilfe :)

Gruß Jo

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.