Go Down

Topic: Schlechte 433MHz-Funkverbindung - wo ist das Problem? (Read 3766 times) previous topic - next topic

SkobyMobil

#15
May 23, 2017, 06:29 pm Last Edit: May 23, 2017, 06:30 pm by SkobyMobil
Hallo,
viel Ahnung vom Programmieren habe ich nicht- aber Dein Empfänger-Sketch
gehört- so wie er ist in die Tonne!
Das schafft nicht einmal ein Mega!

Zuerst würde ich mal die "VirtualWire.h" nicht benutzen. Der Mega hat echte
serielle Schnittstellen die um einiges schneller sind.

Dann nutzt Du die "Adafruit_GFX.h". Die ist langsamer als der Mega.
So etwas ist tötlich:
Code: [Select]

tft.setCursor(245, 60);
    tft.setTextColor(LIGHTGREY);
    tft.setFont(&Open_Sans_Light_12);
    tft.fillRect(237, 50, 45, 12, NEUTRALWHITE);

während das noch gemalt wird, macht der Mega schon lange etwas anders. Kommt
er dabei auf eine neue Malerei, bevor die alte fertig ist, dann rauscht es.

Dann werden in jedem Durchlauf eine Unmenge von Strings verarbeitet. Wenn
mich nicht alles täscht, dann legt der Mega davon eine Kopie im dynamischen
Speicher ab. Ich kann mir gut vorstellen, das dieser innerhalb von Sekunden
zugemüllt ist.

Zum Testen würde ich nur "Serial.print" verwenden- und alle TFT-Befehle
auskommentieren. Wenn "Serial.print" fehlerfrei läuft dann das raus-
und nur die TFT-Befehle nutzen.

So wie sich das liest, funken die Dinger ja wie wild in der Gegend unkonrolliert
rum. Verpasse denen doch selbst eine Kennung.

Also Du nennst einen Sender z.B. SenderA, einen anderen SenderB
Dann bastelst Du Dir im Mega eine EmpfangsRoutine die nur auf die Kennung
abfragt.
ist SenderA, dann verarbeite die Daten
Wenn alle Daten verarbeitet sind, dann erst gibst Du die Abfrage für den
nächsten Sender frei.
So kannst Du einen Sender nach dem nächsten verarbeiten.
Du sagtest ja, das es mit einem funktioniert.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

HotSystems

Hallo,
viel Ahnung vom Programmieren habe ich nicht- aber Dein Empfänger-Sketch
gehört- so wie er ist in die Tonne!
Das schafft nicht einmal ein Mega!

Zuerst würde ich mal die "VirtualWire.h" nicht benutzen. Der Mega hat echte
serielle Schnittstellen die um einiges schneller sind.
Ohhh...

Du willst die Serielle für eine 433 MHz-Funkübertragung verwenden.
Das mag bei speziellen Modulen funktionieren, aber nicht bei den hier verwendeten.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

SkobyMobil

Hallo,
"Output signal: TTL electric level signal entire transmit"
hoh, hoh, hooh- hört sich an wie Weihnachten...

Der Empfänger hat also einen "VirtualWire.h" Ausgang- und keinen Seriellen?
Das versuch mir einmal zu erklären. (dünnes Eis)
Gruß und Spaß dabei
Andreas
die zweite Maus bekommt den Speck...

HotSystems

Hallo,
"Output signal: TTL electric level signal entire transmit"
hoh, hoh, hooh- hört sich an wie Weihnachten...

Der Empfänger hat also einen "VirtualWire.h" Ausgang- und keinen Seriellen?
Naja, seriell ist der schon, allerdings wird in der Library mehr als nur Daten auslesen gemacht.
Diese werden in der Library auch entsprechend codiert/decodiert. dadurch sparst du dir weiteren eigenen Code. Beschreibung
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

daniel_e

Puh! Also erst mal danke für die rege Teilnahme!

Ich versuche das mal aufzudröseln:

Hast du den Effekt auch, wenn deine Sender zwischen dem Senden nicht schlafen, sondern warten?

Ich habe keine Erfahrung mit den Pinzuständen während der einzelnen Sleepmodes,
ein unbeabsichtigtes HIGH auf dem Sendepin könnte dir den Äther füllen...

Was hängt an Pin 7 und 8?

Wenn es der Sender ist, könntest du vor dem Sleep den Saft abdrehen.
Es gibt einzelne Sender, die direkt am Strom hängen (weil dort verfügbar) - die schlafen nicht, sondern sind daueraktiv, verlieren aber auch Datenpakete.

Der Hinweis mit der Sleepmode ist gut - ich checke mal, wie die Pins im Schlaf reagieren.

Pin 7 und 8 sind VCC und GND für den Magnetsensor, weil am Pro Mini diese Pins schon vom Sender belegt sind. Ich versuche das mal umzulegen und den Strom vor dem Schlafen auszuschalten. Super Hinweis!

Ich muss gestehen, deinen "Sleepmodus" durchblicke ich nicht.
Was bezweckst du damit ?
Ist der zum gezielten Senden, z.b. alle 8 Sekunden.
Warum sollen die Sender so schnell aufeinander folgend, senden.
Der Sleepmodus ist vor allem zum Stromsparen. Ich habe die Pro Mini durch Sleepmodes und Entfernen der LEDs auf 0,09 mAh bekommen. Damit verbrauchen sie 24mAh pro Tag und halten mit 4 Akkus über ein Jahr.

Alle 8 Sekunden senden nur die Sensoren, die für Türen oder Fenster sind. Die sollen relativ häufig einen Status abgeben. Das ist nicht schnell, wenn sie nur wenige Millisekunden zum Senden brauchen.


viel Ahnung vom Programmieren habe ich nicht- aber Dein Empfänger-Sketch
gehört- so wie er ist in die Tonne!
Das schafft nicht einmal ein Mega!

Zuerst würde ich mal die "VirtualWire.h" nicht benutzen. Der Mega hat echte
serielle Schnittstellen die um einiges schneller sind.

Dann nutzt Du die "Adafruit_GFX.h". Die ist langsamer als der Mega.
Gute Hinweise... muss ich alles checken.
Ich glaube aber nicht, dass die Adafruit GFX das Problem ist. Die Icons erscheinen nämlich super schnell und erst, wenn Daten überhaupt empfangen wurden. Die Wartezeit wird davon nicht beeinflusst.

Die VirtualWire.h nicht nutzen, sondern die serielle Schnittstellen? Aber es ist doch gerade der Sinn, dass ich kabellos arbeiten möchte. :-)



HotSystems

Ok, das mit dem Sleepmodus ist jetzt klar. Allerdings sind die 8 Sek. Pause zwischen den Aussendungen recht kurz. Was für einen Sinn soll das machen ?

Da reichen doch 30 Sek. genau so aus.

Und das mit der "VirtualWire" hat SkobiMobil sicher in den falschen Hals bekommen.
Klar das es mit Funk in deinem Fall nur mit VirtualWire funktioniert.
Oder eben mit der Alternative "RadioHead".

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

daniel_e

Hast du den Effekt auch, wenn deine Sender zwischen dem Senden nicht schlafen, sondern warten?

Ich habe keine Erfahrung mit den Pinzuständen während der einzelnen Sleepmodes,
ein unbeabsichtigtes HIGH auf dem Sendepin könnte dir den Äther füllen...

Wenn es der Sender ist, könntest du vor dem Sleep den Saft abdrehen.
Hab ich gecheckt. Während des Schlafens des Pro Minis schlafen auch die Pins brav und ruhig ohne Saft. Was eigentlich auch Sinn macht, da sonst im Sleepmodus weiterer unnötiger Strom verbraucht wird.

Ok, das mit dem Sleepmodus ist jetzt klar. Allerdings sind die 8 Sek. Pause zwischen den Aussendungen recht kurz. Was für einen Sinn soll das machen ?

Da reichen doch 30 Sek. genau so aus.

Und das mit der "VirtualWire" hat SkobiMobil sicher in den falschen Hals bekommen.
Klar das es mit Funk in deinem Fall nur mit VirtualWire funktioniert.
Oder eben mit der Alternative "RadioHead".
Ich habe bewusst eine sehr schlanke Sleep-Library gewählt. Bei dieser ist leider die maximale Schlafzeit 8 Sekunden. Ich muss also Counterschleifen drehen, wenn ich mehr Schlafzeit möchte, was ich auch tue. In meinem Beispiel wird nach einer Schleife von 8 Sekunden gesendet (Türsensor - der muss häufig senden). Manche Sensoren senden aber z.b. nur einmal nach 20 Schleifen (alle 160 Sekunden) - z.B. Temperatursensor.

Ziel des Projektes war es eigentlich mir in dem Moment, wenn ich die Haustüre öffne, ein Warnsignal zu geben falls noch irgendwo Fenster auf sind. Aber bei der aktuellen Verlässlichkeit wird das nichts.



daniel_e

Ich glaub ich lasse das ganze mal ein paar Tage liegen. Aktuell fehlen mir einfach die Ideen. RadioHead finde ich wahnsinnig kompliziert und ich habe es nun auch nach mehreren Stunden noch nicht mal geschafft einfachste Daten zwischen zwei Arduino zu verschicken.

Mein Frustfaktor steigt gerade ins unermessliche, weil ich wirklich dachte, dass es möglich sein muss einfachste Funkdaten hin und herschicken zu können. Gerade, wenn es zwischen zwei Geräten problemlos klappt. Keine Ahnung, warum ich da offenbar naiv war.

Danke für Eure Hilfe. Ich melde mich wieder, wenn ich ein paar Schritte weitergekommen bin.

ardubu

versuche doch einmal die Sender mit einem DigitalPin direkt vor dem Senden mit Strom zu versorgen und direkt nach dem Senden wieder ausschalten. Evtl. geben die Sender einen Träger ab, wenn sie am Strom hängen.

Schuppeste

#24
May 25, 2017, 04:04 pm Last Edit: May 25, 2017, 04:11 pm by Schuppeste
Es gibt eine grundlegend wichtige Library für 433MHz mit der alles super funktioniert inklusive Manchester decodierung und es gibt andere.

Das wichtige Schlagwort hier ist Manchester Dekodierung, die meisten Librarys heißen z.B. Manchester.

Ich benutze die ManchesterRX Library für sowas.. kann unter anderem noch ganz andere tolle Sachen.

Edit: Dazu auch noch, es gibt noch so eine Art Fake Modul, dort fehlt einfach eine Verstärkerstufe auf der Empfängerplatine, das sind 2 Widerstände, 2Kondensatoren und ein Sot3 IC.. Da hab ich mich eine Woche rumgeschlagen weil das Teil nur 1m Reichweite hatte. (Womöglich ist das mit einer genau abgelängten Antenne umgehbar)

daniel_e

versuche doch einmal die Sender mit einem DigitalPin direkt vor dem Senden mit Strom zu versorgen und direkt nach dem Senden wieder ausschalten. Evtl. geben die Sender einen Träger ab, wenn sie am Strom hängen.
Du meinst so?
Code: [Select]
   
digitalWrite(7, HIGH);
sprintf(Array, "%d, %d, %d.", blabla1, blabla2, blabla3);
vw_send((uint8_t*)Array, strlen(Array));
vw_wait_tx();
digitalWrite(7, LOW);


Versuche ich mal, habe aber nachgemessen. Da ist vorher und nachher kein Strom drauf. Nur die kurze Zeit während des Sendens.

SkobyMobil

Hallo,
„dass es möglich sein muss einfachste Funkdaten hin und herschicken zu können"

Dann mußt Du auch mal lesen, was andere so kritzel.
Mache Dir die Sender doch transparent, und empfange nur Daten von einem bestimmten,
verarbeite die, dann den nächsten Sender.
Gruß und Spaß
Andreas
P.S. und schaue einmal nach, was so ein Ding denn wirklich sendet
die zweite Maus bekommt den Speck...

HotSystems

Du hast leider die Frage von Theseus "wieviel Bytes sendest du" noch nicht beantwortet.
Das könnte ein Grund für dein Problem sein.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

daniel_e

Du hast leider die Frage von Theseus "wieviel Bytes sendest du" noch nicht beantwortet.
Das könnte ein Grund für dein Problem sein.
Das kann ich nicht genau beantworten, weil mir das Wissen fehlt, wie ich das berechnen kann.

Bei den Sendern habe ich darum den Daten-Pin mit einem Multimeter gemessen. Diese zeigen nach dem Sleep-Modus nur einen ganz kleinen Sekundenbruchteil lang ein Signal, danach wieder 0,00. Das ist so kurz, dass ich eine Kollision zu fast 100% ausschließen kann. Außerdem schalte ich, nach Hinweis von ardubu, nun auch direkt nach dem Senden den Strom auf VCC für den Sender ab. Hinzu kommt, dass alle Sender nach dem Senden unterschiedlich lange Pausen machen.

Ich habe eine Datenkollision demnach für mich persönlich ausgeschlossen.


HotSystems

Das kann ich nicht genau beantworten, weil mir das Wissen fehlt, wie ich das berechnen kann.
:smiley-sad-blue:

Du musst doch wissen, was du für Daten sendest bzw. wie die aussehen.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Go Up