Estoy trabajando en un proyecto "Comunicación SPI" entre un Master PIC18f2XK22 y un sensor de píxel esclavo (sensor óptico).
Intenté escribir un dato "01010101" en el flanco ascendente, funciona, pero el nivel de SPI_CLK no es el mismo que el SPI_SDO.
¿Puede alguien ayudar, por favor?
Graciasporsurespuesta,estoycorriendounreloja2MHzyelrelojSPIesFosc/64.
Aquíestámicódigo:
voidmain(void){unsignedcharvalue;//MasterinitialisationOSCCON=0b01000000;//2Mmax2MHzTRISB=0b00000100;//SPI_SLKoupout,SPI_SDIinput,ANSELB=0b00000001;SSP2STAT=0b10000000;//SMP=1(attheend):bit7&SSP2CON1=0b00100010;//Clock=Fosc/64:bit<3:0>&CKPIPR3bits.SSP2IP=1;//MSSPinterrupthighpriorityPIR3bits.SSP2IF=0;//MSSPinterruptflagclearedPIE3bits.SSP2IE=0;//MSSPinterruptenable//LedTRISCbits.RC5=0;//setRC5tooutputSPI_CS=1;//SetCShighwhile(1){//WriteSPI_Write(inv_Product_ID);//sendtheaddressdelayms(10);//delayenms}}voidSPI_Write(unsignedchardata){SPI_CS=0;//SetCSlow//SSP2CON1=0b00100010;//risingedgeofclockSSP2BUF=data;//putthedataintheSSPBUFwhile(!SSP2STATbits.BF);//waituntiltheallbitssended}
Cambiéelreloj(OSCCON=0b00110000)a1Mhz,elrelojSPIpermaneceen(Fosc/64),aquíestáelnuevoresultado.Losdatossevenbienycuadrados,peroelrelojnoparececuadrado.
¿Algunasugerencia?
Problemaresuelto,tambiénbajéelrelojSPIusandoClock=FOSC/(4*(SSPxADD+1)
SSP2ADD=0b11111111;//SSP2CON1=0b00101010;//Reloj=FOSC/(4*(SSPxADD+1)
Yaquíestáelresultado:
Gracias a todos por su ayuda: D