hoi, ich habe das gleiche problem wie der thread öffner von: Beitrag "Re: Display (HD4478099) zeigt nur Kästchen" meine pin belegung: lcd atmega32 1 GND 2 VCC (5V) 3 PD5 ( wird per PWM geregelt) 4 PB0 5 PB1 6 PB2 7 PC7 . . 14 PC0 15 PD4 16 GND (das lcd hat zwar BL connects, ist aber nicht die 161A LED version) der Atmega32 läuft mit 16MHz, ich nehme die lcd routinen aus dem tutorial.. die leicht abgeändert wurden, da 16Mhz statt 8MHz, und die Pinbelegung anders ist.. die belegung PC7-PC0 an DB0-DB7 wird durch eine fkt Mirrordata behoben. die source dateien findet ihr im anhang... grüüüße und danke
Gast
#566781
Nur kurz mal reingeguckt... aber wenn ich mich recht erinnere steuern die Routinen aus dem Tutorial das LCD im 4-Bit-Mode an. Wenn du schon 8 Pins für die Daten "opferst" solltest du das LCD auch im 8-Bit-Mode initialisieren.
Gast
#566806
Hallo, Du nimmst die 4Bit-Routinen, da Du alle 8 Bit dran hast, wäre 8Bit sicher sinnvoller, wie oben schon geschrieben. Prinzipiell würde der 4Bit-Mode erstmal nicht stören, wenn...
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Die daten werden hier füe eine 4-Bit-Beschaltung mit D4...D7 an PB0...PB3 bereitgestellt. Init beginnt mit 0b00110000 wenn die Daten auf den richtigen Bits des Displays landen sollen. Entweder init anpassen oder den Kram komplett auf 8Bit umstellen, wenn Du sowieso alle Leitungen dran hast. Gruß aus Berlin Michael
hmm ok danke, aber DB4-DB7 wird auf PC3-PC0 (gespiegelt) bereitgestellt ich habe die initroutine nun überschrieben,.. und gehe nach der initialsisierung ausm datasheet (s.6 initialisation by instruction)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
dennoch schwarze blöcke... ich geh nochmal die pin belegung durch,....
Gast
#566847
Hallo,
irgendwas stimmt da nicht. Du bist irgendwie ein Bit zu weit rechts?
hier mal aus einer meiner alten Sourcen rausgeschnitten:
[/avrasm]
lcd_init:
rcall lcd_reset
cbi LCD_CTRL,LCD_RS
ldi TEMP_A,$38 ; 8Bit - Mode, 2 Zeilen
rcall lcd_control
ldi TEMP_A,$80 ; DDRAM auf Anfang
rcall lcd_control
ldi TEMP_A,$01 ; Display löschen
rcall lcd_control
rcall wait_5ms
ldi TEMP_A,$06 ; Increment, Not Shiftet
rcall lcd_control
ldi TEMP_A,$10 ; Cursor Move, Shift off
rcall lcd_control
ldi TEMP_A,$0C ; Display an, Cursor aus
rcall lcd_control
ret
lcd_reset:
rcall wait_5ms
rcall wait_5ms
rcall wait_5ms
cbi LCD_CTRL,LCD_RS ; Register auf Control
ldi TEMP_A,$30
out LCD_OUT,TEMP_A
rcall lcd_clock
rcall wait_5ms
rcall lcd_clock
rcall wait_5ms
rcall lcd_clock
rcall wait_5ms
ret
lcd_clock:
sbi LCD_CTRL,LCD_E ; E auf 1
nop
nop
nop
cbi LCD_CTRL,LCD_E ; E auf 0
ret
[/avrasm]
Gruß aus Berlin
Michael
Gast
#566849
Hallo, *****ß Copy & Paste. ;) Naja, ist ja noch lesbar. Gruß aus Berlin Michael
die ausgabe ist doch gespiegelt.. DB0 = PB7 DB1 = PB6 usw... (ja war lesbar :) ) grüüüße
Gast
#566863
Hallo, Du sendet hier rcall delay5ms dec temp3 brne powerupwait ldi temp1, 0b00001100 ; muss 3mal hintereinander gesendet das muß aber eigentlich 0b00110000 sein... Gruß aus Berlin Michael
hmmm krass, ich habs mal getauscht,. und es funzt!!!!(????) danke :D (aber wieso????)
jo hi, ich nochmal,.. bei mir funktionieren nur die ersten 8 zeichen,.. muss ich das display shiften? grüüüße kai
Gast
#567471
Erste und zweite Zeile liegen im Speicher nicht direkt beieinander. Um in die zweite Zeile zu kommen musst du an eine bestimmte Adresse springen. Sollte im Datenblatt stehen, war glaub ich 0x40 oder so.
Kai Scheddin wrote: > bei mir funktionieren nur die ersten 8 zeichen,.. > muss ich das display shiften? Ich vermute, das Display hat zwei logische Zeilen à 8 Zeichen. Die zweite Zeile (also die letzten 8 Zeichen) fängt dann vermutlich bei Adresse 0x40 an.
Gast
#567473
Das Display 161A (meins ist von Reichelt) ist in zwei Bereiche geteilt! Siehe Datenblatt; dort steht die Adressierung. Ich machs so, dass wenn eine gewisse Anzahl an Zeichen überschritten wird (8, es wird immer mitgezählt), dann setze ich eben eine neue Adresse und schreibe weiter.
jo danke jungs,.. :D
die standart character palette kann man doch überschreiben oder? grüüüße
Gast
#567622
Nein, mit den (chinesischen?) Schriftzeichen musst du wohl leben ;-) Du hast aber 8 frei definierbare Zeichen
jo hallo, ich nochmal, ich habe ein bisschen rumgespielt um die zeichen halt positionsgenau zu setzen, ohne für mich ersichtlichen grund hat das display dann immer nur zweimal hintereinander dieses delta (oder was es darstellen mag) angezeigt, egal wie ich den µC geproggt habe. Naja stromquelle aus, stromquelle wieder an und bums nur diese kontrasst hintergrund zeichen sind wieder da.... danach habe ich den source versucht wieder in einem zustand zu bringen wie es alles mal funktioniert hat, leider funktioniert wieder nichts, Es währ nett wenn ihr euch mal den source durchseht, danke und grüüüße der kai
ok, leider hat sich bis jetzt niemand gemeldet, aber ich herausgefunden das der source sich in der init routine in eine endlosschleife verfängt, die background kästchen sind weg, aber auf der anzeige tut sich immer noch nüscht,... naja ich werde nachher nochmal ein frischen source anhängen grüüüüße :D
Guten morgen :) ich habe noch eine frage zum Busy Flag und dem ddram zeiger,.. anstatt immer ein delay abzuwarten wollte ich gucke ob das bf noch gesetzt ist und den dd-ram zeiger zur positionsbestimmung abfragen, dammit ich nicht selber immer mitzählen muss,.. leider scheint das net sooo zu klappen,... hier der source von der bf routine:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
bei der ausgabe routine hatte ich das:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
also die routine zeigt mir ohne zusätzliche delay func. erst mal gar nix an, und wenn die drinn ist zeigt sie nur in einem bereich an,.. hmmm kann mir jemand bitte etwas dazu sagen? thx leuts
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.