Autor Tema: comunicacion entre pics yy rs232, y lectura analogas  (Leído 3380 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
comunicacion entre pics yy rs232, y lectura analogas
« en: 25 de Enero de 2011, 18:53:13 »
hola, estoy en estos dias queriendo hacer una comunicacion entre pic los cuales son los 16f873a en C. lo que intento y no me sale, es poder leer 3 entradas analogas de uno de los pic y reflejar los reslultados de estas en una LCD pero en el otro pic, en realidad no me sale esto, alguien tiene una idea de como poder solucionar esto, ademas de poder compartir sus conocimientos conmigo  :lol: y sus codigos  :mrgreen:

lo que he intentado es: la lectura de la entrada analoga N0 supongamos, la almaceno en una variable "rango" y esta la intento mandar al otro pic por medio de printf("%f",rango); es la unica forma que me da numeros de todas las otras que intentado, pero estan malos siempre me aroja 4Volt cuNDO LE PONGO 3V  a la entrada.
espero su ayuda por favor.

saludos.

bueno logre mandar el dato al otro pic, pero el punto ahora es que me llega de a un caracter al otro pic, osea si el valor del pic 1 es 2,45, en el pic 2 llega 2 , 4 5 y no como solo un numero, ahora mi pregunta tengo que meter todo a dentro de un string o no? apenas llege este dato???????
« Última modificación: 26 de Enero de 2011, 11:14:34 por japifer_22 »

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: comunicacion entre pics yy rs232, y lectura analogas
« Respuesta #1 en: 26 de Enero de 2011, 12:53:14 »
hola, otra vez, bueno e hecho un codigo y no se por que no se ve reflejado los datos del pic 2 en el pic 1 por medio de la LCD, en esta ultima solo me aparece el valor 0.00 y nada mas.

pic que contiene la señales analogas a mandar al pic 2:
Código: [Seleccionar]
#include <16F873a.h>
#device adc=10
#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=4000000) //Fosc=4Mhz
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)
#define use_portb_lcd TRUE //definir portb lcd
#include <lcd420.c>
#include <stdlib.h>
#use standard_io(C)

float const resolucion= 5.0/1022.0;      // Conversión con 10 bits
float rango1, rango2,rango3;
int16 V1,V2,V3;//variables para las señales analogas
char lectura;

#int_RDA    //interrupcion para la resepcion del master
void RDA_isr()
{
if(kbhit()){
 lectura=GETC();  //guarda el valor enviado por el RS-232
 putc(lectura);
}}



void main(void)
{
   lcd_init();
   enable_interrupts(GLOBAL);      //todas las interrupciones activadas
   enable_interrupts(INT_RDA);     //interrupcion INT_RDA activada. comunicacion rs232
   setup_port_A( ALL_ANALOG );
   setup_adc( ADC_CLOCK_INTERNAL );
   
while(TRUE){   
//avilita la entrada analoga N0
   set_adc_channel( 0 );//numero del puerto analogo N0
   delay_us(20);
   V1 = read_adc();//guarda el dato optenido de la entrada analoga
//avilita la entrada analoga N1
   set_adc_channel( 1 );//numero del puerto analogo N1
   delay_us(20);
   V2 = read_adc();//guarda el dato optenido de la entrada analoga
//avilita la entrada analoga N2
   set_adc_channel( 2 );//numero del puerto analogo N1
   delay_us(20);
   V3 = read_adc();//guarda el dato optenido de la entrada analoga   
   
rango1=V1 * resolucion;
rango2=V2 * resolucion;
rango3=V3 * resolucion;

            lcd_gotoxy(1,1);
            printf(lcd_putc,"valor 1: %f",rango1);
            lcd_gotoxy(1,2);
            printf(lcd_putc,"valor 2: %f",rango2);
            lcd_gotoxy(1,3);
            printf(lcd_putc,"valor 3: %f",rango3);
            //printf("%.2f 0x09",rango1);
           
           
            printf("%f",rango1);
           
            delay_us(20);
            putc(0x0D);
            }}   
 

resepcion de las señales analogas:
Código: [Seleccionar]
#include <16F873a.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=4000000) //Fosc=4Mhz
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)
#define use_portb_lcd TRUE //definir portb lcd
#include <lcd420.c>
#include <stdlib.h>
#use standard_io(C)

int  xbuff=0x00;     // Índice: siguiente char en cbuff
char lectura=0x00;        // último caracter recibido
float numero;

#int_rda
void serial_isr() {          // Interrupción recepción serie USART
 
   if(kbhit()){              // Si hay algo pendiente de recibir ...
   lectura=getc();        // lo descargo y ...
  }
}

void main(void)
{
   lcd_init();
   delay_ms(2000);           // Espero a estabilizar antes de actuar   
   enable_interrupts(INT_RDA);     //interrupcion INT_RDA activada. comunicacion rs232
   enable_interrupts(GLOBAL);      //todas las interrupciones activadas   
   
 
do {

for(xbuff=0;xbuff<=3;xbuff++){

do{
   }while(lectura==0x0D);
   
cbuff[cbuff]=lectura;   

numero=atof(cbuff);
            lcd_gotoxy(1,1);
            printf(lcd_putc,"%f",numero);
            putc(0x00);
            }
           
  } while (TRUE);           
 }           

bucha espero que me puedan ayudar en esto ya que no logro nada de lo que quiero  :oops:

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: comunicacion entre pics yy rs232, y lectura analogas
« Respuesta #2 en: 26 de Enero de 2011, 16:07:14 »
Hola.

Lo que te llega al pic es un string y lo que debes hacer es guardar todos esos datos en un bufer. En tu caso envias un float, por lo que debes usar una función que pase de string a float.

En la ayuda del CCS estan esas funciones.

Saludos
El papel lo aguanta todo

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: comunicacion entre pics yy rs232, y lectura analogas
« Respuesta #3 en: 26 de Enero de 2011, 16:52:20 »
hola MLO te comento que tambie nintente poniendo el atof para transformar esto pero aun asi no me sale nada por la pantalla, te dejo lo que hice para que veaz.


Código: [Seleccionar]
#include <16F873a.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=4000000) //Fosc=4Mhz
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)
#define use_portb_lcd TRUE //definir portb lcd
#include <lcd420.c>
#include <stdlib.h>
#use standard_io(C)

char lectura;        // último caracter recibido
float numero;

#int_rda
void serial_isr() {          // Interrupción recepción serie USART
 
 if(kbhit()){              // Si hay algo pendiente de recibir ...
   lectura=getc();        // lo descargo y ...
  }
}

void main(void)
{
   lcd_init();
   delay_ms(2000);           // Espero a estabilizar antes de actuar   
   enable_interrupts(INT_RDA);     //interrupcion INT_RDA activada. comunicacion rs232
   enable_interrupts(GLOBAL);      //todas las interrupciones activadas   
   
 
while (TRUE){
     
            numero=atof(lectura);
            lcd_gotoxy(1,1);
            printf(lcd_putc,"%f,"numero);


Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: comunicacion entre pics yy rs232, y lectura analogas
« Respuesta #4 en: 26 de Enero de 2011, 22:16:07 »
Hola.

La función atof pasa un string a un valor float ... y tu estas enviado como parametro un char  :?
Código: [Seleccionar]
char string [10];

float x;

 

strcpy (string, "123.456");

x = atof(string);

// x is now 123.456

El ejemplo lo dice todo.  :mrgreen:

Debes cambiar la rutina de interrupcion serial, de tal manera que se vayan almacenando los bytes recibidos en un bufer y asi poder usar la funcion correctamente.

Saludos
El papel lo aguanta todo

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: comunicacion entre pics yy rs232, y lectura analogas
« Respuesta #5 en: 27 de Enero de 2011, 20:01:36 »
Qué tal todos!

Japifer, y no has pensado en la opción de que el pic que haga la conversión A/D mande el dato tal cual de la conversión (si usas conversión a 8bits, sólo tendrías que mandar un byte, y tendrías sensibilidad -si ese no es el término correcto me corrigen por favor- de unos 0.02V)... y que sea el pic receptor el que haga los cálculos en float y muestre en el LCD?

Bueno es sólo una sugerencia, para ahorrarte trabajo con los strings -aunque como te está explicando MLO, tampoco es algo del otro mundo, pero para los novatos como nosotros la cosa a veces se nos pone difícil jeje-...

Ok avisa si lograste resolver...

Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: comunicacion entre pics yy rs232, y lectura analogas
« Respuesta #6 en: 28 de Enero de 2011, 17:23:02 »
hola, gracias por la sujerencia y correccion, aver si con lo que dicen puedo lograr algo.

Desconectado tinchomar

  • PIC10
  • *
  • Mensajes: 9
Re: comunicacion entre pics yy rs232, y lectura analogas
« Respuesta #7 en: 04 de Febrero de 2011, 21:37:28 »
hola, gracias por la sujerencia y correccion, aver si con lo que dicen puedo lograr algo.

Hola japifer_22 , lograste algun avance en el programa que estabas realizando? Yo ando en las mismas...
Saludos.


 

anything