mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM ATMEGA 16


Autor: Rentner Uralt (rentner)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

ich komme einfach nicht weiter.
Ich will mit einem ATMEGA16 über den ADC eine Spannung messen und diese 
in den EEPROM schreiben. Dann Adresse erhöhen und beim nächsten 
Durchlauf meiner Hauptschleife wieder die neu gemessene Spannung in den 
EEPROM schreiben.
Später sollen diese Werte über den PC und STK500 ausgelesen werden.
Ich benutze Code::Blocks als IDE.

Zu meinem Problem.

Der Compiler spuckt bei dem folgenden Code ( zu Großteil aus dem 
AVR-GCC-Tutorial) immer eine Fehlermeldung aus.


uint8_t eeFooByte EEMEM = 1;
int main(void)
{



uint8_t ureal;

while(1){

u=ReadChannel(0); //Spannung messen

ureal= ((u/1024)*5); //in Volt umrechnen

eeprom_write_byte(&eeFooByte, ureal);
eeFooByte ++;
if (eeFooByte > 512)
    {
        eeFooByte=1;
    }

........

Hier ist die Fehlermeldung:

-------------- Build: Debug in bz_rccar5_mit Speicher ---------------

Compiling: main.c
Linking console executable: bin/Debug/bz_rccar5_mit Speicher.elf
avr-g++: Speicher.elf.map,--cref: No such file or directory
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings



Kann mir bitte jemand sagen wo der Fehler steckt?
Ich komm einfach nicht weiter!

Gruß

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Hälst du Leerzeichen in Dateinamen für sinnvoll ?

MfG Spess

Autor: Rentner Uralt (rentner)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, des sind zwar Unterstriche und die haben mir bis jetzt noch nie 
Probleme gemacht.

Wenn ich aber ein neues Projekt ohne die _ anlege kommt kein Fehler 
mehr!
Wann machen die Ärger und wann nicht?

Danke für die Hilfe.

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rentner Uralt schrieb:
> Hmm, des sind zwar Unterstriche und die haben mir bis jetzt noch nie
> Probleme gemacht.

"bz_rccar5_mit Speicher.elf"

Ein Leerzeichen zwischen "mit" und "Speicher" ;)

Autor: Magnetus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rentner Uralt schrieb:
> Hmm, des sind zwar Unterstriche und die haben mir bis jetzt noch nie
> Probleme gemacht.

Rentner Uralt schrieb:
> Linking console executable: bin/Debug/bz_rccar5_mit Speicher.elf
                                                    ^^^
                                                Unterstrich?
                                                 ( hüstel )

Autor: Rentner Uralt (rentner)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...ohne Worte!

Danke nochmal.

Autor: bix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rentner Uralt schrieb:
> while(1){
> ...
> eeprom_write_byte(&eeFooByte, ureal);
> eeFooByte ++;
> if (eeFooByte > 512)
>     {
>         eeFooByte=1;
>     }

In einer Endlosschleife immer in den EEPROM schreiben ist mutig. Wenn 
man bedenkt, dass eine EEPROM-Zelle etwa nur 10.000 Löschzyklen hält.

Ich würde lieber in einen RAM Buffer schreiben und den Buffer erst nach 
Auslösen durch einen Benutzer (z.B. durch Tastendruck) in den EEPROM 
übertragen, falls es denn sein muss.

Gruß, bix

Autor: Martin Vogel (oldmax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Dem letzteren Beitrag würd ich auch etwas mehr Aufmerksamkeit widmen. Es 
macht keinen Sinn, den EEProm Bereich ständig zu überschreiben. Sollen 
mit dem µC Werte an den PC gesendet werden, sind die Werte im SRam 
genauso Sinnvoll. Um die ersten 10 Meßzyklen vielleicht zu übergehen, 
könnte man die Ausgabe solange unterbinden. Sollte es notwendig sein, 
nach einem Spannungsausfall auf die letzten Werte zuzugreifen, denk ich, 
das da eine Detektierung der Versorgungsspannung erfolgen sollte und bei 
Ausfall über eine Spannungspufferung die letzten Werte in den EEprom 
schreiben. Hier reicht vielleicht ein entsprechend großer Kondensator. 
Einfach die Versorgungsspannung mit einer Diode an VCC und Kondensator, 
aber direkt an einen freien Eingang. Dann muß erst mal 10000x die 
Spannung ausfallen, bevor der Speicher seinen Dienst versagt..... Beim 
Neustart kann dann eine Initialisierungs-Routine die EEProm-Werte in den 
SRAM schreiben und von da aus gehts mit der normalen Datenübertragung an 
den PC.
Gruß oldmax

Autor: Rentner Uralt (rentner)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

eigentlich wollte ich den ATMEGA aus der Schaltung ziehen und zum 
auslesen ins STK stecken.

Aber ich werde nun die Datenspeicherung/-übertragung wie vom Max und bix 
beschrieben versuchen.
Hatte als Spannungspuffer (Versorgungsspannung bricht öfter ab) schon 
einen 1F Kondensator reingepackt. Sollte nach meinen Berechnungen circa 
1 bis 2 Minuten (Wenn Schaltung zusätzlich belastet wird) überbrücken 
können.

Kann ich dann alles in den RAM schreiben und über den ISP-->STK-->PC 
auslesen?

Gruß

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bix schrieb:
> dass eine EEPROM-Zelle etwa nur 10.000 Löschzyklen hält.

100.000

warum nicht einfach per UART an den PC übretragen?
usb/seriell (mit ttl + RS232 Pegeln) Adapter gibts in der Bucht für 10€.
Alternativ kann man sich auch einen selber bauen suche mal nach "AVR 
CDC"

Autor: Gast 57 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich halte die Lösung das RAM per UART auszulesen wie von Vlad Tepesch
vorgeschlagen für den sinnvollsten Weg. Per ISP hast Du keinen
Zugriff auf das RAM. Ich verwende das EEPROM zwar hin und wieder ganz 
gerne als Temporären Datenspeicher (während der Entwicklung).
Solange die Schreibzyklen (lt. DB 100000) ausreichen, mag das interne
EEPROM verwendbar sein. Wenn es denn nur über EEPROM geht und viele
Schreibzyklen nötig sind gibt es preisgünstig externe serielle EEPROMs,
die ca. 10 mal soviel Zyklen mitmachen.
Notfalls geht auch ein mit einer Knopfzelle gepuffertes SRAM,
habe ich auch schon verwendet, für Testzwecke OK, aber nichts für
Serie oder Dauereinsatz.

Autor: Martin Vogel (oldmax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Um nicht mißverstanden zu werden: Natürlich die Daten in den SRam und 
dann ohne EEProm an den PC senden. Lediglich, wenn keine Daten verloren 
gehen dürfen oder man genau wissen will, was vor dem Netzausfall war, 
die Daten retten und ins EEProm schreiben, damit man sie beim 
Spannungswiederkehr zur Verfügung hat. Deswegen schrieb ich auch: erst 
die Daten ins Ram und dann mit normaler Übertragung vom Ram zum PC. Ich 
benutze den EEprom nur für dauerhafte Parametereinstellung, also Werte, 
die einmal per PC in den Controller geschickt und dann dem völlig 
autarken µC sagen, wo's langgeht. Erst, wenn sich Parameter ändern, 
werden diese mit PC neu beschrieben.
Gruß oldmax

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.