ATmega32, TIMER1, PWM i problem :-)



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: Grzegorz Kurczyk <grzegorz.spam_at_nospam_spam.control.slupsk.pl>
Subject: ATmega32, TIMER1, PWM i problem :-)
Date: Sat, 02 Oct 2004 13:45:40 +0200


Witam
Walczę z następujacym problemem. Potrzebuję wygenerować ciąg imulsów o
regulowanym czasie trwania (w przykładzie 10ms) i stałej przerwie 0,1ms.
Wykombinowałem sobie, że wręcz idealne do tego będzie PWM. Z tego co
wyczytałem z pdf-a to TIMER1 w trybie WGM13=15 działa w następujący sposób:
1. TCNT1 liczy w górę
2. gdy TCNT1 = ORC1B następuje ustawienie wyjścia OC1B
3. gdy TCNT1 = OCR1A następuje zerowanie TCNT1 i oczywiście skasowanie
wyjscia OC1B
4. GOTO 1 :-)

niestety taki fragment kodu odpala TIMER1 w trybie PWM-10bit i licznik
liczy se w górę i w dół, w górę i w dół... jak na typowe PWM przystało
(przynajmniej tak pokazuje VMLAB3.10 i AVR-Studio4), a wartość OCR1A
jest w tym przypadku bez znaczenia.

OCR1A = 10000; // czas impulsu (zmienny)
OCR1B = 100; // czas przerwy (stały)
TCCR1A = (1<<COM1B1)|(1<<COM1B0)|(1<<WGM11)|(1<<WGM10);
TCCR1B = (1<<WGM13)|(1<<WGM12)|(1<<CS11); // CK/8 OSC=8MHz

Czy ktoś z Szanownych Grupowiczów wie jak to ugryźć ?
czy źle zintrerpretowałem dokumentację...

--
Pozdrawiam
Grzegorz Kurczyk
http://www.control.slupsk.pl
ftp://ftp.control.slupsk.pl
GG: 1445218

========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Jurek Szczesiul <jerzy.szczesiul_at_nospam_wycin.ep.com.pl>
Subject: Re: ATmega32, TIMER1, PWM i problem :-)
Date: Sat, 2 Oct 2004 15:57:20 +0200


Sat, 02 Oct 2004 13:45:40 +0200, na pl.misc.elektronika, Grzegorz Kurczyk
napisał(a):

Potrzebuję wygenerować ciąg imulsów o
regulowanym czasie trwania (w przykładzie 10ms) i stałej przerwie 0,1ms.
Wykombinowałem sobie, że wręcz idealne do tego będzie PWM.

Może lepiej weź zwykłe CTC. W przerwaniu będziesz przestawiać na przemian
0,1ms i zadaną wartość a wyjście OC1A ustawisz na toggle.

--
Pozdrowienia
Jurek Szczesiul

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Grzegorz Kurczyk <grzegorz.spam_at_nospam_spam.control.slupsk.pl>
Subject: Re: ATmega32, TIMER1, PWM i problem :-)
Date: Sat, 02 Oct 2004 17:08:32 +0200


Użytkownik Jurek Szczesiul napisał:

Witam

Może lepiej weź zwykłe CTC. W przerwaniu będziesz przestawiać na
przemian 0,1ms i zadaną wartość a wyjście OC1A ustawisz na toggle.

