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

atmega128 - bascom konfiguracja timera 1 oraz 3 w trybie CTC

ispcobra 19 Sie 2014 11:38 1281 4
REKLAMA
  • #1 13889507
    ispcobra
    Poziom 11  
    Witam!


    Stworzyłem kiedyś projekt na atmega32 w którym za pomocą dwóch timerów 8-bitowych regulowałem dwie częstotliwości wyjściowe ustawiając timery w tryb ctc


    Tccr2 = &B10011001
    Ocr2 = Wartosc
    Tccr0 = &B10011001
    Ocr0 = Wartosc1

    wszystko idealnie działało jednak z czasem pojawiła się potrzeba aby regulować częstotliwość z większą dokładnością. Postanowiłem użyć atmege 128 ze względu na 2 timery 16-bitowe
    ustawiłem timery względem datasheet i mam następującą sytuację:

    Tccr1a = &B01000000
    Tccr1b = &B00001001
    ocr1a = wartosc

    timer 1 działa idealnie i mam bardzo dokładny zakres regulacji

    natomiast:

    Tccr3a = &B01000000
    Tccr3b = &B00001001

    tutaj pojawia się problem prawdopodobnie ze składnią bascoma ponieważ nie da się uruchomić timera wpisując wartość np ocr3a = 100
    wyczytałem w helpie, że można zastosować składnie:
    zamiast ocr1a wpisujemy pwm1a
    zamiast ocr3a wpisujemy pwm3a
    to rzeczywiście działa i oba timery generują częstotliwość jednak timer 3 reguluje się do wartości pwm3a = 255 a po przekroczeniu tego zakresu pojawiają się różne częstotliwości oraz różne wypełnienie - ciężko to zmierzyć miernikiem. W każdym razie timer 3 zachowuje się jak timer 8 bitowy i nie mogę zadać mu wartości np 1200

    Czy ktoś może wie w czym tkwi problem/spotkał się z taką sytuacją?

    wiem, że za chwilę ktoś napisze, że lepiej przerzucić się na język C ale szukam odpowiedzi dla bascoma ponieważ napisałem już wiele programów w tym języku i jak do tej pory udawało się rozwiązać większość problemów.

    pozdrawiam
  • REKLAMA
  • #2 13890464
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 13890871
    ispcobra
    Poziom 11  
    witam!

    dziękuję za podpowiedź ale mam wyłączony ten fusebit. jeszcze przed chwilą dla pewności sprawdzałem:)
    sprawdzałem jeszcze jedną rzecz: ustawiłem dla obu timerów wartość początkową = 50 i powoli zwiększałem ją o 1. na obu timerach częstotliwość równo się zmieniała aż do momentu jak timer 3 osiągnął wartość 255(wtedy zaczął szaleć) natomiast timer1 nadal stabilnie zmieniał częstotliwość.
    Po prostu przez moment zwątpiłem czy timer 3 jest 16-bitowy ale gdyby było inaczej to częstotliwość na obu timerach nie zmieniałaby się w tym samym stopniu...no chyba, że się mylę.
  • REKLAMA
  • Pomocny post
    #4 13891007
    zumek
    Poziom 39  
    ispcobra napisał:
    .Czy ktoś może wie w czym tkwi problem/spotkał się z taką sytuacją?

    A zmienna, której wartość kopiujesz do OCR3A/PWM3A nie jest przypadkiem zadeklarowana jako BYTE ?
    Jeżeli to nie to, to spróbuj zapisywać rejestry OCR3 osobno - OCR3AH, OCR3AL.
  • #5 13891290
    ispcobra
    Poziom 11  
    dziękuję kolego za naprowadzenie!!!
    jeśli chodzi o mnie to popełniłem straszny błąd - chyba czas na zasłużony urlop:)
    mimo iż w poście pisałem o przypisywaniu zmiennej do rejestru to w moim programie totalnie o tym zapomniałem.
    w pętli programu pisałem np ocr1a/pwm1a = 100 , 200 itd zamiast zmiennej
    co ciekawe timer 1 działał w ten sposób a timer 3 się poddał.
    aż nie wierzę że na czymś takim się złapałem no ale cóż chyba ważne aby umieć się przyznać:) wszystko działa jak należy

    pozdrawiam
REKLAMA