Forum: Mikrocontroller und Digitale Elektronik Lesen und Schreiben des EEprom bei Atmega8


von Bastian T. (bastianue)


Lesenswert?

Hallo ich habe mir auf der Seite von Stegem (www.stegem.de)

den Selbsbaulötkolben nachgebaut, wenn ich das fertige Programm in den
Atmega8 einspiele hab ich aber das Problem das die eingestellte 
Temperatur nicht gespeichert wird, ich hab das jetzt mal darauf zurück 
geführt das nicht auf den EEprom geschrieben/gelesen werden kann!

gibt es in dem AvrStudio eine einstellung die ich machen muss um den 
EEprom
benutzen zu können ?

das Programm liegt auf der Webseite von "stegem"
http://stegem.de/Elektronik/Loetkolben/c-programm.txt

MFG Bastian

von Frankl (Gast)


Lesenswert?

Brauchst nur in der Simulation im "Memory" "EPROM" anwählen und dort 
kannst du den sehen ob das Programm falls richtig stimuliert dort etwas 
reinschreibt.

von Oliver (Gast)


Lesenswert?

>gibt es in dem AvrStudio eine einstellung die ich machen muss um den
>EEprom
>benutzen zu können ?

Nein.

Brown-Out-Fuse aktiviert?

Oliver

von Bastian_UE (Gast)


Lesenswert?

ja hab ich aktiviert, aber wenn ich im Simulator in den EEprom schaue 
sieht es gut aus, da liegt was drinne

wenn ich das programm in den Atmega8 überspiele dann greift er nicht auf 
den EEprom zu, das merk ich daran das ein wert der sonnst gesetzt werden 
soll, nicht auf dem Display erscheint
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <stdlib.h>
4
#include <stdint.h>
5
#include <Stdio.h>
6
#include <avr/eeprom.h>
7
#include "BinaryNr.h"
8
#include "lcd.h"
9
10
11
#define F_CPU            1000000    // Interner Takt 1MHz
12
#define Prescaler 1024;             // Timer 1 Vorteiler
13
#define startwert 65537-F_CPU/Prescaler; //Zähler Startwert, Überlauf bei 65536
14
15
#define u8 unsigned char
16
#define u16 unsigned int
17
18
/* Variablen */
19
char s[4];                          // Hilfsvariable  
20
u16 adWert;                         // AD-Wert 
21
u16 Tist;                           // IstTemperatur 
22
u16 Tsoll;                          // Solltemperatur 
23
u16 eeFooWord EEMEM = 280;          // EEprom Speicher

deklariert ist der EEMEM ja, oder ist das so nicht richtig

1
/* Unterprogramme */
2
3
//lies den Temperatur-Startwert aus EEPROM
4
int Lese_Starttemp(void){
5
  u16 startTemp;
6
  startTemp = eeprom_read_word(&eeFooWord); // lese aus EEPROM in startTemp
7
  if (startTemp==0){
8
    startTemp=280;
9
  }   
10
  return startTemp; 
11
}
12
13
//schreibe den Temperatur-Tsoll ins EEPROM
14
void Schreibe_Startemp(u16 wert){
15
   eeprom_write_word(&eeFooWord, wert); // schreibe in EEPROM
16
}

und in den beiden unterprogrammen wird das Schreiben und lesen des 
EEprom ja auch aufgerufen, ist das so richtig, oder sieht jemand einen 
fehler ?

hab jetzt nur nen paar zeilen kopiert, der link zum quelltext steht ja 
schon ganz oben im thread

MFG Bastian

von Oliver (Gast)


Lesenswert?

>das merk ich daran das ein wert der sonnst gesetzt werden
>soll, nicht auf dem Display erscheint

Daran kannst du eigentlich nur feststellen, daß nichts auf dem Display 
erscheint.

Lies doch mal das eeprom aus, und schau nach, ob da was drinsteht.

Beitrag "AVRDUDE Eeprom auslesen"

Oliver

von Bastian_UE (Gast)


Lesenswert?

ich muss sagen das ich relativ neu in der ganzen Materie bin,

ich hab hier das AVR studio in der neusten version installiert, sowie 
das WinAVR, der zugriff auf den Controller wird mit einem STK500 adapter 
USB/ISP hergestellt

MFG Bastian

von Oliver (Gast)


Lesenswert?

Dann probiers mal mit AVRProg. Das steckt irgendwo in den Menus. Damit 
sollte man auch auslesen können.

Oliver

von Hannes Lux (Gast)


Lesenswert?

Will man EEP-Zugriffe im Simulator beobachten, dann muss man die 
EEP-Datei auch in den Sim-Speicher laden, das macht AVR-Studio leider 
nicht von selbst.

EEP auslesen mit AVR-Studio und STK500 ist kein Problem, ist in der 
Oberfläche zum Flashen enthalten, der Dialog befindet sich einen Frame 
tiefer, also direkt unter dem Dialog für die Flash-Datei.

...

von Bastian_UE (Gast)


Lesenswert?

OK ich hab es gefunden,

hab dann mit den mir zur verfügung stehenden tastern den wert geändert, 
beim auslesen das EEprom danach ist eine veränderung zu sehen, also 
schreibt das Programm in den EEprom

also muss der fehler im Programm liegen, wenn ich das jetzt richtig 
verstanden habe ist es so das wenn das Programm startet und im EEprom 
nix findet dann den Wert auf 280 setzt und diesen speichert.

doch wenn ich das Programm starte hab ich immer das Problem das der wert 
welcher dann 280 sein sollte immer -1 ist und dies wird mir auch auf dem 
display ausgegeben

MFG Bastian

von Oliver (Gast)


Lesenswert?

>doch wenn ich das Programm starte hab ich immer das Problem das der wert
>welcher dann 280 sein sollte immer -1 ist und dies wird mir auch auf dem
>display ausgegeben

Der Fehler ist uralt, und der Effekt bekannt. Und damit sind wir wieder 
bei Frage 1:

BROWN-OUT-FUSE gesetzt?

Oliver

von Bastian_UE (Gast)


Lesenswert?

ich habe im Avr-Studio unter Fuses DODLEVEL auf 4,0V gestellt

und auch einen Haken bei BODEN gesetzt, ich habe leider immer wieder 
probleme das mein Programmer den ATmega mal mehr mal weniger erkennt,

kann es daran liegen das ich bis jetzt noch kein richtiges ergebniss 
bekomme und die Fuses nicht richtig gesetzt werden

MFG Bastian

von Oliver (Gast)


Lesenswert?

Auch die Fuses kann man auslesen...

Oliver

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Hast Du auch die EESave-Fuse programmiert? Ansonsten wird das EEPROM bei 
jedem Programmiervorgang gelöscht.

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.