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 16 mar 2025, o 18:59


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
    Autor Wiadomość
    PostNapisane: 8 sie 2015, o 20:51 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 wrz 2013
    Posty: 162
    Lokalizacja: Rbk
    Pomógł: 5

    Witam!

    Ostatnio z bratem złożyłem kolektor słoneczny do nagrzewania wody w basenie i powoli biorę się za budowę sterownika. Przeszkadzają mi jeszcze w tym upały - 30.5*C w pokoju ;/

    Chcę wyświetlać temperaturę na wyświetlaczu 7 segmentowym. Dotychczas używałem TIMERA2 w mikrokontrolerze Atmega8 do obsługi multipleksowania - 3 segmenty. Tym razem jednak tego timera wolałbym użyć do zliczania czasów w sterowniku - nie muszą być dokładne ;)
    I tak sobie liczę:
    Wartość nie może być większa niż 255 ( 8 bitów ).
    FCPU/PRESKALER/150Hz (częstotliwość odświeżania wyświetlacza; 3 segmenty, dla każdego po 50Hz).
    8 000 000Hz/256/150= 208.33Hz
    Czyli wynik mieści się w 255.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Problem w tym, że segmenty lekko migają.
    Próbowałem do poprawienia użyć rejestru TCNT0 - z tego co rozumiem, wartość tutaj wpisana jest wartością początkową timera i zlicza do 255. Czyli zwiększając wartość rejestru TCNT0 odświeżanie powinno przyśpieszyć.
    Ale z jakiś powodów jest brak reakcji, kod wygląda tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Nie wiem, czy wartość 49 jest prawidłowa - próbowałem coś zdziałać na przykładzie MKAVRCalculator ;P Ale nawet zwiększenie tej wartości do np. 250 nic nie daje.

    Gdy zmienię preskaler na 64 to wyświetlacz działa tak jak powinien - nie widać odświeżania. Ale w takim razie jak zlicza to mikrokontroler? Liczy od 0 do 255 i tak w kółko? Jeśli tak to można określi jaką częstotliwość odświeżania ma wyświetlacz? - teraz coś policzyłem (nie wiem czy dobrze) ;P Czy jest to 122Hz?


    Pozdrawiam!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 sie 2015, o 21:38 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    A czy w funkcji obsługi przerwania ustawiasz licznik TCNT0 na tą wybrana wartość?
    W trybie overflow, w przerwaniu musisz liczbę 49 wpisać do TCNT0 aby licznik liczył od tej wartości do 255.
    Jeśli tego nie zrobisz to licznik będzie liczył w zakresie 0...255 i w rezultacie przerwanie będzie się wywoływało z mniejszą częstotliwością.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 sie 2015, o 09:19 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 wrz 2013
    Posty: 162
    Lokalizacja: Rbk
    Pomógł: 5

    A, widzisz kolego tego właśnie mi brakowało! :) Teraz działa bez problemu.
    Przyznam się bez bicia, że nie widziałem o tym, że trzeba tą wartość resetować w funkcji obsługi przerwania ;P


    Dziękuję!
    Pozdrawiam!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 sie 2015, o 11:11 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1967
    Lokalizacja: Lipsko
    Pomógł: 125

    dlatego w takich zastosowaniach najwygodniej stosować tryb ctc :)

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 sie 2015, o 11:14 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27363
    Lokalizacja: Szczecin
    Pomógł: 1043

    Ds3 napisał(a):
    Przyznam się bez bicia, że nie widziałem o tym, że trzeba tą wartość resetować w funkcji obsługi przerwania

    A ja przypomnę tylko, że pisze o tym w Bluebooku w początkowych rozdziałach gdy opisuję różnice pomiędzy trybem NORMAL i CTC - a BB widzę, że masz ;)

    ------------------------ [ Dodano po: kilkunastu sekundach ]

    SylwekK napisał(a):
    dlatego w takich zastosowaniach najwygodniej stosować tryb ctc :)


    Zdecydowanie CTC jest lepszy i dlatego np lepsza jest ATmega88 która ma dla każdego timera CTC, natomiast biedna stara ATmega8 nie ma CTC dla Timer0

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    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: 5 ] 

    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:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO