Forum: Mikrocontroller und Digitale Elektronik Atmel LCD Tutorial Port wechseln


von Wolfgang B. (apfelwolle)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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

von Wolfgang B. (apfelwolle)


Lesenswert?

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
Noch kein Account? Hier anmelden.