This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
et:examples:storage:eeprom [2015/01/23 10:56] – rellermaa | et: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: | ||
===== Teooria ===== | ===== Teooria ===== | ||
- | [{{ : | + | [{{ : |
+ | EEPROM (inglise keeles // | ||
+ | |||
+ | 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 | + | AVR mikrokontrollerisse on sisse ehitatud |
* 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) |
- | | + | |
- | * void eeprom_write_word (uint16_t *addr, uint16_t value) | + | |
* void eeprom_read_block (void *pointer_ram, | * void eeprom_read_block (void *pointer_ram, | ||
- | * void eeprom_write_block (void *pointer_eeprom, | + | |
+ | * void eeprom_write_word (uint16_t *addr, uint16_t value) | ||
+ | | ||
+ | * 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, | ||
- | 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 | // AVR-i EEPROM mällu baidi ja sõna salvestamise ja sealt lugemise näidisprogramm | ||
#include < | #include < | ||
- | void main(void) | + | // Põhiprogramm |
- | { | + | int main(void) { |
uint8_t andmeBait; | uint8_t andmeBait; | ||
uint8_t andmeSona; | uint8_t andmeSona; | ||
| | ||
// EEPROM-i aadressile 46 numbri 86 kirjutamine | // EEPROM-i aadressile 46 numbri 86 kirjutamine | ||
- | | + | |
// EEPROM-i aadressile 50 numbri 860 kirjutamine | // EEPROM-i aadressile 50 numbri 860 kirjutamine | ||
- | | + | |
| | ||
// 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); |
} | } | ||
</ | </ | ||
- | Selleks, et liigutada korraga rohkem andmeid tuleks kasutada bloki lugemist/ | + | Selleks, et liigutada korraga rohkem andmeid, tuleks kasutada bloki lugemist/ |
<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 < | #include < | ||
- | void main(void) | + | // Põhiprogramm |
- | { | + | int main(void) { |
uint8_t andmeJada1[10] = " | uint8_t andmeJada1[10] = " | ||
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 | ||
- | | + | |
- | + | ||
- | // 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*)& | + | eeprom_read_block((void*)& |
} | } | ||
</ | </ | ||
Line 69: | Line 76: | ||
uint8_t | uint8_t | ||
- | int main(void) | + | // Põhiprogramm |
- | { | + | int main(void) { |
uint8_t | uint8_t | ||
uint16_t SRAMint; | uint16_t SRAMint; |