Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:examples:storage:eeprom [2015/01/23 11:15] rellermaaet:examples:storage:eeprom [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-~~PB~~ 
 ====== EEPROM ====== ====== EEPROM ======
 +//Vajalikud teadmised: [HW] [[et:hardware:homelab:controller]] //
  
 ===== Teooria ===== ===== Teooria =====
-[{{ :et:examples:storage:eeprom2.png?300|Atmeli EEPROM mälukiip}}]+[{{ :et:examples:storage:eeprom2.png?250|Atmeli EEPROM mälukiip}}] 
 +EEPROM (inglise keeles //Electrically Eraseable Programmable Read Only Memory//) on elektriliselt kustutatav mäluseade, mida kasutatakse tavaliselt mingi väiksema hulga andmete salvestamiseks. EEPROM-i eeliseks on andmete säilimine ka pärast kontrolleri toite kadumist. Seetõttu kasutatakse seda tavaliselt erinevate, programmis muudetavate seadete säilitamiseks. Muus osas käitub EEPROM mälu sarnaselt muude mäludega, kus mälubittidest on moodustatud 8-bitised baidid. 
 + 
 +EEPROMi mälupesa kasutades on oluline meelde jätta ka see, et mälubaitide eluiga on ca 10 0000 kirjutustsüklit. Seega tuleks jälgida, et EEPROM mällu kirjutatakse vaid minimaalselt oluline andmehulk. 
 ===== Praktika ===== ===== Praktika =====
  
-AVR mikrokontrollerisse on sisse ehitatud teadud osa EEPROM mälu. Kodulabori III põlvkonna kontrolleris ATXMega128A1U on EEPROM mälumaht 2KB. EEPROM-iga suhtlemiseks on soovitatav kasutada teeki, mis on AVR GCCsse juba sisse ehitatud. Teegis on ära defineeritud põhilised funktsioonid EEPROM mälupesaga suhtlemiseks:+AVR mikrokontrollerisse on sisse ehitatud teatud osa EEPROM mälu. Kodulabori III põlvkonna kontrolleris ATxmega128A1U on EEPROM mälumaht 2 KB. EEPROM-iga suhtlemiseks on soovitatav kasutada teeki, mis on AVR GCC-sse juba sisse ehitatud. Teegis on ära defineeritud põhilised funktsioonid EEPROM mälupesaga suhtlemiseks:
   * uint8_t eeprom_read_byte (const uint8_t *addr)    * uint8_t eeprom_read_byte (const uint8_t *addr) 
-  * void eeprom_write_byte (uint8_t *addr, uint8_t value)  
   * uint16_t eeprom_read_word (const uint16_t *addr)   * uint16_t eeprom_read_word (const uint16_t *addr)
-  * void eeprom_update_byte (uint8_t *__p, uint8_t __value)  
-  * void eeprom_write_word (uint16_t *addr, uint16_t value) 
-  * void eeprom_update_word (uint16_t *__p, uint16_t __value)  
   * void eeprom_read_block (void *pointer_ram, const void *pointer_eeprom, size_t n)    * void eeprom_read_block (void *pointer_ram, const void *pointer_eeprom, size_t n) 
-  * void eeprom_write_block (void *pointer_eeprom, const void *pointer_ram, size_t n) +  * void eeprom_write_byte (uint8_t *addr, uint8_t value)  
-  * void eeprom_update_block (const void *__src, void *__dst, size_t __n)+  * void eeprom_write_word (uint16_t *addr, uint16_t value) 
 +  * void eeprom_write_block (const void *pointer_eeprom, void *pointer_ram, size_t n
 +  * void eeprom_update_byte (uint8_t *addr, uint8_t value)  
 +  * void eeprom_update_word (uint16_t *addr, uint16_t value)  
 +  * void eeprom_update_block (const void *pointer_ram, void *pointer_eeprom, size_t n)
  
 +Lihtne näitekood EEPROM-i andmete salvestamiseks. Loetakse bait aadressilt 46 ning sõna aadressilt 50. Kirjutamiseks kasutatakse //update// funktsiooni, mis enne kirjutamist loeb EEPROM mälupesa sisu ja korrektse väärtuse olemasolul seda üle ei kirjuta. Nii säästetakse mäluelemente hävimise eest, kuid kirjutamine võtab natuke rohkem aega.
  
-Lihtne näitekood EEPROM-i andmete salvestamiseks. Loetakse bait aadressilt 46 ning sõna aadressilt 50: 
 <code c> <code c>
-// AVR-i EEPROM mällu baidi ja sõna salvestamise ja sealt lugemise näidisprogramm. Kirjutamiseks kasutatakse //update// funktsiooni, mis enne kirjutamist loeb EEPROM mälupesa sisu ja korrektse väärtuse olemasolul seda üle ei kirjuta. Sellega säästetakse mäluelemente hävimise eest, kuid kirjutamine võtab natuke rohkem aega.+// AVR-i EEPROM mällu baidi ja sõna salvestamise ja sealt lugemise näidisprogramm
 #include <avr/eeprom.h>  #include <avr/eeprom.h> 
  
-void main(void)  +// Põhiprogramm 
-+int main(void) { 
     uint8_t andmeBait;      uint8_t andmeBait; 
     uint8_t andmeSona;      uint8_t andmeSona; 
Line 32: Line 35:
     eeprom_update_byte((uint8_t*)46, 86);      eeprom_update_byte((uint8_t*)46, 86); 
     // EEPROM-i aadressile 50 numbri 860 kirjutamine     // EEPROM-i aadressile 50 numbri 860 kirjutamine
-    eeprom_update_word((uint8_t*)50, 860); +    eeprom_update_word((uint16_t*)50, 860); 
          
     // EEPROM-i aadressilt 46 baidi lugemine (peaks olema 86)     // EEPROM-i aadressilt 46 baidi lugemine (peaks olema 86)
-    andmeBait= eeprom_read_byte((uint8_t*)46); +    andmeBait = eeprom_read_byte((uint8_t*)46); 
     // EEPROM-i aadressilt 50 sõna  lugemine (peaks olema 860)     // EEPROM-i aadressilt 50 sõna  lugemine (peaks olema 860)
-    andmeSona= eeprom_read_word((uint8_t*)50); +    andmeSona = eeprom_read_word((uint16_t*)50); 
 } }
 </code> </code>
  
-Selleks, et liigutada korraga rohkem andmeid tuleks kasutada bloki lugemist/kirjutamist. Selleks tuleb eelnevalt defineerida andmeblokk muutujamälus:+Selleks, et liigutada korraga rohkem andmeidtuleks kasutada bloki lugemist/kirjutamist. Selleks tuleb eelnevalt defineerida andmeblokk muutujamälus:
 <code c> <code c>
 // AVR-i EEPROM mällu andmebloki salvestamise ja sealt lugemise näidisprogramm // AVR-i EEPROM mällu andmebloki salvestamise ja sealt lugemise näidisprogramm
 #include <avr/eeprom.h>  #include <avr/eeprom.h> 
  
-void main(void)  +// Põhiprogramm 
-+int main(void) { 
     uint8_t andmeJada1[10] = "TestLause.";      uint8_t andmeJada1[10] = "TestLause."; 
     uint8_t andmeJada2[10];     uint8_t andmeJada2[10];
          
-    // Esimene parameeter on pointer EEPROM mälu andmeblokile, +    // Esimene parameeter on pointer EEPROM mälu andmeblokile,
     // teine parameeter on pointer muutujamälu andmeblokile     // teine parameeter on pointer muutujamälu andmeblokile
     // kolmas parameeter on andmeJada pikkus     // kolmas parameeter on andmeJada pikkus
-    eeprom_update_block((void*)&andmeJada1, (const void*)12, 10);  +    eeprom_update_block((const void*)&andmeJada1, (void*)12, 10); 
-     + 
-    // Esimene parameeter on pointer muutujamälu andmeblokile, +    // Esimene parameeter on pointer muutujamälu andmeblokile,
     // teine parameeter on pointer EEPROM-i mälu andmeblokile     // teine parameeter on pointer EEPROM-i mälu andmeblokile
     // kolmas parameeter on andmeJada pikkus     // kolmas parameeter on andmeJada pikkus
-    eeprom_read_block((void*)&andmeJada2, (const void*)12, 10); +    eeprom_read_block((void*)&andmeJada2, (const void*)12, 10);
 } }
 </code> </code>
Line 73: Line 76:
 uint8_t  EEMEM NonVolatileString[10];  uint8_t  EEMEM NonVolatileString[10]; 
  
-int main(void)  +// Põhiprogramm 
-+int main(void) { 
     uint8_t  SRAMchar;      uint8_t  SRAMchar; 
     uint16_t SRAMint;      uint16_t SRAMint; 
et/examples/storage/eeprom.1422011703.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0