Forum: Mikrocontroller und Digitale Elektronik USART und ADC


von D.W. (Gast)


Lesenswert?

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?

von Rahul (Gast)


Lesenswert?

>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..

von Karl heinz B. (kbucheg)


Lesenswert?

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
Noch kein Account? Hier anmelden.