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łącznik | Rozmiar |
|---|---|
| Sterownik Schemat | 54.35 KB |
| Wyświetlacz Schemat | 47.34 KB |
| Sterownik Płytka | 11.84 KB |
| Sterownik Płytka (odbicie lustrzane) | 11.88 KB |
| Sterownik Płytka (4 na stronie) | 44.63 KB |
| Sterownik Montowanie | 16.91 KB |
| Wyświetlacz Płytka | 19.37 KB |
| Wyświetlacz (odbicie lustrzane) | 19.3 KB |
| Wyświetlacz (3 na stronie) | 56.29 KB |
| Wyświetlacz Montowanie | 32.56 KB |
| Kod źródłowy | 10.35 KB |
| Program po kompilacji (BIN) | 2.01 KB |
| Program po kompilacji (HEX) | 5.68 KB |


być może te pytania będą
być może te pytania będą błahe z pana punktu widzenia ale...
1. Czy wyjścia na schemacie oznaczone np. +5V mam podłączyć pod ścieżkę +5V? Gdzie w takim razie jest napięcie rzędu +4,3V
2. Czy wyście GND (uziemienie) można połączyć z minusem np. mostka Br1
3. Czy czerwona kropka na złączu bazy tranzystora T1 jest wstawiona celowo (jako czerwona)? jaśli tak to co znaczy?
4. Buzzer wstawiam pomiędzy bz1 a... GND procesora?
........
5. W jaki sposób można sprawdzić czy program został prawidłowo wgrany na kość, bez montowania całego układu (używałem programatora BlowIT [url=http://http://www.dinastiasoft.com.ar/Imagenes/Circuitos/Micros/BLOWIT-1.gif] własnej roboty, wypalałem BASCOM'em [ale nie wiem czy dobrze]), czy podczas programowania np. nagrzewa się procesor?
P.S. Układ sterownika oraz wyświetlacza nie montuję na płytkach drukowanych, tylko na pleksi (jak na amatora przystało ;))
Kilka pytań o zegar
1. Oznaczenie +5V na schemacie mają być zwarte do siebie, nie oznaczają one punktu podłączenia zasilacza, takie oznaczenie ułatwia rysowanie schematu gdyż nie trzeba rysować dodatkowych podłączeń zasilania utrudniających analizę obwodu. Transformator zasilający należy podłączyć do zacisku ZAS. Napięcie około 4.3V powstaje po przejściu 5V przez diodę krzemową (w kierunku przewodzenia spadek napięcia ok 0.6-0.7V). W tym przypadku nazwa 4.3V jest poprostu nazwą szyny zasilającej procesor.
2. GND to masa, głowna szyna zasilająca (minus). Można podłączyć ją do uziemienia ale nie jest to konieczne. Wszystkie GND mają być zwarte ze sobą.
3. Czerwona kropka w połączeniu jest pozostałością po wcześniejszym stylu rysowania (kropki czerwone, widać to na następnym schemacie). Pierwszy schemat był edytowany poźniej i styl został zmieniony ale jak widać nie w całości.
4. Dokładnie Tak
5. Ja posiadam MCS Flash Programmer metodą na sprawdzenie działania jest podłączenie procesora do układu lub kliknięcie opcji Verify w bascomie.
PS. To jest dość stary projekt i nie pamiętam wszystkich szczegołow do niego ale możesz pytać jak jeszcze będą problemy
Pozdrawiam
Teraz powinienem już dać
Teraz powinienem już dać sobie radę :)
Dziękuję i pozdrawiam