Hallo.
Hab lang gelesen und nix gefunden zum Problem.
System:
Atmega 16
AVR-Studio
Vcc = 5V
Brownout bei 4V
Code ist:
So und jetzt mal zum Verhalten des Ganzen:
Ich habe also 33 EEPROM-Speichervariablen benannt und es funktioniert
auch soweit alles. Alle 41 Bytes werden beschrieben und ordnungsgemäß
ausgelesen. Nur &eeFooByte19 vertauscht seinen Wert mit &eeFooByte27.
Besser gesagt wird nicht der Wert von &eeFooByte27 in &eeFooByte27
gespeichert, sondern A3TimeOn[1] ( was den Wert von &eeFooByte27
übernehmen soll ) nimmt den von &eeFooByte19??? Alle anderen Werte sind
korrekt und die Routinen sind alle gleich geschrieben. Deshalb verstehe
ich nicht, weshalb es immer nur bei diesen zwei Werten hapert.
Kennt das Problem jemand? bitte helft mir, da ich keine Erklärung hab
und vieles schon versucht; So z.B. die Speicheradressen fest zu
benennen. Das Prob ist das Gleiche.
Vielen Dank
Hab lang gelesen und nix gefunden zum Problem.
System:
Atmega 16
AVR-Studio
Vcc = 5V
Brownout bei 4V
Code ist:
Code:
_________________________________________________________________________
globals.h:
uint8_t A1TimeOn[2], A1TimeOff[2], A2TimeOn[2], A2TimeOff[2],
A3TimeOn[2], A3TimeOff[2], A4TimeOn[2], A4TimeOff[2];
_________________________________________________________________________
main.c:
#include <avr/eeprom.h>
#include "globals.h"
int main(){
A1TimeOn[0] = 0;A1TimeOn[1] = 0;A1TimeOff[0] = 0;A1TimeOff[1] =
0;A2TimeOn[0] = 0;A2TimeOn[1] = 0;A2TimeOff[0] = 0;A2TimeOff[1] =
0;A3TimeOn[0] = 0;A3TimeOn[1] = 0;A3TimeOff[0] = 0;A3TimeOff[1] =
0;A4TimeOn[0] = 01;A4TimeOn[1] = 0;A4TimeOff[0] = 0;A4TimeOff[1] = 0;
get_A1TimeOn_EEdata();
get_A1TimeOn_EEdata();
get_A1TimeOff_EEdata();
get_A2TimeOn_EEdata();
get_A2TimeOff_EEdata();
get_A3TimeOn_EEdata();
get_A3TimeOff_EEdata();
get_A4TimeOn_EEdata();
get_A4TimeOff_EEdata();
while (1)
{
hier ist dann z.B. die Ausgabe der EEPROM-Werte
}
________________________________________________________________________
eeprom.c:
uint8_t eeFooByte1 EEMEM; //TurnSW
uint8_t eeFooByte2 EEMEM; //A1syn_0
uint8_t eeFooByte3 EEMEM; //A1syn_1
uint8_t eeFooByte4 EEMEM; //A2syn_0
uint8_t eeFooByte5 EEMEM; //A2syn_1
uint8_t eeFooByte6 EEMEM; //A3syn_0
uint8_t eeFooByte7 EEMEM; //A3syn_1
uint8_t eeFooByte8 EEMEM; //A4syn_0
uint8_t eeFooByte9 EEMEM; //A4syn_1
uint16_t eeFooByte10 EEMEM; //A1IVOn
uint16_t eeFooByte11 EEMEM; //A1IVOff
uint16_t eeFooByte12 EEMEM; //A2IVOn
uint16_t eeFooByte13 EEMEM; //A2IVOff
uint16_t eeFooByte14 EEMEM; //A3IVOn
uint16_t eeFooByte15 EEMEM; //A3IVOff
uint16_t eeFooByte16 EEMEM; //A4IVOn
uint16_t eeFooByte17 EEMEM; //A4IVOff
uint8_t eeFooByte18 EEMEM; //A1TimeOn
uint8_t eeFooByte19 EEMEM; //A1TimeOn
uint8_t eeFooByte20 EEMEM; //A1TimeOff
uint8_t eeFooByte21 EEMEM; //A1TimeOff
uint8_t eeFooByte22 EEMEM; //A2TimeOn
uint8_t eeFooByte23 EEMEM; //A2TimeOn
uint8_t eeFooByte24 EEMEM; //A2TimeOff
uint8_t eeFooByte25 EEMEM; //A2TimeOff
uint8_t eeFooByte26 EEMEM; //A3TimeOn
uint8_t eeFooByte27 EEMEM; //A3TimeOn
uint8_t eeFooByte28 EEMEM; //A3TimeOff
uint8_t eeFooByte29 EEMEM; //A3TimeOff
uint8_t eeFooByte30 EEMEM; //A4TimeOn
uint8_t eeFooByte31 EEMEM; //A4TimeOn
uint8_t eeFooByte32 EEMEM; //A4TimeOff
uint8_t eeFooByte33 EEMEM; //A4TimeOff
Beispielfunktionen:
void get_A1TimeOn_EEdata()
{
uint8_t v = 0;
cli();
v = eeprom_read_byte(&eeFooByte18);
if (v > 23)v = 0;
A1TimeOn[0] = v;
v = 0;
v = eeprom_read_byte(&eeFooByte19);
if (v > 59)v = 0;
A1TimeOn[1] = v;
sei();
}
void set_A1TimeOn_EEdata()
{
cli();
eeprom_write_byte(&eeFooByte18, A1TimeOn[0]);
eeprom_write_byte(&eeFooByte19, A1TimeOn[1]);
sei();
}
________________________________________________________________________
So und jetzt mal zum Verhalten des Ganzen:
Ich habe also 33 EEPROM-Speichervariablen benannt und es funktioniert
auch soweit alles. Alle 41 Bytes werden beschrieben und ordnungsgemäß
ausgelesen. Nur &eeFooByte19 vertauscht seinen Wert mit &eeFooByte27.
Besser gesagt wird nicht der Wert von &eeFooByte27 in &eeFooByte27
gespeichert, sondern A3TimeOn[1] ( was den Wert von &eeFooByte27
übernehmen soll ) nimmt den von &eeFooByte19??? Alle anderen Werte sind
korrekt und die Routinen sind alle gleich geschrieben. Deshalb verstehe
ich nicht, weshalb es immer nur bei diesen zwei Werten hapert.
Kennt das Problem jemand? bitte helft mir, da ich keine Erklärung hab
und vieles schon versucht; So z.B. die Speicheradressen fest zu
benennen. Das Prob ist das Gleiche.
Vielen Dank