logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Problem z pamiecią EEPROM

jaroslawk 27 Lip 2009 22:58 1470 8
REKLAMA
  • #1 6828863
    jaroslawk
    Poziom 21  
    Witam,
    Dlaczego wartość odczytana z pamięci jest inna niż zapisana.
    Dlaczego jak odłączę zasilanie od procesora wszystkie dane z pamięci znikają.

    
    $regfile = "m162def.DAT"
    $crystal = 8000000
    $baud = 9600
    
    Dim Znak_chr As Byte
    Dim Licznik1 As Integer
    Dim Licznik2 As Integer
    Dim Blokada_7 As Integer
    Dim Blokada_6 As Integer
    Dim Odczyt1 As Integer
    Dim Odczyt2 As Integer
    
    Readeeprom Licznik1 , 1
    Readeeprom Licznik2 , 2
    
    Do
    
    If Pinb.0 = 0 Then
        If Blokada_7 = 0 Then
              Blokada_7 = 1
              Incr Licznik1
              Writeeeprom Licznik1 , 1
        End If
    End If
    If Pinb.0 = 1 Then
          Waitms 50
          Blokada_7 = 0
    End If
    
    
    If Pinb.1 = 0 Then
        If Blokada_6 = 0 Then
              Blokada_6 = 1
              Incr Licznik2
              Writeeeprom Licznik2 , 2
        End If
    End If
    If Pinb.1 = 1 Then
          Waitms 50
          Blokada_6 = 0
    End If
    
    
    Znak_chr = Inkey()
    If Znak_chr = 65 Then
    Print Chr(12)
    Print "Licznik_1 " ; Licznik1
    Print "Licznik_2 " ; Licznik2
    Readeeprom Odczyt1 , 1
    Readeeprom Odczyt2 , 2
    Print "Licznik_odczyt1 " ; Odczyt1
    Print "Licznik_odczyt2 " ; Odczyt2
    End If
    
    Loop
    End
    
  • REKLAMA
  • #2 6829356
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 6830789
    jaroslawk
    Poziom 21  
    Bardzo dziękuje za informację. Też tak przypuszczałem tylko czy ma znaczenie kolejność komórek pamięci. W testach wybrałem komórkę 1 i 25 i objaw wył taki sam. Z tego, co wyczytałem to odradza się wykorzystywanie komórki 0.
    A gdzie może tkwić problem, że po dołączeniu zasilania od procesora ta pamięć jest zerowana.
  • REKLAMA
  • #4 6834167
    ginar
    Poziom 21  
    W AVR istnieje prawdopodobieństwo przekłamania danych z pamięci EEPROM podczas zaniku napięcia zasilania procesora, dlatego zalecają stosowanie układu zewnętrznego resetu lub Brown-out Detector (BOD) możesz go uaktywnić fuse bitami bodajże BODLEVEL i BODEN
    (ale i tak nie chce mi sie wierzyć że za każdym razem po odłączeniu zas. akurat kasuje te dane)
    Spróbuj zaprogramować fuse bit EESAVE (chroni pamieć EEprom przed skasowaniem przez "erase chip")

    Pzdr.
  • #5 6836975
    wader_669
    Poziom 28  
    1. uzywasz procka atmega162 czy atmega16?
    2. Rozbij ta integer i wtedy zapisz ja w 2 bajtach. Sprawdz jaki wynik to mnie ciekawi.
  • #6 6837106
    Konto nie istnieje
    Poziom 1  
  • #7 6904246
    jaroslawk
    Poziom 21  
    Witam,
    Dziękuję za zainteresowanie tematem.
    Standardowo pamięć posiada wartości FF. Zapisując liczbę integer zajmuje ona dwie komórki pamięci.
    Np. dla komórki o adresie 2 wykorzystywana jest również komórka 3. Liczby od 0 do 255 są zapisywane w komórce pamięci 2 a powyżej 256 w komórce 2i3. Mój problem polegał na tym, że zapisując liczbę od 0do 255 zapisywana była ona do komórki 2 a odczytywałem ją, jako zawartość dwóch komórek 2i3 czyli liczbę np. 2 FF.
    Po wpisaniu do wszystkich potrzebnych komórek wartości „00” wszystko działa poprawnie.
    Pozdrawiam
    Jarek
  • REKLAMA
  • #8 6906386
    Konto nie istnieje
    Poziom 1  
  • #9 6909265
    jaroslawk
    Poziom 21  
    Witam,
    Może faktycznie posiadam gdzieś błąd w programie, ale wpisując do pamięci same zera przy starcie procesora wszystko działa poprawnie. Zapisuję do pamięci liczby typu integer i byte, może gdzieś coś źle przemyślałem i nadpisują mi się wartości w komórkach i przesto mam dziwny odczyt.
    Powyższe wnioski nasunęły mi się analizując kilka odczytów z pamięci EEprom.

    Czy może być problem, że jest to stary procesor, który jest programowany już x razy i niektóre komórki pamięci nie trzymają wartości ?.
    Pozdrawiam
    Jarek
REKLAMA