18f6622 SPI
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

18f6622 SPI



  1. #1
    invite437e5c2f

    18f6622 SPI


    ------

    Bonjour,

    J'aimerais pouvoir piloter un LCD en SPI.

    j'ai configurer les bits pour pouvoir utiliser mon SPI mais le problème c'est que le clock est trop rapide. ( FOSC/64 (SSPM<3:0>) )

    J'ai vu dans le Datasheet qu'on pouvait utiliser le TMR2 pour faire el clock.

    Lorsque je configure les bits pour utiliser le TMR2 cela ne fonctionne pas.

    Voici mon code pour le SPI et l'envoi des données :

    Code:
    void Init_SPI(void)
    {
    	SSP1STAT = 0b00000000;
    	//bit 6 CKE 0, Bit 7 SMP 
    	
    	SSP1CON1 = 0b00110011; 
    	//bit 0 ssmp0=1, 1 ssmp1=1, 2 ssmp2, 3 ssmp3
    	//bit 4 CKP =1 , bit 5 sspen=1, bit 6 sspov, bit 7 wcol 
    } 
    
    void rw_SPI(unsigned char cVar) //cVar récupére cData
    {
    	SSP1BUF=cVar;	// cVar est placé dans le registre SSPBUF 
    	while(!PIR1bits.SSP1IF);	// Quand SSPIF passe à 1, transmission de donnée terminée
    	PIR1bits.SSP1IF=0;		// On passe SSPIF à 0 , et on peut envoyer une autre donnée	
    }
    j'utilise l'oscillateur interne ( 4Mhz ).

    Code:
    	OSCCONbits.IRCF0=0;
    	OSCCONbits.IRCF1=1;
    	OSCCONbits.IRCF2=1;
    
    	OSCCONbits.SCS0=1;
    	OSCCONbits.SCS1=1;
    
    	ADCON1bits.PCFG0=1;
    	ADCON1bits.PCFG1=1;
    	ADCON1bits.PCFG2=1;
    	ADCON1bits.PCFG3=1;
    
    	TRISA=0b00000000;
    	TRISB=0b00001110;
    	TRISC=0b10000000;
    	TRISD=0b11111111;
    	TRISE=0b00000000;
    	TRISF=0b11110000;
    	TRISG=0b00001111;
    configuration du timer2 :

    Code:
    RCONbits.IPEN=0; // pas de priorité  
    INTCONbits.GIE=1; // toutes les interruptions activés
    INTCONbits.PEIE=1;
    
    
    T2CON=0b00000110;   // config. TIMER2
    PIE2bits.BCLIE=1;
    PR2=250;
    PIR1bits.TMR2IF=0;
    PIE1bits.TMR2IE=1;


    Avez-vous une idée du problème ?

    Cordialement

    DavsGr

    -----

  2. #2
    RISC

    Re : 18f6622 SPI

    Salut,

    Quel PIC utilises-tu ?
    Quelle version de MPLAb ?
    Quel compilateur + version ?

    Qu'est-ce qui te permet de dire que cela ne fonctionne pas ( périph. externe ?)

    a+

  3. #3
    invite437e5c2f

    Re : 18f6622 SPI

    Salut

    j'utilise le 18f6622 ( je l'ai écrit dans le titre )
    Mplab v8.53
    compilateur : Mplab C18

    J'ai testé avec logicPort. Lorsque je met mon clock SPI en configuration FOSC/64 je pouvais observer le clock.

    Avec le clock en mode TMR2 il ne se passe rien.

  4. #4
    satinas

    Re : 18f6622 SPI

    Le timer2 est utilisé pour générer l'horloge du port spi.
    Il suffit de le démarrer apres réglage des prescaler/postcaler, et sans utiliser d'interruption. La routine write/read spi est simple :

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

    C'est ce que j'ai compris de la datasheet

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

    Re : 18f6622 SPI

    il me semble que c'est ce que je fais d'après le code que je vous ai montré.

Discussions similaires

  1. Utilisation de mémoire SPI sur une ligne SPI utilisé
    Par VIIV dans le forum Électronique
    Réponses: 1
    Dernier message: 30/12/2009, 13h11
  2. Spi
    Par inviteac09f73c dans le forum Électronique
    Réponses: 3
    Dernier message: 19/05/2009, 21h13
  3. [AVRStudio4 + Atmega128 + SPI] Probleme sur le port SPI
    Par inviteff7a2099 dans le forum Électronique
    Réponses: 1
    Dernier message: 03/12/2008, 03h05
  4. Spi
    Par invite91a05f0b dans le forum Électronique
    Réponses: 18
    Dernier message: 31/05/2007, 22h47
  5. SPI via IR ?
    Par invitee17aeca5 dans le forum Électronique
    Réponses: 2
    Dernier message: 17/08/2006, 09h44
Découvrez nos comparatifs produits sur l'informatique et les technologies.