Autor Tema: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88  (Leído 6362 veces)

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

Desconectado JSP10

  • PIC10
  • *
  • Mensajes: 13
AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« en: 14 de Julio de 2011, 11:42:04 »
Buenas soy nuevo en el foro! :-/ y necesitaria una ayuda con mi proyecto, el cual consiste en la comunicación de un sensor el cual envia datos en protocolo SPI de 16 bits, y debo recibirlos en la pc, con RS232, osea el pic debe hacer la conversion de los datos de SPI a RS232 para la recepción y de RS232 a SPI para poder pedir el dato que quiero que me envie el sensor.La situacion es la siguiente, el pic a utilizar es el 16f88 en el cual ya he probado la parte de RS232 y funciona sin ningun problema, hasta simulada en Proteus, pero cuando quize hacer algo con SPI no se por donde empezar, :? :( :( vi que proteus tiene un debugger de spi lo conecte he intente enviar algun dato a ese dispositivo pero no pasa nada.Necesitaria que alguien me de una mano con este proyecto por favor. El sensor del cual debo tomar datos es ADIS 16405!!!! , por si algun interesado quiere mirar un poco,para orientarme como debo hacerlo.Desde ya muchas gracias

Desconectado JSP10

  • PIC10
  • *
  • Mensajes: 13
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #1 en: 16 de Julio de 2011, 14:09:34 »
ALGUIEN PUEDE DARME UNA MANOOOOOOOO  EN ESTE TEMA POR FAVOR:shock:  GRACIAS

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 422
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #2 en: 16 de Julio de 2011, 15:18:41 »
Pro no mandas tu avance en ISIS si ya lo tienes a ver si se puede hacer algo.
Pero tu problema no es complicado, sera configurar bien el SPI.

Desconectado PacoP

  • PIC10
  • *
  • Mensajes: 20
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #3 en: 17 de Julio de 2011, 16:48:46 »
Buenas,
Esto de cambiar de un protocolo a otro es muy facil.
Tan solo tienes que leer los datos SPI, obtener la información que quieres devolver por RS232 y enviarla en el formato que más te guste por este puerto.
Con los datos que das del proyecto, como que no se te puede ayudar mucho.
Un saludo

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 293
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #4 en: 18 de Julio de 2011, 04:30:47 »
También depende del compilador que uses, si utilizas uno como el CCS ya tiene funciones implementadas para extraer los datos de ambos protocolos de comunicación y enviarlos, lo cual te simplifica muho la tarea, si no lo que tienes que hacer es implementarte tu el protocolo "a pelo" en el PIC y desmenuzar las tramas para recoger los datos del SPI y componerlas para mandarlos por RS232, un poco más coñazo pero se puede hacer bien.
Si necesitas ayuda más específica cuelga tu código o dinos que lenguaje usas, etc. (si es asembler entonces si que será un buen coñazo :P, pero también se puede).
Saludos!

Desconectado JSP10

  • PIC10
  • *
  • Mensajes: 13
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #5 en: 18 de Julio de 2011, 13:17:34 »
Buenas Volviiiiii!!!gracias a los que han estado leyendo mi duda y estan dispuestos ayudarme!!!! :-/ :-/ ahi subi en esquematico en proteus y estoy usando ccs para programar los pic 16f88, la idea seria enviar un dato(dato de 16 bits) desde el pic U3 al U1 en SPI y del U1 a la PC, el pic U3 representaria el sensor ADIS 16405 (a los que les guste la electronica vean la hoja de datos de este bichito) es un sensor de navegacion inercial el cual consta de un magnetometro de 3 ejes un giroscopor de 3 ejes y en aceleromerto de 3 ejes, y esas son las lecturas que debo obtener en la pc.
                   Quisiera comentarles que estuve, en principio intentando comunicar 2 pic (16f88) entre si pero no logré hacerlo.subo el codigo para que lo vean quizas encuentren mi error o mis errores :oops: :oops:Muchas gracias!!! :) :)

PARA EL MAESTRO
#include <16f88.h>
#fuses XT, NOWDT, NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)
int dato=0,valor=1;
void main()
{
set_tris_b(0x02);
setup_spi(SPI_MASTER | SPI_l_TO_h | SPI_CLK_DIV_16);
     spi_write( valor );
     delay_ms(500);
     dato = spi_read();
 
}

PARA EL ESCLAVO

#include <16f88.h>
#fuses XT, NOWDT, NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)

