Hallo Forum,
ja ich weiß, es gibt auch in diesem Forum viele Threads, die dieses
Thema behandeln.
Allerdings hat keiner der vorgeschlagenen Lösungsansätze funktioniert.
So, nun zum Problem:
Ich will 2 BTMs miteinander kommunizieren lassen. Also muss ich ja
mindestens eines konfigurieren(als Master). Allerdings bin ich mir nicht
ganz sicher, wie ich das BTM ohne einen PC konfigurieren soll(ich habe
weder eine RS232-Schnittstelle, noch ein USB-Konverterkabel; noch nicht
mal ein MAX232 oÄ).
Hardware:
ATmega2560@5V (USART1)
BTM-222@3,3V
Pegelwandler
Das BTM hat die folgenden LEitungen belegt:
-beide Vcc(3,3V)
-TX
-RX
-nicht alle GND(ist das ein Problem?)
Die Tx-Leitung vom BTM ist mit der Rx-Leitung vom AVR verbunden(und
natürlich umgekehrt).
Software:
AVR-Studio 4 + AVR Dragon als Programmer
UART-Lib von Peter Fleury
Hier mein test-Code:
1 | static inline void __attribute__((always_inline)) init(void);
|
2 | void __attribute__((noreturn)) loop(void);
|
3 | int main(void);
|
4 |
|
5 | int main()
|
6 | {
|
7 | init();
|
8 | loop();
|
9 | return 0;
|
10 | }
|
11 |
|
12 | void init()
|
13 | {
|
14 | usb_init(UART_BAUD_SELECT(19200, F_CPU));//USB-Schnittstelle
|
15 | uart1_init(UART_BAUD_SELECT(19200, F_CPU));//BTM-222
|
16 | sei();//enable Interrupt
|
17 | DDRL=0xFF;//Hier sind LEDs angeschlossen
|
18 | }
|
19 | void loop(void)
|
20 | {
|
21 | uart1_puts("+++\r");//Command Mode
|
22 | _delay_ms(2000);
|
23 | uart1_puts("ATZ0\r"); //Modul-Reset
|
24 | _delay_ms(4000) ; //Warten bis Modul gestartet
|
25 | uart1_puts("ATN=BTM222\r"); //Modul Name
|
26 | _delay_ms(100);
|
27 | uart1_puts("ATP0\r"); //Passwort
|
28 | _delay_ms(100);
|
29 |
|
30 | uart1_puts("ATO\r");//Data Mode
|
31 | PORTL=0xFF;
|
32 | while(1)
|
33 | {
|
34 | //PORTL^(1<<PL1); //LED1
|
35 | //_delay_ms(100);
|
36 | }
|
37 | }
|
Ich bin mir aber nicht sicher, was ich genau machen muss. DAss Dtasheet
schweigt sich was das Timing angeht aus :(
Muss ich die Sequenz "+++" am Anfang senden? Ich habe beide Meinungen
gehört.
Muss ein zeitlicher Abstand zwischen den Zeichen erfolgen?
In dem oben gezeigten Code-Abschnitt versuche ich den Namen zu ändern
und das Password auszuschalten. Beides funktioniert nicht. Es wird an
meinem Handy als "Serial Adaptor" gelistet, und über die Standart-Pin
kann ich auch mich verbinden.
Deshalb gehe ich davon aus, dass die Befehle gar nicht ankommen.
Wenn mir jemand helfen könnte, wäre ich sehr dankbar.
mfG
N.G.
PS: ich habe ein RNmega2560 auf dem bereits eine USB-Buchse integriert
ist, von der aus kann ich mit dem PC kommunizieren. Das klappt auch
größtenteils, aber nicht immer(teils mit großen Verzögerungen von
~1min).