Die Berechnung der Baudrate, die ich oben im Code verwendet hatte,
scheint nicht zu stimmen. Hab es jetzt mit der setbaud.h versucht und es
läuft alles. Hatte die obigen Formeln in einem Tutorial gefunden und
einfach so darauf vertraut. Keine Ahnung, ob die einfach nicht
funktionieren oder einfach nicht zu meinem restlichen Code passten.
hier der eue Code:
1 | #define F_CPU 16000000 // Systemtakt in Hz
|
2 |
|
3 | #define BAUD 9600 // Baudrate
|
4 |
|
5 | #include <avr/io.h>
|
6 | #include <inttypes.h>
|
7 | #include <util/delay.h>
|
8 | #include <stdio.h>
|
9 | #include <stdlib.h>
|
10 | #include <util/setbaud.h>
|
11 |
|
12 | void usart_init();
|
13 | int usart_send(unsigned char zeichen);
|
14 |
|
15 | int main() {
|
16 |
|
17 | usart_init();
|
18 | while(1)
|
19 | {
|
20 | char text = 't';
|
21 | usart_send(text);
|
22 | _delay_ms(500);
|
23 | }
|
24 | return 0;
|
25 | }
|
26 |
|
27 | void usart_init()
|
28 | {
|
29 |
|
30 | //Baudrate einstellen in Baudraten-Register
|
31 | UBRR0H = UBRRH_VALUE;;
|
32 | UBRR0L = UBRRL_VALUE;
|
33 |
|
34 | #if USE_2X
|
35 | /* U2X-Modus erforderlich */
|
36 | UCSR0A |= (1 << U2X0);
|
37 | #else
|
38 | /* U2X-Modus nicht erforderlich */
|
39 | UCSR0A &= ~(1 << U2X0);
|
40 | #endif
|
41 |
|
42 | //Enable Recceiver and Transmitter
|
43 | UCSR0B = (1<<TXEN0);
|
44 |
|
45 | //Einstellen des Frame-Formates auf 8data-, 2stop-bits
|
46 | UCSR0C = (0<<USBS0) | (1<<UCSZ00) | (1<<UCSZ01);
|
47 | }
|
48 |
|
49 |
|
50 | int usart_send(unsigned char zeichen)
|
51 | {
|
52 | while (!(UCSR0A & (1<<UDRE0))) // warten bis Senden moeglich ist
|
53 | {}
|
54 | UDR0 = zeichen;
|
55 |
|
56 | }
|
Ich muss jetzt nur noch daran arbeiten, dass ich den vom ADC
ausgelesenen Wert über das UART zurückgeben kann.^^