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



Teraz jest 23 kwi 2024, o 12:19


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 28 ] 
Autor Wiadomość
PostNapisane: 4 lut 2017, o 18:06 
Offline
Nowy

Dołączył(a): 19 kwi 2016
Posty: 21
Pomógł: 0

Witam mam kilka pytań na temat kodu dekodującego RC5 umieszczonego w BB. Po pierwsze jest tam jeden if a dokładnie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
który nie posiada żadnych nawiasów klamrowych, a więc skąd wiadomo jaką część kodu on obejmuje?

Po drugie dlaczego w ifie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
jeszcze raz sprawdzamy czy
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
przecież aby wejść do tego ifa status ramki musi być "ok" a gdy PulseWidth > MAX_BIT to nie jest to możliwe bo już na początku przerwania w pierwszym ifie sprawdzamy dokładnie to samo tylko tym razem gdy jest to prawda zerujemy rc5cnt, co w dalszej kolejności powoduje (kolejny if) że ramka przebiera status FRAME_END co uniemożliwia wejście do wspomnianego pierwszego ifa. Więc czy ten if nie jest przypadkiem zbędny?

No i na końcu co dokładnie zlicza rc5cnt?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2017, o 18:14 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Na pierwsze mogę odpowiedzieć. Obejmuje jedną linijkę kodu pod nim albo obok, albo może tak jaśniej. Tylko do pierwszego średnika po nim. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2017, o 18:19 
Offline
Nowy

Dołączył(a): 19 kwi 2016
Posty: 21
Pomógł: 0

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


w zasadzie równa się temu

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


tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2017, o 18:21 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Dokładnie ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2017, o 20:42 
Offline
Nowy

Dołączył(a): 08 sty 2017
Posty: 10
Pomógł: 0

Witam,
jestem tu pierwszy raz, staram się rozgryźć C i zrozumieć opisany dekoder RC5 w BB, ale od linijki

if (pulsewitch > max_bit) rc5cnt = 0

już do samego końca nierozumiem go.

Można prosić o wyjaśnienie ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2017, o 21:05 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Niestety nie potrafię pomóc mogę tylko metodę nauki poleci. Ja też nie rozumiałem tego czarna magia ten kod. I aby zrozumieć trzeba wziąć sobie jedną ramkę rc5 i po kolei sprawdzać jak będą zmieniać się zmienne zapisywać na kartce z każdym przerwaniem wartości ;) czyli tak jakby wykonać ten kod ale naszą głową a nie prockiem :lol: . I po kilku prześledzonych ramkach w głowie zaczynają świtać pomysły i jak to chciał zrealizować autor :) .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2017, o 21:41 
Offline
Nowy

Dołączył(a): 08 sty 2017
Posty: 10
Pomógł: 0

Dobrze, zanim to zrobię jak mi radzisz chciałbym wiedzieć co oznaczają następujace zmienne, jakie wartości mogą przyjmować:

IrpulseCount

rc5cnt

Irdata

Frame_status



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2017, o 21:53 
Offline
Nowy

Dołączył(a): 19 kwi 2016
Posty: 21
Pomógł: 0

IrpulseCount to ilość zdekodowanych bitów, Irdata to zmienna z zdekodowaną ramką (czyli adres bit toggle oraz przesłane dane), Frame_status to obecny status ramki, a co do rc5cnt to sam nie wiem ale wydaje mi się że są to połówki bitów



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2017, o 09:21 
Offline
Nowy

Dołączył(a): 08 sty 2017
Posty: 10
Pomógł: 0

Myślę, że całe odczytywanie poszczególnych bitów kodu znajduje się:

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

W 1 linijce rc5cnt - dokłanie niewiadomo
w 2 sprawdza resztę z dzielenia, jezeli 0 to
w 3 wstawia 0 do Irdata na koniec
w 4 sprawdza czy ustawiona jest reakcja na zbocze rosnące, jeżeli tak to wstawia 1 na końcu

Czy tak to przebiega ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2017, o 09:39 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Z tym pierwszyn warunkiem chodzi o bity startu najprawdopodobniej. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2017, o 09:49 
Offline
Moderator
Avatar użytkownika

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

Jacek54 napisał(a):
W 1 linijce rc5cnt - dokłanie niewiadomo

;) wiadomo wiadomo ;) ..... no tylko to działa razem z linijką DWA a zatem

