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

Impuls co minutę. Układ generujący jedynkę na porcie. Procesor 894051.

zibi11 21 Lut 2005 00:12 2228 13
REKLAMA
  • #1 1250073
    zibi11
    Poziom 19  
    Posty: 537
    Pomógł: 1
    Ocena: 30
    interesuje mnie taki układ generujecy jedynkę na
    porcie np P1 co 60 sekund chciałbym żeby to było dokładne
    jak to zrobic na liczniku
    mam procek 894051 i kwarc 11M
    ????
  • REKLAMA
  • #2 1250340
    mcy
    Poziom 15  
    Posty: 154
    Pomógł: 7
    Ocena: 18
    Jak dokładnie. Podaj odchyłkę w s na dobę. Jeżeli zależy Ci na niewielkiej odchyłce to rób na zewnętrznym generatorze i dzielniku, a procek będzie Ci dodawał sekundy minuty i godziny, i wyświetlał je na LCD lub LED. Jeżeli dopuszczasz większą odchyłkę lub więcej pracy w optymalizację czasu realizacji procedur (wyłącznie w ASM) możesz zrobić zegar stosując wewnętrzy timer i system przerwań. W tym przypadku musisz nawet uwzględnić czasy realizacj poszczególnych rozkazów (np. wstawianie jako opóźnienia instrukcji nop). Możesz wykorzystać gotowe układy zegarków np. PCF8583, lub wykonać automatyczną aktualizację daty z komputera (np. co 12 godzin) np. przez IRDA lub pobrać czas z DCF77. Możliwości jest naprawdę wiele. Zależy do czego ukąłd ma Ci służyć.
  • REKLAMA
  • #4 1250649
    zibi11
    Poziom 19  
    Posty: 537
    Pomógł: 1
    Ocena: 30
    może banalny przykład w bascomie
  • #5 1250767
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    W BASCOMie nie da rady....
  • REKLAMA
  • #6 1250827
    pioszc
    Poziom 12  
    Posty: 72
    Pomógł: 1
    Ocena: 1
    w bascomie jak się nie przesadzi z czasem obsługi przerwania to przy
    config timer1=timer,prescale=1024
    on timer1 inter
    dim licz_inter as byte
    enable interrupts
    enable timer1
    timer1=736 'co 6 sekund(można coś dodac)

    do
    if licz_inter=10 then
    licz_inter=0
    cośt am
    coś tam
    end if
    loop
    end

    inter:
    timer1=736
    incr licz_inter
    return


    ale ja byłbym za zewnętrznym zegarem
    ps. no tak na 89 4051 to nie będzie prawda (bedzie chodził na 2313 i innych)
    89 dzieli takty zegarowe chyba przez 12
  • REKLAMA
  • #7 1251107
    mcy
    Poziom 15  
    Posty: 154
    Pomógł: 7
    Ocena: 18
    Nie przesadzam.
    10s na dobę daje ci średnio 300 s na miesiąc, ok. 2 minut na dwa miesiące, po pół roku masz 6 minut. Ja lubię (w zasadzie nie lubię) regulować zegarki co zmianę czasu (leni/zimowy). Dlatego po pierwsze zapytałem, jaka dokładność chce osiągniąć zibi11. Jeżeli zibi11 nie potrzebuje dużej to wystarczy system przerwań i dobranie wartości timera, nawet w bascomie. Zważ, że zibi11 napisał, że ma kwarc 11MHz a z tego nie wyciągnie się "równej" wartości czasu przewania. Do przerwania dolicz czas ponownego ustawienia wartości timera przy wywowału który sumuje się do czasu wywołania. Ja przy zegarku stosowałem kwarc 11059200 i czas wykonania 1 instrukcji to 9us (dla AVR 90S2313). Można powiedzieć, że to nic, ale ponowne ustawienie nastaw przerwania timera zajmowało ok. 50us. Te 50us * ilość wywołań = wartość czasu która powoduje miesięczną odchyłkę czasu. Im mniej wywołań tym mniejszy błąd. Najmniejsza ilość wywołań, które musi wykonać zibi11 to wywołania co 1 s (dodawanie sekund). 60sekund *60minut *24godziny *30dni(średnio) = 2 592 000. 2 592 000 * 50us = 129,6 s! Jak widzisz jest to wartość, nad którą się trzeba zastanowić. Jeśli chcesz udzielić rzetelnej odpowiedzi to trzeba o tym wspomnieć.

    Pozdrawiam
  • #8 1251173
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    mcy: zibi11 pisze o uC rodziny '51, a nie o AVR i tam się nie da odliczać 1s przy kwarcu 11M (jak się domyślam to zapewne jest kwarc 11,0592MHz). Tajmer w '51 jest 16 bitowy i jeżeli od momentu wystąpienia przerwania do wejścia do procedury obsługi minie mniej niż 250 cykli maszynowych to NIE MA problemu z czasem potrzebnym na przeładowanie licznika!!!
    Co do BASCOMA to miałem na myśli, że ja tego w BASCOMie nie zrobie, bo ne znam BASCOMA.
  • #9 1251272
    pioszc
    Poziom 12  
    Posty: 72
    Pomógł: 1
    Ocena: 1
    chyba zaraz wyjdzie zegarek z dcf.
    ja i tak wybrał bym wersje pcf8583 jest dokładny .
    tylko pozostaje kwestia dokładności bo to wcale nie musi byc ciągłe zliczanie.
  • #10 1251287
    bolek
    Poziom 35  
    Posty: 4099
    Pomógł: 86
    Ocena: 299
    TDV nie trzeba aż 16bitowego timera, można wybrać opcje 8bitową z funkcą autoreload- odpada w tedy ponowne ładowanie timera, wystarczy liczyć ilosć przerwań od niego
  • #11 1251311
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    bolek: a można, tyle że przy kwarcu 11,0592MHz będziesz miał przerwanie maksymalnie co 277,7us, czyli bardzo często (musisz zliczać ponad 3600 przerwań na sekundę, czyli na minutę 216 000, a to jest zmienna praktycznie 24 bity bo 18 bitowej sie nie oplaci robic), jednym słowem przez większośc czasu pomiędzy przerwaniami będziesz obsługiwał poprzednie przerwanie, a nie o to chyba chodzi.
  • #12 1251512
    mcy
    Poziom 15  
    Posty: 154
    Pomógł: 7
    Ocena: 18
    Dlatego pytałem o dokładność. A tak naprawdę to zibi11 pytał o odmierzenie cylki 60s, a nie o zegarek. Biję się w pierś - przy odmierzaniu cykli rozwiązanie przerwań i timera wystarczy całkowicie - ja od razu skojarzyłem 60s z zegarkiem! Chyba że się mylę. Najprostrzym rozwiązaniem jest pcf8583 i wyzwalanie cykliczne wejścia int0 co 1 Hz.
    Za dokładność odpowiada pcf i kwarc zegarkowy.
    do tdv:
    w AVR też nie odmierzysz dokładnych przerwań przy kwarcu 11MHz (Też sądzę że chodzi o 11059200). O ile czas przerwania można dokładnie wyliczyć (oczywiście przy kwarcach 4, 8 MHz np 500ms) to do każdego wywołania przerwania czyli 500ms dodaje się czas "obsługi" timera. Przecież musisz go zaladowac wartością początkową od której będziesz liczył do przepełnienia rejestru timera. Tak przynajmniej dzieje się w AVR na timerze 0. Czas "obsługi" przerwania to czas timera + czas potrzebny na wpisanie wartości od której licznik/timer będzie liczył do 255. Przy przejściu przez 0 nastąpi przerwanie. Te 500ms + 50us będą się cyklicznie powtarzać. W skali miesiąca wartość tych 50us urośnie do wartości błędu. Można co jakiś czas odejmować wartość błędu (tak jak dodaje się lata przestępne)
    Pozdrawiam
  • #13 1684979
    zibi11
    Poziom 19  
    Posty: 537
    Pomógł: 1
    Ocena: 30
    ok dzięki zrobiłem na avr 2313 i działa
  • #14 1686212
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Co do przerwań timerów, to są i takie tryby w AVR, które przeładowywują samoczynnie licznik np. CTC, więc nie ma się co martwić o dokładność... ;) No i jest też w niektórych dodatkowy timerek z możliwością pracy asynchronicznej z kwarcem zegarkowym 32768Hz, więc w takim przypadku żaden zewnętrzny RTC nie będzie potrzebny.
    --
    Pozdrawiam, Daniel

Podsumowanie tematu

✨ Dyskusja dotyczy realizacji układu generującego sygnał logicznej jedynki na porcie (np. P1) co 60 sekund przy użyciu mikrokontrolera rodziny 8051 (procesor 894051) i kwarcu 11 MHz. Poruszono kwestie dokładności odmierzania czasu, gdzie precyzja zależy od zastosowanego rozwiązania: można użyć zewnętrznego generatora i dzielnika lub wewnętrznego timera z systemem przerwań. W przypadku timera należy uwzględnić czas obsługi przerwań i czas realizacji instrukcji, co wpływa na odchyłkę. Proponowano wykorzystanie gotowych układów RTC, takich jak PCF8583, lub synchronizację czasu z zewnętrznych źródeł (np. DCF77). Dyskutowano o możliwościach programowania w BASCOM, z uwzględnieniem preskalera i wartości timera dla uzyskania przerwań co kilka sekund, a następnie zliczania ich do 60 sekund. Zwrócono uwagę, że w mikrokontrolerach 8051 timer jest 16-bitowy i można stosować tryb autoreload, co ułatwia odmierzanie czasu bez konieczności ręcznego przeładowywania licznika. Wskazano, że kwarc 11 MHz (prawdopodobnie 11,0592 MHz) nie pozwala na idealne dzielenie czasu na 1 sekundę bez błędów, ale dla odmierzania 60 sekund system przerwań i timer jest wystarczający. Ostatecznie autor potwierdził wykonanie układu na AVR 2313, który działa zgodnie z oczekiwaniami. Wspomniano także o trybach CTC w AVR oraz możliwości pracy asynchronicznej z kwarcem 32768 Hz, co pozwala na bardzo dokładne odmierzanie czasu bez zewnętrznego RTC.
Wygenerowane przez model językowy.
REKLAMA