Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pablolode en 20 de Abril de 2018, 15:55:49
Título: comunicacion SPI, recibo 2 veces el mismo dato [Solucionado]
Publicado por: pablolode en 20 de Abril de 2018, 15:55:49
Hola , saludos a todos , estoy tratando de comunicar dos pic18f por SPI . Para hacer un test le envió al esclavo el valor de un contador, que voy incrementando cada x segundos , el caso es que el ESCLAVO me recibe el mismo dato dos veces( o lee en el buferr SSP1BUF el mismo dato) . Los datos enviados por el MASTER los estoy viendo en el osciloscopio. pero al recibirlos el SLAVE en SSP1BUF veo que recibe el mismo datos dos veces ( lo veo con el ICD3) O sea envió : 1 2 3 4 y el esclavo recibe : 1,1,2,2 ,y asi sucesivamente. Alguna pista de podría estar mal? Este es el código en main:
MASTER DelayMs(3000); a++; WriteSPI(a); // Send a byte while(!DataRdySPI()); // wait for a data to arrive temp = ReadSPI();
SLAVE
WriteSPI(0xFF); while(!DataRdySPI());// wait for a data to arrive temp = SPI_Read();
Título: Re:comunicacion SPI, recibo 2 veces el mismo dato
Publicado por: pablolode en 20 de Abril de 2018, 17:56:35
viendolo mas detenidamente (en binario MPLABX) al enviar : 1, 2, 3,4,5,6 el esclavo recibe: 1 > 00000001 129 > 10000001 2 > 00000010 130 > 10000010 3 > 00000011 131 > 10000011
que hace ese primer bit que cambia de 0 a 1???
Título: Re:comunicacion SPI, recibo 2 veces el mismo dato
Publicado por: KILLERJC en 20 de Abril de 2018, 18:22:16
podes poner la configuracion de ambos tambien ?
Título: Re:comunicacion SPI, recibo 2 veces el mismo dato
Publicado por: pablolode en 20 de Abril de 2018, 19:25:41
Exelente¡¡ una buena idea para volver a repasar uno a uno los bits de configuración ¡ tenia mal escrito el SPI Clock Select bit , muchas gracias por la mano Killer¡¡ saludos¡¡¡¡
EEPROM_CS_TRIS = 0; // Drive SPI EEPROM chip select pin EEPROM_SCK_TRIS = 0; // Set SCK pin as an output EEPROM_SDI_TRIS = 1; // Make sure SDI pin is an input EEPROM_SDO_TRIS = 0; // Set SDO pin as an output
EEPROM_CS_IO = 1; #else EEPROM_CS_TRIS = 1; // Drive SPI EEPROM chip select pin EEPROM_SCK_TRIS = 1; // Set SCK pin as an output EEPROM_SDI_TRIS = 1; // Make sure SDI pin is an input EEPROM_SDO_TRIS = 0; // Set SDO pin as an output
#endif // SPI MODE // SPICON1 = 0x21 SSP1CON1bits.WCOL = 0; //= no colision SSP1CON1bits.SSPOV = 0 ;//= no overflow
#if defined(MICRO_MASTER) // SSPM, SPI Master mode, Clock = FOSC/16 SSP1CON1bits.SSPM3 = 0; SSP1CON1bits.SSPM2 = 0; SSP1CON1bits.SSPM1 = 0; SSP1CON1bits.SSPM0 = 1; SSP1STATbits.SMP = 1;// sample bits SPI Master mode: #else /*SLAVE*/ //slave c/enable pin selec SSP1CON1bits.SSPM3 = 0; // SPI Slave mode, Clock = SCKx pin, SSx pin control enabled SSP1CON1bits.SSPM2 = 1; // SSP1CON1bits.SSPM1 = 0; SSP1CON1bits.SSPM0 = 0; SSP1STATbits.SMP = 0; // SMP must be cleared when SPI is used in Slave mod
#endif
SSP1CON1bits.CKP = 0;// Clock Polarity Select bit, Idle state for clock is a low level = 0 SSP1STATbits.CKE = 1; // Transmit occurs on transition from active to Idle clock statek
PIR1bits.SSP1IF =0; // clear interup flag SSP1CON1bits.SSPEN = 1; //= SSPEN ,enaable port ssp
Título: Re:comunicacion SPI, recibo 2 veces el mismo dato
Publicado por: KILLERJC en 20 de Abril de 2018, 19:40:07
Era una cosa u otra, el que recibas 2 veces lo mismo pense que podia ser que leyeras 2 veces lo mismo sin querer. Pero visto que no lo era. Y que encima aparecia un bit de mas, por un momento pense que se enviaban 9 bits pero no era asi, asi que pense que podria haber otra cosa mal, por eso te pregunte por la configuracion. Ya que no habia otra cosa mas que buscar
De todas formas vos encontraste el error, asi que todo el merito es tuyo.