Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:mihnea.dinica:stefan.comanescu [2026/05/04 18:35]
stefan.comanescu [Rezultate Obţinute]
pm:prj2026:mihnea.dinica:stefan.comanescu [2026/05/04 19:33] (current)
stefan.comanescu [Hardware Design]
Line 8: Line 8:
   * **Ideea de la care am pornit:** Dorința de a decoda și vizualiza traficul intern al mașinii (o rețea industrială complexă, extrem de zgomotoasă și aglomerată) fără a folosi testere comerciale (gen ELM327), ci comunicând nativ prin microcontroler.   * **Ideea de la care am pornit:** Dorința de a decoda și vizualiza traficul intern al mașinii (o rețea industrială complexă, extrem de zgomotoasă și aglomerată) fără a folosi testere comerciale (gen ELM327), ci comunicând nativ prin microcontroler.
   * **Utilitate:​** Demonstrează conceptele critice de rețele auto, gestiunea corectă a întreruperilor hardware pentru prevenirea pierderii de pachete și necesitatea izolării și stabilizării alimentării auto (12V -> 5V) prin convertoare în comutație.   * **Utilitate:​** Demonstrează conceptele critice de rețele auto, gestiunea corectă a întreruperilor hardware pentru prevenirea pierderii de pachete și necesitatea izolării și stabilizării alimentării auto (12V -> 5V) prin convertoare în comutație.
 +  * **Elemente de noutate (5%):** Spre deosebire de o simplă interogare OBD-II clasică prin care se solicită un parametru (PID 0x0C), sistemul meu acționează și ca un CAN-Sniffer activ. Acesta interceptează direct pachetele de tip broadcast aruncate de ECU pe rețeaua mașinii (ex: ID 0x201 specific vehiculelor Ford), obținând astfel turația motorului instantaneu,​ cu latență zero, fără a mai încărca magistrala cu cereri proprii.
 +
 +{{ :​pm:​prj2026:​mihnea.dinica:​rpm.drawio.png?​nolink&​200|}}
 +
 +===== Ipoteză, Planificare și Măsurători =====
 +
 +**Ipoteză științifică:​** ​
 +Credem că efectuarea citirii asincrone în cascadă a bufferului CAN (în interiorul rutinei de loop) combinată cu decodarea mesajelor broadcast native ale vehiculului (ID 0x201) va îmbunătăți considerabil performanța afișajului RPM deoarece va preveni fenomenul de "​Interrupt Overrun"​ și va elimina latența cauzată de timpii de așteptare ai interogărilor standard OBD-II.
 +
 +**Metrici și Ținte de Performanță (Măsurători):​**
 +  * **Stabilitatea tensiunii:​** Menținerea tensiunii de ieșire la 5.0V (+/- 0.1V) folosind sursa Step-Down MP1584EN, indiferent de fluctuațiile alternatorului mașinii (care urcă până la 14.4V).
 +  * **Latența comunicației:​** Actualizarea datelor pe ecranul LCD și a sistemului Shift-Light în mai puțin de 150ms de la variația fizică a turației motorului.
 +  * **Rata de succes a pachetelor:​** Procesarea traficului fără pierderi (0% pachete ignorate) și fără blocarea magistralei I2C sau SPI la turații mari.
 +
 +**Planificarea activităților (Grafic Gantt):**
 +  * **Săptămâna 1:** Cercetare protocoale (ISO 15765-4), desenare scheme bloc/​electrice și achiziție componente.
 +  * **Săptămâna 2:** Interconectare magistrală I2C (LCD) și SPI (MCP2515) pe breadboard. Scanare adrese I2C.
 +  * **Săptămâna 3:** Implementarea logicii de polling, setarea întreruperilor hardware (INT0) și decodarea pachetelor OBD-II în C++.
 +  * **Săptămâna 4:** Integrarea sursei Step-Down, calibrarea tensiunilor și testarea practică pe autovehicul (Ford Fiesta). Implementarea "CAN Sniffing-ului"​ pentru ID 0x201.
 +  * **Săptămâna 5:** Testare finală de stabilitate termică, wire-management,​ urcare cod pe repository-ul Git și redactarea documentației Wiki.
  
 ===== Descriere generală ===== ===== Descriere generală =====
