logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak odwrócić bajt klucza w technice cyfrowej/mikrokontrolerowej?

Gremliny 09 Maj 2025 11:47 711 28
REKLAMA
  • #1 21544028
    Gremliny
    Poziom 16  
    Posty: 228
    Pomógł: 10
    Ocena: 53
    Dzień Dobry. Zaczynam przygody z techniką cyfrową.

    Cytat:
    W tym przypadku sterownik odpowie bajtem synchronizacji 0x55. Następnie odpowie bajtami kluczy 0x08 i 0x08 lub 0x96 i 0x96. Bajt synchronizacji z bajtami kluczy musi zostać potwierdzony przez mikrokontroler poprzez odwrócenie drugiego bajtu klucza.

    Jak to zrobić?
    Jeśli dostanę odpowiedź 0x08 i 0x08 (czyli 8 8) lub 0x96 i 0x96 (czyli 150) to jak ja mam odpowiedź? Jak odwrócić te bajty?

    Temat: Jak odwrócić bajt klucza w technice cyfrowej/mikrokontrolerowej?
  • REKLAMA
  • #3 21544050
    gregor124
    Poziom 29  
    Posty: 1615
    Pomógł: 99
    Ocena: 856
    W asemblerze to dziecinnie proste.
    Wykonujesz 8 razy sekwencję ROR i ROL.
    Pomogłem? Kup mi kawę.
  • #4 21544056
    Gremliny
    Poziom 16  
    Posty: 228
    Pomógł: 10
    Ocena: 53
    Czy dobrze zrozumiałem?

    - Jak dostanę odpowiedź 0x08 (8 dziesietnie, 1000 bin) to po odwróceniu bajtu będzie 0001 bin, czyli 1 dziesiętnie i wartość 0x01?

    - Jak dostanę odpowiedź 0x96 (150 dziesietnie, 1001 0110 bin) to po odwróceniu bajtu będzie 0110 1001 bin, czyli 105 dziesiętnie i wartość 0x69?

    Czy jest jakiś program terminalowy do wysyłania i odbierania danych w postaci binarnych? Z Realterm nie mogę dojść końca przy konwersji standardów bin/dzies

    Dodano po 2 [minuty]:

    gregor124

    Muszę zejść jeszcze niżej niż assebler - do poziomu swego mózgu i umieć to liczyć. Przy mi się to do czegoś innego (wymiana interfejsu i przeliczanie danych)
  • #5 21544058
    gps79
    Poziom 37  
    Posty: 2198
    Pomógł: 495
    Ocena: 794
    Gremliny napisał:
    Jak odwrócić te bajty?

    1. Jaką operację (matematyczną/logiczną) masz na myśli pod hasłem "odwrócić bajty"?
    2. W jakiej technologii potrzebujesz to zrealizować (jakiś język programowania, bramki logiczne, specyficzny mikrokontroler, itp.)?
  • #6 21544068
    Gremliny
    Poziom 16  
    Posty: 228
    Pomógł: 10
    Ocena: 53
    gps79

    Ad1. Sam nie rozumiem tego pojęcia. Dlatego poprosiłem o pomoc
    Ad2. W oknie programu terminalowego chcę by z niego "wychodziły" informacje, bajty, konkretne adresy i przez właśnie budowany interfejs (usb - com db9) - rx/tx łączyło się ze sterownikiem /kontrolerem. Szyna chyba Can.

    Muszę umieć pobudzać, inicjalizować. Nim poproszę kogoś o pomoc w zbudowaniu programu (choć program.bat) muszę rozumieć matematykę i logikę niskiego poziomu programowaniu. Dlatego utworzyłem wątek w tym dziale. Jako mocno początkujący. Choć nie z wiedzą zerową.
  • #7 21544073
    gregor124
    Poziom 29  
    Posty: 1615
    Pomógł: 99
    Ocena: 856
    Masz tak przekształcić dane, aby przy transmisji szeregowej, np. z bitem 7 na początku, wysłać dane z bitem 0 jako pierwszym
    i odwrotnie.
    Czyli kolejność
    bitów 76543210
    zamieniasz na 01234567
    Pomogłem? Kup mi kawę.
  • #8 21544078
    Gremliny
    Poziom 16  
    Posty: 228
    Pomógł: 10
    Ocena: 53
    gregor124 Czy dobrze zrozumiałem?

    - Jak dostanę odpowiedź 0x08 (8 dziesietnie, 1000 bin) to po odwróceniu bajtu będzie 0001 bin, czyli 1 dziesiętnie i wartość 0x01?

    - Jak dostanę odpowiedź 0x96 (150 dziesietnie, 1001 0110 bin) to po odwróceniu bajtu będzie 0110 1001 bin, czyli 105 dziesiętnie i wartość 0x69?
  • REKLAMA
  • Pomocny post
    #9 21544084
    gregor124
    Poziom 29  
    Posty: 1615
    Pomógł: 99
    Ocena: 856
    Gremliny napisał:
    ak dostanę odpowiedź 0x08 (8 dziesietnie, 1000 bin) to po odwróceniu bajtu będzie 0001 bin, czyli 1 dziesiętnie i wartość 0x01?

    Tu jest błąd, powinno być 0x08 -> 0x10,
    ponieważ 00001000 00000000
    00000100 00000000
    00000010 00000000
    00000001 00000000
    00000000 00000001
    00000000 00000010
    ....................
    00000000 00010000

    Chcesz to zrobić na CPU (jakim) czy sprzętowo?
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #10 21544111
    oscil1
    Poziom 24  
    Posty: 647
    Pomógł: 50
    Ocena: 178
    Tu masz w C taką przenośną funckcję bez żadnych pętli

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Możesz to sobie rozwinąc do innych typow
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #11 21544112
    Gremliny
    Poziom 16  
    Posty: 228
    Pomógł: 10
    Ocena: 53
    Sprzętowo z poziomu komputera (okno programu terminala - obecnie Realterm). Siedzę na dyżurach i jak mam trochę luzu to zamiast skręcać papierosy i później je wypalać lub co gorsza chlać to wolę trochę posiedzieć przy elektronice. Ale nie tak jak niektórzy myślą że tylko kupować jakieś zestawy naprawcze na internecie czy arduino. Elektronika jest tak szeroka że każdy znajdzie coś co go może zainteresować.
    Gregor, dziękuję za podpowiedź. Na razie muszę przeanalizować to co napisałeś bym wiedzieć że to rozumiem.
  • #12 21544116
    oscil1
    Poziom 24  
    Posty: 647
    Pomógł: 50
    Ocena: 178
    Gremliny napisał:
    Sprzętowo z poziomu komputera

    No no - chcesz przerabiac swój komputer PC aby Ci obracał bajty . To jest już wyźsza szkoła jazdy. Nie słyszałem jeszcze o takim projekcie.
  • REKLAMA
  • #13 21544121
    gregor124
    Poziom 29  
    Posty: 1615
    Pomógł: 99
    Ocena: 856
    Gremliny napisał:
    Czy jest jakiś program terminalowy do wysyłania i odbierania danych w postaci binarnych?


    Na jaki komputer?
    Jesli PC (windows) to polecam Tera Term 5.
    Pomogłem? Kup mi kawę.
  • #14 21544128
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1463
    Jeśli mowa TYLKO o odwróceniu bardzo konkretnych dwóch bajtów 0x08 i 0x96, to podstawienia na if'ach będzie zużywało mniej taktów CPU niż wielokrotne shifty.
    Wielokrotne shifty są owszem rozwiązaniem bardziej generycznym, ale tu nie koniecznym.
  • Pomocny post
    #15 21544131
    gps79
    Poziom 37  
    Posty: 2198
    Pomógł: 495
    Ocena: 794
    Autorze, czy mógłbyś podać źródło Twojego cytatu z postu #1? Łatwiej byłoby przeanalizować, o jakie "odwracanie" chodzi.
    Pytam, bo szczerze, nie znam protokołu komunikacyjnego (choć nie znam ich wiele), w którym wymagane byłoby czasochłonne odwracanie bitów w bajcie (a de facto nie przynoszące dla protokołu dodatkowej wartości). Bardzo prawdopodobne jest, że pod hasłem "odwracanie bajtu" kryje się negacja binarna (zamiana wszystkich bitów z 0 na 1 i odwrotnie).
    Gremliny napisał:
    Szyna chyba Can.
    Nie wydaje mi się, biorąc pod uwagę moją wiedzę o CANie.

    Dodano po 19 [minuty]:

    Ok, sam znalazłem.
    Chodzi o negację binarną.
    Temat związany z komunikacją przez OBDII (ISO 9141-2).
    Wycinek tekstu technicznego opisujący inicjalizację komunikacji w protokole ISO 9141-2, zawierający oznaczenia adresu $33 oraz jego negacji binarnej $CC.

    źródło: https://ecad.tu-sofia.bg/et/2005/pdf/Paper097-P_Dzhelekarski1.pdf

    Tip.
    Znajdź Terminal, w którym możesz podłączać własne skrypty. Wtedy będziesz mógł automatyzować komunikację i wtedy będzie Ci można więcej pomóc.
  • #16 21544156
    Gremliny
    Poziom 16  
    Posty: 228
    Pomógł: 10
    Ocena: 53
    Może pokaże co robię. Fizycznie. Bo chyba wszystko źle opisałem. I dlatego moje wypowiedź są rozumiane jako wypowiedzi dziwaka.

    Złącze DB9 połączone z analizatorem logicznym i komputerem przez kable USB na drewnianym blacie.

    Z portu USB wychodzi port Com Db9. Ten otwiera mi komunikację Rx i Tx (oba zwarte jako nulmodem). kolory niebieski i pomarańczowy. Zielony to masa

    W oknie terminala nadaję i odbieram info. Na czas testów mam zwarte rx i tx. Nulmodem działa prawidłowo. Info nadane wychodzi i wraca

    Zrzut ekranu programu Terminal v1.9b z zaznaczeniem części do nadawania i odbioru danych przy użyciu portu COM.
    Zrzut ekranu programu RealTerm z wyświetlonymi wartościami hex aa5566 w lewym górnym rogu.

    Chciałbym nadać wartości binarne np 0x33 bajty (wartość 51 dzies) aby to wychodziło tak jak trzeba. By widzieć co się dzieje mam analizator danych logicznych. Do jego obsługi mam Salae Logic.
    Niestety w oknie analizatora ukazuje się nie to co bym oczekiwał


    Zrzut ekranu z programu Saleae Logic z ustawieniami analizatora, pokazujący błąd ramki 0x00 na kanale 0 przy transmisji szeregowej.

    Za każdym razem 0X00 error
    ------------------------

    Co chcę osiągnąć?

    Wysyłam bajt 0X33
    W odpowiedzi dostaję (powinienem) bajt synchronizacji 0X55 oraz dane 0x08 0x08 (ewentualnie 0x55 0x96 0x96). Reszta jest opisana w 1 poście. Przepraszam że dopiero teraz naocznie to piszę

    Dodano po 4 [minuty]:

    Tak. Chodzi o OBD - Can, K, L. Celowo tego nie napisałem bo chciałem sam wszystko rozgryść. Jest to projekt dla zabawy. Nie potrzebuję bardzo gotowych rozwiązań gdyż potrzebuję wędki (ewentualnie części do niej np przysłowiowego haczyka lub żyłki). Rybę sam chcę złowić - będzie smaczniejsza. Kilka rzeczy sam już mam w wyobrażeniu. Ale utkwiłem chyba na prostej rzeczy. Dlatego poprosiłem o pomoc.

    Źródło cytatu z 1 postu jest tu
    https://www.instructables.com/Low-Cost-OBD2-Communications-on-K-line-ISO-9141-2-/
    Tłumaczone przez google
  • #18 21544173
    Gremliny
    Poziom 16  
    Posty: 228
    Pomógł: 10
    Ocena: 53
    kindlar
    o który program pytasz?
  • Pomocny post
    #19 21544176
    gps79
    Poziom 37  
    Posty: 2198
    Pomógł: 495
    Ocena: 794
    Nadajesz UARTem, a próbujesz odebrać (w Saleae) jako PS/2 bez sygnału zegarowego - stąd błąd ramki.
    Po co ten PS/2?
    Chyba nadal nie rozumiem, co się tu dzieje.
  • Pomocny post
    #20 21544178
    kindlar
    Poziom 42  
    Posty: 7857
    Pomógł: 915
    Ocena: 1614
    Pytałem o terminal 1.9b
  • #21 21544181
    Gremliny
    Poziom 16  
    Posty: 228
    Pomógł: 10
    Ocena: 53
    gps79 Tak, używam UARTa. Opis PS/2 jest tylko opisem kanału nr 0. Ale wybrana jest funkcja async serial. Mogę sprawdzić na innym canale z fuckja async serial. Chyba że ustawić inną funkcję w salae - jego tylko używam by czytać wartosću 0X....

    Dodano po 4 [minuty]:

    Ok. Nadałem informację 33

    Zmieniłem ustawienia w salae. Takie wyniki. Noo cóż. Coś drgneło - przynajmniej nie ma samego 0X00 :)


    Okno programu Terminal v1.9b z odebraną wartością 33 na porcie COM7, ustawienia transmisji szeregowej wyświetlone u góry.
    Zrzut ekranu z Saleae Logic przedstawiający analizę sygnałów PS/2 i asynchronicznego UART na kilku kanałach.
  • Pomocny post
    #22 21544186
    inot
    Poziom 38  
    Posty: 3567
    Pomógł: 441
    Ocena: 803
    Jak używasz tylko TX i RX, to dlaczego masz włączoną opcję RTS/CTS?
    Załączniki:
    • Jak odwrócić bajt klucza w technice cyfrowej/mikrokontrolerowej? Screenshot 2025-05-09 141912.png (17.95 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #23 21544199
    Gremliny
    Poziom 16  
    Posty: 228
    Pomógł: 10
    Ocena: 53
    inot
    Odpowiem głupio i beznadziejnie. Nie wiem :( Techniką cyfrową zajmuję się dopiero od grudnia. Znalazłem w pracy w śmieciach przeznaczonych do utylizacji 'jakąś' irdę. I tak się zaczeła fascynacja techniką cyfrową. Aż wstyd przyznać iż kiedyś kończyłem technikum... elektroniczne. Ale w życiu zajmowałem się inną działalnością. W szkole komputer był dla mnie marzeniem

    Dodano po 1 [godziny] 15 [minuty]:

    kindlar

    Do czego ta funkcja CR służy? Mam ją w kilku miejscach w tym programie
  • Pomocny post
    #24 21544273
    inot
    Poziom 38  
    Posty: 3567
    Pomógł: 441
    Ocena: 803
    Może to lepiej wyjaśni:
    Link.
  • Pomocny post
    #25 21544288
    gps79
    Poziom 37  
    Posty: 2198
    Pomógł: 495
    Ocena: 794
    Wypadałoby zacząć od podstaw. Przydałoby się przejść jakiś kurs odnośnie komunikacji szeregowej.
    Tak na początek.
    1. Co za kabel USB-DB9 posiadasz? Do jakiego standardu konwertujesz UART? +/-12V? 0/12V? 0/5V?
    2. Jeśli na liniach sygnałowych będzie 12V, to możesz uszkodzić analizator logiczny.
    3. Saleae Logic analizując sygnał UART zakłada, że stanem domyślnym linii jest stan wysoki, a transmisja rozpoczyna się od przejścia w stan niski (tzw. bit startu). Tego nie ma na Twoich screenach. Weź to pod uwagę.
    4. Naucz się kontrolować transmisję od warstwy fizycznej i analizować sygnał. Policz ile czasu zajmuje w Twoim protokole transmisja jednego bitu. Odmierz ten czas na wykresie Saleae Logic. Sprawdź, czy zostały odebrane wszystkie bity ramki, którą chciałeś nadać, bity startu, stopu, parzystości, itd.
    5. @ElektrodaBot Jakie napięcia ma sygnał OBDII k-line?
    6. Nie każdy terminal szeregowy nadaje się do nadawania i odbioru transmisji innej niż szeregowa.
    @ElektrodaBot Czy terminalem UART odbiorę k-line?
  • Pomocny post
    #26 21544291
    ElektrodaBot
    AI od OpenAI ChatGPT4
    Posty: 8852
    Pomógł: 362
    Ocena: 950
    gps79 napisał:
    Wypadałoby zacząć od podstaw. Przydałoby się przejść jakiś kurs odnośnie komunikacji szeregowej.
    Tak na początek.
    1. Co za kabel USB-DB9 posiadasz? Do jakiego standardu konwertujesz UART? +/-12V? 0/12V? 0/5V?
    2. Jeśli na liniach sygnałowych będzie 12V, to możesz uszkodzić analizator logiczny.
    3. Saleae Logic analizując sygnał UART zakłada, że stanem domyślnym linii jest stan wysoki, a transmisja rozpoczyna się od przejścia w stan niski (tzw. bit startu). Tego nie ma na Twoich screenach. Weź to pod uwagę.
    4. Naucz się kontrolować transmisję od warstwy fizycznej i analizować sygnał. Policz ile czasu zajmuje w Twoim protokole transmisja jednego bitu. Odmierz ten czas na wykresie Saleae Logic. Sprawdź, czy zostały odebrane wszystkie bity ramki, którą chciałeś nadać, bity startu, stopu, parzystości, itd.
    5. @ElektrodaBot Jakie napięcia ma sygnał OBDII k-line?
    6. Nie każdy terminal szeregowy nadaje się do nadawania i odbioru transmisji innej niż szeregowa.
    @ElektrodaBot Czy terminalem UART odbiorę k-line?
    Szybka odpowiedź na pytania 5 i 6

    1. Napięcia na linii OBD-II K (ISO 9141-2 / ISO 14230-4):
    • stan domyślny (recesywny, logiczna „1”) ≈ V<sub>batt</sub> ≈ 11 … 14,4 V
    • stan aktywny (dominujący, logiczne „0”) < 1 V (praktycznie zwarcie do masy)

    2. Zwykłym terminalem UART odbierzesz dane K-line tylko wtedy, gdy pomiędzy komputer a złącze OBD wstawisz transceiver K-line (np. L9637D, MC33290, TJA1020). Bez niego:
    • poziomy 0/12 V uszkodzą konwerter USB-UART lub analizator,
    • linia K jest pół-dupleksowa i wymaga sterowania kierunkiem,
    • protokół startu („5-baud init” lub „fast init”) wymaga precyzyjnych timingów, których typowy terminal nie zapewnia.

    ---

    1. Warstwa fizyczna K-line – dlaczego nie pasuje do TTL/UART

    ParametrUART TTL (3V3 / 5V)RS-232 (DB9)OBD-II K-line
    Stan nieaktywny („1”)3,3 / 5 V−3 … −15 V≈ 12 V
    Stan aktywny („0”)0 V+3 … +15 V< 1 V
    Topologiadwie linie (RX/TX)dwie liniejedna linia (pół-dupleks)
    Wymagany transceiver?nieMAX3232 itp.L9637D / MC33290 / K-CAN i in.


    Skutek: bezpośrednie wpięcie analizatora logicznego lub konwertera USB-TTL = niemal pewne uszkodzenie sprzętu.

    ---

    2. Jak sprzętowo połączyć PC z K-line

    1. Najprostsze: gotowy interfejs ELM327/ STN1100 (USB, Bluetooth).
    • Zaleta – obsługuje ISO 9141-2, ISO 14230-4, CAN.
    • Wada – „czarna skrzynka”, utrudnia naukę warstwy niższej.

    2. DIY – transceiver + mikrokontroler:
    • L9637D (SO-8) lub MC33290 (SO-14) – konwertują 0/12 V na 0/5 V i odwrotnie, mają detekcję czasu dominacji oraz zabezpieczenia ESD.
    • Dowolny MCU z UART (ATmega, STM32, ESP32).
    • Układ steruje linią TxEnable (dominacja) i odbiera Rx – to już klasyczne 5 V/3 V3 UART.
    • Inicjalizację 5-baud najłatwiej zrobić w firmware; fast-init można zrealizować impulsami GPIO.

    3. Minimalistycznie – TJA1020 (LIN, ale zgodny poziomowo) lub tranzystor + rezystor 510 Ω pull-up do 12 V.
    • Działa, lecz brak filtrów i ochrony – ryzyko zakłóceń z instalacji samochodu.

    Przykładowy schemat (MC33290 + CH340):
    Kod: Text
    Zaloguj się, aby zobaczyć kod

    (Upewnij się, że masa PC jest wspólna z masą pojazdu – przez izolację galwaniczną lub kabel diagnostyczny z bezpiecznikiem).

    ---

    3. Konfiguracja Saleae / innego analizatora

    1. Podłącz wyjście RXD transceivera (0/5 V) do jednego kanału analizatora.
    2. Analyzer → Async Serial:
    • Bit rate: 10400 bps (standard ISO 9141-2) lub 9600/10400 przy pracy ELM-em,
    • 8 N 1, LSB first, brak inwersji,
    • Stan spoczynku wysoki (pull-up).
    3. Pamiętaj, że po stronie magistrali ECU ⇄ Tester bity są odwrócone czasowo względem standardowego UART (MSB/LSB), ale większość transceiverów i ELM-ów wykonuje tę konwersję; gdy pracujesz „gołym” MCU, musisz odwrócić kolejność bitów software’owo (patrz pkt 4).

    ---

    4. Odwracanie kolejności bitów

    Prosta funkcja w C – bez pętli:

    Kod: text
    Zaloguj się, aby zobaczyć kod

    Przykłady:
    • 0x08 (00001000b) → 0x10 (00010000b)
    • 0x96 (10010110b) → 0x69 (01101001b)

    ---

    5. Procedury inicjalizacji

    1. 5-baud init (starsze ECU, ISO 9141-2):
    • Tester wysyła w prędkości *dokładnie* 5 Bd (!) bajt adresu (np. 0x33).
    • ECU odpowiada 0x55 + KW1 + KW2 (+ negacje) już 10400 Bd.
    2. Fast-init (ISO 14230-4 „KWP2000”):
    • Tester ściemnia linię K do 0 V na 25 ms, następnie zwalnia.
    • Po 25 … 50 ms rozpoczyna rozmowę 10400 Bd.
    Oba tryby wymagają precyzyjnych timingów, których RealTerm/TeraTerm nie wygeneruje; muszą to zrobić firmware MCU lub ELM/ STN.

    ---

    6. Polecane narzędzia programowe

    • RealTerm – wysyłanie ramek w HEX, break, RTS toggle.
    • Tera Term v5 – makra, skrypty, logowanie.
    • SavvyCAN / BusMaster – gdy przejdziesz na CAN.
    • Saleae Logic 2.x – plugin „OBD-KLine (ISO 9141)” ze strony community (aktualny 04‒2025).

    ---

    7. Typowe pułapki

    1. Brak wspólnej masy pomiędzy PC a pojazdem.
    2. Ustawienie inwersji sygnału w Saleae (powinno być „Non-Inverted”).
    3. Próba pracy „full-duplex” – K-line jest half-duplex, linia ma być w stanie wysokim, gdy nikt nie nadaje.
    4. Zasilanie interfejsu z portu USB bez izolacji – przepięcia w aucie > 35 V mogą ubić laptop.

    ---

    8. Co dalej?

    • Zbuduj mały adapter K-line→USB na MC33290 + CH340/FT232; udostępni pełny, surowy dostęp do magistrali.
    • Po opanowaniu 5-baud init napisz proste skrypty (Python + pySerial) do wysyłania Service 01 PID 0C (obroty) lub zwrotu DTC.
    • Rozważ przejście na CAN-BUS (ISO 15765-4) – od rocznika ~2008 w UE obowiązkowy.

    ---

    Podsumowanie

    – Linia K pracuje na 0/12 V, wymaga transceivera; bez niego UART czy analizator logiczny zostaną uszkodzone.
    – Sam terminal szeregowy *może* służyć do obserwacji ramek, ale tylko poprzez prawidłowy interfejs K-line.
    – Zadbaj o inicjalizację, odwrócenie bitów i pół-dupleks.

    Powodzenia w dalszej eksploracji diagnostyki OBD-II! Jeśli natrafisz na konkretne problemy z inicjalizacją 5 Bd lub konfiguracją MCU – daj znać, doprecyzujemy kod lub hardware.
    Możesz mnie wywołać w każdym temacie pisząc @ElektrodaBot. Zastrzeżenie: Niektóre odpowiedzi udzielone przez ElektrodaBota mogą być niedokładne. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi ElektrodaBota powinny być zweryfikowane przez użytkownika. OpenAI może monitorować i zapisywać informacje wprowadzane po wywołaniu ElektrodaBota.
  • #27 21544474
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1463
    Gremliny napisał:
    Do czego ta funkcja CR służy?



    CR to nie jest funkcja.
    Czarno widzę wysiłki praktyczne bez najprostszego fundamentu wiedzy.
  • #28 21544642
    oscil1
    Poziom 24  
    Posty: 647
    Pomógł: 50
    Ocena: 178
    Gremliny napisał:
    . Ale nie tak jak niektórzy myślą że tylko kupować jakieś zestawy naprawcze na internecie czy arduino.


    Właśnie kup soobie arduino - najlepsze do tego celu.
  • #29 21552545
    Gremliny
    Poziom 16  
    Posty: 228
    Pomógł: 10
    Ocena: 53
    Dzień Dobry. Przepraszam za długą przerwę ale miałem dużo innych zajęć. Wszystko przeczytałem, przeanalizowałem i próbowałem wdrożyć. Po kolei:
    - Jakoś nie mogę się przekonać do arduino. Poprostu. Wybaczcie mi
    - Do obsługi portu Com używam UARTa. Jest to napięcie 5V. Zdaję sobie sprawę że napięcie pracy OBD2 to12-15V.
    Myślałem by stworzyć póżniej jakiś układzik (przejściówkę-adapter) oparty u układ scalony L9637 lub TJA1020.
    - Póki co do obsługi OBD używam gotowego kabla usb-obd2 firmy viakem który współpracuje z (chyba) darmowym VCDS-Lite. Ale chciałem coś samemu stworzyć.
    - Na chwilę obecną szczytem moich marzeń odnośnie tego projektu jest odczytanie jakiejkolwiek wartości ze sterownika/sterowników auta, np. Ecu
    - Przewód usb-com db9 użyłem by widzieć jak się to wszystko zachowuje
    - Dzięki temu tematowi dowiedziałem się że chcąc połączyć się usb-obd zachodzi wiele konwersji, tj jedynka logiczna jest zamieniana na zero, zamiana standardów Asci/hex/bin. Jakakolwiek pomyłka znaczka i transmisja kończy się niepowodzeniem. Dlatego na analizatorze Salae widziałem tyle informacji które wprowadzały mnie w błąd.
    - Salae użyłem w następujący sposób. Przejściówkę usb-db9 ustawiłem w menadżerze urządzeń jako port Com4. Tak samo w opcjach portu vcds-lite. Przewód nadawczy Tx podpiąłem do salae (wpięty do innego wolnego portu usb), co ciekawe analizator widział dane bez dodatkowej masy. Dałem VCDS opcję inicjalizacji. Obserwowałem informacje na analizatorze. Próbowałem z programów terminalowych wysłać 0x33. Czyli okno terminala --> przewód usb-obd. Port com był otwarty. Info wychodziło. Ale auto nie dawało żadnej odpowiedzi. Dostałem tu różne podpowiedzi.

    Spodobało mi się to co napisała sztuczna inteligencja. Ale nie za bardzo wiem co z czym się je. I tym sposobem odkryłem właśnie czat GPT :) :) Oraz jego możliwości. No cóż lepiej później, jak nigdy :) Człowiek całe życie się uczy :)
    Więc tym tematem jedno chciałem zrobić - odkryłem i nauczyłem się czegoś innego.
    Postanowiłem na stronie czatu poprosić o jakiegoś gotowca. Najpierw pobawiłem się czatem a potem poprosiłem o program typu BAT.
    Dostałem takie coś.
    Zrzut ekranu pliku wsadowego BAT do obsługi portu COM5 i odczytu VIN z auta przez OBD2.
    Dzięki Wam dostałem więcej wiedzy i umiejętności niż bym przypuszczał i oczekiwał. Celu jeszcze nie osiągnąłem. Ale za to zdobyłem inne wartościowe informacje. Na razie muszę trochę odpocząć. Nawet jak mi nie wyjdzie to i tak uważam ten czas który poświęciłem za coś wartościowego. Temat na razie pozostawię otwarty.
    Dziękuję za wszystkie odpowiedzi - nawet te nieco złośliwe :)

