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.