Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Odmierzanie czasu 1 sekundy na PIC 16F877

24 Paź 2010 18:03 2397 5
  • #1 24 Paź 2010 18:03
    Anonymous
    Użytkownik usunął konto  
  • #2 24 Paź 2010 20:09
    korrus666
    Poziom 40  

    Sprawa z odmierzaniem czasu jest teoretycznie prosta ale trzeba brać pod uwagę kilka spraw. PO pierwsze musisz sobie wybrać jakiś timer i zliczać jego przepełnienia w przerwaniu. Musisz to robić w przerwaniu żeby odmierzany czas był zawsze taki sam. Zliczasz ilość tych przerwań do obliczonej wartości w zależności od częstotliwości zegara i dzielnika timera, I w zasadzie masz już gotowe zliczanie czasu. Pamiętaj tylko że kwarc ma pewien rozrzut i będziesz musiał skalibrować odliczanie czasu na podstawie jakiegoś dokładnego zegara.

    0
  • #3 25 Paź 2010 08:31
    viayner
    Poziom 34  

    Witam,
    poszukaj może na stronie "www.mikroe.com" w dziale PIC, kompilatorów tam jest C, basic i pascal, sa to dema z ograniczeniem kodu chyba do 1k ale w manualu i po rozpakowaniu/zainstalowaniu w przykładach jest wyjaśniona obsługa TIMER'ow i odliczanie określonych odcinków czasu. Jak pisałeś używasz asemblera ale składnia jest naprawdę prosta (sugeruje basic'a) a sporo komend to po prostu odwołania do konkretnych rejestrów w PICu.
    Co do kwarcu to sugeruje jakiś kwarc który jest potęga "2", latwiej to będzie dzielić i nie trzeba dodatkowych cykli na wycinanie niepotrzebnych impulsów.
    Ewentualnie proszę o kontakt to ci podeśle własna procedurke.
    Pozdrawiam

    0
  • #4 25 Paź 2010 13:24
    Urgon
    Poziom 36  

    AVE...

    Przy kwarcu 20Mhz:
    Ustawiasz preskaler timera Timer2 na 1:16. Wartość rejestru PR2 ustalasz na 99. Postskaler ustawiasz na 1:5. Następnie zliczasz przerwania z flagą TMR2IF podnosząc wartość jakiejś zmiennej o jeden. Gdy zmienna będzie równa 625, to będziesz miał swoją sekundę...

    Przy kwarcu 4Mhz:
    Preskaler na 1:16, PR2 = 24, postskaler na 1:5, będziesz miał przerwanie co 2mS.
    Preskaler na 1:16, PR2 = 249, postskaler na 1:5 - przerwania co 20mS.
    Preskaler na 1:16, PR2 = 249, postskaler na 1:10 - przerwania co 40mS.

    0
  • #5 17 Lis 2010 00:12
    gpql
    Poziom 17  

    Ewentualnie na piny 15,16 zewnętrzny kwarc 32768 Hz i masz dokładnie taktowany timer co 1 sek.
    polecam dokumentacje do pic16f877 strona 60
    TM1 ustawiasz na 0x8000 i masz przerwanie co 1 sek
    zobacz artykuł http://www.prc68.com/I/PClock.shtml

    0
  • #6 23 Lis 2010 03:22
    lisek_lichu
    Poziom 11  

    Witaj,

    Jeśli twój program podczas odliczania czasu nie musi nic robić to wystarczy wpisać do kilku rejestrów odpowiednie wartości i potem odejmując je rekursywnie obliczyć czas. Wiedząc ile czasu zajmuje jedna instrukcja.

    Np dla 8MHz 1 instrukcja zajmuje 1/2 000 000 sekundy czyli 0,5us
    musiałbyś wykonać 2 miliony instrukcji aby minęła sekunda

    Code:
    movlw.93
    
                movwf       reg_delay_1
                movlw       .38
                movwf       reg_delay_2
                movlw       .11
                movwf       reg_delay_3
    delay_loop  decfsz      reg_delay_1,F
                goto        delay_loop
                decfsz      reg_delay_2,F
                goto        delay_loop
                decfsz      reg_delay_3,F
                goto        delay_loop
                nop
                nop


    najprościej użyć do tego programu PIC DELAY, który podsyłam
    można nim generować opóźnienia w mikrosekundach a nawet dobach. Ustawia się Zegar procesora i czas jaki ma wygenerować i to wszystko

    Natomiast jeśli podczas odliczania, Twój program ma coś robić dodatkowo to musisz skorzystać z TIMERÓw tak jak opisał kolega Urgon.

    Pozdrawiam Szymon

    Odmierzanie czasu 1 sekundy na PIC 16F877

    Moderowany przez Mirek Z.:

    Umieszczenie "płatnego" załącznika, który Kolega otrzymał wcześniej w ramach pomocy ( https://www.elektroda.pl/rtvforum/viewtopic.php?p=8095984#8095984 ) narusza punkty 10.10 i 16 regulaminu.
    Ostrzeżenie. Załącznik oczywiście usunąłem.

    0