Forum: Mikrocontroller und Digitale Elektronik AVR und BTM-222: Konfiguration


von N. G. (newgeneration) Benutzerseite


Lesenswert?

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).

von stefanus (Gast)


Lesenswert?

Mit +++ welchselst du bei bestehender Verbindung in den Befehlsmodus. 
Solange keine Verbindung besteht, ist es nicht nötig. Schadet jedenfalls 
nicht.

Nach jeden Befehl musst du warten, das Modul nimmt den nächsten Befehl 
erst an, wenn der vorherige abgearbeitet wurde. Wie lange, musst du 
ausprobieren. Oder du wartest die Antwort (OK bzw ERROR) ab.

Das Handy zeigt möglicherweise Serial Adapter an, weil es ein serieller 
Adapter ist. Kann gut sein, dass der Name vom Treiber kommt.

100ms ist ziemlich wenig. Ich würde mindestens eine Sekunde versuchen.

Du solltest einen Weg finden, die Antworten des Moduls anzuzeigen. SOnst 
ist das alles nur blindes Raten.

von N. G. (newgeneration) Benutzerseite


Lesenswert?

stefanus schrieb:
> Du solltest einen Weg finden, die Antworten des Moduls anzuzeigen. SOnst
> ist das alles nur blindes Raten.

Es kommt immer 256 zurück. Mit anderen Worten - nichts.
Wenn ich es mit einer while() versuche hängt er endlos darin(getestet 
mithilfe von LEDs).

Ich habe auch schon nachgemessen, am Rx vom BTM-222 liegen 3V3 an. Der 
Tx Pin gibt entweder gar kein Signal aus, oder es ist zu kurz für mein 
betagtes Multimeter - habe leider kein Oszi.

Aber schon mal danke für deine Antwort

: Bearbeitet durch User
von N. G. (newgeneration) Benutzerseite


Lesenswert?

muss ich als erstes ein einzelnes "AT\r" senden?

von N. G. (newgeneration) Benutzerseite


Lesenswert?

Oder muss man die Hardware-Handshake-Leitungen blegen?

von Harald (Gast)


Lesenswert?

+++ OHNE \r senden, das gehört in diesem Fall da nicht hin. VOR und NACH 
+++ benötigt es in der Regel eine Pause von >= 1sec.

von N. G. (newgeneration) Benutzerseite


Lesenswert?

Harald schrieb:
> +++ OHNE \r senden, das gehört in diesem Fall da nicht hin. VOR und NACH
> +++ benötigt es in der Regel eine Pause von >= 1sec.

Habe beides getestet, bringt keine Besserung.

Wie kann man denn testen, ob das BTM-222 überhaupt noch funktioniert?

von N. G. (newgeneration) Benutzerseite


Lesenswert?

Hat noch jemand eine Ahnung?
Ich bin mit meinem Latein am Ende...

von L. P. (lpg)


Lesenswert?

Hi,

Bist du dir sicher, dass das BTM222 auf 19200Baud default lauscht? 
Könnte mich irren, aber ich hab da 9600 bzw. 115200 Baud im Kopf.
Rx Tx auch bestimmt nicht vertauscht?

Lg.

von N. G. (newgeneration) Benutzerseite


Lesenswert?

L. P. schrieb:
> Rx Tx auch bestimmt nicht vertauscht?

Also ich habe Rx vom BTM mit Tx vom AVR verbunden. Ist das richtig? 
Könnte mir auch vorstellen, dass die Pins gegenteilig beschriftet 
wurden.

L. P. schrieb:
> Bist du dir sicher, dass das BTM222 auf 19200Baud default lauscht?

Ja, steht zumindest so im Datenblatt. Habe an einer Stelle(in einem 
anderen Forum) ein einziges Mal etwas von 9600Baud gehört. Habe 
natürlich auch nichts daran geändert. Wie denn auch? ;)

von mopro (Gast)


Lesenswert?

Ich würde an deiner Stelle mal die Pinbelegung prüfen.
Eventuell mal mit einem Oszi oder Logic-Analyzer beide Leitungen messen 
und die Ist-Baudrate bestimmen.
Vielleicht hast du ja ein Problem mit der Baudrate (falsch 
initialisiert).

Reset-Leitung richtig beschaltet?

lg

von N. G. (newgeneration) Benutzerseite


Lesenswert?

mopro schrieb:
> Reset-Leitung richtig beschaltet?

Welche RESET-Leitung? Die vom AVR? Oder hat das BTM eine?

Habe leider kein Oszi zur Verfügung, das einzige an das ich rankommen 
könte steht bei uns in der Schule im Physiksaal. Aber ich hab grad 
Ferien.

mopro schrieb:
> Vielleicht hast du ja ein Problem mit der Baudrate (falsch
> initialisiert).

Glaube ich nicht, es ist ja die viel genutzte uart-Lib von Fleury

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.