Hallo,
ich hab ein Porblem meinem ATmega328 klar zu machen, dass er über UART
senden soll.
Hier der Code:
1 | #ifndef USART_C_
|
2 | #define USART_C_
|
3 |
|
4 | #include <avr/io.h>
|
5 | #include <stdint.h>
|
6 | #include <util/delay.h>
|
7 | #include "usart.h"
|
8 |
|
9 | #ifndef F_CPU
|
10 | #error F_CPU not defined.
|
11 | #endif
|
12 | #define UBRR_VAL ((F_CPU+UART_BAUD*8)/(UART_BAUD*16)-1)
|
13 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))
|
14 | #define BAUD_ERROR ((BAUD_REAL*1000)/UART_BAUD)
|
15 | #if ((BAUD_ERROR>1010) || (BAUD_ERROR<990))
|
16 | #error Baud-error above 1%
|
17 | #endif
|
18 |
|
19 | void UARTInit() {
|
20 | DDRD = (1<<PIND1);
|
21 |
|
22 | UBRR0H = (unsigned char) (UBRR_VAL >> 8);
|
23 | UBRR0L = (unsigned char) UBRR_VAL;
|
24 |
|
25 | UCSR0B = (1 << RXEN0) | (1 << TXEN0);
|
26 |
|
27 | UCSR0C = (1 << USBS0) | (3 << UCSZ00);
|
28 |
|
29 | //UCSR0B = (1 << TXEN0);
|
30 | //UCSR0C = (3 << UCSZ00);
|
31 | //UBRR0 = UBRR_VAL;
|
32 | }
|
33 |
|
34 | void UARTWriteChar(unsigned char Character) {
|
35 | while (!(UCSR0A & (1 << UDRE0)));
|
36 | UDR0 = Character;
|
37 | }
|
38 |
|
39 | [...]
|
40 |
|
41 | #endif /* USART_C_ */
|
Die Baudrate habe ich im usart.h auf 38400 baud gestellt.
Wenn ich nun im Hauptprogramm die Init-Fkt. und direkt danach die
WriteChar-Fkt. aufrufe, um mir das Zeichen 0xAA augeben zu lassen,
passiert ... nix. Mein oszi gibt mir auf dem TX pin nur dauerhaft High
aus, da ist keine veränderung zu beobachten....
Der Code der Funktionen ist übrigens der aus dem Datenblatt des µCs.
Meine Frage: Was hab ich falsch gemacht, dass ich überhaupt kein Signal
am TX-Pin bekomme?
Vielen Dank in Vorraus.