Erdweg
19.02.2007, 10:42
Hallo,
ich habe ein Problem mit dem ich als Anfänger nicht mehr klar komme und auch keine Lösung im Forum gefunden habe. Also ich habe mir einen Booloader von Megaload installiert der auch super funktioniert. Nur habe ich jetzt leider das Problem das wenn ich mein altes Programm in den mega32 hochlade die Uart Kommunikation nicht mehr so funktioniert wie vor dem Bootloader. Und zwar habe ich das seltsame Phänomen das die Baudrate in meinem Programme immer die Hälfte von der des Bootloaders beträgt. Wenn es die gleiche wäre könnte ich das ja verstehen aber so? Ich habe schon versucht die UART initialisieren meines Programmes zu ändern (könnten ja Einstellungen vom Bootloader zurück bleiben), aber bis jetzt ohne Erfolg.
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#define BAUD 38400UL
#define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1)
// USART initialisieren
void uart_init(void)
{
// alles zurück setzten (war ein Versuch)
delay_ms(10);
UCSRB = (0<<RXEN)|(0<<TXEN);
UBRRH = (unsigned char) (0);
UBRRL = (unsigned char) (0);
delay_ms(10);
// Baudrate einstellen ( Normaler Modus )
UBRRH = (unsigned char) (UBRR_BAUD>>8/);
UBRRL = (unsigned char) (UBRR_BAUD & 0x0ff);
// Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts
UCSRB = (1<<RXEN)|(1<<TXEN);
// Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
Hoffentlich fällt einem was ein
Gruss
Dirk
Kleiner Nachtrag wenn ich 76800 als Baudrate einstelle bekomme ich 38400 raus.
ich habe ein Problem mit dem ich als Anfänger nicht mehr klar komme und auch keine Lösung im Forum gefunden habe. Also ich habe mir einen Booloader von Megaload installiert der auch super funktioniert. Nur habe ich jetzt leider das Problem das wenn ich mein altes Programm in den mega32 hochlade die Uart Kommunikation nicht mehr so funktioniert wie vor dem Bootloader. Und zwar habe ich das seltsame Phänomen das die Baudrate in meinem Programme immer die Hälfte von der des Bootloaders beträgt. Wenn es die gleiche wäre könnte ich das ja verstehen aber so? Ich habe schon versucht die UART initialisieren meines Programmes zu ändern (könnten ja Einstellungen vom Bootloader zurück bleiben), aber bis jetzt ohne Erfolg.
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#define BAUD 38400UL
#define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1)
// USART initialisieren
void uart_init(void)
{
// alles zurück setzten (war ein Versuch)
delay_ms(10);
UCSRB = (0<<RXEN)|(0<<TXEN);
UBRRH = (unsigned char) (0);
UBRRL = (unsigned char) (0);
delay_ms(10);
// Baudrate einstellen ( Normaler Modus )
UBRRH = (unsigned char) (UBRR_BAUD>>8/);
UBRRL = (unsigned char) (UBRR_BAUD & 0x0ff);
// Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts
UCSRB = (1<<RXEN)|(1<<TXEN);
// Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
Hoffentlich fällt einem was ein
Gruss
Dirk
Kleiner Nachtrag wenn ich 76800 als Baudrate einstelle bekomme ich 38400 raus.