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

Attiny2313 BASCOM - Zmiana licznika timer0 na timer1

krychu0505 20 Paź 2014 22:27 1401 8
REKLAMA
  • #1 14059035
    krychu0505
    Poziom 21  
    Witam ponieważ w programie będe używał polecenia CONFIG SERVOS co powoduje iż Timer0 jest zajęty przez tę komendę potrzebuje zamienić wykorzystany wcześniej timer0 do przerwań na timer1 aby timer0 był wolny do sterowania serwem.
    Pozamieniałem w programie komendy timer0 na timer1 odpaliłem układ w symulatorze i nie działa. Dopiero uczę się programować więc proszę o wyrozumiałość najlepiej jak by ktoś wytłumaczył co i dlaczego trzeba zmienić.
    Wiem że timer0 jest licznikiem 8bitowym a timer1 16bitowym lecz to nie ma chyba wpływu na inny czas zliczania. Poniżej zamieszczam część programu:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #2 14059108
    yokoon
    Poziom 29  
    Witam.
    W przerwaniu wpisałeś : Timer1 = 131 do zliczenia zostało 65536 - 131 = 65405
    Przy wpisaniu do Timer0 tej samej wartości do zliczenia pozostaje :

    256 - 131 = 125 impulsów.

    Myślę, że dobrze zrozumiałem Twój post.
  • REKLAMA
  • #3 14059134
    krychu0505
    Poziom 21  
    Kolego możesz podpowiedzieć skąd liczba 65536. ;)

    Miałeś rację po zmianie prescalera na 8 coś ruszyło ale wyświetlaczmiga co sekunde. Jak uzyskać liczbę 256 zamiast 65536. Teraz odnośnie liczby 65536 jet to 256 podniesione do kwadratu czy jest to spowodowane tym że jest to licznik 16 bitowy a nie 8.
  • REKLAMA
  • Pomocny post
    #4 14059157
    vonar
    Poziom 28  
    Timer1 jest 16-bitowy. 2^16 = 65536.
  • #5 14059198
    krychu0505
    Poziom 21  
    aha 2^16 no tak bo 2^8 256 bo każdy bit jest kolejną potęgą liczby 2.
    P.S. Jak mawia mój nauczyciel od cyfrówki każda liczba w układach cyfrowych jest potęgą liczby 2. :D

    A może wyłumaczyć mi ktoś tak jaśniej niż whelpie bascoma ;) co to jest ten prescaler i co on dzieli.

    wyczytałem na innym forum że liczba podana w prescale dzieli częstotliwość pracy uc Np: f uc= 16 000 000Hz prescale=64 czyli 16 000 000 / 64 = 250 000 wtedy przy liczniku 8 bitowym przerwanie nastąpi po 256 impulsie czyli pełnym cyklu licznika czyli przerywanie nastąpi co 0,001024s czyli 1,024ms ponieważ
    256 / 250 000 = 0,001024

    Zrobiłem tak czyli 65536 - 65411 = 125 i nic
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #6 14059500
    Konto nie istnieje
    Poziom 1  
  • #7 14061275
    krychu0505
    Poziom 21  
    Dziękuję kolego e marcus za wszelkie rady i instrukcje, zaraz poprawiam konfiguracje portu b. Według mnie przerywanie co 100ms jest używane przez program w pętli głównej programu, ponieważ co 100ms odwołuje się do 3 pod programów.

    Popoprawiałem wyszło coś takiego i działa jeszcze raz dziękuje wszystkim za pomoc:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #8 14061740
    Konto nie istnieje
    Poziom 1  
  • #9 14429637
    krychu0505
    Poziom 21  
    Dzięki zamykam.
REKLAMA