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.