Forum: Mikrocontroller und Digitale Elektronik LCD Blau am Atmega 64


von Matthias L. (mcl024)


Lesenswert?

Hallo

ich habe folgendes Problem. Ich benutze die LCD routines von dem
Tutorial auf dieser Seite.
Die funktionieren auch wunderbar mit einem Atmega 32 und einem Display
2*16 Zeichen schwarz auf grün. Nun benutze ich genau die selben routinen
mit einem Atmega64 und einem Display 2*16 Zeichen weiß auf blau. Es
funktioniert aber nicht. Es passiert nichts. Ich habe sämtliche
Anschlüsse schon kontrolliert. Das einzige was ich jetzt anders mache
ist das ich am Atmega64 PortC benutze und nicht wie vorher am Atmega32
PortD. Habe dieses aber schon in der lcd-routines.h geändert. Der 
Controller scheint irgendwie in der lcd_init zu hängen denn der folgende 
Code wird nicht mehr ausgeführt.
Ich weiss einfach nicht weiter.

Gruss mcl024

: Verschoben durch Admin
von Peter M. (pmahlknecht)


Lesenswert?

jtag deaktiviert? Ich glaub der ist beim Mega64 auf PortC.

von holger (Gast)


Lesenswert?

>Der Controller scheint irgendwie in der lcd_init zu hängen
> denn der folgende
>Code wird nicht mehr ausgeführt.

Die LCD Routinen aus dem Tutorial können
nicht hängen. Warum nicht?
Das Busy vom LCD wird nicht abgefragt.
Dein Code ist SCHROTT.

von Matthias L. (mcl024)


Lesenswert?

Im Anschluss der lcd_init lass ich eine Led blinken. Diese blinkt nur 
wenn ich die lcd_init auskommentiere. Und ich habe nichts am Code 
geändert aus die Anschlüsse in der Header datei.

von holger (Gast)


Lesenswert?

Wird der Code auch für einen ATMega64 übersetzt?

Ohne makefile und Sourcecode zu sehen kann dir keiner sagen
was da nicht stimmt.

von Matthias L. (mcl024)


Angehängte Dateien:

Lesenswert?

Jtag deaktivieren bringt nichts.
Anbei der Code und Makefile. Erster Abschnitt ist lcd-routines.h danach 
lcd-routines.c dann folgt mein eigener Code und zum Schluss habe ich das 
Makefile noch anghängt.

von holger (Gast)


Lesenswert?

Ich sehe da nichts wo der Mega sich aufhängen könnte.
Check mal ob du einen Kurzschluß auf den LCD Leitungen hast.

von M. K. (kichi)


Lesenswert?

Haben beide LCDs (wirklich) denselben Controller?

von Matthias L. (mcl024)


Lesenswert?

Das LCD welches mit dem Atmega32 funktioniert hat den KS0070B und das 
LCD mit dem Atmega64 hat den HD44780.
Komisch finde ich nur das der Atmega64 nur in die for-Schleife geht wenn 
ich die lcd_init auskommentiere. Das kann doch nicht sein.

von M. K. (kichi)


Lesenswert?

Ich denke dann solltest du dir zuerst mal die Initialisierungssequenzen 
der Controller zu Gemüte führen und vergleichen...

von holger (Gast)


Lesenswert?

>Ich denke dann solltest du dir zuerst mal die Initialisierungssequenzen
>der Controller zu Gemüte führen und vergleichen...

Das kann es nicht sein. Da kriegt er höchstens
Probleme mit der Anzeige. Hängen kann lcd_init() nicht.
Es sei denn bei den delay Routinen. Das glaube ich aber
auch nicht. F_CPU ist definiert und Optimierung ist an.

Arbeite dich doch mal mit der LED durch lcd_init()

PORTD |= (1<<PD4);

Fang ganz oben an.
Compilieren, brennen ausprobieren.
Wenn sie leuchtet den nächsten Befehl überspringen
und dort die LED einschalten.
Dann das ganze Spiel von vorne. Wenn sie nicht mehr
leuchtet hat du das Problem gefunden.

von Matthias L. (mcl024)


Lesenswert?

ich habe bereits die lcd_init() immer Stückweise auskommentiert. Selbst 
wenn ich den gesamten Inhalt der Funktion auskommentiere, geht der 
Controller nicht in die for-schleife.
Das kann doch alles nicht sein.

von holger (Gast)


Lesenswert?

Oh man! Da hätt ich schon eher drauf kommen können. ;)

Deaktiviere mal die M103C Fuse.
Atmega103 compatability mode.

von Matthias L. (mcl024)


Lesenswert?

Wahnsinn es geht!!!!!

Was bedeutet die M103C Fuse?? Warum muss ich das beim Atmega32 nicht 
machen??

von Falk B. (falk)


Lesenswert?


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.