Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[BASCOM] AVR jak zmieniać napięcie na pinach ; literatura

LemuRR 11 17 May 2010 20:24 1392 3
  • #1
    LemuRR 11
    Level 26  
    Witam,od pewnego czasu bawię się attiny2313, proste programy już przerabiałem
    Nadszedł teraz czas na coś poważniejszego :D
    chciałbym napisać program pod prostą lampkę RGB
    I właśnie przy tym mam mały problem,
    nie wiem jak ustawić napięcia na pinach ,jak go zmieniać
    P.S Jaką książkę polecacie do nauki takich rzeczy ,podstawy już znam
    chcę się dowiedzieć np. o zliczaniu impulsów w danym czasie
    (np odbiornik i nadajnik iR) generowaniu dźwięku ,
    i innych bardziej skomplikowanych(ale bez przesady) procedurach :D
    Moją prośbę potraktujcie na poważnie (jak wołanie o pomoc )
    Z góry dzięki za wszystkie ewentualne odpowiedzi
  • #2
    arktik1
    Level 27  
    Myślę że co do lampki RGB to powinieneś pomyśleć o sterowaniu PWM.
    A co do literatury to poczytaj ELEKTRODĘ i HELPa BASCOMa.
  • #3
    LemuRR 11
    Level 26  
    Poczytałem trochę o PWM lecz nie zrozumiałem za wiele
    oto przykładowy
    sygnały pwm są generowane na pb.1 i pb.2 i są to odpowiednio PWM1a i PWM1b.
    
    Ogólnie pwm'a konfigurujemy tak:
    Kod:
    
    
        Config Timer1 = Pwm , Pwm = 8 , Prescale = 64 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down
    
    
    
    pwm 8 bitowy- czyli wartości od 0 od 255
    
    następnie po wszystkich konfigach startujesz pwm'a
    Kod:
    
        Start Timer1
    
    
    
    wartości ustawiasz odpowiednio:
    Kod:
    
        Pwm1a = [wartosc]
    
    
    
    i
    
    Kod:
    
        Pwm1b = [wartosc]

    i mam kilka pytań
    Co to jest Prescale ?
    Czy rzeczywiście pwm w atmega8 może być tylko używany na pinb1 i pinb2.
    Czy przez zwiększenie liczby timerów inne piny też mogą obsługiwać PWM ?
    Jak sprawa się ma do attiny2313? bo nigdzie nie mogę tego znaleźć.

    Proszę poprawić pisownię!
    Robak
  • Helpful post
    #4
    OlekM
    Level 17  
    Quote:
    Co to jest Prescale ?


    Timery w mikrokontrolerach AVR nie muszą być taktowane zegarem systemowym - często jest on za szybki dla potrzeb projektanta. Inżynierowie z Atmela rozwiązali ten problem, umieszczając dodatkowy (nieco ukryty) licznik zwany prescalerem. Z tego licznika otrzymujemy kilka nowych sygnałów zegarowych, z których skorzystać mogą timery. W przypadku TINY2313, licznik ten może dostarczyć nam zegar systemowy dzielony przez 8, 64, 256 i 1024.

    Na przykład, jeśli procesor pracuje z rezonatorem kwarcowym 8 MHz, a my potrzebujemy zliczać w timerze impulsy co mikrosekundę (np. by powiedzieć ile czasu trwało jakieś zdarzenie), wówczas dostarczamy do timera sygnał z prescalera, który jest podzielony przez osiem - ma zatem f = 1 MHz (zatem T = 1 us).

    Warto pamiętać, że do timerów można też dostarczać sygnał z zewnątrz.

    (stosowny rysunek "Figure 39" na stronie 85 dokumentacji ATTINY2313)

    Quote:
    Czy żeczywiście pwm w atmega8 może być tylko używany na pinb1 i pinb2.


    Dokumentacja mówi, że oba timery w ATTINY2313 są w stanie pracować w trybie PWM. Ponadto oba posiadają dwa kanały. Mamy zatem 4 wyjścia, które są w stanie generować stosowne przebiegi. Wszystkie z tych wyjść oznaczone są jako OCxy (dosłownie OC0A, OC0B, OC1A, OC1B). Aby dowiedzieć się które to wyprowadzenia procesora, należy spojrzeć na rysunek "Figure 1" na stronie 2.

    Nie można nie wspomnieć o tym, że modulację PWM można przeprowadzić za pomocą samego programu na dowolnym wyjściu. Podejście takie nakłada jednak wiele dodatkowych warunków i ograniczeń - i z pewnością nie jest zalecane.

    Quote:
    Czy przez zwiększenie liczby timerów inne piny też mogą obsługiwać PWM ?


    Zapewne tak, ale nie możemy zmienić liczby timerów w procesorze :-)
    Generalnie zawsze należy sprawdzić w dokumentacji wybranego mikrokontrolera.

    Quote:
    Poczytałem trochą o PWM lecz nie zrozumiałem za wiele


    Modulacja PWM, na pierwszy rzut oka nie wydaje się rozwiązaniem prolemu "wyjścia analogowego", prawda? Otrzymujemy w końcu sygnał całkowicie cyfrowy tylko o zmieniającym się czasie trwania jedynki lub zera logicznego (za to o stałej częstotliwości).

    Gdy przefiltrujemy sygnał z wyjścia PWM mikrokontrolera w prostym filtrze (np. składającym się z rezystora i kondensatora, którego stała czasowa będzie znacząco większa niż okres generowanego przebiegu) otrzymamy na jego wyjściu napięcie proporcjonalne do wartości wpisanej do modulatora PWM.

    Przy wykorzystaniu trybu osmiobitowego PWM, napięcie wyjściowe można opisać następująco:

    U_wy ≈ U_zas * wartosc / 256

    Niestety napięcie wyjściowe z takiego układu zwykle nie jest gładkie, a "nieco pofalowane".