Hey Leute,
Ich bin im Moment ein Arduino Nutzer, möchte das Dingen aber jetzt mal
richtig programmieren da ich auf das Arduino-Zeug nichtmehr so Lust
habe. Habe mir also Atmel Studio geladen, auch schon paar LED's blinken
lassen und alles, wollte mich aber nun an den UART wagen. µC ist ein
atmega328p. Als Programmer benutz ich auch das Arduino UNO Board, dass
funktioniert auch alles. Hab mit dem Datenblatt eigentlich auch alles
eingestellt bekommen, dachte ich. Hier zu meinem Problem:
Ich dachte eigentlich, dass meine BAUD auf 9600 eingestellt ist, aber
dann empfange ich keine Zeichen (HTerm). Ich bekomme ständig FF
gesendet, auf der BAUD-Rate 115200. Wenn ich auf 9600 stelle passiert
nichts.. Jetzt bin ich mir nicht sicher ob ich meinen Code so einfach
auf den Arduino hauen kann, wegen dem Bootloader und so.. Hab F_CPU auf
16000000 gestellt, da ein 16mhz Quarz auf dem Arduino ist.
Hier aber mal mein Code:
1 | #include <avr/io.h>
|
2 | #include <avr/delay.h>
|
3 |
|
4 | #define F_CPU 16000000L
|
5 | #define BAUD 9600
|
6 | #define MYUBRR F_CPU/16/BAUD-1
|
7 |
|
8 |
|
9 |
|
10 | int main(void)
|
11 | {
|
12 |
|
13 | UART_init(MYUBRR);
|
14 |
|
15 | while(1)
|
16 | {
|
17 | UART_transmit("a");
|
18 | _delay_ms(500);
|
19 | }
|
20 | }
|
21 |
|
22 | void UART_init( unsigned int ubrr )
|
23 | {
|
24 | // BAUD-Rate
|
25 | UBRR0H = (unsigned char) (ubrr >> 8);
|
26 | UBRR0L = (unsigned char) ubrr;
|
27 |
|
28 | // Senden/Empfangen aktivieren
|
29 | UCSR0B = (1 << RXEN0) | (1 << TXEN0);
|
30 |
|
31 | // 2 Stop-Bits und 8 Data-Bits
|
32 | UCSR0C = (1 << USBS0) | (3 << UCSZ00);
|
33 | }
|
34 |
|
35 | void UART_transmit( int send )
|
36 | {
|
37 | // Warte auf leeren Transmitter-Buffer
|
38 | while( !(UCSR0A & (1 << UDRE0)));
|
39 | UDR0 = send;
|
40 | }
|
Wo habe ich Fehler gemacht?