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



Teraz jest 5 cze 2026, o 22:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 23 ] 
Autor Wiadomość
PostNapisane: 26 maja 2014, o 16:15 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Witam serdecznie forumowiczów.
Temat konfigurowania liczników, obsługi przerwań i inne podstawy mam już za sobą, więc postanowiłem zabrać się za swoją pierwszą w życiu komunikację i wymianę danych. Na początek wybrałem I2C(TWI) i jeden z popularnych układów RTC (PCF8583, ponieważ jest wspierany przez bluebooka)
Moim celem jest zegar czasu rzeczywistego pokazujący czas na 4 wyświetlaczach 7-segmentowych. gg-mm i między nimi 2 diody led, sygnalizujące odmierzoną sekundę.

Koncepcja jest taka:
- moduł RTC z podtrzymaniem bateryjnym (CR2032) wpinany w główną płytę sterującą
- płytka z 4 wyświetlaczami wpinana 11 goldpinami prostopadle do głównej płyty sterującej
- miganie diod LED w przerwaniu zewnętrznym od układu RTC
- całość zasilana zasilaczem sieciowym o napięciu wyjściowym 9V
- przezroczysta obudowa z plexi
- układ ma być prezentem dla teścia więc w razie problemów liczę na waszą pomoc :)

Narazie zrobiłem schemat i czekam na przesyłkę z częściami. Będę sukcesywnie opisywał postępy prac w tym temacie.
Proszę o sprawdzenie poprawności schematu i trzymajcie kciuki.
Załącznik:
Zegarek.pdf


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2014, o 16:28 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

Bardzo fajny projekcik, schemat wydaje się ok, dorzuciłbym tak z czystej upierdliwści kondek 100nF przed 7805 i dał elektrolita za nim 100uF. ale myślę że tak jak teraz jest będzie też bardzo fajnie działać:) czekamy na efekty;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2014, o 21:52 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Jeśli mógłbym Ci coś zasugerować, to rozważ zmianę PCF-a na DS3231. Pod tym adresem http://mirekk36.blogspot.com/2013/11/rt ... ek-na.html znajdziesz poradnik Mirka gdzie dokładnie opisuje ten układ, również od strony programowej.
Piszę o tym dlatego że sam zbudowałem sobie zegarek na PCF-ie i zaczyna mnie on powoli wkurzać. A to ze względu na "spóźnianie się" lub "spieszenie". Ja wiem że Mirek wielokrotnie wspominał o tym iż takie zachowanie PCF-a jest raczej normalne i że w np rocznym rozliczeniu czasu ;) te "spóźnienia" i "spieszenia" w sumie wyjdą na zero. Jednak gdy ma się zegarek przed oczami a poniżej pasek w TV gdzie też jest godzina wyświetlana i widzi człowiek np trzy minuty różnicy w jedną lub drugą stronę, no to trochę to drażni ;) Oczywiście to jest akurat w moim przypadku maksymalna różnica jak się pojawiła, najczęściej jet to około 1,5 minuty no ale nie zmienia to faktu że kłuje to w oczy ;)
No ale to tylko taka luźna sugestia, co by później teść Ci nie wypominał jak się spóźni na autobus ;) :)

_________________
http://www.marcingibas.pl



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

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
.... i te rezystory 100R dla diod "sekundowych" mogą być za małe - będzie dawało :) .

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2014, o 23:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Rozważ, na płytce modułu z RTC, dodanie trymera w obwodzie rezonatora. Możesz go potrzebować do regulacji +/-.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 07:45 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Cytuj:
.... i te rezystory 100R dla diod "sekundowych" mogą być za małe - będzie dawało


Zarówno dla tych sekundowych jak i ledów wyświetlacza R = 400 na schemacie ;) Narazie to tylko suchy schemat, nic nie zmontowane. Właściwy opór dobiorę przy montażu aby uzyskać porządaną jasność.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 16:05 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

Demooon napisał(a):
R = 400


400 będzie ok ale pomyśl o dodaniu jakiejś regulacj:) czasem w słoneczny dzień może kiepsko być widać, przynajmniej jak kupowałem ostatnio czerwone wyświetlacze i sobie zrobiłem taką regulację;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 20:36 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Korzystając z wolnej chwili w trakcie czekania na przesyłkę z częściami zrobiłem główny moduł wyświetlacza który wpinany będzie w główną płytę. Na płytce same połączenia, wszystkie opory będą na głównej. W późniejszej fazie planuję zrobić czarną nakładkę na równi z wyświetlaczami aby tylko je było widać.

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2014, o 14:35 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Ok. Trochę to odwlekłem ze względu na nakład uczelnianych obowiązków ale w końcu ruszyłem.
Układ działa, zarówno zapisanie wartości do rejestrów, odczyt tych rejestrów jak i prawidłowe ich wyświetlenie.
Udało mi się nawet ustawić przerwania równo co 1s według noty PCFa.
Teraz czas na testy i udoskonalanie kodu a następnie budowa wspomnianej obudowy. Główna koncepcja została spełniona.

Jeśli ktoś miałby jakieś koncepcje, poprawki co do kodu bardzo proszę o sugestie.
Narazie w przerwaniu dioda zmienia swój stan co 1s, ma ktoś pomysł jak zrobić aby zapalała się i gasła ? Jak wiadomo wszelke delaye odpadają.

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



Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2014, o 15:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

A czemu nie używasz przerwania od PCFa jako sygnału do odczytania czasu ?
Bo teraz to wiedzę, że odczyt odbywa się w sposób ciągły.
No chyba że zależy Ci na odczycie setnych sekundy. Bo PCF rejestr z setnymi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2014, o 15:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

mam pomysł na diodę tz. aby zapalała
się przy różnuch zboczach sygnału na INT0

po wejściu do przerwania zmień reakcję przerwania na przeciwne zbocze
dzięki temu uzyskasz zmianę co pół sekundy
tylko nie wiem czy wypełnienie sygnału z PCF-a ma 50%
i dioda może nierówno mrugać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2014, o 16:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Ma idealnie 50% :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2014, o 16:11 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Ok, zadziałało. Jednak ustawiłem reakcję przerwania na obojętnie jakie zbocze na początku. W przerwaniu zostawiłem tylko zmianę stanu. Dzięki za wskazówkę.

Co do twojego pytania sq8dsr.
Chodzi ci o jednorazowe wpisanie danych do PCFa, a następnie korzystanie tylko z tego przerwania bez odczytu rejestrów ? w sensie w obsłudze przerwania inkrementować sekundy , jeśli większe od 60 inkrementować minuty itd. ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2014, o 16:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Nie, chodzi mi o to, że w Twoim kodzie dokonujesz nieustannych operacji odczytu z PCF przez magistralę I2C. Są one w pętli while.
W zależności od prędkości magistrali I2C te operacje będą się odbywać kilka tysięcy razy na sekundę.

Pomyśl czy nie lepiej jest odczyt czasu z PCF powiązać z przerwaniem INT0. Po co tysiące razy odczytywać z PCFa to samo. Przecież miedzy "tyknięciami" na INT nic się w jego rejestrach nie zmienia. Sygnał 1 Hz jest właśnie między innymi po to. Migać diodą można z samego PCFa, nie trzeba używać przerwania.

Chyba, że zależy Ci na odczycie setnych sekund. Wtedy należy częściej dokonywać odczytu. Ale z projektu nie wynika byś zamierzał ich używać.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2014, o 17:22 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Racja, przeniosłem funkcję odczytu do obsługi przerwania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2014, o 17:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Bardzo dobrze, ale można jeszcze lepiej. Tutaj akurat odczyt trwa bardzo krótko, ale mimo wszystko...
Można zrobić jeszcze inaczej:
Powołujemy do życia zmienną np:

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


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


W w pętli while(1):
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  
PostNapisane: 13 cze 2014, o 19:10 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Witam ponownie. Mam pewien problem z programem.
Po dodaniu trymera układ PCF spieszy, bardzo nieznacznie ale jednak :)

Chciałbym dodać do układu 2 przyciski dzięki którym będe mógł inkrementować lub dekrementować rejestr minut w układzie.
Po wcisnięciu przycisku jednak wyświetlają mi się liczby których natury nie potrafię zrozumieć.
Oto kod: bardzo proszę o jakąś wskazówkę / pomoc .

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  
PostNapisane: 14 cze 2014, o 14:45 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Ponawiam prośbę o pomoc ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 cze 2014, o 18:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Mógłbyś opisać dokładniej co Ci się
pojawia na wyświetlaczy po naciśnięciu
przycisku i czy zegar po zapisie
działa normalnie.

Pomijając oczywiście błędne wyświetlanie liczb



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2014, o 09:47 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Zegar po zapisie działa normalnie.
Trzymając przycisk cały czas wyświetlana liczba minut jedności przeskakuje prawidłowo, liczba minut dziesiątek wyświetla raz 9, raz 7 , ogólnie nie da się tego przewidzieć. jeśli puszczę przycisk i jedności i dziesiątki minut wyświetla 00, jeśli wcisne raz i puszczę to samo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2014, o 14:29 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Sam pomysł na odczytanie aktualnych minut, ich inkrementację i ponowne wysłanie jest prawidłowy ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2014, o 18:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Nigdy tego nie stosowałem ale
spróbuj wgrać malutki program testowy
wykorzystujący ten sposób i sprawdź czy działa
poprawnie.
Według mnie powinien ,nie widzę jakiegoś błędu
ale jak nie sprawdzisz w realu to nie będziesz miał
pewności.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 cze 2014, o 13:56 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Ok. Problem rozwiązałem samodzielnie.
Napisałem proste menu do nastawiania nie tylko minut, ale całego zegara za pomocą dwóch przycisków.
Po wejściu do menu, nie występuje żadna funkcja obsługująca komunikację TWI, i wyłączone są przerwania od PCFa, następnie w chwili zatwierdzania uC przerabia nastawione cyfry na kod bcd a następnie wysyła do odpowiednich rejestrów układu i wszystko działa jak należy :)



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: 23 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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