Разочек в секунду на 1 сотку. Вот код и плата:
...
void ADC_Init(void) {
ADMUX = (1<<REFS0);
ADCSRB = 0x00;
ADCSRA = (1<<ADPS2)|(1<<ADPS0);
}
...
float ADC_Measured_Voltage(unsigned char Channel) {
float Measured_U=0;
unsigned int temp_ADC=0;
unsigned char i=0;
switch (Channel) { /*Переключалка каналов*/
case 0:
ADMUX &= ~(1<<MUX0);
break;
case 1:
ADMUX |= (1<<MUX0);
break;
}
ADCSRA |= (1<<ADEN); /*Разрешаем работу ADC */
for (i=0;i<250;i++) {
ADCSRA |= (1<<ADSC);
while((ADCSRA&(1<<ADSC))!=0);
temp_ADC=ADC;
Measured_U += (temp_ADC/1024.0)*5.0 ;
}
ADCSRA &= ~(1<<ADEN); /*Запрещаем работу ADC*/
return (Measured_U/250);
}
...
main {
...
while(1) {
printf("\r");
printf("U = ");
printf("%.2f", ADC_Measured_Voltage(0)*4.62);
printf("(V)\n");
printf("A = ");
printf("%.2f", ADC_Measured_Voltage(1)*4.03);
printf("(A)");
Delay_mSeconds(250);
}
...
}
Опору я выбрал AVCC с кондюком на АREF, но ниче не цеплял на вывод AREF, и вообще я к нему 5 вольт подвел, когда плату разводил, может из-за этого?
Спс! :)