TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jcmorales82 en 16 de Agosto de 2012, 07:13:23
-
Hola chicos! Espero que puedan ayudarme con esto! Estoy usando la versión de CCS 4.109 y trato de implementar una comunicación a través de SPI (Software) entre 2 PIC 16f628. Estoy utilizando PROTEUS para simular el circuito, y el maestro funciona bien, envía el dato correctamente que lee del puerto_b, pero la data que llega al esclavo no es la correcta... No sé q estaré haciendo mal, o si es un bug del compilador como tal. Muchas gracias por su aporte! Saludos... Aquí los códigos:
PIC ESCLAVO:
#include<16F628A.H>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP
#byte puerto_a=5
#byte puerto_b=6
#use delay(clock=4000000)
#use spi(SLAVE,CLK=PIN_A0,DO=PIN_A2,DI=PIN_A1,ENABLE=PIN_A3,MODE=1,BITS=8)
byte dato_rx;
void main()
{
for(;;){
dato_rx=spi_xfer(0);
puerto_b=dato_rx;
delay_ms(1);
}
}
PIC MAESTRO:
#include<16F628.H>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP
#byte puerto_a=5
#byte puerto_b=6
#use delay(clock=4000000)
#use spi(CLK=PIN_A0,DO=PIN_A1,DI=PIN_A2,ENABLE=PIN_A3,MODE=1,BITS=8)
byte dato_tx;
void main()
{
for(;;){
dato_tx=puerto_b;
spi_xfer(dato_tx);
delay_ms(1);
}
}
-
Fíjate que en el PIC 16F627 / 628 / 648 los pines A0, A1, A2, A3 pueden ser entradas analógicas para comparadores. Por defecto, dichos pines quedan configurados como analógicos y si quieres leer un pin normal (dato digital) mientras están configurados como analógicos leerás cualquier cosa.
Fíjate en la ayuda del compilador el tema de los comparadores, como deshabilitarlos y así los pines quedaran como digitales.