> wie muss ich den Code für die Initialisierung anpassen damit es passt?
Das Anpassen ist erst der zweite Schritt :-o
Der erste Schritt ist das Verstehen, was da gemacht wird: beim 4-Bit
Interface wird erst das High-Nibble (obere 4 Bits), dann das Low-Nibble
(untere 4 Bits) des zu übertragenden Bytes an das Display ausgegeben.
Das entsprechende Byte wird so zurechtgerückt, dass es auf die Pins
passt. Weil du eine andere Pinanordnung hast, mußt du anders rücken. Und
das vor jeder Ausgabe auf den Displayport. Das ist alles.
Exemplarisch hier der Anfang der Routinen, mit ein wenig Vergleichen und
Nachdenken dürften die anderen Routinen dann auch kein Problem mehr
sein. Änderungen sind mit *** gekennzeichnet:
1 | ;; DB4-DB7: PD4-PD7 ;;
|
2 | ;; RS: PD2 ;;
|
3 | ;; E: PD3 ;;
|
4 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
5 |
|
6 | .equ LCD_PORT = PORTD
|
7 | .equ LCD_DDR = DDRD
|
8 | .equ PIN_E = 3 ; ***
|
9 | .equ PIN_RS = 2 ; ***
|
10 |
|
11 | ;sendet ein Datenbyte an das LCD
|
12 | lcd_data:
|
13 | mov temp2, temp1 ; "Sicherungskopie" für
|
14 | ; die Übertragung des 2.Nibbles
|
15 | ; *** Vertauschen entfällt hier
|
16 | andi temp1, 0b11110000 ; *** unteres Nibble auf Null setzen
|
17 | sbr temp1, 1<<PIN_RS ; *** entspricht 0b00000100
|
18 | out LCD_PORT, temp1 ; ausgeben
|
19 | rcall lcd_enable ; Enable-Routine aufrufen
|
20 | ; 2. Nibble, kein swap da es schon
|
21 | ; an der richtigen stelle ist
|
22 | swap temp2 ; *** Vertauschen
|
23 | andi temp2, 0b11110000 ; *** unteres Nibble auf Null setzen
|
24 | sbr temp2, 1<<PIN_RS ; *** entspricht 0b00000100
|
25 | out LCD_PORT, temp2 ; ausgeben
|
26 | rcall lcd_enable ; Enable-Routine aufrufen
|
27 | rcall delay50us ; Delay-Routine aufrufen
|
28 | ret ; zurück zum Hauptprogramm
|