Hallo Leute,
wollte mal nach langer Zeit wieder anfangen ein wenig Tinys zu
programmieren. Ich habe ein Ganz simples Programm geschrieben, welches
Daten von einem Computer über einen UART einliest und diese dann wieder
zurück senden. Das Programm hat keinen Sinn, einfach nur zum testen.
Leider empfange ich am PC nur Müll. Vielleicht könntet ihr ja mal
draufschauen. Ich schätze mal das irgendetwas mit der Einstellung im
UBRR falsch ist. Ich verwende übrigens kein externes Quarz.
1 | /*
|
2 | * UART_Test.c
|
3 | *
|
4 | * Created: 21.01.2014 12:52:09
|
5 | * Author: Jens
|
6 | */
|
7 |
|
8 |
|
9 | #include <avr/io.h>
|
10 | #include <inttypes.h>
|
11 |
|
12 | #define FCPU 8000000L
|
13 |
|
14 | #define USART_BAUD 9600L
|
15 | #define USART_UBBR_VALUE ((FCPU+USART_BAUD*8)/(USART_BAUD*16)-1)
|
16 |
|
17 | void USART_vInit(void)
|
18 | {
|
19 | // Set baudrate
|
20 | UBRRH = (uint8_t) (USART_UBBR_VALUE>>8);
|
21 | UBRRL = (uint8_t) USART_UBBR_VALUE;
|
22 | // Enable receiver and transmitter
|
23 | UCSRB = (1<<RXEN)|(1<<TXEN);
|
24 | // Set frame format to 8 data bits, no parity, 1 stop bit
|
25 | UCSRC = (1<<USBS)|(3<<UCSZ0);
|
26 | }
|
27 |
|
28 | unsigned char USART_vReceiveByte(void)
|
29 | {
|
30 | // Wait until a byte has been received
|
31 | while(!(UCSRA&(1<<RXC)));
|
32 | // Return received data
|
33 | return UDR;
|
34 | }
|
35 |
|
36 | int main(void)
|
37 | {
|
38 | DDRB = 0xFF;
|
39 | unsigned char u8Data;
|
40 | // Initialize USART
|
41 | USART_vInit();
|
42 |
|
43 | while(1)
|
44 | {
|
45 | // Echo received characters
|
46 | u8Data = USART_vReceiveByte();
|
47 | while(!(UCSRA & (1<<UDRE)));
|
48 | UDR = u8Data;
|
49 | }
|
50 | }
|
Am PC verwende ich einen UART-/USB-Konverter, sodass kein MAX232 nötig
ist.
Gruß
Mister232