Hallo, ich habe UART Zeichensalat beim empfangen der Zeichen am PC:
Mein Programm:
Meine Fusebits (laut Ponyprog):Code:// AVR-Includes #include <avr/io.h> #ifndef F_CPU /* In neueren Version der WinAVR/Mfile Makefile-Vorlage kann F_CPU im Makefile definiert werden, eine nochmalige Definition hier wuerde zu einer Compilerwarnung fuehren. Daher "Schutz" durch #ifndef/#endif Dieser "Schutz" kann zu Debugsessions führen, wenn AVRStudio verwendet wird und dort eine andere, nicht zur Hardware passende Taktrate eingestellt ist: Dann wird die folgende Definition nicht verwendet, sondern stattdessen der Defaultwert (8 MHz?) von AVRStudio */ #define F_CPU 16000000L // Systemtakt in Hz, das L am Ende ist wichtig, NICHT UL verwenden! #endif #define BAUD 9600L // Baudrate, das L am Ende ist wichtig, NICHT UL verwenden! // Berechnungen #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille #if ((BAUD_ERROR>10) || (BAUD_ERROR<-10)) #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! #endif // Funktionen // -=> UART initialisieren <=- void UART_init(void){ // wichtig: UBRRH _vor_ UBRRL UBRRH = BAUD_REAL >> 8; UBRRL = BAUD_REAL & 0xFF; UCSRB = (1<<RXEN)|(1<<TXEN); // aktiviere Empfänger und Sender UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //UCSRC |= (1<<URSEL)|(3<<UCSZ0); // 8 Bits, 1 Stopbit? } // -=> Byte Transmit <=- void UART_transmit(uint8_t c){ while(!(UCSRA & (1<<UDRE))); // Warte auf leeren Übertragungspuffer (UDRE = USART Data Register Empty flag) UDR = c; } // -=> String Transmit <=- void UART_transmit_string(uint8_t *string){ while(!(UCSRA & (1<<UDRE))); while( *string){ UART_transmit (*string++); } } int main (void) { UART_init(); // UART-Init Funktion ausführen UART_transmit_string("Hurra, es funktioniert!!!"); while(1){ } }
http://palmavr.sourceforge.net/cgi-b...pply+fuse+bits
Was muss ich nun einstellen? Blicke noch nicht so richtig durch mit den FUSE-Bits des ATMega32 und dem F_CPU Takt.







Zitieren

Lesezeichen