Forum: Mikrocontroller und Digitale Elektronik UART ATMega32


von Simone (Gast)


Lesenswert?

Hallo zusammen,

ich versuche gerade ein char über den UART des ATMega32 zu senden.
mein Code ist wie folgt:
leider kommt nichts an...

vielleicht hat jemand eine Idee, wäre jedenfalls super ;-)



#include <avr/io.h>
#include <inttypes.h>
#include <util/delay.h>


void USART_Init( unsigned int baud )
  {
    /*Set baud rate*/
    UBRRH = (unsigned char)(baud>>8);
    UBRRL = (unsigned char)baud;
    /* Enable receiver and transmitter*/
    UCSRB = (1<<RXEN)|(1<<TXEN);
    /* Set frame format: 8data, 2stop bit*/
    UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
  }


  void USART_Transmit( unsigned char data )
  {
    /* Wait for empty transmit buffer*/
    while
     ( !( UCSRA & (1<<UDRE)) );
    /* Put data into buffer, sends the data*/
    UDR = data;
  }



void main(void)
{
  USART_Init(9600);
  //PORTB = 0b11111111;

  while(1)
  {
         USART_Transmit('A');
        _delay_ms(1000);
        //PORTB = 1; //0. bit im Port B setzen
        //_delay_ms(10000); //warte 1000 ms

        //PORTB = 0; //0. bit im Port B löschen
        //_delay_ms(10000);//warte 1000 ms
  }

}

von Sascha (Gast)


Lesenswert?

Wird "    UDR = data;" im Code auch erreicht?

Macht der Tx Pin physikalisch nichts, mal mit Multimeter oder Oszi 
geguckt? Oder empfängt der PC einfach nur nichts?

von da1l6 (Gast)


Lesenswert?

Hallo

Simone schrieb:
>     /*Set baud rate*/
>     UBRRH = (unsigned char)(baud>>8);
>     UBRRL = (unsigned char)baud;

Das ist falsch. Du muss den UBRR Wert nach den Formeln aus dem 
Datenblatt aus der Baudrate brechenen und nicht die Baudrate direkt rein 
schreiben.

da1l6

von Simone (Gast)


Lesenswert?

perfekt hat nun funktioniert :-)

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.