Jump to content

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
Link to post
Share on other sites
  • 2 weeks later...

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.

×
×
  • Create New...