baudrate-1 bei #define MYUBRR MYF_CPU/16/BAUDRATE-1 muss in klammer oder ist das so gedacht, das zum schluss eins abgezogen wird?? Kenn mich nicht mit UART aus.
mfg liggi
Hallo,
ich möchte mit meinem ATmega169 Zeichen über die serielle
Schnittstelle ausgeben. Ich will dazu 19200 als Baudrate einstellen,
aber wenn ich mir die Zeichen am Terminal ansehe kommt nur
Quatsch raus, außerdem sind die Bits am Oszy nur 400µs lang, also
eine Baudrate von 2400.....
Idee? Danke!Code:#define MYF_CPU 8000000UL #define BAUDRATE 19200UL #define MYUBRR MYF_CPU/16/BAUDRATE-1 uint16_t ubrr = MYUBRR; static void initUSART(void) { UBRRH = (uint8_t) (ubrr>>8); UBRRL = (uint8_t) (ubrr); // UART start receiver and transmitter // data mode 8N1, asynchronous UCSRB = (1 << RXEN) | (1 << TXEN); UCSRC = (1 << UCSZ1) | (1 << UCSZ0); // flush receive-buffer do { UDR; } while (UCSRA & (1 << RXC)); } static inline int sendChar (const uint8_t c) { // wait for UART -> ready while (!(UCSRA & (1 << UDRE))) ; // write/send char UDR = c; return 1; }
RICOLA
baudrate-1 bei #define MYUBRR MYF_CPU/16/BAUDRATE-1 muss in klammer oder ist das so gedacht, das zum schluss eins abgezogen wird?? Kenn mich nicht mit UART aus.
mfg liggi
Lieber am Asuro rumschrauben als alles andere.
Meine Homepage
so stehts im datenblatt, aber auch mit klammer selbes problem
Schau die mal da die Baudraten definition genau an ( das "L" bei "16" ist wichtig)
#define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16L)-1)
die funktioniert definitiv (wenn die Quartzeinstellung/fuses stimmt, logo)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hallo
Meine Formel für einen 8MHz-ATMega32:
Und das Init für 8n1:Code:#define BAUD 38400 // 38400 Baud #define UBRR_BAUD ((F_CPU/(16*BAUD))-1)
(angelehnt an die RP6-Lib)Code:UBRRH = UBRR_BAUD >> 8; // UART 38400 Baud UBRRL = (uint8_t) UBRR_BAUD; UCSRA = 0x00; UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); UCSRB = (1 << TXEN) | (1 << RXEN) | (1 << RXCIE);
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
hallo, danke, ich war zu doof das CKDIV8 fuse-bit rauszunehmen,
da kann es nicht funktionieren! dank.
gruß
ricola
Lesezeichen