Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 26 kwi 2025, o 23:27


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
    Autor Wiadomość
    PostNapisane: 10 lis 2018, o 00:33 
    Offline
    Użytkownik

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    Proszę o pomoc przyznam się szczerze że się trochę pogubiłem próbuję skalibrować attiny10 do lampki projektu Mirka i zejść z taktowaniem F_CPU do poziomu „+” „-” 31,250 kHz wprowadziłem pewne zmiany w kodzie Mirka z filmiku nie wiem czy dobrze na razie co mi się udało jedna lampka świeci około 40 min druga nie gaśnie pojawiły się też kłopoty z przyciskiem czyli jak przypuszczam długi czas delay po prostu nie mogę się z ty uporać
    ostatnie ustawienia OSCCAL = 1;
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Obrazek

    Poz.Darek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lis 2018, o 10:19 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2014
    Posty: 1033
    Lokalizacja: Trójmiasto
    Pomógł: 190

    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lis 2018, o 11:00 
    Offline
    Użytkownik

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    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
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    ustawienia kalibracji
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lis 2018, o 12:06 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2014
    Posty: 1033
    Lokalizacja: Trójmiasto
    Pomógł: 190

    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
    Składnia: [ Pobierz ] [ Ukryj ]
    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!)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 lis 2018, o 21:41 
    Offline
    Użytkownik

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    Z tego co zrozumiałem attiny fabrycznie ustawione jest na 8MHz poleceniem CLKPSR = 0x08 dziele ją przez 8 czyli 8:1 mam teraz 1MHz
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    a poleceniem OSCCAL = „1 – 255” mogę ją dostroić w dół i górę
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    teraz zaczyna sie problem w lekcji Mirka ustawienia są 8MHz
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    teraz muszę przestroić taktowanie attiny do lampki Mireka projektu
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    ustawił OSCCAL = 114 czyli na 31250 Hz i tą wartość wpisałem w eclipsie tylko że jego lampka świeci około 2,5godz a moja tylko 45min wiem że poszczególne egzemplarze różnią się od siebie tylko chyba nie o tyle więc mój licznik pracuje szybciej :?: .
    Teraz samo dostrajanie F_CPU przykład OSCCAL = 50 i OSCCAL = 10 //dostrajanie F_CPU tylko daleko mi jeszcze do 31250kHz które uzyskał Mirek więc może wynik z z ustawienia OSCCAL = 10 to jest 3 616 923 Hz mam podzielić przez 8 czyli 452 115 kHz i to taktowanie wpisać properties w eclipse przyznam się że już trochę się w tym pogubiłem :(
    OSCCAL = 50
    ObrazekOSCCAL = 10 Obrazek
    Poz.Darek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 lis 2018, o 22:13 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2014
    Posty: 1033
    Lokalizacja: Trójmiasto
    Pomógł: 190

    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?
    Obrazek
    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2018, o 00:55 
    Offline
    Użytkownik

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    Dzięki za cierpliwość ( za chwilę to będzie chyba moją ksywką ) przyznam że nie szukałem i nie sprawdziłem tego w nocie PDF attiny10 mój angielski jest 0! jedynie czym się wspomagam to porównania i tłumacz google i jeszcze nie do końca nie wiem czy dobrze zrozumiałem to na tyle wymówek teraz do rzeczy odrobiłem zadanie domowe i troszkę wiem więcej
    opis tabelki
    Obrazek
    teraz kolejna sprawa przetestowałem moje attiny10 na programie Mirka
    moje ustawienia ale nie mam pewności czy ustawienia są prawidłowe !!!
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    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ść
    Obrazek

    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
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Poz.Darek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2018, o 19:18 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2014
    Posty: 1033
    Lokalizacja: Trójmiasto
    Pomógł: 190

    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:
    Składnia: [ Pobierz ] [ Ukryj ]
    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 postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2018, o 00:13 
    Offline
    Użytkownik

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    Jeszcze raz dzięki za wyjaśnienie :D 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 :mrgreen: i znów nowe wezwanie
    Poz. Darek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO