ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
3 июля
89494 Топик полностью
mix47 (17.05.2007 01:31, просмотров: 1) ответил mix47 на ATmega32 пример кода.
Отладка <c> #include <avr/io.h> void USART_Transmit( unsigned long data) { while( !( UCSRA & (1<<UDRE)) ); UDR=data; } int main(void) { unsigned long rez; unsigned char i; int hi; int low; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x08; // 57600 8n1 ADCSRA =(1 << ADEN)|(1 << ADIF)|(1 << ADPS2)|(1 << ADPS1)|(1 << ADPS0)|0; ADMUX = (1<<REFS1)|(1 << REFS0)|(1 << ADLAR) |0; i=0; while(1) { ADMUX=i|0xE0; ADCSRA =(1 << ADEN)|(1 << ADIF)|(1 << ADPS2)|(1 << ADPS1)|(1 << ADPS0)|(1 << ADSC)|0; #define AdcConversionComplete (!(ADCSRA & (1 << ADSC)))(ADCSRA & 0x40==1) rez=ADCH; 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); rez=ADCL; 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); rez=i; 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); i++; if (i>=8) i=0; USART_Transmit(13); USART_Transmit(10); } }; </c> режим АЦП - сравнение с внутренним ИОН Mux singel поодельности берем старший и младший бит ADCH и ADCL переводим в HEX, кидаем в порт, далее также в HEX кидаем в порт номер канала... при работе выдает следующие результаты: сажаем ADC0 на землю - 00 00 01 (получаеться результат смешен на 1н порт, должен быть на 00 , т.к. i исчисляеться с 0), и так навсех портах сдвигаеться... Сажаем +5 на ADC0 - FF FF 00 - FF FF 07 , если еще любой из портов посадить на землю то получаем FF FF 01 - FF FF 04 :( , и так все порты... может с режимами АЦП что не так ? или mux ? или всеже код неправельный ? Help please...