Generatory PWM w Attiny 2313

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
matelektronik
Użytkownik
Posty: 161
Rejestracja: 01 sie 2006, 11:48
Lokalizacja: Przezchlebie
Kontakt:

Generatory PWM w Attiny 2313

Post autor: matelektronik » 11 sty 2007, 17:31

Witam !!!

W dokumentacji Attiny 2313 wyczytalem ze procek ma cztery kanały pwm. W jaki sposob mam to rozumiec? Czy moge dolaczyc do wyjsc OC... np cztery diody LED i one moga byc sterowane kazda osobno?

pzdr

ZbeeGin

Post autor: ZbeeGin » 11 sty 2007, 18:36

Owszem, posiada 4 kanały PWM.
Dwa z nich są sterowane przez licznik TIMER1 i mogą mieć rodzielczość 8, 9, 10 lub też 16 bitów. Wyjściami są końcówki OC1A, OC1B. Wypełnienie przebiegów z tych wyjść może być róźne - lecz podstawa czasu jak i rozdzielczość będzie wspólna.
Kolejne dwa kanały są sterowane przez licznik TIMER0 i mają rodzielczość 8 bitów. Wyjściami są końcówki OC0A, OC0B i tak jak w przypadku poprzedniego licznika wypełnienie może być różne a podstawa czasu jak i rodzielczość wspólna.

O trybach pracy PWM obu liczników możesz poczytać we wspomnianej dokumentacji.

Jeśli chcesz 4 kanały PWM to należy wybrać w obu licznikach taki sam tryb i podział sygnału zegarowego przez prescaler. Na przykład: prescaler przez 8, rozdzielczość 8-bit, FastPWM i za pomocą rejestrów OCR1A, OCR1B, OCR0A, OCR0B regulować niezależnie poziom wypełnienia na 4 wspomnianych końcówkach.

Michał17
Użytkownik
Posty: 329
Rejestracja: 07 sty 2006, 14:25
Lokalizacja: Łódź

Post autor: Michał17 » 13 sty 2007, 10:08

a na których końcówkach są oc0a, b i oc1b ??

ZbeeGin

Post autor: ZbeeGin » 13 sty 2007, 11:58

michal17 pisze:a na których końcówkach są oc0a, b i oc1b ??
Zapraszam do lektury noty katalogowej układu Tiny2313, strona 2: http://www.atmel.com/dyn/resources/prod ... oc2543.pdf
To naprawdę nie boli...

Awatar użytkownika
matelektronik
Użytkownik
Posty: 161
Rejestracja: 01 sie 2006, 11:48
Lokalizacja: Przezchlebie
Kontakt:

Post autor: matelektronik » 15 sty 2007, 17:10

:D heh... dzieki bardzo :D sprobuje cos wymyslec.

pzdr

ZbeeGin

Post autor: ZbeeGin » 15 sty 2007, 18:09

Przyjżyj się po prostu drugiej stronie noty katalogowej. Jest tam rozrysowany układ wyprowadzeń. Widzisz środkowe nogi po prawej i na dole po lewej (rysunek PDIP/SOIC)?

Awatar użytkownika
gazmajster
-
Posty: 30
Rejestracja: 01 sie 2006, 22:13
Lokalizacja: Z Zagłębia Drewna
Kontakt:

Post autor: gazmajster » 16 sty 2007, 0:19

Witam
Ja tak przy okazji, a jak się ma sprawa PWM w Tiny26 z poziomu Bascoma :?:
Bo jakos nie mogę dojść końca.
Pozdrawiam

ZbeeGin

Post autor: ZbeeGin » 16 sty 2007, 17:56

gazmajster pisze:Ja tak przy okazji, a jak się ma sprawa PWM w Tiny26 z poziomu Bascoma
Bo jakos nie mogę dojść końca.
Rzeczywiście jest to dość zawiłe w szczegółach.

Z poziomu BASCOM-a da się użyć trybu PWM licznika TIMER1, lecz całą konfigurację trzeba wykonać samemu, poprzez bezpośrednią modyfikację rejestrów licznika. Żadne polecenie CONFIG TIMER1 nie zadziała poprawnie już z tego faktu, że prescaler tego licznika ma o wiele więcej podziałów niż wynika ze składni tego polecenia. A poza tym może także pracować w trybie asynchronicznym.

ATTiny26 posiada dwa 8-bitowe kanały PWM których komplementarne wyjścia są dostępne na zewnątrz. W istocie tryb komplementarny jest używany wyłącznie przy sterowaniu przetwornicami. Na wyjściach pojawiają się przebiegi lustrzane z przerwą zwaną czasem martwym. Można też skonfigurować PWM by generował pojedynczy sygnał tylko na "pozytywnych" (OC1A, OC1B) końcówkach wyjściowych, gdy "negatywne" (~OC1A, ~OC1B) są wyłączone.
Ważną rolę odgrywa rejestr OCR1C który razem z preskalerem pozwala na regulację częstotliwości pracy układu PWM w zakresie 20-500kHz. Nie należy go mylić z trzecim nie dostępnym na zewnątrz kanałem PWM!
Układ pracuje tylko w jednym trybie: Fast PWM - więc licznik liczy tylko w górę do wartości wpisanej do OCR1C, po czym zeruje się i zaczyna od nowa. Zmiany wypełnienia przebiegu wyjściowego regulujemy oczywiście przez wpisywanie danych do rejestrów OCR1A, OCR1B.

Awatar użytkownika
gazmajster
-
Posty: 30
Rejestracja: 01 sie 2006, 22:13
Lokalizacja: Z Zagłębia Drewna
Kontakt:

Post autor: gazmajster » 16 sty 2007, 23:46

Dzięki za odpowiedz myślę , że tu należałoby użyć assemblera a w tym języku
to ja jestem za cienki :mrgreen:
Pozdrawiam

ZbeeGin

Post autor: ZbeeGin » 17 sty 2007, 17:54

gazmajster pisze:Dzięki za odpowiedz myślę , że tu należałoby użyć assemblera a w tym języku to ja jestem za cienki
Żadnego assemblera nie będziesz potrzebował. Wszystko zrobisz z poziomu BASCOMa przez prostę operacje przypisań lub ustawianie/zerowanie bitów.
Przykład:

Kod: Zaznacz cały

Set TCCR1B.6
TCCR1A = &b10100011
TCCR1B = &b00000100

OCR1A = &h7F
OCR1B = &h03
OCR1C = 255
Musisz tylko przeczytać i zrozumieć jak działa licznik TIMER1 w trybie PWM, i przyswoić sobie co każdy opisany tam bit właściwie robi.
Z grubsza to co napisałem wcześniej włączy licznik TIMER1 w trybie PWM zliczający sygnał zegarowy podzielony przez 8. Wyjścia OC1A, OC1B zostaną podłączone do generatorów i będą generować impulsy o wypełnieniu 50% i 1%. Wyzeruje sobie także preskaler, przed uruchomieniem licznika.

p.s. Nie testowałem tych paru instrukcji. Napisałem to przeglądając tylko notę katalogową. Zatem mogłem coś przeoczyć. :) Ekspermentuj!

ODPOWIEDZ