PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : EEPROM schreiben und lesen beim ASURO



ehenkes
02.06.2007, 11:49
Gibt es bereits ein einfaches Beispiel zum Schreiben bzw. Lesen des EEPROM im ASURO? Ich habe bisher nur diesen Thread gefunden:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=29635&highlight=eeprom

uwegw
02.06.2007, 12:04
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM

Sternthaler
02.06.2007, 13:40
Siehe Asuro-Band II Seite 21 und 22

radbruch
02.06.2007, 14:41
#include "../inc/asuro.h"

void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE))
;
/* Set up address and data registers */
EEAR = uiAddress;
EEDR = ucData;
/* Write logical one to EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
}
unsigned char EEPROM_read(unsigned int uiAddress)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE))
;
/* Set up address register */
EEAR = uiAddress;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
/* Return data from data register */
return EEDR;
}
int main(void) {
unsigned i;
unsigned char c;
Init();
/*
EEPROM_write(509,'m');
EEPROM_write(510,'i');
EEPROM_write(511,'c');
*/
SerWrite("\n\n\rInhalt des EEPROMS\n\r10.3.2007 (code by dalmator)\n\n\r",54);
for (i=0;i<512;i++) {
StatusLED(RED);
c=EEPROM_read(i);
StatusLED(GREEN);
SerWrite(&c,1);
}
while (1);
return 0;
}

Das basiert auf einem Thread von damaltor der es aus dem ATMega8-PDF-Handbuch kopiert hat. Ich kann den Thread nur leider mal wieder nicht finden.

gruß

mic

[Edit]
Achtung! Bitte passt das Programm erst an euren asuro an!
Ich möchte nicht in die EEProms aller asuros "gestempelt" werden.
EEPROM_write(509,'m');
EEPROM_write(510,'i');
EEPROM_write(511,'c');
O:)

damaltor
02.06.2007, 18:47
genau, im datenblatt sind jeweils asm- und c-sources für alle relevanten teile des prozis drin (ADC, EEPROM, TIMER, COUNTER, PWM...)

der oben genannten funktion eeprom__write muss übergeben werden:

-die daten (uidata) ACHTUNG: NUR EIN UNSIGNED CHAR; NICHT MEHR ALS 255 ALSO!

die adresse (uiaddress) ist ein wert von 0 bis 511 (nicht von 1 bis 512). er beschreibt die "speicherzelle".

die lesen-funktion braucht nur die adresse (0-511) und gbt den gelesenen wert zurück (funktioniert also wie pollswitch. variable = eeprom_read(adresse);

radbruch
03.06.2007, 11:47
Das kann man alles dem Beispielcode entnehmen O:)