Hi, ich versuche zur Zeit mein LCD 162 von Displaytech (Datenblatt im Anhang) zu programmieren. Ich verwende einen ATMEGA8535 und programmiere in Assembler. Nun habe ich das Problem, dass sobald ich bei der Initialisierung die Daten für den Set_Function schicken möchte, das LCD mir überhaupt nichts mehr anzeigt. Wenn ich kein Set_Function übertrage sondern nur Display_on, dann kann ich mir Buchstaben und Zahlen darauf anzeigen lassen. Jedoch leider nur in der 1. Zeile. Weiss vielleicht jemand warum mein LCD nichts mehr anzeigt, wenn ich die Daten für den Set_Function schicke? Wäre echt wenn ihr mir da weiterhelfen könntet. Gruss Sven
Hier könnt ihr noch meine Initialisierung sehen. Habe mich dabei genau an das Datenblatt gehalten. Das Unterprogramm MS15T ist eine Zeitschleife mit 15 ms Verzögerung. rcall MS15T ;Wecken - Anfang ldi A, 0x30 ;DB4 + DB5 auf High out PortC, A sbi PORTA, 3 ;Enable High cbi PORTA, 3 ;Enable Low rcall MS15T ldi A, 0x30 ;DB4 + DB5 auf High out PortC, A sbi PORTA, 3 ;Enable High cbi PORTA, 3 ;Enable Low rcall MS15T ldi A, 0x30 ;DB4 + DB5 auf High out PortC, A sbi PORTA, 3 ;Enable High cbi PORTA, 3 ;Enable Low ;Set Function rcall MS15T ldi A, 0x38 ;Funktion: Alle 8 Bit werden auf einmal übertragen, 2. Zeile des Displays aktiviert, 5x7 Dots pro Zeichen out PORTC, A sbi PORTA, 3 ;Enable High cbi PORTA, 3 ;Enable Low ;Display löschen rcall MS15T ldi A, 0x01 out PortC, A ;Funktion: Display löschen sbi PORTA, 3 ;Enable High cbi PORTA, 3 ;Enable Low ;Entry Mode Set rcall MS15T ldi A, 0x06 ;Funktion: Cursor wird nach dem Ausgeben eines Buchstabens nach rechts geschoben out PORTC, A sbi PORTA, 3 ;Enable High cbi PORTA, 3 ;Enable Low ;Display On/Off rcall MS15T ldi A, 0x0C ;Funktion: Display an, Cursor aus, Cursor blinkt nicht out PORTC, A sbi PORTA, 3 ;Enable High cbi PORTA, 3 ;Enable Low
Mach den Enable Impuls mal etwas länger, die sind etwas kurz (1-2 nops dazwischen) und die Wartezeit vor dem ersten Befehl größer (mind. 50-100ms) falls du die BOD nicht aktiviert und auf >=4,0V gestellt hast. Wenn RS und RW passen, dann sieht der Code ansonsten OK aus.
Ich habe gerade ein paar Nops eingefügt. Hat leider nichts geändert. RS und RW habe ich während der ganzen Initialisierung auf Low liegen. Müsste also auch passen. Keine Ahnung was ich noch machen soll.
Oh ich merk gerade das ich das Datenblatt gar nicht im Anhang hatte :D
Hi, mittlerweile funkitoniert die Initialisierung. Hast doch recht gehabt Benedikt. Ich habe am Anfang zwischen der Enable High-Low Flanke zwei Nops reingesetzt. sbi PORTA, 3 ;Enable High nop nop cbi PORTA, 3 ;Enable Low Das hat leider nichts gebracht. Anschließend habe ich Enable über ein Register gesetzt bzw. gezurückzusetzt. ldi A, 0x08 out PortA, A ldi A, 0x00 out PortA, A Ich denke das es nun funktioniert weil das Display nun zwischen den Flanken genug Zeit hat um den Befehl zu bearbeiten. Nochmals Danke. Gruss Sven
Was ist denn noch an PortA angeschlossen? Das klingt sehr danach, als wenn irgendein anderer Pin falsch wäre und durch das Beschreiben von PortA richtig auf Low gesetzt wird (z.B. RS oder RW). Denn deine zweite Lösung ist schneller als die sbi/cbi Version.
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.