Line 37: Line 57:
   * **GPIO (LED-uri):​** Verde -> PD3 (Pin 3), Galben -> PD4 (Pin 4), Roșu -> PD5 (Pin 5)   * **GPIO (LED-uri):​** Verde -> PD3 (Pin 3), Galben -> PD4 (Pin 4), Roșu -> PD5 (Pin 5)
   * **Alimentare:​** OBD-II Pin 16 & Pin 4 -> IN (+/-) Step-Down -> OUT (+/-) ajustat pe multimetru la 5.0V -> Breadboard Power Rails. ​   * **Alimentare:​** OBD-II Pin 16 & Pin 4 -> IN (+/-) Step-Down -> OUT (+/-) ajustat pe multimetru la 5.0V -> Breadboard Power Rails. ​
 +{{:​pm:​prj2026:​mihnea.dinica:​schemă_electrică_compactă_-_rpm_can-bus.pdf|}}
 ===== Software Design ===== ===== Software Design =====
  
Line 45: Line 65:
     * ''​mcp_can''​ (de Cory J. Fowler) - Manipularea registrelor interne ale MCP2515 via SPI.     * ''​mcp_can''​ (de Cory J. Fowler) - Manipularea registrelor interne ale MCP2515 via SPI.
     * ''​LiquidCrystal_I2C''​ - Controlul afișajului.     * ''​LiquidCrystal_I2C''​ - Controlul afișajului.
 +  * **Profilarea codului:** Evaluarea performanței codului s-a realizat urmărind evitarea blocajelor procesorului. Datorită utilizării logicii asincrone cu funcția ''​millis()'',​ procesorul (CPU) are un Idle Time ridicat, intervenind doar pentru a drena bufferul SPI când pinul de întrerupere pică pe LOW. Nu există funcții ''​delay()''​ în bucla principală care să monopolizeze microcontrolerul.
   * **Algoritmi implementați:​**   * **Algoritmi implementați:​**
-    * **Cod non-blocant:​** ​În loc de folosirea funcției ''​delay()'',​ s-a utilizat Timer0 (''​millis()''​) pentru a interoga CAN-ul la intervale precise de 100ms, lăsând procesorul liber să asculte asincron răspunsurile.+    * **Cod non-blocant:​** ​S-a utilizat Timer0 (''​millis()''​) pentru a interoga CAN-ul la intervale precise de 100ms.
     * **Interrupt Overrun Handling:** Rutina de tratare folosește un sistem în cascadă ''​while (CAN_MSGAVAIL == CAN.checkReceive())''​ care citește simultan toate mesajele adunate pentru a debloca microcontrolerul în cazul unui trafic auto intens.     * **Interrupt Overrun Handling:** Rutina de tratare folosește un sistem în cascadă ''​while (CAN_MSGAVAIL == CAN.checkReceive())''​ care citește simultan toate mesajele adunate pentru a debloca microcontrolerul în cazul unui trafic auto intens.
-    * **Decodare duală:** Software-ul identifică răspunsurile standard la interogări OBD-II (ID 0x7E8) și funcționează ca un sniffer pentru a prinde cadrele transmise broadcast de mașină (ID 0x201), care conțin turația în timp real, reducând latența pe ecran.+    * **Decodare duală:** Software-ul identifică răspunsurile standard la interogări OBD-II (ID 0x7E8) și funcționează ​simultan ​ca un sniffer pentru a prinde ​direct ​cadrele transmise broadcast de mașină (ID 0x201).
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
Line 61: Line 82:
 ===== Download ===== ===== Download =====
  
-  * [https://​github.com/​stefan04com/​RPM-Shift-Light-via-CAN-Bus/​tree/​main] +  * [[https://​github.com/​stefan04com/​RPM-Shift-Light-via-CAN-Bus/​tree/​main|Repository GitHub (Istoric Commit-uri)]
-  * [https://​github.com/​stefan04com/​RPM-Shift-Light-via-CAN-Bus/​archive/​refs/​heads/​main.zip]+  * [[https://​github.com/​stefan04com/​RPM-Shift-Light-via-CAN-Bus/​archive/​refs/​heads/​main.zip|Arhivă Cod Sursă (.zip)]]
  
 ===== Jurnal ===== ===== Jurnal =====
pm/prj2026/mihnea.dinica/stefan.comanescu.1777908950.txt.gz · Last modified: 2026/05/04 18:35 by stefan.comanescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0