Da bin ich wieder,
ich hab natürlich weiter versucht und kann absolut nicht mehr nachvolziehen, was der µC da macht. Im unteren Bild ist die von mir genutzte Hardware zum testen. Die LAmpen, die da im Moment leuchten, haben nichts zu sagen, das Foto stammt von vorigen Programmen. Die Led´s sind über FET´s an den PORTB des ATmega8 angeschlossen, die eingabe Elemente an PORTC.
Ich schätzte mal, was mir im oben geposteten Prog ein Bein gestellt hat, war der Freerunning Mode des ADC.
Eigentlich soll das Prog den ADC Wert von Kanal 1 und 2 einlesen und jew. speichern. Um zu sehen, ob die ADC Schleifen für sich funktionieren, habe ich hier nich nicht den CP Befehl sondern den CPI benutzt(also Register und Konstante). Eigentlich müsste ich ja dann jenachdem welches Reg. ich da wähle entweder mit dem Poti oder dem Taster den PORTB beeinflussen können. Was aber passiert ist aber das: wenn der Poti den konstanten Wert erreicht, geht PORTB auf 0b00000000. Wenn ich während PORTB 0b11111111
ist, den Taster drücke, werden die LED´s dunkler. Daraus schließe ich, das da irgendwo ein ungewolltes PWM rumgeistert. Außerdem kann ich mit dem Taster keinen Einfluss nehmen, wenn der Poti unterhalb der 100 ist. UND jetzt der Hammer: das Verhalten ist immer gleich, egal ob ich mit r17 oder r 19 vergleiche
hier der Code:
Code:
;Start, Power ON, Reset
main: ldi r16,lo8(RAMEND)
out SPL,r16
ldi r16,hi8(RAMEND)
out SPH,r16
ldi r16,0b00000000
out DDRC,r16
ldi r16,0b11111111
out DDRB,r16
ldi r31,0b11000101 ;adc-enable/start_conversion/clk:32
ldi r16,0b01100001 ;AVcc-left_adjusted-channel 1 => Taster
ldi r18,0b01100010 ;AVcc-left_adjusted-channel 2 => Poti
ldi r30,0b00000000
;Hier Init-Code eintragen.
;------------------------------------------------------------------------
mainloop: wdr
out ADCH,r30 ;zum clearen von ADCH und ADCL
out ADCL,r30 ;zum clearen von ADCH und ADCL
out ADMUX,r16 ;AVcc-left_adjusted-channel 1 => Taster
out ADCSRA,r31 ;adc-enable/start_conversion/clk:32
bis_convertet1:
in r20,ADCSRA
ori r20,0b11101111
cpi r20,0b11111111
brne bis_convertet1
in r1,ADCH
mov r17,r1
out ADCH,r30 ;zum clearen von ADCH und ADCL
out ADCL,r30 ;zum clearen von ADCH und ADCL
out ADMUX,r18 ;AVcc-left_adjusted-channel 2 => Poti
out ADCSRA,r31 ;adc-enable/start_conversion/clk:32
bis_convertet2:
in r20,ADCSRA
ori r20,0b11101111
cpi r20,0b11111111
brne bis_convertet2
in r2,ADCH
mov r19,r2
cpi r17,100 ;VERGLEICH-VERGLEICH-VERGLEICH
brcc an
ldi r21,0b11111111
out PORTB,r21
rjmp mainloop
an:
ldi r21,0b00000000
out PORTB,r21
;Hier den Quellcode eintragen.
rjmp mainloop
Danke,
The Man
Lesezeichen