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



Teraz jest 27 lut 2026, o 00:34


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 2 lut 2016, o 22:36 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Witam
Mam pytanie. Analizuję kod obsługi RC5 z BB, zastanawia mnie jak mierzona jest długość impulsu w chwili gdy rejestr ICP1 jest w okolicach przepełnienia. Nie wiem czy dobrze to rozumiem, stąd moje pytanie. Ja rozumiem działanie kodu w ten sposób. Timer1 non-stop zlicza impulsy 1us w momencie wystąpienia zbocza opadającego zapamiętywana jest wartość rejestru ICP1 do zmiennej PulseWidth np 1000 minus LastCapture. Gdy impuls jest jako pierwszy to LastCapture jest = 0.
Kod:
PulseWidth = ICR1 - LastCapture;
LastCapture = ICR1;


więc PulseWidth = 1000, a LastCapture również = 1000.
Następnie przełączana jest reakcja na zbocze. Przy wystąpieniu przeciwnego zbocza ponownie obliczana jest wartość PulseWidth które teraz równa się PulseWidth = ICR1 (np 1800) - LastCapture(poprzednio1000) czyli PulseWidth = 800, a LastCapture = 1800.
Zgadza się?

Zastanawia mnie co będzie gdy po kolejnych impulsach pierwsze "otwierające" zbocze kolejnego z rzędu impulsu będzie w chwili gdy np ICP1 = 65100. W tedy do LastCapture zostanie również przepisana wartość 65100. Drugie zbocze "zamykające" impuls wystąpi już po przewinięciu rejestru który będzie wynosił np ICP1 = 365 i co w tedy?
Czy rejestr ICP jest w którymś momencie resetowany żeby się nie przewinął?
Zdaję sobie sprawę, że coś źle rozumuję bo kod dział znakomicie, dlatego proszę naprowadźcie mnie na "właściwe tory".



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2016, o 22:50 
Offline
Moderator
Avatar użytkownika

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

Tom277 napisał(a):
Zastanawia mnie co będzie gdy po kolejnych impulsach pierwsze "otwierające" zbocze kolejnego z rzędu impulsu będzie w chwili gdy np ICP1 = 65100. W tedy do LastCapture zostanie również przepisana wartość 65100. Drugie zbocze "zamykające" impuls wystąpi już po przewinięciu rejestru który będzie wynosił np ICP1 = 365 i co w tedy?

Po co się zatrzymałeś i się zastanawiasz, przeprowadź dalej tak samo obliczenia ... Niektórzy się tu zatrzymują i wymyślają takie rzeczy jak jakieś resetowanie ICP które by w niczym nie pomogło ... A nie ma żadnego resetowania ISP, ot przekręca się sam i liczy od zera ;)

Mówię podstaw sobie tak jak to liczysz liczby i leć dalej bo dobrze myślisz ;) i wszystko ci wyjdzie

_________________
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: 3 lut 2016, o 01:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Przeczytaj najpierw ten temat topic5609.html

Tom277 napisał(a):
Zastanawia mnie co będzie gdy po kolejnych impulsach pierwsze "otwierające" zbocze kolejnego z rzędu impulsu będzie w chwili gdy np ICP1 = 65100. W tedy do LastCapture zostanie również przepisana wartość 65100. Drugie zbocze "zamykające" impuls wystąpi już po przewinięciu rejestru który będzie wynosił np ICP1 = 365 i co w tedy?


Wtedy procek podstawi do wzoru odpowiednie wartości i wyjdzie mu wynik równy 801.

Można to sobie policzyć np. używając windowsowego kalkulatora przełączonego na widok programisty.
Jeśli ICP1 = 365 a LastCapture = 65100 to 365 - 65100 = -64735.

Liczba -64735 w kodzie uzupełnień do dwóch (U2) wygląda tak 0b11111111 11111111 00000011 00100001.
Nas interesują dwa młodsze bajty 0b00000011 00100001. I taka wartość ostatecznie wyląduje w zmiennej PulseWidth. Ta wartość w postaci dziesiętnej to właśnie 801.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lut 2016, o 07:48 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Faktycznie :D
Doby jest sposób z kalkulatorem. Tak też czułem pod skórą, że coś tu będzie związane z tym, że PulseWidth jest uint16 a nie int16.
Ciekawie ile jeszcze takich zagadek się kryje w C. :P Przeglądałem zawartość przerwania ICP i nigdzie nie mogłem znaleźć wspomnianego kasowania rejestru, więc coś musiało być innego.
Skoro to mam już wyjaśnione to "idę dalej", moim celem nie jest obsługa RC5 tylko pomiar szerokości impulsu.

Dziękuję koledzy za pomoc, jacekk232 bardzo pomocny był link do Twoich wyjaśnień.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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