ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
89799 Топик полностью
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>