Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 22 sty 2026, o 18:34


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 26 wrz 2016, o 19:39 
Offline
Nowy

Dołączył(a): 30 lip 2016
Posty: 16
Pomógł: 0

Witam,

mam problem z ustawieniem alarmu w module DS3231. Chciałem, aby wyzwalał alarm przy zgodnej godzinie, minucie i sekundzie. Wg aplikacji, a przynajmniej to co z niej wyczytałem i zrozumiałem interesuje mnie Alarm1. Ustawiłem więc poszczególne bity:

07h: A1M1=0;
08h: A1M2=0;
09h: A1M3=0;
0ah: A1M4=1;
0eh: INTCN=1, A1IE=1

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Poprawność wpisanych wartości do bitów sprawdziłem empirycznie i są ok. Komunikacja I2C na 100% poprawna. Zrobiłem jeszcze taki myk, że odczytałem godzinę z zegara i na sztywno wpisałem ją do alarmu + 5 sek, tak żeby być pewnym, że rejestry godzin i alarmu będą identyczne. Niestety wyjście INT/SQW jak zaczarowane, nie chce wysłać impulsu alarmu. Zmieniłem także maski alarmu tak, aby dawał sygnał co sekundę (A1M1,A1M2,A1M3,A1M4=1) i też nic. Sprawdziłem także bit A1F i o dziwo był cały czas w stanie 1. Natomiast jeśli ustawię bit INTCN=0, RS1=0, RS2=0, wówczas na wyjściu SQW pokazał się sygnał 1Hz, z 50% wypełnieniem. Czyli tak jak powinno być. Już nie wiem, jak mógłbym jeszcze sprawdzić gdzie jest błąd. Skończyły mi się pomysły. Jakby ktoś wiedział jak ustawić tan cholerny alarm, będę wdzięczny.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2016, o 21:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 582
Pomógł: 17

Zrob cos tkaiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i odczytaj potem rejestr:
który jest pod adresem 0Fh i podaj jego wartość i sprawdź sygnał na nodze INT/SQW
i czy masz resystor podciągający podłączony do tego pinu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2016, o 22:39 
Offline
Nowy

Dołączył(a): 30 lip 2016
Posty: 16
Pomógł: 0

Przekopiowałem, odczytałem.
Rejestr pod adresem 0Fh: 0b00000011; Wartość ta utrzymuje się cały czas. Nie rozumiem dlaczego, a przede wszystkim skąd 1 na A2F.
Sygnał na nodze INT/SQW=0, na stałe stan niski.
Rezystor podciągający do INT/SQW? Jest to wyjście, poza tym dla 1Hz, dioda się zapala. Nie dawałem rezystora.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2016, o 22:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 582
Pomógł: 17

Z tego co wycztałem MUSI byc tam rezystor podciągający!
nawet na 1stronie masz schemat
https://datasheets.maximintegrated.com/en/ds/DS3231.pdf
na 9 stornie opis:
Active-Low Interrupt or Square-Wave Output. This open-drain pin requires an external pullup resistor connected
to a supply at 5.5V or less.

------------------------ [ Dodano po: 2 minutach ]

tak samo
RESET I ten sygnał 32khz powinien być podciągnięty



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2016, o 23:23 
Offline
Nowy

Dołączył(a): 30 lip 2016
Posty: 16
Pomógł: 0

Faktycznie, nie zwróciłem uwagi. Podciągnąłem, jednak nie rozwiązało to problemu. Spróbuję jeszcze napisać program tylko do obsług rtc i zobaczę czy występuje ten sam problem, bo obecnie jest to fragment większej całości.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2016, o 12:29 
Offline
Nowy

Dołączył(a): 30 lip 2016
Posty: 16
Pomógł: 0

OK, napisałem program, minimalistyczny, tylko do obsługi RTC. Co ciekawe. NIE DZIAŁA. Komunikacja jest, bo ustawienie bajtu 0Eh w stan 0b00000000 wyzwala przerwanie 1Hz, natomiast ustawienie bitów alarmu, tak jak w kodzie poniżej powinno wyzwolić alarm co sekundę jednak tak się nie dzieje. A kod różni się przecież tylko zmianą dwóch bitów.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: 11 minutach ]

Sprawdziłem jeszcze raz stan bajtu 0Fh w taki sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i dioda się zapaliła, czyli bez zmian 0Fh=0b00000011 :/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2016, o 18:24 
Offline
Nowy

Dołączył(a): 30 lip 2016
Posty: 16
Pomógł: 0

Powróciłem do problemu sprzed pół roku i znalazłem rozwiązanie. Może komuś się przyda.
Do tego co napisałem powyżej, trzeba jeszcze ustawić bajt 0fh, przypisać mu wartość 0. Okazuje się bowiem, że należący do niego bit A1F musi być wezerowany i dopiero wówczas wyzwoli przerwanie z SQW. Po każdym przerwaniu bit ten trzeba zerować ręcznie. Poprawną inicjalizację przedstawiam poniżej:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO