Atmega8 mit HC-06 Bluetooth Modul

Gast #4278315
Lesenswert?

Hallo,

mein Ziel ist es, über eine App, wie BluControl oder BlueTerm, Daten an 
einen Atmega8 zu senden bzw. zu empfangen. Leider hapert es bei mir 
schon ganz am Anfang...
Ich finde keine gescheite Anleitung, die mir erklärt, wie diese 
AT-Befehle funktionieren, also wie man die sendet und wie ich dann ein 
Zeichen an ein verbundenes Gerät sende und empfange.
Höchstens ein paar Arduino Seiten, aber da bin ich mir nicht sicher, wie 
ich diesen Code auf den Atmega8 anwenden kann.

Zusätzlich habe ich schon mal versucht mich mit dem Modul zu verbinden. 
Nach Eingabe des Pins wird angezeigt, dass gepaart wird, woraufhin das 
Gerät in die Liste der bekannten Pairing Geräte verschwindet und nichts 
mehr passiert. D.h. keine aktive Bluetooth Verbindung. Unter ios wird 
das Gerät noch nicht mal angezeigt.

Ich hoffe jemand kann mich in die richtige Richtung leiten, da uc's noch 
relativ neu für mich sind..

Vielen Dank schonmal :)

Tobi
Gast #4278341
Lesenswert?

Im Grunde genommen brauchst du die AT-Befehle erst mal nicht. Das HC-06 
hat eine Grundkonfiguration (9600 8N1) mit der ein Verbindungsaufbau 
auch ohne AT-Befehle funktioniert.
Dein Handy Terminalprogramm muss die Verbindung aufbauen. Die von dort 
gesendeten Zeichen kannst du dann auf üblichen Weg als seriellen 
Datenstrom mit dem Atmega abfragen.
Gast #4278356
Lesenswert?

lächler schrieb:
> Dein Handy Terminalprogramm muss die Verbindung aufbauen.
Aber da haperts ja schon.. Laut dem Datenblatt soll die rote LED 
dauerhaft leuchten, wenn eine Verbindung aufgebaut wurde. Bei mir blinkt 
diese aber dauerhaft und auf dem Android Handy verschwindet das Gerät in 
die Liste ohne eine aktive Verbindung zu haben...

lächler schrieb:
> Die von dort gesendeten Zeichen kannst du dann auf üblichen Weg als seriellen
> Datenstrom mit dem Atmega abfragen.
Genau da komme ich auf Seiten des uC's nicht weiter.. Ich hätte jetzt 
erstmal probiert die Zeichen zu unterscheiden und entsprechend eine LED 
anzuschalten oder sowas. Jedoch wie lese ich die Zeichen ein?


Armin J. schrieb:
> hast Du schon mal BlueDisplay probiert?

Hallo Armin,
bist du der Entwickler oder ist der Name nur zufällig der gleiche? ^^ 
Welche C Datei brauche ich denn für den Atmega8?
#4278374
Lesenswert?

Tobi schrieb
> Hallo Armin,
> bist du der Entwickler oder ist der Name nur zufällig der gleiche? ^^
> Welche C Datei brauche ich denn für den Atmega8?

Ja ich bin der Entwickler.
Ich hab das ganze für Arduino (und ARM) entwickelt, es müsste aber auch 
so gehen.
Du brauchst die Dateien aus 
https://github.com/ArminJo/android-blue-display/tree/master/arduino/libraries/BlueDisplay
Und natürlich aus dem dort enthaltenen BlinkExample, die musst du noch 
von .ino nach .cpp umbenennen, wenn du es unbedingt ohne Arduino 
Entwicklungsungebung machen willst.
Für Arduino gibt es unter 
https://github.com/ArminJo/android-blue-display/tree/master/arduino eine 
readme Datei.
Und unter 
https://github.com/ArminJo/android-blue-display/tree/master/arduino/libraries/BlueDisplay/examples/HC_05_Initialization 
gibt es auch ein Beispiel, wie man das HC05 mit AT Befehlen 
umprogrammierst.

Viel Erfolg
Gast #4278539
Lesenswert?

Hallo,

irgendwas scheint mit meinem Bluetooth Modul nicht zu stimmen.. Naja 
erstmal beschäftige ich mich dann wohl mit dem UART.

Mit dem Programm Termite empfange ich nur [00]. Schnell hintereinander.
Das Programm stammt aus einem anderen Forum. Funktionierte angeblich mit 
Atmega8.
1
#include <avr/io.h>
2
#include <util/delay.h>
3

4
#define F_CPU 12000000L
5
#define BAUD 9600L
6

7
#define UBRR_VAL ((F_CPU+BAUD * 8)/(BAUD*16)-1)    //clever runde
8
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))    //reale Baudrate
9

