Spitfire
03.08.2012, 03:04
Hallo zusammen !!!
Ich bin gerade dabei, AVR-Tutorial bei http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD durchzuarbeiten. Jetzt ist es endlich soweit ein LCD anzuschließen. Nur ist da leider für einen Anfänger die erklärung recht schwer zu durchblicken. Ich habe im Netz zwar einiges gefunden, was mir aber bei meinem jetzigen Wissen über Assembler, Atmega und co. nicht recht hilfreich war. Ich benutze das Display Blueline Dotmatrix (EA W162B-N3LW) von Reichelt (http://such002.reichelt.de/?SID=13UBbXsX8AAAIAAAJdO3k729f9c8d5488f23088873d62 1565c65f;ACTION=446). Im Turtorial steht das
$3 und ein paar µs warten öfters im das Steuerregister geschrieben werden soll, aber wer, was wo :confused: ist das Steuerregister.
Ich habe es mit den angaben im Datenblatt (dem Display beigelegt, und bei Reichlt als download verfügbar) versucht. Hierbei soll folgendes am Port ausgegeben werden:
.........RS......RW.....DB7.....DB6........DB5...D B4
.........0........0........0.........0...........1 ......0...............4-Bit Datenlänge einschalten (noch im 8-Bit Modus)
RS = PD4
RW = PD5
DB7 = PD3
DB6 = PD2
DB5 = PD1
DB4 = PD0
Mit ldi r16, 0b00000010 soll bei der Ausgabe auf PD1 ein 1 ausgegeben werden. Der Rest sollte mit 0 belegt werden. Mit dem anschließenden out PORTD, r16 sollten die Ausgänge dementsprechend belegt werden.
Hier noch der gesammte Quelltext:
.include "m8def.inc"
.include "lcd-routines.c"
ldi r16, 0xFF
out DDRD,r16 ;Im Datenrichtungsregister PORTD als Ausgang deklarieren
ldi r16, 0b00000010
nop ;Dem Diplay Zeit geben um sich selbst zu initialisieren
nop
nop
nop
nop
nop
out PORTD, r16
nop ;Dem Diplay Zeit geben um sich selbst zu initialisieren
nop
nop
nop
nop
nop
ldi r16, 125 ;Ab dieser Zeile ist das Programm nur Abgeschrieben
mov r17,r16 ; Kopie von r16 in r17 eintragen
swap r16 ; vertauscht die beiden Nibbles von r16 (Die Bit´s 0-3 und 4-8 werden vertauscht)
andi r16, 0b00001111 ; Nur die vier unteren (mit 1 markierten)
; Bits werden übernommen, alle anderen werden null
sbr r16, 0b00010000 ; Bit 4 setzen, alle anderen Bits bleiben gleich
out PORTD, r16
sbi PORTD, 5 ;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
nop ; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
nop
nop
cbi PORTD, 5 ;PD5 wieder auf LOW setzen
andi r17, 0b00001111
sbr r17, 1<<4 ; nur eine andere Schreibweise von oben
out PORTD, r17
sbi PORTD, 5
nop
nop
nop
cbi PORTD, 5
Ich hoffe ihr könnt mir ein paar Tip´s zu initialisierung geben, und bitte nicht vergessen, ich stehe noch ganz am Anfang mit dem Assembler-Programmieren.
Danke für eure bemühungen !!:rolleyes:
Ich bin gerade dabei, AVR-Tutorial bei http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD durchzuarbeiten. Jetzt ist es endlich soweit ein LCD anzuschließen. Nur ist da leider für einen Anfänger die erklärung recht schwer zu durchblicken. Ich habe im Netz zwar einiges gefunden, was mir aber bei meinem jetzigen Wissen über Assembler, Atmega und co. nicht recht hilfreich war. Ich benutze das Display Blueline Dotmatrix (EA W162B-N3LW) von Reichelt (http://such002.reichelt.de/?SID=13UBbXsX8AAAIAAAJdO3k729f9c8d5488f23088873d62 1565c65f;ACTION=446). Im Turtorial steht das
$3 und ein paar µs warten öfters im das Steuerregister geschrieben werden soll, aber wer, was wo :confused: ist das Steuerregister.
Ich habe es mit den angaben im Datenblatt (dem Display beigelegt, und bei Reichlt als download verfügbar) versucht. Hierbei soll folgendes am Port ausgegeben werden:
.........RS......RW.....DB7.....DB6........DB5...D B4
.........0........0........0.........0...........1 ......0...............4-Bit Datenlänge einschalten (noch im 8-Bit Modus)
RS = PD4
RW = PD5
DB7 = PD3
DB6 = PD2
DB5 = PD1
DB4 = PD0
Mit ldi r16, 0b00000010 soll bei der Ausgabe auf PD1 ein 1 ausgegeben werden. Der Rest sollte mit 0 belegt werden. Mit dem anschließenden out PORTD, r16 sollten die Ausgänge dementsprechend belegt werden.
Hier noch der gesammte Quelltext:
.include "m8def.inc"
.include "lcd-routines.c"
ldi r16, 0xFF
out DDRD,r16 ;Im Datenrichtungsregister PORTD als Ausgang deklarieren
ldi r16, 0b00000010
nop ;Dem Diplay Zeit geben um sich selbst zu initialisieren
nop
nop
nop
nop
nop
out PORTD, r16
nop ;Dem Diplay Zeit geben um sich selbst zu initialisieren
nop
nop
nop
nop
nop
ldi r16, 125 ;Ab dieser Zeile ist das Programm nur Abgeschrieben
mov r17,r16 ; Kopie von r16 in r17 eintragen
swap r16 ; vertauscht die beiden Nibbles von r16 (Die Bit´s 0-3 und 4-8 werden vertauscht)
andi r16, 0b00001111 ; Nur die vier unteren (mit 1 markierten)
; Bits werden übernommen, alle anderen werden null
sbr r16, 0b00010000 ; Bit 4 setzen, alle anderen Bits bleiben gleich
out PORTD, r16
sbi PORTD, 5 ;Den 5.PORTD (PD5) auf High setzen, um den Display zu Signalisieren, das es die Daten von PD0 bis PD4 übernehmen kann
nop ; 3 Taktzyklen warten, um dem Display, für die Datenübernahme, genügend Zeit zu geben
nop
nop
cbi PORTD, 5 ;PD5 wieder auf LOW setzen
andi r17, 0b00001111
sbr r17, 1<<4 ; nur eine andere Schreibweise von oben
out PORTD, r17
sbi PORTD, 5
nop
nop
nop
cbi PORTD, 5
Ich hoffe ihr könnt mir ein paar Tip´s zu initialisierung geben, und bitte nicht vergessen, ich stehe noch ganz am Anfang mit dem Assembler-Programmieren.
Danke für eure bemühungen !!:rolleyes: