Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
  • Seite:
  • 1

THEMA:

Fesselflugtimer als DIY Jeti Sensor und EEPROM-Probleme 31 Mär 2020 11:18 #1

  • sierra_uniform
  • sierra_uniforms Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 268
  • Dank erhalten: 134
Hallo DIY-Gemeinde,
ich bin gerade dabei mir einen neuen Fesselflugtimer zu erstellen, den man per Fernsteuerung abschalten kann. Als Sender verwende ich einen Minisender mit R3L Empfänger als Hf-Modul und einer Jetibox mini. Der Timer hat 10 steuernde Parameter und ist als Jeti-Sensor konzipiert. Die Parameter werden in EEPROM vorgehalten. Deren Änderung erfolgt über Jetibox Dialoge. Die Ausgaben für alle Parameter werden in Tabellen hinterlegt, so dass es nur eine einzige, eigentlich sehr einfache Ausgabe- und Änderungsroutine für alle Parameter gibt. Das funktioniert perfekt, bis auf den letzten Parameter. Bei diesem landet die Änderung nicht im EEPROM obwohl der verwendete Tabellenindex korrekt ist. Um diesen zu überprüfen habe ich ihn in der Schreibroutine zusätzlich als EX-Parameter ausgegeben, so dass ich ihn auf der DC16 angezeigt bekomme. Ich habe bisher keine Erklärung dafür gefunden, warum der letzte Parameter nicht im EEPROM landet und bräuchte da die Hilfe eines Experten.
Die relevanten Definitionen und Routinen habe ich in der angehängten .txt Datei zusammengestellt.
Einen Screenshot von der Jetibox-Ausgabe des letzten Parameters und der verwendeten Indizes ist ebenfalls beigefügt.

Viele Grüße und bleibt alle gesund
Hermann
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Fesselflugtimer als DIY Jeti Sensor und EEPROM-Probleme 31 Mär 2020 12:00 #2

  • ThLehmann
  • ThLehmanns Avatar
  • Offline
  • Platinum Boarder
  • Platinum Boarder
  • Beiträge: 390
  • Dank erhalten: 148
Moin Hermann,
maxpar ist der letzte Wert in Deinem Enum, Du schreibst aber die Anzahl maxpar-1 in das EEprom, also einen zu wenig.
Stelle Dir vor Du möchtest nur einen Wert ins EEprom schreiben:
enum{
par1,
maxpar
};
par1 wäre dann Index 0, maxpar Index 1, Schreiben würdest Du jetzt wieviele Bytes ?

Um die genaue Elemente Anzahl des Arrays zu bestimmen geht es auch anders (maxpar aus dem enum entfernen)
int par[] = ... da hast Du die 16 BIT Werte abgelegt
Anzahl = sizeof(par) / sizeof(par[0]);
Das ganze dann als Macro zur einfachen (überall) Verwendung:
#define ARRAYCNT(_x) ( sizeof(_x) / sizeof(_x[0]) )

for (int i=0; i<ARRAYCNT(par); i++)
EEPROM.put (i*2, par); // "par Eckige i Eckige" wird nicht angezeigt
immer schön vorsichtig landen
Gruß, Thomas
Folgende Benutzer bedankten sich: sierra_uniform

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Letzte Änderung: von ThLehmann.

Fesselflugtimer als DIY Jeti Sensor und EEPROM-Probleme 31 Mär 2020 13:07 #3

  • sierra_uniform
  • sierra_uniforms Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 268
  • Dank erhalten: 134
Hallo ThLehman,
vielen Dank für Deine Antwort. maxpar ist nicht der letzte Parameter sondern rpm_regelung. Insofern ist das Schreiben der Anzahl maxpar -1 schon gewollt und m.E. auch richtig. Ich habe den maxpar nur angefügtt, da ich die Befehle in den verschiedenen Routinen nicht immer anpassen muss, wenn ich einen weiteren Parameter hinzufüge. Bin bei der Entwicklung so vorgegangen, dass ich zunächst nur die wenigen, wichtigsten Parameter realisiert und dann immer wieder weitere dazugenommen habe. Ich hätte natürlich auch maxpar mit dem Index des letzten Parameters definieren können. Dann hätte ich aber wieder jedes mal die Definition anpassen müssen. Mit Aufnahme in den enum hat sich maxpar als Index der Anzahl Parameter + 1 immer automatisch geändert.
Von daher bleibt mein Problem also wohl bestehen. Ich kapiers einfach nicht, warum das so nicht gehen soll.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Fesselflugtimer als DIY Jeti Sensor und EEPROM-Probleme 31 Mär 2020 13:11 #4

  • sierra_uniform
  • sierra_uniforms Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 268
  • Dank erhalten: 134
noch ergänzend:: Der Hinweis mit dem sizeoff ist natürlich super, werde die Anzahl so definieren, dann muss man sich auch nicht mehr das Hirn mit dem -1 verbiegen. Nochmals danke!

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Fesselflugtimer als DIY Jeti Sensor und EEPROM-Probleme 31 Mär 2020 13:17 #5

  • ThLehmann
  • ThLehmanns Avatar
  • Offline
  • Platinum Boarder
  • Platinum Boarder
  • Beiträge: 390
  • Dank erhalten: 148
Hmm, schon merkwürdig, ich sage Dir genau wo Dein Denkfehler liegt und Du ignorierst das völlig und beharrst darauf das Deine fehlerhafte Lösung richtig ist :):)
Versuche doch bitte zu verstehen was ich geschrieben habe:
>Stelle Dir vor Du möchtest nur einen Wert ins EEprom schreiben:
>enum{
>par1,
>maxpar
>};

Du machst einen Gedankenfehler mit Index und Anzahl !
immer schön vorsichtig landen
Gruß, Thomas

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Letzte Änderung: von ThLehmann.

Fesselflugtimer als DIY Jeti Sensor und EEPROM-Probleme 31 Mär 2020 17:24 #6

  • sierra_uniform
  • sierra_uniforms Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 268
  • Dank erhalten: 134
o.k. ich gehe jetzt mal davon aus, dass Du Recht hast und werde das Programm nach Deinen Vorschlägen ändern. Vielen Dank dafür.
Aber gestatte mir trotzdem noch ein / zwei Verständnisfragen:
Der Parameter rpm_status ist der 10. Parameter. Der Index für die Parametertabelle ist ist dann doch 9 weil ja mit 0 angefangen wird - oder liege ich da falsch? Mit Adresse 9*2 wird jedenfalls geschrieben.. Dass tatsächlich der Index 9 und damit Adrresse 18 verwendet wird, sollte mit dem Screenshot der DC 16 m.E. nachgewiesen sein. Oder doch nicht?
Ich hatte mir für mein Verständnis die angehängte Übersicht gemacht. Was ist an dieser falsch?
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Seite:
  • 1
Ladezeit der Seite: 0.231 Sekunden
Powered by Kunena Forum