Autor Tema: PIC18F45K22 ¿MSSP1 y MSSP2 son iguales pero distintos?  (Leído 3215 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
PIC18F45K22 ¿MSSP1 y MSSP2 son iguales pero distintos?
« en: 27 de Mayo de 2014, 06:43:28 »
Odio a esos malditos roedores :5]

Estoy empeñado en un proyecto que debe estar gafado porque no hago mas que encontrarme problemas (tontos) por el camino ... me explico.

Primero los datos básicos del mismo: Micro PIC18F46K22 con 2 USART y 2 MMSPx (I2C y SPI por cada uno de ellos), un DS1307 (RTC) vía I2C y una 24LC1024 (EEPROM) vía SPI mas algunas otras cosas, pero esto es lo fundamental de mi consulta. Uso el CCS C v.5.021 para compilar mis pruebas.

He realizado dos montajes: Uno, el primero, sobre una Protoboard con un PIC18F46K22 en formato PDIP 40 pines y otro, el segundo, sobre una PCB de Prototipo con el ruteo realizado por mi con un PIC18F46K22 TQFP 44 pines.

Como la disposición de pines de cada uno de ellos es distinta he tomado la decisión de conectar el DS1307 y la 24LC1024 a aquellos canales que mejor me venían físicamente, en el uno, la Protoboard, para que fuesen los cables lo mas directos y claros posible, y en el otro, la PCB, para minimizar las nets y las vías necesarias.

Por esto he conectado en la Protoboard la memoria EEPROM Externa 24LC1024 al SPI1 y el DS1707 al I2C2 mientras que en el PCB lo he hecho al contrario, la 24LC1024 al SPI2 y el DS1707 al I2C1

En principio y sin que sirva de precedente, de forma teórica y sin que la autoridad competente lo inmpida, estos dos canales MMSPx son intercambiables entre sí, son iguales y pueden usarse indistintamente ... pues una mierda como un sombrero mexicano.

Protoboard:

24LC1024 -> SPI1 Funciona perfecto.
DS1307    -> I2C2 Funciona perfecto.

PCB Prototipo

24LC1024 -> SPI2 ¡No funciona!
DS1307    -> I2C1 Funciona perfecto.

He revisado por activa y por pasiva, por Top y por Bottom e incluso por el border de la PCB el prototipo y salvo un pequeño cruce de nets que el amigo Nocturno descubrió todo está correcto en el conexionado de esa memoria al SP2.

Y ahora viene la prueba definitiva. He intercambiado los MSSPx en la Protoboard, en la PCB Prototipo es bastante más dificil salvo que haga cortes y soldaduras imposibles para mi o realice otra PCB totalmente nueva.

Y los resultados han sido los que me temía:

Protoboard:

24LC1024 -> SPI2 ¡No funciona!
DS1307    -> I2C1 Funciona perfecto.

O sea, que o no me funciona el SPI por el canal MSSP2 o el CCS C está haciendo otra de las suyas o algo se me está escapando miserablemente o soy el ingeniero mas penco de todo el universo reconocido hasta la fecha  :oops:

¿A alguno de ustedes le ha pasado algo igual, similar o parecido? ¿Es el PIC18F46K22 una rara avis? ¿será el CCS C 5.021 el responsable?

Ahgggggggggg  ¿por donde miro? :x :x :x


Funciona bien en Protoboard:
Código: CSS
  1. #use i2c(i2c2, FORCE_HW) // Para el DS1307 ó ...
  2.  
  3. #use i2c(i2c1, FORCE_HW) // para el DS1307 y ...
  4.  
  5. #use SPI(spi1, master, msb_first, Mode=0, FORCE_HW)  // Para la 25LC1024
  6. setup_sp(SPI_MASTER| SPI_H_TO_L | SPI_XMIT_L_TO_H);

Y tanto en la Protoboard como la PCB Prototipo funciona mal el SPI2  :5]

Un poco de amable ayuda para un diseñador desesperado que ya no sabe por donde salir :?


« Última modificación: 27 de Mayo de 2014, 06:45:54 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: PIC18F45K22 ¿MSSP1 y MSSP2 son iguales pero distintos?
« Respuesta #1 en: 27 de Mayo de 2014, 07:34:17 »
Nota adicional: He montado el último CCS C v.5.026 y he compilado con él y programado el nuevo HEX resultante con iguales resultados.  :?
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: PIC18F45K22 ¿MSSP1 y MSSP2 son iguales pero distintos?
« Respuesta #2 en: 27 de Mayo de 2014, 14:18:55 »
Comprueba el código ASM generado por el compilador usando una asignación para los MSSP y luego la contraria.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: PIC18F45K22 ¿MSSP1 y MSSP2 son iguales pero distintos?
« Respuesta #3 en: 28 de Mayo de 2014, 04:32:27 »
Bien, comparando los ASM generados usando el SPI1 o el SP2 aparentemente el CCS C lo hace bien

