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

pic 16f88 et SPI



  1. #1
    SkySaxon

    Question pic 16f88 et SPI

    Bonjour a tous,

    J'utilise le 16f88 pour une petite interface SPI, mais un probleme se pose que je ne parviens pas a resoudre. Le bit CKE (SPI Clock Edge), qu'il soit a 1 ou a 0, ca ne change absolument rien au diagram. Je veux que la donnee a transmettre soit disponible sur le front montant de l'horloge, et l'etat IDLE de la clock doit etre bas. J'ai donc CKP = 0 et CKE = 1. Mais la donnee change d'etat exactement en meme temps que le front montant de la clock, et ce quelque soit l'etat de CKE...

    Franchement ca fait deux jours que je suis dessus a lire et relire le datasheet, mais pas moyen... Si l'un d'entre vous a une idee...

    -----


  2. Publicité
  3. #2
    gcortex

    Re : pic 16f88 et SPI


  4. #3
    SkySaxon

    Re : pic 16f88 et SPI

    OK merci de la reponse, finalement j'ai trouve tout seul. Je passe l'info pour qui ca interesserait:
    Erreur de debutant:
    Le registre SSPSTAT est en BANK 1 et le registre SSPCON est en BANK 0. Comme ils sont expliques a la suite dans le datasheet, j'ai pas fait gaffe a ca, mais il faut bien se positionner...
    OUAIS!!! Youpi!!

  5. #4
    pont2

    Re : pic 16f88 et SPI

    Bonjour,

    Peux-tu me passer ta ligne de configuration sur PIC16F88? J'ai un pb avec la mienne et je ne vois pas ce que c'est.
    Merci

  6. #5
    pont2

    Re : pic 16f88 et SPI

    Bonjour,

    Et bien merci pour la non-réponse sur la ligne de configuration du PIC16F88, heureusement qu'un autre copain sur un autre forum m'a donné la réponse.
    pont

  7. A voir en vidéo sur Futura
  8. #6
    Jack

    Re : pic 16f88 et SPI

    Son dernier message datant de plus de 2 ans, ça ne m'étonne pas trop qu'il n'ait pas répondu

  9. Publicité
  10. #7
    pont2

    Re : pic 16f88 et SPI

    Citation Envoyé par Jack Voir le message
    Son dernier message datant de plus de 2 ans, ça ne m'étonne pas trop qu'il n'ait pas répondu
    Merci Jack de votre sollicitude, mais quel manque de constance de ce correspondant, j'espère bien que dans deux ans je serai encore là, (si un modérateur ne m'a pas jeté?) Et justement, je voulais vous demander quelque chose, mais je ne rappelle plus quoi. Et je vous suis toujours reconnaissant de m'avoir gentiment accueilli sur ce forum. Ah, je crois que c'est l'histoire des 2 minutes pendant lesquelles on peut corriger son texte lesquelles sont souvent mangées ou écourtées par les difficultés de transmission des serveurs des fournisseurs d'accès, serait-il possible que vous portiez ce temps à 30minutes, (sur certains forums il y a un temps d'une heure, sauf réponse intermédiaire).?
    Merci
    pont

  11. #8
    MacArell

    Re : pic 16f88 et SPI

    Bonjour, pour info, peut-on m'expliquer le positionnement par rapport aux BANK:
    Le registre SSPSTAT est en BANK 1 et le registre SSPCON est en BANK 0. Comme ils sont expliques a la suite dans le datasheet, j'ai pas fait gaffe a ca, mais il faut bien se positionner...
    pour ma part j'essaye depuis une semaine de faire marcher ma liaison SPI entre mon PIC 18F24K20 (maitre donc) et mon accéléromètre MMA7455

    PIC ---> MMA7455L
    SCL (14) --> SCL (14)
    SDO (16) --> SDO (12)
    SDA (15) --> SDA (13)
    RB3 (24) --> CS (7)

    Voici mon code pour l'init de la liaison:
    Code:
    void initialise_SPI()
    {
       SSPEN = 0;            //Enable bit must be cleared to configure SPI
       
       TRISC = TRISC | 0b00010000;   //Setup the TRIS register
       
       CKP = 0;            //IDLE state for clock is a low level
       CKE = 1;            //Output data changes on clock transition from active to idle
       SMP = 0;            //Input data sampled at the middle of data output time
       
       SSPCON1 = SSPCON1 | 0b00000010;   //Speed: Fosc/64
       
       SSPEN = 1;            //Enable the serial port 
    }
    et le code pour la lecture (à une adresse donnée) et l'écriture d'un bit à une adresse donnée:
    Code:
    //SPI write command function
    void spi_w(unsigned char reg, unsigned char data){
      unsigned char x;
      CS=lo;
      SSPBUF=(((reg &0x3F)<<1)|0x80); 
      while (!SSPIF);  //wait for transmission complete
      x=SSPBUF;  //dummy read
      SSPBUF=data;
      while (!SSPIF);  //wait for transmission complete
      x=SSPBUF;
      CS=hi;
    }
    
    //SPI read function
    unsigned char spi_r(unsigned char reg){
      CS=lo;
      SSPBUF = 0x00;                  // initiate bus cycle
      while ( !BF );      // wait until cycle complete
      CS=hi;
      return ( SSPBUF );              // return with byte read 
    }
    Le fait est que je n'arrive à observer à l'oscillo aucune activité sur les ligne SDO et SDA, l'horloge SCL fonctionne...

  12. #9
    simon.

    Re : pic 16f88 et SPI

    Citation Envoyé par pont2 Voir le message
    Merci Jack de votre sollicitude, mais quel manque de constance de ce correspondant, j'espère bien que dans deux ans je serai encore là, (si un modérateur ne m'a pas jeté?)
    Ça va pas non ?
    Ton comportement est intolérable pour plusieurs aspects:
    - On ne reproche pas à quiconque une non réponse. Si tu veux absolument une réponse, tu paies un consultant !
    - "un copain m'a filé la réponse par ailleurs..." ça te ferait mal de la poster ici pour la postérité, la réponse, maintenant que tu l'as ?
    - Déterrer un sujet vieux de 2 ans, c'est mal. Quand on le fait pour de bonnes raisons, on s'en excuse. Ça évite aux gens de perdre leur temps.

  13. #10
    MacArell

    Re : pic 16f88 et SPI

    Concernant "mon" dernier post j'ai fait une erreur dans le code de lecture d'adresse sur le SPI:

    Code:
    //SPI read function
    unsigned char spi_r(unsigned char reg){
      CS=lo;
      SSPBUF = 0x00;                  // initiate bus cycle
      while ( !BF );      // wait until cycle complete
      CS=hi;
      return ( SSPBUF );              // return with byte read 
    }
    le bon code c'est celui là:

    Code:
    //SPI read function (send read register commands to the accelerometer and output resultant read byte)
    unsigned char spi_r(unsigned char reg)
    {
    	unsigned char temp;
    	CS = lo; // pull the CS low to start transmission
    	SSPBUF=((reg&0x3F)<<1); // // send register affress to the accelerometer with read command
    	while(!SSPIF);// wait for transmit to finish
    	temp=SSPBUF; // reading SSPBUF clears the BF bit
    	while(!SSPIF); // wait for receive to finish
    	temp=SSPBUF; // reading SSPBUF clears the BF bit
    	CS = hi; // pull the CS high to stop transmission
    	return temp;
    
    }

  14. #11
    Jack

    Re : pic 16f88 et SPI

    Le fait est que je n'arrive à observer à l'oscillo aucune activité sur les ligne SDO et SDA, l'horloge SCL fonctionne...
    SCL et SDA concernent l'I2C, pas la SPI.

    A+

  15. #12
    MacArell

    Re : pic 16f88 et SPI

    Merci, pour la réponse je me suis mélanger dans les termes pour SCL il faut comprendre SCK et pour SDA > SDI

  16. Publicité
  17. #13
    Jack

    Re : pic 16f88 et SPI

    Ok. Et donc aucune donnée ne semble circuler alors que SCK fonctionne. SI rien ne fonctionnait, j'aurais pensé que la SPI n'était pas validée, mais là...

    Bon, je ne connais pas trop le hard de ton pic non plus.

    Tu est sur d'être sur la bonne patte et que tes soudures sont bonnes?

    A+

  18. #14
    DavidDB

    Re : pic 16f88 et SPI

    Citation Envoyé par MacArell Voir le message
    PIC ---> MMA7455L
    SCL (14) --> SCL (14)
    SDO (16) --> SDO (12)
    SDA (15) --> SDA (13)
    RB3 (24) --> CS (7)
    Salut,

    Erreur dans tes connexions :

    SCL --> SCL
    SDO --> SDI
    SDI <-- SDO
    RB3 --> CS

    David.

  19. #15
    MacArell

    Re : pic 16f88 et SPI

    Mes soudures et mes pattes semblent bonnes en fait j'ai un Kit déjà cablé
    par contre comme dit David est-ce qu'il faut câbler dans ce sens?
    SCK --> SCK
    SDO --> SDI
    SDI <-- SDO
    RB3 --> CS

    En fait avec mon nouveau code sur la fonction Read j'ai quelque chose sur SDO et SDI:
    Sur SDI j'ai ca autour de Zero:
    et sur SDO (niveau logique respectés):
    En enlevant le Kit j'ai les mêmes signaux sauf sur SDO où je n'ai plus le signal au tiers à la fin...
    Dernière modification par MacArell ; 08/07/2009 à 14h12.

  20. #16
    richard 31

    Re : pic 16f88 et SPI

    bonjour,
    Merci Jack de votre sollicitude, mais quel manque de constance de ce correspondant,
    j'espère bien que dans deux ans je serai encore là,
    décidément vous ne pouvez vous empêcher d'émettre des critiques hors propos,
    voilà a présent que vous traitez un membre d'un manque de constance parce qu'il ne répond pas a votre demande 2 ans après avoir déposé "sa solution"
    il faut donc qu'il soit a votre botte???
    (si un modérateur ne m'a pas jeté?)
    je puis en faire la demande si cela peut vous faire plaisir,
    ce n'est pas un souci
    juste a demander,
    personnellement je ne manque pas de constance
    je vous colle aux bottes au détriment d'autres qui me sollicitent a bon escient,
    ne pas trop en user toutefois
    richard 31
    cordialement
    richard 31

    la nature nous a doté du meilleur outil "LE CERVEAU" (+ le net)

  21. #17
    MacArell

    Re : pic 16f88 et SPI

    @David: J'ai déjà essayer dans ce sens car la notice est assez flou sur le Kit elle me dit SDO->SDO;SDI->SDI et sur le datasheet de accéléromètre SDO->SDI; SDI<-SDO ... Mais la premier solution me parait la plus logique...

  22. #18
    DavidDB

    Re : pic 16f88 et SPI

    Il faut :

    Data out(SDO) vers Data in(SDI) sur les deux composants.

    Il est logique que deux "data out" ensemble rien ne fonctionne vu que la data n'arrive nulle-part étant que SDO est une sortie et non une entrée.

    David.

  23. Publicité
  24. #19
    MacArell

    Re : pic 16f88 et SPI

    Réf KIT:


    Réf datasheet accéléromètre :

  25. #20
    DavidDB

    Re : pic 16f88 et SPI

    Regarde les flèches sur les documents, c'est clair : SD0 --> SDI et SDI<-- SDO
    L'erreur est d'appeler SDO sur le µC alors que c'est l'entrée SDI...

    David.

  26. #21
    MacArell

    Re : pic 16f88 et SPI

    Merci David, je vais modifier mon câblage et me concentrer dans cette configuration...
    par contre si tu regardes la patte 12 sur les 2 schémas tu verras qu'il y en a une en sortie et une en entrée...

  27. #22
    MacArell

    Talking Re : pic 16f88 et SPI

    J'ai trouver la solution à mon problème
    La voici pour info (commentaire dans la langue de Shakespeare ) :
    Code:
    //SPI write command function reg
    void spi_w(unsigned char regaddr, unsigned char regdata)
    {
    unsigned char tmp;
    CS = lo;	// pull the CS low to start SPI transmission
    SSPBUF=(((regaddr&0x3F)<<1)|0x80);	// send register address to the accelerometer with write command
    while(!BF);	// wait for transfer
    tmp=SSPBUF;	// reading SSPBUF clears the BF bit
    SSPBUF=regdata;	// send data into the accelerometer register
    while(!BF);
    tmp=SSPBUF;	// reading SSPBUF clears the BF bit
    CS = hi;	// pull the CS high to stop SPI transmission
    }
    
    
    //SPI read function
    unsigned char spi_r(unsigned char reg)
    {
    unsigned char temp;
    CS=lo;
    SSPBUF=((reg&0x3F)<<1);	// send register address to the accelerometer with read command
    while(!BF);		// wait for transmit to finish
    SSPBUF = 0x00;		// reading SSPBUF clears the BF bit
    while(!BF);		// wait for receive to finish
    temp=SSPBUF;		// reading SSPBUF clears the BF bit
    CS=hi;			// pull the CS high to stop transmission
    return temp;
    }
    La différence avec mon 1er code est l'utilisation de BF à la place de SSPIF et l'écriture de 0x00 dans SSPBUF à la place de la lecture...

    PS: l'init SPI est TRISC4=Input, Fosc/4 ,CKE=1, CKP=0 & SMP=1 ou si vous préférer OpenSPI(FOSC_4,MODE_00,SMPEND) ;
    Merci David pour ton aide l'erreur de direction SDI/SDO était bien présente

Sur le même thème :

Discussions similaires

  1. pic SPI et mémoire MMC
    Par legos dans le forum Électronique
    Réponses: 47
    Dernier message: 31/05/2011, 10h02
  2. Compatibilité Pic 16F84/16F88
    Par Tix dans le forum Électronique
    Réponses: 4
    Dernier message: 11/12/2007, 10h33
  3. documentations sur le pic 16f88
    Par said.ettami dans le forum Électronique
    Réponses: 1
    Dernier message: 02/12/2007, 14h00
  4. Recherche Bootloader pour Pic 16f88
    Par samaudio dans le forum Électronique
    Réponses: 4
    Dernier message: 29/07/2007, 20h26
  5. K8048 / Vm111 / Pic 16f88
    Par Paintitblack dans le forum Électronique
    Réponses: 1
    Dernier message: 26/01/2007, 21h14