Gast
#336874
Hallo, brauche dringend Hilfe! Ich benutze den Atmega8 mit 4MH externen Quarz. Habe folgenden Quellcode im AVR-Studio geschrieben: # define CLOCK 4000000 # define BAUD 9600 # define MYUBRR CLOCK/16/BAUD-1 # include <avr/io.h> # include <stdint.h> uint16_t ReadADChannel(uint8_t mux) { uint8_t i; uint16_t result=0; uint8_t data; data=16; ADCSRA|= (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0); //ADEN auf = ADC enable //ADPS=101= Frequenzteiler von 32 ADMUX=mux; // übergebenen Kanal einstellen ADMUX|=(1<<REFS0); // REFS:01 ADCSRA|=(1<<ADSC); //Dummy-Readout für ADC- //Warmlaufen while (ADCSRA & (1<<ADSC)) { for(i=0;i<3;i++) { ADCSRA|=(1<<ADSC); //Mittelwertbildung über 4 Werte while (ADCSRA & (1<<ADSC)) result += ADC; } ADCSRA &= ~(1<<ADEN); //ADC deaktivieren result /=4; return result; } } void USART_Init(uint16_t ubrr) { UBRRH= (uint8_t) (ubrr>>8); UBRRL=(uint8_t)(ubrr); UCSRB=(1<<TXEN); UCSRC=(1<<URSEL)|(3<<UCSZ0); while(!(UCSRA &(1<<UDRE))); UDR=data; } void main(void) { USART_Init(MYUBRR); ReadADChannel(0); } Anwendung des Programms soll später sein, dass die AD Werte über Usart an den PC geschickt werden. Im Simulator werden jetzt aber im UDR-Register keine Bits gesetzt. Was mache ich falsch? Oder hat jemand eine funktionierenden Code für die oben genannte Anwendung?