(3 głosujących) Zegar Binarny tak jak każdy inny zegar służy do liczenia czasu. Wyświetlacz tego czasomierza jest dość nietypowy a mianowicie jest to sześć słupków po cztery diody led. Wskazują one aktualną godzinę w kodzie binarnym. Urządzenie pracuje w oparciu o mikrokontroler AT89C2051, który sam zajmuje się odmierzaniem upływającego czasu. Zegar posiada zasilanie bateryjne na czas zaniku napięcia sieci (wyświetlacz jest wtedy wyłączony). Do jego obsługi przewidziano trzy przyciski. Pozwalają one ustawić godziny, minuty i wyzerować sekundy, a także ustawić czas budzenia itp. (Przynajmniej takie było pierwotne założenie. Obecnie jest oprogramowany sam zegar).
Działanie:Na rysunku poniżej przedstawiono schemat Sterownika: Sercem układu jest mikrokontroler U1 (AT89C2051) wraz z rezonatorem kwarcowym X1 (12MHz), kondensatorami C4 (33pF) i C5 (33pF) oraz trymerem C6 (4...40pF). Za pomocą C6 można regulować częstotliwość pracy procesora aby była jak najbardziej zbliżona do 12MHz. Jest to związane z dokładnością pracy zegara. Złącze Zas (ARK) służy do podłączenia transformatora sieciowego (ok. 7-12 V). Napięcie przemienne jest prostowane w mostku Br1 (1A) a następnie filtrowane za pomocą C0 (1000uF) oraz stabilizowane do wartości 5V za pomocą układu U2 (7805). Kondensator C2 (22uF) współpracuje ze stabilizatorem scalonym U2. Diody D1 (1N4007) oraz D2 (1N4007) tworzą obwód zasilania awaryjnego. Podczas normalnej pracy dioda D2 spolaryzowana jest w kierunku zaporowym i prąd z baterii rezerwowej nie jest pobierany. Gdy napięcie na stabilizatorze spadnie poniżej napięcia baterii to dioda D1 zostanie spolaryzowana zaporowo a mikrokontroler będzie zasilany ze źródła awaryjnego. Do podłączenia wspomnianej baterii służy złącze Bat (ARK). Jej napięcie nie może być większe niż 5V.(mogą być 2 lub 3 "paluszki") Dodatkową filtrację napięcia zasilającego zapewnia kondensator C3 (22uF). Rezystor R1 (10k) wymusza stan niski na nożce resetu mikrokontrolera i wraz z przyciskiem Sr (uSwitch) służy do jego resetowania. Elementy R2 (100k) i R3 (20k) wraz z tranzystorem T0 (BC547) stanowi obwód detekcji zaniku napięcia zasilającego. Podczas normalnej pracy T0 jest otwarty i na nóżce P1.4 kostki U1 panuje stan niski. Zanik napięcia zasilania objawia się zatkaniem tranzystora T0 i pojawieniem się stanu wysokiego na pinie P1.4. Rezystory R4 (1k) oraz R5 (1k) podciągają piny P1.0 i P1.1 mikrokontrolera do plusa zasilania, gdyż nie ma on wewnętrznych rezystorów podciągających na tych pinach. Elementy R6 - R9 (820R) pełnią funkcję ograniczenia prądu diod led wyświetlacza do dopuszczalnej wartości. Tranzystor T1 (BC557) wraz z rezystorami R10 (3.3k) i R11 (3.3k) jest odpowiedzialny za włączanie brzęczyka piezo z generatorem, wpiętego między punkty bz i -. Złącza goldpin GP1, GP2 i GP3 zapeniają połączenie z płytką wyświetlacza. Schemat Wyświetlacza Przedstawiony jest na poniższym rysunku: Złącza GP1, GP2 oraz GP3 zapewniają połączenie z płytką sterownika. Przyciski S1 - S3 (uSwitch) pozwalają ustawić czas na zegarze. Diody DL1 - DL22 są połączone w matrycę 4x6 ze wspólną anodą. Dla wyświetlania dziesiątek godzin zastosowano wyjątkowo tylko dwie diody, ze względu na fakt że nie może być więcej niż 23 godziny i kolejne dwa ledy nigdy by się nie zapaliły. Tranzystory T2 - T7 (BC557) wraz z rezystorami R13 - R22 (3.3k) sterują anodami matrycy 4x6 led. Budowa:Montaż sterownika można dokonać na płytce drukowanej dostępnej tutaj lub gdy wymagany jest rysunek w odbiciu lustrzanym to można wykorzysteć rysunek dostępny tutaj. Lutowanie należy rozpocząć od jednej zworki. Dalsza kolejność elementów jest dowolna. W miejsce złącz GP1 - GP3 należy wlutować złącza szufladkowe o wyskości umożliwiającej złożenie dwóch płytek. Pod mikrokontroler należy bezwzględnie zastosować podstawkę. W innym wypadku niemożliwe będzie jego zaprogramowanie. W układzie został użyty procesor AT89C4051 zamiast AT89C2051 ze względu na większą pamięć programu. Pomocą w montażu może okazać się schemat montażowy dostępny tutaj. Rysunek płytki wyświetlacza można pobrać tutaj lub tutaj gdy wymagany jest obraz w odbiciu lustrzanym. Ze względu na fakt, że płytka jest jednostronna zawiera aż 17 zwór. Montaż należy rozpocząć od wlutowania ich wszystkich. W dalszej kolejności należy wlutować resztę elementów, pamiętając, że złącza goldpin lutowane są od strony druku. Na samym końcu należy przylutować diody led. Pomocą może okazać się dostępny tutaj schemat montażowy. Wykaz Elementów:Sterownik:1x Złącze szufladkowe na goldpiny 1x3 2x Złącze szufladkowe na goldpiny 1x6 1x uSwitch 1x Rezonator Kwarcowy 12MHz 1x Podstawka DIP20 2x 1N4007 4x 820R 2x 33pF Wyświetlacz:1x Goldpin 1x3 2x Goldpin 1x6 3x uSwitch 12x 3.3k 6x BC557B Programowanie:Mikrokontroler do zegara został zaprogramowany w wersji demo programu BASCOM 8051 firmy MCS Electronics (http://www.mcselec.com/). Fragmenty programu przedstawione są poniżej. Konfiguracja timera żeby przerwania następowały co 250us Config Timer0 = Timer , Gate = Internal , Mode = 2 Load Timer0 , 250 Start Timer0 Enable Timer0 Enable Interrupts On Timer0 Przerwanie_timer Główna pętla programu. Zawiera instrukcję warunkową sprawdzającą stana na pinie oznaczonym Test_napiecia (czyli wykrywanie stanu napięcia zasilającego) oraz skok do etykiety Praca następujący co 2ms Do If Test_napiecia = 1 Then P1 = 255 Buzzer = 1 Idle Else If Flaga_praca = 1 Then Gosub Praca End If Loop End Obsługa Przerwania. Następuje co 250us a jej zadaniem jest jedynie poprawnie odliczać czas. Przerwanie_timer: Incr Co2ms If Co2ms = 8 Then Co2ms = 0 Set Flaga_praca 'co 2ms Incr Co4ms If Co4ms = 2 Then Co4ms = 0 Incr Co1sek If Co1sek = 250 Then Co1sek = 0 Incr Sekundy If Sekundy >= 60 Then Sekundy = 0 Incr Minuty If Minuty >= 60 Then Minuty = 0 Incr Godziny If Godziny >= 24 Then Godziny = 0 End If End If End If End If End If End If Return Ta procedura wykonywana jest co 2ms. Jej zadaniem jest multipleksowanie i wyświetlanie wskazań na matrycy diod LED Praca: Flaga_praca = 0 Incr Poz_wyswietlana If Poz_wyswietlana = 6 Then Poz_wyswietlana = 0 Gosub Obsl_przyciskow Gosub Sterowanie Incr Licz_miganie If Licz_miganie = 125 Then Licz_miganie = 0 Wygaszenie = Not Wygaszenie End If Select Case Poz_wyswietlana Case 0: '1 cyfra Set P3.5 '************ Select Case Poz_menu Case 0: Sp1 = Godziny / 10 Case 1: Sp1 = Godziny_buz / 10 Case 2: Sp1 = 1 End Select If Inwersja_wysw = 1 Then Sp1 = Not Sp1 Gosub Kasuj If Ustawianie = 1 Then If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1 Else P1 = Sp1 End If '************ Reset P3.0 Case 1: '2 cyfra Set P3.0 '************ Select Case Poz_menu Case 0: Sp1 = Godziny Mod 10 Case 1: Sp1 = Godziny_buz Mod 10 Case 2: Sp1 = 1 End Select If Inwersja_wysw = 1 Then Sp1 = Not Sp1 Gosub Kasuj If Ustawianie = 1 Then If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1 Else P1 = Sp1 End If '************ Reset P3.1 Case 2: Set P3.1 '************ Select Case Poz_menu Case 0: Sp1 = Minuty / 10 Case 1: Sp1 = Minuty_buz / 10 Case 2: Sp1 = 6 End Select If Inwersja_wysw = 1 Then Sp1 = Not Sp1 Gosub Kasuj If Ustawianie = 2 Then If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1 Else P1 = Sp1 End If '************ Reset P3.2 Case 3: Set P3.2 '************ Select Case Poz_menu Case 0: Sp1 = Minuty Mod 10 Case 1: Sp1 = Minuty_buz Mod 10 Case 2: Sp1 = 6 End Select If Inwersja_wysw = 1 Then Sp1 = Not Sp1 Gosub Kasuj If Ustawianie = 2 Then If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1 Else P1 = Sp1 End If '************ Reset P3.3 Case 4: Set P3.3 '************ Select Case Poz_menu Case 0: Sp1 = Sekundy / 10 Case 1: Sp1 = Sekundy_buz / 10 Case 2: If Buzzer_onoff = 1 Then Sp1 = 2 Else Sp1 = 14 End Select If Inwersja_wysw = 1 Then Sp1 = Not Sp1 Gosub Kasuj If Ustawianie = 3 Then If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1 Else P1 = Sp1 End If '************ Reset P3.4 Case 5: Set P3.4 '************ Select Case Poz_menu Case 0: Sp1 = Sekundy Mod 10 Case 1: Sp1 = Sekundy_buz Mod 10 Case 2: If Buzzer_onoff = 1 Then Sp1 = 7 Else Sp1 = 14 End Select If Inwersja_wysw = 1 Then Sp1 = Not Sp1 Gosub Kasuj If Ustawianie = 3 Then If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1 Else P1 = Sp1 End If '************ Reset P3.5 End Select Return Procedura obsługi przycisków: Obsl_przyciskow: If Prz_plus = 0 Then Incr Przycisk If Przycisk = 30 Then Set P_plus Else Reset P_plus Else Przycisk = 0 Reset P_plus End If If Prz_minus = 0 Then Incr Przycisk2 If Przycisk2 = 30 Then Set P_minus Else Reset P_minus Else Przycisk2 = 0 Reset P_minus End If If Prz_menu = 0 Then Incr Przycisk3 If Przycisk3 = 30 Then Set P_menu Else Reset P_menu Else Przycisk3 = 0 Reset P_menu End If '**************************************** If P_menu = 1 Then '******** If Ustawianie = 0 Then Incr Poz_menu If Poz_menu = 3 Then Poz_menu = 0 Else Incr Ustawianie If Ustawianie = 4 Then Ustawianie = 0 End If '******** End If If P_plus = 1 And P_minus = 0 Then '******** Select Case Ustawianie Case 0: Ustawianie = 1 Case 1: Select Case Poz_menu Case 0: Incr Godziny If Godziny = 24 Then Godziny = 0 Case 1: Incr Godziny_buz If Godziny_buz = 24 Then Godziny_buz = 0 Case 2: Kolejnosc = Not Kolejnosc End Select Case 2: Select Case Poz_menu Case 0: Incr Minuty If Minuty = 60 Then Minuty = 0 Case 1: Incr Minuty_buz If Minuty_buz = 60 Then Minuty_buz = 0 Case 2: Inwersja_wysw = Not Inwersja_wysw End Select Case 3: Select Case Poz_menu Case 0: Sekundy = 0 Case 1: Incr Sekundy_buz If Sekundy_buz = 60 Then Sekundy_buz = 0 Case 2: Buzzer_onoff = Not Buzzer_onoff End Select End Select '******** End If If P_plus = 0 And P_minus = 1 Then '******** Select Case Ustawianie Case 0: Case 1: Select Case Poz_menu Case 0: Decr Godziny If Godziny = 255 Then Godziny = 23 Case 1: Decr Godziny_buz If Godziny_buz = 255 Then Godziny_buz = 23 Case 2: Kolejnosc = Not Kolejnosc End Select Case 2: Select Case Poz_menu Case 0: Decr Minuty If Minuty = 255 Then Minuty = 59 Case 1: Decr Minuty_buz If Minuty_buz = 255 Then Minuty_buz = 59 Case 2: Inwersja_wysw = Not Inwersja_wysw End Select Case 3: Select Case Poz_menu Case 0: Sekundy = 0 Case 1: Decr Sekundy_buz If Sekundy_buz = 255 Then Sekundy_buz = 59 Case 2: Buzzer_onoff = Not Buzzer_onoff End Select End Select '******** End If '**************************************** Return Procedura odwracająca bity itp.: Kasuj: If Kolejnosc = 1 Then Help_bit = Sp1.0 Sp1.0 = Sp1.3 Sp1.3 = Help_bit Help_bit = Sp1.1 Sp1.1 = Sp1.2 Sp1.2 = Help_bit If Poz_wyswietlana = 0 Then Clr c Rotate Sp1 , Right , 2 End If End If Sp1.7 = 1 Sp1.6 = 1 Sp1.5 = 1 Sp1.4 = 1 Return Program ten należy uzupełnić o procedure obsługi buzzera. Cały kod źródłowy można pobrać tutaj. Wersje skompilowane dostępne są tutaj (plik *.bin) lub tutaj (plik *.hex) Zdjęcia Projektu:
|
|||||||||||||||||||||||||||||||||||||||
Re:Zegar
Może nie w każdym sklepie programują ale często spotykałem się z taką możliwością....
Co do opisu programatora to proszę o zamieszczenie tego opisu na forum bo jest bardzo przydatny.... Napiszę potem bardziej rozbudowany artykuł na ten temat
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
wczoraj skonczylem zegarek,
wczoraj skonczylem zegarek, kolega na uczelni zaprogramowal mi at89S i zegar zadzialal odrazu ;)
Bardzo fajna rzecz :P Dzieki wielkie za ten artykuł :):P
Dobry projekt.A zegarek
Dobry projekt.A zegarek binarny na rękę jest możliwy???
Re: Zegar
Jakby się uparł to na SMD dało by się coś zmajstrować takiego :)
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Mógłbyś dokładniej opisać
Mógłbyś dokładniej opisać budowę tego zegarka binarnego:
jak połączyć może schemacik jakiś byś miał wyprowadzeń procka??
http://www.elektroda.pl/rtvforum/topic1926948.html
Re: Zegarek
Chodzi o zegarek z linku? co to ma wspólnego z tematem w którym piszesz?
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
chciałbym żebyś wytłumaczył
chciałbym żebyś wytłumaczył jak zrobić zegarek binarny ten który podałem.
Re: Zegar
Pod tym tematem piszemy tylko na temat urządzenia wyżej... poczytaj regulamin..... od innych rzeczy jest forum
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
programowanie
Witam, na wstępie muszę zaznaczyć że ten zegarek to jest mój pierwszy kontakt ze światem elektroniki. Lecz nie mogę przestać myśleć o robieniu tego zegarka... Powiedzmy że mam już wszystko gotowe od strony podzespołów. Wszystko skręcone i zlutowane. Co mam teraz zrobić by go zaprogramować... Jaki sprzęt do tego potrzebuje i gdzie go kupić oraz jakiego programu użyć... Wystarczy jak po prostu skopiuje i wkleję cały program z załączników?
Pozdrawiam
Re: Zegar binarny
Układ jest na starym mikrokontrolerze i potrzebny jest równoległy programator do mikrokontrolerów AT89CX051. Używałem kiedyś http://www.elportal.pl/pdf/k10/51_15b.pdf ale teraz programuje tylko AVR. Ten programator obsługiwany jest bezpośredio w bascomie 8051
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.