IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Protocole non série ?


Sujet :

Arduino

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut Protocole non série ?
    Bonjour


    Je dois travailler au décodage d'un protocole et je ne parviens pas à identifier comment sont encodées les données.

    Voici la trace de 3 messages différents.

    Nom : traces.png
Affichages : 1237
Taille : 131,2 Ko

    A première vue cela ressemble a du RS485

    La largeur d'impulsion est de 5 micro secondes.
    Je m'attendais a retrouver un bit de start / stop régulièrement espacé dans le message or il n'en est rien. Ca ne ressemble pas a un message série de type (Start + 8 bit + parité + stop)

    Des idées de ce que ca pourrait être comme type d'encodage ?


    Merci d'avance

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut,
    En effet les signaux différentielles font tout de suite penser à du RS485/422 mais ça pourrait tout aussi bien être un bus CAN (si je ne dis pas de bêtises ceux sont aussi des signaux différentielles) au quel cas c'est plus compliqué à décoder.

    Les signaux sont issus de quel appareil ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir à tous

    C'est une trame série différentielle, mais qui n'est pas du RSxxx
    Le CAN, l'USB, le DVI/HDMI, l’Ethernet en RJ45, le SATA utilisent tous une communication série différentielle, sur une ou plusieurs paires.

    Bon ici cela ressemble quand bien à du CAN, la datasheet du MCP2515, chap 2, contient une bonne référence sur la trame du CAN.
    La longueur de la trame standard c'est 44 + 8N bits et celle de la trame étendue c'est 64+8N, avec N=0 à 8, avec un start bit visible, et 7 stop bits non visible à la fin. Le dernier bit dominant est le "acknowledge" et est émis par le récepteur, ce qui semble être le cas ici car la tension n'est pas identique.

    Bon décodage

    Delias

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    Merci beaucoup, effectivement mes recherches m'ont amenées à pencher pour le CanBus. Les tensions sont cohérentes avec les spécifications.

    La prise est une prise DVI mais ce n'est pas de la video qui est passée sur ce cable (un autre apapreil est sur le même bus avec une prise 4 pin hirose ) - matériel d'optique.

    Je me suis commandé une carte Arduino / CAnBus. J'espère l'avoir assez vite pour voir ce que ca donne.

    Merci pour votre aide.

  5. #5
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello

    Citation Envoyé par Delias Voir le message
    C'est une trame série différentielle, mais qui n'est pas du RSxxx
    Le CAN, l'USB, le DVI/HDMI, l’Ethernet en RJ45, le SATA utilisent tous une communication série différentielle, sur une ou plusieurs paires.
    Dans la liste on peut virer :
    DVI / HDMI : 200kHz c'est beaucoup trop lent pour ça.
    Ethernet : modulation QAM -> ça devrait ressembler à l'union de 2 sinusoïdes.

    Pour le reste, aucune idée.

    (Marrant comme les pics en début d'impulsion sont doublés, je pensais que comme le bruit c'était divisé par deux avec du différentiel.)

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir Iradrille

    Ce que je voulais dire avec tous ces formats, c'est que "série différentiel <=> RS485" est un abus de langage, le RS485 était probablement le plus répandu, mais il n'est pas le seul.
    Après le CAN doit être le seul de la liste qui utilise le même niveau de tension et de vitesse que le RS485, les autres ont d'autres tensions et/ou d'autres vitesses.

    Bonne soirée

    Delias

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    Finalement avec mon oscilo j'ai réussi a décoder le message; Donc c'est bien du canbus.

    Nom : candecode.png