Con SPI 1
Código: ASM
  1. ....................    #use SPI(SPI1, master, msb_first, Mode=0, FORCE_HW)
  2. ....................    setup_spi(SPI_MASTER| SPI_H_TO_L | SPI_XMIT_L_TO_H);
  3. 02BDA:  BCF    FC6.5
  4. 02BDC:  BCF    F94.5
  5. 02BDE:  BSF    F94.4
  6. 02BE0:  BCF    F94.3
  7. 02BE2:  MOVLW  30
  8. 02BE4:  MOVWF  FC6
  9. 02BE6:  MOVLW  00
  10. 02BE8:  MOVWF  FC7
  11. 02BEA:  GOTO   8D2E (RETURN)

Con SPI 2
Código: ASM
  1. ....................    #use SPI(SPI2, master, msb_first, Mode=0, FORCE_HW)
  2. ....................    setup_spi2(SPI_MASTER| SPI_H_TO_L | SPI_XMIT_L_TO_H);
  3. 02BDA:  BCF    F6C.5
  4. 02BDC:  BCF    F95.4
  5. 02BDE:  BSF    F95.1
  6. 02BE0:  BCF    F95.0
  7. 02BE2:  MOVLW  30
  8. 02BE4:  MOVWF  F6C
  9. 02BE6:  MOVLW  00
  10. 02BE8:  MOVWF  F6D
  11. 02BEA:  GOTO   8D2E (RETURN)

Habría que mirar en detalle este código para ver si todos los bits de configuración de ambos modos están correctos.

Ahora lo que voy a hacer es en la PCB Prototipo montar las 24LC1024 cableada con el SPI1 a ver si va bien. Si funciona rehago la PCB para intercambiar entre si los canales del DS1307 I2C que va bien en ambos y la 24LC1024 SPI que va bien en el SPI1

Y que Dios nos pille confesados  :?
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: PIC18F45K22 ¿MSSP1 y MSSP2 son iguales pero distintos?
« Respuesta #4 en: 28 de Mayo de 2014, 04:50:33 »
Revisando lo que hace ese ASM en los registros lo veo todo bien:

SPI1
====
SSP1CON1.5=0
TRISC.5=0 (SDO1)
TRISC.4=1 (SDI1)
TRISC.3=0 (SCK1)
SSP1CON1=0x30
SSP1STAT=0

SPI2
===
SSP2CON1.5=0
TRISD.4=0 (SDO3)
TRISD.2=1 (SDI3)
TRISD.0=0 (SCK3)
SSP3CON1=0x30
SSP3STAT=0

¿Podrías probar a ver el código que genera el envío de una trama SPI?

Por cierto, ¿no será una mala soldadura?

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: PIC18F45K22 ¿MSSP1 y MSSP2 son iguales pero distintos?
« Respuesta #5 en: 28 de Mayo de 2014, 05:50:21 »
Por cierto, ¿no será una mala soldadura?

No creo amigo Nocturno, como puse más abajo, hice la prueba en la Protoboard en la iban perfectamente el SPI1 para la memoria y el I2C2 para el RTC; pero cuando los intercambié poniendo la memoria en el SPI2 y el RTC en el I2C1 dejó de ir la memoria y siguió perfectamente el RTC. O sea lo mismo que en la PCB que es así como están conectadas, la memoria en el SPI2 que tampoco va y el RTC en el I2C1 que sigue yendo bien.

Ahora mismo estoy "cableando" la memoria en la PCB hacia el SPI1 para conectarla igual que en la Protoboard y verificar que va bien por ahí. Si es así desruteo toda la PCB y pongo la memoria y el RTC tal cual están en la Protoboard, la memoria por SPI1 y el RTC por I2C2 que se que van bien.

Aunque en la Protoboard el PIC 18F46K22 que tengo es el formato DIP40 y en la PCB es el TQFP44 el comportamiento es el mismo, el SPI2 no va en ninguno de los dos y el I2C va bien en ambos: en el MSSP1 y el MSSP2. La prueba que estoy haciendo ahora es ver si el SPI en el MSSP1 va correctamente en el TQFP44, igual que en DIP40.

Y ya investigaré por qué el SPI2 no va en ninguno de ellos  :5]
« Última modificación: 28 de Mayo de 2014, 05:54:06 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: PIC18F45K22 ¿MSSP1 y MSSP2 son iguales pero distintos?
« Respuesta #6 en: 28 de Mayo de 2014, 06:09:14 »

¿Podrías probar a ver el código que genera el envío de una trama SPI?