Hola a todos, creo que este hilo es el correspondiente al tema que voy a tratar.
Bueno, estoy diseñando un circuito para comunicar mediante SPI dos 16f877a y luego, mediante el USART conectar uno de los dos al Pc.
Las herramientas que utilizo son. Pic Simulator Ide + Proteus 7.7 Sp2.
Despues de investigar durante casi una semana y aprender mas o menos como funciona el SPI me puse a la tarea y he conseguido configurando en modo manual con el PSI los registros correspondientes para una comunicacion Maestro-> Esclavo sin problemas, lo de modo manual me refiero a que el PSI ya tiene unos comandos para hacer las configuraciones más rápidas y sin tanto código, por ejemplo para escribir/leer de la eeprom existen dos caminos, el primero en modo "manual" modificando los registros a mano y el segundo con un simple Read/Write.
Bien, pues lo que quiero conseguir es que uno de los pics esté haciendo un trabajo y le mande la info al otro pic que será el que esté conectado al Pc, en raras ocasiones, el pic conectado al Pc deberá enviar datos al otro pic para realizar modificaciones.
Por ahora, como ya he dicho, he conseguido crear un for...next ( de 0 a 255 ) y enviarlo al esclavo mediante SPI recibiendolo sin problemas configurando el SPI a mano, los problemas que tengo con esto son los siguientes:
1.- No sé cuando el transmisor termina de enviar un byte para poder mandar el siguiente ( por ahora hago un WaitMs 1 )
2.- Sólo puedo enviar datos del maestro al esclavo. Pero mediante un par de pines puedo "apañar" algo para ir cambiando el sentido de las transmisiones
El mayor problema que tengo al configurar el SPI mediante las rutinas del PSI es que el mismo PSI no tiene emulador de SPI ( si lo tiene de USART y de I2C ) entonces voy un poco a ciegas con el proteus
Los errores que me dá el proteus es que tengo una contención en la línea SCK, me dice que las dos están como salidas en los dos pics, supongo que el PSI al trabajar sólo con I2C, las memorias siempre estarán en modo esclavo, supongo porque no encuentro la manera de cambiar el pin SCK para que sea entrada a no ser que lo haga en manual. También he tenido la idea de: Si funciona bien en manual, pues pongo el maestro en manual y el esclavo en auto o al revés, pero nada, no funca.
Espero haberme explicado bien porque creo que me he liado un poco.. jeje
Alguien podría hecharme una manita para comunicar 2 pics mediante SPI con el Pic simulator Ide?? ( todo el rollo resumido en una pregunta.. )
Adjunto un archivo el cual contiene dos carpetas.
SPI-Manual , es el que he conseguido hacer funcionar sin problemas
SPI- SpiPrepare , es el que quiero hacer funcionar pero no lo consigo ( he probado de todo )
aqui tambien hay un esquema de un ejemplo me encontré por ahí, lamentablemente sólo tengo los HEX y no puedo ver el programa.
Saludos! y perdón por el rollo.
Bueno, estoy diseñando un circuito para comunicar mediante SPI dos 16f877a y luego, mediante el USART conectar uno de los dos al Pc.
Las herramientas que utilizo son. Pic Simulator Ide + Proteus 7.7 Sp2.
Despues de investigar durante casi una semana y aprender mas o menos como funciona el SPI me puse a la tarea y he conseguido configurando en modo manual con el PSI los registros correspondientes para una comunicacion Maestro-> Esclavo sin problemas, lo de modo manual me refiero a que el PSI ya tiene unos comandos para hacer las configuraciones más rápidas y sin tanto código, por ejemplo para escribir/leer de la eeprom existen dos caminos, el primero en modo "manual" modificando los registros a mano y el segundo con un simple Read/Write.
Bien, pues lo que quiero conseguir es que uno de los pics esté haciendo un trabajo y le mande la info al otro pic que será el que esté conectado al Pc, en raras ocasiones, el pic conectado al Pc deberá enviar datos al otro pic para realizar modificaciones.
Por ahora, como ya he dicho, he conseguido crear un for...next ( de 0 a 255 ) y enviarlo al esclavo mediante SPI recibiendolo sin problemas configurando el SPI a mano, los problemas que tengo con esto son los siguientes:
1.- No sé cuando el transmisor termina de enviar un byte para poder mandar el siguiente ( por ahora hago un WaitMs 1 )
2.- Sólo puedo enviar datos del maestro al esclavo. Pero mediante un par de pines puedo "apañar" algo para ir cambiando el sentido de las transmisiones
El mayor problema que tengo al configurar el SPI mediante las rutinas del PSI es que el mismo PSI no tiene emulador de SPI ( si lo tiene de USART y de I2C ) entonces voy un poco a ciegas con el proteus
Los errores que me dá el proteus es que tengo una contención en la línea SCK, me dice que las dos están como salidas en los dos pics, supongo que el PSI al trabajar sólo con I2C, las memorias siempre estarán en modo esclavo, supongo porque no encuentro la manera de cambiar el pin SCK para que sea entrada a no ser que lo haga en manual. También he tenido la idea de: Si funciona bien en manual, pues pongo el maestro en manual y el esclavo en auto o al revés, pero nada, no funca.
Espero haberme explicado bien porque creo que me he liado un poco.. jeje
Alguien podría hecharme una manita para comunicar 2 pics mediante SPI con el Pic simulator Ide?? ( todo el rollo resumido en una pregunta.. )
Adjunto un archivo el cual contiene dos carpetas.
SPI-Manual , es el que he conseguido hacer funcionar sin problemas
SPI- SpiPrepare , es el que quiero hacer funcionar pero no lo consigo ( he probado de todo )
aqui tambien hay un esquema de un ejemplo me encontré por ahí, lamentablemente sólo tengo los HEX y no puedo ver el programa.
Saludos! y perdón por el rollo.