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

Timer1 w mikrokontrolerze ATtiny45

jacek13 17 Mar 2009 18:44 2385 23
REKLAMA
  • #1 6295127
    jacek13
    Poziom 15  
    Witam
    Programuję przy użyciu BASCOM AVR układ ATtiny45 i jeżeli chcę użyć Timer1 to pokazuje się błąd "Error: 222 Illegal character [expected (,got" [TCCR2B]].
    Jeżeli w programie użyję Timer0, to wszystko jest OK. Również jest OK z Timer1 gdy wpiszę inny typ mikrokontrolera n.p. Attiny44.
    Temat był już przed laty poruszany na forum ale nie znalazłem "recepty" na ten problem. Może ktoś już zna wyjście z tego problemu.
    Pozdrawiam Jacek
  • REKLAMA
  • #2 6295154
    crazy_phisic
    VIP Zasłużony dla elektroda
    Wyjście jest banalne - zrezygnuj z "makr" bascoma i skonfiguruj timera ręczeni poprzez wisy do rejestrów.

    PS. Tiny45 nie ma rejestru TCCR2B - szczegóły jak zwykle w dokumentacji.
  • #3 6295202
    jacek13
    Poziom 15  
    Ale jak to zrobić, programowałem do tej pory tylko przy użyciu BASCOM-a. A chodzi o wszystkie funkcje związane z Timer1 n.p. "Timer" ; "Pwm".
  • #4 6295245
    crazy_phisic
    VIP Zasłużony dla elektroda
    No to kolejny stopień wtajemniczenia,
    w bascomie to zwykłe "przypisanie", np:

    
    TCCR1 = &BXXXXXXXX ' wartość binarna 
    


    I znów odeślę Cię do dokumentacji procesora i helpa bascoma ;)
  • #5 6295343
    jacek13
    Poziom 15  
    Jeżeli już chcesz mi pomóc to zrób mi wykład "łopatologicznie" - nie bądż taki tajemniczy. Miałem do tej pory tylko do czynienia z BASCOM-em i inne metody są mi obce, ale bardzo chętnie się douczę. W tej chwili interesuje mnie szczególnie "Pwm" i wszystkie ustawienia z tym związane.
  • REKLAMA
  • #6 6295424
    crazy_phisic
    VIP Zasłużony dla elektroda
    Wiadomości przyswaja się najlepiej jeśli trzeba włożyć trochę pracy w ich zdobycie.

    Przedstawiony "program" to sterownik mostka H ze zmienną częstotliwością i wypełnieniem impulsów.

    
    $regfile = "attiny26.dat"
    $crystal = 2000000
    
    Config Portb.2 = Output
    Config Portb.3 = Output
    
    Tccr1a = &B00010001
    Tccr1b = &B10000011
    Ocr1c = 30              'wartość przykładowa  "częstotliwość"
    Ocr1b = 15              'wartość przykładowa  " wypełnienie"
    
    Do
    
    Loop
    


    Teraz dokumentacja w dłoń i zapraszam do analizy.
  • #7 6296081
    janbernat
    Poziom 38  
    "Wiadomości przyswaja się najlepiej jeśli trzeba włożyć trochę pracy w ich zdobycie."
    Masz rację, ale nadmierna ilość "zderzeń" z niebanalną rzeczywistością może zniechęcać.

    "łopatologicznie"
    Bascom to nie jest panaceum.
    Niektóre polecenia nie działają dobrze na wszystkich procesorach.
    Niektóre wcale nie działają na pewnych procesorach.
    To są niektóre makra: config, start, stop itp.-b. dużo.
    Ale jest sposób:
    W dokumentacji procesora znajdujesz rejestry i ich opis
    i do nich wpisujesz co potrzebujesz.
    I zaczyna działać.
    Zwykle nie od razu.
  • REKLAMA
  • #8 6296188
    jacek13
    Poziom 15  
    Niestety nic z tego nie wyszło.
    Po wpisaniu powyższego programu i zmianie $regfile na "attiny45.dat"
    BASCOM wskazuje na błędy:
    "Error: 46 Line: 7 Assignment error [TCCR1a: 0 &B00010001; 112]
    Error: 46 Line: 8 Assignment error [TCCR1b: 0 &B10000011; 112]"

    Jeżeli wpiszę $regfile = "attiny26.dat", wtedy jest OK. Jeżeli chcę normalnie w BASCOMIE uruchomić Timer1 dla ATtiny26 też jest wszystko OK.
  • REKLAMA
  • #9 6296447
    janbernat
    Poziom 38  
    Która wersja Bascoma?
    Kod.
    Daj.
    Cały.
    I zaczyna działać.
    Zwykle nie od razu.
  • #10 6296499
    jacek13
    Poziom 15  
    BASCOM 1.11.9.0 build 19
    Pozostałych (kod. ; Daj. ; Cały.) nie rozumię o co chodzi.
  • #11 6296513
    crazy_phisic
    VIP Zasłużony dla elektroda
    :arrow: jacek13, na gotowce nie licz, zamieściłem program dla Tiny26 tylko po to, abyś się pofatygował i zajrzał do dokumentacji obu procesorów. Dodatkowo listing był "łopatologicznym" przykładem jak dokonać wpisów do rejestrów w bascomie.

    Po raz czwarty i mam nadzieję ostatni odsyłam Cię do dokumentacji obu procesorów.
  • #12 6296568
    jacek13
    Poziom 15  
    Zaglądałem do dokumentacji , odczytałem na których portach są wyjścia OC1A i OC1B, robiłem odpowiednie zmiany w zapisach programu i za każdym razem pojawiały się błędy pomimo wielu kombinacji.
    Jeżeli jesteś łaskawy to podaj treść programu dla ATtiny45 i zobaczymy czy jest OK ???
    Pozdrawiam Jacek
  • #13 6296678
    crazy_phisic
    VIP Zasłużony dla elektroda
    ... Będziesz mnie przeklinał, ale nie dostaniesz gotowca.
    - w Tiny45 kanał "B" wpisany jest w GTCCR
    - wobec powyższego konfiguracja zmieściła się w jednym rejestrze TCCR1 (tiny45 strona 92), (tiny26 strona 72, rejestry TCCR1A i TCCR1B)

    tyle z "podpowiedzi".
  • #14 6296795
    jacek13
    Poziom 15  
    Na stronie 93 ATtiny45 jest OC1B.
    Gdybyś jednak podał co napisać dla ATtiny45 tylko n.p. dla OC1A to sądzę że "zaskoczę" o co chodzi.
    Pozdrawiam Jacek
  • #15 6296807
    crazy_phisic
    VIP Zasłużony dla elektroda
    Już poprawiłem swoje niedopatrzenie - gratuluje czujności ;)
  • #16 6296836
    jacek13
    Poziom 15  
    To może w ramach nauki podasz chociaż kawałek gotowca dla Attiny45
  • #17 6297030
    crazy_phisic
    VIP Zasłużony dla elektroda
    Kolejny element układanki... łopatologicznie ;)

    bity CS10 do CS13 określają częstotliwość pracy timera, inaczej mówiąc wyznaczają czas aktualizacji (zwiększenia o jeden rejestru TCNT1).
    W zależności od trybu pracy rejestr ten jest porównywany z zapisanymi przez użytkownika nastawami w OCR1A (kanał A ), OCR1B (kanał B), OCR1C (dla uproszenia maksymalna wartość do jakiej może zliczyć timer).

    Zasada jest prosta, sygnał zegara po preskalerze (bity CS10-13) zwiększa TCNT1 która jest stale porównywana z OCR1A/B/C.
    W przykładzie powyżej wybrana została konfiguracja dwóch wyjść COM1x1 - 0 i COM1x0 - 1 teraz pozostaje tylko wpisać wartość do której ma zliczyć timer (OCR1C) i obserwować na oscyloskopie "prawie" symetryczne przebiegi.
  • #19 6297293
    crazy_phisic
    VIP Zasłużony dla elektroda
    :arrow: Freddie Chopin - Zastanawiam się czy udałoby mi się napisać obszerniejszy elaborat na temat tych kilku rejestrów niż zrobił to producent w dokumentacji. Miejmy nadzieję że to "niewdzięczne" traktowanie z mojej strony zmusi wreszcie do własnych eksperymentów.

    PS. Celowo nie opisałem rejestrów OCR1A/B ;)
  • #20 6297414
    Freddie Chopin
    Specjalista - Mikrokontrolery
    crazy_phisic napisał:
    Zastanawiam się czy udałoby mi się napisać obszerniejszy elaborat na temat tych kilku rejestrów niż zrobił to producent w dokumentacji.

    Myślę, że nie byłoby w tym szczególnego problemu, troche 'słów-waty' i by było niezłe wypracowanie. Inną sprawą jest sens takiego przedsięwzięcia, a raczej jego całkowity brak. Walory edukacyjne takiego zachowania (brak takowych) - już zostały poruszone.

    [;

    4\/3!!
  • #21 6297986
    jacek13
    Poziom 15  
    Wszystko pięknie owszem opisane w "datasheet" ale niestety tylko dla tych co znają angielski, ja niestety nie znam (za moich czasów jedyny słuszny język był rosyjski).
    Nie mogę znależć w danych co wpisać dla ustawienia "Pwm" : Pwm = 10 ; Compare A Pwm = Clear Down.
    Pozdrawiam Jacek
  • #22 6298151
    yego666
    Poziom 33  
    jacek13 napisał:
    ale niestety tylko dla tych co znają angielski, ja niestety nie znam (za moich czasów jedyny słuszny język był rosyjski).
    Zatem wypada poszukac na stosownych portalach rosyjskojezycznych.
    Jest ich bardzo duzo i na pewno znajdziesz odpowiedni manual w Twoim ulubionym jezyku ;)
    Dla przykladu Tu: Link jest conieco.
  • #23 6304343
    jacek13
    Poziom 15  
    Witam ponownie
    Walczyłem i wiele już wiem jak uruchomić timer0 i timer1.
    Jednak proszę uprzejmie o podanie które registry biorą udział w "Pwm".
    Jak je ustawić sądzę że sobie poradzę.
    Pozdrawiam wszystkich Jacek
  • #24 6304652
    ZbeeGin
    Poziom 39  
    Rejestry sterujące TCCR0A/TCCR0B, TCCR1A/TCCR1B - ustawianie trybu pracy.
    Rejestr licznika TCNT0, TCNT1 (nic nie zmieniasz, ale jest wykorzystywany) - zliczanie.
    Rejestry porównania OCR0A/OCR0B, OCR1A/OCR1B - sterowanie wypełnieniem.
    A w liczniku Timer1 także GTCCR (dodatkowe tryby pracy) i OCR1C (dzielnik PWM).
REKLAMA