- pojemność licznika wynosi 999999 impulsów,
- maksymalna częstotliwość zliczania to kilka...kilkanaście kHz,
- komunikacja poprzez I²C,
- moduł jest wyposażony w baterię podtrzymującą działanie uniezależniającą proces zliczania od zasilania.
Moduł zawiera popularny układ zegara czasu rzeczywistego typu PCF8583, który oprócz odmierzenia czasu udostępnia tryb zliczania impulsów z zakresem do 999999 impulsów. Wybór trybu odbywa się programowo przez konfigurację odpowiednich rejestrów U2. Układ zlicza impulsy doprowadzone do wejścia OSCI. Maksymalna częstotliwość zliczania nie jest zbyt wysoka (rzędu kilku...kilkunastu kHz), ale wystarczy do wielu zastosowań.
Budowa i działanie
Schemat wewnętrzny modułu pokazano na rysunku 1. Układ U1 formuje zliczane impulsy pochodzące najczęściej z wyjścia stykowego zrealizowanego na kontaktronie (suchy styk) lub w postaci elektronicznej OC/OD. Dodatkowo zapewnia polaryzację podłączonego wyjścia i ochronę ESD licznika.
Moduł zasilany jest poprzez złącze magistrali I²C napięciem 5 V. Dodatkowo układ wyposażony jest w podtrzymanie zasilania z baterią LiSOCL2 typu 14250. Dioda D1 kluczuje źródła zasilania. Moduł pracuje poprawnie zasilany napięciem powyżej 3 V, przy niższych napięciach będzie pobierał prąd z baterii, której napięcie na początku pracy wynosi ok. 3,6 V i będzie wyższe od napięcia VDD. Pojemność baterii 14250 oscyluje w okolicach 0,9...1,2 Ah, co zapewnia kilkanaście miesięcy podtrzymania. Pobór prądu jest mniejszy od 10 μA przy rozwartym wejściu i ok. 50 μA przy zwartym.
Układ U2 pozwala po zliczeniu określonej ilości impulsów na generację przerwania na wyjściu INT typu OD dostępnym na złączu INT. Przerwanie może zostać wykorzystane do wybudzenia układu nadrzędnego, po określonej liczbie zliczonych impulsów, np. w celu zabezpieczenia przed przepełnieniem licznika. Złącza i moduł są zgodne ze standardem Grove.
Układ U2 ma możliwość wyboru dwóch adresów bazowych przy pomocy zwory ADR, co pozwala na niezależne zliczanie z dwóch źródeł impulsów. W przypadku konieczności obsługi większej ilości źródeł można wykorzystać opisane w EP multipleksery magistrali I²C lub układy przesunięcia adresu bazowego.
Montaż i uruchomienie
Moduł jest zmontowany na dwustronnej płytce drukowanej, której schemat został pokazany na rysunku 2. Sposób montażu jest klasyczny i nie wymaga opisu. W przypadku zastosowania baterii z zgrzanymi wyprowadzeniami można zrezygnować koszyka, ale należy zwrócić szczególną uwagę na to, aby nie zewrzeć jej wyprowadzeń podczas lutowania.
Przed włożeniem baterii w podstawkę należy ją depasywować szczególnie po dłuższym przechowywaniu. Depasywację przeprowadzamy za pomocą rezystora o wartości około 10 kΩ, mierząc napięcie wyjściowe ogniwa. Gdy jego wartość rośnie, zbliżając się do nominalnej (3,65 V) dla nowego ogniwa, oznacza to że odzyskało ono swoje własności. W przeciwnym wypadku ogniwo w krótkim czasie obniży swoje napięcie i spowoduje zakłócenia w działaniu układu.
Dla sprawdzenia modułu można użyć Raspberry Pi. Po podłączeniu modułu do zasilania 3,3 V i magistrali I²C wpisujemy polecenie: i2cdetect -y 1, które pozwoli sprawdzić obecność układu na magistrali (w modelu ustawiony adres 0x50, zwora ADR=0). Dla obsługi trybu zliczania konieczna jest konfiguracja PCF8583. Układ zawiera rejestr kontrolny pod adresem 0x00, w którym należy ustawić wartość 0x24, ustawiającą tryb zliczania i aktywująca wyjście alarmowe zgodnie z rysunkiem 3.
Zliczane impulsy dostępne są w rejestrach pod adresami 0x01, 0x02, 0x03. Wartości rejestrów zliczania warto skasować przed rozpoczęciem pracy układu poleceniami:
i2cset -y 1 0x50 0x02 0x00
i2cset -y 1 0x50 0x03 0x00
Odczyt i zapis wartości można sprawdzić zrzucając mapę rejestrów poleceniem:
co da w efekcie:
00: 26 02 01 00 00 01 01 00 90 05 00 00 ff ff ff ff
Aby skorzystać z generacji przerwań należy skonfigurować rejestr kontrolny alarmów 0x08, ustawiając w nim bity D7 i D4 zgodnie z rysunkiem 4, co można wykonać poleceniem:
Wartość do porównania z licznikiem zapisywana jest w rejestrach 0x09, 0x0A, 0x0B. Gdy zliczana wartość zrówna się z wartością alarmową zostanie ustawiony D1 w rejestrze konfiguracji 0x00 oraz wyjście int zostanie ustawione w stan niski. Kasowanie flagi przerwania odbywa się poprzez wyzerowanie bitu D1 w rejestrze konfiguracji. Przykładowo ustawiamy wartość 5 w rejestrach alarmowych:
i2cset -y 1 0x50 0x0a 0x00
i2cset -y 1 0x50 0x0b 0x00
kasujemy liczniki:
i2cset -y 1 0x50 0x02 0x00
i2cset -y 1 0x50 0x03 0x00
ustawiamy przerwanie:
generując impulsy (poprzez zwieranie wejścia ZI) sprawdzamy zachowanie się flagi D1 oraz generację przerwania poleceniem:
i otrzymamy:
00: 24 04 00 00 00 01 01 00 90 05 00 00 ff ff ff ff
a w kolejnym cyklu:
00: 26 05 00 00 00 01 01 00 90 05 00 00 ff ff ff ff
Pozostałe rejestry 0x0F...0xFF układu mogą być wykorzystane jako podtrzymywana pomięć RAM. Jeżeli wszystko działa poprawnie można układ zastosować we własnej aplikacji.
Adam Tatuś, EP
- R1, R2: 10 kΩ
- C1: 10 μF ceramiczny 10 V
- C2, C3: 0,1 μF ceramiczny 10 V
- D1: BAV170 dioda podwójna (SOT-23)
- U1: MAX6816EUS (SOT-143)
- U2: PCF8583T,115 (SO8_400)
- BAT: Bateria LiSOCL 14250 + oprawka PCB
- ZI: złącze DG381-3.5-2