Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wyświetlacz parametrów pracy silnika SUBARU

aswertyui 17 Wrz 2017 17:32 825 8
  • #1 17 Wrz 2017 17:32
    aswertyui
    Poziom 8  

    Hej.
    Jestem mocno początkujący w programowaniu czegokolwiek, ale staram się sukcesywnie wszystkiego uczyć. Więc proszę wybaczcie mi ewentualną podstawową niewiedzę.

    W moim subaru forester z 1998r jest bardzo prosty system komunikacji z komputerem pracy silnika. Wykorzystuje on sygnał Tx, Rx oraz GND. Więc postanowiłem zrobić do tego wyświetlacz parametrów pracy silnika. Od strony technicznej wszystko już wiem, ale pod strony programowej mam spore trudności.

    Generalnie sprawa wygląda tak. Parametry które mnie interesują znajdują się pod adresami:
    BatteryVoltageAddress=0007
    VehicleSpeedAddress=0008
    EngineSpeedAddress=0009
    CoolantTempAddress=000A
    IgnitionAdvanceAddress=000B
    AirflowSensorAddress=000C
    EngineLoadAddress=000D
    ThrottlePositionAddress=000F
    InjectorPulseWidthAddress=0010
    ISUDutyValveAddress=0011
    O2AverageAddress=0012
    O2MinimumAddress=0013
    O2MaximumAddress=0014
    KnockCorrectionAddress=0015
    AFCorrectionAddress=001C
    AtmosphericPressureAddress=001F
    ManifoldPressureAddress=0020
    BoostSolenoidDutyCycleAddress=0022

    Każdy parametr należy odpowiednio poddać działaniu matematycznemu aby móc odczytać to jako interesującą nas wartość. Tak jak na zdjęciu poniżej.

    Wyświetlacz parametrów pracy silnika SUBARU

    A na koniec chciałbym aby te parametry mogły pojawić się na wyświetlaczu 2 x 16. Takim typowym podłączonym bezpośrednio do Arduino. Oczywiście już poddane przeliczeniu według tabelki powyżej. Całość będzie na Arduino UNO. Nie chcę wyświetlać wszystkich parametrów na raz ale pojedynczo. Dodatkowo guzikiem chciałbym przełączać się na kolejny adres czyli kolejny parametr.
    Odświeżanie parametru co 0,5s.

    I tu mam do Was prośbę. Czy mógłby ktoś choć na przykładzie tylko jednego parametru pokazać jak napisać taki program? Czy może potrzeba jeszcze jakichś informacji których nie brałem pod uwagę?

    Każda pomoc będzie dla mnie cenna

    0 8
  • #2 18 Wrz 2017 00:44
    maly_ninja
    Poziom 12  

    Jeśli komunikacja jest po uarcie to wydaje mi się, że potrzebny jest jeszcze jakiś opisany protokół jak należy wyłuskać dane z jakiegoś adresu. Czy po prostu wysyłasz adres i on zwraca jakieś dane czy jakieś dodatkowe komendy są do tego.

    Jeśli już będziesz to wiedział to po prostu wystarczy przerobić jakiś przykładowy kod z Arduino (np. w google wyszukać "arduino serial example")

    0
  • #3 18 Wrz 2017 07:07
    aswertyui
    Poziom 8  

    Właśnie też tak myślałem że potrzebny jest jakiś protokół. Ale zrobiłem prosty kabelek podłączany do lapka. Kabel zrobiony na bazie ftdi232 gdzie poprostu kolejno podpiołem się do tx, rx oraz gnd. A kabelek usb podłączyłem do laptopa. Uruchomiłem program evoscan i tam już mogłem odczytać wszystkie parametry.

    Ale co zrobić aby to arduino czytał te parametry i wyświetlał je na wyświetlaczu poddane tym funkcjom które są w tabeli w pierwszym poście.

    Jedyne co w sieci znalazłem to:

    http://www.alcyone.org.uk/ssm/protocol.html

    oraz

    http://geek-mag.com/posts/255764/

    0
  • #4 18 Wrz 2017 10:43
    maly_ninja
    Poziom 12  

    W podanym przez Ciebie linku jest opisany protokół. Z tego co zrozumiałem aby pobrać np. Prędkość obrotową silnika (0009) należy wysłać 4 bajty przez uart 78 00 09 00, i następnie komputer będzie ci wysyłał ten parametr dopóki nie wyślesz komendy stopu (12 00 00 00).
    Baud i wszystko jest podane wiec wydaje mi się, że nie będzie problemu z programem.

    W skrócie wysyłasz 4 bajty (78 00 09 00), czekasz aż odbierzesz 3 bajty (00 09 data) i wysyłasz komendę stopu (12 00 00 00). Jak to zadziała to można kombinować dalej :p

    Na razie nie ma mnie na komputerze wiec racze z kodem nie pomogę. Dopiero wieczorem będę mógł coś zrobić.

    Edit.
    Teraz wszedłem w drugi link, tam jest nawet podany godowy kod do pobierania parametrów wiec to dużo Ci ułatwi.

    Edit2.
    Na sam poczatek możesz spróbować wysyłać te komendy prosto z komputera i zobaczysz czy reaguje. Możesz użyć programów np. putty albo realterm.

    0
  • #5 18 Wrz 2017 10:54
    aswertyui
    Poziom 8  

    Widzisz już teraz lepiej to rozumiem. Pod tym drugim linkiem wiem że jest taki kod. Bo masz na mysli ten dluższy? Bo on sluży do rozpoznawania modelu ECU. Wysyłasz mu zapytanie a on mignięciami diody na arduino Ci odpowiada. Czy czytanie parametrów ma działać podobnie?
    Pozostaje kwestia rzucenia tego na wyświetlacz.
    Jak byś mógł nawet na szybko sklecić kod króry pokazał by to na lcd to będę wdzięczny.

    Kurcze to się zaczyna robić bardzo ciekawe :)

    0
  • Pomocny post
    #6 18 Wrz 2017 11:09
    maly_ninja
    Poziom 12  

    Służy do rozpoznawania ECU i czyli tam wysyła 4 bajty 78 00 00 00, czyli ja rozumiem to tak ze pobiera dane spod adresu 00 00 zgodnie z protokołem. Zmienisz adres 00 00 na jakis inny, jakies małe zmiany i powinno działać. :D

    Co do LCD to jest dużo gotowych przykładów jak wyświetlać jakies dane na arduino np. ten Link.
    Czyli po pobraniu jakiegoś parametru zamiast pokazaniu go na ledach wyświetlisz na lcd. Jeśli uda Ci się wyświetlić jeden parametr to reszta będzie z górki.

    Co do kodu to na telefonie strasznie niewygodnie będzie mi się pisać, wiec w razie problemów jak wrócę coś będę mógł dopomóc.

    0
  • #7 18 Wrz 2017 11:19
    aswertyui
    Poziom 8  

    Super. Baaardzo dziekuję za rozjaśniwnie. Wydaje mi się że dam radę. Bo rozumiem już dużo dokładniej zasadę działania. W wolnej chwili czyli pewnie pod koniec tygodnia wezmę się za to i zobaczymy.

    Jeszcze raz dzieki. I na pewno się odezwę.

    0
  • #8 18 Wrz 2017 12:36
    kindlar
    Poziom 37  

    Jeśli masz coma w laptope to możesz sprawdzić za pomocą terminala http://hw-server.com/terminal-terminal-emulation-program-rs-232 lub realtrma https://sourceforge.net/projects/realterm/ czy nawiążesz komunikację z kompem samochodu. Jeśli nie masz to przydatny będzie https://www.google.pl/search?q=uart+usb&sourc...ICigB&biw=1920&bih=1030#imgrc=ng3Az9sTxBFAwM:
    Sprawdzisz też w laptopie czy program, którym łączysz się z samochodem wysyła poprawne kody, terminalem możesz mu odpowiedzieć i sprawdzisz reakcję. Wtedy dopiero podłączysz do samochodu.

    0
  • #9 02 Gru 2017 21:16
    aswertyui
    Poziom 8  

    Hej. Dawno się nie odzywałem. Niestety nie mogę ruszyć z tym programem. Czy mógłby ktoś chociaż spróbować napisać jakiś kod który zapyta ECU o jakikolwiek parametr. Bo jestem naprawdę mocno początkujący i nie potrafię ruszyć z tematem.

    0