Schönen Abend,
ich habe ein Problem mit der Baudrate! Das folgende Programm
funktioniert auf dem ATmega8 problemlos, jedoch auf dem geänderten für
den ATmega644 leider nicht. Es werden nur wirre Zeichen übertragen.
1.Programm: funktioniert --> ATmega8
#include <avr/io.h>
#define F_CPU 3686400
#define BAUD 9600
#define UBRR_VAL = ((3686400/(9600*16))-1)
void uart_init(void) {
UBRRH = 0x00;
UBRRL = 0x17;
UCSRB |= (1<<TXEN); // UART TX einschalten
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // Asynchron 8N1
}
int main(void) {
uart_init();
while(1){
while (!(UCSRA & (1<<UDRE))) { // warten bis Senden moeglich
}
UDR = 'a';
//_delay_ms( 10 );
}
}
2.Programm: funktioniert nicht :( --> ATmega644
#include <avr/io.h>
#define F_CPU 3686400ul
#define BAUD 9600
#define UBRR_VAL = ((3686400/(9600*16))-1)
void uart_init(void) {
UBRR0H = 0x00;
UBRR0L = 0x17;
UCSR0B |= (1<<TXEN0); // UART TX einschalten
UCSR0C = (1<<USBS0)|(1<<UCSZ01)|(1<<UCSZ00); // Asynchron 8N2
}
int main(void) {
uart_init();
while(1){
while (!(UCSR0A & (1<<UDRE0))) { // warten bis Senden moeglich
}
UDR0 = 'x';
//_delay_ms( 10 );
}
}
Wäre echt voll super, wenn mir jemand helfen könnte. Bin total
verzweifelt. Danke!!
Der Takt stimmt, nachgemessen? Du wärst nicht der Erste und nicht der Letzte, der die Fuses versemmelt oder CLKDIV8 vergessen hat.
Habe die Fuses gesetzt auf: Ext. Crystal Osc. 3.0 - 8.0 MHz; Start-up time: 16K CK + 65ms. Verwende einen Quarz mit: 3.6864 MHz. Wie kann ich den Takt nachmessen? (Beispiel mit LED - Blinken habe ich gemacht, außerdem Funktioniert es mit dem ATmega8, warum nur?)
Gast
#2456058
Hi
> außerdem Funktioniert es mit dem ATmega8, warum nur?)
Weil der ATMega8 z.B. keine CKDIV8-Fuse hat.
MfG Spess
Vielen Dank, hab den Haken bei ClockDiv rausgenommen und nun funktioniert es. MfG Sepp Horst
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.