logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Zegarek z termometrem mega8

dumel111 21 Maj 2011 10:50 14469 32
REKLAMA
  • Zegarek z termometrem mega8

    Witam!

    Chciałbym zaprezentować konstrukcję, którą wykonałem w celu sprawdzenia się.
    Chciałem zobaczyć, czy po książce "Mikrokontrolery dla początkujących" p. Piotra Góreckiego, coś zostało mi w głowie. Zegarek powstawał ok. 2 dni, począwszy od schematu narysowanego w szkole na lekcji polskiego przez program napisany na historii. TIMER1 zwiększa licznik "sekundy" co 1 s.

    W konstrukcji początkowo miał być procesorek Attiny2313, lecz obsługa DS1820 zajmowała 95% pamięci flash, więc upchnięcie tam zegarka było niemożliwe.
    Dokładność wynosi 4 s na dobę, co daje 28 s na tydzień. Oczywiście można by było ją jeszcze poprawić, ale nie musi być tak dokładny jak zegar atmomowy.

    Schemat:

    Zegarek z termometrem mega8

    Jak widać - skomplikowany nie jest. Klasyczne zastosowanie czujnika Dallas DS18B20, dwa przyciski do ustawienia godziny, stabilizator 78M05 - wersja M, bo wystarczy tylko 100 mA.

    Zegarek z termometrem mega8 Zegarek z termometrem mega8 Zegarek z termometrem mega8 Zegarek z termometrem mega8

    Fragment programu, ustalającego początkową wartość timera:

    Kod: text
    Zaloguj się, aby zobaczyć kod



    W załączniku: program, płytka i plik hex.

    Pozdrawiam.
    Załączniki:
    • hex.rar (5.18 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • plytka.rar (4.87 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Desktop.rar (1.87 KB) Musisz być zalogowany, aby pobrać ten załącznik.

    Fajne? Ranking DIY
    O autorze
    dumel111
    Poziom 17  
    Offline 
    Specjalizuje się w: technik elektronik
    dumel111 napisał 318 postów o ocenie 179, pomógł 5 razy. Mieszka w mieście Białystok. Jest z nami od 2009 roku.
  • REKLAMA
  • #2 9529062
    gts1991
    Użytkownik obserwowany
    Posty: 1354
    Pomógł: 110
    Ocena: 100
    Bez zewnętrznego RTC i zabawa furjacjami WAITxx wątpię trochę dokładność tego układu mogłeś dać do X1 DS32khz i miał byś super dokładny generator bez zabawy ;)
  • #3 9529064
    maxiomax
    Poziom 12  
    Posty: 56
    Ocena: 3
    Bardzo Kolegę proszę o udostępnienie pcb i schematów. Dokładnie czegoś takiego szukałem : prostego, bez wodotrysków i na lcd. Powiedz jeszcze jaki to wyświetlacz.
    Pozdrawiam i dziękuję z góry za pliki z płytkami :)
  • #4 9529462
    michal-michalik
    Poziom 23  
    Posty: 724
    Pomógł: 14
    Ocena: 11
    Przynajmniej przerywania zatrudnij ;) Po zoptymalizowaniu trochę kodu powinno się zmieścić ;) Bo obsługa RTC razem z termometrem na 1-wire może być problemem (ilość pamięci).
    Wrzuć kod. Spróbuj dodać przerywanie i na tym zrobić zegar.

    Pozdrawiam

    Edit:
    waitus jest bez sensu, bo procek liczy takty zegara i na tej podstawie odmierza to opóźnienie. Problemem jest to, że reszta programu nie zawsze wykonuje się w tym samym czasie ;/
  • #5 9529478
    GSM
    Poziom 25  
    Posty: 543
    Pomógł: 72
    Ocena: 16
    gts1991 napisał:
    Bez zewnętrznego RTC i zabawy funkcjami WAITxx wątpię trochę w dokładność tego układu - mogłeś dać do X1 DS32khz i miałbyś super dokładny generator bez zabawy. ;)


    A jak przy zegarze procka 32KHz można obsługiwać 1wire?
    Okres sygnału zegarowego to ok 31us a jedynka logiczna na 1wire trwa poniżej 15us.
    Jakoś nie widzi mi się możliwość odmierzenia wtedy tak krótkiego czasu.

    Pozdrawiam,
    GSM
  • #6 9529485
    gts1991
    Użytkownik obserwowany
    Posty: 1354
    Pomógł: 110
    Ocena: 100
    A kto mówił o 1-wire nadal ? Pod I2C jest pełno czujników i programowo jest jeszcze prościej. ;)
  • #7 9529515
    dominon
    Poziom 18  
    Posty: 300
    Pomógł: 12
    Ocena: 262
    gts1991 napisał:
    Bez zewnętrznego RTC i zabawy funkcjami WAITxx wątpię trochę w dokładność tego układu - mogłeś dać do X1 DS32khz i miałbyś super dokładny generator bez zabawy. ;)

    Zgadzam się w zupełności z kolegą. Ze względu na fakt że w mikro kontrolerach zastosowane są rezonatory RC to dokładność ich częstotliwości jest bardzo zależna od temperatury pracy.
    Na dodatek basic'owe "Waitxx " jest wielce niedokładne.
    Skoro już zrobiłeś to na Atmega8 to można by się pokusić o użycie timera. To znacznie zoptymalizowało by program. Mógł byś dokładniej napisać o dokładności jaką uzyskałeś? Przy okazji mógł byś zrobić mini test i włożyć zegarek na dzień do lodówki i zobaczyć jaka będzie rozbieżność w dokładności działania.
  • REKLAMA
  • #8 9529518
    pier
    Poziom 24  
    Posty: 2444
    Pomógł: 40
    Ocena: 1891
    damian_elektryk napisał:

    Chciałem zobaczyć czy po książce "Mikrokontrolery dla początkujących" p. Piotra Góreckiego, coś zostało mi w głowie.

    Chyba jednak mało Kolega zapamiętał.
    W książce autor pisze wyraźnie aby jak najmniej używać poleceń wait. A kolega zrobił na nich Zegar! A od czego atmega ma timery?
  • #9 9529662
    McMonster
    Poziom 32  
    Posty: 1942
    Pomógł: 182
    Ocena: 57
    Zwykłem nie wypowiadać się w DIY, bo sam dopiero tworzę swój pierwszy projekt o wartości użytkowej i głupio mi pouczać kogoś, kto już sam coś wykonał, nawet jeśli projektowi brakuje sporo do doskonałości, ale tutaj jednak zrobię wyjątek. Tylko nie traktuj tego jako wytykanie błędów dla rozrywki, ale jako przydatne rady i pomysły na przyszłe projekty.

    Po pierwsze, tak jak napisali koledzy wyżej, timery. Wystarczyło podłączyć kwarc zegarkowy do pinów TOSC1/2, i ustawić jako źródło zegara dla samego timera (rdzeń może w takim przypadku działać z wbudowanego rezonatora z dowolną dostępną tam częstotliwością). Dokładność będzie wtedy duża. Zresztą to samo można było zrobić na ATTiny2313, zjadłoby mniej pamięci, lub przynajmniej poszukać Tiny4313, który ma 4 kB pamięci flash. Za to na Tiny2313 nie da się zrobić innej prostej rzeczy, czyli obsługi prostego czujnika LM35DZ, który wystarczy do pomiarów pokojowych, bo bez symetrycznego zasilania nie mierzy temperatur poniżej 4°C i wymaga tylko prostej obsługi ADC z obliczeniem temperatury z liniowej charakterystyki wyjściowej. W zamian można zastosować takiej samej wielkości, ale mniej popularne Tiny261. Ale i na to jest sztuczka, chociaż trochę przekombinowania, bo można wykorzystać timer 555 w odpowiedniam układzie z LM35DZ, mierzyć częstotliwość wyjściową pierwszego i sobie przeliczyć prostym wzorem, to tylko tak dla rzucenia pomysłem.
  • #10 9529670
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    Kolego, chyba nie chcesz powiedzieć, że czas odmierzasz przez programowe opóźnienia? To jakiś koszmar. Szczególnie w procesorze, w którym masz do tego celu dedykowane timery. Co do 1-wire - po co programowo odmierzać czas, skoro ATMega, podobnie jak każdy procesor wyposażony w UART ma semi-sprzętową obsługę 1-wire?
    No i przydałoby się dodać jakieś podtrzymanie zasilania, nawet na parę sekund, co zapobiegnie resetowaniu przy chwilowych zanikach zasilania, czy przypadkowym odłączeniu od sieci. I czasami przydaje się budzik, czyli przynajmniej jako opcja dodanie buzzera...
  • #11 9529675
    dumel111
    Poziom 17  
    Posty: 318
    Pomógł: 5
    Ocena: 179
    NIE NIE !! Przepraszam, mój błąd, źle napisałem. Oczywiście TIMER1 zwiększa licznik sekundy co 1s, a poleceniem waitus tylko go koryguję
  • REKLAMA
  • #12 9529683
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    Aha, na wejściu zasilacza nie widzę mostka Greata, pewnie zasilasz z gotowca dającego napięcie wyprostowane? Słusznie, jednak dla bezpieczeństwa dodałbym chociaż jedną diodę, nic nie kosztuje, a zabezpiecza przed odwrotną polaryzacją.

    Dodano po 1 [minuty]:

    damian_elektryk napisał:
    NIE NIE !! Przepraszam, mój błąd, źle napisałem. Oczywiście TIMER1 zwiększa licznik sekundy co 1s, a poleceniem waitus tylko go koryguję


    Jak go korygujesz? Od tego masz preskaler timera i np. tryb CTC, gdzie można precyzyjnie regulować długość impulsu, ew. masz też rejestry compare match.
  • #13 9529740
    dumel111
    Poziom 17  
    Posty: 318
    Pomógł: 5
    Ocena: 179
    Teraz wszystko jest już ok. Dziękuję za rady. Wywaliłem już to waitus.
    Pozdrawiam
  • REKLAMA
  • #14 9529865
    Manio95
    Poziom 21  
    Posty: 547
    Pomógł: 21
    Ocena: 128
    damian_elektryk napisał:


    W konstrukcji początkowo miał być procesorek Attiny2313, lecz obsługa DS1820 zajmowała 95% pamięci FLASH, więc upchnięcie tam zegarka było niemożliwe.

    No ciekawe, że mi się jakoś udało zrobić zegar+termometr na wyświetlaczach LED i Attiny2313 z DS1820 gdzie obsługa samych wyświetlaczy zajmowała około 50% pamięci.
    Konstrukcja jest pod adresem: http://www.manio95.elektroda.eu/zegartermometr-attiny2313wyswietlacze-7-seg/
  • #15 9529939
    dumel111
    Poziom 17  
    Posty: 318
    Pomógł: 5
    Ocena: 179
    ciekawe jakim cudem, bo ten ciag polecen do ds18b20 ktory jest w moim programie zajmuje po skompilowaniu kolo 1.8kB
  • #16 9529953
    gts1991
    Użytkownik obserwowany
    Posty: 1354
    Pomógł: 110
    Ocena: 100
    damian_elektryk napisał:
    ciekawe jakim cudem, bo ten ciag polecen do ds18b20 ktory jest w moim programie zajmuje po skompilowaniu kolo 1.8kB

    A wiesz że jedną rzecz można napisać na setki sposobów?
    A wiesz o różnych językach do programowania AVR? :P
  • #17 9529963
    dumel111
    Poziom 17  
    Posty: 318
    Pomógł: 5
    Ocena: 179
    Myślałem, że wciąż rozmawiamy o Bascomie ;)
  • #18 9530127
    MarianRe
    Poziom 11  
    Posty: 12
    Manio95 napisał:


    Coś mi się wydaje, że wyświetlacze są typu wspólna katoda (a nie WA - jak na schemacie i w wykazie elementów).

    Natomiast do kol. damian_elektryk można mieć prośbę o udostępnienie pliku po kompilacji (hex) - wersja Bascom-Demo ma - jak wiadomo - ograniczenia.
    Pozdrawiam.
  • #19 9530253
    Tranzystor_1992
    Poziom 16  
    Posty: 260
    Ocena: 3
    Widzę mnóstwo ekspertów...
    Po co zewnętrzne układy :?: Zrozumiałbym jeżeli konstruktor byłby przynajmniej uczniem technikum elektronicznego i miał już jakieś doświadczenie. A on dopiero rozpoczyna swoją przygodę z µC. Co prawda najlepszym rozwiązaniem byłaby tu ATMEGA8 z uruchomioną obsługą TIMERa2, który byłby asynchronicznie taktowany kwarcem 32kHz, a rdzeń byłby taktowany wewnętrznym generatorem RC. Ale jak na jego potrzeby to, to co zrobił jest wystarczające.

    Jeżeli jest co krytykować to tylko naiwność konstruktora, który podobnie jak ja dał się wciągnąć w BASCOMa (całe szczęście, że udało mi się od niego uwolnić). Wydaje mi się, że powinieneś zainteresować się kursami C/C++. Jest to język o wiele bardziej przyjemny i przynajmniej możesz panować nad całym procesorem. Najlepiej poszukaj sobie w internecie różnych kursów. Odpal WinAVR i się poucz programować w C. W przyszłości, gdy będziesz miał ochotę bez problemu przesiądziesz się na coś "mocniejszego" np. ARMy. A tu dopiero zaczyna się prawdziwa magia :D

    Pozdrawiam ;)
  • #20 9530360
    Manio95
    Poziom 21  
    Posty: 547
    Pomógł: 21
    Ocena: 128
    MarianRe napisał:
    Manio95 napisał:


    Coś mi się wydaje, że wyświetlacze są typu wspólna katoda (a nie WA - jak na schemacie i w wykazie elementów).


    Tak, przepraszam za pomyłkę-jakoś anodę z katodą pomyliłem. Oczywiście, wyświetlacze z wspólną katodą tam mam.

    damian_elektryk napisał:
    Myślałem, że wciąż rozmawiamy o Bascomie ;)

    Mój program został napisany w Bascomie

    Tranzystor_1992 napisał:
    Widzę mnóstwo ekspertów...
    Po co zewnętrzne układy :?: Zrozumiałbym jeżeli konstruktor byłby przynajmniej uczniem technikum elektronicznego i miał już jakieś doświadczenie. A on dopiero rozpoczyna swoją przygodę z µC.

    Sam dopiero się uczę i nie jestem jeszcze uczniem technikum elektronicznego-(mam nadzieję, że się tam dostanę bo to już w tym roku ):D Kod do obsługi czujnika pochodzi z elektrody, a zliczanie czasu zrealizowałem na timerze.

    Co do projektu przedni panel mógłby mieć jakiś kolor.
  • #21 9530509
    dumel111
    Poziom 17  
    Posty: 318
    Pomógł: 5
    Ocena: 179
    Dzięki za rady :). Na razie jestem w połowie gimnazjum, i swoją przygodę z programowaniem zacząłem od Bascoma, a jak go zrozumiem do końca to zacznę uczyć się C.

    Pozdrawiam
  • #22 9530868
    Tranzystor_1992
    Poziom 16  
    Posty: 260
    Ocena: 3
    Jeżeli chcesz mieć ciągle pod górkę to ucz się BASCOMa, nauczysz się wtedy obchodzić błędy języka, kompilatora itp. Jeżeli chcesz się nauczyć programować mikrokontrolery na poważnie to dobrze radzę, zostaw BASCOMa, przerzuć się od razu na C. Nie jest to trudne, wystarczy parę godzin, żeby dobrze poznać C i coś w nim napisać. Zobaczysz wtedy jak nieograniczone masz możliwości, jak kod nagle okaże się o połowę mniejszy. Jeżeli nie wierzysz mojej osobie, która programuje od paru ładnych lat. Pisała obsługę FATa, kart MMC/SD/SD-HD, kolorowych TFT i innych tego typu rzeczy, to zapytaj kolegów trochę starszych, którzy ukończyli politechnikę i też mają wyrobione zdanie na temat BASCOMa i C.

    Pozdrawiam ;)
  • #23 9531948
    Komar91
    Poziom 18  
    Posty: 364
    Pomógł: 5
    Ocena: 48
    Mam pytanie odnośnie podłączenia atmegi. Kiedyś osobno składałem na płytce stykowej termometr i zegarek z tej książki i tam na schemacie nie były podłączone linie AREF i AVCC czy one są konieczne czy nie?
  • #24 9531992
    Tranzystor_1992
    Poziom 16  
    Posty: 260
    Ocena: 3
    Z tym zapytaniem odsyłam do noty katalogowej ATMEGi8, a dokładniej na stronę 6. Tutaj znajdziesz Link. I tam pisze:

    Odnośnie nóżki AVCC:
    Cytat:
    AVCC is the supply voltage pin for the A/D Converter, Port C (3..0), and ADC (7..6). It should be
    externally connected to VCC, even if the ADC is not used. If the ADC is used, it should be connected
    to VCC through a low-pass filter. Note that Port C (5..4) use digital supply voltage, VCC.


    Odnośnie nóżki AREF:
    Cytat:
    AREF is the analog reference pin for the A/D Converter.


    A co to znaczy :?: Oznacza to, że nóżka AVCC powinna być zewnętrznie podłączona do VCC, jeżeli ADC nie jest użyty. A jeżeli jest użyty to powinna być podłączona do VCC przez filtr dolnoprzepustowy. A nóżka AREF powinna być podłączona wyłącznie wtedy, kiedy korzystamy z ADC. A w jaki sposób to proszę zajrzeć na opis układu ADC. Tam jest dalszy ciąg :D
  • #25 9532079
    Komar91
    Poziom 18  
    Posty: 364
    Pomógł: 5
    Ocena: 48
    A czy w tym układzie korzystamy z ADC. Ja z elektroniką zaczynam i zaawansowany to nie jestem
  • #26 9532394
    GSM
    Poziom 25  
    Posty: 543
    Pomógł: 72
    Ocena: 16
    Nie, w tym nie korzystamy.


    Pozdrawiam,
    GSM
  • #27 9532654
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    damian_elektryk napisał:
    Na razie jestem w połowie gimnazjum, i swoją przygodę z programowaniem zacząłem od Bascoma, a jak go zrozumiem do końca to zacznę uczyć się C.

    Jak na tak młody wiek, to projekt niczego sobie - gratuluję!
    A co do drugiej części tego zdania to właśnie zła droga, bo nabędziesz złych nawyków i będziesz miał trudniej ucząc się C.
  • #28 9532904
    Komar91
    Poziom 18  
    Posty: 364
    Pomógł: 5
    Ocena: 48
    Czyli jak rozumiem wystarczy połączyć wyjście AVCC z VCC i to wystarczy

    --------------------------------

    A mam pytanie czy jak zaprojektuję płytkę według tego schematu i załaduje program autora to układ ruszy?

    schemat w pdf
    Załączniki:
    • termo-zegarek.pdf (15.02 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #29 9532905
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    atek000 napisał:
    Komar91 - w tym układzie nie musimy podłączać AREF i AVCC, bo ADC nie jest wykorzystywany.

    Wybacz kolego, że się wtrącę, ale to nieprawidłowa podpowiedź.
    Radzę czytać datasheety dokładniej, albo w ogóle je czytać.

    Datasheet str. 6 napisał:
    AVCC is the supply voltage pin for the A/D Converter, Port C (3..0), and ADC (7..6). It should be externally connected to VCC, even if the ADC is not used.


    A koledze Komar91 radzę zadawać takie pytania w odpowiednim forum: https://www.elektroda.pl/rtvforum/forum12.html
    bo jak widać poziom niektórych osób tutaj się wypowiadających jest co najmniej niski.

    A tutaj teoria dot. prawidłowego podłączania niezbędnych pinów:
    http://mikrokontrolery.blogspot.com/2011/04/minimalne-podlaczanie-pinow.html
  • #30 9533968
    dumel111
    Poziom 17  
    Posty: 318
    Pomógł: 5
    Ocena: 179
    Jak by ktoś nie posiadał pełnej wersji BASCOM-AVR, to wrzuciłem plik hex.

    Pozdrawiam

Podsumowanie tematu

✨ Użytkownik zaprezentował projekt zegarka z termometrem oparty na mikrokontrolerze ATmega8, który powstał w oparciu o książkę "Mikrokontrolery dla początkujących". Zegarek wykorzystuje czujnik DS18B20 do pomiaru temperatury oraz timer do odmierzania czasu. W dyskusji poruszono kwestie dotyczące dokładności zegara, która wynosi 4 sekundy na dobę, oraz problemy z pamięcią przy użyciu procesora Attiny2313. Uczestnicy forum sugerowali optymalizację kodu, wykorzystanie timerów oraz zewnętrznych układów RTC dla poprawy dokładności. Wskazano również na konieczność unikania poleceń wait w programowaniu. Użytkownik przyznał się do błędów w kodzie i obiecał poprawić projekt, a także podzielił się plikiem hex z programem.
Wygenerowane przez model językowy.
REKLAMA