Autor Tema: Problema al recibir datos de una pc a un pic16f877a via RS232  (Leído 1874 veces)

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

Desconectado gokesefa

  • PIC10
  • *
  • Mensajes: 4
Problema al recibir datos de una pc a un pic16f877a via RS232
« en: 19 de Octubre de 2014, 17:52:54 »
Bueno foreros explico mi problema, en mi PC hice un formulario en VB.NET y envio un total de 7 datos
CODIGO EN VB.NET
Código: [Seleccionar]
SerialPort1.Write(freca)
            SerialPort1.Write(frere)
            SerialPort1.Write(tieca)
            SerialPort1.Write(tierec)
            SerialPort1.Write(tierel)
            SerialPort1.Write(tiecon)
            SerialPort1.Write(tiese)
este ultimo valor tiese, puede ser por ejemplo 30, lo envio por el puerto serial y los recibo los datos en mi pic, uso programacion en CCS, pero solo quiero recibir los datos 1 sola vez para poder trabajar con ellos, recibo los datos de la siguiente manera en C
Código: [Seleccionar]
void variables()
{
   freca=getc();
   frere=getc();
   tieca=getc();
   tierec=getc();
   tierel=getc();
   tiecon=getc();
   tiese=getc();
}
estos datos los despliego en un LCD para ver si es que mis variables que me estan llegando son correctas, ademas, uso un Virtual Terminal del proteus, para ver si efectivamente los datos estan llegando, por el Virtual Terminal si puede verse que envio el dato 30, pero cuando lo despliego por el LCD, el valor que me manda es solo 3, eso queire decir q mi variable no es la que deberia (pasa esto cono todos los numeros mayores a 9), necesito una solucion urgente porfavor

PS.- Tengo claro que los datos me  llegan en ASCII es por eso que los datos (1-9) me llegan como (49-58) y les resto 48 para vovlerlos decimales. Para desplegar mis datos en el LCD guardo mis variables en otra variable tipo CHAR para poder desplegar mis datos
« Última modificación: 19 de Octubre de 2014, 18:06:45 por gokesefa »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema al recibir datos de una pc a un pic16f877a via RS232
« Respuesta #1 en: 19 de Octubre de 2014, 18:27:11 »
  Hola.
  Si envías 30 como string (es decir que enviarías el caracter '3' y luego el caracter '0') no puede recibirlo con getc, ya que esta función sólo recibe un caracter. Tendrías que utilizar dos getc seguidos y almacenar lo leído en un array.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado gokesefa

  • PIC10
  • *
  • Mensajes: 4
Re: Problema al recibir datos de una pc a un pic16f877a via RS232
« Respuesta #2 en: 19 de Octubre de 2014, 18:40:24 »
Gracias por responder AngelGris, en efecto acabo de revisar creando una variable auxiliar llamada 'rs' en la que vuelvo a leer el dato recibido, y si por ejemplo envio 24, en mi variable real guarda el 2 y en mi axuliar rs guarda 4, bueno ahi encontre LA RAZON AL PROBLEMA ahora resulta que soy nuevo en esto, y me genero a mi mismo algunas dudas mas
1) Si creo un array, lo creo para una sola variable o para todas? creo q deberia ser para cada una no?
1.1) En el caso en el que cree para cada variable un arreglo diferente, como voy a saber si el dato que esta llegando es de 1,2 o 3 digitos?
1.2) Si creo un array para guardar todos los datos que lleguan, entonces, en un espacio del array se guaradara mi variable "24" o en un espacio 2 y en otro el 4?
1.2.1) Como puedo juntar los datos de un array? solo guardandolos en una variable tipo entera?
De antemano muchas gracias

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema al recibir datos de una pc a un pic16f877a via RS232
« Respuesta #3 en: 19 de Octubre de 2014, 22:11:05 »
Gracias por responder AngelGris, en efecto acabo de revisar creando una variable auxiliar llamada 'rs' en la que vuelvo a leer el dato recibido, y si por ejemplo envio 24, en mi variable real guarda el 2 y en mi axuliar rs guarda 4, bueno ahi encontre LA RAZON AL PROBLEMA ahora resulta que soy nuevo en esto, y me genero a mi mismo algunas dudas mas
1) Si creo un array, lo creo para una sola variable o para todas? creo q deberia ser para cada una no?
1.1) En el caso en el que cree para cada variable un arreglo diferente, como voy a saber si el dato que esta llegando es de 1,2 o 3 digitos?
1.2) Si creo un array para guardar todos los datos que lleguan, entonces, en un espacio del array se guaradara mi variable "24" o en un espacio 2 y en otro el 4?
1.2.1) Como puedo juntar los datos de un array? solo guardandolos en una variable tipo entera?
De antemano muchas gracias

  Sí cada uno de los datos que esperas recibir puede tener más de un caracter, creo que deberías crear un array para cada variable.

  ¿Para qué necesitas saber si el dato es de 1, 2 o 3 dígitos?

  Cuando defines un array, del tipo int, cada "subdato" del array ocupa el espacio de una variable int. Es decir que si tienes algo así....

Código: C
  1. char dato[9]

es como tener 9 variables del tipo char, a las cuales puedes acceder individualmente utilizando un índice. Por ejemplo

Código: C
  1. dato[5] = '2';
  2. dato[6] = '4';
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado gokesefa

  • PIC10
  • *
  • Mensajes: 4
Re: Problema al recibir datos de una pc a un pic16f877a via RS232
« Respuesta #4 en: 22 de Octubre de 2014, 19:38:16 »
Hola gracias por responder pero aun no entiendo que debo hacer, pues no uso un ciclo infinito para llamar y cuando creo un array y quiero mostrar en el LCD no me bota nada, soy muy novato en esto foreros :( y la verdad esq este punto de enviar variables de 2 o 3 digitos es lo q me estanca en mi proyecto y esq debo enviar todos los datos al mismo tiempo, quisiera arreglarlo, pero como dicen aqui "tendrian que explciarme con chubis"

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Problema al recibir datos de una pc a un pic16f877a via RS232
« Respuesta #5 en: 23 de Octubre de 2014, 12:46:58 »
Si envias los datos como un array de bytes, no los codifica en ASCII:

Código: [Seleccionar]
Dim bytearray() As Byte = {83, 49, 3, 64, 212, 13}   'or {&H53, &H31, &H03, &H40, &HD4, &H0D}
SerialPort1.Write(bytearray, 0, bytearray.Length)

Si no, tenés que cambiar la codificación del puerto serie:
Código: [Seleccionar]
SerialPort1.Encoding = System.Text.Encoding.GetEncoding(1252)
Saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein


 

anything