Hallo Leute, ich habe hier ein Display mit 2x8. Es lässt sich initialisieren und auch Zeichen wiedergeben. Allerdings wir beim schreiben oder lesen aufs display die DDRAM-Adresse incrementiert. Ist ja auch so eingestellt. Da ich aber immer das Busy-Flag abfrage muss ich die DDRAM-Adresse korigieren. Hier ist mein Problem dass es laut Datenblatt wie bei all den anderen Hitachi kompatiblen displays ist. Allerdings ist es bei mir so dass sich das display nach Beschreiben der DDRAM-Adresse nicht mehr ansprechen lassen kann. Sprich ich lese nanach immer dass das Display Busy ist. weiss einer nen Rat? gruss, pete
Hallo, irgendwie komm ich hier nicht weiter. in die 2te zeile komme ich erst wenn ich so lange schreibe bis ich bei Adresse 0x40 gelandet bin. Somit funktionieren zumindest beide Zeilen. Aber ich kann immer noch nicht den Cursor auf eine bestimmte position setzen. zwischen jedem schreiben und lesen warte ich 2msec. die Initialisierung sieht wie folgt aus: FunktionSET (8bit, 2-zeilig, 5x7font) DisplayOFF LCDClear LCDModeSet (curser hochzählen) LCDON LCDHome (setze cursor auf Adresse 0x00) dass funktioniert alles prima. Dann kann ich auf der ersten Zeile was schreiben. Wenn ich aber die Adresse beschreiben will sprich den cursor wo anders hin setzten möchte (zeile 1: 0x00 bis 0x07, zeile 2 0x40 bis 0x47) dann kann ich danach das Display nicht beschreiben da das Busy flag gesetzt bleibt. Wenn ich diese ignoriere und weiter schreibe. Steht der Cursor auf der letzten position. Sprich es sieht so aus als ob da nichts passiert wäre. Was könnte denn mein fehler sein??? gruss, pete
ja das problem mit dem cusor hatte ich auch mal, und zwar so: in der ersten zeile konnte ich den cursor beliebig verschieben, und ich konnte in auf 0x40 also 2. zeile verschieben, aber in der zweiten zeile nicht an eine beliebige stelle, er landete immer an 0x40. hat da jemand infos? uLuxx
Welcher LCD-Controller? Bei manchen kann man das Inc für jede Zeile getrennt einstellen.
Hallo, ist in der Zwischenzeit eine Lösung gefunden worden? Habe leider dasselbe Problem. Benutze ein Batronix ISP-Board mit einem Atmel T89C51-AC2 und einem LCD von Displaytech (162C) mit einem HD44780. Kann den Cursor in der 1. Zeile verschieben, aber den Cursor an keine Spalte direkt setzen. Die 2. Zeile wird nur durch Zufall mal erreicht. Habe meinen Quelltext angehängt. Hoffentlich kann mir jemand helfen, ich bin am verzweifeln... Danke, Markus
Ich kenne keine LCD´s bei denen der Adressbereich kontinuierlich durchgeht für 2-zeilige (oder mehr) displays durchgeht. Da ist immer ein Offset dazwischen. Genaues sagt das Datenblatt. Das Busy-Flag kann man direkt unter seiner Adresse auslesen, dazu braucht man den Pointer nicht zu ändern. Allerdings muss man die Flag-Adresse 2 mal lesen falls das Display im 4 Bit Modus angesteuert wird.
Jo, laut datenblatt 1.Zeile 0x00, 2.Zeile 0x40, für den 162C eine routine zum schreiben, der schreibt von links nach rechts und überspringt dabei die bandlücke (muhahaha, typisch phyisk) (8Bit modus, Char @ temp1) Der rest ist im anhang, falls ihr fragen habt, könnt ihr mir auch eine mail schreiben,.. grüüüüße
1 | ;####################################################################################################### |
2 | ;Routine lcd_data_trans_l |
3 | ; uses specific delay routine |
4 | ; and sets automaticly the right addressroom |
5 | ;####################################################################################################### |
6 | lcd_data_trans_l: |
7 | ldi temp1,0x00 |
8 | out lcd_port,temp1 |
9 | rcall delay50us |
10 | |
11 | cpi lcd_pos_counter,8 |
12 | brlt low_pos_l |
13 | |
14 | high_pos_l:mov temp2,lcd_pos_counter |
15 | subi temp2,8 |
16 | ldi temp1,0x40 |
17 | add temp1,temp2 |
18 | ori temp1,0b10000000 |
19 | out lcd_port,temp1 |
20 | rcall lcd_enable |
21 | rjmp pos_set_l |
22 | |
23 | low_pos_l: ldi temp1,0b10000000 |
24 | or temp1,lcd_pos_counter |
25 | out lcd_port,temp1 |
26 | rcall lcd_enable |
27 | |
28 | pos_set_l: rcall delay50us |
29 | sbi lcd_ctrl,lcd_RS ;set Enable |
30 | sbi lcd_ctrl,lcd_E ;set RS |
31 | out lcd_port,lcd_data ;set Port with Data |
32 | nop ;wait 7 cycles (normaly 6, +1 to be sure) |
33 | nop |
34 | nop |
35 | nop |
36 | nop |
37 | nop |
38 | nop |
39 | cbi lcd_ctrl,lcd_E ;clear Enable |
40 | cbi lcd_ctrl,lcd_RS ;clear RS |
41 | cpi lcd_pos_counter,16 |
42 | brge l_pos_too_high |
43 | inc lcd_pos_counter |
44 | ret ;return |
45 | l_pos_too_high: |
46 | ldi lcd_pos_counter,0 |
47 | ret |
48 | ;####################################################################################################### |
49 | |
50 | ;####################################################################################################### |
Nochmal zum Verständnis: Du springst nicht direkt auf eine bestimmte Zeile/Spalte, sondern verschiebst einfach den Cursor solange (???nach rechts???) bis du die gewünschte Zeile/Spalte erreicht hast?
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.