ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
467036 Топик полностью
Dingo (25.11.2013 09:54, просмотров: 237) ответил Dingo на Куда пнуть компилятор, чтобы сравнивал? Я понимаю, когда переменную пытается оптимизировать. Но тут!...
Теперь ещё непонятка вылезла - при опросе одного канала показания ADC сответствуют реальности, а при переключениях канала - занижаются и пляшут. Может опять что-то из детских ошибок, но... void initIO(void) { // skip // ADCSR = ADEN, ADSC, ADFR, ADIF, ADIE, ADPS2..0 ADCSR = 0b10010100; ADCSR |= 1<<ADIE; // enable interrupt ADCSR |= 1<<ADSC; /* MUX[4..0] equals to num of ADCn up to 10 15 = 1.18V 16 = GND other = differential mode */ // ADMUX = [REFS1,REFS0] [ADLAR] [MUX4..0] //ADMUX = 0b10000000; ADMUX = 0b10000000; // skip } void main(void) int main(void) { InitIO(); sei(); while(1) { Vin = ((unsigned long)Vref*SampleADC[0]); Vin = Vin/1024; // skip-skip-skip } } ISR(TIMER0_OVF0_vect) { static unsigned int taccum = (F_CPU/T0presc/(255-T0preload)); TCNT0 = T0preload; // about 1/1000 sec taccum--; if (taccum == 0) { time++; SampleADC[0]=adcRaw[0]; SampleADC[1]=adcRaw[1]; SampleADC[2]=adcRaw[2]; SampleADC[3]=adcRaw[3]; dataReady = 1; // Go! Put its! taccum = ((F_CPU/T0presc)/(255-T0preload)); PORTA ^= 1<<PA5; } } ISR(ADC_vect) { PORTA |= 1<<PA6; adcRaw[chanel] = ADCW; chanel = --chanel & 0x03; ADMUX &= ~(0x01); ADMUX &= ~(0x02); // ADMUX = ADMUX+chanel; asm ("nop"); ADCSR |= 1<<ADSC; // start conversion again }