Moin liebe Community.
Ich habe mir gestern den halben Tag um die Ohren gehauen und mir einen
abgebrochen meinen Atmega328P mit dem HC-06 Modul zu verbinden.
Ich dachte es kann ja nich so schwer sein, einfach einen Char/String
über USART an den HC-06 zu schicken und der gibts raus per Bluetooth an
diverse Peripherie.
Wie auch immer, ich komm nichtmehr weiter, denn ich bekomm nur (zum
Glück gleichmäßigen) mist raus, wenn ich dem uC etwas schicke. Das
Programm soll lediglich das empfangene Zeichen wieder zurückschicken.
(code: siehe unten)
Das Kurriose von 0x80 - 0xFF, kommen die Zeichen korrekt zurück, von
0x00 - 0x79 kommen die Zeichen mit +0x80 zurück.
Ist also Bit7 (8.Bit) des zu übertragenden zeichens(byte) nicht gesetzt,
so wird dies dazuaddiert.
Eine weitere merkwürdigkeit ist folgende:
0x80 wird gesendet, 0x00 empfängt der uC, schickt dies zurück und 0x80
kommt wieder an.
Dies hängt also auch wieder mit dem 8.Bit zusammen.
Lange rede kurzer Sinn: Das byte wird zwischen dem uC und dem HC-06
während der übertragung anscheinend "geshiftet". Allerdings ist davon
nur der 2. nibble betroffen.
Ich habe gestern diverse Sachen überprüft:
- Stimmt die eingestellte Frequenz des uC's (ich benutze die
system-clock von 1MhZ)
- Stimmt die BAUD-Rate (Angeblich 9600Baud, habe es aber mit div.
anderen auch probiert)
- Stimmt die Berechnung der BAUD-Rate.
Der uC befindet sich auf meinem AVR-Dragon im DebugWIRE mode (aus dem
ich ihn mit AmtelStudio6.1 nichtmehr raus bekomme -.-). Im Schaltplan
habe ich lediglich ein Schema dargestellt, wie er weiter mit dem
BT-Dongle
(http://www.amazon.de/XINTE-Drahtlose-Bluetooth-Serial-Arduino/dp/B00H07UJL6/ref=sr_1_1?ie=UTF8&qid=1390934427&sr=8-1)
verbunden ist.
Ich werde nicht schlau aus dem Spaß. Vielen Dank schonmal für die Hilfe,
die ich hier sicherlich bekommen werde.
P.s.: Die eingstellten BAUD im screenshot von HTerm bezieht sich auf die
Bluetooth-Verbindung.
1 | /*
|
2 | * Bluetooth_Dongle_test.cpp
|
3 | *
|
4 | * Created: 18.01.2014 16:59:18
|
5 | * Author: h0d3nt3uf3l
|
6 | */
|
7 |
|
8 | #define F_CPU 1000000
|
9 | #include <avr/io.h>
|
10 | #include <avr/interrupt.h>
|
11 | #include <util/delay.h>
|
12 | #define BAUD 9600
|
13 | #define MYUBRR F_CPU/16/BAUD-1
|
14 |
|
15 | uint8_t data;
|
16 |
|
17 |
|
18 | void USART_Init(unsigned int ubrr)
|
19 | {
|
20 | /*Set baud rate*/
|
21 | UBRR0H = (unsigned char)(ubrr>>8);
|
22 | UBRR0L = (unsigned char)(ubrr);
|
23 | /* Enable receiver and transmitter & Interrupts for RX & TX*/
|
24 | UCSR0B = (1<<RXEN0) | (1<<TXEN0) | (1<<RXCIE0) | (1<< TXCIE0);
|
25 | /* Set frame format: 8data, 1stop bit */
|
26 | UCSR0C = (1<<UCSZ00) | (1<<UCSZ01);
|
27 |
|
28 | }
|
29 |
|
30 | void USART_transmit()
|
31 | {
|
32 | UDR0 = (data);
|
33 | }
|
34 |
|
35 | int main(void)
|
36 | {
|
37 |
|
38 | sei();
|
39 |
|
40 | USART_Init(MYUBRR);
|
41 | _delay_ms(10);
|
42 |
|
43 | while(1)
|
44 | ;
|
45 | }
|
46 |
|
47 | ISR(USART_RX_vect) //Receive complete
|
48 | {
|
49 | data = UDR0;
|
50 | USART_transmit();
|
51 | }
|
52 |
|
53 | ISR(USART_TX_vect) //Transmit complete
|
54 | {
|
55 | data = 0;
|
56 | }
|