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()
  {
  }

 

 

 


úvodní strana webu AstroMiK.org

poslední úprava stránky 18.8.2015