10
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000)    //Fehler in Promille
11

12
#if ((BAUD_ERROR>10)||(BAUD_ERROR<-10))
13
#error Systematischer Fehler in der Baudrate größer 1% und damit zu hoch!
14
#endif
15

16
int main(void)
17
{
18
  UBRRH = UBRR_VAL >> 8;
19
  UBRRL = UBRR_VAL & 0xFF;
20
  
21
  UCSRB = (1<<RXEN)|(1<<TXEN);    //UART TX einschalten
22
  UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);  //Asynchron 8N1
23
  while(1)
24
  {
25
    
26
    while (!(UCSRA & (1<<UDRE)))  //warten bis Senden möglich
27
    {
28
    }
29
    UDR = 'x';
30
    _delay_ms(100);
31
  }
32
}
Gast #4278565
Lesenswert?

Hi,
als Info zu den (mobilen) Apfelprodukten:
Mit IOS kannst du die Nutzung des seriellem BT-Protokoll vergessen.
Apple erlaubt das auf mobiler Plattform nur mit lizenzierten Chipsätzen 
und dafür muss dann etwas $$$ an Apple fließen ;-)

LG Krafti
Gast #4278902
Lesenswert?

Hi und danke für die Info Krafti. Etwas ähnliches habe ich mir schon 
gedacht ^^ Ist ja immer so bei denen...

Bzgl. der Seriellen Schnittstelle habe ich halt einen USB zu RS232 
Adapter genommen und dort Read, write und ground angeschlossen. Dann 
wurde mir am PC sehr schnell hinter einander diese Zeichenfolge 
ausgegeben. Ich habe gelesen, dass man einen MAX232 verwenden soll. 
Jedoch finde ich fast nur fertige Boards mit einem MAX3232, z.B. 
http://www.amazon.de/MAX3232-Serial-Konverter-Module-Stecker/dp/B00HV4K9ZY/ref=sr_1_1?s=computers&ie=UTF8&qid=1442691342&sr=1-1&keywords=max232+rs232
Warum braucht man sowas? Aus dem USB kommen doch nur 5V und der Atmega8 
sendet und verkraftet doch genauso 5 Volt?

Funktionieren Boards mit MAX3232? Also löst das mein Problem der 
falschen Übertragung?

Viele Grüße
Tobi :)
Gast #4279127
Lesenswert?

Krafti schrieb:
> Hi,
> als Info zu den (mobilen) Apfelprodukten:
> Mit IOS kannst du die Nutzung des seriellem BT-Protokoll vergessen.
> Apple erlaubt das auf mobiler Plattform nur mit lizenzierten Chipsätzen
> und dafür muss dann etwas $$$ an Apple fließen ;-)
>
> LG Krafti

Das ist nicht ganz richtig. Mit Bluetooth 4.0 gibt es ein seriell 
ähnliches GATT Profil, dass auch von Apple unterstützt wird. Kompatible 
Adapter sind z.B. der HM-10. Ich benutze so einen Adapter um eine 
Smartwatch zu entwickeln für ein iPhone.
Verbinden kann man sich aber nicht direkt aus den Einstellungen sondern 
aus der jeweiligen App (zum Testen LightBlue).
Ich habe ein paar Themen auch in meinem Blog beschrieben. Wenn interesse 
besteht kann ich die Links gerne Posten, sonst sieht das nach 
Eigenwerbung aus...
Gast #4279150
Lesenswert?

Einige Android Handies unterstützen das SPP Protokoll nicht, welches du 
benötigst.

Du kannst das am einfachsten mit dem Bluetooth Chat Programm antesten, 
dass im Android SDK als Beispielprogramm enthalten ist. Starte das Chat 
Programm einfach auf zwei Smartphones und teste die Kommunikation 
zwischen bei beiden Smartphones.

Um Verbindung zu einem HC-0x Modul aufzubauen, musst du die im Quelltext 
hardcodierte UUID Nummer auf "00001101-0000-1000-8000-00805F9B34FB" 
ändern. Diese Nummer wird IMHO von allen SPP Modulen verwendet.
Gast #4280041
Lesenswert?

Tobi schrieb:
> Bzgl. der Seriellen Schnittstelle habe ich halt einen USB zu RS232
> Adapter genommen und dort Read, write und ground angeschlossen. Dann
> wurde mir am PC sehr schnell hinter einander diese Zeichenfolge
> ausgegeben. Ich habe gelesen, dass man einen MAX232 verwenden soll.
> Warum braucht man sowas?
...Um z.B. das Signal zu invertieren...

> Aus dem USB kommen doch nur 5V und der Atmega8
> sendet und verkraftet doch genauso 5 Volt?