if (rc5cnt > 1) {
if (( rc5cnt % 2) ==0 {
Irdata = Irdata << 1
if ((TCCR1B & (1<<ICES1))) Irdata |= 0x0001;
IrPulseCount++;
// .... coś tam dalej
}
}

czyli - JEŚLI wartość licznika impulsów RC5 bo zmienna rc5cnt jest jak z nazwy widać licznikiem impulsów ramki (rc5 cnt - rc5 counter) ... a więc zlicza je po kolei ... i nawet napisałem to w książce

Jacek54 napisał(a):
w 2 sprawdza resztę z dzielenia, jezeli 0 to

Takie wyjaśnienie kompletnie nie ma sensu ... ten warunek jest wykonywany TYLKO i wyłącznie (CO DRUGI IMPULS) do tego użyte jest modulo - proponuję zapoznać się z działaniem modulo i praktycznym jego wykorzystaniem czyli tak jak tutaj właśnie - mały przykład


Kod:
rc5cnt    %2

0        0
1        1
2        0
3        1
4        0
5        1
6        0
7        1
8        0
9        1
10       0
11       1
12       0
13       1


widzisz teraz kiedy działa warunek if (( rc5cnt % 2)

zawsze gdy wartością modulo jest JEDEN czyli co drugie przerwanie można powiedzieć

a więc tak jak tam kolega wyżej pisał ale też ja zdaje się w książce - weź kartkę papieru i sobie DOKŁADNIE rozrysuj sobie jedną ramkę RC5 i analizuj ją zbocze po zboczu razem z tą procedurą

Jacek54 napisał(a):
w 3 wstawia 0 do Irdata na koniec

to jest tak nieprecyzyjne określenie - że aż ciarki po plecach przechodzą ;) ... co to znaczy na końcu ?

zawartość Irdata jest przesuwana w LEWO panie kochany o jeden bit - a to że najmłodszy bit przyjmuje wartość zero przy okazji to już inna sprawa - podsumowując to tu buduje się wartość ramki

Jacek54 napisał(a):
w 4 sprawdza czy ustawiona jest reakcja na zbocze rosnące, jeżeli tak to wstawia 1 na końcu

DOKŁADNIE tylko że nie na żadnym KOŃCU lecz na pozycji najmłodszego bitu na którym wcześniej w linijce 3 było wsunięte zero

_________________
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: 5 lut 2017, o 14:31 
Offline
Nowy

Dołączył(a): 19 kwi 2016
Posty: 21
Pomógł: 0

No to ja mam jeszcze jedno pytanie dlaczego rc5cnt jest zwiększane 2 razy gdy PulseWidth > MAX_HALF_BIT przecież to też jest 1 impuls. Oraz czy linijkę
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
można by zastąpić
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
a jeśli tak to czemu używamy pierwszej dłuższej wersji.

No i ponawiam pytanie z pierwszego mojego posta o tego ifa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2017, o 14:46 
Offline
Nowy

Dołączył(a): 08 sty 2017
Posty: 10
Pomógł: 0

Dziękuje za wyjaśnienie, ale dalej jest to dla mnie niezrozumiałe.

Czy rc5cnt jest zmienną, która zwiększa swoją wartość po każdym wywołaniu przerwania?
Czy rc5cnt może przyjąć wartość maksymalnie 28 ?
Skąd program wie, kiedy wartość bitu jest 0, a kiedy 1 ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2017, o 18:10 
Offline
Moderator
Avatar użytkownika

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

Kroniowiorka napisał(a):
No to ja mam jeszcze jedno pytanie dlaczego rc5cnt jest zwiększane 2 razy gdy PulseWidth > MAX_HALF_BIT przecież to też jest 1 impuls.

eeeeh Panie, panie ... a gdzie ty tam widzisz podwójne zwiększanie ?

Pewnie że można napisać

IrData |= 1

a kto ci zabroni ? ja ? ... Ja akurat użyłem 0x0001 żeby czytelnik widział, że działamy na zmiennej dwubajtowej

Kroniowiorka napisał(a):
No i ponawiam pytanie z pierwszego mojego posta o tego ifa.


To ja się tyle rozpisałem w odpowiedzi - a ty piszesz, że ponawiasz pytanie - bez słowa nawet czy coś zrozumiałeś czy nie ? ...

Jacek54 napisał(a):
Czy rc5cnt jest zmienną, która zwiększa swoją wartość po każdym wywołaniu przerwania?

PEWNIE ŻE TAK - i piszę o tym w książce - to PODSTAWA w tym akurat sposobie - cały licznik bitów opiera się na rc5cnt - i też wyżej o tym pisałem - chyba skończę pisać bo nikt nie czyta tego co napisałem i dawaj znowu te same pytania

Jacek54 napisał(a):
Skąd program wie, kiedy wartość bitu jest 0, a kiedy 1 ?

Program nie wie i nigdy nie będzie wiedział - to programista musi wiedzieć i odpowiednio napisać program

_________________
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: 5 lut 2017, o 20:14 
Offline
Nowy

Dołączył(a): 19 kwi 2016
Posty: 21
Pomógł: 0

mirekk36 napisał(a):
eeeeh Panie, panie ... a gdzie ty tam widzisz podwójne zwiększanie ?


Najpierw zwiększamy w linijce if (PulseWidth > MAX_HALF_BIT) rc5cnt++; a później pod koniec ifa if(frame_status == FRAME_OK)
w linijce rc5cnt++; więc tak zwiększamy dwa razy

mirekk36 napisał(a):
To ja się tyle rozpisałem w odpowiedzi - a ty piszesz, że ponawiasz pytanie - bez słowa nawet czy coś zrozumiałeś czy nie ? ...



Tak przeczytałem to co napisałeś i nie odniosłeś się w ogóle do tego fragmentu

Kroniowiorka napisał(a):
Po drugie dlaczego w ifie
Składnia: [ Pobierz ] [ Ukryj ]
język c
if (frame_status == FRAME_OK)
GeSHi
jeszcze raz sprawdzamy czy
Składnia: [ Pobierz ] [ Ukryj ]
język c
if( PulseWidth > MAX_BIT ) frame_status = FRAME_RESTART;
GeSHi
przecież aby wejść do tego ifa status ramki musi być "ok" a gdy PulseWidth > MAX_BIT to nie jest to możliwe bo już na początku przerwania w pierwszym ifie sprawdzamy dokładnie to samo tylko tym razem gdy jest to prawda zerujemy rc5cnt, co w dalszej kolejności powoduje (kolejny if) że ramka przebiera status FRAME_END co uniemożliwia wejście do wspomnianego pierwszego ifa. Więc czy ten if nie jest przypadkiem zbędny?



jedyne do czego się odniosłeś to pytania Jacek54 więc poprostu ponownie zadałem pytanie...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2017, o 09:04 
Offline
Nowy

Dołączył(a): 08 sty 2017
Posty: 10
Pomógł: 0

Drogi Mirku,
Ty miałeś to szczęście, że poznałeś na swojej drodze Pana Ryszarda Łozowskiego, my natomiast (wielu początkujących) mamy to szczęście że popularyzujesz tak trudne zagadnienia szerszemu ogółowi. Ludzie są różni, mniej lub bardziej zdolni. Tym mniej zdolnym może trzeba dokładniej wyjaśnić.

Wracając do programu, ma bardzo mało komentarzy, nie ma podanej nawet zasady, na jakiej opiera się dekodowanie ramki.
Analizując go dochodzę do wniosku, że zasada dekodowania polega:

Na sprawdzaniu typu zbocza w środku każdego bitu, jeżeli było opadające to wartość bitu = 1 i odwrotnie.

Mimo to mam kłopot ze zrozumieniem całego kodu, jest niedługi, ale szatańsko trudny.
1.Początek jest ciężki, co z pierwszym bitem startowym, kiedy LastCapture =0



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2017, o 09:15 
Offline
Moderator
Avatar użytkownika

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

Jacek54 napisał(a):
Wracając do programu, ma bardzo mało komentarzy, nie ma podanej nawet zasady, na jakiej opiera się dekodowanie ramki.

Zaraz zaraz ... bo czegoś nie rozumiem, a opis - tzn CAŁY rozdział na temat tego dekodowania i kodu w książce to ? ... Możesz mi odpowiedzieć czy czytałeś ten rozdział ?

Oczywiście ja doskonale zdaję sobie sprawę z tego, że czasem i książka nie wystarczy, że można mieć i do niej pytanie. Czy ty może po prostu nie masz jeszcze Bluebooka i analizujesz tylko sam kod tej obsługi RC5?

_________________
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: 6 lut 2017, o 10:11 
Offline
Nowy

Dołączył(a): 08 sty 2017
Posty: 10
Pomógł: 0

Mam obie książki.
Na stronie 333:

"Otóż każdy bit o wartości o ma w środku zbocze narastające, natomiast bit o wartości 1 ma zbocze opadające. Wykorzystamy tę właściwość, sukcesywnie badając stan logiczny na wejsciu ICP1 w pierwszej połówce każdego bitu. Jak widzisz, stan logiczny pierwszej połówki będzie zawsze odpowiadał rzeczywistej wartości przesyłanego bitu. Nasza procedura nie będzie odzyskiwać stanu zegara z nadawanego przebiegu na podstawie dwóch pierwszych bitów. Za to będziemy w stanie badać stan pierwszej połówki bitu w oparciu o kolejne przerwania wywołane zarówno zboczem narastającym, jak i opadającym "

Problem w tym, że nie rozumiem w którym miejscu programu i w jaki sposób bada się stan bitu w pierwszej połówce



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2017, o 10:18 
Offline
Moderator
Avatar użytkownika

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

Jacek54 napisał(a):
1.Początek jest ciężki, co z pierwszym bitem startowym, kiedy LastCapture =0


Jacek54 napisał(a):
Problem w tym, że nie rozumiem w którym miejscu programu i w jaki sposób bada się stan bitu w pierwszej połówce


Ale co ma być z tym pierwszym bitem ? Toż pierwsza jego połówka ma stan wysoki tak? no więc gdy następuje PIERWSZE zbocze opadające to? ... no jak myślisz gdzie się znajdujemy ? .... DOKŁADNIE w połowie pierwszego bitu - bo od tego zbocza rozpoczyna się całe dekodowanie.

Kilka razy już pisałem o tym aby sobie narysować na kartce ołówkiem przykładową ramkę - spojrzeć na nią i z tym rysunkiem (własnym rysunkiem) popracować

I jak masz to na kartce - zacznij od tego, że na ICP1 pojawia się TO zbocze opadające ...

_________________
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: 6 lut 2017, o 11:16 
Offline
Nowy

Dołączył(a): 08 sty 2017
Posty: 10
Pomógł: 0

Dobrze, spróbuje ......
Ale według mnie nie odczytujemy stanu bitu na ICP, jedynie badamy stan ustawienia reakcji na zbocze ICES1 i na tej podstawie dekodujemy ?

Pierwsze zbocze opadające to według mnie znajdujemy (Rys.65 z BB) już w drugiej połówce (co prawda na początku) bitu 1.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2017, o 11:43 
Offline
Moderator
Avatar użytkownika

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

Jacek54 napisał(a):
Ale według mnie nie odczytujemy stanu bitu na ICP, jedynie badamy stan ustawienia reakcji na zbocze ICES

No a spróbuj mi logicznie wyjaśnić czym to się różni ?

akurat badając zbocza wg sposobu opisanego w książce (a zawsze badamy zbocze w środku bitu) ODCZYTUJEMY stan bitu w ramce RC5. Jak można mówić że jedynie badamy stan ustawienia reakcji na zbocze? ;) Po to badamy ten stan bo wcześniej go zmieniamy aby móc BADAĆ KAŻDĄ zmianę stanu i żeby nie tworzyć dodatkowej zmiennej pomocniczej - niejako przy okazji wykorzystujemy ten fakt. Wiemy tutaj, że w środku bitu RC5 zbocze opadające oznacza stan X a zbocze narastające oznacza stan Y. (Piszę X i Y bo już sam nie pamiętam które zbocze za co odpowiada)

Jacek54 napisał(a):
Pierwsze zbocze opadające to według mnie znajdujemy (Rys.65 z BB) już w drugiej połówce (co prawda na początku) bitu 1.

ZDECYDOWANIE nie - i tu właśnie robisz sobie ZONK'a

zrozum - przerwanie ICP1 zawsze zareaguje na zbocze opadające w połowie pierwszego bitu - i od TEGO MIEJSCA rozpoczyna się cała analiza. Owszem, w tym przerwaniu tylko przygotowujemy się do dekodowania - ale TU ZACZYNA się zabawa, w następnym przerwaniu - mamy już "w ręku" czas DRUGIEJ połówki pierwszego bitu.

_________________
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: 6 lut 2017, o 12:55 
Offline
Nowy

Dołączył(a): 08 sty 2017
Posty: 10
Pomógł: 0

Mirku,
Ja z jednej strony uczę się C, a z drugiej strony chcę zanalizować/zrozumieć algorytm, stąd moje

"Ale według mnie nie odczytujemy stanu bitu na ICP, jedynie badamy stan ustawienia reakcji na zbocze ICES"

Próbuje to rozrysować, ale mam kłopot z 2 pierwszymi przerwaniami.

1. Pierwsze zbocze opadające w środku 1 bitu odczytuje stan szerokości impulsu przypadkowy z ICR1 w związku z tym rc5cnt = 0, a w następnym kroku wynosi rc5cnt = 1
2. Drugie zbocze jest rosnące i odczytywana jest prawidłowa szerokość połówki bitu, rc5cnt = 2, ICES1 jest ustawione na 0.
Funkcja z modulo daje wynik 0, aktualizuje Irdata wstawiając do najmłodszego bitu 0, a powinna wstawić 1

Gdzie popełniam bląd :cry:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2017, o 14:33 
Offline
Moderator
Avatar użytkownika

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

Jacek54 napisał(a):
2. Drugie zbocze jest rosnące i odczytywana jest prawidłowa szerokość połówki bitu, rc5cnt = 2, ICES1 jest ustawione na 0.
Funkcja z modulo daje wynik 0, aktualizuje Irdata wstawiając do najmłodszego bitu 0, a powinna wstawić 1


a nie widzisz warunku ?

if (rc5cnt > 1)

dzięki temu w drugim przerwaniu jeszcze nic się nie dzieje poza zwiększeniem rc5cnt

_________________
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: 6 lut 2017, o 16:51 
Offline
Nowy

Dołączył(a): 08 sty 2017
Posty: 10
Pomógł: 0

W punkcie 2 napisałem ze rc5cnt = 2 , czyli jest > 1.
W programie:

if (PulseWidth > Max_bit) rc5cnt=0

if (rc5cnt ==0) {
Irdata =0;
Irpulsecount = 0;
rc5cnt++;
frame_status = frame_end;
}

Czyli wycohdząc z przerwania za pierwszym razem ma wartość rc5cnt = 1
Wchodząc za drugim razem rc5cnt = 2, czy nie tak ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2017, o 21:45 
Offline
Nowy

