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 10 maja 2025, o 10:24


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
    Autor Wiadomość
    PostNapisane: 18 mar 2018, o 09:57 
    Offline
    Nowy

    Dołączył(a): 18 mar 2018
    Posty: 11
    Pomógł: 0

    Witam,

    Chciałbym uruchonic timer2 w trybie CTC, ale niestety nic się nie dzieje. Dodam tylko, że nie chce wykorzystywać przerwania, tylko chciałbym żeby na wyjściu OC2A stan się samoistnie zmieniał, bez zaangażowania procesora

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



    Dla porównania podobny kod na ATmega32 który działa:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Pozdrawiam,
    Marek



    Ostatnio edytowano 18 mar 2018, o 21:18 przez maru_9, łącznie edytowano 3 razy

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2018, o 10:30 
    Offline
    Nowy

    Dołączył(a): 18 mar 2018
    Posty: 11
    Pomógł: 0

    Kurcze może nie umiem czytać, ale jak dla mnie np. na stronie 203 jest wyraźnie napisane Name : TCCR2A

    Czy chodzi o coś innego?

    Dodatkowo zbadałem, że niezależnie od tego co ustawię w rejestrze OCR2A licznik i tak liczy do pełnej wartości (255)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2018, o 10:59 
    Offline
    Nowy

    Dołączył(a): 18 mar 2018
    Posty: 11
    Pomógł: 0

    Ale przecież WGM2[2:0] = 100 to tryb zarezerwowany



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2018, o 11:29 
    Offline
    Nowy

    Dołączył(a): 18 mar 2018
    Posty: 11
    Pomógł: 0

    Chciałbym uzyskać po prostu kontrolowaną częstotliwość na wyjściu.
    Wydaje mi się że tryb CTC idealnie się do tego nadaje: licznik liczy do jakiejś wartości i zmienia stan na wyjściu(COM = 01)
    WGM[2:0] = 101 daje mi przecież tryb PWN, którego w sumie nie chcę.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2018, o 12:01 
    Offline
    Nowy

    Dołączył(a): 18 mar 2018
    Posty: 11
    Pomógł: 0

    Faktycznie działa ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2018, o 15:27 
    Offline
    Użytkownik
    Avatar użytkownika

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

    maru_9 napisał(a):
    Faktycznie działa ;)
    Uwierz mi że Twój kod z pierwszego postu również działa. Znając życie masz do pinu D11 swojego UNO podłączoną diodę więc przy taktowaniu 8MHz podziale przez 256 i zliczaniu do 10 to mrugania tej diody nie zauważysz bo mruga ona wtedy z częstotliwością około 3kHz. Nie wiem czy zauważyłeś że kolega zubik włączył preskaler 1024 - i to jest kluczowe ustawienie, dodatkowo włączył tryb PWM Phase Correct który to tryb powoduje w tym przypadku dodatkowy podział częstotliwości przez 2 (8000000/1024/250/2 =~15Hz co już oko na diodzie wychwyci).
    zubik napisał(a):
    Kluczową rolę gra tutaj ustawienie bitu FOC2A w rejestrze TCCR2B
    tu to trochę herezję kolega głosi biorąc pod uwagę zapis w nocie:
    Atmega328P_Datasheet napisał(a):
    Bit 7 – FOC2A: Force Output Compare A
    The FOC2A bit is only active when the WGM bits specify a non-PWM mode.
    Czyli bit ten działa WYŁĄCZNIE w trybie non_PWM!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2018, o 21:20 
    Offline
    Nowy

    Dołączył(a): 18 mar 2018
    Posty: 11
    Pomógł: 0

    xentis napisał(a):
    maru_9 napisał(a):
    Faktycznie działa ;)
    Uwierz mi że Twój kod z pierwszego postu również działa. Znając życie masz do pinu D11 swojego UNO podłączoną diodę więc przy taktowaniu 8MHz podziale przez 256 i zliczaniu do 10 to mrugania tej diody nie zauważysz bo mruga ona wtedy z częstotliwością około 3kHz. Nie wiem czy zauważyłeś że kolega zubik włączył preskaler 1024 - i to jest kluczowe ustawienie, dodatkowo włączył tryb PWM Phase Correct który to tryb powoduje w tym przypadku dodatkowy podział częstotliwości przez 2 (8000000/1024/250/2 =~15Hz co już oko na diodzie wychwyci).
    zubik napisał(a):
    Kluczową rolę gra tutaj ustawienie bitu FOC2A w rejestrze TCCR2B
    tu to trochę herezję kolega głosi biorąc pod uwagę zapis w nocie:
    Atmega328P_Datasheet napisał(a):
    Bit 7 – FOC2A: Force Output Compare A
    The FOC2A bit is only active when the WGM bits specify a non-PWM mode.
    Czyli bit ten działa WYŁĄCZNIE w trybie non_PWM!


    Wiesz było wręcz przeciwnie!!!
    Dioda nie świeciła wcale ;(
    Ale skoro mówisz że kod był dobry to może warto jeszcze raz się nad tym pochylić



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2018, o 21:37 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Twój kod z pierwszego postu wkleiłem żywcem do eclipse i wgrałem do arduino nano które posiadam (taktowanie 8MHz) i kod bez żadnych zmian działa, co prawda dioda praktycznie świeci ale to normalne przy takiej częstotliwości. Nie mam pojęcia dla czego u Ciebie dioda wcale się nie zaświeca. Mogę jeszcze wygrzebać UNO (gdzieś powinno się walać po szufladach jakieś) i przetestować na UNO

    ------------------------ [ Dodano po: 24 minutach ]

    Przetestowane na UN0 (taktowanie kwarcem 16MHz, dioda świecąca podłączona w szereg z rezystorem 220Ohm między pin D11 a masę)
    Na kodzie wklejonym w pierwszym poście dioda świeci.
    Na kodzie nieznacznie zmodyfikowanym (preskaler 1024, OCR2A=254) dioda nieznacznie mruga
    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: 18 mar 2018, o 22:18 
    Offline
    Nowy

    Dołączył(a): 18 mar 2018
    Posty: 11
    Pomógł: 0

    Dzięki, przy okazji odkryłem ciekawostkę:

    Kiedy zapisze kod tak:

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

    to śmiga jak ta lala.

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


    to jest kaszana i dioda nie świeci.

    Dziękuję bardzo za pomoc ;)
    Jesteście super!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2018, o 23:01 
    Offline
    Nowy

    Dołączył(a): 18 mar 2018
    Posty: 11
    Pomógł: 0

    Potrzebuje od 2MHz do 4MHz, na razie chciałem zobaczyć jak wg uzyskać zadana czestotliwość.
    No ja też specjalnie różnicy w kodzie nie widzę, oprócz jednej:
    W drugim przypadku dioda nie świeci ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 mar 2018, o 23:22 
    Offline
    Nowy

    Dołączył(a): 18 mar 2018
    Posty: 11
    Pomógł: 0

    Tak dla innych wartości OCR też nie świeci.

    Drugi kod został napisany właśnie dla środowiska arduino, ale może lepiej będzie pisać w klasycznym C



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

    Dołączył(a): 26 sty 2016
    Posty: 1170
    Lokalizacja: Kraków
    Pomógł: 93

    Z tego, co wiem, arduino wykorzystuje niektóre timery, np. do funkcji delay(), millis(). Sprawdź, które masz dostępne.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 mar 2018, o 08:12 
    Offline
    Nowy

    Dołączył(a): 18 mar 2018
    Posty: 11
    Pomógł: 0

    No tak, timer2 jest wykorzystywany do funkcji tone(), ale spodziewałbym się, ze zmiany w konfiguracji timera spowodują złe działanie danej funkcji arduino, a nie brak działania timera ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 mar 2018, o 08:32 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1170
    Lokalizacja: Kraków
    Pomógł: 93

    A wiesz, w którym momencie arduino konfiguruje timer? Może być tak, że to arduino zmienia Twoją konfigurację.
    Nie mam teraz możliwości, żeby to sprawdzić. Dawno temu sprawdzałem, jak jest zapisany plik arduino.h, tam szukaj konfiguracji timerów.
    Jeszcze jedno, z tego, co widzę, rejestry ustawiasz za pomocą "|=". Więc bity ustawione przez arduino dalej zostają ustawione. Spróbuj wyzerować dodatkowo bity w rejestrach, które powinny mieć wartość 0.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 mar 2018, o 19:01 
    Offline
    Nowy

    Dołączył(a): 18 mar 2018
    Posty: 11
    Pomógł: 0

    Faktycznie uprzednie wyzerowanie rejestrów TCCR2A i TCCR2B pomogło!
    Dzięki ;)



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

    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