04-06-2025, 05:54 PM
Vratio sam se na BluePill jer sam imao već ovu LCD tastaturu sklopljenu i CAN tranciver sam premestio na njega (bes USB konekcije).
Ovde se vidi rezultat ODB-II upita za jednu vrednost Vbat, dobije odgovor u roku od 7-15ms, tako može da se pita i radi bilo šta drugo.
Ovaj VU-metar mi je "monitor vrednosti", postavlja kazaljku od 0-100% zavisno od vrednosti registra i on se "osvežava" posle svakog upita i odgovora pa se praktično vidi i ponašanje tokom rada kada se te vrednosti menjaju.
Radi preko TMR-PWM, predvideo sam dva za dva instrumenta.
Preko tastaturice može da se bira praćenje osnovnih PID parametara, na LCD normalno ili u HEX formatu i analogno na VU-metru

const ObdPidInfo supported_pids[] = {
{0x01, "01-MonitorStatus", "%02X", 1, PID_FMT_RAW},
{0x02, "02-Freeze DTCs ", "%02X", 1, PID_FMT_RAW},
{0x03, "03-FuelSysStatus", "%02X", 1, PID_FMT_RAW},
{0x04, "04-EngineLoad ", "%u%%", 1, PID_FMT_PERCENT},
{0x05, "05-CoolantTemp ", "%dC", 1, PID_FMT_TEMP_C},
{0x06, "06-ShortTrimB1 ", "%+d%%", 1, PID_FMT_TRIM},
{0x07, "07-LongTrimB1 ", "%+d%%", 1, PID_FMT_TRIM},
{0x08, "08-ShortTrimB2 ", "%+d%%", 1, PID_FMT_TRIM},
{0x09, "09-LongTrimB2 ", "%+d%%", 1, PID_FMT_TRIM},
{0x0A, "0A-FuelPressure ", "%ukPa", 1, PID_FMT_RAW},
{0x0B, "0B-IntakeMAP ", "%ukPa", 1, PID_FMT_RAW},
{0x0C, "0C-EngineRPM ", "%uRPM", 2, PID_FMT_RPM},
{0x0D, "0D-VehicleSpeed ", "%ukm/h", 1, PID_FMT_RAW},
{0x0E, "0E-TimingAdvance", "%+ddeg", 1, PID_FMT_TEMP_C},
{0x0F, "0F-IntakeTemp ", "%dC", 1, PID_FMT_TEMP_C},
{0x10, "10-MAFAirFlow ", "%u.%02ug/s", 2, PID_FMT_MAF},
{0x11, "11-ThrottlePos1 ", "%u%%", 1, PID_FMT_PERCENT},
{0x13, "13-O2SensorBank1", "%u.%02uV", 2, PID_FMT_VOLT},
{0x15, "15-O2SensorBank2", "%u.%02uV", 2, PID_FMT_VOLT},
{0x1C, "1C-OBDStandard ", "%02X", 1, PID_FMT_RAW},
{0x1F, "1F-EngineRuntime", "%us", 2, PID_FMT_KM},
{0x21, "21-DistanceMIL ", "%ukm", 2, PID_FMT_KM},
{0x22, "22-FuelRailPress", "%ukPa", 2, PID_FMT_RAW},
{0x23, "23-RailPressDies", "%ukPa", 2, PID_FMT_RAW},
{0x2C, "2C-CmdThrottle ", "%u%%", 1, PID_FMT_PERCENT},
{0x2F, "2F-FuelLevel ", "%u%%", 1, PID_FMT_PERCENT},
{0x31, "31-DistSinceCLR ", "%ukm", 2, PID_FMT_KM},
{0x3C, "3C-CatalystTemp ", "%dC", 2, PID_FMT_TEMP_CX10},
{0x42, "42-ControlModVolt", "%u.%02uV", 2, PID_FMT_VOLT},
{0x43, "43-AbsLoadValue ", "%u%%", 2, PID_FMT_PERCENT},
{0x44, "44-EqRatio ", "%.2f", 2, PID_FMT_LAMBDA},
{0x45, "45-RelThrottle ", "%u%%", 1, PID_FMT_PERCENT},
{0x46, "46-AmbientTemp ", "%dC", 1, PID_FMT_TEMP_C},
{0x47, "47-ThrottlePos2 ", "%u%%", 1, PID_FMT_PERCENT},
{0x49, "49-AccelPedalPos", "%u%%", 1, PID_FMT_PERCENT},
{0x4C, "4C-CmdAccelPedal", "%u%%", 1, PID_FMT_PERCENT},
};
Sledeća funkcija koja mi treba je "Clear_DTC();", ostale servisne funkcije nisu sad prioritetne ...

Može sve da radi vezano za konekciju sa ECU, malo je složenije sa servise koji koriste frejmove/poruke iz više delova (UDS), sve ove predhodne su bile sa jednim frejmom za upit i odgovor je isto u jednom frejmu i relativno je lako to sve uskladiti po tim njihovim definisanim stvarima i statusima za razne parametre.
Postoje upiti koji vraćaju šta je sve podržano, kod ovog ECU su to standardne ODB-II stvari a sve ostalo ide preko proširenog servisa sa više frejmova po poruci koji pristupaju svim ostalim parametrima i akcijama.