Pcf8583 RTC Pomoc z obsługą

Pytania, kody i porady dotyczące nie tylko Bascom.
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Pcf8583 RTC Pomoc z obsługą

Post autor: kulamario » 15 mar 2017, 23:11

Witam
Czy był by ktoś w stanie wytłumaczyć mi jak obsługiwać zegar Pcf8583 może ma ktoś jakąś bibliotekę
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Pcf8583 RTC Pomoc z obsługą

Post autor: pimowo » 15 mar 2017, 23:14

Zobacz TUTAJ
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Pcf8583 RTC Pomoc z obsługą

Post autor: niveasoft » 15 mar 2017, 23:43

Hmm. Kiedy rozpocząłem temat Integracja PCF8583 z DateTime może nie napisałem dokładnie do czego to się może przydać.

Bascom ma wbudowane funkcje zegara a sterowac nimi albo odczytywać można prostymi komendami.

Kiedy chcesz wiedzieć/wyświetlić czas i mieć to od razu w zmiennej typu string to piszesz :
Zmienna_string = Time$
To się automatycznie połęczy z RTC i odczyta dane i automatycznie wpisze wartości czasu z zerami jeśli trzeba.
Jeśli więc potrzebne do matrixa to piszesz Text = Time$ i gotowe.
Jeśli więc jest północ to otrzymasz 00:00:00 a nie 0:0:0
Co ciekawe działa to w drugą stronę.
Kiedy chcesz ustawić czas w RTC wystarczy napisać Time$ = "05:02:55" i na pewno ustawi 55 sekund w zegarku :D

Czyli odczyt Zmienna = Time$ a zapis Time$ = "czas:czas:czas"
Można tak odczytać i zapisać datę Date$= "01/01/17" pierwszy stycznia 2017 :D Tylko zależy to jeszcze od kilku ustawień na początku kodu.

Dopisze resztę jak sobe cos ważnego przypomnę, ale ..
Podsumowując lepiej jest użyc mojego kodu który integruje PCF8583 z Bascomem bo masz potem więcej możliwości a kod jest dużo mniejszy w porównaniu z Mundikowym :D Niczego mu nie odbieram i uważam że zrobił świetną robotę. Jednak to były lata temu i teraz lepiej jest to zrobić tak.

Tak w ogóle to na temat tego zegarka wiem dużo więcej. Jakby coś było niejasne to wystarczy zapytać.
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: Pcf8583 RTC Pomoc z obsługą

Post autor: kulamario » 16 mar 2017, 0:10

Kod w sumie mam który startuje razem z RTC ale jak dopisac do tego ustawienia godziny daty itd
  1. $regfile = "m16def.dat"
  2. $crystal = 8000000
  3. $hwstack = 80
  4. $swstack = 80
  5. $framesize = 80
  6.  
  7.  
  8.  
  9.  
  10. Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
  11.  
  12. Config Lcd = 16 * 2
  13.  
  14. Cursor Off
  15.  
  16.  
  17. Config Scl = Portc.0                                        ' we need to provide the SCL pin name
  18. Config Sda = Portc.1                                        ' we need to provide the SDA pin name
  19.  
  20.  
  21. Dim Sekundy As Byte : Dim Minuty As Byte : Dim Godziny As Byte
  22. Dim Dzien As Byte : Dim Miesiac As Byte
  23. Dim Rok As Byte : Dim Dzien_tygodnia As Byte
  24. Sekundy = 0
  25. Minuty = 0
  26. Godziny = 0
  27.  
  28.  
  29. Do
  30.  
  31. I2cstart
  32.   I2cwbyte 160
  33.   I2cwbyte 2
  34.   I2cstart
  35.   I2cwbyte 161
  36.   I2crbyte Sekundy , Ack
  37.   I2crbyte Minuty , Ack
  38.   I2crbyte Godziny , Ack
  39.   I2crbyte Dzien , Ack
  40.   I2crbyte Miesiac , Nack
  41.   I2cstop
  42.  
  43. Sekundy = Makedec(sekundy)
  44. Minuty = Makedec(minuty)
  45. Godziny = Makedec(godziny)
  46.  
  47.  
  48. Rok = Dzien
  49. Shift Rok , Right , 6
  50. Rok = Makedec(rok)
  51. Dzien.7 = 0 : Dzien.6 = 0
  52. Dzien = Makedec(dzien)
  53. Dzien_tygodnia = Miesiac
  54. Shift Dzien_tygodnia , Right , 5
  55. Dzien_tygodnia = Makedec(dzien_tygodnia)
  56. Miesiac.7 = 0 : Miesiac.6 = 0 : Miesiac.5 = 0
  57. Miesiac = Makedec(miesiac)
  58.  
  59. Cls
  60. Lcd "Godzina: " ; Godziny ; ":" ; Minuty ; ":" ; Sekundy
  61. Lowerline
  62. Lcd "Data: " ; Dzien ; "-" ; Miesiac ; "-" ; Rok ; " : " ; Dzien_tygodnia
  63. Wait 1
  64.  
  65. Loop : End
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Pcf8583 RTC Pomoc z obsługą

Post autor: niveasoft » 16 mar 2017, 0:30

Okay. Procesor kręci się 8 milionów taktów na sekundę. Potrafi obrobić osiem milionów operacji na sekune. A co robi teraz...
Odczytuje wszystkie dane z RTC po czym czyści LCD i wyświetla łaskawie dane o czasie i dacie.

Potem czeka Wait 1 marnując czas i prąd. Po czym zaczyna od nowa.

Chciałbym byś pomyślał co może zrobić przez taka sekundę jeśli wcześniej napisałem że osiem milionów operacji (prawie bo niektóre wymagają więcej cykli)

Chodzi mi o to, że w tym wypadku warto dodać zmienną "Poprzednia_sekunda" i niech na razie on sobie odczytuje to ile razy chce, ale tylko jak nowa sekunda różni się od starej to CLS i wyświetl.
Ma to sens taki że, po co wyświetlac kilka razy na sekunde czas jak nic się nie zmieniło.
Wyświetl wtedy jak coś się zmieniło.
Wait 1 jest wtedy niepotrzebne bo na LCD wynik zmieni się tylko jeśli zmieni się sekunda.
  1. If Poprzednia_sec <> _sec Then
  2.  Poprzednia_sec = _sec
  3.  Cls
  4. Lcd "Godzina: " ; Godziny ; ":" ; Minuty ; ":" ; Sekundy
  5. Lowerline
  6. Lcd "Data: " ; Dzien ; "-" ; Miesiac ; "-" ; Rok ; " : " ; Dzien_tygodnia
  7. End If
  8.  
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: Pcf8583 RTC Pomoc z obsługą

Post autor: kulamario » 16 mar 2017, 0:55

Dodaje poprawiony kod
  1. $regfile = "m16def.dat"
  2. $crystal = 8000000
  3. $hwstack = 80
  4. $swstack = 80
  5. $framesize = 80
  6.  
  7.  
  8. Config Submode = New
  9.  
  10.  
  11. Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
  12.  
  13. Config Lcd = 16 * 2
  14.  
  15. Cursor Off
  16.  
  17. '------------------------------------------------------------------------------------------------------
  18.  
  19. Config Scl = Portc.0                                        ' we need to provide the SCL pin name
  20. Config Sda = Portc.1                                        ' we need to provide the SDA pin name
  21.  
  22.  
  23. Dim Sekundy As Byte : Dim Minuty As Byte : Dim Godziny As Byte : Dim Poprzednia_sec as Byte
  24. Dim Dzien As Byte : Dim Miesiac As Byte
  25. Dim Rok As Byte : Dim Dzien_tygodnia As Byte
  26. Sekundy = 0
  27. Minuty = 0
  28. Godziny = 0
  29.  
  30. Declare sub read_pcf()
  31.  
  32. '------------------------------------------------------------------------------------------------------
  33.  
  34. '------------------------------------------------------------------------------------------------------
  35.  
  36. Sub read_pcf
  37.  
  38.  
  39. I2cstart
  40.   I2cwbyte 160
  41.   I2cwbyte 2
  42.   I2cstart
  43.   I2cwbyte 161
  44.   I2crbyte Sekundy , Ack
  45.   I2crbyte Minuty , Ack
  46.   I2crbyte Godziny , Ack
  47.   I2crbyte Dzien , Ack
  48.   I2crbyte Miesiac , Nack
  49.   I2cstop
  50.  
  51. Sekundy = Makedec(sekundy)
  52. Minuty = Makedec(minuty)
  53. Godziny = Makedec(godziny)
  54.  
  55. Rok = Dzien
  56. Shift Rok , Right , 6
  57. Rok = Makedec(rok)
  58. Dzien.7 = 0 : Dzien.6 = 0
  59. Dzien = Makedec(dzien)
  60. Dzien_tygodnia = Miesiac
  61. Shift Dzien_tygodnia , Right , 5
  62. Dzien_tygodnia = Makedec(dzien_tygodnia)
  63. Miesiac.7 = 0 : Miesiac.6 = 0 : Miesiac.5 = 0
  64. Miesiac = Makedec(miesiac)
  65.  
  66. End sub
  67.  
  68. '------------------------------------------------------------------------------------------------------
  69.  
  70.  
  71. Do
  72.  
  73. Call  read_pcf()
  74.  
  75.  
  76. If Poprzednia_sec <> sekundy Then
  77. Poprzednia_sec = sekundy
  78. Cls
  79. Lcd "Godzina: " ; Godziny ; ":" ; Minuty ; ":" ; Sekundy
  80. Lowerline
  81. Lcd "Data: " ; Dzien ; "-" ; Miesiac ; "-" ; Rok ; " : " ; Dzien_tygodnia
  82.  
  83. end if
  84.  
  85. Loop : End
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Pcf8583 RTC Pomoc z obsługą

Post autor: niveasoft » 16 mar 2017, 1:02

No i gitara. A teraz chciałbym przekazać kilka tipów :P
Kiedy wszystkie instrukcje są przyklejone do lewej krawędzi edytora i moim zdaniem wygląda to "żadnie" - wybaczcie śląskie słowo - :D można użyc funkcji Bascoma. U góry Edit ->Proper Ident poukłada ładnie kod ;)

Rzecz dla tych co kopią w cudzych kodach to CTRL+SHIFT+I albo CTRL+SHIFT+U -> zaznaczasz kod i ta kombinacja przesuwa go w lewo albo prawo.
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: Pcf8583 RTC Pomoc z obsługą

Post autor: kulamario » 16 mar 2017, 2:22

Dodaje szkielet przycisków do ustawienia czasu i daty ale nie wiem jak to dalej rozwiązać na razie trzema przyciskami mogę wejść do trzech pod programów i tam dla testu wyświetlam sobie napis na LCD
Wymyśliłem sobie ze datę i godzinę będziemy ustawiać trzema przyciskami góra dól i enter
a wiec tak jeśli przytrzymamy enter wejdziemy w ustawienia godziny gdzie przyciskiem góra dól będziemy mogli zwiększyć lub zmniejszyć wartość naciśniecie przycisku enter przeniesie nas do minut gdzie tez będziemy mogli zmienić wartość i tak aż do roku ponowne długie przyciśniecie przycisku enter zapamięta nasze ustawienia


  1. $regfile = "m16def.dat"
  2. $crystal = 8000000
  3. $hwstack = 80
  4. $swstack = 80
  5. $framesize = 80
  6.  
  7.  
  8. Config Submode = New
  9.  
  10.  
  11. Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
  12.  
  13. Config Lcd = 16 * 2
  14.  
  15. Cursor Off
  16.  
  17. '------------------------------------------------------------------------------------------------------
  18.  
  19. Config Scl = Portc.0                                        ' we need to provide the SCL pin name
  20. Config Sda = Portc.1                                        ' we need to provide the SDA pin name
  21.  
  22.  
  23. Dim Sekundy As Byte : Dim Minuty As Byte : Dim Godziny As Byte : Dim Poprzednia_sec as Byte
  24. Dim Dzien As Byte : Dim Miesiac As Byte
  25. Dim Rok As Byte : Dim Dzien_tygodnia As Byte
  26. Sekundy = 0
  27. Minuty = 0
  28. Godziny = 0
  29.  
  30. Declare sub Read_pcf()
  31.  
  32. '------------------------------------------------------------------------------------------------------
  33.  
  34.  
  35. Config PINb.0 = Input 'UP
  36. Config PINb.1 = Input 'DOWN
  37. Config PINb.2 = Input 'ENTER
  38.  
  39.  
  40. set pinb.0
  41. set pinb.1
  42. set pinb.2
  43.  
  44.  
  45. Declare sub upsub()
  46. Declare sub downsub()
  47. Declare sub entersub()
  48.  
  49. '------------------------------------------------------------------------------------------------------
  50.  
  51. Sub read_pcf
  52.  
  53.  
  54.    I2cstart
  55.    I2cwbyte 160
  56.    I2cwbyte 2
  57.    I2cstart
  58.    I2cwbyte 161
  59.    I2crbyte Sekundy , Ack
  60.    I2crbyte Minuty , Ack
  61.    I2crbyte Godziny , Ack
  62.    I2crbyte Dzien , Ack
  63.    I2crbyte Miesiac , Nack
  64.    I2cstop
  65.  
  66.    Sekundy = Makedec(sekundy)
  67.    Minuty = Makedec(minuty)
  68.    Godziny = Makedec(godziny)
  69.  
  70.    Rok = Dzien
  71.    Shift Rok , Right , 6
  72.    Rok = Makedec(rok)
  73.    Dzien.7 = 0 : Dzien.6 = 0
  74.    Dzien = Makedec(dzien)
  75.    Dzien_tygodnia = Miesiac
  76.    Shift Dzien_tygodnia , Right , 5
  77.    Dzien_tygodnia = Makedec(dzien_tygodnia)
  78.    Miesiac.7 = 0 : Miesiac.6 = 0 : Miesiac.5 = 0
  79.    Miesiac = Makedec(miesiac)
  80.  
  81.  
  82. End sub
  83.  
  84. '------------------------------------------------------------------------------------------------------
  85.  
  86. Sub upsub
  87.  
  88.  
  89. cls
  90. lcd "    !!!UP!!!    "
  91. wait 1
  92.  
  93.  
  94. end sub
  95.  
  96. '------------------------------------------------------------------------------------------------------
  97.  
  98.  
  99. sub downsub
  100.  
  101. cls
  102. lcd "   !!!DOWN!!!   "
  103. wait 1
  104.  
  105.  
  106. end sub
  107.  
  108. sub entersub
  109.  
  110. cls
  111. lcd "   !!!ENTER!!!  "
  112. wait 1
  113.  
  114.  
  115. end sub
  116.  
  117.  
  118.  
  119. '------------------------------------------------------------------------------------------------------
  120.  
  121.  
  122. Do
  123.  
  124.    Call  Read_pcf()
  125.  
  126.    If Poprzednia_sec <> sekundy Then
  127.       Poprzednia_sec = sekundy
  128.  
  129.  
  130.       Cls
  131.       Lcd "Godzina: " ; Godziny ; ":" ; Minuty ; ":" ; Sekundy
  132.       Lowerline
  133.       Lcd "Data: " ; Dzien ; "-" ; Miesiac ; "-" ; Rok ; " : " ; Dzien_tygodnia
  134.  
  135.    'End if
  136.  
  137.  
  138.  
  139.    If pinb.0 = 0 then
  140.  
  141.    call upsub
  142.  
  143.    end if
  144.  
  145.    If pinb.1 = 0 then
  146.  
  147.    call downsub
  148.  
  149.    end if
  150.  
  151.    If pinb.2 = 0 then
  152.  
  153.    call entersub
  154.  
  155.    end if
  156.  
  157.  
  158.  
  159.  
  160.    end if
  161.  
  162.  
  163. Loop : End
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Pcf8583 RTC Pomoc z obsługą

Post autor: pimowo » 16 mar 2017, 13:19

A czy tak samo prosto można użyć DS1307 i/lub DS3231?
Awatar użytkownika
Pikczu
Posty: 399
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Pcf8583 RTC Pomoc z obsługą

Post autor: Pikczu » 16 mar 2017, 19:09

Nawet prościej zwłaszcza że gotowe biblioteki są w dziale BIBLIOTEKI
Trzeba tylko ściągnąć plik do 1307 i rozpakować.
ODPOWIEDZ