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.
Attiny26 i 261, różnice w działaniu Timer1
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.
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.
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.
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.
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.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
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ł.
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.
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.
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.
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.Na starym Attiny26, z zegarem 16MHz, Timer1 na PWM z PLL, bez preskalera dawał mi 3,3MHz przebiegu.
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.
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.
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.