запарился уже с ацп работает только первый цикл (сразу после включения питания) - результат в ADCL - правильный при повторных преобразованиях (после первого цикла) бит ADSC сбрасывается как и при завершении конвертации (что и ожидаемо) но в в регистре ADCL - стабильно первый результат преобразования
может помимо бита ADSC нужно еще что-то передергивать для начала конвертации???
void ADC_StartConversion() { ADCSRA = (1<<ADEN) | (1<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); }
inline char ADC_CheckDone() { return !(ADCSRA & (1<<ADSC)); }
void Init_ADC() { ADMUX = (1<<REFS1) | (1<<REFS0) | (0<<ADLAR) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0); ADCSRA = (1<<ADEN) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); SFIOR=0x00; }
int main() { PORTA = 0b00000000; DDRA = 0b00000000;
Send_UART("\r\n\r\n\r\n"); Send_UART("New proba\r\n");
while (1) { ADC_StartConversion();
_delay_ms(100);
if (ADC_CheckDone()) { ADC_val = ADCL; Print_ADC(); Send_UART("\r\n"); } else { Send_UART("Timeout\r\n"); }
_delay_ms(5000); } }
Сообщение отредактировал Mad-man - Apr 1 2010, 12:48
|