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



Teraz jest 29 mar 2024, o 07:47


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: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

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: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

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: 1146
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: 1146
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 6 gości


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