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



Teraz jest 11 sty 2025, o 11:05


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 12 wrz 2013, o 06:33 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 11
Pomógł: 0

Użyłem timerów programowych. Inicjalizacja przerwania co 10 ms. Timer2 (programowy) = 10. Efekt jest taki ze co 100ms wykonuje się polecenie "abc" , inaczej mówiąc ustawiona jest częstotliwość 1kHz, przy założeniu że użyłem procka z taktowaniem ustawionym na 8MHz.

I teraz pytanie jeśli moje polecenie "abc" ma działać z częstotliwością 38kHz, w momencie gdy ustawiana jest wartość Timer2=10?
Chyba nie da się tego obejść bez dodatkowego mikoprocesora. Co guru sądzi o tym, jestem ciekaw?

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: 12 wrz 2013, o 06:55 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27343
Lokalizacja: Szczecin
Pomógł: 1041

Ja np chętnie bym odpowiedział ale kompletnie nie rozumiem jednak w czym rzecz ? :(

kubansa napisał(a):
Inicjalizacja przerwania co 10 ms. Timer2 (programowy) = 10. Efekt jest taki ze co 100ms wykonuje się polecenie "abc" , inaczej mówiąc ustawiona jest częstotliwość 1kHz, przy założeniu że użyłem procka z taktowaniem ustawionym na 8MHz

Gdzie 1kHz ? co to za 1kHz ? bo tak się pojawił tu nie wiadomo skąd ? Timer działa z częstotliwością 100Hz, a przy wartości = 10 wykonuje on swoje zadanie z częstotliwością 10Hz .... to pierwsza rzecz

kubansa napisał(a):
I teraz pytanie jeśli moje polecenie "abc" ma działać z częstotliwością 38kHz, w momencie gdy ustawiana jest wartość Timer2=10?


No tak tylko gdzie to pytanie ? wygląda tak jakby kolega zdania nie dokończył :(

Ale poza tym to jak to można rozumieć? Co to znaczy albo co kolega ma na myśli że polecenie "abc" ma działać z częstotliwością 38kHz ??? to już jest mega zagadka dla mnie :( .... chociaż sądzę, że kolega na razie ma kłopot ze zrozumieniem działania timerów programowych tak w ogóle.

PRZEDE WSZYSTKIM - tyknięcie tego timera w pętli głównej odbędzie się TYLKO --- UWAGA ---- JEDEN RAZ, potem oczekiwanie 100ms i znowu JEDEN RAZ przeleci ten kod w IF'ie timera1 i znowu oczekiwanie i tak ciągle

więc o jakiej częstotliwości 38kHz tutaj mówisz ?

kubansa napisał(a):
Chyba nie da się tego obejść bez dodatkowego mikoprocesora


dodatkowy procesor ? Na pewno nie ;) .... tylko postaraj się wyjaśnić może co chcesz zrobić - jaka ma być funkcjonalność tego programu czy urządzenia - a nie tłumacz tego przez kod źródłowy bo jak mówię - coś ci się na razie mocno myli z tymi timerami programowymi.

Jak powiesz jaki masz CEL to może będzie łatwiej od razu podpowiedzieć ci jaką drogą iść ok ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2013, o 08:28 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 11
Pomógł: 0

Mirek masz racje nie 1kHz tylko 10Hz. Dziękuje. Timery programowe przyznaje to dla mnie nowość, ale spędziłem już trochę czasu na nich testując różne polecenia wykorzystując debugowanie za pomocą diody led. Załapałem jak działają.
Co chce zrobić, już tłumacze logikę działania urządzenia, naciśniecie przycisku ma powodować takie działania:
1. uruchomienie silnika (krokowy) o zadany kąt
2. zatrzymanie silnika
3. wysłanie ramki podczerwieni (z falą nośną 38kHz)
4. powtórzenie punktu 1,2,3 trzydzieści sześć razy

Taka logika wymusza (moim zdaniem) zastosowanie wielowątkowości. Wykorzystuje timer programowy w ten sposób:
1. np. timer2 ustawiam na wartość 10, ta wartość jest sprawdzana co 10ms. Wartość 0 pojawi się po 100ms i wówczas wykona się polecenie uruchomienia silnika. Pierwszym warunkiem if steruje ile razy ma się zatrzymać silnik (ilość cykli), drugiem if'em steruje ilość kroków na dany cykl. Co 100ms wykonują się te if'y. Zmieniając wartość timera2 z 10 na 50 - steruje szybkością silnika.
I teraz najważniejsze to punkt "3", w momencie gdy silnik zrobi jeden cykl (przesunie sie o dany kąt i zatrzyma), ma się wygenerować ramka z falą nośna 38kHz, inaczej mówiąc ma się pojawić logiczna jedynka przez 2000us z nośną falą 38kHz, potem logiczne zero przez 27830us i tak dalej. Czas całej ramki to 36190us.
Generowanie ramki wygląda i działa wyzwolenie migawki w aparacie w oddzielnym projekcie. Teraz chce ten kod wpakować, dokładnie polecenie nikon(); do if'a po wykonaniu pierwszego cyklu. Gdy timer2=0 to raz migawka aparatu się wyzwoli, jeśli timer2=10 lub inna wartość, nie działa wyzwolenie migawki. Mam wrażanie że jest to związane z tym że, gdy timer2=10 to mamy 10Hz i to wpływa na Timer0 sprzętowy (do generowania fali nośnej). Tu tego nie łapie, połączenie timera programowego z timerem sprzętowym. Jak to powinno logicznie działać. Nie mam oscyloskopu, bo może bym doszedł do jakiś wniosków - jeszcze :-(

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: 12 wrz 2013, o 11:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sty 2013
Posty: 272
Pomógł: 3

1. Timery - są w książce opisane, również programowe
2. Obsługa podczerwieni - opisana w książce

Funkcja nikon to jakieś czyste nieporozumienie z tymi delay'ami.

P.S. Bardziej raczej przydałby Ci się analizator stanów logicznych, żeby zobaczyć jaką ramkę i czy faktycznie wysyłasz w świat.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2013, o 14:46 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 11
Pomógł: 0

Książkę wertuje non stop, ale jak się coś robi to dopiero wychodzi zdobyta wiedza i niewiedza.
Uproszczając wątek, mamy sytuacje gdzie mamy:
1. jeden Timer0 ustawiony na przerwania co 10ms (100Hz), w przerwaniu obsługujemy Timery programowe, tak jak jest w bluebook w projekcie wielozadaniowym
2. drugi Timer1 ustawiamy na przerwania co 13us (38,4kHz)
3. w momencie gdy Timer programowy się "przepełnia" - jesteśmy w pętli głównej to ustawiamy przerwania w Timer1
4. i co dalej się wydarzy, tego właśnie nie wiem?
Czy proces wskoczy do przerwania Timera1 i wykona instrukcje a potem wróci do pętli głównej i tak będzie skakał co 13us?

Nie wiem czy ktoś jest wstanie zrozumieć o co mi chodzi?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2013, o 20:24 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Nośną możesz generować bez użycia przerwań Timera 0. Przerób swój kod, aby korzystał z wyjścia OC0 mikrokontrolera.

_________________
Dragonus Cracovus: Biomagia



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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