Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: RedPic en 27 de Mayo de 2014, 06:43:28
Título: PIC18F45K22 ¿MSSP1 y MSSP2 son iguales pero distintos?
Publicado por: RedPic 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.
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.
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
#use i2c(i2c2, FORCE_HW) // Para el DS1307 ó ...
#use i2c(i2c1, FORCE_HW) // para el DS1307 y ...
#use SPI(spi1, master, msb_first, Mode=0, FORCE_HW) // Para la 25LC1024
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 :?
Título: Re: PIC18F45K22 ¿MSSP1 y MSSP2 son iguales pero distintos?
Publicado por: Nocturno en 28 de Mayo de 2014, 04:50:33
Revisando lo que hace ese ASM en los registros lo veo todo bien:
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]
Título: Re: PIC18F45K22 ¿MSSP1 y MSSP2 son iguales pero distintos?
Publicado por: Nocturno en 28 de Mayo de 2014, 06:09:14