Hallo Leute, ersteinmal möchte ich loswerden, dass ich blutiger Anfänger in Sachen Programmierung und µC bin. Ist auch mein erster Post hier im Forum. Nunja dann wollen wir mal. Ich habe ein 4x20 LCD bei Reichelt erworben und nun gibt es ja die Möglichkeit 8 eigene Zeichen im CGRAM zu speichern. Dazu nutze ich die lcd_bigdigits funktion, welche ihr im Anhang findet. Der restliche Code ist der aus dem Assembler Tutorial. Das eigentliche Problem, zu dem ich hier im Forum nichts leider nichts finden konnte, ist, dass die übertragenen 8 Zeichen allesamt falsch dargestellt werden. (siehe Bild). http://img178.imageshack.us/img178/2636/dsc00466yr1.jpg Irgendwas scheint also nicht richtig zu funktionieren oder der Code den ich geschrieben habe ist schlichtweg fehlerhaft. Es wäre nett wenn jemand von euch mal schnell einen Blick drüber werfen könnte. Im Hauptprogramm lasse ich die Zeichen hinternander ausgeben: ldi temp1, $0 rcall lcd_data ldi temp1, $1 rcall lcd_data .... usw ... Danke schonmal für eure Hilfe
Du veränderst temp1 in lcd_data. Das wird also nix: ldi temp1, 0b00011111 rcall lcd_data rcall lcd_data
Jetzt sieht es schon besser aus, allerdings sind die Zeichen irgendwie um 2 Zeilen verschoben http://img230.imageshack.us/img230/7742/dsc00467ey1.jpg Könnt ihr da was finden? Muss ich nach jeder Zeichendefinition den Character RAM Zeiger auf die Startadresse des nächsten Zeichens setzen, oder springt dieser von alleine weiter?
>Muss ich nach jeder Zeichendefinition den Character RAM Zeiger auf die >Startadresse des nächsten Zeichens setzen, oder springt dieser von >alleine weiter? Der springt von alleine weiter. Aber kannst es ja mal ausprobieren. Irgendwie hat nach dem setzen der CG-RAM Adresse scheinbar der Zähler schon von alleine 2 Schritte weitergezählt. Wenn das mal nicht an deinem Aufbau liegt. Gibt es bei Texten auch solche Merkwürdigkeiten?
Nope, Text wird ganz normal ausgegeben. Nur meine eigenen Zeichen funktionieren nicht.
Okay jetzt funktionierts. Bin eben nochmal ins Tutorial eingestiegen und bin zufällig auf folgendes gestoßen: ; erzeugt den Enable-Puls ; ; Bei höherem Takt (>= 8 MHz) kann es notwendig sein, ; vor dem Enable High 1-2 Wartetakte (nop) einzufügen. ; Siehe dazu Beitrag "Re: Bitte helft mir. Schon wieder AtMega16" lcd_enable: sbi PORTD, 5 ; Enable high nop ; 3 Taktzyklen warten nop nop cbi PORTD, 5 ; Enable wieder low ret ; Und wieder zurück Da ich meinen Mega8 mit 8MHz betreibe war also ein zusätzliches nop vor dem enable high notwendig. Trotzdem Danke
Hallo, bitte um Hilfe versuche ein Paar Buchstaben auf ein LCD auszugeben aber funktioniert leider nicht ! habe hier viel gelesen und ausprobiert aber klappt einfach nicht :-) . bin nach dem Tutorial bzw. mit dem Code von Tutorial (Asembler)und nichts, habe jetzt mit dem Code von : Beitrag "LCD Ansteuerung im 4bit-Modus" in C und auch nichts! LCD Barton 4x20 mit HD44780 (habe mit adere LCD und auch nichts) Atmega16, an LCD sehe ich nur die 4x20 Schwarze Kasten ! vielen Dank für die Hilfe Gruß Martin
>LCD Barton 4x20 mit HD44780 (habe mit adere LCD und auch nichts) >Atmega16, an LCD sehe ich nur die 4x20 Schwarze Kasten ! Dreh mal am Kontrastregler.
Hallo Holger, danke für die schnelle Anwort! mit dem Kontrastregler habe ich schon mal probiert aber auch nichts, habe gerade 2 Fehler gefunden in der "C Code" (.h) waren die Pins RS und E vertausch, dort steht auch das die Pins (von LCD) Datenbits 0-3 sollten auf GND sein, jetzt sehe ich am LCD nur 2x20 Kasten aber von "Hallo Word" immer noch nichts :-( Martin
>waren die Pins RS und >E vertausch Wenn du die Datenleitungen auch noch mal kontrollierst und richtig anschliesst wirds schon klappen.
Ich hätte mal eine weitere Frage.... ich habe jetzt die 8 eigenen Zeichen erfolgreich hinbekommen.... nur bräuchte ich mehr... Ist es möglich während dem Programmablauf weitere zu programmieren,, und damit andere überschreiben? Ich hätte gerne Zahlen über 3 Zeilen... Aber die 7 sieht scheiße aus, deshalb die Frage ob ich für die sieben dann nicht einfach neue Zeichen programmieren kann, die dann in den RAM vom LCD legen und abrufen, und bei der nächsten Zahl wieder neue generieren?
Hi
>Ist es möglich während dem Programmablauf weitere zu programmieren
Ja. Aber du kannst nur die darstellen, die sich im CG-RAM befinden.
MfG Spess
Hallo, die Zeichen werden genauso wie aus dem Char-ROM des Displays vom Displaycontroller zyklisch zur Anzeige ausgelesen. Wenn Du umdefinierst erscheint das neue Symbol an allen Stellen im Displaystatt des alten Zeichens. Warum nimmst Du für sowas kein Grafikdisplay? Gruß aus Berlin Michael
Ich finde kein passendes Grafikdisplay von den Maßen her. Ich habe ein 4x20 von EA. Kennt ihr ein von der Größe her vergleichbares Grafikdisplay? Sollte mindestens 70mm breit und 30 hoch sein, jedoch nicht über 100mm und 45mm. Wäre super wenn mir einer weiterhelfen könnte ;) Habe schon 100 mal den Reichelt Katalog durchgeblättert. Gruß Andreas
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.