[Programmation] SPI entre deux pics 18f2550
Répondre à la discussion
Affichage des résultats 1 à 24 sur 24

SPI entre deux pics 18f2550



  1. #1
    tagnit

    SPI entre deux pics 18f2550


    ------

    Bonsoir tout le monde !
    je suis entrain de travailler sur une liaison spi entre 2 pics 18f2550
    Mon code du master marche bien puisque j'arrive à visualiser sur l'oscillo les données envoyées!
    mais mon slave ne fais pas bien la réception ! je ne sais pas quoi faire !!!
    sachant que j'utilise XC8 comme compilateur et MPLBAX
    si vous pouvez m'aider s'il vous plait je suis perdue !

    -----

  2. #2
    gcortex

    Re : SPI entre deux pics 18f2550

    Bonjour et bienvenue sur Futura,

    Tu as le même problème que j'ai eu :
    http://forums.futura-sciences.com/el...i-esclave.html

    Il semble que le module SPI ne fonctionne pas bien en esclave.
    Dernière modification par gcortex ; 17/02/2017 à 10h17.

  3. #3
    satinas

    Re : SPI entre deux pics 18f2550

    Bonjour,
    J'ai fait un test avec 2 18F4685, l'un en master, l'autre en slave, et ça marche bien.
    Si SS n'est pas mis à 0 par le master, le slave reste en attente dans sa boucle de test du bit BF.
    La config est très simple, il y a juste à règler la vitesse d'horloge sur le master, et le mode spi.
    Ca dépend peut-être des modèles de pic.

  4. #4
    tagnit

    Re : SPI entre deux pics 18f2550

    Merci pour votre réponse pourriez vous me passer votre code pour le slave et le master pour comparer au mien comme ça je saurai si j'ai fait une erreur svp

  5. A voir en vidéo sur Futura
  6. #5
    satinas

    Re : SPI entre deux pics 18f2550

    Donne ton code spi et ton schéma, c'est ton cas qu'il faut examiner. Mon code ne t'aidera pas plus que ceux qu'on trouve déjà sur Internet.

  7. #6
    tagnit

    Re : SPI entre deux pics 18f2550

    Voila un dossier qui contient mes deux codes !
    bon la réception se fait bien j'arrive à avoir une led qui clignote par exemple en fonction des données reçues mais je n'arrive pas a renvoyer du slave vers le master si vous pouvez m'aider ?? svp
    Fichiers attachés Fichiers attachés

  8. #7
    satinas

    Re : SPI entre deux pics 18f2550

    La pièce jointe n'est pas encore accessible. 200k de zip, ça fait beaucoup, que doit faire exactement ton programme ?

  9. #8
    tagnit

    Re : SPI entre deux pics 18f2550

    au fait y'a deux codes dans le dossier celui du master et celui du slave !
    donc mon master envoie des octets qui sont réceptionné par mon slave voila
    mais je n'arrive pas a renvoye du slave vers le master c'est ça mon soucis

  10. #9
    satinas

    Re : SPI entre deux pics 18f2550

    SSPCON1bits.SSPM = 0b0101;
    Ce mode dissocie la pin SS de la liaison spi, on peut alors l'utiliser comme i/o.
    Dans ce mode, le slave réagit directement à SCK. Ton CS ne sert à rien.

    SSPCON1bits.SSPM = 0b0100;
    Avec ce mode, le SS est actif, et le spi du pic slave ne bronche pas tant qu'il voit SS haut.
    En plus, si tu met CKE = 1, ce mode est obligatoire, voir datasheet :
    "If the SPI is used in Slave mode with CKE set, then the SS pin control must be enabled"

    Le spi c'est un échange d'octets synchro entre le master et le slave. Le master envoie un octet quand il le veut en écrivant dans le buffer transmit, le slave de son côté envoie un octet qu'il avait placé au préalable dans son buffer transmit.
    Commence par vérifier que le master et le slave reçoivent bien les octets échangés, par exemple en envoyant toujours le même octet. Ensuite tu pourras passer à un dialogue :
    - le maître envoie un premier byte "commande", le slave lui envoie 1 dummy byte.
    - le maître envoie n dummy bytes, le slave lui envoie n bytes "data".

    Le maître remplit SSPBUF, attend que BF passe à 1, lit SSPBUF
    Le slave attend que BF passe à 1, lit SSPBUF, remplit SSPBUF avec prochaine data à envoyer (elle sera envoyée dès le prochain clock avec SS low)

  11. #10
    tagnit

    Re : SPI entre deux pics 18f2550

    si tu peux me passer les lignes de codes à rajouter au niveau du master et du slave pour faire un envoi du slave vers le master ça m'aiderait bcp puisque je suis bloqué !!
    mais par contre quand j envoi du master vers le slave je recois bien !
    une autre question est ce que t'aurai une idée de comment integrer un code USB avec le code spi .
    merci enormement

  12. #11
    satinas

    Re : SPI entre deux pics 18f2550

    Je ne sais toujours pas ce que doit faire ton programme.
    Si tu ne comprends pas quelque chose, dis-le. La fin de mon post précédent, c'est du code.
    J'espère que tu as compris que lorsque le master a généré 8 clocks, il a transmis et reçu un octet.
    Dernière modification par satinas ; 17/02/2017 à 22h44.

  13. #12
    tagnit

    Re : SPI entre deux pics 18f2550

    j'ai un master que je dois utiliser avec 8 slaves !
    pour commencer j'ai établi ce code pour un maitre et esclave dans le but d'envoyer des octets du maitre vers l'esclave et de renvoyer des octets du slave vers le maitre !
    pour le moment le code que je vous ai passé il ne fait qu'envoyer des données du maitre vers l'esclave et pas de l'esclave vers le maitre
    donc j'aimerai bien si possible vous me corrigiez mon code pour avoir un renvoi u slave vers le maitre et des conseils pour avoir plusieurs slaves voila !
    merci

  14. #13
    satinas

    Re : SPI entre deux pics 18f2550

    Ton code est bon, il faut tenir compte de ce que j'ai écrit, c'est tout. Si tu zappes mes posts, je vais me désintégrer.

  15. #14
    tagnit

    Re : SPI entre deux pics 18f2550

    mais en utilisant ce code je n'ai pas derenvoi de la part du slave :/ comment passer au mode
    - le maître envoie un premier byte "commande", le slave lui envoie 1 dummy byte.
    s'il te plait !

  16. #15
    satinas

    Re : SPI entre deux pics 18f2550

    Dis moi ce que doit faire ce programme !
    Il a bien un énoncé cet exercice ?
    Dernière modification par satinas ; 17/02/2017 à 22h51.

  17. #16
    tagnit

    Re : SPI entre deux pics 18f2550

    c'est un robot mobiles à quatres roues donc j'ai des capteurs et pics pour chaque roue qui seront les slaves ! mon maitres va envoyer des commandes aux slaves qui vont renvoyer les donneés des capteurs !

  18. #17
    satinas

    Re : SPI entre deux pics 18f2550

    Tu as rectifié le mode SSPM ?

  19. #18
    tagnit

    Re : SPI entre deux pics 18f2550

    ce n'est pas un exercice c'est un projet !
    j'ai juste besoin de la configuration de la fonction write du coté slave et read du coté maitre !

  20. #19
    tagnit

    Re : SPI entre deux pics 18f2550

    puisque je n'arrive pas à envoyer du slave vers le maitre

  21. #20
    satinas

    Re : SPI entre deux pics 18f2550

    Tu as rectifié le mode SSPM ?
    C'est dur d'avoir des réponses.

    Ta fonction SPIWrite() du maître est bonne.
    Pour le slave, la fonction SPIWrite() dépend du contenu du dialogue, taille des commandes, nature et taille des réponses du slave, et ça j''en sais rien !
    Ce que doit faire la fonction SPIWrite() du slave, je l'ai tout de même résumé plus haut.

  22. #21
    tagnit

    Re : SPI entre deux pics 18f2550

    oui j'ai réctifié le SSPM tjr rien ! mais je ne sais pas quand je fais un envois au niveau du slave est ce que je le fais juste après une lecture ou bien je dois dab mettre le cs a 1 ou bien je fais toutes mes lectures puis ecritures après !
    je ne sais pas comment organiser mes ecritures et lectures en meme temps voila !

  23. #22
    satinas

    Re : SPI entre deux pics 18f2550

    Un slave ne fait pas d'envoi, il met une data dans le buffer, et il ATTEND que le maître se manifeste et envoie un octet et sa data part automatiquement. C'est bien le problème du slave, il a jamais la main, il doit s'organiser pour qu'il y ait toujours la bonne data au bon moment dans le buffer transmit.
    Bonne nuit

  24. #23
    satinas

    Re : SPI entre deux pics 18f2550

    Salut
    Il faut y aller par étapes :
    D'abord vérifier que si l'on ne baisse pas cs, le slave reste dans sa boucle bf.
    Ensuite s'échanger un même octet périodiquement et vérifier que la réception est correcte des 2 côtés.
    Ensuite passer au mode commande/réponse.

    Le maître baisse cs, envoie 0xff, attend, envoie 0x00, lève cs.
    Après réception de la commande 0xff, le slave place dans son buffer transmit, la réponse à envoyer my_data1.
    Elle sera transmise en même temps que la réception du "dummy" byte 0x00 envoyé par le maître.
    Dans un premier temps, baisse puis lève cs à chaque octet envoyé, mais je pense que tu peux le garder baissé durant la commande et sa réponse.

    Le code ci-dessous est le code du slave en mode polling, mais il vaut mieux passer en mode interruptioon.
    La routine d'interruption du slave s'exécute en fin d'échange spi, elle fait pareil, lire SSPBUF puis le remplir avec la data à envoyer durant le prochain échange spi déclenché par le maître.
    Le pic reste disponible pour d'autres tâches.

    Code:
    // mode polling slave
    SSPBUF = 0x00;  // premier byte envoyé (dummy)
    while (1) {
      while (! bf) !
      byte rcv = SSPBUF;
      byte next_snd;
      switch (rcv) {
        case 0xff: next_snd = my_data1; break;
        case 0x02: next_snd = my_data2; break;
        default:   next_snd = 0x00;
      }
      SSPBUF = next_snd;
    }
    Pour l'usb les exemples de 18F2550/18F4550 au autres pullulent sur le net ...
    Dernière modification par satinas ; 18/02/2017 à 07h22.

  25. #24
    tagnit

    Re : SPI entre deux pics 18f2550

    Merci pour ta réponse je vais essayer ça et je te tiens au courant si cela marche bien !

Discussions similaires

  1. Communication entre deux Pics 18F4520 Via UART
    Par elifaham dans le forum Électronique
    Réponses: 1
    Dernier message: 28/05/2014, 13h36
  2. Transaction I2C entre deux pics 18f4550 (maître-esclave)
    Par lynal1 dans le forum Électronique
    Réponses: 9
    Dernier message: 12/04/2011, 14h17
  3. cherche code pour communication SPI entre deux PICs...
    Par invite8f8ffe44 dans le forum Électronique
    Réponses: 1
    Dernier message: 24/04/2008, 19h12
  4. communication i2c entre deux pics
    Par invite45c27900 dans le forum Électronique
    Réponses: 2
    Dernier message: 02/11/2007, 22h56
  5. deux PICs , inter-connection ???
    Par bimo dans le forum Électronique
    Réponses: 9
    Dernier message: 17/06/2006, 00h32
Découvrez nos comparatifs produits sur l'informatique et les technologies.