ATNEL tech-forum https://forum.atnel.pl/ |
|
Kalibracja ATtiny10 https://forum.atnel.pl/topic21549.html |
Strona 1 z 1 |
Autor: | xentis [ 10 lis 2018, o 10:19 ] |
Tytuł: | Re: Kalibracja ATtiny10 |
Z tego co wyżej wrzuciłeś to na pewno wiadomo jedno - w kodzie masz preskaler timera ustawiony na "1" a Mirka program do przeliczania ma ustawiony preskaler na 256 więc wyliczenia F_CPU nie są właściwe. |
Autor: | Daro68 [ 10 lis 2018, o 11:00 ] |
Tytuł: | Re: Kalibracja ATtiny10 |
Kod Mirka z filmiku " #0365 ATTiny - KALIBRACJA analizator stanów logicznych" już sobie przećwiczyłem wiem że pleskaler tam jest ustawiony na 256 a w kodzie do lampki Quechua pleskaler jest na 1 więc pomyślałem że muszę to właśnie tak samo ustawić żeby dojść do taktowania procesora 31,25 kHz ale chyba nie tędy droga ustawienia lampki język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. ustawienia kalibracji |
Autor: | xentis [ 10 lis 2018, o 12:06 ] |
Tytuł: | Re: Kalibracja ATtiny10 |
Z powyższego wynika że chyba nie do końca wiesz co i jak. Timer zupełnie nie ma wpływu na częstotliwość taktowania uC. Jego ustawienia są poczyniane w taki a nie inny sposób by częstotliwość taktowania wyrzucić na pin procka by można ją było analizatorem zmierzyć. Preskaler timera się ustawia tylko po to by ta częstotliwość nie była za dużo bo analizator ma skończoną szybkość próbkowania więc im częstotliwość uC będzie bliższa częstotliwości próbkowania analizatora tym pomiar będzie bardziej przekłamany. Dla tego w Mirka pomocniku wogule nie ma preskalera 1 tylko 256 i 1024. Co do kalibracji procesora to tu również należy rozróżnić dwie rzeczy, jedna to preskaler systemowego wewnętrznego oscylatora RC, druga to układ kalibracji wewnętrznego oscylatora RC. Preskaler CLKPSR powoduje podział wbudowanego generatora RC przez 1,2,4,8,16,32,64,128,256. A wartość nominalna to 8Mhz, ustawienie domyślne preskalera to 8 więc procesor domyślnie taktowany jest 1MHz. Jeśli chcesz taktować procesor 31.25kHz to preskaler musisz ustawić na 256 czyli język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. A co do kalibracji to widzisz wewnętrzny generator RC nie jest super dokładnym źródłem taktowania, jego częstotliwość również zależy od napięcia zasilania, temperatury i pewnie jeszcze wielu innych czynników. Producent kalibruje ten generator na 8MHz ale robi to w pewnych ściśle określonych warunkach. Może się okazać że Twój egzemplarz procka u Ciebie na stole będzie bardzo odbiegał od idealnego 8MHz. Producent to przewidział i dał narzędzie w postaci układu kalibracji którym steruje się poprzez rejestr OSCCAL. Wpisanie do niego wartości bliższych 0x00 obniża częstotliwość taktowania a bliższych 0xFF podwyższa częstotliwość taktowania. Nie zawsze jednak trzeba w tym rejestrze grzebać by dostroić zegar do 8MHz, czasem programista celowo może chcieć obniżyć albo podwyższyć taktowanie procesora. Podsumowując jeśli chcesz skalibrować zegar na równiutkie 31,25kHz to możesz to zrobić albo na fabrycznym taktowaniu i przy fabrycznym CLKPSK (czyli wtedy wogule nic nie zapisujesz przy inicjalizacji do tego rejestru) i tak zmieniasz OSCCAL by Mirkowy pomocnik wyliczył wartość najbliższą 1MHz. Albo też od razu ustawić CLCPSK = 0x08 i wtedy dostrajać wartość OSCCAL tak by pomocnik wyliczył wartość najbliższą 31250. Póżniej w docelowym układzie w którym wyląduje ten egzemplarz uC w programie wpisujesz uzyskaną wartość OSCCAL tak by przy każdym uruchamianiu układu wartość ta była ładowana (tak musi być ona ładowana przy każdym starcie ponieważ ten rejestr jak i wszystkie pozostałe leżą w obszarze ulotnej pamięci RAM!) |
Autor: | xentis [ 12 lis 2018, o 22:13 ] |
Tytuł: | Re: Kalibracja ATtiny10 |
Ech i masz ci los, czytałeś co napisałem wyżej? Daro68 napisał(a): Z tego co zrozumiałem attiny fabrycznie ustawione jest na 8MHz poleceniem CLKPSR = 0x08 dziele ją przez 8 czyli 8:1 mam teraz 1MHz No właśnie nie, podział przez 8 jest włączony domyślnie czyli po uruchomieniu procek zawsze staruje z 1MHz.Zaglądałeś do noty? Z powyższego wynika że domyślnie w rejestrze siedzi wartość 0x03 odpowiadająca podziałowi przez 8. Mylisz pewne pojęcia - zapisanie do rejestru CLKPSR wartości 0x08 nie włącza podziału przez 8 a włącza podział przez 256 ponieważ wartość tam wpisana nie jest wartością rzeczywistą preskalera tylko wartością pozycji w tabelce która włącza właściwy preskaler. Druga rzecz to bez kalibracji będziesz miał około 31,25kHz po ustawieniu CLKPSR=0x08. Jedynie możesz mieć pewną odchyłkę - ale bez przesady. Trzecia sprawa to czas świecenia lampki, jeśli dobrze pamiętam, jest wyznaczany przez WatchDog który wybudza się co 8s i inkrementuje (bądź dekrementuje zmienną - nie pamiętam) 8 bitową, czyli zmienna 8 bitowa daje 256 * 8 sekund = 2048 sekund czyli około 34minuty. WatchDog pracuje i tak na innym taktowaniu więc kalibracja nie ma tu najmniejszego wpływu na pomiar czasu. Czwarta sprawa to Mirek przyznał że jego lampki świecą około 0,5h https://forum.atnel.pl/post212211.html#p212211 więc z Twoją jest wszystko OK. |
Autor: | xentis [ 14 lis 2018, o 19:18 ] |
Tytuł: | Re: Kalibracja ATtiny10 |
Daro68 napisał(a): Mirkowe attiny zeszło do 31 250 Hz które wpisał w eclipse moje pokazało 25 821 Hz czy może być taka rozbieżność Oczywiście że może, to tylko generator RC a nie kwarc. Jak chcesz to możesz dokalibrować do tych 31250Hz - zawsze to trochę więcej zabawy i więcej doświadczenia wyniesionego z niej. Tak na dobrą sprawę faktyczna wartość zegara F_CPU ma wpływ tylko na 2 rzeczy w tym konkretnym przypadku:1 - częstotliwość sygnału PWM - jeśli będzie zbyt niska to lampka będzie lekko mrugać szczególnie przy słabszym świeceniu - to akurat można ocenić gołym okiem. 2 - przeliczanie czasu oczekiwanie dla _delay_ms, ale tu tylko jeśli inna wartość będzie faktyczna, a inna wpisana w properitsy projektu. Jeśli wartość którą zmierzyłeś czyli 25821Hz wpiszesz do właściwości projektu i zrobisz clean i build to eclipse właściwie przeliczy delaye i czasy będą takie jak w założeniach. Daro68 napisał(a): i jeszcze jedna rzecz a nie chcę otwierać kolejnego wątku rozchodzi się o przedłużenie czasu świecenia lampki Mirka podałeś mi adres wąteku w którym trzeba powołać dodatkowa zmienną i jeśli dobrze zrozumiałem wstawić ją w te miejsce kodu coś podobnego do tego: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Normalnie przerwanie WDT jest wywoływane co 8s i w każdym wywołaniu jest zliczany "segment" odliczanego czasu. Dodając tę zmienną cały mechanizm będzie się wywoływał rzadziej o tyle razy na ile nastawiona będzie ta zmienna. ------------------------ [ Dodano po: 16 minutach ] Jest jeszcze jedno ale - w tym przerwaniu jest jeszcze tryb błyskania. Po takim zabiegu błyskanie się również mocno rozjedzie, Trzeba by trochę przebudować warunki mode_... tak by zmienna wpływała tylko na wykonywanie kodu tylko dla trybu świecenia, a nie dla błyskania. |
Autor: | Daro68 [ 15 lis 2018, o 00:13 ] |
Tytuł: | Re: Kalibracja ATtiny10 |
Jeszcze raz dzięki za wyjaśnienie a co się tyczy lampki Mirka moim pierwszym pomysłem było powiększenie tablicy tylko jak ją powiększyłem to program nie zmieścił się do procka przeanalizuje twoją podpowiedz chociaż nie wiem czy to wszystko ogarnę przy moim stanie wiedzy i znów nowe wezwanie Poz. Darek |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |