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



Teraz jest 14 lis 2024, o 15:14


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 16 wrz 2021, o 18:14 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

Hej, mam problem z korzystania z timerów programowych. Jeśli powiedzmy chcę sobie migać pojedyncza diodą, lub zwiększać wartość np: OCRx to ok. Ale chciałem np: w timerze zwiększać i zmniejszać wartość pwm. Nie bardzo wiem, jak do tego podejść bo gdy w instrukcję timera wrzuce np: pętle for, no to ona kręci się z pełną prędkością.

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: 16 wrz 2021, o 18:42 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 546
Pomógł: 27

Strasznie mylisz pojęcia (jak masz bluebooka to musisz jeszcze raz poczytać o timerach programowych) timery programowe nie działają jak delay tylko np. ustawiasz jakiś timer w tryb ctc ( u ciebie to timer 1) tak aby jego przerwanie wykonywało się co jakiś określony czas (ustala to taktowanie procka preskaler i wartość wpisana w rejestr OCR tego timera) i w tym przerwaniu robisz np jak Ty
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
później w pętli while programu sprawdzasz
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i teraz uważaj ta liczba to właśnie określa czas co jaki wykona się ten warunek if w pętli while programu. np przerwanie wykonuje się co 1s to jak liczba równa się 10 to if wykona się się co 10 s a jak 1 to co sekundę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2021, o 19:01 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

Ja utknąłem w pewnym punkcie. Chcę kręcić servem w jedną i w drugą na zmianę. Na początku zrobiłem to na 2 pętlach for
(for uint8_t i=0;i<255;i++){
pwm1=i;
_delay_ms(50);
{
(for uint8_t i=255;i>1;i--){
pwm1=i;
_delay_ms(50);
{

Ale, chce się pozbyć tych delajów i pomyślałem, że mogę to zrobić na timerach programowych, tylko nie wiem właśnie jak do tego podejść.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2021, o 19:19 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 546
Pomógł: 27

No właśnie bez pętli for ustaw tak warunek if żeby wykonywał kod co 50 ms i dodatkowo użyj zmiennej np kierunek np tak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2021, o 19:40 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

Załapałem. W moim kodzie timer1 wykonywał po prostu obieg pętli co taki czas jaki mu zadałem. Miałem ogólnie problem jak zawrócić w drugą stronę, bo zwiększanie to nie problem, wystarczyło pwm1++;



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 wrz 2021, o 18:19 
Offline
Użytkownik

Dołączył(a): 25 lip 2021
Posty: 93
Pomógł: 0

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


No, w końcu się udało :lol:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2021, o 12:20 
Offline
Użytkownik
Avatar użytkownika

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

krawi92 napisał(a):
if(pwm1 == 18)kierunek = 0;
To jedno zmieniłbym na if (pwm1 <= 18). Dlaczego? A co, jeśli zmienisz wartość tej zmiennej w innej części programu i będzie mniejsza od 18? Będzie nadal działać, ale chyba nie tak, jakbyś chciał



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

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