(11 głosujących) Układ jak sama nazwa wskazuje jest najzwyklejszym zegarem pracującym w cyklu 24-godzinnym, z tym że sama prezentacja czasu jest 12- godzinna. Nietypowy jest jedynie sposób prezentacji czasu. Godziny i minuty podświetlane są na specjalnym panelu za pomocą odpowiednio rozmieszczonych diod LED (65 sztuk). Dla przykładu godzina 12:35 reprezentowana jest przez napisy "Dwunasta", "Trzydzieści" i "Pięć". Panel główny pokazuje czas z dokładnością do 5 minut, natomiast dodatkowe 4 diody zwiększają precyzję wskazań do 1 minuty. Korzystanie z zegara może początkowo wydawać się trudne, jednak jeden dzień wystarczy aby się przyzwyczaić. Układ wyposażony jest w głośny budzik i bateryjne podtrzymanie czasu na wypadek zaniku zasilania. Całość zamknięta jest w obudowie złożonej z wypolerowanych kawałków laminatu pokrytych lakierem bezbarwnym. Do odliczania czasu wykorzystany jest popularny układ PCF8583, a całe urządzenie oparte jest o mikrokontroler ATMega16. Zegar pobiera około 100mA prądu, przy zasilaniu 5V, podczas normalnej pracy.
Działanie:Schemat ideowy sterownika znajduje się na rysunku poniżej: Sercem układu jest mikrokontroler U1 (ATMega16) wraz z rezonatorem kwarcowym X1 (16MHz) i kondensatorami C1 (22pF) i C2 (22pF). Przyciski S1 - S3 (uSwitch 12x12mm) stanowią klawiaturę zegara, pozwalając ustawić czas i budzik. Diody DL1 - DL4 (LED) stanowią wyświetlacz pomocniczy dla licznika minut. Złącze Prog (goldpin) służy do zaprogramowania procesora. Za odmierzanie czasu w układzie odpowiedzialny jest zegar czasu rzeczywistego U2 (PCF8583). Do jego działania wymagany jest rezonator kwarcowy X2 (32,768kHz) i kondensator C8 (33pF). Dodatkowe kondensatory C6 (100nF) i C7 (47uF) zapewniają filtrację napięcia zasilania samego układu U2. Po zaniku napięcia zasilania pomiar czasu jest podtrzymywany za pomocą baterii BAT1 (3V) i zasilacza bezprzerwowego z diodami D1 (1N4148) i D2 (1N4148). Rezystory R3 (3,3k) i R4 (3,3k) umożliwiają poprawną pracę magistrali I2C, a co za tym idzie poprawny odczyt i zapis czasu z/do układu U2. Wyświetlacz podzielony jest na dwa segmenty sterowane multipleksowo poprzez tranzystory T1 (BC327) i T2 (BC327). Rezystory R1 (3,3k) i R2 (3,3k) ograniczają prąd baz tych tranzystorów. Katody diod w segmentach wyświetlaczy sterowane są za pośrednictwem buforów inwerterów U4 (ULN2803) i U5 (ULN2803), podobnie jak sygnalizator piezo z generatorem BUZ1 (5V). Złączem wyświetlacza są listwy goldpin GP1, GP2 i GP3. Zasilanie podłączamy do złącza Z1 (ARK2), wprost na kondensator filtrujący C3 (220uF) i układ stabilizatora U3 (7805). Kondensatory C5 (100nF) i C4 (100uF) filtrują napięcie zasilania. Schemat ideowy wyświetlacza znajduje się na rysunku poniżej: Wyświetlacz zegara nie stanowi nic odkrywczego, rezystory R1 - R65 (220R-330R dobrać w zależności od diody) ograniczają prąd led'ów D1-D65. Diody podzielone są na dwie sekcje, pierwszą stanowią elementy D1-D30, a drugą diody D31-D65. Kontakt z płytką sterownika zapewniają złącza goldpin GP1, GP2 i GP3. Budowa:Sterownik z powodzeniem można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Montaż płytki nie jest skomplikowany i należy go rozpocząć od wlutowania trzech zworek. Kolejne powinny być rezystory i podstawki pod układy scalone i procesor. Zamiast zwykłych diod D1 i D2 można zastosować diody Schottkiego. Stabilizator U3 powinien być zamontowany w pozycji leżącej, bez radiatora, chyba że napięcie wejściowe będzie większe niż 9V-12V wtedy moc tracona w stabilizatorze może być duża. Obudowę rezonatora kwarcowego X1 warto podłączyć do masy gdyż bez tego może czasami zdarzyć się zawieszenie mikrokontrolera U1. Najłatwiej jest to wykonać lutując odcinek przewodu od nóżki kondensatora C2 do obudowy kwarcu. Przyciski S1 - S3 mogą być uSwitchami o dłuższej ośce co potem ułatwi obsługę zegara. Złącza szufladkowe GP1, GP2 oraz GP3 muszą zostać przylutowane od spodu płytki, w postaci jednego kawałka listwy precyzyjnej. Rezonator kwarcowy X2 należy wlutować w pozycji leżącej, tak aby znajdował się nad wytrawionym polem masy (fotografia). Diody DL1-DL4 montujemy pod kontem 90 stopni zgodnie z fotografiami projektu, gdyż będą one wystawały przez obudowę zegara. Cały układ najlepiej zasilać z ładowarki od telefonu (dostępna na aukcjach internetowych) lub z klasycznego zasilacza wtyczkowego. Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj. Wyświetlacz można zbudować na podstawie płytki dostępnej tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Płytka wyświetlacza jest równie prosta w montażu, największy problem sprawią montowane od spodu goldpiny GP1, GP2 i GP3. Diody powinny być wlutowane maksymalnie blisko płytki. Warto zastosować diody o podwyższonej jasności i szerokim kącie świecenia. Rezystory powinny być o małych gabarytach, można zamiast nich wlutować rezystory SMD od strony ścieżek. Wartości rezystorów należy dobrać do posiadanych diod aby jasność była zadowalająca a jednocześnie pobór prądu nie był duży. Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj. Wykaz Elementów:Sterownik:1x Złącze Śrubowe ARK2(podwójne) 4x 3,3k 2x 22pF 1x Rezonator Kwarcowy 16MHz Wyświetlacz:3x Listwa Goldpin 1x8 Programowanie:Kod Źródłowy został napisany w BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej: '************* Konfiguracja uC ***************** '*********************************************** $regfile = "m16def.dat" $crystal = 16000000 Config Porta = &B11111111 : Porta = &B00000000 Config Portb = &B11111000 : Portb = &B11111111 Config Portc = &B11111111 : Portc = &B00000111 Config Portd = &B11111111 : Portd = &B11111111 Config Scl = Portd.6 Config Sda = Portd.5 I2cinit Config Timer0 = Timer , Prescale = 256 Enable Timer0 : On Timer0 Prztimer0 Enable Interrupts Sw_port Alias Pinb Buzzer Alias Portc.3 L1 Alias Portb.3 L2 Alias Portb.4 L3 Alias Portb.5 L4 Alias Portb.6 '********** Konfiguracja uC Koniec ************ '****************** Zmienne ******************* '*********************************************** Dim Godziny As Byte , Minuty As Byte , Sekundy As Byte Dim Godziny_bcd As Byte , Minuty_bcd As Byte , Sekundy_bcd As Byte Dim Godziny_budz As Byte , Minuty_budz As Byte Dim Sw As Byte , Stan_sw As Byte , Licznik_sw As Byte Dim Poz_ust As Byte , Poz_wysw As Byte Dim Zapisz_czas As Bit Dim Alarm_en As Bit , Al_buz As Bit , Beep_buz As Bit , Beep As Byte Dim Wysw(2) As Word Dim Mux As Bit Dim Helpbyte(1) As Byte Dim Mig As Bit , Godz24 As Bit Dim Dzielnik(1) As Byte Dim Flaga_4ms As Bit , Flaga_500ms As Bit '************* Zmienne Koniec **************** '************ Warunki Poczatkowe *************** '*********************************************** Poz_wysw = 1 '******* Warunki Poczatkowe Koniec *********** '************** Petla glowna ****************** '*********************************************** Do If Flaga_4ms = 1 Then Flaga_4ms = 0 Gosub Przyciski Gosub Wyswietlanie If Beep <> 0 Then Beep_buz = 1 Decr Beep Else Beep_buz = 0 End If If Al_buz = 1 Or Beep_buz = 1 Then Buzzer = 1 Else Buzzer = 0 End If If Flaga_500ms = 1 Then Flaga_500ms = 0 Toggle Mig If Poz_wysw <> 1 Or Poz_ust = 0 Then If Zapisz_czas = 1 Then Gosub Zapis_rtc 'jednorazowo zapisuje po wyjściu z ustawień Zapisz_czas = 0 Else Gosub Odczyt_rtc 'odczytuje czas End If Else Zapisz_czas = 1 End If Select Case Poz_wysw Case 1: Wysw(1) = Godziny Wysw(2) = Minuty Case 2: Wysw(1) = Godziny_budz Wysw(2) = Minuty_budz End Select Gosub Przelicz Gosub Alarm End If Loop End '************ Petla glowna Koniec ************** '************ Przerwanie timer 0 *************** '*********************************************** Prztimer0: Timer0 = 5 Set Flaga_4ms Incr Dzielnik(1) If Dzielnik(1) = 125 Then Dzielnik(1) = 0 Set Flaga_500ms End If Return '******** Przerwanie timer 0 Koniec ************ '****************** Zapis RTC ******************** Zapis_rtc: 'zapisuje czas g,m i s do układu RTC Godziny_bcd = Makebcd(godziny) Minuty_bcd = Makebcd(minuty) Sekundy_bcd = Makebcd(sekundy) I2cstart I2cwbyte 162 I2cwbyte 0 'rejestr kontrolny I2cwbyte 8 'ustawienie rejestru zapisu daty I2cstop I2cstart I2cwbyte 162 I2cwbyte 2 I2cwbyte Sekundy_bcd I2cwbyte Minuty_bcd I2cwbyte Godziny_bcd I2cstop Return '************* Zapis RTC Koniec ***************** '****************** Odczyt RTC ******************** Odczyt_rtc: 'odczytuje czas z RTC do zmiennych I2cstart I2cwbyte 162 'adres zapisu I2cwbyte 2 'rejestr sekund I2cstart I2cwbyte 163 'adres odczytu I2crbyte Sekundy_bcd , Ack I2crbyte Minuty_bcd , Ack I2crbyte Godziny_bcd , Nack I2cstop Sekundy = Makedec(sekundy_bcd) Minuty = Makedec(minuty_bcd) Godziny = Makedec(godziny_bcd) Return '************** Odczyt RTC Koniec ***************** '************** Przelicz ***************** Przelicz: If Wysw(1) > 12 Then Godz24 = 1 Else Godz24 = 0 Wysw(1) = Wysw(1) Mod 12 Select Case Wysw(1) Case 0 : Wysw(1) = &B0000000100000000 Case 1 : Wysw(1) = &B0000000000000001 Case 2 : Wysw(1) = &B0000000000000010 Case 3 : Wysw(1) = &B0000010000000000 Case 4 : Wysw(1) = &B0000000000100000 Case 5 : Wysw(1) = &B0000000000000100 Case 6 : Wysw(1) = &B0000000001000000 Case 7 : Wysw(1) = &B0000000000001000 Case 8 : Wysw(1) = &B0000000010000000 Case 9 : Wysw(1) = &B0000001000000000 Case 10 : Wysw(1) = &B0000000000010000 Case 11 : Wysw(1) = &B0000100000000000 'Case 12 : Wysw(1) = &B0000000100000000 End Select Helpbyte(1) = Wysw(2) Mod 5 Wysw(2) = Wysw(2) / 5 Select Case Wysw(2) Case 0 : Wysw(2) = &B0000000000000000 '0....4 Case 1 : Wysw(2) = &B0000000000001000 '5...9 Case 2 : Wysw(2) = &B0000010000000000 '10...14 Case 3 : Wysw(2) = &B0000000000000001 '15...19 Case 4 : Wysw(2) = &B0000100000000000 '20...24 Case 5 : Wysw(2) = &B0000100000001000 '25...30 Case 6 : Wysw(2) = &B0000000001000000 '31...34 Case 7 : Wysw(2) = &B0000000001001000 '35...39 Case 8 : Wysw(2) = &B0000000010000000 '40...44 Case 9 : Wysw(2) = &B0000000010001000 '45...49 Case 10 : Wysw(2) = &B0000000000100000 '50...54 Case 11 : Wysw(2) = &B0000000000101000 '55...59 End Select Select Case Helpbyte(1) Case 0 : L1 = 1 : L2 = 1 : L3 = 1 : L4 = 1 Case 1 : L1 = 0 : L2 = 1 : L3 = 1 : L4 = 1 Case 2 : L1 = 0 : L2 = 0 : L3 = 1 : L4 = 1 Case 3 : L1 = 0 : L2 = 0 : L3 = 0 : L4 = 1 Case 4 : L1 = 0 : L2 = 0 : L3 = 0 : L4 = 0 End Select If Poz_ust <> 0 Then If Poz_ust = 1 Then If Mig = 1 Then Wysw(1) = 0 : L1 = 1 : L2 = 1 : L3 = 1 : L4 = 1 Else If Godz24 = 1 Then L1 = 1 : L2 = 1 : L3 = 1 : L4 = 0 Else L1 = 1 : L2 = 1 : L3 = 0 : L4 = 1 End If End If End If If Poz_ust = 2 Then If Mig = 1 Then Wysw(2) = 0 : L1 = 1 : L2 = 1 : L3 = 1 : L4 = 1 End If End If Wysw(2).4 = 1 If Poz_wysw = 1 Then Wysw(2).1 = 1 If Poz_wysw = 2 Then Wysw(2).2 = 1 Else If Poz_wysw = 2 Then Wysw(2).2 = 1 End If Return '************** Wyswietlanie ***************** Wyswietlanie: Toggle Mux If Mux = 1 Then Set Portc.2 Porta = Wysw(1) Portc.4 = Wysw(1).8 Portc.5 = Wysw(1).9 Portc.6 = Wysw(1).10 Portc.7 = Wysw(1).11 Reset Portc.1 Else Set Portc.1 Porta = Wysw(2) Portc.6 = Wysw(2).10 Portc.7 = Wysw(2).11 Reset Portc.2 End If Return '************** Alarm ***************** Alarm: If Alarm_en = 1 Then If Godziny = Godziny_budz And Minuty = Minuty_budz Then Toggle Al_buz Else Al_buz = 0 Else Al_buz = 0 End If Return '************** Przyciski ***************** Przyciski: Sw = Sw_port And &B00000111 If Sw <> &B00000111 And Stan_sw = Sw Then Incr Licznik_sw If Licznik_sw = 158 Then Licznik_sw = 0 Select Case Stan_sw Case &B00000110: 'incr '*********************************************************** Select Case Poz_wysw Case 1: Select Case Poz_ust Case 0: Poz_ust = 1 Case 1: Incr Godziny If Godziny = 24 Then Godziny = 0 Sekundy = 0 Case 2: Incr Minuty If Minuty = 60 Then Minuty = 0 Sekundy = 0 End Select Case 2: 'dotyczy budzika Select Case Poz_ust Case 0: Poz_ust = 1 Case 1: Incr Godziny_budz If Godziny_budz = 24 Then Godziny_budz = 0 Case 2: Incr Minuty_budz If Minuty_budz = 60 Then Minuty_budz = 0 End Select End Select Case &B00000011: 'decr '*********************************************************** Select Case Poz_wysw Case 1: Select Case Poz_ust Case 0: Toggle Alarm_en If Alarm_en = 1 Then Beep = 125 Else Beep = 20 Case 1: Decr Godziny If Godziny = 255 Then Godziny = 23 Sekundy = 0 Case 2: Decr Minuty If Minuty = 255 Then Minuty = 59 Sekundy = 0 End Select Case 2: 'dotyczy budzika Select Case Poz_ust Case 0: Toggle Alarm_en If Alarm_en = 1 Then Beep = 125 Else Beep = 20 Case 1: Decr Godziny_budz If Godziny_budz = 255 Then Godziny_budz = 23 Case 2: Decr Minuty_budz If Minuty_budz = 255 Then Minuty_budz = 59 End Select End Select Case &B00000101: 'next menu '*********************************************************** If Poz_ust > 0 Then 'jeśli ustawinia Incr Poz_ust If Poz_ust >= 3 Then Poz_ust = 0 Else 'jesli wyswietlanie Incr Poz_wysw If Poz_wysw = 3 Then Poz_wysw = 1 End If End Select End If Else Stan_sw = Sw Licznik_sw = 145 End If Return '*********************************************** Ustawienia fusebitów dla ATmega 16: Część Mechaniczna:Duży problem może stanowić konstrukcja mechaniczna zegara gdyż nie jest ona prosta do wykonania i wymaga odrobiny cierpliwości. Najważniejszy jest panel czołowy, wykonany z cienkiego laminatu jednostronnego (czym cieńszy tym lepszy, dobry mógłby być 0.5mm lub 0.8mm). Wydruk do wprasowania musi być idealny bo każde podtrawienie po oświetleniu diodami będzie potem widać. Panel przedni można zrobić odrobinę większy niż proponowany rysunek, zaklejając obrzeża płytki taśmą klejącą aby się nie podtrawiły. Zawsze łatwiej będzie podszlifować panel do reszty obudowy niż robić nowy, odrobinę większy. Drugim etapem montażu jest zrobienie przegródek z tyłu panelu przedniego za pomocą pasków laminatu o szerokości 1-1.5cm. Każdy napis na wyświetlaczu oddzielony jest od drugiego przynajmniej jedną literą "fałszywą", która nie powinna być podświetlana, a umożliwi wklejenie dwóch przegródek i lepsze oddzielenie jednego napisu od drugiego. Najprościej narysować od tyłu panelu przedniego w którym miejscu powinny być zamocowane paski laminatu. Klejenia dokonujemy za pomocą Super Glue lub podobnego kleju, zważając aby nie było szpar między przegródkami oraz panelem a przegródkami. Wszystkie szpary i niedociągnięcia zaowocują przeświecaniem jednego znaku na drugi. Pomocą przy klejeniu będą fotografie projektu u dołu strony. Po przyklejeniu przegródek szlifujemy drobnym papierem ściernym panel przedni, a następnie malujemy lakierem bezbarwnym w sprayu. Płytka sterownika z płytką wyświetlacza powinna być skręcona za pomocą śrubek 3mm, gdyż w innym przypadku po naciśnięciu przycisku goldpiny lub złącze szufladkowe mogą się wyłamać z płytek. Jeśli wszystko jest dobrze wykonane, a przegródki poprawnie wklejone to płytka wyświetlacza powinna przyłożyć się prosto do panelu przedniego a diody schować się w przegródkach. W zależności od długości napisu przegródki mają różne długości i różną ilość podświetlających je diod. Przymocowanie płytki wyświetlacza do panelu z napisami można wykonać w dowolny sposób, np wiercąc w płytce wyświetlacza małe dziurki 1mm i przekładając kawałki drutu przylutowane uprzednio do laminatu w przegródkach. Boki i górę obudowy także wycinamy z pasków laminatu, szlifujemy i lakierujemy podobnie jak panel przedni, jeśli chodzi o tył obudowy to ja pozostawiłem odkryty aby można było podziwiać budowę zegara :) Obsługa:Zegar obsługujemy za pomocą klawiatury z trzema przyciskami. Podczas normalnego wyświetlania czasu, przyciskiem S1 włączamy i wyłączamy obsługę budzika, krótki pisk potwierdza wyłączenie, natomiast długi świadczy o tym że budzik będzie działał. Naciskanie na przycisk S2 powoduje cykliczne przechodzenie do widoku ustawionego czasu budzenia lub aktualnego czasu. Przyciśnięcie S3 na odpowiednim widoku wejdzie w tryb ustawiania, bądź to zegara bądź budzika. Przyciski S3 i S1 działają wtedy odpowiednio jako + i -, natomiast poprzez S2 przechodzimy do ustawień minut, a potem do normalnej pracy. Podczas ustawiania godzin, miganie diody DL2 mówi o tym że jest to godzina poranna AM, natomiast miganie DL1 świadczy o porze popołudniowej (PM). Gdy zegar pokazuje czas nie ma możliwości podglądu czy jest to godzina AM, czy PM, ale uważam że pomylenie 6 rano z 18 było by trudne :) Zdjęcia Projektu:
|
|||||||||||||||||||||||||||||||||||
???
Nie jestem pewien czy się zrozumieliśmy.
W sumie to tylko 43 sekcje i ponad 2k kombinacji wyświetlania
Jaka będzie różnica pomiędzy wyświetlaniem "dwunastki", a "piątki",... oprócz ilości ledów w sekcji?
Rozumiem, a przynajmniej mi się tak wydaje że... U Kolegi w projekcie, różnica ilości ledów w sekcji odpowiada wyłącznie za równomierne podświetlenie.
Jaka będzie różnica pomiędzy palącą się "dwunastką" w T?0,01...59,9s, a palącą w T?0,01...54,9 + impusly w T?55...59,9s?, chyba tylko w programowaniu.
Gdzie tkwi problem????
mirley, proszę nie irytuj się moimi pytaniami, tylko powoli łopatologicznie wyłuszcz.
Bo jestem zielony w takich projektach, a zapaliłem się bardzo do tego Twojego zegaraw w mojej wersji;)
Co do osadzenia ledów w wyświetlaczu , to mam wrażenie że pcb z niezbędnym minimum ścieżek
x*(D+R)*46, a potem drutologia do GP???
Ew. pcb trzywarstwowe i git :)....żart!!!
Czy można przenieść z panelu przedniego USTAW#BUDZIK#CZAS w inne miejsce w zamian wstawić ZERO#ZERO??? Wyświetlało by np: czternasta zero zero, ... zero jeden, ... zero dwie...itd.
Re: Zegar
Źle się wyraziłem odnośnie migania.... myslac ogólnie jak chciałes żeby minuty migały to gdzy będzie 12, 13 itp to będzie migały całe minuty a nie jednostki minut. Na takiej samej zasadzie jak będzie np 58 to powinno migac zarówno 50 jak i 8. W praktyce jeśli będziesz migał tylko na 5 sekund do końca to wystarczy zrobić miganie na 5-9
Wyświetlacz możesz ułożyć sobie jak chcesz tylko żebyś potem to oprogramował odpowiednio
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.
pytanie
mam pytanie: ile mniej więcej kosztowało Cię wygrawerowanie płytki?
no i jak to zrobiłeś, że
no i jak to zrobiłeś, że środki liter Ci nie wypadają?
Re: Zegar
Nic nie grawerowałem, panel przedni jest trawiony na laminacie a diody świecą przez laminat......Polecam jednak zamówić laserowo grawerowaną np folię i nakleić ją na plexi, będzie lepszy efekt
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.
zegar
Witam jak jest wyświetlana np godzina 9:17 ??
Re: Zegar
Wyświetlana jest 9:15 i dwie diody u góry co oznacza +2.
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.
led
witam jak przerobić układ aby można było podpiąć do tego taśmy LED 12V??
Re: Zegar
Zamiast tranzystorów T1 T2 trzeba dać dwa tranzystory, najpierw NPN a potem PNP podłączony do 12V ponieważ trzeba zamienić poziom logiczny 0-5V na 0-12V dla ledów. W programie trzeba zanegować sygnały jakie trafiają na T1 i T2
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.