USART Band-Problem

Gast #401056
Lesenswert?
• ▲
▼
Für 38,4kBaud ist ein passender Baudratenquarz aber nötig. Schau mal in
die Tabelle zu Baudratenermittlung des ATMega128 und sieh Dir die
Fehlerraten bei entsprechenden Quazen an. Sie sollte unter 1,5%
bleiben, um eine sichere Verbindung zu haben.
Gast #401061
Lesenswert?
• ▲
▼
Jetzt geht's!
Wenn ich UBRRH=0 und UBRRL=51 direkt gebe, sonder nicht wie früher
durch 1600000/(16*baud)-1 rechnen lassen. Dann geht's!
Aber es ist nicht universal, wenn ich ein neu Bandrate benutzen möchte,
brauche ich die Tabell wieder ablesen.
Gast #401062
Lesenswert?
• ▲
▼
Jetzt ist es so!
void USART_Init0( )
{

  /* Set baud rate */

  UBRR0H=0;
  UBRR0L=51;

  /*Double Speed*/
  UCSR0A = (1<<U2X0);

  /* Enable Receiver and Transmitter */
  UCSR0B = (1<<RXEN0)|(1<<TXEN0);

  /* Set frame format: 8data, 1stop bit */
  UCSR0C = (0<<USBS0)|(3<<UCSZ00);

}

früher ist es so!
void USART_Init0( unsigned int baud )
{

  /* Set baud rate */
  unsigned int ubrr = 1000000/baud-1;

  UBRR0H = (unsigned char)(ubrr>>8);
  UBRR0L = (unsigned char)ubrr;

  /*Double Speed*/
  UCSR0A = (1<<U2X0);

  /* Enable Receiver and Transmitter */
  UCSR0B = (1<<RXEN0)|(1<<TXEN0);

  /* Set frame format: 8data, 1stop bit */
  UCSR0C = (0<<USBS0)|(3<<UCSZ00);

}

Aber warum kann es nicht selbst rechnen?
Gast #401063
Lesenswert?
• ▲
▼
früher ist so. Vorner habe ich falsch gekopiert.
void USART_Init0( unsigned int baud )
{

  /* Set baud rate */
  unsigned int ubrr = 1000000/baud-1;

  UBRR0H = (unsigned char)(ubrr>>8);
  UBRR0L = (unsigned char)ubrr;

  /* Enable Receiver and Transmitter */
  UCSR0B = (1<<RXEN0)|(1<<TXEN0);

  /* Set frame format: 8data, 1stop bit */
  UCSR0C = (0<<USBS0)|(3<<UCSZ00);

}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren