Zegar Binarny


5
Ocena: None Średnia: 5 (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
1x Mostek Prostowniczy 1A
1x Buzzer 5V z generatorem
1x BC547B
1x BC557B
1x 7805 Stabilizator 5V
1x AT89C4051

4x 820R
2x 1k
2x 3.3k
1x 10k
1x 20k
1x 100k

2x 33pF
1x 4...40pF Trymer
2x 22uF Elektrolit
1x 1000uF Elektrolit

Wyświetlacz:


1x Goldpin 1x3
2x Goldpin 1x6
3x uSwitch

12x 3.3k

6x BC557B
22x Dioda LED dowolnego typu

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:

ZałącznikWielkość
Sterownik Schemat54.35 KB
Wyświetlacz Schemat47.34 KB
Sterownik Płytka11.84 KB
Sterownik Płytka (odbicie lustrzane)11.88 KB
Sterownik Płytka (4 na stronie)44.63 KB
Sterownik Montowanie16.91 KB
Wyświetlacz Płytka19.37 KB
Wyświetlacz (odbicie lustrzane)19.3 KB
Wyświetlacz (3 na stronie)56.29 KB
Wyświetlacz Montowanie32.56 KB
Kod źródłowy10.35 KB
Program po kompilacji (BIN)2.01 KB
Program po kompilacji (HEX)5.68 KB
Sterownik Opis6.91 KB
Sterownik Opis (odbicie lustrzane)6.95 KB
Wyświetlacz Opis11.23 KB
Wyświetlacz Opis (odbicie lustrzane)11.31 KB



Portret użytkownika mirley

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.

Portret użytkownika kamil532

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

Portret użytkownika maniek

Dobry projekt.A zegarek

Dobry projekt.A zegarek binarny na rękę jest możliwy???

Portret użytkownika mirley

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.

Portret użytkownika gosc12

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

Portret użytkownika mirley

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.

Portret użytkownika gosc12

chciałbym żebyś wytłumaczył

chciałbym żebyś wytłumaczył jak zrobić zegarek binarny ten który podałem.

Portret użytkownika mirley

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.

Portret użytkownika tomazi

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

Portret użytkownika mirley

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.