Forum: Mikrocontroller und Digitale Elektronik Bluetooth-UART sehr langsam! Warum?


von Bernd (Gast)


Lesenswert?

Hallo!
Ich möchte daten von MAX/MSP über die serielle Schnittstelle auf ein 
Mikrocontroller (Teensyboard bzw ATMEGA32U4) übertragen. Dort werden die 
Daten in I2C umgewandelt und an einen LED-Dimmer geschickt. Das sind 48 
Bytes (weil 48 Lampen) und das ca 30 mal pro sek. Eigentlich sollte 
Bluetooth das schaffen?

Wenn ich die USB Schnittstelle des uC nehme funktioniert es tadellos, 
sämtliche LEDs werden ohne erkennbare Latenz gedimmt wie es sein soll.

Nun möchte ich aber eine Bluetooth-UART Brücke verwenden weil ich keine 
lust habe auf 7m USB-Kabel
Also habe ich erst die uC Software auf UART umgeschrieben und mit einem 
USB-UART wandler getestet. Auch das klappt wunderbar.

Wenn ich allerdings ein Bluetooth "Luftkabel" nehme empfängt der uC nur 
die hälfte der Daten und die LEDs dimmen meist nur in drei oder vier 
Stufen, je nach dem wie dynamisch die LEDs angesteuert werden.

Ich habe ein billig-bluetooth Dingen von DealExtreme genommen und auch 
ein BTM-220 ausprobiert.
Bei beiden das gleiche Problem, die Baudrate habe ich mal auf höchste 
Stufe gestellt.. aber das ändert nichts.
Da ich einen MAC verwende habe ich es mal auf meiner Windows Partition 
ausprobiert: Dort wird nicht mal das Bluetooth Ding erkannt...

Soll ich noch mal eine ganz andere Hardware ausprobieren, bei Sparkfun 
z.b gibt es teure  Bluetooth "Shields" (immer diese kack Shields!)  aber 
ob das was bringt?

Lg

Bernd

von g457 (Gast)


Lesenswert?

Gehe ich richtig in der Befürchtung dass Du die Brücke falsch(tm) nutzt 
und einzelne Bytes schickst anstatt ganzer Blöcke?

HTH

von Bernd (Gast)


Lesenswert?

Hallo!
Wie kann ich denn ganze Blöcke schicken?
Und wieso funktioniert es dann mittels Kabel trotzdem?

Gruss

von Bernd (Gast)


Lesenswert?

In der MAX/MSP reference zu dem Serial-Object welches die Daten 
rausschickt steht:

"It transmits data by taking a byte (an integer in the range of 0-255) 
in its inlet and sending it over the selected serial port."

Also müsste ich dafür sorgen dass das als Packet geschickt wird?

Dann gibt es noch folgende option:

"chunk" => Sets the data chunk size (data list length) for output.

Die habe ich auf 50 gestellt. Ändert auch nichts (war aber auch nur 
geraten dass das was damit zu tun haben könnte)

Gruss

Bernd

von g457 (Gast)


Lesenswert?

> Wie kann ich denn ganze Blöcke schicken?

fopen/fwrite in c. Und wenns nur zum Testen ist - max kann das 
möglicherweise nicht richtig(tm). Falls sich das Problem damit beheben 
(oder zumindest verringern) lässt, dann könntest Du ein 'Plugin' 
(oderwieimmerdasheisstinmax) bauen, das die Serielle richtig(tm) 
bedient.

Möglicherweise gibts auch irgendwo(tm) eine Treibereinstellung..

> Und wieso funktioniert es dann mittels Kabel trotzdem?

Weil Kabel keinen (unerwarteten) Overhead produziert, UART-über-Blauzahn 
aber schon (bei falscher Nutzung sogar ganz massiv).

HTH

von ... (Gast)


Lesenswert?

Bluetooth mach einen Verbindungsaufbau. Und wenn es diesen fuer jedes 
Byte einzeln machen muss ist die Bandbreite weg. Ich empfehl das Ganze 
als Stream zu senden, alle 30ms die 48 bytes, aber ohne die Verbindung 
abzubauen.

von Bernd (Gast)


Lesenswert?

Wo muss ich denn prinzipiell anfangen um daten als Stream zu senden?
In der Software mit der ich die Daten versende? Oder in den 
Einstellungen bei MAC? Oder beim Bluetooth Device selber?

Stehe da etwas auf dem Schlauch :-(

von User (Gast)


Lesenswert?

machst du 30 mal fwrite(1 byte) oder einmal fwrite(30 bytes)?

von g457 (Gast)


Lesenswert?

> machst du 30 mal fwrite(1 byte) oder einmal fwrite(30 bytes)?

Er macht wohl keines davon, max vermutlich grob ersteres. Zum Testen 
sollte der TO mal zweiteres probieren, hat er aber bisher 
augenscheinlich noch nicht. Erst wenn das klappt kann man darüber 
nachdenken, dem Rest zu optimieren.

von Bernd (Gast)


Lesenswert?

Hallo! Danke schonmal für die Infos.
Wie genau MAX die Daten sendet lässt sich so einfach nicht rauskriegen.
Scheinbar Byte für Byte.
Womit kann ich was anderes ausprobieren?
Müsste ich was mit Java programmieren um mehr optionen zur 
Schnittstellennutzung zu haben?

Mit Processing habe ich es auch probiert.. kommt aufs gleiche hinaus.

Gruss

Bernd

von Bernd (Gast)


Lesenswert?

Ich habe mal einen USB-Dongle genommen und ihn in mein MAC gesteckt. 
Damit geht es hervorragend! Liegt scheinbar an der MAC Hardware..

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.