Atmega16 und LCD Tutorial

Gast #3698509
Lesenswert?

Hallo,

ich habe kurz eine Frage bzgl des LCD Tutorials (in C).

Ich benute den Code des Tuts schon seit zwei Jahren problemlos mit einem 
Atmega8. Nun habe ich das erste mal einen Atmega16. Nun klappt nichts 
mehr. Es wird nichts auf dem Display angezeigt.

Muss ich den Code des Atmega8 für einen Atmega16 irgendwie anpassen? 
(Von PIN-Belegung mal abgesehen).

Da bisher mit Atmega8 immer alle geklappt hat habe ich die Vermutung, 
dass evtl. mein Display kaputt ist.

VG
Helmut
Gast #3698541
Lesenswert?

Hier mal die Pin-Belegung:


Atmega    LCD
PD0       E
PD1       RS
PD2       Datenpin DB4
PD3       Datenpin DB5
PD4       Datenpin DB6
PD5       Datenpin DB7

Hab eben auch noch mal alle Lötstellen überprüft. Kein Fehler 
feststellbar. Der Poti zum Regeln des Kontrastes funktioniert 
einwandfrei.

Bin ratlos.
Gast #3698822
Lesenswert?

Aber sind doch an den oberen (4-7) oder was meinst du damit?


R/W ist auf GND zum schreiben. Kontrastspannung über Poti angeschlossen. 
Wenn ich am Poti schraube werden irgendwann alle Segmente der ersten 
Zeile des LCD komplett weiß (habe ein weiß/blaues LCD). Sollte also 
funktionieren oder?
#3698828
Lesenswert?

Er meint PD2-PD5. Das ist mitten drin vom Port dseitens des µC. Das 
könnte den Code etwas unübersichtlicher machen. um die Daten korrekt in 
die Mitte zu shiften.

R/W auf GND, dann kannst du das busyflag nicht auslesen.

Aus dem Tutorial:

" Deshalb kann man RW dauerhaft auf low lassen (= an GND anschließen), 
so dass man noch ein IO-Pin am Controller einspart. Der Nachteil ist, 
dass man dann das Busy-Flag nicht lesen kann, weswegen man nach jedem 
Befehl vorsichtshalber ein paar Mikrosekunden warten sollte, um dem LCD 
Zeit zum Ausführen des Befehls zu geben. Dummerweise schwankt die 
Ausführungszeit von Display zu Display und ist auch von der 
Betriebsspannung abhängig. Für professionellere Sachen also lieber den 
IO-Pin opfern und Busy abfragen."
Gast #3698989
Lesenswert?

klappt leider immer noch nicht. hab die Anschlüsse am AVR jetzt 
korrigiert (PD 0-3 sind datenleitungen).

Das R/W habe ich immer schon auf GND gelassen. Hatte das Display auch 
schon mal so betrieben. Aber nun funktioniert es mit einem Atmega16 
nicht mehr.
Gast #3699078
Lesenswert?

Ich benutze AVR Studio zum Programmieen und eXtreme Burner zum 
Überspielen auf den µC. Wenn ich jetzt im AVR Studio due Fußes einstelle 
aber mit einem anderen Programm (eXtreme Burner) überspiele, dann macht 
das keinen Sinn oder?

Leider kann man im eXtreme Burner nichts einstellen :(
Gast #3699128
Lesenswert?

Okay es klappt endlich.

Habe die Fuses über den Programmer programmiert bekommen. Nicht so 
leicht für nen Newbie ^^

Kann ich eigentlich auch einen anderen Wert als 1/4/8 Mhz nutzen?

bspw. 3,6864 Mhz ?
#3699172
Lesenswert?

Also war es ein Timing problem.
Unter anderem genau dafür ist das Bbusyflag da!

Entweder R/W auf GND und und das LCD garantiert langsam genug 
ansprechen, so daß es auch bei ungünstiger Versorgugsspannung noch 
reicht, oder das busyflag abfragen.

Helmut schrieb:
> Kann ich eigentlich auch einen anderen Wert als 1/4/8 Mhz nutzen?

Kannst Du, aber dann mußt du im Quelltext das Verhältnis von CPU-Takt zu 
LCD-Kommunikation anpassen, damit du das LCD nicht wieder überrennst, 
sofern das nicht automatisch im Quellcode erledigt wird. Und das ist ja 
hier ja offenbar nicht der Fall.

F_CPU ist zunächst einmal nur eine Konstante und hat keinen Einfluß auf 
den tatsächlichen Takt. Sinn und Zweck besteht darin hier den 
tatsächlichen Takt einzutragen und anschließend in taktabhängigen Teilen 
des Quellcodes diese Konstante zu verwenden, anstatt überall den Wert 
eintragen zu müssen.

Damit wird aber keinesfalls Takt für die Hardware vorgegeben! Man kann 
da auch völligen Unfug eintragen. Stimmt der Wert nicht mit dem 
tatsächlichen Takt überein, so kommen bei den Formeln im Quelltext 
natürlich falsche Werte heraus und das Programm arbeitet nicht korrekt, 
weil das Timing nicht stimmt. Verwendet der Quellcode diese Konstante 
nicht, so hat ein falscher Wert dann natürlich auch keine Konsequenzen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren