[BASCOM] Zapis wartości domyślnych w Eeprom

Proste przykłady do częstych pytań.
ODPOWIEDZ
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

[BASCOM] Zapis wartości domyślnych w Eeprom

Post autor: niveasoft » 21 lut 2018, 19:40

W związku z pytaniem które kolega @pimowo zawarł w jednym ze swoich kodów :
pimowo pisze: '----------------------------------------------------------------------------------------------
'----------------------------------------------------------------------------------------------
'TAK PRZY OKAZJI
'Jak to zrobic aby domyslne dane same sie wpisaly do eeprom?
'Przykladowo wrzucam nowy kod do AVR i wszystkie dane mi sie kasuja
'Chcialbym aby domyslne dane same sie wpisaly do eeprom przy pierwszym starcie
'Gdy eeprom byla juz zapisywana to nic nie robimy
'----------------------------------------------------------------------------------------------
'----------------------------------------------------------------------------------------------
..chciałbym zwrócić uwagę, że stosowna podpowiedź jest na mojej stronie od kilku lat ->podstrona "Tips & Tricks"

Poniżej przedruk:
Może kogoś zaciekawi jak najczęściej rozwiązuję sprawy zmiennych przechowywanych w Eeprom i ich początkowych wartości
Należy wiedzieć że zaraz po programowaniu cała pamięć Eeprom jest "skasowana" czyli wypełniona &HFF
To powoduje że kiedy w programie umieścimy coś takiego jak odczyt do zmiennej typu Word to uC odczyta &HFFFF czyli 65535
Jeszcze gorzej jest kiedy odczytana wartośc ma być przepisana do zmiennej typu Integer. &HFFFF oznacza wtedy wartość -32767
Częstym sposobem na rozwiązanie tego problemu były zapisy typu:
  1. Dim Zmienna As Word
  2. Readeeprom Zmienna , 1
  3. If Zmienna > Oczekiwana_wartośc_max Then Zmienna = 100 'przykladowa wartość
Niestety używając tego sposobu dla każdej zmiennej trzeba w kodzie zapisać jej wartość graniczną.
Dlatego piszę to inaczej
Wykorzystuję to, że Eeprom początkowo ma wartości &HFF
Odczytuję do zmiennej tylko jeden bajt i sprawdzam czy był już kiedyś zapisywany moją umówioną wartością.
Jeśli nie, to zapisuję ją tą umówioną wartością i przy okazji wpisuję do eeprom domyślne ustawienia dla urządzenia.
Sposób ten ma jeszcze jedną zaletę. Bardzo łatwo jest wbudować funkcję przywracania "ustawień fabrycznych".
Kolejność wtedy wygląda tak:
  1. '**************************************************
  2. '*    WARTOŚCI POCZĄTKOWE I PAMIĘTANE W EEPROM    *
  3. '**************************************************
  4. Config PINB.0 = Input : Set PORTB.0 : Reset_ustawien Alias PINB.0
  5. 'przyciśnięcie przycisku przy starcie przywróci ustawienia domyślne
  6.  
  7. 'zmienna do sprawdzenia stanu programowania eeprom, jej odpowiednik w eeprom i wartość umówiona
  8. Dim Ee_check As Byte , Ee_check_ee As Eram Byte : Const Mem_ee = &H10
  9.  
  10. Dim Tryb_pracy As Byte , Tryb_pracy_ee As Eram Byte      ' zmienna programu i jej odpowiednik w eeprom
  11. Dim Ilosc_stopni As Byte , Ilosc_stopni_ee As Eram Byte  ' zmienna programu i jej odpowiednik w eeprom
  12. Dim Example_str As String * 15, Example_str_ee As Eram String * 15
  13.  
  14. Ee_check = Ee_check_ee                                   ' sprawdź czy eeprom była programowana
  15.  
  16. If Reset_ustawien = 0 Then Ee_check = &HFF               ' nawet jeśli to przyciskiem można to zmienić
  17.  
  18. If Ee_check <> Mem_ee Then                               ' jeśli nie była programowana
  19.  Ee_check_ee = Mem_ee                                    ' to zostaw znak, że już programowana
  20.  
  21.   Ilosc_stopni_ee = 21                                   ' wpisz wartości domyślne
  22.   Tryb_pracy_ee = 0
  23.   Example_str_ee = "Zostaw wiadomosc"
  24.    
  25. End If
  26.  
  27. ' ** MEMORY READING **
  28. Ilosc_stopni = Ilosc_stopni_ee                           ' tutaj już normalne odczytywanie z eeprom
  29. Tryb_pracy = Tryb_pracy_ee                               ' tylko to będzie się działo jeśli eeprom już programowana
  30. Example_str = Example_str_ee
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: [BASCOM] Zapis wartości domyślnych w Eeprom

Post autor: pimowo » 02 lut 2021, 19:53

Ostatnio się zastanawiałem... czy tak samo "prosto" można użyć zewnętrznej (AT24Cxxx) pamięci EEPROM?
ODPOWIEDZ