Affichages : 1119
Taille : 9,7 Ko

    Par ailleurs j'ai recu ce matin mon CanBusShield (SeeedStudio). Il est arrivé en moins de 48h !
    Et là : grosse déception, ca ne marche pas.
    Le shield s'initialise correctement mais il ne capte pas de données. Pourtant je vois que la LED RX clignote quand des données sont présente sur le bus.
    J'ai tenté toutes les vitesses de bus, rien n'y fait.

    J'ai vérifié le CANH/CANL (si j'interverti la LED RX ne clignote pas).

    Est ce que ca peut être que mon signal est un peu moche ?
    Sur l'oscillo j'ai du ajuster finement les niveaux pour parvenir à décoder (hyterisis de seulement 200mV pour ne pas avoir d'erreurs) ?

    J'ai utilisé le code des exemples fournis avec la lib

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    #include <SPI.h>
    #include "mcp_can.h"
     
    // the cs pin of the version after v1.1 is default to D9
    // v0.9b and v1.0 is default D10
    const int SPI_CS_PIN = 9;
     
    MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin
     
    unsigned char speeds[] = { CAN_5KBPS,CAN_10KBPS,CAN_20KBPS,CAN_25KBPS,CAN_31K25BPS,CAN_33KBPS,CAN_40KBPS,CAN_50KBPS,CAN_80KBPS,CAN_83K3BPS,CAN_95KBPS,CAN_100KBPS,CAN_125KBPS,CAN_200KBPS,CAN_250KBPS,CAN_500KBPS,CAN_666KBPS,CAN_1000KBPS};
    String speedslib[]={"CAN_5KBPS","CAN_10KBPS","CAN_20KBPS","CAN_25KBPS","CAN_31K25BPS","CAN_33KBPS","CAN_40KBPS","CAN_50KBPS","CAN_80KBPS","CAN_83K3BPS","CAN_95KBPS","CAN_100KBPS","CAN_125KBPS","CAN_200KBPS","CAN_250KBPS","CAN_500KBPS","CAN_666kbps","CAN_1000KBPS"};
    unsigned char flagRecv = 0;
    unsigned char len = 0;
    unsigned char buf[8];
    char str[20];
     
    void setup()
    {
        Serial.begin(115200);
        unsigned char speed = getspeed();
       // unsigned char speed= CAN_200KBPS;
    	while (CAN_OK != CAN.begin(speed))              // init can bus : baudrate = 200k
        {
            Serial.println("CAN BUS Shield init fail");
            Serial.println(" Init CAN BUS Shield again");
            delay(100);
        }
        Serial.println("CAN BUS Shield init ok!");
     
     
    }
     
    unsigned char getspeed() {
     
    	int speedindex=-1;
     
    		for (int i =0; i<18;i++) {
    			Serial.print("[");
    			//Serial.print(i+65);
    			Serial.write(i+65);
    			Serial.print("] ");
    			Serial.println(speedslib[i]);
    		}
    		Serial.println(">>");
    		while ( (speedindex<0 || speedindex>17)) {
    			while (Serial.available()) {
    			char c = Serial.read();
    			speedindex=c-65;
    			if ( (speedindex>=0 && speedindex<17)) {
    				Serial.println(speedslib[speedindex]);
    				return speeds[speedindex];
    			} else {
    				Serial.println("Speed unknown - try again\n>>");
    			}
    			}
    		}
    		return CAN_200KBPS;
    }
     
    void loop()
    {
        unsigned char len = 0;
        unsigned char buf[8];
     
     
     
        if( CAN_MSGAVAIL == CAN.checkReceive())            // check if data coming
        {
            CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf
     
            unsigned int canId = CAN.getCanId();
     
            Serial.println("-----------------------------");
            Serial.print("Get data from ID: ");
            Serial.println(canId, HEX);
     
            for(int i = 0; i<len; i++)    // print the data
            {
                Serial.print(buf[i], HEX);
                Serial.print("\t");
            }
            Serial.println();
        }
    }

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir Boubil

    Si ce que j'ai trouvé est juste, le shield utilise le MCP2515 pour le protocole et le MCP2551 pour la translation de niveau. Pour vérifier que le bruit n'est pas trop important il faudrait mesurer la ligne RX entre les deux (pour autant qu'elle soit accessible sans risque de court-circuit, sinon )

    Après le MCP2515 est une puce au contrôle avancé, j'ai dû rester bien concentré pour ne pas me tromper dans toutes les valeurs à transmettre.
    Il y a un filtre sur les identifiants qui est actif au Reset avec un masque nul (càd toutes les valeurs admises) mais qui va filtrer soit les entêtes standards soit les entêtes étendues. Le bit qui détermine cela est indéterminé au reset.

    Ce n'est pas pour dire que tu dois faire ces initialisations directement. Mais tu dois faire ces initialisations complètement via la librairie. Pour savoir comment, il faut connaitre la lib (ce qui n'est pas mon cas) ou bien potasser sa doc (en espérant qu'elle ne soit pas trop merdique).

    Bonne soirée

    Delias

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    Bonjour Délias

    Merci pour ces infos.

    Je vais regarder la lib plus en détail pour les initialisations.

    Que veux tu dire quand tu écris : il faudrait mesurer la ligne RX entre les deux ?

    J'ai revérifié ce matin l'impédance du bus est bien de 60 ohm (avec le shield).

    Ce soir je vais faire d'autres tests.
    Actuellement j'accède au bus via une prise DVI (j'ai intercalé un petit circuit qui me permet d'exposer les pin du DVI sans interrompre le bus). Mais cela fait beaucoup de pin. Et j'ai choisi un peu arbitrairement les pins (en fonction des différences de tension). Toutefois à l'oscillo je vois que les tensions sont bonnes (identiques à celles attendues pour un canbus) et que je décode le protocole donc...
    Néanmoins j'ai un autre endroit où je peux accéder au bus et ou je n'ai que 4 fils. Ca sera plus simple de vérifier si j'ai pris la bonne masse.

    A+ pour d'autres nouvelles et merci encore pour ton aide.

  10. #10
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut,
    Dans la foulée, regarde si il y a des données qui se baladent sur le SPI (au dos de ton shield, il semble qu'il y a des points tests où tu peux souder un fil par exemple)

    Si ton oscilloscope sait décoder un bus CAN normalement il doit savoir le faire pour du SPI
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonjour

    Le travail est séparé entre les deux puces. Le MCP2551 fait juste une conversion de niveau du différentiel bidirectionnel du CAN de/vers deux signaux TX et RX. C'est le même travail qu'un MAX485 dans le cadre d'une liaison RS485. C'est à lui que revient le plus gros travail de déparasitage. Et le MCP2515 fait lui le travail de gestion du protocole.
    Mesurer la ligne RX (ou RXD) entre le MCP2551 patte 4 et le MCP2515 patte 2 permet de savoir si le signal CAN est dans les clous du MCP2551 électriquement parlant.

    Après en allant sur la page wiki du shield de seeed, il me semble que ce signal est dispo sur le connecteur 6 (partie Hardware Overview).
    Et comme décrit il faut probablement retirer la résistance de bus vu que ce n'est qu'un sniffer (le Warning dans la partie Hardware Overview).

    Bonne journée

    Delias

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    Merci tous les deux pour ces explications.



    Quand je regarde la carte il ne semble pas y avoir de connexion avec le pin 6 par contre il y a une liaison avec le pin 3 mais rien plus de ce coté.

    Par contre j'ai réussi a faire un piquage de l'oscillo sur la pin 4 du MCP2551 et la j'ai bien un signal , ainsi que sur la pate 2 du MCP2515. C'est cohérent avec le fait que la led RX clignote quand il y a des messages.

    Concernant le SPI, c'est facile les pins sont exposés au centre et la heu...c'est bizare. Je ne sais pas à quoi m'attendre mais voila ce que j'obtiens

    La SCK (bleu) a deux signaux sinusoidaux de 1 micro seconde espacés d'une micro seconde qui se repètent toutes les 21 micros secondes (ca semble logique pour un horloge)

    Nom : spi 6.png
Affichages : 773
Taille : 11,0 Ko


    Le MOSI (rouge) est à 5v et tombe à Zero a chaque signal d'horologe.
    Du coup je vois mal comment réaliser un déclenchement avec mon oscillo quand il y a du signal
    Le MISO est a zero, il est un peu perturbé par le signal d'horloge mais ne monte pas à 5. Et je ne constate aucun signal.

    Bon je suis perplexe.

    PS : j'ai bien retiré le P1 pour ne pas avoir la resistance de fin de ligne.Impédance verifiée

  13. #13
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut,
    Si zoom sur SCK (fortement) tu dis qu'il n'y a rien sur MOSI et MISO ?

    Petite question, quelle place a le Arduino + son shield dans me système ? En sniffeur sur le busCAN ? Ou alors ça cause en direct avec un appareil ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir

    je parlais du connecteur à 4 broches qui est numéroté comme composant N°6 sur la page wiki, de même le connecteur qui a les signaux du SPI doit être le numéro 5.
    Sinon ta mesure du signal SPI est trop lente, on n'y voit rien.

    Delias

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    Le connecteur 6 je pense que c'est juste un report du port serie pour les extensions groove. Je vais regarder mais je ne crois pas y voir qqchose. C'est la même chose sur celui d'à coté ils ont reporté l'I2C au format groove.

    Le SPI je le regarde sur le connecter ICSP qui est situé au milieu (8 sur le schéma).

    Voici le signal très zoomé. C'est tjs me même signal qui se repéte toutes les 20 microsec.

    Nom : spi.png
Affichages : 762
Taille : 16,1 Ko


    Pour l'instant l'arduino et le shield jouent le rôle de sniffer mais dès que j'aurais décodé le protocole complet l'arduino + shield auront pour rôle de remplacer un module de commande;

    Demain je vais faire des tests avec ma voiture pour vérifier que le shield marche bien.

  16. #16
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    L'horloge est sacrément pourrie !? Bande passante de l'oscillo peut être ?

    Citation Envoyé par boubil
    Pour l'instant l'arduino et le shield jouent le rôle de sniffer mais dès que j'aurais décodé le protocole complet l'arduino + shield auront pour rôle de remplacer un module de commande;
    Ok.


    Bon, sinon le SPI à l'air de vivre quand même et à ce rythme là :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        if( CAN_MSGAVAIL == CAN.checkReceive())            // check if data coming
        {
            CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf
     
            unsigned int canId = CAN.getCanId();
            ...
            ...
            ...

    Est ce qu'il y a une LED sur ton Arduino ? Si oui, tu peux faire ça :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        if( CAN_MSGAVAIL == CAN.checkReceive())            // check if data coming
        {
            -> ALLUMER LED ICI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
            CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf
     
            unsigned int canId = CAN.getCanId();
     
            -> ETEINDRE LED ICI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            ...
            ...
            ...

    Et regarder avec ton scope le niveau logique sur la LED tout en regardant le SPI comme ça :

    Nom : Capture du 2017-04-17 15-26-22.png
Affichages : 764
Taille : 7,8 Ko


    Edit :
    J'ai oublié de dire le principal...... si ça donne ça (l'image du dessus) alors ça fonctionne mais on est sur un problème de réglage, voir message de Delias juste en dessous.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  17. #17
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir

    Alors la transmission c'est 1010 0000 soit la cmd pour la lecture des bits de status, le retour se fait sur les 8 coup d'horloges qui suivent (le MOSI est arbitrairement à 0, mais cela n'a pas d'importance).
    Si le MISO reste à 0, c'est que les 8 bits de status sont à 0 -> donc aucune réception valide et aucune émission en cours.
    Jusque là, il n'y a rien d'anormale, si ce n'est que le MCP2515 n'a enregistré aucun message lu (vu qu'il enregistre que ceux correspondant aux critères de filtrage).

    Par contre le Wiki dit bien un peu plus loin.
    The following function is used to receive data on the ‘receive’ node:
    [...]
    In conditions that masks and filters have been set. This function can only get frames that meet the requirements of masks and filters.
    Il me semble pas que dans ton code tu ne fais pas appel aux fonctions init_Mask(...) et init_Filt(...) prévue pour cela.
    Cela rejoint mon premier commentaire...

    Delias

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    Bonjour Delias et Vicnent


    En fait mon code commence par checkReceive(void) qui regarde s'il ya quelque chose a lire. Cette fonction n'est pas dépendante des masques. D'ailleurs j'ai aussi testé le mode interruption.
    Je devrais avoir au moins le premier Serial.println si quelque chose arrivait.

    Le programme que j'ai utilisé est celui fourni par seeedStudio. De ce que j'ai lu partout ailleurs sur internet ca devrait marcher.

    Merci pour l'explication du SPI.
    Du coup c'est beaucoup plus clair. Je viens de trouver une discussion qui explique comment capturer la trame je vais essayer de faire ca.

    Mon oscillo n'est pas une bete de course c'est un pico 2204A, mais je le trouve néanmoins absolument génial pour son prix.

    La je vais aller faire les courses et ensuite je vais voir le canbus de la voiture. Si j'ai des pb a le lire c'est que c'est la carte qui a un pb.

    A+ et un grand merci pour votre super implication.

  19. #19
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonjour Boubil

    Citation Envoyé par boubil Voir le message
    En fait mon code commence par checkReceive(void) qui regarde s'il ya quelque chose a lire. Cette fonction n'est pas dépendante des masques.
    C'est faux, cette fonction est également dépendante des masques, c'est lié au fonctionnement interne du MCP2515. Si tu ne me crois pas, lis la doc de cette puce
    Il faut à minima mettre le ulData du Mask à 0 et le ext du Filt à 0 car tu as des Standard Frame.

    Pour l'oscillo, tu es effectivement à sa limite avec la mesure du SPI, vu comme le carré est filtré.

    Delias

  20. #20
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut à tous les deux,
    Fait le test avec la Led et si ça fait ce que j'ai mis en exemple (l'image) alors c'est que tu es entré dans le if( CAN_MSGAVAIL == CAN.checkReceive())

    Donc c'est que le programme à vu des données de disponibles (si j'en crois le nom implicite de cette méthode) après est ce que les données sont valables (problème de vitesses, problème de compatibilité, bruit etc...) c'est une autre histoire. Voir des problèmes de réglages.

    Perso, je ne remettrai pas trop vite en cause la carte parce que ça a l'air de fonctionner, peut être pas comme tu le souhaites par contre.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

Discussions similaires

  1. protocole interface série Ethernet
    Par Emcy dans le forum Développement
    Réponses: 3
    Dernier message: 15/09/2008, 16h01
  2. Réponses: 2
    Dernier message: 03/03/2008, 15h02
  3. Reverse engeneering protocole port série.
    Par tazio dans le forum Windows
    Réponses: 1
    Dernier message: 10/05/2007, 17h20
  4. [API] Communication série NON-bloquante : OVERLAPPED/Thread
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/11/2003, 13h43
  5. Ping sous protocole TCP (et non UDP)
    Par ovdz dans le forum Développement
    Réponses: 2
    Dernier message: 19/06/2003, 14h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo