ATNEL tech-forum
https://forum.atnel.pl/

timery programowe
https://forum.atnel.pl/topic23920.html
Strona 1 z 1

Autor:  krawi92 [ 16 wrz 2021, o 18:14 ]
Tytuł:  timery programowe

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.

Autor:  tonygryps [ 16 wrz 2021, o 18:42 ]
Tytuł:  Re: timery programowe

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ę.

Autor:  krawi92 [ 16 wrz 2021, o 19:01 ]
Tytuł:  Re: timery programowe

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ść.

Autor:  tonygryps [ 16 wrz 2021, o 19:19 ]
Tytuł:  Re: timery programowe

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:  krawi92 [ 16 wrz 2021, o 19:40 ]
Tytuł:  Re: timery programowe

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++;

Autor:  krawi92 [ 17 wrz 2021, o 18:19 ]
Tytuł:  Re: timery programowe

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:

Autor:  Marhef [ 18 wrz 2021, o 12:20 ]
Tytuł:  Re: timery programowe

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ł

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/