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 :
j'utilise l'oscillateur interne ( 4Mhz ).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 }
configuration du timer2 :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;
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
-----