Forum: Mikrocontroller und Digitale Elektronik Kilometerzähler für mehrere Fahrer - Bascom EEPROM Problem


von Simon W. (simon1711)


Lesenswert?

Hallo,

ich habe gerade ein neues Projekt. Und zwar möchte ich auf einem 
Text-Display im Auto den Kilometerstand anzeigen lassen, für meherer 
Fahrer.
Der Atmega8 speichert die Gesamtkilometer und die der einzelnen Fahrer, 
die natürlich ausgewählt werden können.

Hardware mit Display, Geschwindigkeitsgeber und die einzelnen Modi 
funktionieren wunderbar. Nur macht mir der Eram noch Probleme.

Wenn ich aus einem frisch geflashten Atmega die Eram Variablen auslese, 
ist der Wert bei dem Typ WORD : 65535 bei BYTE : 255 usw... also der 
Maxiamlwert.
Wieso steht da keine 0 drin???

Und wenn ich versuche diesen Wert zu überschreiben tut sich garnichts.

Hier der Code um den es sich dreht:
1
'----------------------- Var Dek ------------------------------------------
2
Dim Modi As Byte
3
 '0 = Gesamt Killometer
4
 '1 = Fahrerkillometer
5
 '2 = Protokoll
6
7
Dim Driver1 As String * 10
8
Dim Driver2 As String * 10
9
10
Dim Drivernr As Eram Byte
11
12
Dim Driver1km As Eram Word
13
Dim Driver2km As Eram Word
14
15
Dim Kilometer As Eram Word
16
17
Dim Driver1kmlast As Eram Word
18
Dim Driver2kmlast As Eram Word
19
20
'----------------------------- Reset Driver Kilometer -------------------------
21
 If Swreset = 1 Then
22
23
   Driver1kmlast = Driver1km                 ' Tut sich nichts... 65535 bleibt
24
   Driver1km = 0
25
   
26
   Driver2kmlast = Driver2km                ' Tut sich nichts... 65535 bleibt
27
   Driver2km = 0
28
   
29
   Cls
30
   Locate 1 , 1
31
   Lcd " Fahrer Km"
32
   Locate 2 , 1
33
   Lcd " geloescht"
34
   Wait 3
35
36
 End If
37
 '------------------------------------------------------------------------------
Den gesamten Code poste ich bei Bedarf gerne. Dachte vielleicht gehts 
auch so.

Was mache ich da falsch???    Ich hoffe jemand kann mir helfen...

Viele Grüße

Simon

von holger (Gast)


Lesenswert?

>Wenn ich aus einem frisch geflashten Atmega die Eram Variablen auslese,
>ist der Wert bei dem Typ WORD : 65535 bei BYTE : 255 usw... also der
>Maxiamlwert.
>Wieso steht da keine 0 drin???

Weil ein gelöschtes EEPROM 0xFF (255) in allen Zellen stehen hat.

von Joe (Gast)


Lesenswert?

das 1. Byte im Eram sollte nicht benutzt werden, da es ggf. intern 
verwendet wird.

von Joe (Gast)


Lesenswert?

Ich glaube mich zu erimmern, dass die Zuweisung von Eram -> Eram nicht 
geht. Hier muss eine hilfsvariable aus dem Ram dazwischengeschaltet 
werden

Eram -> Ram_Variable
Ram_variable-> Eram

Bitte probieren und das Ergebnis hier posten

Joe

von nichtGast (Gast)


Lesenswert?

Bascom Hilfe hilft:
For ERAM variables, it is important to understand that these are not 
normal variables. ERAM variables serve as a way to simple read and write 
the EEPROM memory. You can use READEEPROM and WRITEEEPROM for that 
purpose too.



ERAM variables only can be assigned to SRAM variables, and ERAM 
variables can be assigned to SRAM variables. You can not use an ERAM 
variable as you would use a normal variable.



Dim b as byte, bx as ERAM byte

B= 1

Bx=b ' write to EEPROM

B=bx ' read from EEPROM

von Simon W. (simon1711)


Lesenswert?

Problme fast gelöst :D

Ja das trifft ins Schwarze:
>ERAM variables only can be assigned to SRAM variables, and ERAM
>variables can be assigned to SRAM variables. You can not use an ERAM
>variable as you would use a normal variable.

So hatte ich es am Anfang auch immer , nur war anscheinend noch etwas 
anderes falsch. Vielleicht lag es auch am Dummy-Byte.
Also habe ich es nochmal gemacht und siehe da es funktioniert ... fast.
1
'----------------------- Variable Dek ------------------------------------------
2
Dim Modi As Byte
3
 '0 = Gesamt Killometer
4
 '1 = Fahrerkillometer
5
 '2 = Protokoll
6
Dim Refreshed As Bit
7
8
Dim Driver1 As String * 10
9
Dim Driver2 As String * 10
10
11
Dim Edummy As Eram Byte
12
13
Dim Edrivernr As Eram Byte
14
Dim Drivernr As Byte
15
16
Dim Edriver1km As Eram Word
17
Dim Driver1km As Word
18
19
Dim Edriver2km As Eram Word
20
Dim Driver2km As Word
21
22
Dim Ekilometer As Eram Long
23
Dim Kilometer As Long
24
25
Dim Edriver1kmlast As Eram Word
26
Dim Driver1kmlast As Word
27
28
Dim Edriver2kmlast As Eram Word
29
Dim Driver2kmlast As Word
30
31
Dim Pulsflanken As Word
32
33
'----------------------------- Reset Driver Kilometer -------------------------
34
 If Swreset = 1 Then
35
                     '
36
   Driver1kmlast = Driver1km
37
   Edriver1kmlast = Driver1km
38
   Driver1km = 0
39
                '
40
   Driver2kmlast = Driver2km
41
   Edriver2kmlast = Driver2km
42
   Driver2km = 0
43
44
   Refreshed = 0
45
   Cls
46
   Locate 1 , 1
47
   Lcd " Fahrer Km"
48
   Locate 2 , 1
49
   Lcd " geloescht"
50
   Wait 3
51
52
 End If
53
 '------------------------------------------------------------------------------

Das Laden und Speichern funktioniert. Nur bleibt das Problem mit dem 
Anfangswert von 255 und 65535. Bei Typ Long ist es  "-1".

Ist jetzt nicht weiter tragisch in meinem Fall nur interessiert mich 
wieso das so ist?!

Ich habe auch mal aufgeschnappt, dass man den EEPROM nur 10 000 mal 
beschreiben könnte. Stimmt das??? Dann muss ich mir eine andere Lösung 
einfallen lassen.

Danke für die schnelle Hilfe!!!
Simon

von Karl H. (kbuchegg)


Lesenswert?

Simon W. schrieb:

> Ist jetzt nicht weiter tragisch in meinem Fall nur interessiert mich
> wieso das so ist?!

Das ist technologisch bedingt.

> Ich habe auch mal aufgeschnappt, dass man den EEPROM nur 10 000 mal
> beschreiben könnte. Stimmt das???

Es sind 100 000

Wobei man berücksichtigen muss:
Das ist die Anzahl, die dir der Hersteller auf jeden Fall garantiert. In 
den meisten Fällen wird diese Anzahl überschritten. Eine EEPROM Zelle 
fällt nicht nach dem 100000 Schreibvorgang aus.

> Dann muss ich mir eine andere Lösung
> einfallen lassen.

Rechne doch mal durch.
Wie oft beschreibst du denn das EEPROM tatsächlich neu (in welchen 
Zeitabständen, geschätzt) und wie lange dauert es daher, bis du für jede 
Zelle die 100000 Schreibvorgänge aufgebraucht hast?

von Oldmax (Gast)


Lesenswert?

Hi
Nun, die Haltbarkeit eines EEProm ist begrenzt, das ist nun mal so. 
Daher gehören hier wirklich nur Daten hinein, die "selten" verändert 
werden, Wenn du nach jeder Fahrt die Daten im EEProm abspeicherst, mußt 
du wissen, das nach irgendeiner Zeit das Ding defekt ist. Nur mal so :
5 * Fahrzeug abstellen pro Tag sind ganz grob überschlagen 2000 
Schreibzugriffe im Jahr Bei 100000 Schreibzyklen ist nach 50 Jahren 
Empty....
Nun kommt das Fahrzeug einer Großfamilie.... 10 Personen greifen drauf 
zu. Auch jeder 5 mal am Tag. Dann ist nach 5 Jahren schon kein Verlass 
mehr auf die Funktion. Was ich damit sagen will, es ist schon wichtig, 
zu wissen, der EEProm hat begrenzte Schreibzyklen. Daher kannn es dir 
schon während der Testphase passieren, das nach kurzer Zeit so ein 
Controller den Geist aufgibt, wenn du versehentlich in der zyklischen 
Programmbearbeitung unbedacht draufrumschreibst. Da sind dann 100000 
Schreibzyklen razfaz durch.
Gruß oldmax

von Crossposter (Gast)


Lesenswert?


von Simon W. (simon1711)


Lesenswert?

Danke für die Info.

Da ich ja bei jedem Kiloeter neu schreibe, ist nach 100 000 km auf jeden 
fall schluss. Ich glaube zwar nicht, dass das das Auto noch mitmacht, 
aber ich überlege mir noch was um die Zündung abzufragen und nur dann 
Speichern und laden wenn die Zündung aus od. ein geht.

Also dann wars das fürs Erste. Ich poste, wenn alles fertig ist, den 
Schaltplan mit Code usw. (Falls es euch interessieren sollte ;-) )


Simon

von Karl H. (kbuchegg)


Lesenswert?

Simon W. schrieb:
> Danke für die Info.
>
> Da ich ja bei jedem Kiloeter neu schreibe,

Das kannst du ja auch Zeitverzögern. Solange sich der Kilometerstand 
alle 2 Minuten ändert, ist das Fahrzeug offensichtlich in Fahrt und du 
brauchst nichts speichern. Während des 5 Stunden Trips auf der Autobahn 
wird daher überhaupt nicht gespeichert. Es sei denn ihr macht 
Fahrerwechsel in voller Fahrt.

von hubifred (Gast)


Lesenswert?

Hallo Gemeinde.
Ich bin hier neu im Forum und würde mich sehr freuen wenn man Hilfe
bekommt.Fertige Lösungen sollen es ja gar nicht sein , aber Verweise auf
irgend welche Hilfen meist auch noch in Englisch helfen nicht wirklich.
Klare Frage , klare Antwort hilft immer.
Die Frage von Simon W. , warum beim Auslesen aus dem Eeprom die 
Anfangswerte
Byte = 255
Word = 65535 und
Long = -0,1
sind, wurde nicht beantwortet.
Ich habe auch ein ähnliches Problem und wäre an eine aufklärende Anwort
sehr interessiert.
Vielleicht ist ja ein Fachmann bereit mit seinem Wissen zu helfen.
Mich würde auch noch interessieren, wie man das komplette EEprom auf 
Null
setzt oder nur konkrete Adressen.
Ich bedanke mich für konkrete Antworten

von Simon W. (simon1711)


Lesenswert?

Also eig. ist mir das jetzt klar, woher die Werte kommen.
In einem gelöschten Atmega steht in jeder Zelle eine 1. Das ergiebt eben 
bei einem Byte 255.
Wie man da eine 0 reinflashen kann weiß ich auch nicht.

gruß

von Karl H. (kbuchegg)


Lesenswert?

hubifred schrieb:
> Hallo Gemeinde.
> Ich bin hier neu im Forum und würde mich sehr freuen wenn man Hilfe
> bekommt.Fertige Lösungen sollen es ja gar nicht sein , aber Verweise auf
> irgend welche Hilfen meist auch noch in Englisch helfen nicht wirklich.

Und wie stellst du dir das jetzt vor?
Auf der einen Seite sollen es keine fertigen Lösungen sein. Auf der 
anderen Seite dürfen wir auch nicht auf die bereits existierende Doku 
verweisen.

Und Englisch. Die Frage stellt sich gar nicht. Denn um Englisch wirst du 
nicht herumkommen. Also fang besser gleich damit an. Technische 
Dokumentationen sind keine literarischen Meisterwerke mit gefinkeltem 
englischem Satzbau. Mit Einsteiger-Englischkentnissen und anfangs einem 
Wörterbuch daneben kann man das meiste ohne Probleme lesen. Und mit der 
Zeit werden die Nachschlageorgien in den Wörterbüchern auch immer 
weniger, weil ohnehin immer die gleichen 100 Wörter benutzt werden.

> Die Frage von Simon W. , warum beim Auslesen aus dem Eeprom die
> Anfangswerte
> Byte = 255
> Word = 65535 und
> Long = -0,1
> sind, wurde nicht beantwortet.

Nicht?
Gleich die erste Antwort.
Weil ein jungfräuliches EEPROM nach dem Löschen in allen Bytes eine 0xFF 
stehen hat. Und in den diversen Datentypen manifestiert sich das dann 
eben als diese Zahlenwerte.

> Mich würde auch noch interessieren, wie man das komplette EEprom auf
> Null
> setzt

Das willst du gar nicht.
Kostet nur Zeit für nix.

> oder nur konkrete Adressen.

Siehe die BASCOM Hilfe.
(Gewöhn dich daran. Das wirst du noch oft zu hören kriegen. Also fang 
besser gleich an, erst mal in der Online-Hilfe zu recherchieren, 
eventuell andere Programme zu studieren. Und wenn du dann immer noch 
nicht weiter kommst, frag gezielt nach. Das ist dann kein Problem. Aber 
so Rundumschlagfragen als 'ICh will nicht selber nachlesen, kann mir wer 
das und das in 5 leicht verständlichen Sätzen erklären', diese Fragen 
werden hier meistens nicht direkt beantwortet sondern es gibt einen 
Verweis auf das Datenblatt. Das Froum versteht sich als Hilfsmittel zur 
Selbthilfe und nicht als Vorleseorganisation.

Ein guter Einstieg ist immer, wenn du ein Programm präsentierst, 
möglichst auf das wesentliche abgespeckt und dann dazuscheribst was es 
deiner Meinung nach tun sollte, was es statt dessen tut.
Denn dann kann man gezielt auf irgendwelche Misverständnisse eingehen. 
Aber kostenlose Unterrichtseinheiten, die man zurückgelehnt geniesen 
kann, die gibt es hier nicht.

von Michael R. (mexman) Benutzerseite


Lesenswert?

hubifred schrieb:
> Hallo Gemeinde.
> Ich bin hier neu im Forum und würde mich sehr freuen wenn man Hilfe
> bekommt.Fertige Lösungen sollen es ja gar nicht sein , aber Verweise auf
> irgend welche Hilfen meist auch noch in Englisch helfen nicht wirklich.
> Klare Frage , klare Antwort hilft immer.
> Die Frage von Simon W. , warum beim Auslesen aus dem Eeprom die
> Anfangswerte
> Byte = 255
> Word = 65535 und
> Long = -0,1
> sind, wurde nicht beantwortet.

Les doch den Thread erst mal, bevor Du sowas behauptest. Holger hat das
schon erklaert.
Ausserdem hilft ganz hervorragend das EEROM-Datenblatt. Da steht genau,
wie man was beschreiben/loeschen/auslesen kann und ob das byteweise oder
blockweise geht bzw. wie gross diese Bloecke dann sein koennen.

Gruss

Michael

von Frank K. (fchk)


Lesenswert?

hubifred schrieb:

> Die Frage von Simon W. , warum beim Auslesen aus dem Eeprom die
> Anfangswerte
> Byte = 255
> Word = 65535 und
> Long = -0,1
> sind, wurde nicht beantwortet.
> Ich habe auch ein ähnliches Problem und wäre an eine aufklärende Anwort
> sehr interessiert.

Das liegt an der internen Struktur der Speicherzellen. Jede 
Speicherzelle ist im Prinzip ein Feldeffekttransistor, dessen Source an 
Ground liegt und dessen Drain über Leseverstärker etc auf die betrffende 
Datenleitung geht. Am Eingang der Leseelektronik musst Du Dir einen 
Pullup-Widerstand vorstellen.

Das Gate des FET ist nicht angeschlossen. Im Defaultzustand sperrt der 
FET, und Du liest eine 1 aus. (Pullup!). Jetzt wird die Zelle 
programmiert. Dabei wird Ladung in das Gate mit hoher Spannung 
reingeschossen. Da das Gate isoliert ist, kann die Ladung nicht 
abfließen und bleibt auf dem Gate und öffnet den Transistor.  Du liest 
eine 0.

Du kannst ein Byte (in begrenztem Umfang wegen Lebensdauer) mehrmals 
programmieren, aber immer nur aus einer 1 eine 0 machen, nicht 
umgekehrt. Für den umgekehrten Fall muss die Zelle gelöscht werden. 
Früher bei den EPROMs ging das nur mit UV-Licht, daher das Fenster im 
Gehäuse. Bei Flash geht das nur Blockweise, bei EEPROM auch byteweise. 
Das Löschen (also das Absaugen der Ladungen) ist das, was die Zelle 
stresst und die Lebensdauer begrenzt.

Heisst also: Du musst Deine Software entsprechend der Technologie 
anpassen. ZB vielleicht nicht den Wert selber, sondern den Wert-1 
speichern.

Dann die Frage: Warum ist der FET zwischen Datenleitung und Ground und 
nicht zwischen Datenleitung und Vcc. Das hat mit der Fertigung zu tun 
und damit, dass Du nur Elektronen (also negative Ladungen) durch die 
Isolation hindurch ins Gate reinschießen kannst, aber keine positiven 
Ladungen (Löcher).

(alles etwas (vielleicht etwas zu) vereinfacht dargestellt, aber 
hoffentlich verständlich)

von nur mal Danke sagen - Dirk (Gast)


Lesenswert?

Hallo,

vielen Dank an Frank K., so gut verständlich und einprägsam habe ich 
selten solche doch im Detail komplexen Themen erklärt bekommen.
Genau daran mangelt es vielen (deutschsprachigen) Internetseiten bzw. 
Büchern die sich mit Themen oberhalb der einfachsten Grundlagen 
beschäftigen.

Englischsprachige Programmdokumentationen / Datenblätter etc.sind 
tatsächlich relativ einfach zu lesen wenn mann die tiefer gehenden 
Grundlagen und Zusammenhänge kennt, aber die müssen erstmal bekannt 
sein.

Und genau diese tiefer gehenden Grundlagen (inbesondere im Elektronik / 
µC Bereich) leicht verständlich mit Beispielen aus dem Alltagsleben zu 
vermitteln gelingt vielen "Autoren" (egal ob im Netz oder mit Büchern) 
nicht.

Mann muss sich mühsam die Grundlagen aus vielen verschiedenen Quellen 
aneignen, gezieltes Googeln bringt oft nichts, zufällige Funde bei 
ersteinmal "ganz anderen" Themen hingegen ergeben oftmal das
"Aha so geht das also" -Erlebnis.
So habe ich z.B. die ganzen Variablentypen (integer, unsigned, signed 
usw.) erst richtig verstanden als ich wegen ganz anderer Dingen die 
Seite von Gerold Penz mit seien "Kleinen Bascom AVR Kurs" und "µC wie 
Anfangen" entdeckt (ergoogelt) hatte.
Deswegen kann ich der Aussage von Karl Heinz Buchegger

Zitat:
"Aber so Rundumschlagfragen als 'Ich will nicht selber nachlesen, kann 
mir wer das und das in 5 leicht verständlichen Sätzen erklären', diese 
Fragen
werden hier meistens nicht direkt beantwortet sondern es gibt einen
Verweis auf das Datenblatt. Das Froum versteht sich als Hilfsmittel zur
Selbthilfe und nicht als Vorleseorganisation." (Zitat ende)

nicht 100%ig zustimmen, er hat zwar eigentlich recht, aber es ist nun 
mal so ist das vieles oberhalb der absoluten Grundlagen kompiliziert und 
alltagsuntauglich dargestellt wird.
Viele hier sind nun mal keine Studenten der Elektrotechnik oder 
Programmierer usw. sondern Hobbyisten die z.B. nicht automatisch wissen 
was Ganzzahlen sind, obwohl diese eigentlich ganz einfach ist, aber auch 
total unverstänlich sein kann, wenn so etwas schlecht "aus den 
Elfenbeinturm hinaus" erklärt wird.
Auch ist der Schulbesuch vieler hier schon lange vorbei und die dort 
gelernte Mathematik und ähniches geht verloren- wer löst z.b. schon 
Gleichungen  oder befasst sich mit Zahlensytemen und Algerbra im 
tagtäglichen Familien und Arbeitsleben ? - die allerwenigsten.

Deshalb bitte nicht einfach nur verweisen sondern versuchen sich mal in 
den Frage stellenden hinein zu versetzen und die Frage doch mit eigenen 
Worten zu beantworten (falls mann das wirklich kann).
Ich habe hier schon (indirekt) viele Erklärungen bekommen die endlich 
das schon erwähnte "Aha" Erlebniss zu folge hatten, oder anders 
ausgedrückt:
Nicht nur einigermaßen Verstanden sondern richtig verinnerlicht.

MFG
    Dirk

von nichtGast (Gast)


Lesenswert?

Wer sowas schreibt:

>Deswegen kann ich der Aussage von Karl Heinz Buchegger
>....
>nicht 100%ig zustimmen, er hat zwar eigentlich recht, aber es ist nun


liest hier noch keine vier Wochen mit. Karl Heinz Buchegger ist hier 
nach meiner Erkenntnis derjenige, der eben diese Grundlagen immer wieder 
mit bewundernswerter Geduld darlegt. Auch und insbesondere an Stellen, 
wo allen anderen die Geduld laengst abhanden kam.

doch Gast

von hubifred (Gast)


Lesenswert?

Hallo Gemeinde,
danke Frank K., danke Dirk.
Ich bin 62 Jahre alt und befasse mich mit der Elektronik weil es mir
Spaß macht. Da ich Elektronik nicht mehr zu meinen Beruf machen
möchte, habe ich auf ein paar nützliche Antworten und Hinweise
gehofft.
Ich verstehe ein Forum als Plattform zum Austausch
von Wissen , Erfahrungen und auch Hilfestellungen.
Wahrscheinlich  will die Elite unter sich bleiben und ich bin im 
falschen Forum.
Einem Andern etwas erklären und merken wie es klick macht, dass macht 
Freude.
Von oben herab kann jeder.
 Viele Grüße !

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.