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



Teraz jest 24 kwi 2024, o 09:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 21 mar 2018, o 09:21 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 21 mar 2018
Posty: 4
Pomógł: 0

Witam wszystkich.

Napisałem program w którym steruję jasnością LED za pomocą enkodera, a wartość maksymalna licznika od PWM jest wyświetlana na LCD. Wszystko działa super z jednym wyjątkiem.

Gdy pokręcę enkoderem by zmniejszyć wartość OCR2A z 1 do 0, dioda gaśnie całkowicie. Wyłącza się PWM, pin przełącza się w stan niski. Gdy jednak OCR2A ma wartość 255 i przekręcę enkoderem w prawo, tak by zmienna uint8_t pwm przyjęła wartość 255+1 czyli 0, dioda nadal pozostaje zapalona z pełną jasnością. W tym czasie LCD wyświetla wartość zmiennej pwm i faktycznie wynosi ona 0. Nie rozumiem czemu w takim razie nie zadziałało wyłączenie PWM.

Do celów testowych dopisałem funkcję która przypisuje zmiennej pwm wartość 0, wyłącza timer, ustawia pin PB3 na 0 i wysyła wartość zmiennej do LCD. W ten sposób zauważyłem, że jestem w stanie wyłączyć diodę tylko, gdy OCR2A ma wartość poniżej 210. Od 210 jest zero reakcji na przycisk.

Skąd się bierze takie zachowanie? To jakieś zabezpieczenie przed zbyt gwałtowną zmianą wartości? Timer działa w trybie fast-PWM.


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



Ostatnio edytowano 21 mar 2018, o 14:06 przez PUTINTIN, łącznie edytowano 3 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2018, o 09:46 
Offline
Użytkownik

Dołączył(a): 27 lip 2017
Posty: 61
Lokalizacja: Polska
Pomógł: 0

Czy dobrze ustawiasz ? Zamiast pinb3 użyj PB3

------------------------ [ Dodano po: 2 minutach ]

I zaniast unt8_t pusz uint8_r

------------------------ [ Dodano po: 3 minutach ]

A sprawdz debugerem na 1 diodzie led czy sie procek nie zawiesza

------------------------ [ Dodano po: 6 minutach ]

Wiem o tym że to dział rybny ale sprawdz oscyloskopem czy pwm sie nie zawiesza lub debugerem na 1 diodzie led lub na uart



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2018, o 10:05 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 21 mar 2018
Posty: 4
Pomógł: 0

Heh, literówka się wkradła, oczywiście powinno być uint8_t. Kod przepisywałem ręcznie.

Procek się nie zawiesza, gdyż dalej mogę sterować diodą. Do debugowania mam ten LCD, przez co wiem, że jednak coś się tam dzieje i jaki jest stan OCR2A jeśli podmienię LCD_send_int(pwm) na LCD_send_int(OCR2A).

Widać wtedy, że o ile zmienna pwm przyjmuje wartość 0 to OCR2A dalej ma wartość 255. Dopiero kolejne 'tyknięcie' enkodera zmieniai zmienną OCR2A na 1 i wtedy cofając enkoder dioda wygasza się.



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

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

PUTINTIN napisał(a):
ATMega328p 16Mhz
A przypadkiem w tym procesorze to nie ma rejestrów dla Timera2 TCCR2A i TCCR2B?

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


--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2018, o 14:01 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 21 mar 2018
Posty: 4
Pomógł: 0

Jasne, już poprawione. Nie wiem czemu przy przepisywaniu uroiłem sobie, że można to łączyć. W każdym razie problem dalej istnieje.



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

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Dlaczego używasz tryb 7 (TOP = OCR2A) a nie 3 (TOP = 0xFF)?
Działa Ci po tych poprawkach jakakolwiek regulacja?

--
Pozdrawiam,
Robert



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

Dołączył(a): 21 mar 2018
Posty: 4
Pomógł: 0

No tak. Czemu miałaby nie działać? Gdy TCNT2 ma wartosc ponizej OCR2A mam na wyjsciu logiczne 1, a gdy licznik osiągnie wartość OCR2A to mam na wyjściu 0 aż licznik doliczy do 0xff. Tak jest w nocie atmegi i tak działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 mar 2018, o 01:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

PUTINTIN napisał(a):
No tak. Czemu miałaby nie działać? Gdy TCNT2 ma wartosc ponizej OCR2A mam na wyjsciu logiczne 1, a gdy licznik osiągnie wartość OCR2A to mam na wyjściu 0 aż licznik doliczy do 0xff. Tak jest w nocie atmegi i tak działa.
Nie wiem jaki kod testujesz, ale na pewno nie ten co wkleiłeś. Po pierwsze to ma on kilka błędów uniemożliwiających jego skompilowanie. Po drugie to tryb 7 timera 2 jest to fast PWM ze zliczaniem od BOTTOM (czyli 0) do wartości OCR2A. A u Ciebie właśnie na wartości OCR2A ma nastąpić zmiana stanu. Dlatego nie będzie Ci działać! Musisz przestawić timer 2 na tryb 3 - fast PWM ze zliczaniem do 0xFF, wtedy uzyskasz zamierzony efekt.
Co do wyłączania / nie wyłączania przy wartościach 255 / 0, to nie wiem dlaczego stosujesz takie dziwne mechanizmy.
Ale przyczynę tego twojego problemu wyjaśnia poniższy obrazek:
Obrazek

Jak włączysz wyjście OC2A jako wyjście PWMa, to nie da się nim sterować jako zwykłym portem. Wyłączenie zegara dla PWMa też tego nie zmieni. Jak chcesz tak robić to musisz wyłączyć wyjście OC2A i przywrócić normalne sterowanie pinem:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



--
Pozdrawiam,
Robert



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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