Pcf8583 RTC Pomoc z obsługą
- kulamario
- Posty: 207
- Rejestracja: 17 sie 2015, 20:05
- Lokalizacja: Greystones
- Kontakt:
Pcf8583 RTC Pomoc z obsługą
Witam
Czy był by ktoś w stanie wytłumaczyć mi jak obsługiwać zegar Pcf8583 może ma ktoś jakąś bibliotekę
Czy był by ktoś w stanie wytłumaczyć mi jak obsługiwać zegar Pcf8583 może ma ktoś jakąś bibliotekę
- pimowo
- Posty: 392
- Rejestracja: 28 maja 2016, 10:07
- niveasoft
- Posty: 1313
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Pcf8583 RTC Pomoc z obsługą
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
Czyli odczyt Zmienna = Time$ a zapis Time$ = "czas:czas:czas"
Można tak odczytać i zapisać datę Date$= "01/01/17" pierwszy stycznia 2017
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
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ć.
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
Czyli odczyt Zmienna = Time$ a zapis Time$ = "czas:czas:czas"
Można tak odczytać i zapisać datę Date$= "01/01/17" pierwszy stycznia 2017
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
Tak w ogóle to na temat tego zegarka wiem dużo więcej. Jakby coś było niejasne to wystarczy zapytać.
- kulamario
- Posty: 207
- Rejestracja: 17 sie 2015, 20:05
- Lokalizacja: Greystones
- Kontakt:
Re: Pcf8583 RTC Pomoc z obsługą
Kod w sumie mam który startuje razem z RTC ale jak dopisac do tego ustawienia godziny daty itd
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m16def.dat"
- $crystal = 8000000
- $hwstack = 80
- $swstack = 80
- $framesize = 80
- Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
- Config Lcd = 16 * 2
- Cursor Off
- Config Scl = Portc.0 ' we need to provide the SCL pin name
- Config Sda = Portc.1 ' we need to provide the SDA pin name
- Dim Sekundy As Byte : Dim Minuty As Byte : Dim Godziny As Byte
- Dim Dzien As Byte : Dim Miesiac As Byte
- Dim Rok As Byte : Dim Dzien_tygodnia As Byte
- Sekundy = 0
- Minuty = 0
- Godziny = 0
- Do
- I2cstart
- I2cwbyte 160
- I2cwbyte 2
- I2cstart
- I2cwbyte 161
- I2crbyte Sekundy , Ack
- I2crbyte Minuty , Ack
- I2crbyte Godziny , Ack
- I2crbyte Dzien , Ack
- I2crbyte Miesiac , Nack
- I2cstop
- Sekundy = Makedec(sekundy)
- Minuty = Makedec(minuty)
- Godziny = Makedec(godziny)
- Rok = Dzien
- Shift Rok , Right , 6
- Rok = Makedec(rok)
- Dzien.7 = 0 : Dzien.6 = 0
- Dzien = Makedec(dzien)
- Dzien_tygodnia = Miesiac
- Shift Dzien_tygodnia , Right , 5
- Dzien_tygodnia = Makedec(dzien_tygodnia)
- Miesiac.7 = 0 : Miesiac.6 = 0 : Miesiac.5 = 0
- Miesiac = Makedec(miesiac)
- Cls
- Lcd "Godzina: " ; Godziny ; ":" ; Minuty ; ":" ; Sekundy
- Lowerline
- Lcd "Data: " ; Dzien ; "-" ; Miesiac ; "-" ; Rok ; " : " ; Dzien_tygodnia
- Wait 1
- Loop : End
- niveasoft
- Posty: 1313
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Pcf8583 RTC Pomoc z obsługą
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.
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.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- If Poprzednia_sec <> _sec Then
- Poprzednia_sec = _sec
- Cls
- Lcd "Godzina: " ; Godziny ; ":" ; Minuty ; ":" ; Sekundy
- Lowerline
- Lcd "Data: " ; Dzien ; "-" ; Miesiac ; "-" ; Rok ; " : " ; Dzien_tygodnia
- End If
- kulamario
- Posty: 207
- Rejestracja: 17 sie 2015, 20:05
- Lokalizacja: Greystones
- Kontakt:
Re: Pcf8583 RTC Pomoc z obsługą
Dodaje poprawiony kod
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m16def.dat"
- $crystal = 8000000
- $hwstack = 80
- $swstack = 80
- $framesize = 80
- Config Submode = New
- Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
- Config Lcd = 16 * 2
- Cursor Off
- '------------------------------------------------------------------------------------------------------
- Config Scl = Portc.0 ' we need to provide the SCL pin name
- Config Sda = Portc.1 ' we need to provide the SDA pin name
- Dim Sekundy As Byte : Dim Minuty As Byte : Dim Godziny As Byte : Dim Poprzednia_sec as Byte
- Dim Dzien As Byte : Dim Miesiac As Byte
- Dim Rok As Byte : Dim Dzien_tygodnia As Byte
- Sekundy = 0
- Minuty = 0
- Godziny = 0
- Declare sub read_pcf()
- '------------------------------------------------------------------------------------------------------
- '------------------------------------------------------------------------------------------------------
- Sub read_pcf
- I2cstart
- I2cwbyte 160
- I2cwbyte 2
- I2cstart
- I2cwbyte 161
- I2crbyte Sekundy , Ack
- I2crbyte Minuty , Ack
- I2crbyte Godziny , Ack
- I2crbyte Dzien , Ack
- I2crbyte Miesiac , Nack
- I2cstop
- Sekundy = Makedec(sekundy)
- Minuty = Makedec(minuty)
- Godziny = Makedec(godziny)
- Rok = Dzien
- Shift Rok , Right , 6
- Rok = Makedec(rok)
- Dzien.7 = 0 : Dzien.6 = 0
- Dzien = Makedec(dzien)
- Dzien_tygodnia = Miesiac
- Shift Dzien_tygodnia , Right , 5
- Dzien_tygodnia = Makedec(dzien_tygodnia)
- Miesiac.7 = 0 : Miesiac.6 = 0 : Miesiac.5 = 0
- Miesiac = Makedec(miesiac)
- End sub
- '------------------------------------------------------------------------------------------------------
- Do
- Call read_pcf()
- If Poprzednia_sec <> sekundy Then
- Poprzednia_sec = sekundy
- Cls
- Lcd "Godzina: " ; Godziny ; ":" ; Minuty ; ":" ; Sekundy
- Lowerline
- Lcd "Data: " ; Dzien ; "-" ; Miesiac ; "-" ; Rok ; " : " ; Dzien_tygodnia
- end if
- Loop : End
- niveasoft
- Posty: 1313
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Pcf8583 RTC Pomoc z obsługą
No i gitara. A teraz chciałbym przekazać kilka tipów 
Kiedy wszystkie instrukcje są przyklejone do lewej krawędzi edytora i moim zdaniem wygląda to "żadnie" - wybaczcie śląskie słowo -
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.
Kiedy wszystkie instrukcje są przyklejone do lewej krawędzi edytora i moim zdaniem wygląda to "żadnie" - wybaczcie śląskie słowo -
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.
- kulamario
- Posty: 207
- Rejestracja: 17 sie 2015, 20:05
- Lokalizacja: Greystones
- Kontakt:
Re: Pcf8583 RTC Pomoc z obsługą
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
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
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m16def.dat"
- $crystal = 8000000
- $hwstack = 80
- $swstack = 80
- $framesize = 80
- Config Submode = New
- Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
- Config Lcd = 16 * 2
- Cursor Off
- '------------------------------------------------------------------------------------------------------
- Config Scl = Portc.0 ' we need to provide the SCL pin name
- Config Sda = Portc.1 ' we need to provide the SDA pin name
- Dim Sekundy As Byte : Dim Minuty As Byte : Dim Godziny As Byte : Dim Poprzednia_sec as Byte
- Dim Dzien As Byte : Dim Miesiac As Byte
- Dim Rok As Byte : Dim Dzien_tygodnia As Byte
- Sekundy = 0
- Minuty = 0
- Godziny = 0
- Declare sub Read_pcf()
- '------------------------------------------------------------------------------------------------------
- Config PINb.0 = Input 'UP
- Config PINb.1 = Input 'DOWN
- Config PINb.2 = Input 'ENTER
- set pinb.0
- set pinb.1
- set pinb.2
- Declare sub upsub()
- Declare sub downsub()
- Declare sub entersub()
- '------------------------------------------------------------------------------------------------------
- Sub read_pcf
- I2cstart
- I2cwbyte 160
- I2cwbyte 2
- I2cstart
- I2cwbyte 161
- I2crbyte Sekundy , Ack
- I2crbyte Minuty , Ack
- I2crbyte Godziny , Ack
- I2crbyte Dzien , Ack
- I2crbyte Miesiac , Nack
- I2cstop
- Sekundy = Makedec(sekundy)
- Minuty = Makedec(minuty)
- Godziny = Makedec(godziny)
- Rok = Dzien
- Shift Rok , Right , 6
- Rok = Makedec(rok)
- Dzien.7 = 0 : Dzien.6 = 0
- Dzien = Makedec(dzien)
- Dzien_tygodnia = Miesiac
- Shift Dzien_tygodnia , Right , 5
- Dzien_tygodnia = Makedec(dzien_tygodnia)
- Miesiac.7 = 0 : Miesiac.6 = 0 : Miesiac.5 = 0
- Miesiac = Makedec(miesiac)
- End sub
- '------------------------------------------------------------------------------------------------------
- Sub upsub
- cls
- lcd " !!!UP!!! "
- wait 1
- end sub
- '------------------------------------------------------------------------------------------------------
- sub downsub
- cls
- lcd " !!!DOWN!!! "
- wait 1
- end sub
- sub entersub
- cls
- lcd " !!!ENTER!!! "
- wait 1
- end sub
- '------------------------------------------------------------------------------------------------------
- Do
- Call Read_pcf()
- If Poprzednia_sec <> sekundy Then
- Poprzednia_sec = sekundy
- Cls
- Lcd "Godzina: " ; Godziny ; ":" ; Minuty ; ":" ; Sekundy
- Lowerline
- Lcd "Data: " ; Dzien ; "-" ; Miesiac ; "-" ; Rok ; " : " ; Dzien_tygodnia
- 'End if
- If pinb.0 = 0 then
- call upsub
- end if
- If pinb.1 = 0 then
- call downsub
- end if
- If pinb.2 = 0 then
- call entersub
- end if
- end if
- Loop : End
- pimowo
- Posty: 392
- Rejestracja: 28 maja 2016, 10:07
Re: Pcf8583 RTC Pomoc z obsługą
A czy tak samo prosto można użyć DS1307 i/lub DS3231?
- Pikczu
- Posty: 399
- Rejestracja: 17 sie 2015, 13:46
- Lokalizacja: Dublin, Ireland
- Kontakt:
Re: Pcf8583 RTC Pomoc z obsługą
Nawet prościej zwłaszcza że gotowe biblioteki są w dziale BIBLIOTEKI
Trzeba tylko ściągnąć plik do 1307 i rozpakować.
Trzeba tylko ściągnąć plik do 1307 i rozpakować.
