Hallo, ich möchte mit dieser Anleitung arbeiten: http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD#Anwendung Doch bei meinem Board von myavr sind die Ports anders belegt Die Datenbits 4-7 gehen auf Port D4-D7 RS=enable ist D2 und E=Enable ist D3 wie muss ich den Code für die Initialisierung anpassen damit es passt? Vielen Dank für die Antworten Wolfgang
> 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 |
Vielen Dank für die Antwort. Verstanden habe ich es! Doch arbeiten alle mit der gleichen Belegung außer myavr. Also habe ich mein Board umgebaut und nun geht alles wie gewünscht. Ich finde es gut das hier Antworten zum denken gegeben werden und nicht zum einfachen nachmachen. Weiter so!
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.