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?
>Im Simulator werden jetzt aber im UDR-Register keine Bits gesetzt.
da stand bis jetzt noch nie was drin...
Du solltest du Datenübertragung von der Initialisierung trennen.
Funktionierenden Code findest du im Datenblattzum Mega8..
Man mag mich schlagen, .... aber das da oben compiliert doch nie und nimmer. Wo ist 'data' deklariert, dass in USART_init benutzt wird? Btw.: Code-Einrückungen wurden nicht zum Spass erfunden :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.