Guten Tag, ich arbeite mit dem AT90S4433. Ich habe schon einiges gemacht, aber noch nie etwas mit dem EEPROM. Daher meine Frage, was muß ich tun, damit ich werte in das EEPROM reinschreiben und wieder rauslesen kann. Eigentlich möchte ich im EEPROM eine Konstante ablegen, die ich dann in meinem Programm verwenden will. (zB. mit ihr rechnen) Desweiteren möchte ich über die UART, wenn's geht, die Konstante ändern können. Wenn jemand ein kleines Beispiel parat hat wäre ich sehr dankbar. Ich arbeite mit CodeVision. Bin aber über jede Hilfe dankbar. Danke
Schau mal in die Hilfe von CodeVision. Dort ist folgendes beschrieben: Accessing the AVR internal EEPROM is accomplished using global variables, preceded by the keyword eeprom. Example: /* The value 1 is stored in the EEPROM during chip programming */ eeprom int alfa=1; eeprom char beta; eeprom long array1[5]; /* The string is stored in the EEPROM during chip programming */ eeprom char string[]=Hello; void main(void) { int i; /* Pointer to EEPROM */ int eeprom *ptr_to_eeprom; /* Write directly the value 0x55 to the EEPROM */ alfa=0x55; /* or indirectly by using a pointer */ ptr_to_eeprom=&alfa; *ptr_to_eeprom=0x55; /* Read directly the value from the EEPROM */ i=alfa; /* or indirectly by using a pointer */ i=*ptr_to_eeprom; } Pointers to the EEPROM always use 16 bits. Du musst also nur das Schlüsselwort EEPROM verwenden. Gruß, Florian
Danke, aber das habe ich auch schon gelesen. hilft mir aber nicht recht weiter. werde es aber noch mal gründlich lesen. Danke
Danke, aber große hilfen sind das nicht. Ich habs jetzt schon geschaft, das eine String im EEPROM ist. Leider kann ich diesen aber nicht auslesen und dann in ein int umwandeln. Wäre nett, Ihr mir helfen könntet.
Nochmal hab also das hier geschrieben: flash char f[]="5"; #pragma warn- eeprom char e[16]; #pragma warn+ char r[16]; void main(void) { // Declare your local variables here char flash *ptr_to_flash; char eeprom *ptr_to_eeprom; char *ptr_to_ram; // copy the string f from FLASH to // the string e in EEPROM ptr_to_flash=f; ptr_to_eeprom=e; while (*ptr_to_flash) *ptr_to_eeprom++=*ptr_to_flash++; // copy the string e from EEPROM to // the string r in RAM ptr_to_eeprom=e; ptr_to_ram=r; while (*ptr_to_eeprom) *ptr_to_ram++=*ptr_to_eeprom++; while (1) { // Place your code here int a; a=(int) (r); PORTB=a; }; sollte jetzt nicht die 5 binär auf meinem am PORTB befindlichen LED's angezeigt werden? Danke
Hallo, hab mal dein Programm angeschaut und ein bischen umgeschrieben. Dein Fehler war (meine ich), dass du in der letzten while-Schleife a mit der Adresse von r ladest und nicht den inhalt von r. Das Programm im Anhang funktioniert. Frage: Was soll das Programm denn bringen? - Die Daten im EEPROM werden beim Programmstart aus dem Flash geholt. Und dann aus dem EEPROM ins RAM geschrieben. Wieso nicht gleich vom Flash ins RAM? Gruß, Florian
Danke, das Programm ist nur ein ein Test für mich, damit ich das Schreiben und Lesen des EEPROM verstehe und üben kann. Leider funktioniert es immer noch nicht. Meine LED's zeigen mir eine 8 an. Wenn ich aber das EEPROM auslese mit Meridian, steht dort eine 5 bzw eine 35 (ASCII) Trotzdem Danke
Also bei mir im Simulator (AVR-Studio 4) funktioniert das. Der PORTB wir auf 53 (ASCII: 5) gesetzt. Was noch sein könnte ist, dass das DDRB-Register nicht gesetzt ist. Wenn du den PIN/PORT als Ausgang verwenden willst, so musst du das DDR-Register entsprechend setzten (1 = Ausgang, 0 = Eingang) Gruß, Florian
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.