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 zapisu/odczytu eepromu

*zaba* 29 Cze 2009 21:40 1887 6
REKLAMA
  • #1 6719615
    *zaba*
    Poziom 13  
    Witam. Mam problem z zapisaniem i odczytem z eepromu.
    Po pierwsze plik z epromu zapisuje się osobno z rozszerzeniem eep czy w kodzie programu ??
    Po drugie chciałbym aby ktoś sprawdził mój kod wszystko działa, zapisuje największą temperaturę ale chyba jednak w flash'u bo jak odłączam zasilanie i załączam to ta temperatura zostaje skasowana :( bardzo bym był wdzięczny za wszelkie podpowiedzi i przykłady :)

    
    $regfile "m8def.dat"
       $crystal = 8000000
     $eeprom
    
    
                                               'model procesora dla którego jest ten program
    Deflcdchar 1 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32        ' definicja znaki stopnia
    Config Portb.0 = Input
       Portb.0 = 1
    Config Portc.4 = Output
    Portc.4 = 1
    Config 1wire = Portc.5                                      ' konfiguracja portu PD.5 jako wej?cia magistrali 1-wire
    Dim Odczyt(2) As Byte , A As Byte , Licznik As Byte , T As Integer , T1 As Single , Napis As String * 5
    Dim E As Byte
    Dim X1 As Byte
    Dim X As Byte
    
        Do
    
            1wreset                                             'reset
      1wwrite &HCC                                              'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM
      1wwrite &H44                                              'dokonaj konwersji
      Waitms 750                                                'przeczekaj czas konwersji
      1wreset                                                   'reset
      1wwrite &HCC                                              'rozkaz adresowy SKIP ROM
      1wwrite &HBE                                              'rozkaz funkcyjny - polecenie odczytu DS18x20
      Odczyt(1) = 1wread(2)                                     'odczytaj dwa pierwsze bajty
      T = Odczyt(2)                                             'przepisz starszy bajt do zmiennej typu Integer
      Shift T , Left , 8                                        'przesuń ten bajt w lewo na wyższe pozycje
      T = T + Odczyt(1)                                         'przepisz - dodaj młodszy bajt
    
      T1 = T * 0.0625                                           'wyra? w stopniach Celsjusza, wynik wpisz do zmiennej Single
    
      Napis = Fusing(t1 , "#.#")
      Cls : Cursor Off : Lcd "* Temperatura *"
      Lowerline
     Lcd ":" ; Napis ; " " ;
    
    
     E = T1
    
     If E > X Then
    
     Writeeeprom X , 1
     X = E
       X1= X
      End If
     If Pinb.0 = 0 Then
     Waitms 100
     If Pinb.0 = 0 Then
     Readeeprom X , 1
     Cls
     Locate 1 , 1
     Lcd "wynik " ; X1
     End If
     End If
    
    
    Loop
    End
  • REKLAMA
  • #2 6720217
    wader_669
    Poziom 28  
    koncowka czyli to co sam napisales mozesz wywalic, opisz co chciales zeby kod robil to postaram ci pomoc.

    Zapis/odczyt pamieci eeprom jest zapisywany w rozserzeniu *.epp

    Dodano po 20 [minuty]:

    
    Dim E As Single
    
    E = 0
    
    Do
    ....
    ....
    ....
    If E > T1 Then
       Writeeeprom T1 , 1
       E = T1
    End If
    
    If Pinb.0 = 0 Then
    Waitms 100
    If Pinb.0 = 0 Then
    
       Readeeprom E , 1                                         ' tak samo mogl bys to ominac
       Cls
       Locate 1 , 1
       Lcd "wynik " ; E
    
    End If
    End If
    
    
    Loop
    End
    


    Dodano po 1 [minuty]:

    i tak moim zdaniem jest to zle napisany kod, poniewaz pamiec eeprom ma malo mozliwosci zapisu. W ten sposob ja szybko zablokujesz.
  • REKLAMA
  • #3 6721137
    *zaba*
    Poziom 13  
    Wiem wiem ma chyba jakoś 100tyś razy. Dzięki za kod działa tak jak mój poprzedni tylko ja odłączam zasilanie dane się kasują :(
    Moim celem jest zapisanie największej temperatury. A jeszcze w ogóle mi się nie tworzy ten plik z rozszerzeniem .eep to właśnie jest dla mnie dziwne może brakuje mi jakieś deklaracji ?? bo jak kopiuje kod z helpa to wszystko ok plik eep tez jest a tu nic
  • REKLAMA
  • #4 6721171
    wader_669
    Poziom 28  
    a co chcial bys zeby bylo w tym pliku epp? teraz go nie ma bo nic nie wpisujesz do pamieci eeprom. Jak zrobisz odczyt i zapis to powinien sie pojawic

    Wiem ze twoj kod dzialal ale bylo duzo bez sensu komend.
  • REKLAMA
  • #5 6721189
    *zaba*
    Poziom 13  
    Aha to wielkie dzięki ale co powiesz na to że ta temperatura znika po restarcie uC ??

    Dodano po 1 [godziny] 4 [minuty]:

    $regfile "m8def.dat"
       $crystal = 8000000
    
    
                                               'model procesora dla którego jest ten program
    Deflcdchar 1 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32        ' definicja znaki stopnia
    Config Portb.0 = Input
       Portb.0 = 1
    Config Portc.4 = Output
    Portc.4 = 1
    Config 1wire = Portc.5                                      ' konfiguracja portu PD.5 jako wej?cia magistrali 1-wire
    Dim Odczyt(2) As Byte , A As Byte , Licznik As Byte , T As Integer , T1 As Single , Napis As String * 5
    
    
    Dim E As Single
    
    
    
    
        Do
    Readeeprom E , 1
            1wreset                                             'reset
      1wwrite &HCC                                              'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM
      1wwrite &H44                                              'dokonaj konwersji
      Waitms 750                                                'przeczekaj czas konwersji
      1wreset                                                   'reset
      1wwrite &HCC                                              'rozkaz adresowy SKIP ROM
      1wwrite &HBE                                              'rozkaz funkcyjny - polecenie odczytu DS18x20
      Odczyt(1) = 1wread(2)                                     'odczytaj dwa pierwsze bajty
      T = Odczyt(2)                                             'przepisz starszy bajt do zmiennej typu Integer
      Shift T , Left , 8                                        'przesuń ten bajt w lewo na wyższe pozycje
      T = T + Odczyt(1)                                         'przepisz - dodaj młodszy bajt
    
      T1 = T * 0.0625                                           'wyra? w stopniach Celsjusza, wynik wpisz do zmiennej Single
    
      Napis = Fusing(t1 , "#.#")
      Cls : Cursor Off : Lcd "* Temperatura *"
      Lowerline
     Lcd ":" ; Napis ; " " ;
    
    
    
    If T1 > E Then
       Writeeeprom T1 , 1
       E = T1
    End If
    
    If Pinb.0 = 0 Then
    Waitms 100
    If Pinb.0 = 0 Then
    
       Readeeprom E , 1                                         ' tak samo mogl bys to ominac
       Cls
       Locate 1 , 1
       Lcd "wynik " ; E
    
    End If
    End If
    
    
    Loop
    End


    Dzieki już wszystko gra dodałem odczyt z eepromu na początku petli
  • #6 6722984
    wader_669
    Poziom 28  
    dokladnie, to powinno rozwiazac tylko nie rob tego w petli (bo po co)
  • #7 6723264
    *zaba*
    Poziom 13  
    aha no tak po co dzięki za pomoc
REKLAMA