Problem z zapisem do eeprom więcej niż 2 zmiennych

Pytania, kody i porady dotyczące nie tylko Bascom.
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Problem z zapisem do eeprom więcej niż 2 zmiennych

Post autor: niveasoft » 16 mar 2017, 23:10

Tego się można było spodziewać. Miałeś przetestować ATU i ATO :D
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Problem z zapisem do eeprom więcej niż 2 zmiennych

Post autor: niveasoft » 17 mar 2017, 14:15

Przesadziłem ze skróceniem czasu który procek miał odczekać po zapisie do eeprom.
Było Waitms 10 a skróciłem do 3. Okazuje się że poprawnie zapisuje przy 5ms zwłoki.
  1. Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
  2.   I2cstart
  3.    I2cwbyte Addressw
  4.    If Err = 1 Then Exit Sub
  5.    I2cwbyte Adres
  6.    I2cwbyte Value
  7.   I2cstop
  8.    Waitms 5     ' przy 3ms występuje problem z zapisem kolejnych bajtów
  9. End Sub
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
Michał6201
Posty: 165
Rejestracja: 03 paź 2015, 20:07

Re: Problem z zapisem do eeprom więcej niż 2 zmiennych

Post autor: Michał6201 » 17 mar 2017, 22:00

Pięknie działa :D
W życiu bym się nie spodziewał, że te 2ms naprawią ten problem.

W głównym pliku delikatne zmieniłem wysyłanie danych do smartfona, jak wcześniej już wspominałem, dostawałem odpowiedź zwrotną w postaci ATP=12-05-18.

Odpowiada za to ten fragment kodu: Helpstr = Command + "="

Ja zamieniłem go na:
Helpstr = " "

I teraz otrzymuję jako odpowiedź w aplikacji samą datę: 12-05-18. Oczywiście przetestuję, czy teraz nie powstają jakieś błędy, bo jeśli coś będzie krzaczyło, to powrócę do pierwotnego zapisu i razem z data będzie się wyświetlać komenda. W sumie nie przeszkadza mi to.
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Problem z zapisem do eeprom więcej niż 2 zmiennych

Post autor: niveasoft » 18 mar 2017, 11:05

Nie lubię półśrodków. Jeśli można coś zabezpieczyć to to robię :D
Kiedy testowałem kod to pół godziny zajęło mi znalezienie dlaczego nie odpowiada na komendy.
Okazało się że pin Motor musi być zwarty do masy bo inaczej urządzenie przechodzi do innego Suba i nie reaguje na komendy.
Dlatego w aplikacji na telefon dodałbym taki Timer który mierzy czas od wysłania komendy. Jeśli nie otrzyma potwierdzenia "OK" to powinien napisać "Moduł nie odpowiada. Sprawdź czy włączyłeś zapłon"

Implemantacja rozpoznania i wysyłania OK lub ERROR nie jest trudna.
  1.    If Got_str = 1 Then
  2.  
  3.         Option = Find( "ATL")
  4.  
  5.          Select Case Option
  6.           Case 1
  7.            Call Get_three_values()
  8.            If Stare_l <> One Then
  9.             Stare_l = One
  10.             L = One
  11.              Call Write_eeprom(lampka , L)
  12.               Got_str = 0                                   'warunki spełnione więc Okay!
  13.            End If
  14.  
  15.          End Select
  16.  
  17.         Option = Find( "ATO")
  18.  
  19.          Select Case Option
  20.           Case 1
  21.            Call Get_three_values()
  22.             Buff(1) = One
  23.             Buff(2) = Two
  24.             Buff(3) = Three
  25.              Call Write_ee(olej)
  26.               Got_str = 0                                   'warunki spełnione więc Okay!
  27.           Case 2
  28.            Call Read_ee(olej)
  29.             Call Send_answear( "ATO")
  30.          End Select
  31.  
  32.         Option = Find( "ATP")
  33.  
  34.          Select Case Option
  35.           Case 1
  36.            Call Get_three_values()
  37.             Buff(1) = One
  38.             Buff(2) = Two
  39.             Buff(3) = Three
  40.              Call Write_ee(przeglad)
  41.               Got_str = 0                                   'warunki spełnione więc Okay!
  42.           Case 2
  43.            Call Read_ee(przeglad)
  44.             Call Send_answear( "ATP")
  45.          End Select
  46.  
  47.  
  48.         Option = Find( "ATU")
  49.  
  50.          Select Case Option
  51.           Case 1
  52.            Call Get_three_values()
  53.             Buff(1) = One
  54.             Buff(2) = Two
  55.             Buff(3) = Three
  56.              Call Write_ee(polisa)
  57.               Got_str = 0                                   'warunki spełnione więc Okay!
  58.           Case 2
  59.            Call Read_ee(polisa)
  60.             Call Send_answear( "ATU")
  61.          End Select
  62.  
  63.  
  64.         Option = Find( "TIM")
  65.  
  66.          If Option = 1 Then
  67.           Call Get_three_values()
  68.            Hour = One
  69.            Minute = Two
  70.            Second = Three
  71.             Blad = Pcf8583_storetime(second , Minute , Hour , Day , Month , Year)
  72.              Got_str = 0                                    'warunki spełnione więc Okay!
  73.          End If
  74.  
  75.        'tutaj różnica
  76.  
  77.         If Got_str = 0 Then
  78.          Print "OK"                                         'jeśli coś skasowało flagę wczesniej
  79.         Else
  80.          Print "ERROR"                                      'jeśli nic nie skasowało flagi to cos nie gra
  81.         End If
  82.  
  83.         Got_str = 0                                         'zawsze kasuj
  84.       Else
  85.        Cmd_timeout = 3
  86.       End If
Dzisiaj wyczyściłem Cache swojej przeglądarki i zauważyłem że kody nie zwijają się z powrotem. Popracuje się nad tym ;)
Dodałem tez nowy styl, taki bardziej kanciasty, który można wybrać w swoim profilu w ustawieniach witryny.

[EDIT] Ponowne zwijanie kodu naprawiłem ;) Jak komuś nie działa to trzeba wyczyścić Cache przeglądarki (ale wystarczy tylko "Obrazy i pliki zapisane... a reszte sobie zostawić żeby potem wszędzie nie musieć klikać zgody na ciasteczka :D )
ODPOWIEDZ