Tak to już kombinowałem i chyba to jedyne rozwiązanie. Myślałem, że
można to zrobić bardziej elegancko :)
Druga metoda, którą przećwiczyłem to tryb CTC i obsuga przerwań
SIG_OUTPUT_COMPARE1A i SIG_OUTPUT_COMPARE1B.
Niestety takie rozwiązanie odpada w związku z brakiem wielopoziomowych
przerwań w AVR-ach :-(
Procek oprócz generowania tych impulsów będzie miał jeszcze trochę do
roboty (konwersja A/D na przerwaniach i obsługa szeregówki) i jak będzie
zajęty np obsługą RS-a, to nie przyjmie krytycznego czasowo przerwania.
Wykona je dopiero po zakończeniu bieżącej obsługi co powoduje
niedopuszczalne przedłużenie impulsu.
Swoją drogą AVR-ki mogły by mieć przerwania wielopoziomowe. W
algorytmach sterowania często zachodzi potrzeba natychmiastowej i
bezwarunkowej obsługi jakiegoś zdarzenie.
Z tego wszystkiego dziwi mnie tylko, że ustawianie/kasowanie bitu
WGM13 w TCCR1B kompletnie nic nie zmienia !!! Przynajmniej na
symulatorach nie zauważyłem żadnej różnicy w zachowaniu się TIMER'a1

P.S. Mały Tiny15 ma PWM-kę działającą dokładnie tak jak mi trzeba, tyle
że 8-mio bitową :(



--
Pozdrawiam
Grzegorz Kurczyk
http://www.control.slupsk.pl
ftp://ftp.control.slupsk.pl
GG: 1445218

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Jurek Szczesiul <jerzy.szczesiul_at_nospam_wycin.ep.com.pl>
Subject: Re: ATmega32, TIMER1, PWM i problem :-)
Date: Sat, 2 Oct 2004 18:16:48 +0200


Sat, 02 Oct 2004 17:08:32 +0200, na pl.misc.elektronika, Grzegorz Kurczyk
napisał(a):

Procek oprócz generowania tych impulsów będzie miał jeszcze trochę do
roboty (konwersja A/D na przerwaniach i obsługa szeregówki) i jak będzie
zajęty np obsługą RS-a, to nie przyjmie krytycznego czasowo przerwania.
Wykona je dopiero po zakończeniu bieżącej obsługi co powoduje
niedopuszczalne przedłużenie impulsu.

Czy ja wiem ? IMHO mało prawdodpodobne. Nawet przy 0,1 ms będzie 800 cykli
zegara do dyspozycji żeby przeładować TOP timera. To jest właśnie fajne w
CTC że nie jest zbyt krytyczne.
Albo jeszcze inaczej : niech licznik sobie chodzi jako CTC ale z czasem
(impuls + 0,1 ms), więc na zmianę długości bedzie dużo czasu. Natomiast
dodatkowo ustawisz porównanie na OCR1B = 0,1 ms z przełączaniem wyjścia
OC1B. W efekcie na OC1B wyjdą impulsy 0,1 ms co (0,1+nastawiany ) czyli to
samo co ma być - tylko polaryzacje trzeba podobierać. Da się tak ? bo
dokładnie się nie przyglądałem.

Swoją drogą AVR-ki mogły by mieć przerwania wielopoziomowe.
Fakt, to dość wnerwiająca wada. Niby można kombinować z programowym
włączaniem przerwań w handlerze ale jakoś to wygląda na źródło większych
kłopotów niż pożytku ;-)

--
Pozdrowienia
Jurek Szczesiul

========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Jurek Szczesiul <jerzy.szczesiul_at_nospam_wycin.ep.com.pl>
Subject: Re: ATmega32, TIMER1, PWM i problem :-)
Date: Sat, 2 Oct 2004 18:55:47 +0200


Sat, 2 Oct 2004 18:16:48 +0200, na pl.misc.elektronika, Jurek Szczesiul
napisał(a):

Albo jeszcze inaczej : niech licznik sobie chodzi jako CTC ale z czasem
(impuls + 0,1 ms), więc na zmianę długości bedzie dużo czasu. Natomiast
dodatkowo ustawisz porównanie na OCR1B = 0,1 ms z przełączaniem wyjścia
OC1B. W efekcie na OC1B wyjdą impulsy 0,1 ms co (0,1+nastawiany ) czyli to
samo co ma być - tylko polaryzacje trzeba podobierać. Da się tak ? bo
dokładnie się nie przyglądałem.
E, za dobrze by było ;-) Owszem, jeszcze z przełączaniem OC1A i brameczką
exor na OC1A OC1B

--
Pozdrowienia
Jurek Szczesiul

========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Grzegorz Kurczyk <grzegorz_at_nospam_hehehe.control.slupsk.pl>
Subject: Re: ATmega32, TIMER1, PWM i problem :-)
Date: Sat, 02 Oct 2004 19:10:02 +0200


Użytkownik Jurek Szczesiul napisał:
Sat, 2 Oct 2004 18:16:48 +0200, na pl.misc.elektronika, Jurek Szczesiul
napisał(a):


E, za dobrze by było ;-) Owszem, jeszcze z przełączaniem OC1A i brameczką
exor na OC1A OC1B


Hehe dokładnie na to samo wpadłem :)

========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.astercity.net!news.aster.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Marcin Sommer" <m.sommerNOSPAM_at_nospam_kiz.pl>
Subject: Re: ATmega32, TIMER1, PWM i problem :-)
Date: Sat, 2 Oct 2004 18:47:32 +0200



Procek oprócz generowania tych impulsów będzie miał jeszcze trochę do
roboty (konwersja A/D na przerwaniach i obsługa szeregówki) i jak będzie
zajęty np obsługą RS-a, to nie przyjmie krytycznego czasowo przerwania.
Wykona je dopiero po zakończeniu bieżącej obsługi co powoduje
niedopuszczalne przedłużenie impulsu.

Witam,

Ostatnio popełniłem serwokontroler właśnie na COMPARE1A i COMPARE1B
(ATmega8). Serwa modelarskie steruje się impulsami od 0,5ms do 2,5ms mniej
więcej, powtarzanymi co 20ms. Kontroler obsługuje razem 16 serw i jest
sterowany z RSa. Nie zauważyłem żadnych niechcianych wahań impulsów, ani
drgań serw. A serwa są wrażliwe, bo nawet zastosowanie w kontrolerze
wewnętrznego czasomierza RC zamiast kwarcu powoduje zauważalne wibracje.
Może jednak ten sposób jest dobry wbrew wszelkim obawom.

Pozdrawiam,
Marcin Sommer
www.sommertech.pl



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Grzegorz Kurczyk <grzegorz.spam_at_nospam_spam.control.slupsk.pl>
Subject: Re: ATmega32, TIMER1, PWM i problem :-)
Date: Sun, 03 Oct 2004 09:29:07 +0200


Użytkownik Marcin Sommer napisał:


Witam,

A serwa są wrażliwe, bo nawet zastosowanie w kontrolerze
wewnętrznego czasomierza RC zamiast kwarcu powoduje zauważalne wibracje.

Hmmmm... to dziwne, bo w swoim nadajniku RC mam własnoręcznie
wyrzeźbiony koder na ATtiny15, który jak wiadomo ma tylko wewnętrzny
oscylator RC 1,6MHz. Przy dobrym skalibrowaniu oscylatora i
wykorzystaniu TIMER'a1 w trybie PWM (który w tym procku wręcz idealnie
nadaje się do tego celu - poza małą 8-bitową rozdzielczością) na wyjściu
dostajemy wzorcowe impulsy do modulowania nadajnika. Na początku też
kombinowałem metodą częściowo programową i miałem lekkie trzepotanie
serw. W tiny15 rejestr OCR1A ma dodatkowy rejestr tymczasowy. Wpisujesz
nową wartość bez specjalnych restrykcji czasowych, która dopiero po
zakończeniu cyklu PWM jest przepisywana sprzętowo do OCR1A. Jedyny
problem to niska rozdzielczość. Zakres od 1ms do 2ms podzielony jest na
100 "kroków". Troche to mało, ale podczas oblatywania modelu nie
odczułem jakiejś szczególnej niedokładności sterowania. Dla typowego
serwa wychodzi ok 0,9stopnia/krok.



--
Pozdrawiam
Grzegorz Kurczyk
http://www.control.slupsk.pl
ftp://ftp.control.slupsk.pl
GG: 1445218

========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Grzegorz Kurczyk <grzegorz.spam_at_nospam_spam.control.slupsk.pl>
Subject: Re: ATmega32, TIMER1, PWM i problem :-)
Date: Sat, 02 Oct 2004 19:35:34 +0200


Tak przy okazji dalszego drążenia problemu.
Czy ktoś wie do czego służą bity FOC1A i FOC1B w rejestrze TCCR1A ?
bo jakoś nie do końca mogę zrozumiec opisu w pdf-ie (str.106).
Kombinowałem z nimi pod VMLAB-em, ale jakoś ni odkryłem sposobu ich
działania. I dalej nie wiem czemu "nie działa" bit WGM13 w rejestrze
TCCR1B ?


--
Pozdrawiam
Grzegorz Kurczyk
http://www.control.slupsk.pl
ftp://ftp.control.slupsk.pl
GG: 1445218

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Jurek Szczesiul <jerzy.szczesiul_at_nospam_wycin.ep.com.pl>
Subject: Re: ATmega32, TIMER1, PWM i problem :-)
Date: Sat, 2 Oct 2004 20:25:35 +0200


Sat, 02 Oct 2004 19:35:34 +0200, na pl.misc.elektronika, Grzegorz Kurczyk
napisał(a):

Tak przy okazji dalszego drążenia problemu.
Czy ktoś wie do czego służą bity FOC1A i FOC1B w rejestrze TCCR1A ?
bo jakoś nie do końca mogę zrozumiec opisu w pdf-ie (str.106).

Wygląda, że wpisując 1 można natychmiastowo wyzwolić reakcję OC1x
przypisaną 'compare match' - ale tylko w niektórych konfiguracjach

Kombinowałem z nimi pod VMLAB-em, ale jakoś ni odkryłem sposobu ich
działania. I dalej nie wiem czemu "nie działa" bit WGM13 w rejestrze
TCCR1B ?

Pewnie w realnej kostce zadziała. Nie wiem jak VM ale AvrStudio ma sporo
takich rozmaitych niedoróbek.

--
Pozdrowienia
Jurek Szczesiul

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai