Witam
Jako, że mało jest informacji o obsłudze alarmu w układzie zegarowym PCF ( a PCF8563 to już wcale ), to sam spróbowałem coś podziałać.
Ustawienie parametrów alarmu przez podprogram Setalarm działa, można je później wyświetlić na LCD przy pomocy Getalarm i jest poprawnie wyświetlane
Niestety nie mogę sobie poradzić z aktywacją alarmu i z odczytem flagi alarmu.
Próbowałem coś takiego - reaguje na zrównanie czasu alarmu, ale wyświetla dziwne wartości.
Jako, że mało jest informacji o obsłudze alarmu w układzie zegarowym PCF ( a PCF8563 to już wcale ), to sam spróbowałem coś podziałać.
'*********************** Obsługa alarmu
Sub Getalarm()
I2cstart
I2cwbyte 162
I2cwbyte &H09
I2cstart
I2cwbyte 163
I2crbyte Al_mm , Ack 'Odczytuje minuty
I2crbyte Al_hh , Ack 'Odczytuje godziny
I2crbyte Al_dday , Ack 'Odczytuje dni
I2crbyte Al_wwk , Nack 'Odczytuje dzień tygodnia
I2cstop
Al_mm = Al_mm And &B01111111 'minuty
Al_hh = Al_hh And &B00111111 'godziny
Al_dday = Al_dday And &B00111111 'dni miesiąca
Al_wwk = Al_wwk And &B00000111 'dni tygodnia
Al_m = Makedec(al_mm) 'Zamiana kodu BCD na wartość dziesiętną
Al_h = Makedec(al_hh) 'Zamiana kodu BCD na wartość dziesiętną
Al_wk = Makedec(al_wwk) 'Zamiana kodu BCD na wartość dziesiętną
Al_day = Makedec(al_dday) 'Zamiana kodu BCD na wartość dziesiętną
'********************* Funkcja zamieniająca numer dnia tygodna na nazwę dnia
Dt1 = Makedec(al_wwk) 'numer dnia tygodnia dla lookupstr
Dt = Lookupstr(dt1 , Dzien_tyg )
Alarm_czas = Bcd(al_hh) + ":" + Bcd(al_mm) 'Tworzenie stringa z czasem
Alarm_data = Bcd(al_dday) + "/" + Dt 'Tworzenie stringa z datą
End Sub
'********************* Funkcja ustawiająca Alarm w PCF8563
Sub Setalarm
Al_mm = Makebcd(23) 'minuty
Al_hh = Makebcd(01) 'godziny
Al_dday = Makebcd(14) 'dni
Al_wwk = Makebcd(5) 'dni tygodnia
I2cstart 'warunek startu
I2cwbyte &HA2 'Adres zapisu
I2cwbyte 0 'select control register
I2cwbyte 8 'ustaw bit maskowania dni i roku
I2cstart 'powtórz warunek startu
I2cwbyte &HA2 'Adres zapisu
I2cwbyte 9 'wybór rejestru
I2cwbyte Al_mm 'zapis minut
I2cwbyte Al_hh 'zapis godzin
I2cwbyte Al_dday 'zapis dni
I2cwbyte Al_wwk 'zapis dni tygodnia
I2cstop
End Sub
Ustawienie parametrów alarmu przez podprogram Setalarm działa, można je później wyświetlić na LCD przy pomocy Getalarm i jest poprawnie wyświetlane
Niestety nie mogę sobie poradzić z aktywacją alarmu i z odczytem flagi alarmu.
Próbowałem coś takiego - reaguje na zrównanie czasu alarmu, ale wyświetla dziwne wartości.
'*********************** włączanie alarmu
Sub Active_alarm
Waitms 10
Al_active = 1
I2cstart 'warunek startu
I2cwbyte &HA2 'Adres zapisu
I2cwbyte 0 'select control register
I2cwbyte &B00001000 'ustaw bit maskowania
I2cstart 'powtórz warunek startu
I2cwbyte &HA2 'Adres zapisu
I2cwbyte 1 'wybór rejestru
I2cwbyte Al_active 'zapis minut
I2cstop
End Sub
'*********************** Obsługa odczytu flagi alarmu
Sub Flaga_alarm
I2cstart
I2cwbyte 162
I2cwbyte &H01
I2cstart
I2cwbyte 163
I2crbyte Al_flaga , Nack 'Odczytuje flagi alarmu
I2cstop
Al_flaga = Al_flaga And &B00001000
End Sub
