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



Teraz jest 2 kwi 2026, o 02:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
Autor Wiadomość
PostNapisane: 29 sty 2014, o 23:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2012
Posty: 58
Lokalizacja: Warka/Wawa
Pomógł: 0

Witam, chciałbym generować pwm dla serwomechanizmów modelarskich na pinach PD3 i PD4. To samo przerwanie (tak sobie pomyślałem) chciałbym wykorzystać do generowania PWM dla silników DC PC6 i PC1. Sterowanie kierunkiem silników PC5 i PC4 dla jednego oraz PC3 i PC2 dla drugiego.

Sprzęt: Atmega32, kwarc: 16 Mhz.

Teraz po kolei. Utworzyłem sobie "unio-strukturę" wg przepisu Mirka, która będzie mi przetrzymywała dane odpierane z UART. Dane są ładnie aktualizowane wysyłam z terminala i wyświetlam na lcd to 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.


W pętli głównej poczyniłem dwa switche do aktualizacji kierunku
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


po czym policzyłem sobie jak zrobić PROGRAMOWY PWM dla serw i ten sam dla silników
Dla serw wartość będzie miała możliwość zmieniać się w zakresie 12-26 (union_recive.frame_recive.cam_pion)
Natomiast dla silników 0-256 (union_recive.frame_recive.pwm_p)

Serwa czyli 50 Hz -> 20 ms

50Hz * 256 = 12800 Hz

obliczanie OCR0: 16000000/8/12800 = 156,2
czyli OCR0 = 155.

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


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


przerwanie działa bo union_send.frame_send.fault (jest w innej strukturze też ze specyfikatorem volatile) wyświetlam na lcd i widać że sobie przelatuje bardzo szybko

natomiast na PC6 PC1 PD3 PD4 nie mam pwm :cry:

Dodam że JTAG jest wyłączony oraz wejście TOSC1 (PC6) (na pewno nie działa jako wejscie bo dla pewności na poczatku dorzuciłem ASSR&=~(1<<AS2) )


na dodatek gdy już w pętli głównej użyje

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


to dioda podłączona anodą dla testów do PD2 świeci ciągle.

Ukłony komuś kto spróbuje pomóc.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 12:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2012
Posty: 58
Lokalizacja: Warka/Wawa
Pomógł: 0

Problem okazał się banalny, nie wiem jak to się stało, że tego nie widziałem :/ PORTC&=~PC6; a powinno być PORTC&=~(1<<PC6); itd.

_________________
sig off ;(



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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