Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Zegar termometr ATtiny 2313

Oxiden17 03 Feb 2016 23:21 10371 28
Optex
  • Zegar termometr ATtiny 2313

    Zegar + termometr DS18B20 - ATtiny 2313 - LED

    Wykonany na ATtiny 2313. Znane podobne zegary oparto na Atmega 8
    i LCD. Program napisany w Bascom. Pracuje bez zarzutu.
    Zegar termometr ATtiny 2313 Zegar termometr ATtiny 2313 Zegar termometr ATtiny 2313 Zegar termometr ATtiny 2313 Zegar termometr ATtiny 2313 Zegar termometr ATtiny 2313
    Zegar termometr ATtiny 2313

    Opis układu:
    Jest to prosty zegar z termometrem, łatwy w obsłudze i tani. Wyświetlacz LED pozwala na podgląd z odległości kilku metrów. Czas wyświetlany jest w formacie 24-godzinnym. Przy wskazaniach godzin mniejszych od 10 gaszony jest wyświetlacz oznaczony na rysunku jako W1000 n.p 9:01. Godziny ustawiane są przyciskiem S1 z zakresu 0-23, a minuty przyciskiem S2 w zakresie od 0-59. Na schemacie opisane odwrotnie, ale to bez znaczenia bo jeden ustawia godziny, a drugi ustawia minuty.
    Przy naciśniętym i przytrzymanym przycisku następuje automatyczne przemiatanie cyfr. Możliwe jest ustawianie cyfr w sposób impulsowy. Każdorazowe ustawianie minut (tylko) zeruje licznik sekund. Zerowanie liczby sekund następuje także o godzinie 0:00. Kropka zegara świeci non-stop. Taki wariant wybrałem również ze względu na oszczędność pamięci procesora. Oba przyciski umieściłem w górnej pokrywie po stronie wyświetlaczy.
    Dokładność wskazań testowałem porównując zmianę minut na zegarze komputera ze zmianą minut na moim zegarze startując swój czasomierz od zera na sekundniku zegara komputera. Po tygodniu różnica wynosiła 1s. Wiem, że nie jest to najlepszy sposób na sprawdzanie zegara, ale nawet gdyby różnica byłaby większa to zegar spełnia moje wymagania.
    Mierzoną temperaturę z zakresu 0-99 stopni Celsjusza wyświetlają wyświetlacze W100 i W10 ze znakiem stopnia na W1. Przy temp. niższej od 10 stopni Celsjusza zero nie jest wygaszone n.p 08° (oszczędzanie pamięci µP). Ponadto urządzenie z założenia ma służyć jako termometr pokojowy (10° - 40°).
    Czujnik temperatury DS18B20 umieściłem na przewodzie ~10cm. Pierwotnie planowany był w obudowie, jednakże po testach wynik okazał się być mocno zafałszowany. Temperatura wyświetlana jest jako liczba całkowita n.p 34°, ale można po zmianie kodu wyświetlić tak: 34.7°. Mnie taka dokładność nie jest potrzebna. Tolerancja ± 1°C w moim przypadku jest zadowalająca. Przy temp.
    przykładowo 23°C może wyświetlić 22°C lub 24°C albo właściwą temperaturę.
    Przy braku lub uszkodzeniu czujnika DS18B20 wyświetlany jest "napis" Er° do czasu usunięcia awarii.
    Do testów porównawczych używałem termometru spirytusowego. Wyniki pomiarów były zbliżone. Wskazania różniły się nawet o 2°C w zależności od wielkości temperatury. Biorąc pod uwagę tolerancję obu termometrów jest to możliwe, ale jak napisałem wyżej mnie to pasuje. Aktualna godzina wyświetlana jest naprzemiennie z temperaturą przez 6 s dla godziny i 3 s dla temperatury.
    Układ wykonany metodą "szycia" na płytce uniwersalnej w wersji przewlekanej. Wyświetlacze i przyciski z płytką połączone przewodami. Wyświetlacz lekko odchylony ku tyłowi umieściłem za filtrem czerwonym czoła obudowy. Nachylenie pozwala na lepszy odczyt wartości. Płytkę, wyświetlacze i przyciski umieściłem w obudowie Z5 usuwając środkowy kołek mocujący.
    Od spodu obudowy pod wyświetlaczami umieściłem dwie nóżki by dodatkowo nachylić wyświetlacze. Do zasilania użyłem zasilacza wtyczkowego 12VDC 1,2A.

    Elementy i połączenia oznaczone gwiazdką na schemacie nie występują.
    W zasilaczu na płytce zamiast diody prostowniczej użyłem mostka Gretza.

    Celem uzupełnienia opisów sterowania segmentów wyświetlaczy:
    PORTB.0 - a; PORTB.1 - b; PORTB.2 - c; PORTB.3 - d; PORTB.4 - e; PORTB.5 - f;
    PORTB.6 - g; PORTB.7 - kropka.

    Spis elementów:
    1. obudowa Z5 - 1 szt.
    2. filtr czerwony do obudowy Z5 - 1 szt.
    3. zasilacz wtyczkowy 12V DC / 1,2A - 1 szt.
    4. mostek Gretza 2A / 700V - 1 szt.
    5. kondensator elektrolityczny 470 µF/25V - 1 szt.
    6. kondensator elektrolityczny 47 µF/16V - 1 szt.
    7. kondensator odsprzęgający 100 nF - 4 szt.
    8. stabilizator LM7805 - 1 szt. dodano: lepszy LM 1117-5.0
    9. procesor ATtiny 2313 - 1 szt.
    10. czujnik temperatury DS18B20 - 1 szt.
    11. tranzystor BC557 - 4 szt.
    12. czterosegmentowy wyświetlacz LED - 1 szt.
    13. kwarc niski 4 MHz - 1 szt.
    14. kondensator ceramiczny 33p - 2 szt.
    15. rezystor 100R - 8 szt.
    16. rezystor 3k3 - 4 szt.
    17. rezystor 4k7 - 1 szt.
    18. rezystor 10k - 1 szt.
    19. mikroswitch - 2 szt.

    Program napisałem w BASCOM-e.

    Cool? Ranking DIY
    About Author
    Oxiden17
    Level 12  
    Offline 
    Oxiden17 wrote 110 posts with rating 127. Live in city na Pomorzu. Been with us since 2009 year.
  • Optex
  • #2
    janek1815
    Level 38  
    Wyświetlacz nie miga przy komunikacji z czujnikiem temperatury?
  • #3
    Anonymous
    Anonymous  
  • #4
    Oxiden17
    Level 12  
    Wyświetlacz nie miga przy komunikacji z czujnikiem temperatury.
    Jak zabraknie "fazy" to widzę ciemność...ciemność widzę! Nie planowałem zasilania awaryjnego.
    Ponowne ustawienie aktualnej godziny po powrocie "fazy" to kwestia sekund.
  • #5
    Anonymous
    Anonymous  
  • #6
    michał_bak
    Level 20  
    R-MIK wrote:
    A jak "fazy" zabraknie to co?

    To prawda, dlatego gdy bierzemy się za zegarek, robimy to zgodnie ze sztuką.
    Bierzemy dowolny układ RTC zasilany baterią albo odpowiednim kondensatorem.
  • #7
    Anonymous
    Anonymous  
  • #8
    Oxiden17
    Level 12  
    Jeśli chodzi o ppm (parts per milion) to nie wiem. Sam kwarc konstrukcyjnie ma około 50ppm.
    Zgadzam się z kolegą R-MIK, że dokładny zegar lepiej jest zbudować na Atmega 8 z wyżej wymienionym trybie Timera 2. Nie zależało mi na bardzo dokładnych wskazaniach ani na podtrzymaniu awaryjnym. Te, które uzyskałem są moim zdaniem na dobrym poziomie.
    Dowolny RTC, chociaż z potrzymaniem zasilania też niekiedy trzeba korygować trymerem i nie zawsze do końca z pozytywnym skutkiem.
    A co do sztuki, to ona właśnie stawia na różnorodność i kreatywność. Jednak są tacy, którzy nie wychodzą poza ramy standardu przez co nie tworzą postępu, a obowiązujące "tak ma być" jest dla nich normą. Wszystko zależy od tego, co kto chce i jak chce. Ja chciałem właśnie tak.
    Jak wspomniałem jest to prosty projekt. Zrobiłem tylko dlatego, że była taka potrzeba. Układ spełnia założone moje wymagania. Poza tym chciałem by był opracowany na Tiny 2313.
    Można było pokusić się o podtrzymanie samego procesora, ale n.p bateria nie wystarczyła by na długo, a nie można przecież uśpić procesora (odliczanie czasu). Prócz tego za mało pamięci.
    Pamięć wykorzystana w 98%.
  • Optex
  • #9
    Anonymous
    Anonymous  
  • #10
    Oxiden17
    Level 12  
    O układ DS3231 lekko zahaczyłem za sprawą kolegi mirrek-a. Polecał zastosowanie układu dla podobnych projektów ze względu na najlepsze parametry ze znanych układów zegarkowych. Pomyślę o proponowanym rozwiązaniu uśpienia procka.

    W pętli głównej procesor nie robi nic.
    *************************************
    Do

    Loop
    End
    *************************************
    Nie zastosowałem nigdzie w programie polecenia Wait ani Delay. Dokładność odmierzania czasu poleceniem n.p Wait jest niewielka i wstrzymuje wykonywanie innych zadań tylko liczy czas. Chociaż projekt nie odmierza bardzo dokładnie czasu, jednakże zdecydowanie te polecenia odrzuciłem. Tak C nie jest tak "pamięciożarłoczne" jak Bascom. Pierwotnie w projekcie przewidywałem czujkę ruchu typu PIR do czasowego świecenia wyświetlaczy.
  • #11
    Anonymous
    Anonymous  
  • #13
    Gizmoń
    Level 28  
    Oxiden17 wrote:
    Można było pokusić się o podtrzymanie samego procesora, ale n.p bateria nie wystarczyła by na długo, a nie można przecież uśpić procesora (odliczanie czasu).


    Też zrobiłem zegar na ATtiny2313 ale właśnie z podtrzymaniem. Po wykryciu zaniku zasilania mikrokontroler wyłącza wszystko co zbędne i zmniejsza sobie taktowanie, pozostawiając jedynie przerwania co sekundę w których mierzy upływ czasu i sprawdza stan zasilania. Przez resztę czasu "śpi" w trybie "idle" (nie można go uśpić głębiej bez zatrzymania liczników). Przy takim rozwiązaniu kondensator 18mF wystarczy na pracę przez jakieś 12 minut, czyli większość przerw w dostawie prądu.
  • #14
    dondu
    Moderator on vacation ...
    R-MIK wrote:
    Oxiden17 wrote:
    O układ DS3231 lekko zahaczyłem (...)

    Cenę sprawdziłeś?

    No właśnie, bezsensem jest korzystanie z takich układów, skoro mamy kwarce 32,768kHz oraz Timer2 w trybie asynchronicznym.

    R-MIK wrote:
    Na zwykłym kwarcu zegarkowym faktycznie. Mnie sie udało ustawić +/-1 sek./mieś. ale jak się zmieniła pora roku, co za tym idzie średnie temperatury w domu, to się rozjechał i trzeba było ponownie trymować ...

    Zawsze można dodać termistor za kilkadziesiąt groszy i trochę popracować nad tym :)

    Generalnie dbanie o to, by prosty mało istotny zegar jak opisany w tym temacie był dokładniejszy niż kilka sekund na miesiąc jest bezcelowe, bo i tak w ciągu kilku miesięcy, czy roku będzie pewnie odłączony od zasilania.

    Poza tym można projekt opracować tak, by w każdej chwili za pomocą jednego przycisku można dokonywać kalibracji względem wybranego wzorca.
  • #15
    Oxiden17
    Level 12  
    Ceny układu DS3231 jeszcze nie sprawdziłem. Niestety, Timer 1 nie pracuje w trybie CTC, chociaż mógłby. Przy pisaniu programu posiłkowałem się programem mkAVR CALCULATOR gdzie w zakładce narzędzia znajduje się podprogram AVR Timer Kalkulator. Na podstawie wyniku doszedłem do wniosku, że w trybie NORMAL zegar spełni stawiane przed nim wymagania. Dla 16-bitowego timera procesora Tiny 2313 pracującego w trybie CTC lub pracującego w trybie NORMAL odchyłki są minimalne. Układ zasilany jest z sieci 230V AC. Powtarzam, nie zakładałem w projekcie zasilania awaryjnego! Było to celowe działanie! Taki miał być projekt!
    Kolego Gizmoń, dziękuję za wypowiedź, lecz to jest zegar z termometrem i trzeba wziąć pod rozwagę pojemność pamięci procesora oraz wielkość wsadu. To o czym kolega napisał jest słuszne i godne pochwały, ale ja określiłem swoje założenia do mojego projektu. Pisałem wcześniej o wielkości wsadu oraz o pewnych ograniczeniach z tym związanych.
    Kolego janek1815, niebawem wkleję plik, ale z rozszerzeniem hex lub bin.

    Dziękuję wszystkim za dotychczasowe wypowiedzi.
  • #16
    dondu
    Moderator on vacation ...
    Oxiden17 wrote:
    Niestety, Timer 1 nie pracuje w trybie CTC, chociaż mógłby.

    Timer1 może pracować w tym trybie.

    Timer2 - do takich projektów należy wybierać te mikrokontrolery AVR, które mają Timer2 pracujący w trybie asynchronicznym.
  • #17
    janek1815
    Level 38  
    Hex lub bin to sobie daruj. Ja nie jestem zainteresowany ponieważ nie mam zamiaru powielać tej konstrukcji. Jeśli możesz to wyrzuć z programu obsługę zegara zostaw sam termometr i go zamieść jeśli oczywiście nie ma żadnych jaśniejszych segmentów podczas pomiaru temperatury. Producenci sterowników do kotłów mają z tym problem i co jakiś czas jest drobny błysk na wyświetlaczu więc chciałbym zobaczyć jak to zrobiłeś. Jeśli to tajemnica no cóż rozumiem. W końcu to Twój trud włożony w te konstrukcje.
  • #18
    Oxiden17
    Level 12  
    Sprawdziłem cenę układu DS3231. Wynosi 10 zł. lub niewiele więcej plus przesyłka.
    Jako zegar sprawdza się znakomicie. Szczerze polecam! Technologia naszych czasów.Piszę o tym na podstawie wpisów osób, które wykorzystały ten układ do swoich projektów.
    Kolego dondu, czytałem wiele artykułów, które wyszły spod Twojego pióra.
    Szacunek wielki za ogromną wiedzę i za sposób jej przekazania. W tej opinii nie jestem osamotniony. Myślę, że sarkazm nie doda koledze szacunku. Miast tego od tak mądrych ludzi my maluczcy oczekujemy porad i inspirujących wskazówek.
    W istocie projekt można opracować na wiele różnych sposobów. Rzeczywiście tak mało istotny projekt zegara i tu dodam z termometrem jest na tyle dokładny by kilka sekund różnicy nie decydowały o jego przydatności. Każdy zegar kiedyś odłączą od zasilania albo wyczerpie się alternatywne źródło zasilania.
    Pisząc, że Timer 1 nie pracuje w trybie CTC, to odpowiedź na pytanie kolegi
    R-MIK o konfiguracji Timera 1. O zastosowaniu odpowiedniego mikrokontrolera
    do tego typu projektów pisał wcześniej również kolega R-MIK. Czyżby kolega nie czytał wcześniejszych postów?
  • #19
    dondu
    Moderator on vacation ...
    Oxiden17 wrote:
    Kolego dondu, czytałem wiele artykułów, które wyszły spod Twojego pióra.
    Szacunek wielki za ogromną wiedzę i za sposób jej przekazania. W tej opinii nie jestem osamotniony. Myślę, że sarkazm nie doda koledze szacunku. Miast tego od tak mądrych ludzi my maluczcy oczekujemy porad i inspirujących wskazówek.

    Kompletnie źle odebrałeś co napisałem. Podaję tylko wskazówki i nie oceniam negatywnie Twojego projektu, czy tego co piszesz. Proszę byś pod takim kątem patrzył na moje wypowiedzi. :)

    Oxiden17 wrote:
    Pisząc, że Timer 1 nie pracuje w trybie CTC, to odpowiedź na pytanie kolegi R-MIK o konfiguracji Timera 1.

    OK.

    Oxiden17 wrote:
    O zastosowaniu odpowiedniego mikrokontrolera do tego typu projektów pisał wcześniej również kolega R-MIK. Czyżby kolega nie czytał wcześniejszych postów?

    Zgadza się, nie przeczytałem wszystkich.
  • #20
    Oxiden17
    Level 12  
    Zwracam się do kolegi janek1815.

    Piszesz w swoim imieniu czy w imieniu producentów sterowników?

    Jeśli w swoim imieniu odpowiem tak:
    - mój program nie wyróżnia się od innych podobnych,
    - przeglądałem forum i znalazłem wiele wypowiedzi osób, które przedstawiły podobny problem i sposób na jego rozwiązanie, naprawdę warto poczytać.

    Jeśli w imieniu producentów to problem rozwiążą zlecając osobom kompetentnym oprogramowanie sterowników i odpowiednio wynagrodzą, a takie osoby wypowiadały się już na tym forum.
  • #21
    janek1815
    Level 38  
    Ja dałem przykład tylko. Posiadam w domu trzy sterowniki każdy z innej firmy i wszystkie mają ten sam problem. Wątpię aby jakakolwiek firma stosowała u siebie przy produkcji jakichkolwiek sterowników oprogramowanie bascom. No ale może się mylę.
  • #22
    Anonymous
    Anonymous  
  • #23
    dondu
    Moderator on vacation ...
    R-MIK wrote:
    Ma sens jeśli kluczowe znaczenie ma dokładność.

    Oj, przecież napisałem:

    dondu wrote:
    Timer2 - do takich projektów należy wybierać te mikrokontrolery AVR, które mają Timer2 pracujący w trybie asynchronicznym.

    Generalnie dbanie o to, by prosty mało istotny zegar jak opisany w tym temacie był dokładniejszy niż kilka sekund na miesiąc jest bezcelowe, bo i tak w ciągu kilku miesięcy, czy roku będzie pewnie odłączony od zasilania.

    Poza tym można projekt opracować tak, by w każdej chwili za pomocą jednego przycisku można dokonywać kalibracji względem wybranego wzorca.

    co autor projektu potwierdził:

    Oxiden17 wrote:
    Rzeczywiście tak mało istotny projekt zegara ... jest na tyle dokładny by kilka sekund różnicy nie decydowały o jego przydatności. Każdy zegar kiedyś odłączą od zasilania albo wyczerpie się alternatywne źródło zasilania.
  • #24
    Anonymous
    Anonymous  
  • #26
    michał_bak
    Level 20  
    Oxiden17 wrote:
    Każdy zegar kiedyś odłączą od zasilania albo wyczerpie się alternatywne źródło zasilania.

    Oczywiście, że tak nie jest. Jeżeli zastosujemy układ RTC z dodatkowym zasilaniem bateryjnym, to bateria wyczerpie się pod warunkiem, że zegar będzie pozbawiony zasilania przez parę lat.
    Tak na marginesie to dyskutowanie o wzroście kosztów jest pozbawione sensu. Sama praca włożona w zaprojektowanie i wykonanie płytki jest więcej warta niż zegarek z hipermarketu. 10 zł więcej czy mniej nie stanowi w różnicy.
  • #27
    xamrex
    Level 28  
    Oxiden17 wrote:
    Przy temp. niższej od 10 stopni Celsjusza zero nie jest wygaszone n.p 08° (oszczędzanie pamięci µP).

    Może mi ktoś wyjaśnić w jaki sposób jest oszczędzana ta pamięć uP?
    Chyba autor miał coś innego na myśli?
  • #28
    Oxiden17
    Level 12  
    Kolega R-MIK nie wspomniał o najdokładniejszym zegarze na Ziemi, mianowicie o pulsarowym zegarze w Gdańsku.
    Kolego janek1815, pisałem o oprogramowaniu, nie o konkretnym języku programowania.
    Czytajcie proszę uważniej moje posty.
    Zastanawiam się, dokąd zmierzamy w tej dyskusji. Czy dyskusja jest na temat ?
    Nie jest to mój pierwszy zegar. Były zegary z alarmem, z budzikiem, z pozytywką, na LED-ach, LCD, modułach rtc, atmegach i t.d. Jest pierwszym, który przedstawiłem. Chciałem wywołać dyskusję, czy warto jeszcze budować tego typu proste urządzenia gdy mamy do dyspozycji rozwiniętą technologię?
    Czy tam, gdzie wystarczy coś prostego ładować bardziej zaawansowane projekty?

    Dodano po 39 [minuty]:

    Pisząc o oszczędzaniu pamięci chciałem by program nie przekroczył 2kB, nie w znaczeniu - "nie używać bo się zniszczy".

    Dopisałem do kodu wygaszanie zera dziesiątek temperatury. Teraz przy wartości temperatury mniejszej od 10°C, np. 3°C wyświetla 3° (bez zera z przodu) o czym pisałem wcześniej oraz zmieniłem sposób wyświetlania temperatury. Teraz wyświetla n.p. 24°C

    Na płytce testowej:

    Zegar termometr ATtiny 2313
    Zegar termometr ATtiny 2313 Zegar termometr ATtiny 2313

    Gdyby kogoś zainteresowała budowa zegara na DS3231 i Atmega8 w Bascom-ie polecam srtonę kaktusa.pl
  • #29
    Miroch 19
    Level 12  
    Witam. czy można się podzielić kodem źródłowym do zegarka ?