Kommt auf die F_CPU an. Bei F_CPU = 16MHz sind 38400 Baud kein Problem (was nicht unbedingt auf deine Software zutrifft, die Hardware bringt's jedenfalls).
Ich hatte einen Atmaga168 mit der Fleury-Uart-Library betrieben und
das klappte auf Anhieb. Nun möchte ich dasselbe auf einem
ATMega8 mit internem Takt machen.
Allerdings kommt jetzt beim Senden nichts raus (empfangen habe ich gar nicht probiert); wenn ich es aber ausprogrammiere (u.a. ohne
Interrupt beim Senden) geht es (allerdings nur 1200 Baud):
UCSRB |= (1 << TXEN) | ( 1 << RXEN ); // UART TX, RX einschalten
UCSRC |= ( 1 << URSEL )|( 3<<UCSZ0 ); // Asynchron 8N1
UBRRH = (uint8_t) (UBRR_BAUD>>; // USART Baud
UBRRL = (uint8_t) UBRR_BAUD;
uart_puts( "**** ATMega8 ****\n\r" );
Wie gesagt, dann mit Fleury geht nichts mehr. Habe den Eindruck, dass das Programm bis 32 Zeichen in einen Buffer schreibt, dann hängt.
Liegt das wohl am internen (ungenauen) Takt, am Interrupt des
Atmega8 oder sonst was ? Danke.
Kommt auf die F_CPU an. Bei F_CPU = 16MHz sind 38400 Baud kein Problem (was nicht unbedingt auf deine Software zutrifft, die Hardware bringt's jedenfalls).
Disclaimer: none. Sue me.
Hast Du auch den richtigen Chip gewählt? Beim MEga8 sind einige Register anders als beim 168
Danke für eure Antworten.
Ja, der Chip ist richtig eingestellt.
Was man dem (funktionierenden) Beispielcode
nicht ansieht: Ich habe auf 1 Mhz gestellt und
kommuniziere mit 1200 Baud.
Probier mal 8MHz und 1200.
Hallo <Roboter Genie>, Du meinst also die Fusebits
auf 8 Mhz ändern (nicht nur die Konstante im Code) ?
Die Konstante im Code muss *immer* mit deiner wirklichen CPU-Frequenz übereinstimmen.
Disclaimer: none. Sue me.
Ich habe die interne CPU-Frequenz auf 8 Mhz umgestellt
und mit 1200 Baud probiert, geht ohne Fleury aber mit Fleury
auch nicht (also wie bei 1 Mhz).
Danke gleichwohl für die Idee.
Ich betreibe den UART von Fleury mit 115000 Mega8 allerdings mit mit 7,3728MHz Quarz. Mit dem internen Takt habe ich es noch nie probiert.
Lesezeichen