Forum: Mikrocontroller und Digitale Elektronik EEPROM ATMEGA 16


von Rentner U. (rentner)


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ß

von spess53 (Gast)


Lesenswert?

Hi

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

MfG Spess

von Rentner U. (rentner)


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.

von Draco (Gast)


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" ;)

von Magnetus (Gast)


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 )

von Rentner U. (rentner)


Lesenswert?

...ohne Worte!

Danke nochmal.

von bix (Gast)


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

von Martin V. (oldmax)


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

von Rentner U. (rentner)


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ß

von Vlad T. (vlad_tepesch)


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"

von Gast 57 (Gast)


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.

von Martin V. (oldmax)


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

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.