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

[ATMEGA88] ATMEGA88 - Timer2 PWM na PB3 nie działa, Timer1 działa poprawnie

Surfer89 21 Paź 2012 14:14 2619 7
REKLAMA
  • #1 11434361
    Surfer89
    Poziom 10  
    Witam,
    od kilku dni próbuje zrobić regulator trzech diod led PWM na ATMEGA88 (programator AVRASP). Timer1 (wyjścia PB1, PB2) działa bez zarzutu, ale już Timer2 (PB3) nie daje znaku życia. Próbowałem już wszystkich kombinacji z ustawieniami, rejestrami, bitami, trybami, podłączeniem diod, zmianą procesora (na ten sam typ) odłączaniem ukladu od programatora (bo z niego biorę zasilanie) i podłączanie na innym zasialaniu (ze względu na wspólny pin PB3 oraz MOSI) i Timer1 działa bez zarzutu w różnych konfiguracjach a Timer2 nic. Mierzyłem pin PB3 i w żadnym trybie ani momencie pracy (oprócz programowania) nie pojawia się na nim napięcie, reszta pinów ok. Nie wiem w czym tkwi problem, reszcie świata działa, mnie nie. Program choć nieoptymalny wygląda tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Proszę o pomoc bo po dwóch dniach naprawdę już mi się skończyły pomysły.
  • REKLAMA
  • Pomocny post
    #2 11434560
    phoszek
    Poziom 16  
    No i nie będzie działać. Dwa razy zmieniasz ten sam rejestr(TCCR2A), a używasz tam operatora przypisania:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    zamiast operatora sumy bitowej:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    więc poprzednia wartość rejestru jest tracona.

    Edit:

    W dodatku nie spojrzałeś do datasheetu, w którym jest wyraźnie napisane, że bity CS20,CS21,CS22 należą do rejestru TCCR2B.
  • REKLAMA
  • #3 11435085
    Surfer89
    Poziom 10  
    Poprawa błędów w programie oraz nazw rejestrów pomogła na tyle ze teraz dioda z PB3 świeci na stałe ale nie reaguje na wartość wypełnienia. A co do datasheetu to oczywiście że zaglądałem ale w wersji do megi88 nie znalazłem prawie nic a do megi8 i tak mi nazwy rejestrów nie pasowały i tak, więc musiałem kombinować. Może mam poprostu złe datasheety? Pobierałem ze strony Atmela...
  • REKLAMA
  • #4 11435342
    topstar
    Poziom 18  
    Nie zadziała Timer2 bo ustawiłeś :
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    a wg datasheet jest to tryb 4 reserved , zmien na tryb fast PWM tryb 3 i powinno zadziałać.
  • REKLAMA
  • #5 11435415
    Surfer89
    Poziom 10  
    W dalszym ciągu dioda pod PB3 świeci pełnym wypełnieniem i nie reaguje na nic.
    Ustawienia wyglądają tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #6 11436197
    phoszek
    Poziom 16  
    Chyba coś masz jakiś dziwny datasheet. Tutaj masz link do tego, którego ja używam - Link. Od strony 156 masz pełny opis rejestrów dla tego timera. A program spróbuj zmienić tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    Po tych zmianach PWM powinien już ładnie ruszyć.
  • #7 11436359
    Surfer89
    Poziom 10  
    Niestety, dalej to samo. PB3 świeci pełnym światłem i nie reaguje na nic. Przy okazji próbowałem już tego ustawienia. I używam tego samego datasheeta. ;(
  • #8 11438366
    Surfer89
    Poziom 10  
    Problem rozwiązany. PWM'y reagują prawidłowo na zadawane wartości. Dla potomnych zamieszczam działający kod. Dziękuje wszystkim za pomoc.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Zamykam.
REKLAMA