|
ATtiny13
5) EEPROM
ATtiny13 obsahuje i malou paměť EEPROM, která může sloužit k ukládání
nějakých informací. Její velikost je jen 64 Bajtů.
Počet zápisů je (tak jako u jiných EEPROM) omezený asi na 100 000, takže
tento prostor není určen k neustálému přepisování.
Pro práci s EEPROM slouží registry:
EEARL - nastavení adresy v EEPROM
(0 až 63)
EEDR - data, která mají být zapsána
do EEPROM, nebo která jsou načtena z EEPROM
EECR - registr, který určuje, jestli
se data budou číst, nebo zapisovat, a ve kterém je informace, že
operace proběhla úspěšně
Ukázkový program, který vychází z příkladů v katalogovém
listu:
// Cteni a zapis do EEPROM
// (pri kazdem resetu se precte postupne obsah cele EEPROM, kazdy bajt se zvetsi o 1 a zapise se zpatky)
byte adresa;
byte data;
void setup()
{
delay(1000); // na zacatku 1 sekunda pauza, aby nedochazelo k zapisu pri zakmitavani pri spousteni napajeni
for (adresa = 0; adresa< 64; adresa++) // smycka pro kazdy bajt z EEPROM
{
data = eeprom_read(adresa); // precteni hodnoty z kazde pametove bunky
data ++; // zvetseni hodnoty o 1
eeprom_write(adresa , data); // a zapis zpatky na tu samou adresu
}
}
// podprogram pro cteni z EEPROM
byte eeprom_read(byte adresa)
{
while (EECR & 0b00000010); // cekani na dokonceni predchozi operace (nez bit EEPE v registru EECR padne do '0')
EEARL = adresa; // do registru EEARL ulozit adresu (0 az 63)
EECR = 0b00000001; // bit EERE (Read Enable) nastavit na '1'
return EEDR; // v registru EEDR se nachazi obsah pametove bunky ze zadane adresy
}
// podprogram pro zapis do EEPROM
void eeprom_write(byte adresa,byte data)
{
while (EECR & 0b00000010); // cekani na dokonceni predchozi operace (nez bit EEPE v registru EECR padne do '0')
EECR = 0b00000000; // nastavit rezim zapisu na 'atomic' (smazat a zapsat)
EEARL = adresa; // do registru EEARL ulozit adresu (0 az 63)
EEDR = data; // do registru EEDR ulozit jednobajtovou hodnotu
EECR = 0b00000100; // bit EEMPE (Master Program Enable) nastavit do '1' (povoleni zapisu)
EECR |= 0b00000010; // k tomu jeste bit EEPE nastavit do '1' - tim zacne zapis.
// (je treba ty dva bity EEMPE a EEPE nastavovat postupne)
}
void loop()
{
}
|
|
|
|