vink
het begint allemaal met elektronica
Ik ben bezig om met 3 potentiometers 3 verschillende LEDs te dimmen.
Om te beginnen heb ik een programma geschreven voor 1 LED met 1 potentiometer.
Dit werk goed.
Toen ik de 2e ingang wil inlezen heb ik dit gedaan zoals ik het programma hieronder.
Dit heb ik weer getest en wat doet hij nu hij pakt de 2e ingang terwijl ik hier veder niks mee doe.
Wat hij dus doet is dat hij met de 2e ingang de led regelt.
Dit is het programma voor nu heb ik dit sukje code tussen de /* */ gezet
.include "m32def.inc"
.def temp = r16
.def waarde1 = r17
.def waarde2 = r18
.def waarde3 = r19
.def tel = r20
.def uit = r21
.def temp2 = r25
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
ser temp
out ddrd,temp
out ddrb,temp
;adc instellen---------------------------------------------------------
ldi temp, (1<<REFS0) |(1<<ADLAR)
out ADMUX, temp
ldi temp, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)
out ADCSRA, temp
rjmp main
;**********************************************************************
loop1:
; =============================
; delay loop generator
; 50 cycles:
; -----------------------------
; delaying 48 cycles:
ldi R26, $10
WGLOOP0: dec R26
brne WGLOOP0
; -----------------------------
; delaying 2 cycles:
nop
nop
; =============================
ret
;**************************hoofd programma*****************************
Main:
clr r0
clr r1
clr r2
clr r22
ser tel
clr temp
; ADC uitlezen kanaal0-------------------------------------------------
sample_adc0:sbi ADCSRA, ADSC ; de ADC starten
wait_adc0:
sbic ADCSRA, ADSC ; wachten tot de ADSC laag is
rjmp wait_adc0
ldi temp,(0<<MUX1) | (1<<REFS0) |(1<<ADLAR)
out ADMUX,temp
in temp, ADCH
mov waarde2,temp
;_________________________________________________________
vergelijk0:
cpi waarde2,254
brlo vergelijklo0
rjmp pl0
pl0:
inc r22
rjmp vergelijklo0
vergelijklo0:
cpi waarde2,1
brlo cl0
rjmp sample_adc1
cl0:
ldi temp,0b00000001
mov r0,temp
rjmp sample_adc1
; ADC uitlezen kanaal1-------------------------------------------------
sample_adc1:sbi ADCSRA, ADSC ; de ADC starten
wait_adc1:
sbic ADCSRA, ADSC ; wachten tot de ADSC laag is
rjmp wait_adc1
ldi temp2,(1<<MUX1) | (1<<REFS0) |(1<<ADLAR)
out ADMUX,temp2
in temp, ADCH
mov waarde1,temp
;------------------------------------------------
pwm:
clr uit
add uit,r0
add uit,r1
add uit,r2
out portb,uit
rcall loop1
cpi tel,0
breq main
dec tel
rjmp compare0
compare0:
inc r22
cp r22,waarde2
brne pwm
ldi temp,0b00000001
mov r0,temp
rjmp pwm
weet iemand wat ik verkeerd doe?
oww ja als ik hem test in avr studio 4 werkt het wel goed
De edit wel weer gebruiken, niet stiekum kicken.
[Bericht gewijzigd door Henry S. op (2%)]
Op 21 april 2008 15:55:19 schreef vink:
instellen--------------------------------------------------------- ldi temp, (1<<REFS0) |(1<<ADLAR) out ADMUX, temp ldi temp, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0) out ADCSRA, temp
Volgens mij moet je ADMUX en ADCSRA met STS benaderen ipv out, omdat het geen I/O registers zijn. Zo stond het in de datasheet van de atmega88, ik ga er vanuit dat dan ook voor de mega32 geldt.