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



Teraz jest 16 lis 2024, o 05:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 15 gru 2012, o 22:38 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

Witam

Otóż bawiłem się dzisiaj conieco czujniczkiem ultradźwiękowym i napotkałem taki problem. Otóż: do zliczania czasu stanu wysokiego używam wejścia ICP (w HC-SR04 czas stanu wysokiego w us odpowiada odległości)
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 wsyzstko pieknie działa, ale chciałbym że wyświetlał mi wynik w konsoli (połączyłem się z PC przez max232) co np.20ms. Napisałem coś takiego:

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 tutaj mam problem bo nie za bardzo mam pomysł jak to sobie wykombinować. Zrobiłem taką pętlę for:

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


I zadziałało by to dobrze gdybym programował liniowo, czyli nie używał przerwania. Natomiast gdy używam przerwania to nie mam pomysłu gdzie to "opóźnienie" wrzucić. Do obsługi przerwania przecież nie wrzucę bo to jest wejście przechwytujące.

Dla pełnego obrazu sytuacji wrzucam pełny kod - opóźnieniem przy przycisku nie należy się przejmować bo w finalnej wersji będzie to zupełnie inaczej rozwiązane( sygnał START z aplikacji z PC).

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 gru 2012, o 11:37 
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

A nie lepiej synchronizować sobie pracę pętli głównej licznikiem obsługiwanym przez Timer0 co np. 10ms. Chyba że szkoda to wtedy Timer1 i tak jest użyty i pracuje wystarczy wpisać odblokować przerwanie od przepełnienia i masz przerwanie co 32,768ms.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2012, o 17:01 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

No tak, ale spójrz.

Taktowanie mam 16MHz, i potrzebuje przerwanie co 10ms (czyli 100Hz). Wykorzystując 8-bitowy Timer0 i dzieląc preskalerem przez 1024, wartość OCR wyjdzie mi 156,25. Nie mogę wpisać do rejestru wartości z przecinkiem więc wpisując tam 156 otrzymam 100,16Hz - co nie za bardzo mnie urządza, ponieważ z czasem to odchylenie od pokazania wyniku co 10ms będzie coraz większe.

Ideałem byłby preskaler 256 no ale wtedy wyjdę poza dopuszczalną wartość OCR (czyli 625).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2012, o 18:55 
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

A to musi być w jednym przerwaniu to 10ms ? Przecież możesz dać preskaler=256, OCR0 = 125 i masz co 2ms, a przy OCR0 = 250 co 4ms. W przerwaniu możesz zwiększać drugi wewnętrzny licznik i zdarzenie w pętli głównej może być wyzwalane z wielokrotnością 2ms lub 4ms.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2012, o 20:55 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

Ehh, jak to mówią, najlepsze rozwiązania są zawsze najprostsze. Zawsze muszę kombinować na okrętkę :)


Na chwile obecną poczyniłem taki kod (Twojego pomysłu na razie nie wykorzystam, bo z nieznanych mi przyczyn padło mi zasilanie i muszę to jakoś ogarnąć) :

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


Wygląda na to że wszystko jest jak należy, ale martwi mnie jedna rzecz. Mianowicie czasami przerwanie wysyłające dane do PC uaktywnia się w czasie pomiaru ICR1. Czy do konsoli podeśle mi ostatnio "skończony pomiar", czy nieużyteczny śmieć z pomiaru "na gorąco" - czyli z jeszcze nie skończonego ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 gru 2012, o 08:58 
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

Wynik to zawsze skończony pomiar: aktualny lub poprzedni. Jest tak dzięki tej linii:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jakbyś chciał wiedzieć czy pomiar się zakończył należy badać bit ICES1.
PS.
Jesteś pewny odejmowania tych 7 impulsów. Przypomnę, że one nie wynikały z błędu pomiaru, a z wydłużonego generowania sygnału, gdy robił to ten sam procesor. Teraz gdy sygnał mierzony jest z zewnętrznego źródła moim zdaniem jest błędem odejmowanie tych 7 impulsów.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2012, o 20:38 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

Co do odejmowania 7 impulsów, to dzięki za celną uwagę. Tak trochę bezmyślnie wrzuciłem to odejmowanie, a przecież wcześniej sygnał nie pochodził z zewn. układu.

Natomiast dzisiaj tak nad tym siadłem i wpadłem na pewien pomysł, bo jeśli wynik ma być prezentowany co 10ms, to przecież mogę wrzucić _delay_ms(10). Sama funkcja nie zamraża mi procka, i przerwania będą nadal chodzić.

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