moonwalker99
18.03.2006, 11:43
Hi,
ich lese ganz primitiv die ersten zwei ADC-Kanäle ein, vergleiche sie und steuer nacheinander zwei Ausgänge die eine Rechts bzw. eine Linksfahrt ausführen.
Mit dem JTAG-MK II Interface und Einzel-Step funktioniert das programm problemlos, lasse ich jedoch den ATMEGA das ganze alleine machen, tut sich überhaupt nichts.
.include "m16def.inc"
.def temp =r16
.def vergleichlow =r18
.def vergleichhigh = r19
.org 0x000
rjmp main ;Reset Handler
;-------------------------------------------------
main:
ldi temp, LOW(RAMEND)
out SPL,temp
ldi temp, HIGH(RAMEND)
out SPH,temp
ldi temp,0xFF
out ddrb,temp
cbi adcsr, adfr
sbi adcsr, adps0
sbi adcsr, adps1
sbi adcsr, adps2
cbi ADCSR,ADIE
sbi adcsr,aden
;-------------------------------------------------------
grundposition:
sbi adcsr,aden
kanal0:
ldi temp,0b01000000
out admux, temp
sbi adcsr, adsc
AD_busy: sbis ADCSR,ADIF ;Flag da?, busy?
rjmp AD_busy ;springt raus, wenn fertig
in zl,adcl
in zh,adch
ldi vergleichlow,100
ldi vergleichhigh,0b00000010
CP vergleichlow,zl ; Vergleiche untere Bytes
CPC vergleichhigh,zh ;Vergleiche obere Bytes
brbs 0,aus
sbi portb,6
rjmp an
aus:
cbi portb,6
cbi adcsr,aden
rjmp kanal1
an:
rjmp grundposition
kanal1:
sbi adcsr,aden
ldi temp,0b01000001
out admux, temp
sbi adcsr, adsc
AD_busy1: sbis ADCSR,ADIF ;Flag da?, busy?
rjmp AD_busy1 ;springt raus, wenn fertig
in yl,adcl
in yh,adch
ldi vergleichlow,162
ldi vergleichhigh,0b00000001
CP vergleichlow,yl ; Vergleiche untere Bytes
CPC vergleichhigh,yh ;Vergleiche obere Bytes
brbs 0,aus1
sbi portb,4
rjmp an1
aus1:
cbi portb,4
cbi adcsr,aden
rjmp abfrage
an1:
rjmp kanal1
abfrage:
rjmp main
Das mit den Analogeingängen ist wirklich sehr suspekt....
Für Hilfe wäre ich sehr dankbar.
PS: Der Prescaler ist auf 64 da der Takt momentan auf Internen 8Mhz steht. Es handelt sich um einen ATMEGA 16
ich lese ganz primitiv die ersten zwei ADC-Kanäle ein, vergleiche sie und steuer nacheinander zwei Ausgänge die eine Rechts bzw. eine Linksfahrt ausführen.
Mit dem JTAG-MK II Interface und Einzel-Step funktioniert das programm problemlos, lasse ich jedoch den ATMEGA das ganze alleine machen, tut sich überhaupt nichts.
.include "m16def.inc"
.def temp =r16
.def vergleichlow =r18
.def vergleichhigh = r19
.org 0x000
rjmp main ;Reset Handler
;-------------------------------------------------
main:
ldi temp, LOW(RAMEND)
out SPL,temp
ldi temp, HIGH(RAMEND)
out SPH,temp
ldi temp,0xFF
out ddrb,temp
cbi adcsr, adfr
sbi adcsr, adps0
sbi adcsr, adps1
sbi adcsr, adps2
cbi ADCSR,ADIE
sbi adcsr,aden
;-------------------------------------------------------
grundposition:
sbi adcsr,aden
kanal0:
ldi temp,0b01000000
out admux, temp
sbi adcsr, adsc
AD_busy: sbis ADCSR,ADIF ;Flag da?, busy?
rjmp AD_busy ;springt raus, wenn fertig
in zl,adcl
in zh,adch
ldi vergleichlow,100
ldi vergleichhigh,0b00000010
CP vergleichlow,zl ; Vergleiche untere Bytes
CPC vergleichhigh,zh ;Vergleiche obere Bytes
brbs 0,aus
sbi portb,6
rjmp an
aus:
cbi portb,6
cbi adcsr,aden
rjmp kanal1
an:
rjmp grundposition
kanal1:
sbi adcsr,aden
ldi temp,0b01000001
out admux, temp
sbi adcsr, adsc
AD_busy1: sbis ADCSR,ADIF ;Flag da?, busy?
rjmp AD_busy1 ;springt raus, wenn fertig
in yl,adcl
in yh,adch
ldi vergleichlow,162
ldi vergleichhigh,0b00000001
CP vergleichlow,yl ; Vergleiche untere Bytes
CPC vergleichhigh,yh ;Vergleiche obere Bytes
brbs 0,aus1
sbi portb,4
rjmp an1
aus1:
cbi portb,4
cbi adcsr,aden
rjmp abfrage
an1:
rjmp kanal1
abfrage:
rjmp main
Das mit den Analogeingängen ist wirklich sehr suspekt....
Für Hilfe wäre ich sehr dankbar.
PS: Der Prescaler ist auf 64 da der Takt momentan auf Internen 8Mhz steht. Es handelt sich um einen ATMEGA 16