Eeprom
Eeprom
4K bytes of EEPROM exist on the Mega128 EEPROM exists in a separate address space Can only address single bytes sing special registers EEPROM !ddress Register "EE!R#$ EE!R%& EEPROM 'ata Register "EE'R& EEPROM Control Register "EECR& End rance is 1(($((( cycles per byte )rite access time is *ery slo+, approx- 8-.m/ "101$((( cycles at 11Mh23& Read time is fast, one cycle CP4 halts temporarily +hen EEPROM is read or +ritten "254 cycles&
EEPROM Memory
EEPROM !ddress Registers EE!R#$ EE!R%
EEPROM Memory
EEPROM )rite !ccess )ait ntil EE)E is 2ero- "pre*io s +rites ha*e completed& %oad EEPROM address register %oad EEPROM data register /et EEM)E "master +rite enable& +hile +riting a 2ero to EE)E)ithin 4 CP4 cycles$ set EE)E "+rite enable& in control register )hen EE)E has ret rned bac6 to 2ero$ +rite access is done- "78-.m/& 4se eeprom-h ro tines to simplify yo r code,
#include <avr/eeprom.h> eeprom_write_byte (uint8_t *addr,uint8_t value); eeprom_write_word (uint16_t *addr,uint16_t value);
EEPROM Memory
!n acti*e on8off circ it,
EEPROM Memory
EEPROM +rite before po+er do+n
if(debounce_on_off_switch() == 1){ //was on/off switch pushed? save_settings(); //save user volume kill_power(); //spin waiting for powerdown //************************************************************* // save_settings // //Saves the user settings into EEPROM when power is going down. //Interrups are disabled when this process is started. // void save_settings() { eeprom_write_byte(&eeprom_alarm_volume, alarm_volume); }//save_settings //*************************************************************
EEPROM Memory
EEPROM +rite before po+er do+n "cont-&
//************************************************************* // kill_power // //Turns off the NPN transistor that keeps the P-Ch MOSFET //turned on after the on/off pushbutton is released. Vcc to //system will then drop once switch is released. System is put //into an endless spin loop till the power goes away. void kill_power() { PORTD &= ~(1<<PD0); //set portD bit 0 to 0, killing power while(1){}; //spin till death }//kill_power //*************************************************************
EEPROM Memory
EEPROM Read !ccess Ma6e s re EE)E is not set- "+rite in progress& %oad EEPROM address register "EE!R&/et EERE "read enable& bit in control register EECR&'ata +ill be a*ailable one cycle later in the data register "EE'R&
#include <avr/eeprom.h
main(){
//restore the previous alarm and volume levels alarm_volume = eeprom_read_byte(&eeprom_alarm_volume);