Hallo alle Zusammen,

ich möchte mithilfe ATtiny26 Mikrocontroller eine spannung zwischen 0 und 5 v Messen, Vorerst gabe ich zur Erfassung der Spannung ADC eigenstellt. Darauf hin habe ich LCD intialisiert.. Soweit gut.. und ich habe dann das Programm laufen lassen, jedoch sehe keinen Balken an meinem LCD und es tut sich nichts..

Hier ist mein Quellcode:


;Voreinstellungen

.device ATtiny26
.nolist
.include "tn26def.inc"
.list

;Deklarationen

.def mp=R16 ;allgemeine Register
.def adhigh=R17 ;Ergebnis vom ADC

;Stackpointer initialisiern

ldi mp, RAMEND
out SP, mp

;Definition der Ein und Ausgänge

ldi mp, 0b11111111
out DDRB, mp

ldi mp, 0b11111110
out DDRA,mp

ldi mp,0b00000000
out TCNT0,mp


;Einstellungen des ADC Wandlers
;Die Spannung von 5V (analog) in eine 8 bit (digital) zahl umwandeln
;Initialisierund des ADMUX Registers

ldi mp,0b00100000 ;AVCC Betriebsspannung als Referenzspannung, Datenrichtung linksbündig
out ADMUX,mp ;ADC0 Analoger Eingang

;Initialisierung des ADCSR Registers

ldi mp,0b10000101 ;AD Wandler aktiviert, Einzelwandlung "Single Conversion", Vorteiler 32
out ADCSRA,mp

; ADC für eine Einzelwandlung starten

Main:
sbi ADCsRA, ADSC

LOOP:

sbic ADCSRA, ADSC
rjmp LOOP

;oberste 8 Bit einlesen

in adhigh,ADCH


;LCD

.def mp1=R18
.def mp2=R19
.def mp3=R20

;RS auf PA4
;E auf PA5
;PB4..PB5 auf PA1..PA2
;PB6..PB7 auf PA6..PA7

.equ LCD_PORT=PORTA
.equ LCD_DDR=PORTA
.equ PIN_E=5
.equ PIN_RS=4

LCD_init:

ldi mp1,11111110
out LCD_DDR,mp1

ldi mp3,6

powerupwait:

rcall delay5ms
dec mp3
brne powerupwait ;Wenn 5ms abgelaufen dann Schleife verlassen

ldi mp1, 0b00000011 ;muss dreimal hintereinander gesendet werden
out LCD_PORT, mp1

rcall LCD_enable ;1
rcall delay5ms
rcall LCD_enable ;2
rcall delay5ms
rcall LCD_enable ;3
rcall delay5ms

; 4-Bit-Modus einstellen

ldi mp1, 0b00000010
out LCD_PORT, mp1
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

ret

;Löschen Anzeige

LCD_clear:

ldi mp1,0b00000001
rcall LCD_command
rcall delay5ms
ret

;Zurück

LCD_home:

ldi mp1,0b00000010
rcall LCD_command
rcall delay5ms
ret


;Datenbyte an das LCD senden
LCD_data:

mov mp2,mp1
swap mp1
andi mp1,0b00001111
sbr mp1, 1<<PIN_RS
out LCD_PORT,mp1
rcall LCD_enable

andi mp2, 0b00001111
sbr mp2,1<<PIN_RS
out LCD_PORT, mp2
rcall LCD_enable
rcall delay50us
ret


;Befehl an das LCD senden
LCD_command:

mov mp2,mp1
swap mp1
andi mp1,0b00001111
out LCD_PORT,mp1
rcall LCD_enable
andi mp2,0b00001111
out LCD_PORT, mp2
rcall LCD_enable
rcall delay50us
ret


LCD_enable:

sbi LCD_PORT, PIN_E ;Enable High
nop
nop
nop
cbi LCD_PORT, PIN_E ;Enable Low
ret


;Zeitschleife

;50 µs Pause

delay50us:
ldi mp1, $42

delay50us_:
dec mp1
brne delay50us_
ret

;Pause für die Befehle
;5ms Pause bei 1 MHz

delay5ms:

;äußere Schleife

ldi mp1, $21

;innere Schleife

Loop0:

ldi mp2, $C9

Loop1:

dec mp2
brne Loop1
dec mp1
brne Loop0
ret




Kann mir jemand sagen wo der Fehler ist?
Stimmt etwas mit der Initialisierung nícht??


viele Grüße