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
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.
>gibt es in dem AvrStudio eine einstellung die ich machen muss um den >EEprom >benutzen zu können ? Nein. Brown-Out-Fuse aktiviert? Oliver
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
>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
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
Dann probiers mal mit AVRProg. Das steckt irgendwo in den Menus. Damit sollte man auch auslesen können. Oliver
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. ...
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
>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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.