Aus der W. schrieb:> Ich hoffe mal, beim Sketchhochladen wird das EEPROM nicht gelöscht.
Es ist ja allgemein bekannt, dass Halbleiter das tun, was man "hofft"
Man man man ...
Nicht nur eine C++ Buch lese Hemmung, sondern auch noch eine Datenblatt
lese Schwäche obendrauf.
Aber immerhin kann es Adressen im EEPROM willkürlich festsetzen.
Scheinbar resistent gegen alles.
Oft ist es sinnvoll, nicht mit Eeprom Offset Adressen zu arbeiten
sondern stattdessen eine Struktur zu definieren und diese dann ins
eeprom zu schreiben bzw zu lesen. Als ersten Wert in der Struktur nehme
ich gerne
eine Versionsnummer, damit das Programm bei Programmerweiterungen und
Änderung der Eeprom-Datenstruktur in der Lage ist, auch Daten aus dem
Eeprom zu lesen, die mit einer alten Programmversion hineingeschrieben
wurden:
struct EEP_DATA
{
uint32 version;
float wertA;
int32 wertB;
};
Gelesen wird somit zunächst die Versionsnummer:
4 Bytes abAdresse 0
Dann abhängig von der Versionsnummer die passende Struktur befüllen:
immer ab Eeprom Adresse 0 mit dem passenden sizeof(EEPDATA).
Schreiben erfolgt ebenfalls mit dem aktuellen sizeof(EEPDATA) ab Adresse
0.
Es empfiehlt sich, in der Struktur erst die 32Bit Variablen, dann die
16Bit Variablen und erst am Ende die 8Bit Variablen zu definieren, um
Füllbytes aufgrund von Alignment zu vermeiden.
Aus der W. schrieb:> Warum steht da ein f hinter der Zahl?
Das ist ein Suffix. Damit kannst du den Typ des Literals festlegen.
122.456 ist erstmal ein double. Mit dem f zwingst du das auf float.
Das ist hier aber überflüssig, da dies bei der Zuweisung an die Variable
f automatisch passiert.
Man braucht das für Berechnungen um z.B. Überläufe zu verhindern
Es gibt auch Suffixe für Integer-Typen
https://www.c-plusplus.net/forum/topic/322583/was-ist-ein-suffix
>Man man man ...>Nicht nur eine C++ Buch lese Hemmung, sondern auch noch eine Datenblatt>lese Schwäche obendrauf.>Aber immerhin kann es Adressen im EEPROM willkürlich festsetzen.>Scheinbar resistent gegen alles.
Deine Sprache ist unfreundlich. Gewöhne Dir bitte eine höfliche
Ausdrucksweise an. Mache Dir Gedanken, wie Deine Ausdrucksweise auf
andere wirkt und welche Folgen sie hier im Thread hat.
Danke im Voraus.
Dirk B. schrieb:> Das ist ein Suffix. Damit kannst du den Typ des Literals festlegen.> 122.456 ist erstmal ein double. Mit dem f zwingst du das auf float.>> Das ist hier aber überflüssig, da dies bei der Zuweisung an die Variable> f automatisch passiert.>> Man braucht das für Berechnungen um z.B. Überläufe zu verhindern>> Es gibt auch Suffixe für Integer-Typen> https://www.c-plusplus.net/forum/topic/322583/was-ist-ein-suffix
Danke an Dirk, mir war dies neu.
Aber ich hab ja auch kein Buch.... ;-)
Aus der W. schrieb:> Dieser Code kommt zuerst rein,> danach der Haupt-Sketch.> Ich hoffe mal, beim Sketchhochladen wird das EEPROM nicht gelöscht.
Funktioniert ufb. War aber ein Fehler drin,
muss heißen EEPROM.put(60, drehungenrechts);
Belegt werden bei int nur zwei Bytes.
Also Adressen 0,2,4, und so fort kann wählen,
wenn man die Speicherplätze lückenlos hintereinander
belegen will. Mit 0 und 60 geht auch.
Anbei der Test-Sketch. Wenn mp HIGH, leuchtet die LED und
die Werte sind korrekt gespeichert und gelesen.
Mit den Adressen 0 und 1 leuchtet sie nicht, was zu erwarten war.
Könnt Ihr auch auf einem UNO-Board testen.
Als nächstes baue ich das in den Code ein.
Dirk B. schrieb:> Das ist hier aber überflüssig
Danke. In dem Beispiel-Sketch sind Inhalte die mich
verwirren und überfordern. Die Funktion put und get
ist ja genial einfach. Genau mein Ding,
tnx Arduino.
LG
old.
Dirk B. schrieb:> Es gibt auch Suffixe für Integer-Typen
Auch für Zeiten!
Und wenn man Hunger auf Suffixe hat, kann man sich selber welche bauen,
die einem besser schmecken als die vordefinierten.
Heinz schrieb:> Dann abhängig von der Versionsnummer die passende Struktur befüllen:> immer ab Eeprom Adresse 0 mit dem passenden sizeof(EEPDATA).>> Schreiben erfolgt ebenfalls mit dem aktuellen sizeof(EEPDATA) ab Adresse> 0.
put und get benötigen kein externes sizeof(). Das haben sie selber im
Bauch.
offsetof() ist da viel interessanter und oftmals sehr nützlich
Heinz schrieb:> Es empfiehlt sich, in der Struktur erst die 32Bit Variablen, dann die> 16Bit Variablen und erst am Ende die 8Bit Variablen zu definieren, um> Füllbytes aufgrund von Alignment zu vermeiden.
Dafür gibts das Attribut packed.
Das Ganze macht nur auf einem AVR8 herzlich wenig Sinn.
Etwas struct ist natürlich völlig ok, aber die Anordnung ist auf einem
AVR8 wurscht.
Hans schrieb:> Deine Sprache ist unfreundlich. Gewöhne Dir bitte eine höfliche> Ausdrucksweise an.
Tut mir leid, wenn es deine Gefühle verletzt.
Aber noch freundlicher kann ich meine Verachtung für so viel Ignoranz
leider nicht formulieren.
Merke:
Die GGC Entwickler haben uns die .eeprom Section geschenkt.
Und die Möglichkeit damit strukturiert umzugehen.
Die Arduino EEPROM Klasse mit ihren put und get ist eine nette Hilfe
dabei.
Das kann man natürlich alles in den Wind schlagen ignorieren und
ausblenden. Aber "Vorbildlich" ist das ganz sicher nicht.
Den TE interessiert ja noch nicht mal, "Warum?" seine EEPROM Daten beim
Chip Erase erhalten bleiben. Das führt dazu, dass er beim nächsten AVR
evtl. damit auf die Nase fällt.
Ausprobieren ist da aus meiner Sicht KEINE Option.
Ziel: Bei Netzstecker raus schnell noch die beiden int-Werte
speichern.
Dazu habe ich mir erstmal den bool spggutflanke gemacht.
Sieht schonmal gut aus.
Das Monoflop verlängert den Impuls zur Sichtkontrolle.
Das entfällt dann. Vor A4 liegen noch 110K, hab ich vergessen
einzuzeichnen.
Arduino Fanboy D. schrieb:> Tut mir leid, wenn es deine Gefühle verletzt.> Aber noch freundlicher kann ich meine Verachtung für so viel Ignoranz> leider nicht formulieren.
Ich roll mich ab vor Lachen.
LG
old.
Offenbar nimmt der Speichervorgang etwas mehr Zeit in
Anspruch als ich dachte.
Also eine neue Lösung.
Ich lasse nachschauen ob die Halbwellen vom Netz da sind
und ob sie eine Mindestgröße erreichen.
Wenn nein, das ist der Fall wenn man Netz trennt, wird
gespeichert. Das funktioniert so.
Soll ich das so machen oder habe ich etwas übersehen?
LG
old.
Was haltet Ihr davon auf eine Adresse einen float wert zu schreiben,
der mit einem Wert im Sketch verglichen wird.
Diesen Kontrollwert häufiger schreiben als die wichtigen Werte.
Also ihn mit EEPROM.write()und nicht update wie bei put schreiben.
Wenn der Float Wert nicht mehr stimmt, also das EEPROM platt ist,
den Prozessor in einer Betriebsart ohne speichern arbeiten lassen.
In meinem Fall müsste man nach jeder Netztrennung den Tisch runterfahren
zum Initialisieren um weiter hoch fahren zu können.
So könnte ich sicher stellen, dass bei EEPROM-Defekt die
Mechanik nicht kaputtgefahren werden kann.
LG
old.
Aus der W. schrieb:> Ziel: Bei Netzstecker raus schnell noch die beiden int-Werte> speichern.
dafür gibt es schon Lösungen auch hier vorgestellt und beschrieben.
Die Frage die offen ist, willst du nach dem "Kaputtschreiben" des
EEPROMs lieber den µC wechseln oder lieber ein I2C EEPROM als DIP im
8-pol Sockel?
Ich hatte mich bei diversen Arduino Nano lieber dafür entschieden das
EEPROM eines RTC3231 Modul zu beschreiben welche es billiger als Ersatz
gibt, noch billiger wären nur externe I2C EEPROMs.
Oder mit mehr Softwareaufwand die Schreibpositionen ständig verändern.
Wenn dem Teil vier mal am Tag der Saft abgedreht wird,
sind die garantierten Zyklen nach etwa 6 Jahren erreicht.
Habe mir folgendes überlegt:
Einen dritten int-Wert hinzufügen.
Alle drei Werte aufaddiert müssen z.B. 5000 ergeben.
Erst dann werden die beiden Werte aus dem EERPOM verwendet.
Vor dem Speichern wird der dritte Wert berechnet.
Das kann ich hoffentlich umsetzen. Mal sehen.
LG
old.
Wolfgang schrieb:> Was soll DAS denn sein?
Naja, zumindest ist es eine (kleine) Provokation.
Und du reagierst ja auch prächtig darauf.
Ansonsten, ist es auch nur eins der Suffixe, welches der Gcc
versteht/akzeptiert.
Wolfgang schrieb:> Spätestens
Das interessiert den doch alles nicht.
Der baut ja auch Tische ohne Endschalter, die bei verschlissenem EEPROM
die Mechanik verbiegen.
Arduino Fanboy D. schrieb:> Der baut ja auch Tische ohne Endschalter, die bei verschlissenem EEPROM> die Mechanik verbiegen.
Du scheinst ja solche Tische zu kennen.
Aber, so blöd bin ich ich dann doch nicht.
Bei verschlissenem EEPROM wird der Höchstwert
angesetzt und der Tisch fährt nur noch runter.
Erst wenn der Initialisierungspunkt erreicht
wurde, kann man bis zum höchsten Punkt fahren.
So hatte ich es ja auch gemacht, als ich noch nicht
im EEPROM speichern konnte.
Lästig war dann halt, dass man nach Netzstecker ziehen,
einmal ganz runter, zum Initialisieren, fahren musste.
LG
old.
Aus der W. schrieb:> Einen dritten int-Wert hinzufügen.> Alle drei Werte aufaddiert müssen z.B. 5000 ergeben.> Erst dann werden die beiden Werte aus dem EERPOM verwendet.
Bis dahin klappt das schonmal.
Aus der W. schrieb:> Habe mir folgendes überlegt:> Einen dritten int-Wert hinzufügen.> Alle drei Werte aufaddiert müssen z.B. 5000 ergeben.> Erst dann werden die beiden Werte aus dem EERPOM verwendet.> Vor dem Speichern wird der dritte Wert berechnet.>> Das kann ich hoffentlich umsetzen. Mal sehen.
Das ging ja leichter als gedacht:
Arduino Fanboy D. schrieb:> Ansonsten, ist es auch nur eins der Suffixe, welches der Gcc> versteht/akzeptiert.
Akzeptiert ist wohl richtig. Genauso könntest du auch schreiben:
1
floatfImRam=0.0q;
Ich zitiere mal aus der oben verlinkten Beschreibung:
"If a suffix is not specified, the floating-point constant has a type
double."
Anbei Bilder von der "Hardware".
Das UNO-Board ohne Atmega dient zum Sketchhochladen.
Die LED an mp zeigt, dass die Prüfsumme korrekt erkannt
wurde, also das EEPROM in Ordnung ist.
Noch ein Bild vom Innenleben eines Tischbeins.
Dort befindet sich ein Magnetring und zwei Hallelemente.
Am Ausgang ist das, was auch ein Rotary bereitstellt.
Ich brauche keine Rotary-lib. Ein Hallelement reicht mir
weil ich die Drehrichtung kenne.
LG
old.
Joachim B. schrieb:> Oder mit mehr Softwareaufwand die Schreibpositionen ständig verändern.
Das wäre jetzt noch das I-Tüpfelchen.
Bitte um Arduino-Beispiele dafür,
oder strickt das bitte in den Code hier.
LG
old.
Joachim B. schrieb:> etwas Arbeit lasse ich dir
Guter Witz. Ich mache hier die ganze Arbeit,
der einzig hilfreiche Beitrag von Euch:
Beitrag "Re: Arduino put() get() ein ppar Fragen dazu."
Dafür viel Trollbegleitung.
Ohne den Thread hier wäre ich genau so weit.
Mögen meine Beiträge anderen helfen, die sich erstmalig
mit dem EEPROM befassen.
Wenn ich das mit der Adressenrotation irgendwann mal
hinbekomme, bringe ich hier ein Beispiel.
Da dürft ihr euch dann auch drüber ärgern.
Das kleine Wissen darf ja nicht an die Öffentlichkeit, lach.
LG
old.
Aus der W. schrieb:> Mögen meine Beiträge anderen helfen, die sich erstmalig> mit dem EEPROM befassen.
Bitte nicht!
Was du hier abgelassen hast, kann man vielleicht als "schlechtes
Beispiel" weiterverwenden.
Aber mehr auch nicht.
Am Besten:
Man ignoriert das noch nicht einmal.
Hugo H. schrieb:> Und für wen machst Du das?
Für mich. Und damit man im Netz eine Lösung findet.
Hugo H. schrieb:> Ist wohl einer Deiner üblichen Threads ...
In dem das (kleine) Wissen öffentlich gemacht wird.
LG
old.
Arduino Fanboy D. schrieb:> Was du hier abgelassen hast, kann man vielleicht als "schlechtes> Beispiel" weiterverwenden.> Aber mehr auch nicht.
Danke für die Blumen. Dann ist meine Lösung sehr gut. :)
LG
old.
Arduino Fanboy D. schrieb:> Der baut ja auch Tische ohne Endschalter, die bei verschlissenem EEPROM> die Mechanik verbiegen.
Anscheinend bin ich ja schon besser als so mancher Originalcode.
Freut mich. :)
LG
old.
Aus der W. schrieb:> Anscheinend bin ich ja schon besser als so mancher Originalcode.> Freut mich. :)
Merke dir:
> Manche Behauptungen sind so dermaßen falsch,> dass noch nicht mal das Gegenteil wahr ist.
if(analogRead(acpin)>500){volt=HIGH;}// >12V Tatfo hat 15VAC an Steuerwicklung
31
else{volt=LOW;}
32
if(volt==LOW){spggutist=millis();// Monoflop
33
if(spggutist-spggutstart>spggutvz){spggut=LOW;}}
34
else{spggutstart=millis();spggut=HIGH;}
35
if(spggut!=spgguta){// Puls bei abfallender Flanke
36
if(spgguta==HIGH){speichern=HIGH;}}
37
else{speichern=LOW;}
38
spgguta=spggut;
39
if(speichern==HIGH){eepromschreiben();}
40
if(speichern==LOW){hzsist=millis();// Halt zum Speichern um Stromverbrauch zu reduzieren
41
if(hzsist-hzsstart>hzsvz){hzs=LOW;}}
42
else{hzsstart=millis();hzs=HIGH;}
43
digitalWrite(mp,(!hzs&&boolpruefsumme));// Betriebs- und EEPROM ok Anzeige
Wirklich klasse was man mit Arduino machen kann.
Das macht Freude, ein Erfolg nach dem anderen. :-)
Aber wie so oft im Leben, was des einen Freud ist
des anderen Leid.
Sieht man sehr schon an den Trollbeiträgen hier
LG
old.
Aus der W. schrieb:> Wenn dem Teil vier mal am Tag der Saft abgedreht wird,> sind die garantierten Zyklen nach etwa 6 Jahren erreicht.
Hopa, nach über 60 Jahren bei 100000 Zyklen.
Joachim B. schrieb:> willst du nach dem "Kaputtschreiben" des> EEPROMs lieber den µC wechseln oder lieber ein I2C EEPROM als DIP im> 8-pol Sockel?
Nach 60 Jahren mal ein Update mit anderen Adressen machen.
Wenn das eeprom vorher defekt ist, kann man einen
Adresswechsel versuchen.
Joachim B. schrieb:> Ich hatte mich bei diversen Arduino Nano lieber dafür entschieden das> EEPROM eines RTC3231 Modul zu beschreiben welche es billiger als Ersatz> gibt,
Wenn Du unnötige Löschzyklen machst, musst Du das eben auf Deine
Art lösen.
Aber danke für den Hinweis auf dieses interessante Modul.
LG
old.
Aus der W. schrieb:> Wenn Du unnötige Löschzyklen machst
wer sagt das mit den unnötigen Löschcyclen?
Ach egal du pöbelst munter weiter, Hilfe willst du also nicht wirklich
auch weil niemand dir hilft und du Programmiergott sowieso alle Probleme
selber löst!
Aus der W. schrieb:> Wirklich klasse was man mit Arduino machen kann.> Das macht Freude, ein Erfolg nach dem anderen. :-)>> Aber wie so oft im Leben, was des einen Freud ist> des anderen Leid.> Sieht man sehr schon an den Trollbeiträgen hier>> LG
Aus meiner Sicht ist das nicht 'klasse'. sondern eher bedenklich. Auch
wenn es dir Freude macht (die ich dir selbstvertsändlich gönne).
Du hast im Laufe dieses Threads also eine Funktionalität hingekriegt,
die dir gefällt - aber ich muß dich hier mal fragen, was du dabei
tatsächlich gelernt hast.
Das Bedenkliche bei der ganzen Sache ist nämlich, daß die ganze
Arduino-Welt ihre Benutzer dazu verführt, nach dem Benutzen all der
vorgefertigten Dinge zu glauben, sie seien ab jetzt Fachleute und
wüßten, wie die Dinge funktionieren, die sie grad eben benutzt haben.
Nein, zumeist wissen all diese Leute lediglich, welches Shield und
welche Lib sie benutzen müssen - aber sie erlangen dabei keinerlei
Fachwissen. Das ist der eigentliche Punkt.
Und? Was an Fachwissen hat du jetzt damit erlangt?
Nochwas:
Flash-ROMs und EEPROMs sind Speicher, die sich im Laufe der Zeit durch
Lösch/Schreib-Vorgänge verbrauchen. Wenn dein Projekt lediglich ein paar
Wochen halten soll, dann wirst du deren Lebensdauer wohl nicht
überschreiten. Aber wenn es länger halten soll, mußt du dir Gedanken
machen, wie du mit Schreibvorgängen sparsam umgehen solltest. Ich
benutze für sowas eine Art verzögertes Schreiben: Jeder Schreibvorgang
in das im RAM vorgehaltene struct, wo alles wichtige drin steht, setzt
auch ein boolean, was anzeigt, DASS da was geschrieben worden ist.
Zugleich wird ein Softwaretimer gestartet, der nach einer sinnvollen
Zeit - z.B. 5 Sekunden oder nach Abschluß einer betreffenden Aktion -
veranlaßt, daß der struct im RAM byteweise mit dem im EEPROM verglichen
wird und bei Ungleichheit das betreffende Byte im EEPROM aktualisiert
wird.
W.S.
W.S. schrieb:> Das Bedenkliche bei der ganzen Sache ist nämlich, daß die ganze> Arduino-Welt ihre Benutzer dazu verführt, nach dem Benutzen all der> vorgefertigten Dinge zu glauben, sie seien ab jetzt Fachleute und> wüßten, wie die Dinge funktionieren, die sie grad eben benutzt haben.>> Nein, zumeist wissen all diese Leute lediglich, welches Shield und> welche Lib sie benutzen müssen - aber sie erlangen dabei keinerlei> Fachwissen. Das ist der eigentliche Punkt.>> Und? Was an Fachwissen hat du jetzt damit erlangt?
Bitte!
Der TE ist keinesfalls der übliche Arduino User.
Nimm ihn bitte nicht als Maßstab.
Ansonsten ist das wieder das übliche Arduino Bashing
Basierend auf unbewiesenen Behauptungen, welche als Fakten verkauft
werden.
Diskriminierendes Gewäsch.
W.S. schrieb:> veranlaßt, daß der struct im RAM byteweise mit dem im EEPROM verglichen> wird und bei Ungleichheit das betreffende Byte im EEPROM aktualisiert> wird.
EEPROM.put() nutzt intern EEPROM.update(), welches genau diesen
Vergleich macht. Offensichtlich ist dein Wissen über die Arduino Welt
mangelhaft, sonst wäre dir das klar.
@ufuf:
Du weist doch, dass W.S. von nix ne Ahnung hat, dass zeigt er doch auch
in allen anderen Threads.
Auch wenn ich Failduino für nichts gutes halte, aber mit korrekten
Fakten sollte man eben schon kommen anstatt mit dem WSschen gelaber.
Mw E. schrieb:> für nichts gutes halte
Im Grunde ist mir das völlig wurscht, was der W.S. oder auch du, von
Arduino haltet.
Ein bisschen ist es wie mit dem Pflaumenkuchen.
Einer mag ihn, der nächste halt nicht.
Aber ihn nicht zu mögen, kann niemandem das Recht geben, alle
Pflaumenkuchenesser, oder Bäcker, zu diskriminieren.
Joachim B. schrieb:> wer sagt das mit den unnötigen Löschcyclen?
Du, siehe Beitragszitat..
> Hilfe willst du also nicht wirklich> auch weil niemand dir hilft und du Programmiergott sowieso alle Probleme> selber löst!
Glaubst du ich setze mich hier heulend in die Ecke,
weil die Programmierarschlöcher hier ihr kleines Wissen
nicht weiter geben wollen oder können?
W.S. schrieb:> Und? Was an Fachwissen hat du jetzt damit erlangt?
Ich kann Zahlen zuverlässig im EEPROM ablegen,
und kontrollieren ob der ausgelesene Wert plausibel ist.
W.S. schrieb:> z.B. 5 Sekunden oder nach Abschluß einer betreffenden Aktion -> veranlaßt, daß der struct im RAM byteweise mit dem im EEPROM verglichen> wird und bei Ungleichheit das betreffende Byte im EEPROM aktualisiert> wird.
Damit würdest Du häufiger als ich das EEPROM neu beschreiben.
Meine Methode wird ja auch im wiki hier, wenn auch nicht so ausgefeilt,
empfohlen.
Und was, wenn Du vor dem Zeitablauf den Netzstecker ziehst?
Dann ist ein alter Wert drin. Bei meiner Anwendung u.U. fatal.
Letzteres ist in put() schon dabei. Das sollte man Wissen,
wenn man den Oberlehrer macht. Und geschrieben hatte ich das hier
auch schon in anderem Zusammenhang:
Aus der W. schrieb:> …. update wie bei put …
Ich wette, Du hast den Sketch weder gelesen noch verstanden
oder auch nur ansatzweise mitbekommen worum es sich handelt.
Arduino ist lernen durch Beispiele.
LG
old.
Joachim B. schrieb:> Programmiergott
Übrigens hatte vorher solche Lösungen gefunden:
http://shelvin.de/eine-integer-zahl-in-das-arduiono-eeprom-schreiben/
und dachte DAS bekomme ich nie hin.
Hatte schon versucht den int-Wert durch fünf zu Teilen
um mit Byte auszukommen.
Dann habe ich zum Glück den Kommentar von "Lemar" gelesen.
Und dann hier weiter gefragt.
Also von "Programmiergott" bin ich meilenweit entfernt.
Ich vermute die Befehle put() und get() sind später hinzugekommen,
damit Leute wie ich auch das EEPROM benutzen können.
LG
old.
Mw E. schrieb:> @ufuf:> Du weist doch, dass W.S. von nix ne Ahnung hat, dass zeigt er doch auch> in allen anderen Threads.
Sagt einer, der hier noch gar nichts gebracht hat.
W.S. hat es zumindest versucht.
Offenbar zerfleischen sich die Zeh-Nerds hier gegenseitig.
Arduino Fanboy D. schrieb:> Ansonsten ist das wieder das übliche Arduino Bashing
Den Fanboy kauft dir niemand mehr ab.
Du machst dir einen Spaß draus, Arduino-Nutzer zu veräppeln.
Bei mir schaffst du das nicht (mehr), was du ja inzwischen
gemerkt hast.
Sei froh, dass ich nicht als Gast schreiben kann.
(IP-Sperre)
LG
old.
Wie man es aus der Werkstatt kennt:
- was nicht wissen und fragen. -> OK
- (auch gute) Antworten bekommen. -> OK
- Antworten nicht verstehen (wollen). -> typisch
- es irgendwie hinbekommen (wenn auch schräg) -> Glück gehabt
- Kommentare zur gefundenen "Lösung" "verbeißen". -> typisch
- sich als Märtyrer wähnen -> typisch
Arduino Fanboy D. schrieb:> Ansonsten ist das wieder das übliche Arduino Bashing> Basierend auf unbewiesenen Behauptungen, welche als Fakten verkauft> werden.> Diskriminierendes Gewäsch.
Nein, ist es eben nicht.
Es ist ne nette Leistung, so ein System aufzuziehen.
Es ist auch für ne Menge Zeugs benutzbar.
Das ist alles unbestritten.
ABER: Lies dir den Eröffnungpost nochmal durch:
Fragen über die grundlegendsten Dinge.
Ich räume ein, daß gerade C und C++ keine wirklich angenehmen
Programmiersprachen sind und daß ich (sofern es mir möglich wäre) mir
bessere Programmiersprachen für die diversen µC wünschen würde. Ist aber
eben nur ein Wunschtraum und keine Realität.
Es ist, wie ich es geschrieben habe: Da wird Leuten die Möglichkeit
eröffnet, daß sie damit alles mögliche realisieren können, ohne wirklich
zu verstehen, was sie da tun. Das als solches ist ja nix Verwerfliches,
aber indem man den Einsteigern den Weg so glattbügelt, lernen die eben
auch nur, nach den bereits fertig vorgekauten Shields und Libs zu rufen.
DAS IST DER KERN all dessen, was unsereinem an der ganzen Arduino-Welt
eben nicht gefällt: Der fehlende Ansporn, die Dinge selbst zu verstehen.
Mir ist klar, daß die Faulheit einer unserer grundlegenden menschlichen
Charakterzüge ist. Und wenn man mit dem Ruf nach einer Lib im Moment
erfolgreicher ist, als sich selbst so weit zu bilden, daß man es selber
kann, dann siegt eben die Faulheit.
Aber auf lange Sicht ist das ganz übelst, denn da entstehen Generationen
von Leuten, die eben nur das benutzen können, was Andere ihnen zuvor
schon mal vorgekaut haben. Wir hier in Europa leben genau davon, daß wir
in vielen Dingen noch immer die Vorreiter sind, also Dinge realisieren,
die zuvor eben noch niemand gekonnt hat. Arduino ist das Gegenteil
davon: Benutzen, was Andere schon längst gekonnt haben.
Verstehe das mal in seiner vollen Bedeutung.
W.S.
Hugo H. schrieb:> Ist wohlCarl D. schrieb:> Wie man
Eure Methoden erklärt:
"(1) Zu den Zersetzungsmethoden der Stasi gehörte die psychologische
Vernichtung des Gegners. In der »Richtlinie Nr. 1/76 zur Entwicklung und
Bearbeitung Operativer Vorgänge« vom Januar 1976 wird als Ziel
beschrieben, Oppositionelle u.a. durch die »(…) systematische
Diskreditierung des öffentlichen Rufes, des Ansehens und des Prestiges
auf der Grundlage miteinander verbundener wahrer, überprüfbarer und
diskreditierender, sowie unwahrer, glaubhafter, nicht widerlegbarer und
damit ebenfalls diskreditierender Angaben; systematische Organisierung
beruflicher und gesellschaftlicher Mißerfolge zur Untergrabung des
Selbstvertrauens einzelner Personen (…)« zu zermürben."
Quelle:
https://www.facebook.com/Bjoern.Hoecke.AfD/posts/2551778641730073?
LG
old.
Aus der W. schrieb:> W.S. schrieb:>> Und? Was an Fachwissen hat du jetzt damit erlangt?>> Ich kann Zahlen zuverlässig im EEPROM ablegen,> und kontrollieren ob der ausgelesene Wert plausibel ist.
OK, das ist ja erstmal was.
> W.S. schrieb:>> z.B. 5 Sekunden oder nach Abschluß einer betreffenden Aktion ->> veranlaßt, daß der struct im RAM byteweise mit dem im EEPROM verglichen>> wird und bei Ungleichheit das betreffende Byte im EEPROM aktualisiert>> wird.> Damit würdest Du häufiger als ich das EEPROM neu beschreiben.
Nein. Definitiv NICHT.
Denke mal nach:
Solange im struct im RAM nix geändert wird, entfällt auch die
Notwendigkeit, den im EEPROM zu aktualisieren.
Solange ein Byte im struct im EEPROM nicht anders sein soll als es ist,
entfällt auch die Notwendigkeit, es neu zu schreiben. Das trifft z.B.
auf Variablen zu, die wie int oder long vielleicht nur an einer Stelle
sich ändern. Also wenn z.B. ein int um 256 erhöht wird, bleibt da
Lowbyte wie es ist. Sowas eben.
Und wenn die Aktualisierung bei deiner Anwendung (die hier keiner
wirklich kennt) sofort vonnöten sein sollte, dann mußt du das eben
berücksichtigen. Aber nimm mal einen Radio-Empfänger als Beispiel: Da
dreht jemand an der Abstimmung auf der Suche nach einem Sender, der ihm
gefällt. Sowas sollte man nicht sofort speichern. Da ist es gut, erst
nach einigen Sekunden Stillstand am Drehknopf zu speichern, sonst ist
der EEROM binnen weniger Wochen ausgeleiert.
W.S.
W.S. schrieb:> Da wird Leuten die Möglichkeit> eröffnet, daß sie damit alles mögliche realisieren können, ohne wirklich> zu verstehen, was sie da tun. Das als solches ist ja nix Verwerfliches,> aber indem man den Einsteigern den Weg so glattbügelt, lernen die eben> auch nur, nach den bereits fertig vorgekauten Shields und Libs zu rufen.https://www.mikrocontroller.net/attachment/443574/20200129b.jpg
Wo ist denn da das vorgekaute Shield? Ja ich habe die
#include <EEPROM.h>
verwendet. Dann ärgere Dich halt drüber, ich danke Arduino dafür.
LG
old.
W.S. schrieb:> ABER: Lies dir den Eröffnungpost nochmal durch:
Ich sachte ja schon, lass den TE da raus.
Den kannste bestenfalls als abschreckendes Bespiel verwenden.
Aber doch nicht als Messlatte.
Der Rest ist wieder das übliche Arduino Bashing.
Gespickt mit unbewiesene Behauptungen und Diskriminierungen.
Denke da bitte noch mal (etwas sorgfältiger) drüber nach.
Tipp:
Je öfter du dir den Mist selber vorplapperst, desto fester glaubst du da
selber dran.
Aber wahrer, wirds davon nicht.
W.S. schrieb:
...
> Mir ist klar, daß die Faulheit einer unserer grundlegenden menschlichen> Charakterzüge ist. Und wenn man mit dem Ruf nach einer Lib im Moment> erfolgreicher ist, als sich selbst so weit zu bilden, daß man es selber> kann, dann siegt eben die Faulheit.>> Aber auf lange Sicht ist das ganz übelst, denn da entstehen Generationen> von Leuten, die eben nur das benutzen können, was Andere ihnen zuvor> schon mal vorgekaut haben. Wir hier in Europa leben genau davon, daß wir> in vielen Dingen noch immer die Vorreiter sind, also Dinge realisieren,> die zuvor eben noch niemand gekonnt hat. Arduino ist das Gegenteil> davon: Benutzen, was Andere schon längst gekonnt haben.>> Verstehe das mal in seiner vollen Bedeutung.>> W.S.
Zu meiner Schulzeit gab es einen vom 60, der sich mit so komischem Zeug,
das mit Strom rechnet, befasst hat. Heute machen alle (ok, 50%) was mit
Arduino und merken daß da was geht. Um denen die Libs zu bauen, reicht
der eine (wie schon früher) aus. Aber der hat plötzlich 30, die sein
Zeug nicht nur benutzen, sondern damit neues bauen. Das skaliert. Wir
müssen das nicht so machen, das werden andere Weltregionen für uns
übernehmen.
Als jemand, der die Grundlage für die Arbeit anderer schaffen kann (was
bei W.S. sicher zutrifft) sollte man sich freuen und sich nicht darüber
ärgern, daß die auch was hinbekommen. Und falls die einen "Höhenflug"
bekommen, muß man sie halt auch mal wieder "erden". Meist ist das nicht
besonders schwer.
W.S. schrieb:> Und wenn die Aktualisierung bei deiner Anwendung (die hier keiner> wirklich kennt) sofort vonnöten sein sollte, dann mußt du das eben> berücksichtigen. Aber nimm mal einen Radio-Empfänger als Beispiel:
Warum? Du kennst meine Anwendung und hast Bilder davon.
Und wo Du über Radio-Empfänger sprichst, den AD7C VFO werde ich,
für meine Anwendungen, entsprechend dem hier umschreiben.
LG
old.
Aus der W. schrieb:> Hugo H. schrieb:>> Ist wohl>> Carl D. schrieb:>> Wie man>> Eure Methoden erklärt:>> "(1) Zu den Zersetzungsmethoden der Stasi gehörte die psychologische> Vernichtung des Gegners. In der »Richtlinie Nr. 1/76 zur Entwicklung und> Bearbeitung Operativer Vorgänge« vom Januar 1976 wird als Ziel> beschrieben, Oppositionelle u.a. durch die »(…) systematische> Diskreditierung des öffentlichen Rufes, des Ansehens und des Prestiges> auf der Grundlage miteinander verbundener wahrer, überprüfbarer und> diskreditierender, sowie unwahrer, glaubhafter, nicht widerlegbarer und> damit ebenfalls diskreditierender Angaben; systematische Organisierung> beruflicher und gesellschaftlicher Mißerfolge zur Untergrabung des> Selbstvertrauens einzelner Personen (…)« zu zermürben.">> Quelle:> https://www.facebook.com/Bjoern.Hoecke.AfD/posts/2551778641730073?>>> LG> old.
Also auch der letzte Punkt bestätigt.
Ich habe in der Schule gelernt, neben dem reinen Text auch die Quelle in
eine Beurteilung mit einfließen zu lassen. Und diese ist seit Jahrzenten
verbrannt. Mir wurde in der Schule nicht von den bösen Faschisten hinter
der Mauer erzählt, sondern von denen, die unsere Vorfahren waren und was
die getan haben. Da kann man den Grundton unter der hellblauen Tünche
nicht so leicht übersehen.
Steht da eigentlich auch, daß jemanddem, regelmäßig anderen auf den
Wecker geht, dies nicht vorgehalten werden darf?
Aus der W. schrieb:> Hugo H. schrieb:>> Ist wohl>> Eure Methoden erklärt:>> "(1) Zu den Zersetzungsmethoden der Stasi gehörte die psychologische ...> Quelle:> https://www.facebook.com/Bjoern.Hoecke.AfD/posts/2551778641730073?
Mit der Stasi kennst Du Dich ja scheinbar aus und AfD-Nähe passt zu Dir
und Deinem Benehmen.
Aus der W. schrieb:> Sei froh, dass ich nicht als Gast schreiben kann.> (IP-Sperre)>> LG> old.
Hugo H. schrieb:> Deinem Benehmen.
Genau das beschreibt H..
Als Gast hätte man mir ungewollt geholfen.
(Das steht auch so in meinem Blog!)
Um das zu vermeiden müssten die Moderatoren Euch
jedes mal die Identität der Gäste mitteilen was nicht geht.
Deshalb die IP-Sperre.
Du suggerierst bewusst was anderes, das ist die
beschriebene Stasimethode.
Aus der W. schrieb:> Carl D. schrieb:>> - (auch gute) Antworten bekommen. -> OK>> - Antworten nicht verstehen (wollen). -> typisch>> Zeig mal ein Beispiel.
Kannst du doch selber nachlesen.
z.B. mein erstes Posting hier, wo ich dir gezeigt habe, wie man die
.eeprom Section nutzt damit der Compiler die Adressberechnng selber
durchführen kann.
Auch wurde dir das Ablegen der Daten in Strukturen empfohlen und
offsetof()
Deine Antworten dazu:
Aus der W. schrieb:> Dann wähle ich einfach zwei weit auseinander liegende Adressen.Aus der W. schrieb:> Du machst dir einen Spaß draus, Arduino-Nutzer zu veräppeln.
Das zeigt mehr als klar, dass du gute Antworten bekommen hast, sie aber
in den Wind schlägst.
Über das "Warum du dich so verhältst?" kann ich nur spekulieren.
Aber es ist nicht das erste mal, dass du dich so anstellst.
Arduino Fanboy D. schrieb:> Das zeigt mehr als klar, dass du gute Antworten
Deine Antwort ist Müll.
Aus der W. schrieb:> Welche Adresse benötige ich für den zweiten int-Wert?
Korrekte Antwort:
put() erkennt int und belegt zwei Adressen pro int Wert.
Also die übernächste Adresse.
Deine Antwort:
Stopfe die Daten ins EEPROM. (logisch!)
Überlasse die Adressberechnung dem Compiler. (keine Antwort)
Warum frage ich?
Weil put() ja auch grundsätzlich float belegen könnte.
So habe ich es halt ausprobiert.
LG
old.
Carl D. schrieb:> da kennt er sich aus ;-)
Ja?
David Dunning:
> Wenn jemand inkompetent ist, dann kann er nicht wissen,> dass er inkompetent ist. […] Die Fähigkeiten, die man braucht,> um eine richtige Lösung zu finden, [sind] genau jene> Fähigkeiten, die man braucht, um eine Lösung als> richtig zu erkennen.
Quelle Wikipedia
Da bietet man ihm eine Lösung, dicht am Ideal, und er nimmt sie noch
nicht mal wahr.
Ich finde das schade.
So ist das eben, da hat jeder seinen eigenen Horizont.
Aber das dann als Müll zu bezeichnen, nur weil er es nicht versteht,
oder verstehen will, ist schon gründlich daneben, wenn nicht gar schon
etwas irre.