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/02/13 10:23] 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 (//Electrically Eraseable Programmable Read Only Memory// on elektriliselt kustutatav mäluseade, mida kasutatakse tavaliselt mingi väiksema hulga andmete salvestamiseks. EEPROMi 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.+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 erinevateprogrammis 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.
  
-EEPROMi mälupesa kasutades on oluline meelde jätta ka see, et mälubaitide eluiga on 100000 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) 
   * uint16_t eeprom_read_word (const uint16_t *addr)   * uint16_t eeprom_read_word (const uint16_t *addr)
Line 21: Line 21:
   * void eeprom_update_block (const void *pointer_ram, void *pointer_eeprom, size_t n)   * 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:+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. 
 <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 37: Line 38:
          
     // 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((uint16_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];
Line 75: 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.1423823020.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