Attiny26 i 261, różnice w działaniu Timer1

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
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Attiny26 i 261, różnice w działaniu Timer1

Post autor: M@ciej » 05 cze 2014, 8:17

Witam.

Chciałem sie dowiedzieć, czy są jakieś róznice w działaniu Timer1 i PLL w Attiny26 i 261?
Zrobiłem przesiadkę z Attiny26 (stary, nie produkowany), na nowszą wersję, Attiny261.

Na starym Attiny26, z zegarem 16MHz, Timer1 na PWM z PLL, bez preskalera dawał mi 3,3MHz przebiegu.

Na nowszym Attiny261, z zegarem 20MHz, Timer1 z PWM i PLL dał co najwyżej 250kHz. Skąd ta różnica? Wszystko starałem sie skonfigurować tak samo. Doczytałem w nocie, żę w Attiny261 Timer1 jest 10-bitowy, ale ustawienie rejestru TC1H na zero (dwa najmłodsze bity) nic nie dało.

Potrzebuję tak szybkiego przebiegu do DDS.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 05 cze 2014, 17:15

Bo to nie te same procesory, są tylko kompatybilne pinowo. Ja co prawda mam 861 w domu, ale bez różnicy.
W TIny26 PLL daje ci 64MHz, a w Tiny261 tylko 32MHz, to pierwsza różnica.
Tiny26 Tomer 8 bitowy vs Tiny261 10-bitowy i bardziej skomplikowany.
To tak na oko masz 3,3MHz /2 bo PLL dwa razy wolniejsze = 1,65MHz.
Po drugie w Tiny261 Timery są nie porównywalnie bardziej skomplikowane niż w Tiny26, głównie za sprawą tego że Tiny261 jest zaprojektowany do sterowania silnikami BLCD, inaczej mówiąc zoptymalizowany pod budowę falownika 3 fazowego dla tych silników
Ogólnie różnic jest sporo, a sterowanie Timerami jest w Tiny261 o wiele bardziej skomplikowane..
Rejestry trzeba zapisywać w odpowiedniej kolejności są dwa TC1h i TC1L.

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 05 cze 2014, 18:32

W nocie do Tiny261 jest napisane, że PLL daje 64 MHz, chyba, że się ustawi najstarszy bit PLLCSR, wtedy jest podział na 2 i wychodzi 32MHz, ale z tym ustawieniem miałem PWM do 125KHz, czyli połowę z tego.

TC1H ustawia się nie tak prosto, nie skojarzyłem, jak to zrobić, ale podejrzewam, że gdyby przestawić skutecznie (mi się nie udało) Timer1 na 8 bit, uzyskałbym większą częstotliwość, to jak ustawianie TOP w Atmega8 lub pokrewnych, chociaż OCR1C mam na 255, natomiast opisu TC1L nie znalazłem w nocie.

Może niepotrzebnie upieram się przy Attiny261 (docelowo 861)? Chodzi mi o procka, który miałby szybki PWM (tak z 0,5MHz lub więcej) i min. 8kB Flasha na tablice przebiegów, bo w 2Kb to ledwie sinusa upchnąłem.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 05 cze 2014, 19:25

To do a 10-bit write, the high byte must be written to the TC1H register before the low byte is written. For a 10-bit read, the low byte
must be read before the high byte
TC1H musi być zapisany pierwszy potem można zapisać TCNT1 lub Compare czyli OCR1x. Jeżeli robisz odwrotnie zapis może nie odnosić oczekiwanego skutku.
Choć w twoim przypadku i tak powinno to być bez znaczenia bo Initial Value i tak jest równe 0.
Ale mechanizm zarządzania Timerem jest pokręcony w tym procesorze. Czyli zapisując rejstr np. OCR1A musisz najpierw zapisać TC1H, a potem OCR1A, choć w przypadku 8-bitów wystarczyłoby raz zapisać TC1H na 0, i tyle.
ATMEl strasznie pokręcony ten procesor zrobił.

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 05 cze 2014, 20:48

OK, więc jaki procek polecasz zamiast niego? Musi mieć min. 2 porty, jak Attiny. Nie mogę zrobić 2x4bit PWM, bo potrzebuję obydwu do generowania dwóch różnych przebiegów.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 06 cze 2014, 1:21

W czym to programujesz ?
Zanim zaczniesz szukać innego CPU, należy pobawić się tym, wydaje mi się że jest to do opanowania, znaczy się musi być.
PS. Wszystko pasuje jeżeli używasz PWMa 64MHz/256 = 250KHz.
W Tiny26 mogłeś uzyskać 500KHz, ale to dla tego że można tam skrócić PWM do 7 bitów przez wpisanie wartości do OCR1C, teraz trzeba przeanalizować note Tiny261, czy tam też tak się da zrobić ?
Właściwie jest to dokładnie ten sam Timer1 co w Tiny26, tylko 10 bitowy, i bardziej rozbudowany, a ponieważ w "cudzysłowie" chcieli zaoszczędzić na rejestrach, to jego obsługa jest przez to poprana nieco.
Na starym Attiny26, z zegarem 16MHz, Timer1 na PWM z PLL, bez preskalera dawał mi 3,3MHz przebiegu.
Toś chyba miał ustawioną rozdzielczość 4,5 bitów na tym PWMie,(64MHz/20 = 3,3MHz) inaczej jest to technicznie nie do osiągnięcia.

Jeżeli chodzi o inne CPU to raczej wyboru wielkiego nie ma. 20-28pinowych XMEGA bardzo nie ma, a cała reszta raczej nic innego ci nie zaoferuje, jedynie małe ARMy. Ale z tego co widzę poza ATTinyX61 wyboru raczej nie masz. Jedynie XMega32E5 w 32 pinowej obudowie TQFP, ale to znowu inny programator, i bardziej skomplikowana architektura, no i programowanie raczej w C.

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 06 cze 2014, 19:49

Programuję w Bascomie, lecz odwołuję się do rejestrów, więc język nie powinien mieć tu znaczenia. Porównałem kształty przebiegów DDS z Attiny26 i Attiny261 pod względem zniekształceń i niestabilności (porównanie wzrokowe na ekranie oscyloskopu) i wyniki są b. zbliżone do siebie, pomimo znacznej różnicy w częstotliwościach sygnałów PWM. Tak więc można uznać, że przebieg 250KHz jest wystarczający do moich celów. A skąd udało mi się uzyskać 3,3MHz na Attiny26? Nie wiem, sprawdzę jeszcze raz, jak będę miał dostęp do oscyloskopu, bo prototyp się ostał.

EDIT

Sprawdziłem jeszcze raz częstotliwość PWM w tym Attiny26 i rzeczywiście jest 260kHz (a nie 250). To 3,3MHz to musiałem złapać jakis szum.

ODPOWIEDZ