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

ATmega8 - Bascom - prosty zegarek, szybkie odmierzanie czasu.

pavel0910 27 Cze 2013 21:29 4347 16
  • #1 12463650
    pavel0910
    Poziom 15  
    Witam.
    Chciałem sobie zrobić prosty zegarek. Napisałem kod, podłączyłem wszystko na mojej płytce testowej i niby działa, ale ... Za szybko odmierza czas. 1 sekunda trwa tutaj dużo krócej. W ciągu 1 minuty w rzeczywistości, naliczy 170 sekund.

    ATmega ma ustawiony fusebit na wewnętrzny oscylator 8Mhz, do XTAL1 i XTAL2 mam podłączony kwarc zegarkowy.

    Kod wygląda tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Co może być tego przyczyną? Próbowałem różne kwarce.
    Proszę o pomoc i pozdrawiam.
  • #2 12463731
    Konto nie istnieje
    Poziom 1  
  • #3 12463742
    pavel0910
    Poziom 15  
    Nie mam, bo czytałem że on chodzi bez kondensatorów.
  • #4 12464061
    piotrva
    VIP Zasłużony dla elektroda
    Powinno chodzić bez kondensatorów i mnie zawsze chodzi i na pewno nie nalicza ponad 2 razy szybciej...
    Dużo może zależeć od zasilania układu (schemat by się przydał???)
    Tyle, że hmm, kwarc zegarkowy: 32768Hz, podzielmy przez 128 i mamy 256Hz, czyli Zmienna będzie zwiększona o 256 na każdą jedną sekundę...
  • #5 12464136
    pavel0910
    Poziom 15  
    Nie bardzo rozumiem. Przy takich ustawieniach jak podałem procesor powinien "wchodzić" do podprogramu "Licznik" dokładnie co 1 sekundę i w tym podprogramie zwiększać zmienną dokładnie o 1. W pętli głównej zmienna jest wyświetlana na LCD. Niestety dzieje się to szybciej niż powinno...
  • #6 12464254
    piotrva
    VIP Zasłużony dla elektroda
    A racja, racja, przecież impulsy są zliczane w zmiennej 8-bit, czyli przepełnienia powinno następować przy podziale 256Hz przez 256, czyli co 1s, mój błąd w tym rozumowaniu (za późno już dla mnie chyba)
    Ale nadal, skoro masz kwarc 32768 powinno działać ok.
    Spróbuj jeszcze jak zachowa się cały Bascomowy Config Clock = Soft.
    I pokaż schemat - ja kiedyś robiłem testy zegarka pcf8583 i przy pewnych warunkach zasilania (dokładnie nie pamiętam co mu zafundowałem) też oscylator wzbudzał się na innej harmonicznej i liczył 1,5-2x szybciej.
  • #8 12464644
    yokoon
    Poziom 29  
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #9 12465739
    pavel0910
    Poziom 15  
    Wgrałem taki kod, trochę poprawiony, bo tamten miał drobne błędy i nie dało się skompilować. Zegar działa, ale nadal tak szybko odmierza czas.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #10 12465805
    piotrva
    VIP Zasłużony dla elektroda
    piotrva napisał:
    Dużo może zależeć od zasilania układu (schemat by się przydał???)

    Może problem leży tu?
    Pokaż schemat + zdjęcia realnego układu.
  • #11 12465853
    pavel0910
    Poziom 15  
    Schemat jest wcześniej w załączniku, a tutaj zdjęcia mojej mini płytki testowej.

    ATmega8 - Bascom - prosty zegarek, szybkie odmierzanie czasu.

    Dołożyłem 2 kondensatory 33pF do kwarcu i teraz odmierza normalnie, muszę jeszcze włączyć go na dłużej i sprawdzić jak z dokładnością.
  • #12 12465858
    yokoon
    Poziom 29  
    No tak błędnie wpisałem Lowerline.Co do programu pracuje bardzo dokładnie, u mnie przez dwa miesiące przyspieszył 7 sekund. Czy w fuse bitach masz taką samą częstotliwość jak w programie ?
    Oczywiście dużo zależy od rezonatora 32.768, można równolegle dołączyć trymerek i korygować jego czastotę.
  • #13 12465896
    pavel0910
    Poziom 15  
    Tak jak mówiłem, zegarek ruszył normalnie po dołożeniu kondensatorów 33pF do kwarcu. Jest możliwość zrobienia ustawiania tego zegarka? Bo nie bardzo wiem jak to można zrobić. W swoim kodzie to zrobiłem, ale chodzi mi o kod yokoon'a.
  • #14 12465957
    piotrva
    VIP Zasłużony dla elektroda
    Hmm, a gdzie ten kwarc? Możesz pokazać dokładniejsze zdjęcie?
    Poza tym z czego to zasilasz?
  • #15 12466052
    pavel0910
    Poziom 15  
    Na zdjęciach nie ma kwarcu, jest przylutowany bezpośrednio do podwójnego gniazda na goldpiny. Z tymi kondensatorami zegarek działa dobrze. Zasilam z usbasp lub z zasilacza impulsowego 12v, 1A przez stabilizator 5V, który jest na płytce z procesorem.

    Wiem już, że mogę zmieniać czas za pomocą zmiennych _hour, _min, _sec. Teraz myślę nad jakimś fajnym menu do ustawiania czasu.

    3 przyciski, pierwszym wybieramy czy ustawiamy godziny, minuty, albo sekundy, a pozostałe 2 przyciski - w górę/dół.

    Jak to rozwiązać? Nie mam ciekawego pomysłu. Można zrobić jakoś tak, że jeśli będę ustawiał np godziny, to na wyświetlaczu godzina będzie mrugała co 1s? Albo będzie widoczna w negatywie, a najlepiej miga (raz negatyw, raz normalnie).
  • #16 12466194
    piotrva
    VIP Zasłużony dla elektroda
    Zasilacz impulsowy może stwarzać problemy i zakłócać pracę układu.
  • #17 12467248
    Konto nie istnieje
    Poziom 1  
REKLAMA