Witm,
Mam problem z powtórn± inicjacj± konwersji ,po resecie przy pierwszym przerwaniu od ADC wszystko jest dobrze ale za kolejnym ju¿ nic siê nie zmienia mimo ¿e zmieniam na wej¶ciu napiêcie (potencjometr miêdzy vcc<->gnd).
<code>
SFIOR &= ~(1<<ADTS2 | 1<<ADTS1 | 1<<ADTS0); ADCSRA = 1<<ADEN | 1<<ADPS0 | 1<<ADIE;
sei(); lcd_cls(); for (;;) { lcd_setPos(1,0); lcd_str_P((prog_char*)PSTR(">"));
ADMUX = 0x01; // ADC1 , Vref=AREF , AREF i AVCC pod³±czone do Vcc ADCSRA |= 1<<ADSC | 1<<ADEN; // ADC_ON & ADC_START
while(ADCSRA & (1<<ADSC)) ;
lcd_setPos(1,9); lcd_hex_byte(ADCSRA); // 0x89 => ADEN=1, ADSC=0, ADATE=0, ADIF=0, ADIE=1, ADPS2=ADPS1=0, ADPS0=1 (div=2) lcd_str_P((prog_char*)PSTR(" ")); lcd_hex_byte(ADMUX); // 0x01 => Vref z AREF_PIN, pomiar ADC1 lcd_str_P((prog_char*)PSTR(" ")); lcd_hex_byte(SFIOR); // 0x00 lcd_str_P((prog_char*)PSTR(" ")); lcd_hex_byte(SREG); // 0x82 => I=1
lcd_setPos(2,0); lcd_dec(tmp16);
lcd_setPos(1,2); lcd_hex_byte(ADCH); lcd_hex_byte(ADCL);
lcd_setPos(1,0); lcd_str_P((prog_char*)PSTR("x")); delay1ms(1000); } }
SIGNAL (SIG_ADC) { PORT(D) = ~PORT(D); tmp16 = (ADCH<<8) | ADCL; ADCH = ADCL = 0; }
</code>
W komentarzu przy wy¶wietlaniu rejestrów napisa³em warto¶ci jakie mam. Dioda pod³±czona do portu D mryga co ~1s czyli przerwanie siê wykonuje ale jak pokrêcê potencjometrem to nie zmienia siê tmp16 :| ale jak zresetuje uP to mam zmienione ju¿. Czemu mi nie dzia³a to? Mo¿e zapomian czego¶ zrobiæ albo robiê za du¿o?