Jump to content
Sign in to follow this  
piotrd66

Półbajt ang. nibble - prośba o pomoc

Recommended Posts

Witam!

Chciałbym Was bardzo prosić o wytłumaczenie o co tu chodzi. Od kilku dni "studiuję" temat i o ile w teorii wydaje mi się zrozumiały, to w praktyce nie bardzo.

Jest urządzenie (multimetr), które transmituje poprzez port szeregowy odczyt, wybrany zakres itd. Transmisja jest bitowa (tak mi się wydaje) i jakoś "zakodowana".

Podsłuchałem port i wygląda to tak:

00 D0 E2 F1 18 2E 3B 4E 5B 6A 7D 8C 97 A0 B0 C0   .Đâń..;N[j}Ś— °Ŕ
D0 E2 F1 18 2E 3B 4E 5B 6A 7D 8C 97 A0 B0 C0 D0   Đâń..;N[j}Ś— °ŔĐ
E2 F1 18 2E 3B 4E 5B 6A 7D 8C 97 A0 B0 C0 D0 E2   âń..;N[j}Ś— °ŔĐâ
F1 18 2E 3B 4E 5B 6A 7D 8C 97 A0 B0 C0 D0 E2 F1   ń..;N[j}Ś— °ŔĐâń
18 2E 3B 4E 5B 6A 7D 8C 97 A0 B0 C0 D0 E2 F1 18   ..;N[j}Ś— °ŔĐâń.
2E 3B 4E 5B 6A 7D 8C 97 A0 B0 C0 D0 E2 F1 18 2E   .;N[j}Ś— °ŔĐâń..
3B 4E 5B 6A 7D 8C 97 A0 B0 C0 D0 E2 F1 18 2E 3B   ;N[j}Ś— °ŔĐâń..;
itd.

 

Mam od źródłowy aplikacji, którą kiedyś lekko zmodyfikowałem i robiło co trzeba - zrzut do pliku ASCII w formie czytelnej dla ludzi. Urządzenie jednak pada i zakupione zostało nowe - niby identyczne (taki sam symbol), ale coś zmienili w protokole i już aplikacja nie działa. Zresztą do obu dołączona jest mała aplikacja Windows, która pokazuje odczyt oraz ekran LCD multimetru i ta stara również nie współpracuje z nowym urządzeniem.

W aplikacje, którą kiedyś znalazłem i lekko zmodyfikowałem jest taki opis:

/**
* display value is encoded by maping the elements of the 7-segment
* to the lower nibbles of byte groups [a,b] = {[1,2],[3,4],[5,6],[7,8]}:
*       0a:00 
*      
* by combining the nibbles to a byte we got a uniqe identifier
* for every symbol shown on the display.
*
* for byte 1 bit 3 represents a leading minus (negative value)
* for bytes 3,5,7 bit 3 indicates a leading decimal point
* (means the encoded value is the first part of the fraction)
*/

Napisałem na szybko taką funkcję:

string swapNibbles(string _x) {
          int _in, _out = 0;
          string wynik = "";

          Int32.TryParse(_x, out _in);            

          _out = (_in & 0x0F) << 4 | (_in & 0xF0) >> 4;

           wynik = _out.ToString();
           return wynik;
}

 

alej nie wiem, czy to ma sens i co dalej z tym robić?

Bardzo proszę o pomoc!

Przed chwilą zauważyłem taką powtarzalność (poza 00 na początku transmisji):

D0 E2 F1 18 2E 3B 4E 5B 6A 7D 8C 97 A0 B0 C0    Đâń..;N[j}Ś— °Ŕ
D0 E2 F1 18 2E 3B 4E 5B 6A 7D 8C 97 A0 B0 C0    Đâń..;N[j}Ś— °Ŕ
D0 E2 F1 18 2E 3B 4E 5B 6A 7D 8C 97 A0 B0 C0    Đâń..;N[j}Ś— °Ŕ
D0 E2 F1 18 2E 3B 4E 5B 6A 7D 8C 97 A0 B0 C0    Đâń..;N[j}Ś— °Ŕ
D0 E2 F1 18 2E 3B 4E 5B 6A 7D 8C 97 A0 B0 C0    Đâń..;N[j}Ś— °Ŕ
D0 E2 F1 18 2E 3B 4E 5B 6A 7D 8C 97 A0 B0 C0    Đâń..;N[j}Ś— °Ŕ
D0 E2 F1 18 2E 3B 4E 5B 6A 7D 8C 97 A0 B0 C0    Đâń..;N[j}Ś— °Ŕ

Powtarzalność jest normalna, gdyż odczyt nie zmienia się teraz.

Edited by piotrd66

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...