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
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
>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.
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
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
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 -------------------------
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
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?
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
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
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.
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
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ß
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.
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
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)
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
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
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 !