Zu geringe Baudrate

Gast #353512
Lesenswert?

Hallo,
ich benutze einen Atmega16L,
Takt wird über FPGA erzeugt und
an XTAL1 zugeführt, XTAL2 NC.
Nun bekomme ich eine Baudrate die zwischen 20 und 30 Hz liegt,
hat einer ne Ahnung was ich falsch mache?
Die CKSEL hab ich mit Ponyprog auf "0000" sprich lauter Häkchen
gesetzt.
Gast #353516
Lesenswert?

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

#define FOSC 8000000
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1


void USART_Init(unsigned int ubrr)
{
  UBRRH = (unsigned char) (ubrr>>8);
  UBRRL = (unsigned char) ubrr;

  UCSRB = (1<<RXEN) | (1<<TXEN);

  UCSRC = (1<<USBS) | (3<<UCSZ0);
}

void USART_Transmit(unsigned char data)
{
  while(!(UCSRA & (1<<UDRE))) ;

  UDR = data;
}

unsigned char USART_Receive(void)
{
  while(!(UCSRA & (1<<RXC)));

  return UDR;
}


int main (void)
{

  unsigned char data='h';
  USART_Init(MYUBRR);
  while(1){
    _delay_ms(50);
    USART_Transmit(data);
    }

  return 0;
}
Gast #353518
Lesenswert?

Schau Dir im Datenblatt auf Seite 160 mal den Abschnitt 'Accessing
UBRRH/UCSRC Registers' durch. Du sprichst die Register falsch an. Die
haben die selbe Adresse und müssen über das URSEL-Bit selektiert
werden!

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