So jetzt habe ich die Datenleitungen verändert und versucht den Code anzupassen.
PB7 - PA7
PB6 - PA6
PB5 - PA5
PB4 - PA4
RS - PA1
E - PA2
es tut sich was undzwar ich sehe am LCD schwarze Balken, schon mal ein Fortschritt.. Ich versuche ein A auszugeben : ldi mp1, 'A' , jedoch erschein kein A am LCD Bildschirm.. Muss noch weitere Fehler im Code finden, falls jemanden einen Fehler findet ...
[CODE]
[; Voreinstellungen
.device Attiny26
.nolist
.include "tn26def.inc"
.list
;Deklarationen
;Voreinstellungen
.device ATtiny26
.nolist
.include "tn26def.inc"
.list
;Deklarationen
.def mp=R16
.def mp1=R17
.def mp2=R18
.def mp3=R19
;Stackpointer initialisieren
ldi mp, RAMEND
out SP, mp
;Ein- und Ausgänge definieren
ldi mp, 0b11111111
out DDRB, mp
ldi mp, 0b11111110
out DDRA, mp
ldi mp, 0b00000000
out TCNT0, mp
; Initialisierung des LCD
;Datenleitungen
.equ lcd_A7_ddr=DDRA
.equ lcd_A7_port=PORTA
.equ lcd_A7=7
.equ lcd_A6_ddr=DDRA
.equ lcd_A6_port=PORTA
.equ lcd_A6=6
.equ lcd_A5_ddr=DDRA
.equ lcd_A5_port=PORTA
.equ lcd_A5=5
.equ lcd_A4_ddr=DDRA
.equ lcd_A4_port=PORTA
.equ lcd_A4=4
;LCD Enable
.equ lcd_e_ddr= DDRA
.equ lcd_e_port=PORTA
.equ lcd_e=2
;LCD Selektionsleitung 1=Dateneingang 0=Befehlseingang
.equ lcd_rs_ddr= DDRA
.equ lcd_rs_port=PORTA
.equ lcd_rs=1
LCD_Init:
sbi lcd_A7_ddr, lcd_A7
sbi lcd_A6_ddr, lcd_A6
sbi lcd_A5_ddr, lcd_A5
sbi lcd_A4_ddr, lcd_A4
sbi lcd_e_ddr,lcd_e
sbi lcd_rs_ddr,lcd_rs
ldi mp3,6
powerupwait:
rcall delay5ms
dec mp3
brne powerupwait ;nach Ablauf von 5ms Schleife verlassen
; dreimal hintereinander senden
ldi mp1, 0b00000011 ;1
rcall lcd_enable
rcall delay5ms
ldi mp1, 0b00000011 ;2
rcall lcd_enable
rcall delay5ms
ldi mp1, 0b00000011 ;3
rcall lcd_enable
rcall delay5ms
;4-Bit-Modus einstellen
ldi mp1, 0b00000010
rcall lcd_enable
rcall delay5ms
; Funktionen setzen
;DL=0-->4-Bit-Schnittstelle
;N=1--->zwei Zeilen
;F=0--->5x8 Matrix
ldi mp1,0b00101000
rcall LCD_command
;Anzeigenkontrolle ein/aus
;D=1 Anzeige ein
;C=0 Cursor aus
;B=0 Blinken aus
ldi mp1,0b00001100
rcall LCD_command
;fertig initialisiert
ldi mp1,0b00000100
rcall LCD_command
;Anzeige löschen
LCD_clr:
ldi mp1, 0b00000001
rcall LCD_command
rcall delay5ms
LCD_home:
ldi mp1, 0b00000010
rcall LCD_command
rcall delay5ms
;Datenbyte an das LCD senden
LCD_Data:
mov mp2, mp1
swap mp1
andi mp1, 0b11110000
sbr mp1, 1<<lcd_rs
rcall lcd_enable
andi mp2, 0b11110000
sbr mp2, 1<<lcd_rs
rcall lcd_enable
rcall delay50us
;Einen Befehl an das LCD
LCD_command:
mov mp2,mp1
swap mp1
andi mp1,0b11110000
rcall lcd_enable
andi mp2,0b11110000
rcall lcd_enable
rcall delay50us
;Enable Puls
lcd_enable:
sbi lcd_e_ddr,lcd_e ;enable gesetzt
nop
nop
nop
cbi lcd_e_ddr,lcd_e ;enable gelöscht
ret
;Pause nach jeder Übertragung
delay50us:
push mp1
ldi mp1,$10
Loop0: dec mp1
brne Loop0
pop mp1
ret
;Längere Pause für manche Befehle
delay5ms:
push mp1
push mp2
ldi mp1,$07
Loop1: ldi mp2,$ED
Loop2: dec mp2
brne loop2
dec mp1
brne loop1
pop mp1
pop mp2
ret
ldi mp1, 'A'
rcall lcd_data]
- - - Aktualisiert - - -
Tut mir leid, ich schaffe es immer noch net einen code richtig einzufügen..Also # und dann kommt , in welchem Feld füge ich nun den Code?
Lesezeichen