Podsumowanie tematu

✨ Dyskusja dotyczy problemu odwracania bitów w bajcie klucza w technice cyfrowej i mikrokontrolerowej, szczególnie w kontekście komunikacji z protokołem OBD-II (ISO 9141-2). Autor pyta, jak odwrócić bajt (np. 0x08 lub 0x96) otrzymany ze sterownika, aby potwierdzić go mikrokontrolerem. Wyjaśniono, że chodzi o odwrócenie kolejności bitów w bajcie (bit 7 staje się bitem 0 i odwrotnie), a nie o negację bitową. Podano przykłady konwersji binarnej i funkcję w języku C do odwracania bitów bez użycia pętli, wykorzystując maski i przesunięcia bitowe. Poruszono także kwestie sprzętowe i programowe, w tym użycie terminali szeregowych (np. Realterm, Tera Term) oraz analizatorów logicznych (Saleae Logic) do testów transmisji UART na poziomie fizycznym. Zwrócono uwagę na różnice napięć i standardów sygnałów w interfejsach OBD-II (linia K) oraz konieczność stosowania odpowiednich transceiverów (np. L9637D, TJA1020) do konwersji poziomów napięć i sterowania kierunkiem transmisji. Podkreślono, że do poprawnej komunikacji potrzebna jest znajomość protokołu, timingów i warstwy fizycznej. Autor planuje samodzielnie tworzyć interfejs USB-COM DB9 do komunikacji z ECU pojazdu, ucząc się podstaw niskopoziomowego programowania i elektroniki cyfrowej. Wskazano, że odwracanie bitów jest operacją logiczną realizowaną programowo lub sprzętowo, a do testów i automatyzacji komunikacji warto używać terminali z możliwością skryptów.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA