mix47 (21.05.2007 03:29, просмотров: 1) ответил mix47 на поправка, ADMUX=i|0x20; Aref соответственно на +5, однако на 7 и 8м порту досихпор "мусор"
на вход АЦП 1,294 вольта, после преобразования 0,7 вольта :( <c>
#include <avr/io.h>
#include <util/delay.h>
void USART_Transmit( unsigned long data)
{
while( !( UCSRA & (1<<UDRE)) );
UDR=data;
}
unsigned char USART_Receive(void)
{
while( !( UCSRA & (1<<RXC)) );
return(UDR);
}
void print (int rez)
{
int hi;
int low;
hi=(rez>>4)&0x0F;
low=rez&0x0F;
if (hi > 9) USART_Transmit('A' + (hi - 10));
else USART_Transmit('0' + hi);
if (low > 9) USART_Transmit('A' + (low - 10));
else USART_Transmit('0' + low);
}
int main(void)
{
unsigned char i;
int s;
int L;
int H;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x08;
i=0x04;
while(1)
{
L=0;
H=0;
for (s=0;s<10;s++)
{
ADMUX=i|0x20;
ADCSRA =(1 << ADEN)|(1 << ADIF)|(1 << ADPS2)|(1 << ADPS1)|(1 << ADPS0)|(1 << ADSC)|(1 << ADLAR);
while( !(ADCSRA & (1<<ADIF)) );
ADCSRA|=0x10;
_delay_ms(100);
L=L+ADCL;
H=H+ADCH;
print(ADCL);
print(ADCH);
USART_Transmit('+');
}
USART_Transmit('=');
USART_Transmit('<');
print(L/10);
print(H/10);
USART_Transmit('>');
USART_Transmit(13);
USART_Transmit(10);
}
}
</c>
отпрашиваем ADC4 10 раз, усредняем результат, выдаем, далее на калькуляторе 0642 смещаем, получаем 2460 HEX -> 9312 DEC / 64 -> 145 * (5/1024) = 0.7В
:/
на ADC4 весит аккумулятор 1,294В
0042+0042+0042+0042+4042+0042+0042+0042+0042+0042+=<0642>
0042+0042+0042+0042+0042+4042+0042+0042+0042+0042+=<0642>
0042+0042+0042+0042+0042+0042+0042+0042+0042+0042+=<0042>
0042+0042+4042+0042+0042+0042+0042+4042+0042+0042+=<0C42>
0042+0042+0042+0042+0042+0042+4042+0042+0042+0042+=<0642>