Hola, probando la transmisión y recepción utilizando SPI me encuentro con el siguiente inconveniente... Al transmitirle un dato a un PIC 18F4550 y almacenar el dato en una variable, lo almacena pero pareciera que lo hace con solo 7 bits. Por ejemplo: si envio 0x0F, en el 4550 tengo 000 1111 0, si envio 0x01, en el 4550 llega 0000 001 0... Siempre como si el bit menos significativo fuera el bit 2 y no el 1...
Mi configuración del módulo SPI es la siguiente:
SPI1STAT = 0x0; // disable the SPI module (just in case)
SPI1CON1 = 0x0161; // FRAMEN = 0, SPIFSD = 0, DISSDO = 0, MODE16 = 0; SMP = 0; CKP = 1; CKE = 1; SSEN = 0; MSTEN = 1; SPRE = 0b000, PPRE = 0b01
SPI1STAT = 0x8000; // enable the SPI module
Vamos, que puede andar mal en este caso?... El programa en el 4550 es el siguiente
#use spi(DI=PIN_B0, DO=PIN_C7, CLK=PIN_B1, ENABLE=PIN_c0, BITS=8)
void main()
{
int value=0x00, aux= 0;
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SLAVE|SPI_L_TO_H|SPI_CLK_DIV_4|SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
set_tris_d(0x00);
set_tris_b(0xff);
set_tris_a(0x00);
set_tris_c(0x00);
set_tris_E(0x01);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab
// TODO: USER CODE!!
output_d(0x00);
while (1)
{
aux = spi_data_is_in();
if(aux == 1){
value = spi_read();
delay_us(50);
output_d(value);
}
}
}
De antemano gracias!!