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



Teraz jest 19 lut 2025, o 22:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 19 wrz 2016, o 13:57 
Offline
Użytkownik

Dołączył(a): 26 sie 2016
Posty: 38
Pomógł: 0

Witam wszystkich.
Postanowiłem pobawić się serwem SG-5010 i jak to zwykle bywa coś nie działa ;).
Napisałem prosty program w którym steruje serwem przy pomocy 3 przycisków w następujący sposób
Gdy trzymam 1 przycisk to serwo powinno kręcić się w lewo, 2 serwo kręci się w prawo a 3 po prostu stoi w miejscu.

Używam ATmega32 taktowanie 8Mhz wewnętrzny oscylator

Mam problem z ustawieniem timera, po nieudanej próbie użycia timera sprzętowego postanowiłem spróbować z timerem programowym tak jak było pokazane w BB, oczywiście bez skutku.
Timer jest ustawiony w ten sposób :

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


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





Przerwanie:

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

Chciałem osiągnąć częstotliwość 50 Hz tak aby najwygodniej sterować serwem. wartości zmiennej pwm(volatile). Wartości tejże zmiennej wyszły mi z obliczeń :
Dla f=50Hz => T=20ms
2ms/20ms = 1/10
2ms(skręt podajże w prawo)
1/10 * 255 (wielkość zmiennej licznik) = 25,5 więc w przybliżeniu pwm = 26.

Zasadnicze pytanie brzmi czy źle liczę, źle ustawiłem timer czy oba ? ;)
Będę wdzięczny za każdą pomoc

PS. W internecie wyczytałem że najlepszym sposobem jest ustawienie trybu fast pwm (tryb 14) z użyciem jakiegoś rejestru ICR1, ale nigdzie nie mogłem znaleźć informacji (również w nocie ) o tym jak tego rejestru użyć.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 wrz 2016, o 14:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

W trybie 14 icr określa maksymalna wartość licznika - częstotliwość powtarzania sygnalu-
A ocrx określa wartość porównania.
W serwie co 20ms podajesz sygnał i w zależności jaka ma długość to albo kreci w lewo albo w prawo . Środkowe położenie to hm.. Cyba okolo 1,5 ms. Każdy krótszy sygnał obraca proporcjonalnie w lewo a dłuższy w prawo.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 wrz 2016, o 14:56 
Offline
Użytkownik

Dołączył(a): 26 sie 2016
Posty: 38
Pomógł: 0

Daro69 szerokość impulsu zależy od wartości OCx względem TCNTx a ICRx określa maksymalną wartość TCNTx ? A w tym wypadku licznika z którym porównuję zmienną pwm ?

Daro69 napisał(a):
W serwie co 20ms podajesz sygnał i w zależności jaka ma długość to albo kreci w lewo albo w prawo . Środkowe położenie to hm.. Cyba okolo 1,5 ms. Każdy krótszy sygnał obraca proporcjonalnie w lewo a dłuższy w prawo.


to akurat wiem



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 wrz 2016, o 16:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Koziol96 napisał(a):
...a 3 po prostu stoi w miejscu.

Ten fragment chyba Ci działa :)
Szkoda, że podajesz tylko urywki kodu - czasem błąd występuje przy inicjalizacji, definicjach i takich tam - ale cóż, każdy ma prawo do ochrony ;) .
Kiedyś testowałem serwo na ATm8 - może do celów porównawczych przyda się do czegoś:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wartości max i min dobierałem doświadczalnie.

Pozdr.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 wrz 2016, o 16:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Nie mam teraz dostępu do sd. Ale zapytam bo nie widzę czy jest ustawione wyjście DDRx |=(1<<PC0); ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 wrz 2016, o 16:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Daro69 napisał(a):
Nie mam teraz dostępu do sd. Ale zapytam bo nie widzę czy jest ustawione wyjście DDRx |=(1<<PC0); ?

...właśnie to miałem na myśli - koledzy zamieszczają "podejrzane fragmenty" nie przypuszczając że błąd może być w innym miejscu.

Pozdr.



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

Dołączył(a): 26 sie 2016
Posty: 38
Pomógł: 0

Tak wyjście jest ustawione. w razie czego wkleję cały kod.
Kicajek dzięki za kod sprawdzę czy w ATmega32 rejestry timera są takie same i spróbuję takich samych ustawień w swoim kodzie.

Może mi ktoś objaśnić jak działa rejstr ICR ?

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


skąd to się bierze ?

CAŁY KOD :

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: 19 wrz 2016, o 17:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Koziol96 napisał(a):
Może mi ktoś objaśnić jak działa rejstr ICR ?

;)
Daro69 napisał(a):
W trybie 14 ICR określa maksymalna wartość licznika - częstotliwość powtarzania sygnalu-
A OCRx określa wartość porównania.

A tak w prosty sposób:
w "normalnym" trybie licznik TIMER1 liczy do wartości 16bit i zostaje wyzerowany, korzystając z ICR określamy tą wartość.
W tym wypadku OCRx z oczywistych względów nie może być większe od ICR bo te dwie wartości są porównywane.

Pozdr.

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

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


Tutaj znalazłem taki kod co molestowałem ATtiny13 - SERWO/ADC - korzystałem z pwm_prog.:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

...zabij - nie pamietam co to było z tym LED'em :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 wrz 2016, o 17:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

A ja się tyle napisałem :lol:
A kolega kicajek już odpowiedział.
Dodam tylko ze w Twoim kodzie masz przerwanie co 20ms. a powinno być 256 x częściej. ;)
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2016, o 10:00 
Offline
Użytkownik

Dołączył(a): 26 sie 2016
Posty: 38
Pomógł: 0

Dzięki wam jest progres ;) serwo już się obraca i strasznie trzeszczy ;) myślę że chce mi powiedzieć że źle zrozumiałem kolegę Daro69 :D.
Dla pewności zapytam : Czy szerokość impulsu ustawia KIERUNEK obrotu czy POZYCJĘ serwa .
np. czy szerokość 2ms powoduje obrót w prawo czy ustawienie pozycji + 45 czy tam 180 stopni


EDIT:
Tak serwo miało racje źle zrozumiałem ;) szerokość sygnału ustawia POZYCJĘ (kurde jakie to mądre ;))

wklejam cały kod może kiedyś komuś się przyda :
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: 20 wrz 2016, o 12:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Tak, tak.
Tam wczesniej jak się wczytasz napisałem PROPORCJONALNIE.;).
Pozdrawia.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO