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:
Danke,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
The Man







Zitieren

Lesezeichen