Hast Du mal gemessen??... ich behaupte mal das da Pegel von mindestens 
+5V und -5V anliegen,ob das Deinem Atmega gefällt?

> Funktionieren Boards mit MAX3232? Also löst das mein Problem der
> falschen Übertragung?

...würde ich denken, oder Du nimmst einen USB zu seriell Adapter mit 
TTL-Pegel, also ohne RS232-Treiber....
Geht Dein Adapter zu öffnen kannst Du alternativ den TTL-Pegel vor dem 
Treiber abgreifen und zum testen heraus führen...
Man kann auch mittels zweier Transistoren einen provisorischen 
"Pegelwandler" umd inverter bauen,wobei natürlich keine negative 
Spannung erzeugt wird wie bei einem Treiber mit Ladungspumpen.
Das hat den Nachteil das Gegenstellen mit Autopowerdown nicht aufwachen, 
was bei Deinen Adapter aber nicht der Fall ist,sonst wäre nix auf Deinem 
PC angekommen....

>
> Viele Grüße
> Tobi :)

....Grüsse zurück :)
Gast #4282998
Lesenswert?

Marco G. schrieb:
> Hast du den Quelltext nur kopiert oder auch an deinen uC angepasst?
Der Quelltext stammte von einem Atmega8, wie ich auch benutze, von daher 
sollte es eigentlich nicht daran liegen.

Armin J. schrieb:
> Hallo Tobi,
> bei mir funktioniert das mit einem billig USB zu RS232 Konverter
> einwandfrei, daran liegst sicher nicht.

Hallo, so einen billigen habe ich auch.. Genauer gesagt den hier: 
http://www.amazon.de/CSL-seriell-RS232-Adapter-Port/dp/B008FKABG0

@stefanus: Vielen Dank für deine Antwort. Sobald ich das mit dem RS232 
hin bekommen habe, werde ich mir das definitiv nochmal ansehen :)

Bestromer schrieb:
> Hast Du mal gemessen??... ich behaupte mal das da Pegel von mindestens
> +5V und -5V anliegen,ob das Deinem Atmega gefällt?
Ja, hatte ich allerdings. Bei mir lagen auch während der Übertragung 
circa 4,75V von Atmega kommend an, andere Richtung war ich nicht in der 
Lage eine Spannung über 10mV festzustellen.

Meinen Adapter kann ich leider nicht öffnen. Genauso kann ich meine 
Jumper Wire nicht wirklich richtig dran fest bekommen, daher suche ich 
nach einem Board, welches ich direkt an meinen Adapter stecken kann. 
Sonst hätte ich mir das mal eben auf einer Platine zusammen gelötet. Da 
ich aber eh kaum Teile hier habe lohnt sich das nicht.
Zusammengefasst mit einem Board wie diesem hier kann ich nichts falsch 
machen und meine Kommunikation müsste dann auch ordentlich 
funktionieren? 
http://www.ebay.de/itm/Max3232-5V-3-3V-RS232-Serial-Port-to-TTL-Digital-Converter-Module-CP12008-J33-/281353512577?hash=item4181f9e681

Vielen Dank noch einmal an alle Antworten :)
Gast #4285230
Lesenswert?

Armin J. schrieb:
> Achte darauf, dass Du einen Windows 8.1 kompatiblen bekommst.

Hallo Armin,

mein Adapter ist auf jeden Fall Windows Kompatibel. Ursprünglich habe 
ich diesen für die Programmierung eines Cisco Switch benutzt (natürlich 
mit ensprechendem weiteren Adapterkabel).
Aber im Grunde hast du auf jeden Fall recht. Ein Adapter ist besser als 
mit zig Verbindungsstücken zu arbeiten. Daher würde ich mir einen 
solchen Adapter, wie du hast, kaufen. Nur die Versandzeit stört mich!
Ich habe dieses hier jetzt mal bestellt: 
http://www.amazon.de/COM-FOUR%C2%AE-PL2303HX-RS232-Kabel-Modul-Konverter/dp/B00WE051XK/ref=sr_1_7?ie=UTF8&qid=1443097119&sr=8-7&keywords=usb+ttl+rs232
Werde ich am Sonntag ausprobieren und hier berichten :)

Grüße
Tobi
Gast #4286029
Lesenswert?

Tobi schrieb:
> Marco G. schrieb:
>> Hast du den Quelltext nur kopiert oder auch an deinen uC angepasst?
> Der Quelltext stammte von einem Atmega8, wie ich auch benutze, von daher
> sollte es eigentlich nicht daran liegen.

Läuft dein uC auch mit entsprechendem Quarz und Fuses?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren