Hallo Auch auf die Gefahr hin ausgelacht zu werden. Warum wird bei diesem Code keine .eep Datei erzeugt, damit ich das EEPROM meines ATMEGA16 nutzen kann.(AVR Studio, STK500) Und wenn noch nicht alle vor lachen vom Stuhl gefallen sind, schieb ich noch einen hinterher. Ich möchte 16-Werte Speichern. Wie geht das das Programm sich nacher den richtigen Wert wieder herauspickt??? (einfaches beispiel genügt) BTW: Ich programmier erst seit 2 Tagen Assembler. Bitte habt nachsicht. Danke
> Auch auf die Gefahr hin ausgelacht zu werden. Nur keine Panik, so schnell lacht hier keiner > damit ich das EEPROM meines ATMEGA16 nutzen kann Du kannst Dein EEPROM auch so nutzen, ohne "eep" Die Daten werden Durch Dein Programm automatisch in den EEPROM eingetragen "EEPROM_write:" > Ich möchte 16-Werte Speichern. Ja? Aber wohin den? Sicherlich in den EEPROM? Natürlich muss vorher festgelegt werden, wo genau die Datenbytes abgelegt werden bzw zu finden sind. Hier ein kleines Beispiel: ;################################################################### ;################################################################### ;################################################################### ; INPUT: TEMP1 Adresse(low) ; TEMP2 Adresse (High) ;OUTPUT: TEMP1 DATEN EEPROM_read: sbic EECR,EEWE ; Wait for completion of previous write rjmp EEPROM_read out EEARH, temp2 ; Set up address in address register out EEARL, temp1 sbi EECR,EERE ; Start eeprom read by writing EERE in temp1,EEDR ; Read data from data register ret ;################################################################### ;################################################################### ;################################################################### ; INPUT: TEMP1 Adresse(low) ; TEMP2 Adresse (High) ; TEMP DATEN EEPROM_write: sbic EECR,EEWE; Wait for completion of previous write rjmp EEPROM_write out EEARH,temp2; Set up address in address register out EEARL,temp1 out EEDR, temp ; Write data to data register sbi EECR, EEMWE; Write logical one to EEMWE sbi EECR, EEWE ; Start eeprom write by setting EEWE ret Meine Bankverbindung gebe ich Dir später ;) Bernhard
PS: Ein EEPROM kann nicht beliebig oft beschrieben werden, glaube nach 100.000 Schreibzyklen funktioniert er nicht mehr ;)
>> PS: Ein EEPROM kann nicht beliebig oft beschrieben werden,
glaube nach 100.000 Schreibzyklen funktioniert er nicht mehr ;)
Naja ich glaub diese Angaben sind nicht allzu pessimistisch zu
betrachten... 100.000 Zyklen sind einiges und die musst du erstmal
hinbekommen ^^
@Dominik >Naja ich glaub diese Angaben sind nicht allzu pessimistisch zu >betrachten... Stimmt. Aber man sollte nicht permanent den EEprom beschreiben, dann wäre das µC-EEprom-Leben wirklich nur von kurzer Dauer ;)
Danke erstmal Allerdings habe ich noch nicht ganz geblickt wie ich dem EEPROM sagen soll das er den Wert an einer anderen Stelle Speichern soll. Ein ganzes Register verbraten kann ja auch nicht der richtige weg sein. Oder doch ???
>Allerdings habe ich noch nicht ganz geblickt wie ich dem EEPROM sagen >soll das er den Wert an einer anderen Stelle Speichern soll in den Registern TEMP1 und TEMP2 wird die EEPROM-Adresse übergeben und dann liest der µC den EEPROM an einer ganz bestimmten Adresse (EEPROM_ADRESSE_XX) aus ;) Das gelesene Byte liegt dann im Register TEMP vor Beim Schreiben im EEprom wird genauso verfahren, nur andersrum. BSP: ldi temp1, low (EEPROM_ADRESSE_XX) ldi temp2, high (EEPROM_ADRESSE_XX) rcall EEPROM_read ; input: TEMP1 TEMP2 Output: temp
>in den Registern TEMP1 und TEMP2 wird die EEPROM-Adresse übergeben >und dann liest der µC den EEPROM an einer ganz bestimmten Adresse >(EEPROM_ADRESSE_XX) aus ;) Also wenn das XX für eine HEX-Adresse, und TEMP1 und TEMP2 die untere und oberer Grenze darstellen, hab ichs verstanden
>Also wenn das XX für eine HEX-Adresse, und TEMP1 und TEMP2 die untere >und oberer Grenze darstellen, hab ichs verstanden ....das freut mich.... prima :)
Naja, ich fürchte ich bin grad ein bischen dumm g Ich hab jetzt mal munter die Register geändert, aber wenn ich im EEPROM-Fenster(Debugger) nachschaue, steht mein Wert immer an der selben Stelle 0x0. Ein kleines Beispiel an dem ich sehe wie der Wert an unterschiedlichen Stellen abgespeichert wird, würde mir weiterhelfen
Beispiel für ein Byte (66) schreiben in EEprom-Adresse (260): ldi temp, 66 ldi temp1, low (260) ldi temp2, high(260) rcall EEPROM_write Beispiel für ein Byte lesen aus EEprom-Adresse (260): ldi temp1, low (260) ldi temp2, high(260) rcall EEPROM_read in "temp" befindet sich nun das aus demm EEprom gelesene Zeichen Bernhard
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.