Go Down

Topic: Ordinateur de bord pour Subaru (Read 6126 times) previous topic - next topic

supertotof78

Ah!

Je n'aime pas ne pas comprendre. STP, peux-tu m'expliquer le rôle de chaque ligne de ton code?  :smiley-red:

guix

Tu as testé mon code?

barbudor

#17
Oct 10, 2013, 07:54 pm Last Edit: Oct 10, 2013, 07:56 pm by barbudor Reason: 1
Je suppose que tu as adapté notamment les broches SerialToECU et SerialFromECU à ton cas ?

Il faudrait procéder plus pas à pas. Peut être quelque chose d'autre ne marche pas.
Je suggère d'autre essais :

1) Essayer d'autres variables en changeant le code hexa.
la température par exemple.
ou la tensiond e la batterie

2) Faire un code moins formel mais plus à même de faire du debug similaire à celui de guix
Code: [Select]

#include <SoftwareSerial.h>

byte const SerialToECU = 5;
byte const SerialFromECU = 6;

SoftwareSerial ECU( SerialFromECU, SerialToECU);

void setup( void )
{
  // Utilisation de Serial vers le moniteur Arduino pour le debug (affichage des resultats sur l'ecran PC
  Serial.begin(9600);
  // Configuration de SoftwareSerial pour discuter avec l'ECU à la vitesse de 1953 baud
  ECU.begin( 1953 );

  // envoi des 4 octets qui forment le message de lecture
  ECU.write( 0x78 );    // commande lecture
  ECU.write( 0x11 );     // MSB de l'adresse de la variable à lire
  ECU.write( 0x85 );   // LSB de l'adresse de la variable à lire
  ECU.write( 0x00 );  // marqueur de fin
}

void loop()
{
  //reception de la réponse: on affiche en hexa tous les caractère reçus.
  // Pour la requête de lecture ci -dessus, on est sensé recevoir 11 85 XX ou XX est la températeure + 50C
  if (Serial.available() )
  {
    Serial.print( (int)ECU.read(), HEX );
    Serial.print( " " );
  }
}


Je part de l'hypothèse que tu as un PC de connecté et que tu peux afficher le moniteur Arduino (Serial.print)
ECU est un SoftwareSerial pour discuter avec l'ECU.

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

guix

Je pense que ça aura du mal à fonctionner avec un SoftSerial, puisqu'on ne peut rien configurer à part les bauds.

fdufnews

Quote
Code: [Select]
  // Configuration de SoftwareSerial pour discuter avec l'ECU à la vitesse de 1953 baud
  ECU.begin( 1953 );

Je pense que ça ne fonctionnera pas parce que le baud rate est pris dans une table. Qui évidemment ne contient pas 1953.
Il faudrait modifier la librairie pour lui faire accepter une valeur comme celle-ci.

barbudor

Hum
Effectivement j'avais raté la parité paire.
Est-ce bien légal ? Il me semble que si tu as un bit de parité tu dois te limiter aux mots de 7 bits.
8 bits + parité n'est pas forcément supporté par tous les UART.

En comme fdunews vient de le faire remarquer SoftwareSerial ne supporte pas n'importe quel débit mais uniquement les débits standards.

Donc mal barré avec SoftwareSerial ...

@supertotof78
C'est quoi ta carte Arduino ?
Si c'est une UNO, tu est mal barré car il va falloir utiliser la liaison série hardware (Serial) donc tu ne pourras plus utiliser Serial pour debugger vers le PC.

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

supertotof78

Oui, c'est un Uno.

Pas grave, à ce moment là, j'affiche sur le lcd, non? Ca ne change pas grand chose et le Serial reste dispo pour la com avec l'ECU.

Alors gros boulet Inside, je n'avais pas capté que les 1ères lignes concernaient l'attribution des broches d'entrée et de sortie.


supertotof78

Par contre, dans le tuto, ils parlent d'une commande nécessaire pour stopper la transmission. N'est-ce pas pour ça que je n'ai qu'une valeur qui s'affiche? L'ECU reste bloqué en mode transmission et ne considère plus la commande pour un nouvel échange?

Désolé pour le langage "jypigekedal" mais mes connaissances sont assez limitées et je rame un peu pour suivre.

J'essaierai les autres propositions demain (dans le noir, ce n'est pas évident). J'ai manqué de temps car j'ai d'abord du cabler proprement entre Arduino et ma prise de Diag...

supertotof78


Tu as testé mon code?


Oui, et Arduino me retourne 4 caractères: Un symbole, un espace puis à nouveau 2 fois le même symbôle.

supertotof78


Code: [Select]


  ECU.write( 0x00 );  // marqueur de fin




La compilation bloque sur cette ligne. "call of overloaded `write(int)' is ambigous"

barbudor



Tu as testé mon code?


Oui, et Arduino me retourne 4 caractères: Un symbole, un espace puis à nouveau 2 fois le même symbôle.



Il faut caster en int dans le serial print pour afficher la valeur de l'octet reçu au lieu de sa représentation en caractère.
Éventuellement utiliser la forme Serial.print( (int)valeur, HEX ); pour voir en hexa les 2 premiers qui sont sensés être l'adresse de lecture.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

supertotof78

Je vais refaire des tests demain.

Dois-je faire des essais sur le moniteur avec un serial.begin et un ECU.begin différents ou alors je suis obligé d'utiliser le lcd?

Concernant les 1953 bauds qui semblent vous embêter, ils sont utilisés pour le mode binaire. Mais dans le lien que j'ai mis en p.1, ils dièse y que la com est aussi possible en mode ASCII à 4808 baud sans avoir besoin d'envoyer de message stop.
Est-ce préférable? Comment coder les adresses?

barbudor

La conclusion du dessus c'est que SoftwareSerial ne marche pas à 1953 baud.
NI à 4808 d'ailleurs, a la rigueur 4800.
Mais aussi SoftwareSerial ne sait pas gérer la parité.

Il faut donc impérativement passer par la liaison série de base Serial.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

guix

#28
Oct 12, 2013, 12:53 am Last Edit: Oct 12, 2013, 01:09 am by guix Reason: 1
Tu es sûr que tu utilise le bon protocole?

http://www.rs25.com/forums/f72/t165108-subaru-select-monitor-ssm-investigation.html

Fais gaffe quand même de ne pas cramer ton arduino, ou pire ton ordi de bord, il suffit d'un petit court-circuit ou voltage/courant trop élevé, et boom...

supertotof78

En fait non. J'ai déjà vu ton lien mais honnêtement, je suis largué.
On y trouve cet autre lien intéressant, mais qui ne m'aide pas plus...
http://www.vwrx.com/index.php?pg=selectmonitor

Go Up