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 na AT89S52 w C: dokładność timera i optymalizacja kodu 2,9 KB

bolcio 12 Kwi 2007 21:37 1884 6
REKLAMA
  • #1 3781715
    bolcio
    Poziom 12  
    Posty: 61
    Pomógł: 3
    Ocena: 6
    Kilka dni temu postanowiłem przyswoić sobie programowanie mikrokontrolerów w języku C i oto efekt mojej pracy. Mając pod ręką AT89S52 i wyświetlacz (2x20) zrobiłem prosty zegarek z możliwością przestawiania go za pomocą czterech klawiszy. W załączniku znajduje się program wraz z dwiema bibliotekami (jedna do obsługi wyświetlacza LCD, druga do obsługi quasiklawiatury) oraz krótki filmik przedstawiający zasadę działania. Nie jest to wersja finalna, będę jeszcze nad nią pracował. Kompilacji dokonałem przy pomocy pakietu RIDE.

    Pomiar czasu oparty jest o przepełnianie timera (co 50 ms przy rezonatorze kwarcowym 12 MHz). Nie wiem na ile ten sposób jest dokładny. Nie wiem co więcej napisać... W razie wątpliwości proszę pisać, chętnie odpowiem.

    Po kompilacji program zajmuje ok. 2,9 KB, czy to dużo jak na taki prosty projekt? Chętnie przeczytam Wasze wskazówki lub uwagi.

    PS. Wiem, że podobnych tematów jest sporo, ale od tego głowa nie boli… Sam przejrzałem ich bardzo dużo zanim usiadłem do programowania…
    Załączniki:
    • PICT0001.avi (2.74 MB) Musisz być zalogowany, aby pobrać ten załącznik.
    • zegar.rar (3.61 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 3782984
    Bigfoot
    Poziom 25  
    Posty: 982
    Pomógł: 74
    Ocena: 13
    Wszystko fajnie ladnie ale co wtedy gdy stracisz na chwile zasilanie albo uklad sie zresetuje z jakiejs innej przyczyny? Wtedy trzeba ustawiac godzine od nowa a to przekresa ten zegarek z praktycznego zastosowania. Uzyj przwdziwego RTC a wtedy pozbedziesz sie zarowno tego problemu jak i problemu wiekszej niedokladnosci w Twoim ukladzie niz z dedykowana kostka.

    BF
  • REKLAMA
  • #3 3783086
    yego666
    Poziom 33  
    Posty: 2175
    Pomógł: 239
    Ocena: 564
    Bigfoot napisał:
    Wszystko fajnie ladnie ale co wtedy gdy stracisz na chwile zasilanie albo uklad sie zresetuje z jakiejs innej przyczyny? Wtedy trzeba ustawiac godzine od nowa a to przekresa ten zegarek z praktycznego zastosowania. Uzyj przwdziwego RTC a wtedy pozbedziesz sie zarowno tego problemu [...]
    BF
    No a co jesli spadnie na zegar z RTC cegla w drewnianym kosciele ? tez do bani. Uzyj kasy pancernej jako obudowy zegara.

    Zarty zartami, ale nie ma takiej metody by sie zabezpieczyc przed wszystkimi dopustami losu.

    U mnie zastosowalem lampki NIXIE ( dla estetyki ), procesor 89C2051 ( wystarcza ) oraz odbiornik DCF . Nawet jesli zniknie zasilanie, to mam podtrzymanie na malym akumulatorku. Procesor czerpie jakis 1mA pradu, wiec na dobe wystarcza. A jesli nie to zaraz zaciaga nowy czas z powietrza i z glowy.
    Drozszym rozwiazaniem jest uzycie modulu zegara GPS, ale za to jaki bajer :)

    Wydaje mi sie, ze Kolega chcial po prostu pokazac nam, ze cos robi, a to nalezy pochwalic, a nie krytykowac.

    Brawo, mnie sie podoba, mimo iz nie ma "Prawdziwego RTC".
    Pozdrawiam, yego
  • REKLAMA
  • #4 3783315
    bolcio
    Poziom 12  
    Posty: 61
    Pomógł: 3
    Ocena: 6
    Dzięki za uwagi. Docelowo będzie jakiś RTC, właśnie rozglądam się za jakimś tanim elementem tego typu. Jeżeli chodzi o dokładność mojego rozwiązania to jest ona tragiczna. Od wczoraj zegar spieszy się o prawie sekundę, więc jest to kolejny argument przemawiający za RTC. A co możecie powiedzieć o rozmiarze programu? Czy 2,9 KB to dużo jak na takie gówienko? Może powinienem bardziej przyłożyć się do optymalizacji kodu?
  • REKLAMA
  • #5 3783888
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    bolcio napisał:
    ... Czy 2,9 KB to dużo jak na takie gówienko? Może powinienem bardziej przyłożyć się do optymalizacji kodu?

    Kolego :!:
    2.9kB zajmuje plik HEX , a Twój program zajmuje 971 bajtów pamięci programu - czyli nie tak źle :D

    Piotrek
  • #6 3784005
    bolcio
    Poziom 12  
    Posty: 61
    Pomógł: 3
    Ocena: 6
    No to okazuje się, że czegoś tu nie rozumiem... Czy to znaczy, że nie cały HEX jest wgrywany do mikrokontrolera? Jeżeli nie, to ile go?

Podsumowanie tematu

✨ Omówiono projekt prostego zegarka opartego na mikrokontrolerze AT89S52 programowanym w języku C, wykorzystującego timer do pomiaru czasu z przepełnieniem co 50 ms przy rezonatorze 12 MHz oraz wyświetlacz LCD 2x20 i quasiklawiaturę do ustawiania godziny. Zwrócono uwagę na problem braku podtrzymania czasu po zaniku zasilania i niedokładność pomiaru czasu opartego na timerze, co skutkuje przyspieszeniem zegara o około sekundę na dobę. Zaproponowano zastosowanie dedykowanego układu RTC dla poprawy dokładności i stabilności, a także alternatywne rozwiązania jak odbiornik DCF lub moduł GPS z podtrzymaniem bateryjnym. Dyskutowano również rozmiar programu – plik HEX ma około 2,9 KB, jednak faktyczna zajętość pamięci programu mikrokontrolera wynosi około 971 bajtów, co jest uznane za rozsądne dla tego typu projektu. Podano link do wyjaśnienia formatu Intel HEX, aby zrozumieć różnicę między rozmiarem pliku a faktycznym wykorzystaniem pamięci.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA