Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI



  1. #1
    antoineleclercq150687

    Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI


    ------

    Bonjour,

    Je travaille actuellement sur uen maquette de train composée de deux motrices et une remorque. Le souci est que l'électronique embarqué est géré par 4 pic 18F4520 en réseau par liaison SPI.

    Pour faire le bilan :

    Maitre- esclave : parfait , les octets sont bien envoyés et enregistrés là où il faut.

    Esclave - maître : ... sans commentaire

    Côté maitre :

    esclave3 = 0;
    if(num_send_data == 6)
    TX_data = TABMESC3.DEFM.DEFAUTMoct;

    if(num_send_data == 7)
    TX_data = TABMESC3.DEFESC1.DEFAUTESCoct;

    if(num_send_data == 8)
    TX_data = TABMESC3.DEFESC2.DEFAUTESCoct;

    SSPBUF = TX_data;
    while(!SSPSTATbits.BF);


    if (rx.RX_DATAoct != TX_data)
    {
    rx.RX_DATAoct = SSPBUF;
    if (rx.RX_DATAbit.ID == 0x01)
    TABMESC3.DEFM.DEFAUTMoct = rx.RX_DATAoct;
    }
    esclave3 = 1;



    J'envoie 1 octet après l'autre, la fonction qui fait cet envoi est appelée après une interruption de timer toutes les 25 ms. A chaque passage une variable est incrémentée (num_send_data).

    Côté esclave:
    void receive_message()
    {
    extern TAB_M_ESC3 TABMESC3;

    TAB_M_ESC3 TABMESC3_prec;

    extern RX_DATA rx;

    rx.RX_DATAoct = SSPBUF;

    if (rx.RX_DATAbit.ID == 0x01)
    {
    if(TABMESC3_prec.DEFM.DEFAUTMo ct == rx.RX_DATAoct)
    {
    TABMESC3.DEFM.DEFAUTMoct = rx.RX_DATAoct;
    TABMESC3_prec.DEFM.DEFAUTMoct = rx.RX_DATAoct;
    }
    else
    {
    TABMESC3_prec.DEFM.DEFAUTMoct = rx.RX_DATAoct;
    }
    }
    if (rx.RX_DATAbit.ID == 0x02)
    {
    if(TABMESC3_prec.DEFESC1.DEFAU TESCoct == rx.RX_DATAoct)
    {
    TABMESC3.DEFESC1.DEFAUTESCoct = rx.RX_DATAoct;
    TABMESC3_prec.DEFESC1.DEFAUTES Coct = rx.RX_DATAoct;
    }
    else
    {
    TABMESC3_prec.DEFESC1.DEFAUTES Coct = rx.RX_DATAoct;
    }
    }
    if (rx.RX_DATAbit.ID == 0x03)
    {
    if(TABMESC3_prec.DEFESC2.DEFAU TESCoct == rx.RX_DATAoct)
    {
    TABMESC3.DEFESC2.DEFAUTESCoct = rx.RX_DATAoct;
    TABMESC3_prec.DEFESC2.DEFAUTES Coct = rx.RX_DATAoct;
    }
    else
    {
    TABMESC3_prec.DEFESC2.DEFAUTES Coct = rx.RX_DATAoct;
    }
    }

    }


    Pour ranger les octets là où il faut je teste les bits 7 et 6 de SSPBUF.

    Dans la table TABMESC3, il y a 3 octets, les bits 7 et 6 sont les identifiants, et 5 à 0 contiennent l'information.

    Mais du côté esclave je ne sais pas quand effectuer l'envoie pour que le maître enregistre les informations de l'esclave.

    J'espère que c'est assez clair.

    Merci d'avance pour votre aide !

    -----

  2. Publicité
  3. #2
    simon.

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    Salut,

    Essaie de reposter ton truc correctement indenté en utilisant la balise CODE, parce que là c'est illisible.

  4. #3
    antoineleclercq150687

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    Pour être simple et rapide,

    Comment se gère le protocole SPI côté esclave.

    Si j'ai bien compris côté maître, j'envoie une donnée et j'ai une interruption lorsque c'est terminé.

    Mais si je code :

    SSPBUF = TX_data;
    while(!SSPSTATbits.BF);
    SSPBUF = RX_data;

    L'interruption ne sert à rien ?

    Côté esclave, quand est ce que je dois écrire dans SSPBUF ? Et surtout, est ce qu'une écrire maître - esclave provoque une interruption chez l'esclave.

    J'ai lu et relu le datasheet et des forums sur le net. Je n'avance pas beaucoup !

  5. #4
    antoineleclercq150687

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    Il n'y a pas d'expert en protocole SPI ? :s

  6. A voir en vidéo sur Futura
  7. #5
    Jack
    Modérateur

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    Je connais assez bien ma spi mais pas tes pics.

    Ton pics gère-t-il les interruptions sur caractère émis? Si ce n'est pas le cas, il faut générer un IT sur caractère reçu et dans ce cas il faut obligatoirement refermer la boucle?

    Si tes pics sont tous sur la même spi, ils doivent être en cascade. Comment adresses-tu le bon esclave? En constituant une trame comportant une adresse?

    Beaucoup de questions, tu vois, avant d'avancer.

    A+

  8. #6
    antoineleclercq150687

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    bonjour,

    Pour la sélection d'esclave j'utilise le chip select.

    Pour l'instant je dois envoyer au maximum 24 bits pour chacun d'entre eux et dans les deux sens. J'ai défini des tables, un octet est composé d'un identifiant (bits 7 et 6) et de 6 bits contenant l'information.

    J'utilse ce principe pour mettre en place le protocole SPI. Par la suite je mettrais en place ce qui a été prévu en début de projet :
    ouverture
    octet 1
    octet 2
    (...)
    fermeture.

    Avec un octet d'ouverture différent pour chaque esclave. Mais il ne faut pas oublier que c'est une maquette de train, donc les PIC doivent être disponibles....


    Sinon pour le protocole SPI, j'ai réussi à émettre et à recevoir hier soir...

  9. Publicité
  10. #7
    Jack
    Modérateur

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    Pour la sélection d'esclave j'utilise le chip select.
    Ok

    Mais pour mes autres questions tu n'as pas encore répondu. Comment sont chainés les pics? Quel type d'interruption utilises-tu?

    A+

  11. #8
    antoineleclercq150687

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    Bonjour,

    J'ai avancé depuis le temps, j'ai réussi à établir un dialogue entre deux pics. Mais il me reste encore 2 esclaves à ajouter au réseau.

    Poru les interruptions j'utilise PIR1bits.SSPIF, je l'ai mise en priorité haute.

  12. #9
    Jack
    Modérateur

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    Essaie de répondre à TOUTES mes questions si tu veux que je continue à t'aider.

    Pour les interruptions, j'ai regardé la doc et c'est bien ce que je pensais: il n'y a pas de flag "buffer vide" lors d'une émission. Il faut donc bien reboucler et tester le flag "buffer plein".

  13. #10
    antoineleclercq150687

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    Bonjour,

    Merci pour ton aide.

    En effet tu as posté un message avec des questions, et je ne l'ai pas vu.
    Je dispose d'un pic maître et de 3 pic esclaves.

    Le pic maitre a 3 sorties, une par esclave, j'utilise donc le "Slave Select". Pour les autres questions j'aurais du mal à te répondre car je découvre le protocole mais pour microchip.

    Merci,

  14. #11
    Jack
    Modérateur

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    Ok pour les CS, mais pour la liaison série proprement dite il faut créer une chaine et la refermer sur le maitre en principe: la sortie du maitre sur l'entrée du 1er esclave, la sortie du 1er esclave sur l'entrée du 2ème, la sortie du 2ème sur l'entrée du 3ème et on referme la sortie du 3ème sur l'entrée du maitre.

    Les données sont donc circulaires et on peut éventuellement récupérer ce qu'on a envoyé.

    A+

  15. #12
    antoineleclercq150687

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    http://en.wikipedia.org/wiki/Serial_..._Interface_Bus

    Si tu regardes les schémas du bas c'est le 1er. J'ai bien compris ton principe mais cela implique que je reprends les cartes à 0! Ce qui est très problèmatique !

  16. Publicité
  17. #13
    Jack
    Modérateur

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    Puisque tu as un CS par circuit, le schéma du haut est effectivement valable. Quel est le problème qui te reste à résoudre finalement?

    A+

  18. #14
    antoineleclercq150687

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    en ferroviaire on parle de SIE (Système Informatique Embarqué)

    J'en suis à mon 3 ieme projet industriel, l'année denière j'utilisais un pic pour une rame de deux caisses, donc énormément de câblage. Pour éviter ça, j'ai voulu mettre en place un réseau embarqué. Comme ça le train a 1 pic ou processeur par caisse et donc moins de câbles.

    Donc j'ai un SIE maître composé de :
    - 1 pic maître (gestion du réseau, gestion de la comm avec une carte usb sur un pc avec un logiciel qui commande le train, pantographes, alimentation du train, capteur tension);
    - 1 pic maître redondant, qui gère des capteurs en double du précédent, il gère l'état du train (défauts, pannes), et l'affiche sur des afficheurs 7 segments. Ensuite des entrées / sorties ont été prévu pour un projet pour des élèves de deuxième année de mon école d'ingénieur , ils seront évalués dessus. Ce pic redondant est considéré comme esclave sur le réseau SPI.

    Ce SIE sera installé dans la remorque de la rame.

    Enfin 1 SIE par motrice (les deux extrémités de la rame), chacun des deux gèrent :
    -moteurs de traction,
    -ventilateurs,
    - feux,
    -capteur (température, lumière, objets, etc)

    La comm SPI entre le maître et le redondant est OK, j'ai repris le même code pour maître - esclave et ça ne marche pas. (J'ai bien des interruptions mais avec un buffer contenant tout et n'importe quoi)

    Je fais une pause sur le codage, un peu de recul m'aidera peut être.

    Merci pour ton attention et ton aide !

  19. #15
    Jack
    Modérateur

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    Tu as bien mis les bonnes phases (apparamment les bits CKP et CKE) entre maitre et esclaves car il y a 4 configurations possibles normalement?

    A+

  20. #16
    antoineleclercq150687

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    CKE = 0, CKP = 0 que ce soit du côté maître ou du côté esclave

  21. #17
    Jack
    Modérateur

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    Quand ça ne marche pas, il faut regarder le trames avec un oscillo. On a des fois des surprises.

    A+

  22. #18
    antoineleclercq150687

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    j'ai demandé à quelqu'un du personne lde l'école si je peux emprunter un oscillo. On verra les résultats, je te dirais quoi.

    Merci !

  23. Publicité
  24. #19
    antoineleclercq150687

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    EUh petite remarque, quartz de 20Mhz ... pas trop élevé pour ça ?

  25. #20
    antoineleclercq150687

    Re : Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI

    Un truc que je n'arrive pas à cerner, il y a SSPSTAT.BF il est à 0 quand la transmission est finie. C'est ça? Donc émission + réception. Et l'interruption PIR1.SSPIF c'est idem?

    Si je résume le déroulement des tâches : côté maître, toutes les 25ms :
    ......
    SSPBUF = TX_DATA;
    !while(!SSPTATbits.BF);
    RX_DATA = SSPBUF;
    ......

    Côté esclave :
    ......
    ....interruption SSPIF....
    RX_DATA = SSPBUF;
    SSPBUF = TX_DATA;
    ......

Discussions similaires

  1. PIC 18f4520
    Par cochy dans le forum Électronique
    Réponses: 1
    Dernier message: 18/03/2009, 14h57
  2. alimentation pour reseau ferroviaire modelisme
    Par lauduc13 dans le forum Électronique
    Réponses: 10
    Dernier message: 27/11/2008, 08h00
  3. Liaison Usb -> Spi avec un pic 18f4550
    Par chang-tout-puissant dans le forum Électronique
    Réponses: 3
    Dernier message: 28/08/2008, 21h12
  4. PIC 16F87X et liaison SPI
    Par chrisric dans le forum Électronique
    Réponses: 2
    Dernier message: 06/03/2008, 20h18
  5. maquette reseau ferroviaire
    Par CHRISTOPHEB34 dans le forum Électronique
    Réponses: 1
    Dernier message: 18/12/2007, 00h43
Découvrez nos comparatifs produits sur l'informatique et les technologies.