Forum: Mikrocontroller und Digitale Elektronik Mehr als 58 Bytes mit E32-868T drahtlos übertragen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Wolle G. (wolleg)


Angehängte Dateien:

Lesenswert?

Es ist eine Fortsetzung aus: 
Beitrag "512 Byte-Sektor einer SD-Karte mit E32-868T drahtlos übertragen" (enthält auch das 
Datenblatt zum E32-868T)
Zwischenzeitlich habe ich weitere Versuche mit dem E32-868T unternommen, 
um mehr als 58Bytes zu übertragen.
Offensichtlich habe ich das Datenblatt nicht richtig verstanden, wo von 
einem Puffer von 512 Bytes gesprochen wird.
Meine Frage: Was muss man tun, um den 512 Bytes Puffer zu laden (oder 
was ist mit Puffer gemeint?) und wie kann man den Inhalt versenden.
Um über 58 Bytes zu kommen, habe ich versucht, einzelne Datenpakete zu 
je 58 Bytes zu versenden. Dazu werden nach dem Senden von 58 Bytes noch 
einmal die Adresse und der Kanal (empfaenger_festlegen) an den Empfänger 
gesendet und danach weitere Datenbytes. Das hat leider nur zum 
Teilerfolg geführt. Ab einer Summe von >97 Bytes wurden ab Byte 59 nur 
Nullen empfangen.
Im Anhang die aus meiner Sicht entscheidenden Programmteile für das 
Senden.

Hat schon jemand mit den Dingern ( E32-868T) erfolgreich gearbeitet und 
könnte mir helfen?

von temp (Gast)


Lesenswert?

Nimms mir nicht für Übel, aber du solltest dich als erstens von diesen 
E32 Teilen trennen. Das was du willst, unterscheidet sich zu sehr von 
dem für das diese Teile gebaut sind. Das kann nur Frust erzeugen.
Besser ist es hier direkt mit den Lora-Chips direkt zu arbeiten. RFM95 
oder ein vergleichbares Board. Die sind nach etwas Einarbeitung auch 
nicht schwieriger zu handeln. Ausserdem können die E32xxx die Frequenz 
nur im 1MHz Raster einstellen, was zur Folge hat, dass man die in D kaum 
legal betreiben kann. Die E32 bestehen ja auch nur aus einen sx12xxx 
Chip und einen kleinen Controller und dieser Controller ist hier mehr im 
Wege als das er nützt.

von Christian S. (roehrenvorheizer)


Lesenswert?

Wolle G. schrieb:
> Offensichtlich habe ich das Datenblatt nicht richtig verstanden, wo von
> einem Puffer von 512 Bytes gesprochen wird.
> Meine Frage: Was muss man tun, um den 512 Bytes Puffer zu laden (oder
> was ist mit Puffer gemeint?) und wie kann man den Inhalt versenden.

Hallo,

das Datenblatt habe ich eben einige Zeit gelesen. Ja, der 
512-Byte-Puffer scheint wirklich zu existieren. Es scheint so, also 
mußte man nach den ersten 58 Bytes einfach weiter Bytes einschreiben, 
damit weiter gesendet wird. Oberhalb von 58 Bytes werden dann angeblich 
automatisch neue Pakete generiert, die wiederum 58-Bytes-Bündel 
enthalten. Vermutlich paßt dies zum 64-Byte-Puffer des SX1278 und ist 
fix vorgegeben.

Das Datenblatt läßt auf den ersten Blick die Funktionsweise nicht genau 
erkennen, da es wie so oft recht schwammig formuliert ist.

Nach Übertragung von so einem 58-Bytes-Paket ändert sich anscheinened 
AUX, um zu signalisieren, daß das nächste 58-Bytes-Paket eingefüllt 
werden kann. Füllt man keine weiteren Daten mehr ein, wartet es drei 
Bytes lang und sieht das als Ende an. So weit mein Verständnis bisher.

mfG

von Wolle G. (wolleg)


Lesenswert?

Christian S. schrieb:
> das Datenblatt habe ich eben einige Zeit gelesen. Ja, der
> 512-Byte-Puffer scheint wirklich zu existieren. Es scheint so, also
> mußte man nach den ersten 58 Bytes einfach weiter Bytes einschreiben,
> damit weiter gesendet wird. Oberhalb von 58 Bytes werden dann angeblich
> automatisch neue Pakete generiert,....
Danke.
So hatte ich es im Wesentlichen auch verstanden. Leider führten meine 
Versuche, auf diese Art mehr als 58 Bytes zu senden, noch nicht so 
richtig zum Erfolg.
Nur wenn ich nach 58 Bytes noch einmal Adresse und Kanal eingebe, werden 
weitere 58 Bytes richtig übertragen.
Da es einen 512 Bytes großen Puffer geben soll, wollte ich diese 
Verfahrensweise mit der 58Bytes-Stückelung vermeiden.
Deshalb noch einmal die Frage an alle Experten, welcher Weg zum Ziel 
führen könnte.

temp schrieb:
> RFM95 oder ein vergleichbares Board. Die sind nach etwas Einarbeitung auch
> nicht schwieriger zu handeln.
Wäre RFM69HW, 868 MHz vergleichbar? Damit hatte ich vor einigen Jahren 
leider keinen Erfolg. Deshalb wollte ich es nun mit E32-868T versuchen. 
Damit hat sich wenigsten ein Teilerfolg eingestellt. Wenn jemand ein 
funktionstüchtiges Programm für RFM69HW, 868 MHz für mich übrig hat, 
würde mich es freuen. (vorzugsweise Ansteuerung mit MSP430F1611 o. ä.)

von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo,

das RFM95 ist dem RFM69 sehr ähnlich, nur um LoRa erweitert mit einem 
zweiten Satz Registern zum Umschalten.

RFM69 kann bis 255 Bytes Paketlänge im Paketmodus übertragen:
https://cdn.sparkfun.com/datasheets/Wireless/General/RFM69HCW-V1.1.pdf
5.5.2. Packet Format
5.5.2.1. Fixed Length Packet Format
5.5.2.2. Variable Length Packet Format
5.5.2.3. Unlimited Length Packet Format

Das klappt aber nur so lange, wie auch der Empfänger des laaangen 
Datenpaketes den Takt der FSK-Modulation mit halten kann, sonst 
überspringt er das eine oder andere Bit und detektiert falsch.
Das Datenblatt ist recht umfangreich und trickreich kompliziert 
beschrieben. Codeschnipsel habe ich im Forum irgendwo schon mal 
verewigt, finde sie aber momentan nicht.

mfg

von Wolle G. (wolleg)


Lesenswert?

Christian S. schrieb:
> Codeschnipsel habe ich im Forum irgendwo schon mal
> verewigt, finde sie aber momentan nicht.

Es muss ja nicht sofort sein. Ich wäre sehr an einem Schnipsel 
interessiert.

von temp (Gast)


Lesenswert?

Wolle G. schrieb:
> Wäre RFM69HW, 868 MHz vergleichbar? Damit hatte ich vor einigen Jahren
> leider keinen Erfolg.

RFM69W kann kein Lora, somit ist das nicht vergleichbar. Der 
prinzipielle Umgang mit den Modulen ist aber vergleichbar. Wenn du von 
den besseren Reichweiten im Lora Modus profitieren willst, wird es 
langsamer.

Trotzdem noch eine Frage. Wie oft und wie viele solcher 512-Byte Blöcke 
musst du denn übertragen und in welcher Zeit? Ich vermute mal dass dein 
Vorhaben die 0,1% bzw. 1% Regelungen im 868MHz Band damit sprengen wird. 
Außerdem erhöhen zu lange Einzelpakete die Fehleranfälligkeit deutlich. 
Die Lora Chips kommen alle von Semtech, egal ob auf dem RFM9x oder 
ES32xxx, und die haben nur 256Byte RAM für die Buffer, somit kommst du 
um eine Stückelung sowieso nicht herum.

Wolle G. schrieb:
> Wenn jemand ein
> funktionstüchtiges Programm für RFM69HW, 868 MHz für mich übrig hat,
> würde mich es freuen. (vorzugsweise Ansteuerung mit MSP430F1611 o. ä.)

Dazu findest du auf github gefühlte tausende Beispiele. Es ist ja auch 
nur immer das gleiche: Über SPI ein paar Register füllen bzw. lesen. Wie 
der Controller heißt ist ja völlig egal. Und wenn du mit SPI schon 
überfordert sein solltest, dann lerne oder lass es ganz.

Eventuell ist eine komplett andere Technologie wie WLAN für das gesamte 
Vorhaben die bessere Alternative. Aber dazu müsstest du uns mehr 
verraten.

von Falk B. (falk)


Lesenswert?

temp schrieb:
> Trotzdem noch eine Frage. Wie oft und wie viele solcher 512-Byte Blöcke
> musst du denn übertragen und in welcher Zeit? Ich vermute mal dass dein
> Vorhaben die 0,1% bzw. 1% Regelungen im 868MHz Band damit sprengen wird.
> Außerdem erhöhen zu lange Einzelpakete die Fehleranfälligkeit deutlich.
> Die Lora Chips kommen alle von Semtech, egal ob auf dem RFM9x oder
> ES32xxx, und die haben nur 256Byte RAM für die Buffer, somit kommst du
> um eine Stückelung sowieso nicht herum.

Der gute Wolle ist Ü80 und hat keinen nennenswerten 
Programmiererhintergrund. Mit Englisch steht er auf Kriegsfuß. Ich 
bewundere seine Ausdauer, hab da aber auch Mitleid. Denn er versucht da 
was, das ein GUTES Stück außerhalb seiner Reichweite liegt.

Man kann das Problem schon mit seiner Hardware lösen, dazu braucht es 
aber DEUTLICH mehr Wissen und Erfahrung, als er hat. Und das geht bei 
Kleinigkeiten der C-Programmierung los.

von Wolle G. (wolleg)


Lesenswert?

Das Thema muss mal wieder aus dem Keller geholt werden.
Gibt es zwischenzeitlich jemanden, der eine Lösung kennt, wie man an den 
512Byte Puffer kommt und den Inhalt ohne nennenswerte Unterbrechungen in 
einem "Rutsch" versenden kann.
Oder wie müsste man das Datenblatt dazu deuten?

von Falk B. (falk)


Lesenswert?

Wolle G. schrieb:
> Das Thema muss mal wieder aus dem Keller geholt werden.

Warum? Dort war es gut aufgehoben.

> Gibt es zwischenzeitlich jemanden, der eine Lösung kennt, wie man an den
> 512Byte Puffer kommt und den Inhalt ohne nennenswerte Unterbrechungen in
> einem "Rutsch" versenden kann.

Da fehlt ein Fragezeichen.

Wenn dein Tranceiver keine so langen Datenpakete versenden kann, muss 
man diese halt in kleine Brocken aufteilen. Ist doch logisch. Aber ja, 
dabei muss man schon das eine oder andere Detail beachten. Und ja, dazu 
braucht es DEUTLICH mehr Ahnung von C und Programmiertechnik, als du sie 
hast.
Tu dir einen Gefallen und such dir ein Hobby, daß im Rahmen deiner 
Möglichkeiten liegt. Ich spiel auch nicht Klavier und tanze auch kein 
klassisches Ballett.

von Wolle G. (wolleg)


Angehängte Dateien:

Lesenswert?

Falk B. schrieb:
> Und ja, dazu braucht es DEUTLICH mehr Ahnung von C und
> Programmiertechnik,  als du sie hast.
> Tu dir einen Gefallen und such dir ein Hobby, daß im Rahmen deiner
> Möglichkeiten liegt.
Warum solch unnötigen und nicht helfenden Zeilen? Was hat das mit der 
Hilfeanfrage zu tun?
Schade um die Zeit, um diesen Text zu schreiben.
Wir sind doch hier nicht in sozialen Netwerken, wo viel Stuss 
abgesondert wird. (Oder wie man die Netzwerke nennt)
Besser wäre vielleicht ein ähnlicher Stil, wie die Dir bekannten 
ehemaligen Forenteilnehmer Buchegger oder Rufus an den Tag legten.
Einfach mal analysieren und vergleichen! und beachten

Nun wieder zum Problem und zu meinem Stand:
Mit der Funktion "void wert_an_E32(void)"  lassen sich jetzt in den
 E32-xx 512 Byte "irgendwo einlagern" , um danach übertragen zu werden. 
Nach jeweils 58 Bytes muss jedoch noch einmal die Funktion
"void empfaenger_festlegen(void)", also die Adresse und der Kanal vom 
Empfangsgerät, eingefügt werden.
Die Übertragung ("wert_an_E32") in den E32xx (Sendegerät) dauert nach 
Oszi-beobachtung ca. 600ms.
Danach beginnt die eigentliche Sendung an das Empfangsgerät. Beobachtet 
man dort mit dem Oszi den Empfang an TXD von E32xx, so werden jeweils im 
Abstand von ca 600ms 58Bytes empfangen.
Nach 512 Bytes ist die Übertragung beendet. Die Kontrolle an meiner 
Flüssigkristallanzeige (FKA) zeigt, dass alle Bytes richtig angekommen 
sind. Überschreitet man die 512 Bytes, z.B. dadurch, dass zum Schluss
statt 48 Bytes 49 Bytes eingegeben werden, dann werden nur 1 x 58 Bytes, 
also nur ein Datenpaket, übertragen.
Im Anhang die Konfiguration vom Sender und die genannten Funktionen.

Was könnte man evtl. in der Zeile:
txbuffer[3] =  0x1A // 8N1, UART baut rate:9600 (bps),
                    // Übertragungsrate:2,4k (bps)
(oder wo ) noch ändern, um den Abstand zwischen den 
58-Bytes-Datenpaketen zu verkürzen?

Hoffentlich habe ich mich verständlich genug ausgedrückt und vielleicht 
könnte jemand  mir helfen.

: Bearbeitet durch User
von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo,


schaue doch mal, was hier über die Datenrate bei LoRa zu lesen ist auf 
Seite 2.

https://lora-developers.semtech.com/uploads/documents/files/Understanding_LoRa_Adaptive_Data_Rate_Downloadable.pdf

Da ist angegeben, daß die Dauer einer Übertragung vom Spreizfaktor 
abhängt. Im Detail kenne ich mich damit nicht aus und lese mich jetzt 
nicht stundenlang ein. Es scheint also, daß die Dauer Deiner 
512-Bit-Übertragung anstatt 22 ms eben die 600 ms benötigt, weil bei 
LoRa mehrmals das gleiche ausgesendet wird und noch gespreizt wird (kann 
falsch beschrieben sein, vorsicht). Erste Idee wäre also, den 
Spreizfaktor zu ändern, falls dies per Konfiguration möglich ist.

Es schient ja jetzt wie gewünscht zu funktionieren, auch wenn 
"empfaenger_festlegen(); " ständig wiederholt werden muß. Man könnte mit 
Logik annehmen, daß es so sein müßte, oder auch nicht, weil das 
Datenblatt sich hierzu ausschweigt.

Wolle G. schrieb:
> Überschreitet man die 512 Bytes, z.B. dadurch, dass zum Schluss
> statt 48 Bytes 49 Bytes eingegeben werden, dann werden nur 1 x 58 Bytes,
> also nur ein Datenpaket, übertragen.

Das hätte ich so ähnlich erwartet, da der Sender auf Verdacht 
entscheidet, ob ein Datenpaket zu Ende ist oder ob da ein Fluß von Daten 
ständig weiter ankommt. Der 512-Byte-Puffer läuft dann über, bzw die 
Software im Modul  füllt dann wieder von Anfang an auf.


Kommen dann beim Empfänger die 512-Bytes-Daten als Ganzes heraus oder in 
58er-Paketen? Ist die Wiederholung der Adresse dann herausgelöscht? WAs 
zeigt denn die Flüssigkristallanzeige?

mfg

: Bearbeitet durch User
von Matthias (Gast)


Lesenswert?

Christian S. schrieb:
> 5.5.2.3. Unlimited Length Packet Format
>
> Das klappt aber nur so lange, wie auch der Empfänger des laaangen
> Datenpaketes den Takt der FSK-Modulation mit halten kann, sonst
> überspringt er das eine oder andere Bit und detektiert falsch.
> Das Datenblatt ist recht umfangreich und trickreich kompliziert
> beschrieben. Codeschnipsel habe ich im Forum irgendwo schon mal
> verewigt, finde sie aber momentan nicht.

Ist es :D
Es funktioniert aber aber hab es selber so im betrieb mit rund 1000 
Bytes
Aber Mehr habe ich nicht hinbekommen, zu einem geht beim XMEGA gerne der 
Speicher aus wenn man das mit UART noch versenden will und auch ein Paar 
packte puffern will.

Danach hatte ich meistens CRC fehler bestimmt hätte ich aber noch was an 
den RF Einstellungen tunen Könen.

Vereinfacht gesagt musst du dich um alles kümmern CRC, Paket Head, reset 
by Time-outs wann dein Packet fertig ist das genug um Puffer ist etc....

von temp (Gast)


Lesenswert?

Christian S. schrieb:
> Das hätte ich so ähnlich erwartet, da der Sender auf Verdacht
> entscheidet, ob ein Datenpaket zu Ende ist oder ob da ein Fluß von Daten
> ständig weiter ankommt. Der 512-Byte-Puffer läuft dann über, bzw die
> Software im Modul  füllt dann wieder von Anfang an auf.

Wie oft muss man das noch wiederholen, mag sein dass der Controler im 
E32 512 Byte Buffer hat, der Lora Chip aber nicht. Und der kann auch 
keinen Datenstrom senden, sondern nur Pakete. Da steckt dann auch 
jedesmal eine oder mehrere Kennungen, CRCs u.s.w. drin. Wenn du den E32 
mit Daten fütterst, macht es in meinen Augen keinen Sinn blind die Daten 
da reinzuhauen. Halte dich an die genannte Grenze von 58 Byte und 
schreib erst die nächsten rein, wenn das letzte Packet draussen ist. 
Dann  hast du wenigstens die Kontrolle über den Prozess. Anderenfalls 
macht der E32 Auto sub packing über das du keine Kontrolle hast.
Auf der Empfänger Seite kommen die Daten sowieso in Paketen an und nicht 
als Datenstrom. Und fehlende oder kaputte Pakete musst du auch 
berücksichtigen und eventuell wiederholen.

Es wird wirklich Zeit, dass du mal mit der Sprache rausrückst was das 
überhaupt werden soll.

von Wolle G. (wolleg)


Lesenswert?

Christian S. schrieb:
> Es schient ja jetzt wie gewünscht zu funktionieren, auch wenn
> "empfaenger_festlegen(); " ständig wiederholt werden muß. Man könnte mit
> Logik annehmen, daß es so sein müßte, oder auch nicht, weil das
> Datenblatt sich hierzu ausschweigt.

Richtig. Im Prinzip funktioniert die 512 Bytes Übertragung.
Ich kann mir aber nur schwer vorstellen, dass man immer zwischen zwei 
Datenpaketen (je 58 Bytes) ca. 600ms warten muss und hoffe, dass jemand 
den Grund für diese Arbeitsweise kennt. Dann hätte man evtl. eine 
Möglichkeit, noch irgendwo zu "drehen". s. u.

temp schrieb:
> Es wird wirklich Zeit, dass du mal mit der Sprache rausrückst was das
> überhaupt werden soll.

Es sollte es eigentlich egal sein, warum sektorenweise Daten einer 
SD-Karte übertragen werden sollen. Aber wenn es hilft?

Es werden in einem Heizungskeller alle 8s 8 Temperaturen (VL, RL,AT, WW 
usw.) mit den Temperaturfühler DS18B20 gemessen und auf einer SD-Karte 
abgespeichert. Im unregelmäßigen Abständen wird die auf der SD-Karte 
befindliche Datei auf einen Laptop kopiert und am Rechner werden dann 
die Messwerte in Kurven umgewandelt.

Jetzt kam die Idee des Bastlers, dass man mit einer Fernübertragung sich 
die "Arbeit erleichtern" kann.
Dazu soll der Inhalt der Datei, die sich auf der SD-Karte des 
Datenspeichers befindet, auf Knopfdruck sektorenweise (512 Bytes) 
gelesen und dann verschickt werden. (so die Vorstellung)

Wie schon mal angedeutet, wollte ich evtl., falls sinnvoll,  an der 
Konfiguration noch etwas ändern, um zunächst den aktuellen Abstand
(ca 600ms) zwischen den gesendeten Datenpaketen (58 Bytes) zu 
verringern.
(Zeile: txbuffer[3] =  0x1A; s. o. 28.1.22)
Unter  DB Pkt. 7.5. "Parameter setting command " gibt es den Pkt.
"Air data rate", den ich nicht deuten kann.
Was ist darunter zu verstehen? (Laie !)

: Bearbeitet durch User
von temp (Gast)


Lesenswert?

Wolle G. schrieb:
> Es werden in einem Heizungskeller alle 8s 8 Temperaturen (VL, RL,AT, WW
> usw.) mit den Temperaturfühler DS18B20 gemessen und auf einer SD-Karte
> abgespeichert. Im unregelmäßigen Abständen wird die auf der SD-Karte
> befindliche Datei auf einen Laptop kopiert und am Rechner werden dann
> die Messwerte in Kurven umgewandelt.
>
> Jetzt kam die Idee des Bastlers, dass man mit einer Fernübertragung sich
> die "Arbeit erleichtern" kann.
> Dazu soll der Inhalt der Datei, die sich auf der SD-Karte des
> Datenspeichers befindet, auf Knopfdruck sektorenweise (512 Bytes)
> gelesen und dann verschickt werden. (so die Vorstellung)

Ich hatte sowas befürchtet. Denn Sinn kann ich allerdings nicht 
verstehen. Wenn man 8 Werte pro Record hat mit max je 2 Byte sind das 16 
Byte. Genau für so etwas ist LORA gemacht. Mehr würde ich auch nicht am 
Stück versenden. Und wenn du Temperaturen alle 8s versendest, ist das 
schon ein extrem feines Raster. Wozu dann überhaupt noch die SD Karte? 
Selbst wenn 1% der Pakete verloren gehen reicht das für 
Temperaturanwendungen sicher aus.
Was du vorhast ist ein Bulk-Transfer von mehreren kb wenn das per Hand 
bedient werden soll. Das geht mit LORA weder rechtlich noch praktikabel. 
Für sowas ist WLAN (ESP32 o.ä.) oder Bluetooth sicher besser geeignet.

Ab diesem Punkt bin ich hier raus. Wenn du mit dem Kopf durch die Wand 
willst, dann bastle weiter an hoffnungslosen Sachen.

von Wolle G. (wolleg)


Lesenswert?

temp schrieb:
> Wenn du mit dem Kopf durch die Wand willst, dann bastle weiter an
> hoffnungslosen Sachen.
> Wozu dann überhaupt noch die SD Karte?
Ganz einfach. Mein Datenspeicher mit einer SD-Karte läuft jetzt schon 
erfolgreich über 10 Jahre und es gibt keinen Grund, die bewährte 
Speicherung zu ändern. Das Fernauslesen ist nur eine neue Idee zur 
Befriedigung des Spieltriebes. Wenn die Idee aber nicht machbar sein 
sollte, halb so schlimm. Die sichere Datenspeicherung auf SD bleibt ja 
erhalten.

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.