Dołączył(a): 19 kwi 2016
Posty: 21
Pomógł: 0

A odpowiedział by Pan na to pytanie o zbędnego ifa?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2017, o 21:54 
Offline
Moderator
Avatar użytkownika

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

Jacek54 napisał(a):
Wchodząc za drugim razem rc5cnt = 2, czy nie tak ?

Tak

------------------------ [ Dodano po: 1 minucie ]

Kroniowiorka napisał(a):
Najpierw zwiększamy w linijce if (PulseWidth > MAX_HALF_BIT) rc5cnt++; a później pod koniec ifa if(frame_status == FRAME_OK)
w linijce rc5cnt++; więc tak zwiększamy dwa razy

Przecież jest warunek IF to jak można pisać że zawsze zwiększamy dwa razy

------------------------ [ Dodano po: 1 minucie ]

Kroniowiorka napisał(a):
A odpowiedział by Pan na to pytanie o zbędnego ifa?


jakiego zbędnego ifa?

_________________
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: 7 lut 2017, o 22:04 
Offline
Nowy

Dołączył(a): 19 kwi 2016
Posty: 21
Pomógł: 0

mirekk36 napisał(a):
Przecież jest warunek IF to jak można pisać że zawsze zwiększamy dwa razy


No to przecież napisałem
Kroniowiorka napisał(a):
No to ja mam jeszcze jedno pytanie dlaczego rc5cnt jest zwiększane 2 razy gdy PulseWidth > MAX_HALF_BIT przecież to też jest 1 impuls.

Czyli odnosiłem się do sytuacji gdy if jest prawdziwy

Cytuj:
jakiego zbędnego ifa?


Mój pierwszy post...
Cytuj:
Po drugie dlaczego w ifie
Składnia: [ Pobierz ] [ Ukryj ]
język c
if (frame_status == FRAME_OK)
GeSHi
jeszcze raz sprawdzamy czy
Składnia: [ Pobierz ] [ Ukryj ]
język c
if( PulseWidth > MAX_BIT ) frame_status = FRAME_RESTART;
GeSHi
przecież aby wejść do tego ifa status ramki musi być "ok" a gdy PulseWidth > MAX_BIT to nie jest to możliwe bo już na początku przerwania w pierwszym ifie sprawdzamy dokładnie to samo tylko tym razem gdy jest to prawda zerujemy rc5cnt, co w dalszej kolejności powoduje (kolejny if) że ramka przebiera status FRAME_END co uniemożliwia wejście do wspomnianego pierwszego ifa. Więc czy ten if nie jest przypadkiem zbędny?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2017, o 23:37 
Offline
Moderator
Avatar użytkownika

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

Panie, te warunki gdzie widzisz frame_restart, np

if( PulseWidth > MAX_BIT ) frame_status = FRAME_RESTART;

to sobie odpuść na początek rozważań - toż to są TYLKO warunki sprawdzające czy nie było ZAKŁÓCENIA - a ty tu piszesz że odniosłeś się do sytuacji gdy jest prawdziwy - a kiedy on jest wg ciebie prawdziwy ?

Mówię ci zapomnij o nich na razie i analizuj bez nich kod - i razem z opisem w książce

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 28 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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