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

Bascom Atmega 168 ustawienie timer2 w tryb CTC i OC2B na toggle

xury 28 Sie 2011 18:07 3029 11
  • #1 9872086
    xury
    Specjalista automatyka domowa
    Panowie prośba. Męczę się i męczę i czytam i czytam.... i gdy coraz więcej czytam to się coraz bardziej gubię.
    Mam wrażenie, że DS od Atmega 168 jest napisany w strasznie zagmatwany sposób.
    Przejdźmy do sedna:
    Chcę ustawić końcówkę OC2B by generowało mi na niej przebieg prostokątny o okresie 8ms.
    No i tu mam problem bo opis z helpa bascoma dla timera2 jest nie dość, że skromny to i błędny, a w datasheet'cie się zagubiłem na ustawieniu odpowiednich bitów.
    Dane potrzebne do ustawienia:
    Kwarc - 8Mhz
    preskaler - 256
    przerwanie od oc2b co 4ms

    No i tu próba moich ustawień:
    TCCR2A = &b0001xxxx x- nie wiem jak ustawić
    TIMSK2 = &b00000100
    TCCR2B = &bxxxxx110 x - nie wiem jak ustawić i czy w ogóle można, bo w DS pisze, że są tylko do odczytu - np. bit CS22 musi być ustawiony na 1 a w DS jest napisane, że jest tylko do odczytu???
  • Pomocny post
    #2 9872172
    omicronNs
    Poziom 21  
    Jak przerwanie? To ma działać z automatu czy na przerwaniach? Bo jak na przerwaniach to musisz zerować w nim licznik, bo od ocr2b nie ma opcji ctc. Najlepiej zrób tak : ustaw licznik w tryb ctc i do ocr2a wpisz odpowiednią wartość skracającą cykl, do ocr2b wpisz dowolną wartość od 0 - ocr2a, ustaw bit COM2B0, włącz licznik z odpowiednim preskalerem. Powinno hulać. Jak nie chcesz używać ocr2a to ustawiasz licznik w tryb non-pwm mode i zerujesz licznik programowo w przerwaniu.
  • #3 9872312
    xury
    Specjalista automatyka domowa
    No właśnie chciałem z automatu na końcówce OC2B. Wydaje mi się, że jednak mozna na niej togglować w trybie CTC (wycinek z DS str. 154)
    Table 18-5. Compare output mode, non-PWM mode.
    COM2B1 COM2B0 Description
    0 0 Normal port operation, OC2B disconnected
    0 1 Toggle OC2B on compare match
    1 0 Clear OC2B on compare match
    1 1 Set OC2B on compare match

    Problem w tym, że jest tam napisane również, że zależny od ustawienia bitu WGM22:0 , który wg DS na str. 145 ma być ustawiony na 2.
    Jak to rozumieć? Czy to chodzi trzy bity ? WGM22, WGM21 i WGM20 ?
    No bo jak inaczej ustawić na 2 ?
    Czyli mam ustawić tylko WGM21 ?
    Bo z kolei WGM22 jest tylko Read wg DS str.156
  • Pomocny post
    #4 9872348
    omicronNs
    Poziom 21  
    Można toggleować ale nie skrócisz cyklu timera do tych 4ms, to musi być wykonane poprzez ocr2a, ewentualnie zerujesz programowo w przerwaniu od ocr2b. To z tym read only musi być błędem, w datasheetach też się takowe zdarzają
  • #5 9872377
    xury
    Specjalista automatyka domowa
    A jak bym ustawił OCR2A i OCR2B na tę samą wartość to by działało ?
    A jeśli nie to w przerwaniu od OC2B wystarczy wyzerować timer ? np TCNT2= 0 ?
    Czyli zapis WGM22:0 zrozumialem prawidłowo. Może to pytania banalne, ale moja znajomość budowy wewnętrznej AVR jest nikła. :)
  • Pomocny post
    #6 9872440
    omicronNs
    Poziom 21  
    Tak, będzie działało. Tutaj może rzucę ustawienia, które działają na 100%:

    
    	DDRD |= (1<<PD3);
    	TCCR2A |= (1<<COM2B0)|(1<<WGM21);
    	TCCR2B |= (1<<CS21)|(1<<CS22);
    	OCR2A = 125;
    	OCR2B = 125;
    


    Zapis WGM22:0 oznacza WGM22, WGM21, WGM20. Często się w datasheetach taki zapis spotyka. Właśnie nie rozumiałem o co Tobie chodziło z tym że bit ustawiony na 2 :D
  • #7 9872655
    xury
    Specjalista automatyka domowa
    Pomimo, że C nie znam to w pełni zrozumiałem ten kod.
    Dzięki za wszystkie informacje, które były mi bardzo pomocne.
    Dla potomnych, którzy będą tego samego szukać by zastosować w Bascom'mie
    "Przetłumaczę" to na "eskimoski"

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #8 9873076
    janbernat
    Poziom 38  
    No widzisz- jak zostałem zmuszony do takiego ręcznego ustawiania rejestrów w bascomie to pomyslałem sobie- dlaczego nie robić tego samego w C?
    Skoro mam i tak ręcznie się dobierać do wnętrzności procesora.
    Zwłaszcza że ustawianie rejestrów rozumiem.
    Najpierw myslałem że Bascom będzie mi jeszcze służył do napisania prostych programów i szybko.
    Ale tak się nie da- zrezygnowałem z Bascoma.
    Ma on swoje wielkie zasługi- ale szybko zaczyna irytować.
    To już rok od przesiadki z bascoma na C.
    A wtedy jeszcze nie było książek o C na avr- a teraz masz to podane "na tacy".
  • #9 9873384
    xury
    Specjalista automatyka domowa
    Racja. Napisałem sobie kod, ale nie mogę go nawet symulować w Bascomie, bo Bascom nie symuluje Timera2.
    Teraz właśnie ściągam AVR Studio 5 by móc w nim symulować. Kto wie kiedy zacznę w nim coś pisać.
    Chociaż doszedłem do tego jak ustawić to po bascomowemu:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #10 9873458
    janbernat
    Poziom 38  
    Nie avrstudio5!
    To jest beta- w dodatku schrzaniona.
    Ściągnij normalne 4.18.
  • #12 9876021
    janbernat
    Poziom 38  
    tmf pisał o tym niedawno w temacie o nowym AVRStudio5.
    Domyślnie korzysta z kompilatora o którym wiadomo że ma błędy.
    Nie obsługuje starszych programatorów- tylko nowsze i drogie.
    Trudno znaleźć ustawienia zegara itd.
    AVRStudio4 jest dość siermiężne jeśli chodzi o edytor.
    Ale według mnie im mniej bajerów na początek- tym lepiej.
    Innym wyjściem jest eclipse- kolorowy, sam wyszukuje gdzie dana funkcja była zdefiniowana, sam uzupełnia składnię itd.
    Ale skonfigurować to mi się udało tylko na podstawie gotowca Mirka.
    Kiedyś zaczynałem od starej wersji AVRStudio która nie współpracowała z C.
    Był artykuł w EP jak to połączyć razem.
    Po długich i ciężkich cierpieniach udało mi się.
    Ale się nieco zniechęciłem- nawet make trzeba było ręcznie dodawać- jakiś uniwersalny który zwykle działał.
    Ale czasem- nie.
    Teraz jest dużo łatwiej- AVRStudio sam się integruje z avrgcc i sam tworzy make.
    W zasadzie wybierasz procesor na początku- potem mozna go zmienić- i częstotliwość.
    Fakt że ustawianie fusbitów jest nieco mniej intuicyjne niż w Bascomie- początkowo pisałem program w C a wgrywałem fusebity i hex z Bascoma.
    Zwłaszcza że miałem tylko programator STK200.
    Ale w końcu znalazłem dawno zmontowany programator STK500v2 i skończyłem z Bascomem.
    Jest też od paru miesięcy łatwiej bo są aż dwie książki o C w AVR.
    W dodatku autorstwa kolegów z forum.
    Teraz nie jest to już skok na głeboką wodę- możesz co najwyżej wchodząć do tej wody potknąć się o jakąś gałąź albo wpaść w jakiś dołek.
    Oczywiście nieco dalej jest głeboko- ale nie musisz od razu tam wchodzić.
REKLAMA