int nuevodato;
void main(){
set_tris_b(0xf2);
do{

setup_spi(spi_slave | spi_l_to_h | spi_clk_div_16);     //configurar spi como esclavo
   
      if(spi_data_is_in()){    //si hay un dato en el spi
         nuevodato = spi_read();
           if(nuevodato==1){
           
              output_low(pin_b6);
              delay_ms(3000);
              output_high(pin_b6);
              delay_ms(3500);}
     
      }while(true);}
           

Desconectado PacoP

  • PIC10
  • *
  • Mensajes: 20
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #6 en: 18 de Julio de 2011, 17:28:21 »
Mir este link, igual te aclaras un poco.
http://www.wikiteka.com/trabajos/gestion-del-bus-spi-desde-c/
Puede que te fallen un poco las mayusculas y minusculas del código.
En MikroC son un fastidio.
Por otra parte, le estas definiendo la velocidad del reloj al esclavo, y creo que la velocidad la define el maestro.

Desconectado JSP10

  • PIC10
  • *
  • Mensajes: 13
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #7 en: 19 de Julio de 2011, 12:12:12 »
Hola PacoP!! ingrese al link que me dejaste, y probé lo de las mayusculas y minisculas, lei bien lo que decia , pero no he podido hacerlo funcionar aun, podrias probar en mismo codigo para que veas que es lo que tiene mal y porque no funciona.Muchas gracias

PD: cualquier interesado que desee ayudarme se muy agredecido de mi parte

Desconectado PacoP

  • PIC10
  • *
  • Mensajes: 20
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #8 en: 21 de Julio de 2011, 14:41:18 »
Hola.
No noto nada raro en el código, salvo que no usas el puerto serie que  viene implementado en hardware sino que usas el puerto A.
En el Pic 16f88, hay que definir muy bien el puerto A como analógico o digital para que funcione, si lo dejas sin definir da problemas.
Prueba a cargar esos programas para la simulación el el 16f876 a ver si te funcionan. Yo lo uso como último recurso cuando el 16f88 me hace cosas raras.
Un saludo.

Desconectado PacoP

  • PIC10
  • *
  • Mensajes: 20
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #9 en: 22 de Julio de 2011, 04:18:54 »
Mira este hilo del foro.
http://www.todopic.com.ar/foros/index.php?topic=30247.0
Aparte te subo un manual de ccs. En la página 49 tienes información sobre la configuración de los puertos analógicos.
Un saludo

Desconectado Maxtronic

  • PIC10
  • *
  • Mensajes: 27
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #10 en: 23 de Julio de 2011, 03:15:35 »
El problema es que te siñes al CCS te alejas del hardware de los pic, por buscar lo facil no sale aveces rapido; hay un ejemplo de microchip http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf
Hay esta la configuracion del spi segun manual.
No hay que tomar constumbre con el CCS ese compilador tiene errores para saber si el compilador esta mal se ve el pdf del chip y en la simulacion se ve si el compilador configuro bien.

Desconectado PacoP

  • PIC10
  • *
  • Mensajes: 20
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #11 en: 24 de Julio de 2011, 03:46:52 »
http://jftrujilloa.wordpress.com/2011/01/23/comunicacion-spi-entre-pics-18f4550/

Proyecto genial y bien explicado. Ale, a ver si te vale.

Desconectado JSP10

  • PIC10
  • *
  • Mensajes: 13
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #12 en: 24 de Julio de 2011, 13:57:31 »
SEÑORES!!!!Muchas gracias por su ayuda hasta el momento los avances en el proyecto han dado fruto, pude comunicar 2 pic mediante SPI costo pero lo logre jaja  :-/ ahora estoy intentando que el dato recibido en el esclavo, sea enviado via RS232 y visto por Virtual Terminal (en proteus), una vez logrado eso quedará enviar y recibir datos de 16 bits, con eso finalizaria la parte de software que estoy trabajando sobre el pic (hasta el momento), prometo subir todo en cuanto este bien depurado y funcionando. Gracias por sus ayudas nuevamente y cualquier nueva duda los estaré consultando es se los aseguro jaja :-/ :-/ :-/ :-/ :D

Desconectado JSP10

  • PIC10
  • *
  • Mensajes: 13
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #13 en: 25 de Julio de 2011, 20:35:31 »
Buenas Noche caballeros!!!Muy Bien estos son los resultado de la comunicación en spi a spi con pic 16f88, el codigo funcionando es el siguiente

para el maestro

#include <16f88.h>
#fuses XT, NOWDT, NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(a)
int dato=0,valor=4;
void main()
{

set_tris_b(0x02);
set_tris_a(0xff);
setup_spi(SPI_MASTER | SPI_l_TO_h | SPI_CLK_DIV_16);
while(1){
     spi_write( valor );
     delay_ms(500);
     dato = spi_read();
}
}

para el esclavo

#include <16f88.h>
#fuses XT, NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(a)
#use rs232(baud=9600, xmit=PIN_A0,rcv=PIN_A1, stop=1,BITS=8)

//======================
int dato=0,valor=0;
void main(){
//SETUP_PORT_A(0XFF);
set_tris_b(0x12);
setup_spi(SPI_slave | SPI_l_TO_h | SPI_CLK_DIV_16|SPI_XMIT_L_TO_H);// Configuracion del protocolo spi
//setup_adc_ports(ALL_ANALOG);
//setup_spi(SPI_SS_DISABLED);
 
 While(1){
     
        if(spi_data_is_in()){    //si hay un dato en el spi
         dato = spi_read();      // almaceno el dato recibido en la vble Dato
         //delay_ms(500);
         
         //for(i=0;i<5;i++){
         if(dato==valor){          // Comparo con la vble Valor
             output_low(PIN_B6);
             output_high(PIN_B7);
             delay_ms(200);
             output_low(PIN_B7);
            delay_ms(200);
             printf("El valor enviado por el Pic 16F88 Maestro es:%d",valor);}

            if(dato!=valor){

                 output_low(PIN_B7);   
                 output_low(PIN_B6);
                 delay_ms(700);
                 output_high(PIN_B6);
                 delay_ms(700);
                valor=valor+1;
            }}
            }
        }

muy bien ahora el problema es que no puedo sacar el dato por rs232, osea una vez que encuentro el dato en el pic esclavo quiero enviarlo via rs 232 a la pc (parte del codigo que esta en otro color), y verlo en virtual terminal de proteus, pero no consigo enviar nada el dato es un entero, alguien me ayuda con eso por favor

Desconectado Maxtronic

  • PIC10
  • *
  • Mensajes: 27
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #14 en: 25 de Julio de 2011, 20:54:39 »
Los pines del SPI tambien son de UART si tu usas el SPI  el uart queda fuera la otra forma es crearla por software.
#use rs232(baud=9600, xmit=PIN_A2,rcv=PIN_A3,FORCE_SW,STREAM=serie)


fprintf(serie,"dato=%d\n\r",dato);

Estos ejemplos hay mucho en el foro busca para que veas mas.