[PIC18]-Mode SPI
Répondre à la discussion
Affichage des résultats 1 à 21 sur 21

[PIC18]-Mode SPI



  1. #1
    invite3c35244f

    [PIC18]-Mode SPI


    ------

    Bonjour,

    voila, j'ai réaliser une communication entre 2 PICs, 1 maitre et 1 esclave. Et je souhaite envoyer une donnée de 16bits. Le principe est simple:
    Pour cela je créer 2 variables de 8 bits que j'envoie, et je les envoi successivement, mais je me pose une question:
    -Comment savoir "coté maitre" que l'esclave a bien reçu la donnée, pour que je puisse lui renvoyer le 2ème mot de 8 bits?

    Utilisation de /SS,..??
    J'ai lu la partie sur le mode SPI du cours de Bigonoff...super complet, bien expliqué, par contre je n'ai pas trouvé de réponse à ma question...

    Merci d'avance

    -----

  2. #2
    invite3c35244f

    Re : [PIC18]-Mode SPI

    Bonjour..

    personne n'a déja utilisé de bus SPI avec les PIC.. je ne vous crois pas...

  3. #3
    invite049d0684

    Re : [PIC18]-Mode SPI

    Salut
    tu utilise quoi comme compilo

    Normalement une fois que le maitre ferme le communication (/SS)
    Il est supposé que l'esclave à reçu les données.

  4. #4
    invitee05a3fcc

    Re : [PIC18]-Mode SPI

    Citation Envoyé par jorg1n Voir le message
    personne n'a déja utilisé de bus SPI avec les PIC.. je ne vous crois pas...
    Certainement, mais pour échanger avec des circuits intégrés et le PIC est alors le chef. Toi, tu veux utiliser un PIC en récepteur SPI .. et je crois que c'est un peu différent.
    Moi, je t'avais conseillé l'UART en liaison asynchrone ........

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

    Re : [PIC18]-Mode SPI

    Bonjour,

    en ce qui concerne le compilateur, j'utilise le C18 de Microchip...

    Normalement une fois que le maitre ferme le communication (/SS)
    Il est supposé que l'esclave à reçu les données.
    Comment peux tu le voir concrêtement sur le maitre? par le biais d'un bit?

    Toi, tu veux utiliser un PIC en récepteur SPI .. et je crois que c'est un peu différent.
    Oui je souhaite utiliser un PIC en récepteur (Slave) mais j'ai aussi un PIC en MAITRE, et moi ce que je veux savoir , c'est comment, coté maitre je peux savoir qui mon esclave (autre PIC) a bien reçu mon "message"?

    Merci encore

  7. #6
    Jack
    Modérateur

    Re : [PIC18]-Mode SPI

    et moi ce que je veux savoir , c'est comment, coté maitre je peux savoir qui mon esclave (autre PIC) a bien reçu mon "message"?
    D'un point de vue matériel, la spi est rebouclée, donc si tu reçois les bits que tu as envoyés, c'est que la liaison n'est pas coupée.

    Logiciellement, tu peux t'assurer que la donnée a été reçue grâce à un protocole qui implique que l'esclave doit envoyer un accusé de réception.
    Il suffit que le maitre effectue une lecture etvérifie que la donnée reçue (un checksium par exemple) soit correcte.

    A+

  8. #7
    invite3c35244f

    Re : [PIC18]-Mode SPI

    Bonjour,

    merci Jack pour ta réponse..
    donc si je comprend bien, lorsque ton maitre envoi une donnée, et que l'esclave la reçoit, l'esclave lui renvoie ensuite la même donnée?
    Donc coté maitre, je lui dit d'écrire et ensuite de lire, mais je ne comprend pas trop l'histoire du checksum..

    Merci encore

  9. #8
    invite3c35244f

    Re : [PIC18]-Mode SPI

    Re bonjour...

    ma question précédente tiens toujours ...
    Mais voila, je pense qu'il n'y a pas que moi qui utilise le bus SPI... et je voudrais savoir: comment peut on bien mettre en oeuvre une liaison SPI , en ce qui concerne l'envoi, la confirmation d'envoi (accusé de réception) comment sais t'on que l'envoi a été correct?

    Je pose cette question là carte, j'arrive à mettre en oeuvre une simple liaison SPI entre 2 PICs, mais voila il s'agit d'une maquette, et je voudrais bien savoir comment concevoir une liaison SPI "robuste"...

    Merci encore pour votre aide.

  10. #9
    invite049d0684

    Re : [PIC18]-Mode SPI

    Bonjour

    Regarde le code source de ce AN
    AN966

    J'espère que ça résoudras ton problème

    Salut

  11. #10
    Jack
    Modérateur

    Re : [PIC18]-Mode SPI

    Donc coté maitre, je lui dit d'écrire et ensuite de lire, mais je ne comprend pas trop l'histoire du checksum..
    Tu envoies une trame de données terminée par une somme de contrôle. Cette somme peut être une simple somme des données envoyées modulo 256 (pour tenir sur un octet).

    Selon le protocole, le pic récepteur effectue le même calcul. Deux possibilités:
    il compare son calcul avec celui envoyé et renvoie un code, tel que ACK ou NAK selon la réussite ou non (c'est le principe du protocole xmodem)
    il renvoie la somme et c'est l'émetteur qui compare.

    A+

  12. #11
    invite3c35244f

    Re : [PIC18]-Mode SPI

    Merci Jack pour l'info..
    Auriez vous une idée justement , où est ce que je pourrai trouver une documentation "complète"sur le protocole SPI qui pourrait expliqué le principe de "confirmation de réception".

    Je vous remercie

  13. #12
    Jack
    Modérateur

    Re : [PIC18]-Mode SPI

    Il n'y a pas grand chose à dire sur la spi qui est un simple registre à décalage amélioré. N'importe quelle doc de µcontrôleur donne tout ce qu'il y a à savoir.
    Le protocole, c'est toi qui le définis car c'est une couche logicielle.

  14. #13
    invite3c35244f

    Re : [PIC18]-Mode SPI

    Je te remercie.
    Je pensais qu'il existait peut être une documentation décrivant le principe de communication.

    Je vais donc faire comme tu me la conseillé:
    - Envoi de la donnée Maitre->Esclave
    - Renvoi du de la même donnée Esclave -> Maitre
    - Le Maitre vérifie le contenu et en fonction de la comparaison, envoi d'un ACK ou NAK Maitre -> Esclave.

    Merci de me confirmer le principe.
    Bonne après midi à tous

  15. #14
    Jack
    Modérateur

    Re : [PIC18]-Mode SPI

    Ce n'est pas tout à fait ce que j'avais proposé, mais pourquoi pas?

    A+

  16. #15
    invite3c35244f

    Re : [PIC18]-Mode SPI

    Je rencontre un petit soucis...
    Mon envoi Maitre->Esclave fonctionne très bien, mais lorsque je veux renvoyer ma valeur Esclave -> Maitre (j'utilise la même fonction "WriteSPI" que la liaison Maitre->Esclave), mon programme reste en une boucle et attend que le flag PIR1bits.SSPIF (flag d'interruption du module MSSP) passe à 1.

    Auriez vous une idée? La méthode est peut etre différente pour envoyer une donnée de l'esclave vers le maitre?

    Merci d'avance

  17. #16
    Jack
    Modérateur

    Re : [PIC18]-Mode SPI

    As-tu bien regardé la doc au sujet de la patte /SS? C'est indispensable en mode slave.

    Pour que l'esclave envoie sa donnée, il faut que celle-ci soit dans son registre de transmission et que le maitre fasse une écriture bidon (dummy) afin de générer l'horloge car c'est toujours le maitre qui contrôle l'horloge.

    A+

  18. #17
    invite3c35244f

    Re : [PIC18]-Mode SPI

    Merci Jack pour toutes ces infos, mais je suis un peu perdu...
    - Tout d'abord, peux tu me dire en quoi consiste concrètement le checksum:
    exemple, je réalise des envois de 8 bits sur le bus SPI, imaginons que ma variable est égale à 0xC8, quel serait alors le checksum de celle ci??

    - Ensuite, je voudrais avoir un petit conseil, je souhaite envoyer au final un mot de 16 bits entre mon PIC maitre et mon PIC esclave. J'ai donc opté pour un envoi successif de 2 octets. Quel est le meilleur moyen pour avoir une vérification de la donnée envoyée(checksum je suppose)? et comment savoir quand es ce que je peux envoyer mon second octet pour compléter mon envoi de 16bits?

    Je te remercie beaucoup pour ton aide

  19. #18
    Jack
    Modérateur

    Re : [PIC18]-Mode SPI

    - Tout d'abord, peux tu me dire en quoi consiste concrètement le checksum:
    exemple, je réalise des envois de 8 bits sur le bus SPI, imaginons que ma variable est égale à 0xC8, quel serait alors le checksum de celle ci??
    Le checksum ou le CRC n'est intéressant que pour l'envoi d'un paquet important de données.

    Avec un transfert de un ou deux octets, le plus simple est que le récepteur renvoie ces 2 octets pour que l'émetteur les compare avec ceux qu'il avait envoyés.

    - Ensuite, je voudrais avoir un petit conseil, je souhaite envoyer au final un mot de 16 bits entre mon PIC maitre et mon PIC esclave. J'ai donc opté pour un envoi successif de 2 octets. Quel est le meilleur moyen pour avoir une vérification de la donnée envoyée(checksum je suppose)? et comment savoir quand es ce que je peux envoyer mon second octet pour compléter mon envoi de 16bits?
    Envoie les 2 octets, puis arrange toi pour que le récepteur les retourne à l'émetteur pour comparaison.

    A+

  20. #19
    invite3c35244f

    Re : [PIC18]-Mode SPI

    Merci Jack.

    Par contre, comment je peux savoir que mon 1er envoi (8bits) a été traité par mon esclave et que je peux envoyer mon 2nd envoi (8bits)?

    Et en ce qui concerne le dummy, comment le maitre peut il savoir que l'esclave veut lui envoyer une donnée et donc lui demander de générer l'horologe?

    Je pense qu'après avoir répondu à ces 2 questions, je serai fin près à mettre en oeuvre ma petite liaison...

    Je te remercie pour ta disponibilité Jack

  21. #20
    Jack
    Modérateur

    Re : [PIC18]-Mode SPI

    Par contre, comment je peux savoir que mon 1er envoi (8bits) a été traité par mon esclave et que je peux envoyer mon 2nd envoi (8bits)?
    Te casse pas, envoie les 2 d'un coup et vérifie après.

    Et en ce qui concerne le dummy, comment le maitre peut il savoir que l'esclave veut lui envoyer une donnée et donc lui demander de générer l'horologe?
    C'est toi qui définit le protocole. Allez, on va en définir un avec checksum.

    Du point de vue du maitre: le programme doit envoyer par exemple n caractères. Pour cela il envoie le nombre de caractères qu'il veut envoyer, puis les données, puis effectuer 1 écriture bidon pour que l'exclave lui renvoie une donnée. Le caractère reçu doit être le checksum renvoyé par l'esclave. Le programme compare le checksum reçu à celui qu'il a calculé (somme de toutes les données modulo 16)

    Du point de vue de l'esclave: le programme reçoit un premier octet qui lui indique le nombre n de données à recevoir. Il lit ensuite les caractères au fur et à mesure de leur arrivée et au bout des n données, il calcule le checksum et le dépose dans le registre de transmission. Ce checksum sera automatiquement envoyé lorsque le maitre transmet le caractère bidon.

    A+

  22. #21
    invite3c35244f

    Re : [PIC18]-Mode SPI

    Un grand merci a toi Jack..
    Je vais mettre en oeuvre tout ça...et je te tiens au courant
    Encore Merci , Bonne soirée

Discussions similaires

  1. Carte PIC18 WIFI
    Par invitee0bbe70d dans le forum Électronique
    Réponses: 1
    Dernier message: 23/12/2008, 06h23
  2. [AVRStudio4 + Atmega128 + SPI] Probleme sur le port SPI
    Par inviteff7a2099 dans le forum Électronique
    Réponses: 1
    Dernier message: 03/12/2008, 04h05
  3. horloge et interruption pic18
    Par inviteb5c0d7bb dans le forum Électronique
    Réponses: 4
    Dernier message: 20/10/2008, 15h27
  4. Dérive PIC18
    Par invitee4b44406 dans le forum Électronique
    Réponses: 18
    Dernier message: 12/09/2008, 16h31
  5. programmation PIC18
    Par invite69ee2a36 dans le forum Électronique
    Réponses: 1
    Dernier message: 22/03/2007, 17h39
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...