Gast
#1197719
Hallo
ich habe folgendes Problem. Ich benutze einen Atmega644 und will über
die Usart daten schreiben. Leider bekomme ich aber nur nullen zurück
(mittels Free Serial Prot Monitor). Der mC ist mit einem 14.756 Quarz
geregelt und die F_CPU ist auf 14745600 HZ eingestellt.Hier der
Quelltext:
uart.c :
#include "uart.h"
void init_uart(void)
{
int baud = BAUD;
#if F_CPU <= 1000000UL
UBRR0H = (uint8_t) ((F_CPU / (8 * baud)) - 1)>>8;
UBRR0L = (uint8_t) (F_CPU / (8 * baud)) - 1;
#else
UBRR0H=(uint8_t)((F_CPU / (16 * baud)) - 1)>>8;
UBRR0L=(uint8_t)(F_CPU / (16 * baud)) - 1;
#endif
UCSR0C = (1<<UCSZ01) | (1<<UCSZ00); // Asynchron 8N1
UCSR0B = (1<<TXEN0) | (1<<RXEN0); // tx & rx enable
}
void uart_putc(unsigned char c)
{
while (!(UCSR0A & (1<<UDRE0))) /* warten bis Senden moeglich */
{}
UDR0 = c;
}
uart.h :
#ifndef uart_h
#define uart_h
#include<avr/io.h>
#define BAUD 9600UL
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
void init_uart(void);
int uart_putc(unsigned char c);
void uart_puts (char *s);
#endif
main.c :
#include<stdio.h>
#include<avr/io.h>
#include <util/delay.h>
#include "uart.h"
int main(void)
{
init_uart();
_delay_ms(10);
uart_putc('=');
while(1)
{
uart_putc('=');
}
return 0;
}
Jemand eine Idee ?
Vielen Dank im voraus
Alex