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

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

Desconectado JSP10

  • PIC10
  • *
  • Mensajes: 13
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #15 en: 26 de Julio de 2011, 09:39:14 »
Maxtronic !!Muchas Gracias por tu informacion!!!sigo leyendo todo el foro una y mil veces (no creas que pregunto solo para que me resuelvan las cosas sin haberlas estudiado un poco antes ni heberme informado,pero como todos supongo hay muchas cosas que se me pasan o no las entiendo),volviendo al tema que es lo mas importante tu ayuda me vino de 10 logre mostrar algo no es el dato precisamente sino una serie de caracteres ascii que deben representar el nnumero me imagino yo.
Pregunto: Porque podrá ser eso??si el dato es entero, y fprintf(serie,"dato=%d\n\r",dato); y por tal motivo lleva %d.
Bueno nuevamente muchas gracias por tu ayuda y la de todos los que estan predispuestos a darme una mano es este proyecto!!! :-/ :-/ :)

Desconectado JSP10

  • PIC10
  • *
  • Mensajes: 13
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #16 en: 26 de Julio de 2011, 12:34:34 »
Volvi para ser mas especifico en lo dicho anteriormente, en la pantalla del Virtual Terminal de Proteus me aparece esto ¢ORÚTÊäÙ½!»¹ß· y en realidad deberia aparecer lo que dice el codigo que adjunto:

#include <16f88.h>
#fuses XT,NOWDT,PUT,BROWNOUT,NOPROTECT,MCLR,NOLVP,NOCPD
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(a)
#use rs232(baud=9600, xmit=PIN_A1,rcv=PIN_A2,FORCE_SW,bits=8, parity=N, STREAM=serie)

//======================
int dato=0,valor=2;

void main(){
//SETUP_PORT_A(0XFF);
set_tris_b(0x12);
set_tris_a(0x04);
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);
             fputs("Encendido!\n\r",serie);
             fprintf(serie,"valores%d\n",valor);
             printf(serie,"dato=%d\n\r",dato);}
     
            if(dato!=valor){
                 output_low(PIN_B7);   
                 output_low(PIN_B6);
                 delay_ms(500);
                 output_high(PIN_B6);
                 delay_ms(500);
                valor=valor+1;
            }}
            }
        }

que puede estar pasando???? :? :? :shock: :shock:

Desconectado JSP10

  • PIC10
  • *
  • Mensajes: 13
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #17 en: 26 de Julio de 2011, 12:46:07 »
Listo Problema resueltoooooo!!! :-/ :-/ Lo que sucedia es que no habia convigurado el integrado Max 232 en Virtual Terminal en Inverted!!! ahora funciona de maravillas!! :D :D

Desconectado JSP10

  • PIC10
  • *
  • Mensajes: 13
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #18 en: 27 de Julio de 2011, 12:42:31 »
Bueno bueno!!!Otra vez por aca, con nuevos problemas,hasta ayer todo funcionaba perfecto, la comunicacion desde SPI maestro al SPI esclavo y luego de este a la PC via rs232  pero; solo para datos de 8 bits, y lo que necesito es utilizar datos de 16 bits.Leyendo un poco el foro y demas, encontre que la solucion esta en usar SPI por Software es decir utilizar con la intruccion
#use spi(master, DI=PIN_B1, DO=PIN_B2, CLK=PIN_B4), en vez de usar Setup_spi, y al usar esta funcion me permite utilizar spi_xfer con la cual puedo enviar 16 bits. Ahora viene los resultados y las preguntas.
1_ Utilice #use spi, pero no logro comunicar los 2 pic ni enviar el dato, que puede estar faltando en dicha instruccion???
2_ Para enviar un dato desde el mastro al esclavo uso spi_xfer(stream,dato,16); eso es correcto???
 creo que hasta ahi es todo???si alguien puede ayudarme se lo agredezco :-/ :-/

Desconectado PacoP

  • PIC10
  • *
  • Mensajes: 21
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #19 en: 28 de Julio de 2011, 06:13:14 »
Y si usas dos instrucciones de lectura seguidas, no te vale?
Despues montas el número entero en una variable tipo long y creo que te puede valer.

Desconectado JSP10

  • PIC10
  • *
  • Mensajes: 13
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #20 en: 28 de Julio de 2011, 09:52:15 »
Hola PacoP!! Respecto a tu respuesta he probado de la siguiente manera:

if(spi_data_is_in()){    //si hay un dato en el spi
        dato1 = spi_read();
        delay_us(20);
        dato2 = spi_read();
        delay_us(20);
       
         dato=dato2+dato1;     

es lo que he probado pero no he conseguido recepcionar el dato.
Eso es lo que tu decias???

Desconectado JSP10

  • PIC10
  • *
  • Mensajes: 13
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #21 en: 28 de Julio de 2011, 20:25:09 »
Hola Gente!!! Acabo de encontrar en error de porque no podia leer el dato de 16 bits, el problema era el siguiente if(spi_data_is_in()){    //si hay un dato en el spi este bucle estaba antes de la intrucción spi_xfre(stream,data,bits), por lo que al enviar un dato de 16 bits nunca permitia entrar al bucle para almacenar el dato, ya que spi_data_is_in es solo para 8 bits, asique lo saque y santo remedio todo funciona de maravillas hasta ahora en un solo sentido, mi proximo paso es realizarlo en un experimentor y conectarlo a la PC para asi poder recibir los datos en Matlab y desde alli enviarle información al pic.En cuanto este listo lo subo!!!!Gracias por la ayuda a todos los interesados.

Desconectado JSP10

  • PIC10
  • *
  • Mensajes: 13
Re: AYUDA PARA COMUNICACION BIDIRECCIONAL RS232 Y SPI EN PIC 16F88
« Respuesta #22 en: 30 de Julio de 2011, 12:55:36 »
Nuevo problema la simulacion funciona espectacular pero cuando lo implemente no funciona!!!!que puede ser queeste pasando?????