Hab da ein Stück Code:
.equ lcdrs =PD0 ;LCD rs Pin connected to PD6
.equ lcdrw =PD1 ;LCD r/w Pin connected to PD5
.equ lcde =PD2 ;LCD e Pin connected to PD4
; das sind die Steuerleitungen,das wurde bereits geändert
-------------------------------------------------
WO WIRD DAS FESTGELEGT ?
;D4-D7 FROM LCD IS CONNECTED TO PORTD PD0-PD3
Wo müsste da geändert werden,um auf PORTD PD4-PD7 die
LCD Daten auszugeben ?
(Die LCD's sind mit Flachbandkabeln fix verpresst,Entlöten fast
unmöglich,
)
-------------------------------------------------
lcdinit:
ldi wreg,0 ;Setup port pins
out PORTD,wreg ;Pull all pins low
ldi wreg,0xff ;All pins are outputs
out DDRD,wreg
ldi timeout,255 ;Wait at least 15 mS at power up
rcall delay
ldi wreg,3 ;Function set
out PORTD,wreg
; rcall strobe ;Toggle enable line
sbi PORTD,lcde ;Toggle enable line
cbi PORTD,lcde
ldi timeout,65 ;Wait at least 4.1 mS
rcall delay
ldi wreg,3 ;Function set
out PORTD,wreg
; rcall strobe ;Toggle enable line
sbi PORTD,lcde ;Toggle enable line
cbi PORTD,lcde
ldi timeout,2 ;Wait at least 100 uS
rcall delay
ldi wreg,3 ;Function set
out PORTD,wreg
; rcall strobe ;Toggle enable line
sbi PORTD,lcde ;Toggle enable line
cbi PORTD,lcde
ldi wreg,2 ;Function set, 4 line interface
out PORTD,wreg
; rcall strobe ;Toggle enable line
sbi PORTD,lcde ;Toggle enable line
cbi PORTD,lcde
ldi wreg,0b11110000 ;Make 4 data lines inputs
out DDRD,wreg
; At this point, the normal 4 wire command routine can be used
ldi wreg,0b00100000 ;Function set, 4 wire, 2 line, 5x7 font
rcall lcdcmd
ldi wreg,0b00001110 ;Display on, cursor on, blink off
rcall lcdcmd
ldi wreg,0b00000110 ;Address increment, no scrolling
rcall lcdcmd
ret
mfg Karl
Karl T. schrieb: > ------------------------------------------------- > WO WIRD DAS FESTGELEGT ? > ;D4-D7 FROM LCD IS CONNECTED TO PORTD PD0-PD3 > Wo müsste da geändert werden,um auf PORTD PD4-PD7 die > LCD Daten auszugeben ? zb hier > ldi wreg,3 ;Function set > out PORTD,wreg 3 wird am PORTD ausgegeben. Damit tauchen die Bits an D0 bis D3 auf (und auch D4 bis D7 werden auf 0 gesetzt. Aber das scheint hier nicht zu stören) > ldi wreg,3 ;Function set > out PORTD,wreg noch mal > ldi wreg,3 ;Function set > out PORTD,wreg und nochmal > ldi wreg,2 ;Function set, 4 line interface > out PORTD,wreg eine weitere Ausgabe > ldi wreg,0b11110000 ;Make 4 data lines inputs > > > out DDRD,wreg Das ist eigenartig. Warum soll man die Datenleitungen Input machen > > ; At this point, the normal 4 wire command routine can be used > > ldi wreg,0b00100000 ;Function set, 4 wire, 2 line, 5x7 font > rcall lcdcmd die Funktion muss angepasst werden Überall dort, wo ein Byte komplett an den PORTD ausgegeben wird (da sind dann nur 4 Bits interessant), muss nachgearbeitet werden, wenn die Datenleitungen umziehen. Der Code ist nicht so geschrieben, dass man die Datenleitungen leicht mit ein paar einfachen Änderungen umlegen kann.
Karl Heinz Buchegger schrieb: > Das ist eigenartig. Warum soll man die Datenleitungen Input machen Evtl., um vom LCD zu lesen, z.B. RAM-Inhalt oder Status
Michael A. schrieb: > Karl Heinz Buchegger schrieb: >> Das ist eigenartig. Warum soll man die Datenleitungen Input machen > > Evtl., um vom LCD zu lesen, z.B. RAM-Inhalt oder Status
1 | ... |
2 | cbi PORTD,lcde |
3 | ldi wreg,0b11110000 ;Make 4 data lines inputs |
4 | |
5 | |
6 | out DDRD,wreg |
7 | |
8 | ; At this point, the normal 4 wire command routine can be used |
9 | |
10 | ldi wreg,0b00100000 ;Function set, 4 wire, 2 line, 5x7 font |
11 | rcall lcdcmd |
Wär möglich, wenn auch ungewöhnlich. Umschalten der Datenleitungen auf Input ist ungewöhnlich vor dem Aufruf von lcdcmd. Aber man müsste die Funktion sehen um das genauer zu entscheiden, ob da ein Busy Wait im Spiel ist (und selbst dann sollte die Funktion das IMHO selber machen). Aber egal. Erst mal so lassen und an die geänderte Pinbelegung anpassen. Nicht zu viel auf einmal ändern.
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.