Elektroda.pl
Elektroda.pl
X
Computer ControlsComputer Controls
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Zegarek na avr z budzikiem.

aragog 28 Mar 2012 19:37 11982 25
  • Zegarek na avr z budzikiem.

    Witam wszystkich forumowiczów.
    Chciałbym przedstawić wam moją pierwszą konstrukcję opublikowaną na forum. Jest to prosty zegarek z budzikiem oparty na microkontrolerze atmega8. Pomysł narodził się gdy dostałem do ręki wyświetlacz poczwórny 7-segmentowy (30x15mm). Układ w całości zrobiony z części wylutowanych z innych urządzeń (no poza prockiem i obudową). Więc koszt dla mnie wynosił 0zł ale myślę że normalnie nie przekroczy 20zł. Płytkę zaprojektowałem w Eagle, namalowałem cd-markerem na laminacie i wytrawiłem w chlorku.
    Zegarek na avr z budzikiem.
    Największy problem jaki napotkałem podczas budowy to brak miejsca w obudowie dlatego wyświetlacz do płytki podłączony kabelkami.
    Zegarek na avr z budzikiem.
    Pomiar czasu zrealizowany jest w timer2 w trybie asynchronicznym na kwarcu 32.768kHz. Procesor jest taktowany wewnętrznym oscylatorem 8MHz. Program napisany w bascomie i pewnie zawiera wiele błędów ale dopiero niedawno zacząłem zabawę z AVR. Dla chętnych wsad i projekt płytki jest w załączniku.

    Zegarek na avr z budzikiem. Zegarek na avr z budzikiem. Zegarek na avr z budzikiem.

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    aragog
    Poziom 10  
    Offline 
    aragog napisał 53 postów o ocenie 99, pomógł 0 razy. Jest z nami od 2011 roku.
  • Computer ControlsComputer Controls
  • #2
    markbrow33
    Poziom 10  
    Za długo nie pochodzi na samych bateriach, zmierz pobór prądu.
  • #3
    aragog
    Poziom 10  
    Maksymalny pobór prądu to ok 30 mA.

    Jak będą się za szybko rozładowywały to zmienię na zasilacz.
  • #4
    pier
    Poziom 23  
    Na pierwszy raz może być. Takie zamontowanie wyświetlacza zmniejsza jego czytelność, potrzebny jest zielony filtr przed nim.
    I po co tyle przycisków? Wystarczyłby jeden góra dwa. A zresztą i tak zaraz zrobisz z tego inne urządzenie :D
  • #5
    Stipe77
    Poziom 12  
    Daję 8/10 bo lubię zegarki. 1pt odbieram za brak przyciemnionego filtra a nie zielonego a drugi za zasilanie bateryjne.
  • #6
    maly.borkowo
    Poziom 15  
    Czemu ma służyć ta dioda obok wyświetlacza? Jest podpięta pod procesor czy bezpośrednio do zasilania jako sygnalizacja? Podejrzewam, że jest w ogóle zbędna, jeżeli to ma chodzić na bateriach. I jeżeli już baterie (chociaż jak już koledzy wspomnieli - za długo to to pewnie nie pochodzi na nich) to może jakiś pomiar napięcia i wskazanie rozładowania, np. właśnie tą diodą co jest obok?
  • Computer ControlsComputer Controls
  • #7
    zieluś
    Poziom 18  
    Skoro zasilanie bateryjne to może dodaj funkcje trybu oszczędnego tz. po naciśnięciu przycisku włączało by się podświetlenie wyświetlacza na parę sekund. To taka mała sugestia.
  • #8
    łuki_mar44
    Poziom 18  
    Witam!

    Jak na początkującego to całkiem dobrze ci to wyszło. Płytka robiona markerem tez nie najgorzej jednak estetyka przede wszystkim więc warto spróbować termotransferu.
    Lepiej ten zegarek zasilić z zasilacza i w razie zaniku zasilania załączyć tryb oszczędności i wtedy czerpać energie z baterii.
    Poza tym ok.

    pozdrawiam
  • #9
    Qujav
    Poziom 21  
    Bez sensu, chłop będzie biegał, żeby godzine sprawdzić. Dobrze jest tak jak jest, jak się baterie wyczerpią to da baterie i tyle. Marker markerem, ale kolega to chyba linijki w domu nie ma, płytka masakryczna :p
    Ale ważne, że działa..
  • #10
    łuki_mar44
    Poziom 18  
    Tylko procek normalnie z wyświetlaczami będzie zabierał kilkanaście mA a na trybie oszczędnym są to uA więc jest to duża różnica. Więc coś czuje, że bateryjki będą szybko padać...
  • #11
    maly.borkowo
    Poziom 15  
    zieluś napisał:
    Skoro zasilanie bateryjne to może dodaj funkcje trybu oszczędnego tz. po naciśnięciu przycisku włączało by się podświetlenie wyświetlacza na parę sekund.

    Qujav napisał:
    Bez sensu, chłop będzie biegał, żeby godzine sprawdzić.


    Po przeczytaniu tego zrodziła mi się inna myśl - połączenie dwóch urządzeń - znanego klaskacza i zegarka :) Czyli chcemy sprawdzić godzinę to klaskamy, a zegarek zapala wyświetlacz na np. 3 sekundy. I do tego przycisk, żeby nie trzeba klaskać gdy jesteśmy tuż obok :)
  • #12
    djarecki
    Poziom 14  
    Zaprojektować płytkę w Eaglu i narysować ją markerem to jakby usmażyć kotlety ale wpieprzać surowy schab. Projekt od strony estetyczniej słabo (4/10) za to że działa . Za program daje 8/10 z racji że zegarki to bardzo dobre programy dla poczatkujących. Finalnie 6/10 Gratulacje.
  • #13
    aragog
    Poziom 10  
    pier napisał:
    I po co tyle przycisków?


    Przyciski są do ustawiania czasu i alarmu a także do wł/wył alarmu

    djarecki napisał:
    Zaprojektować płytkę w Eaglu i narysować ją markerem to jakby usmażyć kotlety ale wpieprzać surowy schab.


    Rysowałem markerem ponieważ nie mam dostępu do ksera/drukarki laserowej.

    Dioda obok wyświetlacza sygnalizuje stan alarmu ON/OFF.

    Co do trybu oszczędnego i klaskacza to dobry pomysł i chyba pójdę za waszymi radami.

    Dziękuje za opinie i pozdrawiam.
  • #14
    cefaloid
    Poziom 32  
    maly.borkowo napisał:
    Po przeczytaniu tego zrodziła mi się inna myśl - połączenie dwóch urządzeń - znanego klaskacza i zegarka :) Czyli chcemy sprawdzić godzinę to klaskamy, a zegarek zapala wyświetlacz na np. 3 sekundy. I do tego przycisk, żeby nie trzeba klaskać gdy jesteśmy tuż obok :)

    Czyli wtedy kiedy najbardziej potrzeba - w nocy - klaskamy. Rodzina się na pewno ucieszy, też zamiast spać będą klaskać i sprawdzać godzinę :D

    Faktycznie pobór prądu 30mA takie baterie AAA wykończy w 2-3 dni więc mozna się i w klaskacz pobawić. Przecież to i tak konstrukcja aby się czegoś nauczyć a nie aby była piękna i super praktyczna. Na początek i tak bardzo dobrze że działa i nie było zadnych błędów które wyszły po fakcie.

    Jeśli chodzi o kod programu - całkiem fajny. Z dawnej praktyki z Bascomem nauczyłem się że tyle że warunek typu:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Zrobiłbym jako:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Tak na wypadek błędu w kodzie / błedu w Bascomie / nieprzewidzianego zbiegu przerwań itp. który by spowodował ze S = np 61 (bo np przyszło kolejne przerwanie zanim sprawdziliśmy tu ten warunek, procek był obciązony czym innym i nie zdążył sprawdzić przy 60).
    Druga wersja sprowadzi go do dopuszczalnych granic. Pierwsza nie.

    To może brzmieć śmiesznie - ale Bascom już taki jest. Do malutkich programików jak ten jest OK. Ale przy większych programach potrafi się zawiesić albo rozjechać po 2 dniach pracy, kiedy to samo, przepisane linia w linię w WinAvr działa latami, wyraźnie szybciej i zajmuje 40% mniej.
  • #15
    Flaman11
    Poziom 17  
    cefaloid napisał:
    To może brzmieć śmiesznie - ale Bascom już taki jest. Do malutkich programików jak ten jest OK. Ale przy większych programach potrafi się zawiesić albo rozjechać po 2 dniach pracy, kiedy to samo, przepisane linia w linię w WinAvr działa latami, wyraźnie szybciej i zajmuje 40% mniej.


    Kolego wybacz, ale takich bredni to tu nie powinno być. Język jak język, może mniej optymalny od C, ale jednak dla początkujących łatwiejszy. To czy program się rozjeżdża, czy nie, to wyłącznie wina programującego, a nie kompilatora. Źle napisany program nie będzie działał prawidłowo, czy to będzie do obsługi jednej diody led, czy sterownik do inteligentnego domu.

    cefaloid napisał:
    Tak na wypadek błędu w kodzie

    Uwaga słuszna lecz na przyszłość. Mając jedynie uruchomione jedno przerwanie i w nim zawarty powyższy warunek nic takiego się nie stanie. Poza tym nawet, gdyby były uruchomione inne przerwania, to również się stosuję odpowiednie operacje by wyeliminować różnego rodzaju błędy, np. jak kolega pokazał lub np. zatrzymanie przerwań na czas obsługi innego przerwania, sposobów jest wiele.
  • #16
    cefaloid
    Poziom 32  
    Flaman11 napisał:

    Kolego wybacz, ale takich bredni to tu nie powinno być.

    Owe brednie powstały podczas przepisywania programów Bascom na Vinavr linia w linię oraz wielokrotnej męki czemuż to w Bascomie nie działa kiedy kod jest OK. Albo czemuż to po tygodniu już nie działa. Jakoś w Winavr nie mam tego typu problemów - nawet z identycznie wyglądającym algorytmem pracy programu.

    Flaman11 napisał:
    Język jak język, może mniej optymalny od C, ale jednak dla początkujących łatwiejszy. To czy program się rozjeżdża, czy nie, to wyłącznie wina programującego, a nie kompilatora.

    Czyli kompilator sam w sobie jest bezbłędny z samej definicji. Już rozumiem i dziekuję za uświadomienie.

    Na pewno łatwiejszy i warto zacząć od Bascoma. Autorowi zegarka na pewno nie odradzam tego narzędzia bo na początek nic lepszego nie mógł wybrać. Jednak moje zdanie jest takie że po pewnym czasie ta łatwość zaczyna być ograniczeniem kontroli co się dzieje.

    Dodano po 4 [minuty]:

    Flaman11 napisał:
    cefaloid napisał:
    Tak na wypadek błędu w kodzie

    Uwaga słuszna lecz na przyszłość.
    Przecież to była uwaga na przyszłość. Po co to komentować?
  • #17
    maly.borkowo
    Poziom 15  
    cefaloid napisał:
    Rodzina się na pewno ucieszy, też zamiast spać będą klaskać i sprawdzać godzinę :D


    Dlatego wspomniałem o przycisku, bo skoro ma budzik to raczej stoi przy łóżku, a więc machnąć ręką nie problem :) A nawet zakładając, że mamy mikrofon w obudowie, wystarczy pewnie lekkie stuknięcie palcem o obudowę i powinno zadziałać ;) I wyeliminuje to konieczność stosowania większego przycisku (bo chyba taki mały i szukanie go przez sen jest niewygodne).

    :arrow: A gdyby tak zamiast tej diody oznaczającej załączenie alarmu zastosować kropkę ostatniego wyświetlacza? Owszem nie jest aż tak czytelne z daleka, ale chyba nie musi być a wydaje mi się, że już będzie to o te 4mA mniej prądu.. (czy nie? Głowy nie dam.)
  • #18
    Flaman11
    Poziom 17  
    cefaloid napisał:
    Czyli kompilator sam w sobie jest bezbłędny z samej definicji. Już rozumiem i dziekuję za uświadomienie.


    Jak każdy program może zawierać jakieś błędy, ale raczej to dotyczy nowych funkcji. Chyba nie powiesz, że MCS sprzedaje produkt posiadający jakieś funkcje, które nie działają? Po za tym jeżeli miałeś jakieś problemy i jesteś pewien, że to jest wina kompilatora, to od tego jest support i do tego darmowy, więc możesz zawsze do nich napisać, aby poprawili te błędy.

    Co do włącznika na klaśnięcie to raczej słaby pomysł. Musiałby być wyposażony w filtr środkowo-przepustowy, by wyświetlacz nie włączał się na każde "śmieci" lub na tyle małą czułość, by zredukować ilość dźwięków załączających wyświetlacze, ale trzeba już głośniej klaskać( coś za coś). Poza tym sam układ też pobierałby jakąś energię i co to za zegarek, który trzeba włączyć by zobaczyć godzinę. Osobiście gdybym miał już kombinować to zastosowałbym fotorezystor i sprzęgłbym go z godziną. Czyli jak się ściemnia to wyświetlacz świeci dużo słabszym światłem natomiast w dzień świeci jasno( godzina odpowiada za to, by wyświetlacz nie świecił jaśniej gdy np. włączymy światło).
  • #19
    cefaloid
    Poziom 32  
    Flaman11 napisał:
    cefaloid napisał:
    Czyli kompilator sam w sobie jest bezbłędny z samej definicji. Już rozumiem i dziekuję za uświadomienie.

    Jak każdy program może zawierać jakieś błędy, ale raczej to dotyczy nowych funkcji.

    Cieszę się iż jednak zmieniłeś zdane z "takich bredni to tu nie powinno być", oraz "To czy program się rozjeżdża, czy nie, to wyłącznie wina programującego, a nie kompilatora." :D

    Mimo wszystko na początek jest to najlepszy kompilator bo łatwo i przyjemnie wprowadza w świat mikrokontrolerów. W przypadku typowych procków i typowych funkcji jest dopracowany. A Winavr dopiero jak się dobrze poczuje o co chodzi.

    Dodano po 39 [minuty]:

    Flaman11 napisał:
    cefaloid napisał:
    Tak na wypadek błędu w kodzie

    Uwaga słuszna lecz na przyszłość. Mając jedynie uruchomione jedno przerwanie i w nim zawarty powyższy warunek nic takiego się nie stanie. Poza tym nawet, gdyby były uruchomione inne przerwania, to również się stosuję odpowiednie operacje by wyeliminować różnego rodzaju błędy, np. jak kolega pokazał lub np. zatrzymanie przerwań na czas obsługi innego przerwania, sposobów jest wiele.


    Otóz przyjrzałem się i jednak miałem rację - nawet w tak prostym kodzie jak tu przedstawiony może dojść do 'rozjechania się' zmiennej.

    Zobaczmy:

    W pętli głównej mamy:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Załózmy że M = 59, S = 59 oraz wcisnęliśmy przycisk ustawiania minuty.
    Więc wykonało się: Incr M
    Czyli teraz M = 60.
    I teraz, ZAMIN wykona się If M = 60 Then M = 0 przyszło przerwanie timera 2.

    A w przerwaniu mamy:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    I co? S zmieni się na 60 (bo Incr S), następnie zadziała pierwszy If.
    A więc S = 0 ale M = 61! Tak, nieprzewidziane 61, bo wywołalismy wartość 60 przez przyciskanie sobie przycisków.
    A więc od tego momentu aż do przekroczenia przez M wartości 255 zegarek głupieje a my kompletnie nie wiemy co zrobić.

    Taki prosty kod a się wywalił. A co jesli miał by kilka tysięcy linii? To dopiero trzeba analizować co sie może stać bo takie cyrki mogą się dziać częściej. Ja wiem że prawdopodobieństwo jest tu znikome ale jesnak jest. Dlatego poradziłem by sprawdzać czy zmienna jest większa a nie czy jest równa. Innym sposobem poradzenia sobie jest np wyłączenie timera 2 na czas ustawiania czasu.

    PS. To nie jest krytyka kodu zegarka bo jak pisałem jest fajny i przejrzysty, zwłaszcza jak na początkującego programistę. Ale zawsze mozna coś poprawić :D
  • #20
    baq1
    Poziom 13  
    Co do Bascoma mam podobne zdanie jak kolega cefaloid.

    Raz miałem przypadek gdzie miałem napisany program w Bascomie do pewnego urządzenia, ale po jakimś czasie okazało się że trzeba coś poprawić. Jako, że nie miałem zainstalowanego oprogramowania od MCS to pobrałem z ich strony najnowszą stabilną wersję kompilatora i zmieniłem parę drobnych rzeczy w programie i wrzuciłem do uC. Okazało się, że program kompletnie się rozjechał, nic nie działało tak jak należy. Wgrałem spowrotem oryginalną wersję programu i nadal to samo. Uznałem, że musi to być wina programatora albo samego uC, lub choćby układu w którym miał pracować. Straciłem kilkanaście godzin na szukaniu przyczyny i trochę pieniędzy na nowe uC, a wszystkiemu winny okazał się kompilator który w nowej wersji miał bugi kilka ze standardowych procedur nie działało.

    Zresztą wiadome jest że Bascom po prostu 'tak ma' i niektóre rzeczy mimo że w specyfikacji napisane jest innaczej po prostu nie działają. Osobiście nie tworzył bym w nim programu który miałby być czymś więcej niż prototypem czy zabawką.
  • #21
    aragog
    Poziom 10  
    Mieliście oczywiście rację co do zasilania bateryjnego po dobie działania wyświetlacze ledwo się świecą, i jestem zmuszony do dodania zasilacza.

    Przy okazji poprawiłem trochę kod i dziękuję za udzielenie kilku wskazówek.
  • #22
    fanatykstaroci
    Poziom 13  
    No z tymi bateriami przy takiej aplikacji to faktycznie słaby pomysł, choć można by wydłużyć czas pracy może poprzez pracę impulsową, czyli zaświecanie (bądź rozjaśnianie) co 1 sek na kilka ms. Choć podejrzewam, że mogłoby to grozić w nocy jakąś epilepsją :D
    Nie no.. zasilacz chyba będzie w tym wypadku najlepszym rozwiązaniem.

    Co do samego projektu, całkiem fajny jak na start. Co do mazaka, to znam Twój ból. Kiedyś swego czasu obchodziłem wszystkie ksera i punktu druku, by dać swoją kartkę, nikt nie chciał mi wydrukować bo to "pozaszablonowa kartka" - czyt za cienka. Pozostają koledzy tudzież firma w której odbywać się będzie praktyki :D

    Samo wykonanie oceniam dobrze, jak na początkującego. Moje pierwsze próby z elektroniką kończyły się na płytce, bez jakiejkolwiek obudowy, więc i do pokazywania się to nie nadawało :)

    Idź za ciosem i życzę dalszych sukcesów w tworzeniu projektów. A co do programowania proponuję mimo wszystko popróbować C, chociażby pisząc ten sam zegarek. Przyda się na pewno taka wiedza, a nie jest aż tak trudny jak to straszą :)
  • #23
    ufo000000
    Poziom 14  
    Proste że daj zasilacz, za koszt bateryjek nie naciągnie ci prądu w miesiąc tyle napewno.
  • #24
    bajer971017
    Poziom 9  
    Bardzo fajne urządzenie dla tych, którzy lubią pospać, a mają obowiązki (szkoła, praca etc.). Ale do rzeczy. Jak koledzy pisali powyżej przydałoby się zrobić zasilacz i wstawić filtr na wyświetlaczu. Jak dla mnie projekt bdb.
  • #25
    timon22332233
    Poziom 23  
    Jeszcze co do klaskacza: nawet jeśli nie jest używany przekaźnik układ też pobiera prąd z baterii. bezsensowny wydatek. Najlepiej dać akumulator i zasilacz-prostownik. Jak będziesz przenosił zegarek to wyjmujesz wtyczkę, i idziesz, a zegar korzysta w akumulatora. Tani Akumulator podtrzymuje zegar na +/- tyle co bateria.
  • #26
    ostol
    Poziom 13  
    a wystarczy sprawdzać
    Code:
    if m > 59 then

    Programiści.....