Hallo zusammen, nach meinen ersten Übungsstunden mit dem ATmega16 bin ich nun am Thema LCD angelangt und hab mir hierzu ein das oben genannte Display beim Reichelt gekauft: http://docs-europe.origin.electrocomponents.com/webdocs/06dd/0900766b806dda16.pdf So, anhand des hier beschriebenen Tutorials http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung wollte ich es natürlich gleich mal ausprobieren. Leider bisher ohne Erfolg. Befehlssatz und Zeiten müssten ja passen bei dem Modul, habs mir mal alles etwas durchgesehen. Die schwarzen Balken auf dem LCD sind nicht da, es wird lediglich eines der Stellen kompett schwarz ausgegeben und ein Pfeil steht an anderer Stelle. Ausgegeben soll ja "Hallo World!" werden... Meine Vermutung war anfangs Timingprobleme, dann hab ich entdeckt dass im Makefile 8MHz statt 16MHz (16MHz Quarz am Atmega) drinstand. Im Headerfile des c-files der lcd routine hab ich nun auch 16 MHz drinstehen. Ähm, bevor einer fragt...Hardwaretechnisch ist es richtig verbunden, hab dazu Port C verwendet und möchte es im 4-Bit mode betreiben. Die Kontrastspannun liegt auf GND, hoffe es hat nichts damit zu tun? Denn zumindest wird ja was angezeigt, wenn auch falsch. Hat wer Erfahrungen mit dem LCD-Controller, oder wo könnten Fehler sein, wenn ich schon 1:1 den Code aus dem Tut. kopiert habe?! Schöne Grüße, MG
Hi >Ähm, bevor einer fragt...Hardwaretechnisch ist es richtig verbunden, hab >dazu Port C verwendet und möchte es im 4-Bit mode betreiben. Reflexartig: JTAG abgeschaltet? MfG Spess
Wird die Funktion über die fusebits oder über mein Programm und Register deaktiviert?
Hi >Wird die Funktion über die fusebits oder über mein Programm und Register >deaktiviert? Es gibt beide Möglichkeiten. Wenn du nicht Debuggen willst ist wegfusen einfacher. MfG Spess
In dem AVR-GCC Tut steht hier folgendes: /* Beispiel Anfang JTAG-Interface eines ATmega16 per Software deaktivieren und damit die JTAG-Pins an PORTC für "general I/O" nutzbar machen ohne die JTAG-Fuse-Bit zu aendern. Dazu ist eine "timed sequence" einzuhalten (vgl Datenblatt ATmega16, Stand 10/04, S. 229): Das JTD-Bit muss zweimal innerhalb von 4 Taktzyklen geschrieben werden. Ein Interrupt zwischen den beiden Schreibzugriffen wuerde die erforderliche Sequenz "brechen", das JTAG-Interface bliebe weiterhin aktiv und die IO-Pins weiterhin für JTAG reserviert. */ MCUCSR |= (1<<JTD); MCUCSR |= (1<<JTD); // 2 mal in Folge ,vgl. Datenblatt fuer mehr Information Wenn ich das in die main-routine reinsetze bevor ich das display initialisiere kommt weiterhin Müll raus, nur dass jetzt der Curser blinkt. Dann schau ich mich mal um die fusebits...
Hi
>Fusebit auf 0 bringt leider auch nix :-(
Dann bleibt nur noch dein Programm übrig.
MfG Spess
Dann zeig doch mal dein Programm und den Schaltplan. Ich habe das 162C schon mehrfach ohne Probleme eingesetzt. Hast Du vielleicht am Display DB0-3 statt DB4-7 benutzt? Das waren meine häufigsten Fehler dabei ;) Die angehängte Datei ist mein AVR-Studio Projekt zum Test eines Displays. Das sollte funktionieren. ATmega88, Fuses im Auslieferungszustand, also 1MHz.
Hi > Ausgegeben soll ja "Hallo World!" werden... Vielleicht solltest du erst mal kleinere Brötchen backen. Speck das Programm auf das Notwendigste, also LCD-Init und Ausgabe von einem Zeichen, ab. Erst wenn das funktioniert, kannst du anfangen Strings auszugeben. >Ohne debugging und Oszi ist dass halt immer so ne Sache :-) Meine ersten LCDs/GLCDs habe ich auch ohne das (und ohne Internet) zu Laufen bekommen. MfG Spess
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.