TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: pantera en 02 de Septiembre de 2006, 18:38:23

Título: ¿Como debe recibir un dato por el puerto Serial?
Publicado por: pantera en 02 de Septiembre de 2006, 18:38:23

     Hola:
           
     Hola estado trabajando con el puertos serial. Con el PIC y con visual Basic.

      El manejo de dato se hace correctamente.

     El problema es que cuando mando un dato por Visual Basic => Esta sale del puerto en formato ASCCI, creo, Si mando un dato por ejemplo, el cero, "0" este llega con un 48 mediante la funcion getc().

Código: C
  1. if(kbhit()){
  2.  
  3.         Dato1 = getc();
  4.         Dato2 = fgetc();
  5.         Dato3 = getch();
  6.         Dato4 = getchar();
  7.  
  8.  
  9.                 lcd_gotoxy(1,1);
  10.                 printf(LCD_PUTC,"%u   %u        ",Dato1,Dato2);
  11.  
  12.                 lcd_gotoxy(1,2);
  13.                 printf(LCD_PUTC,"%u   %u        ",Dato3,Dato4);
  14.  
  15.                 delay_ms(5000);
  16.                 delay_ms(5000);
  17.  
  18.      }
       
Título: Re: ¿Como debe recibir un dato por el puerto Serial?
Publicado por: Deimos en 02 de Septiembre de 2006, 20:06:02
Efectivamente. Todo lo que serialices en VB por el comm serie del PC saldrá en ASCII, si utilizas el getc(). Para hacer pruebas puedes usar el programa TERMINAL, que está en todos los windows. Si mandas la A mayúscula, te saldrá el 65 decimal, B 66d, C 67d y así.

Puedes consultar la tabla ascii en http://www.asciitable.com/

La verdad es que no se si tu mensaje es una pregunta, un problema o un descubrimiento jajajaja pero en definitiva, si mandas un dato en VB por comm serie, el pic lo recibe en ascii

espero haber sido de ayuda
Título: Re: ¿Como debe recibir un dato por el puerto Serial?
Publicado por: pantera en 02 de Septiembre de 2006, 20:52:00
 Si era una pregunta , jeee.

Pero mas bien lo que me interesa hacer es mandar un dato entero [0-255] .

Mira, lo que quiere hacer es escribir un dato entero desde una caja texto en visual basic. Y recibir el dato entero [Ya se enviaria en ASCII]. Y esa dato mandarlo a un PWM dentro del micro.

El codigo de visual basic es el siguiente:
Código: Visual Basic
  1. Private Sub Texto_a_Enviar_Click()
  2. Dim texto_salida As Variant
  3.  
  4. texto_salida = CByte(Texto_Mensajes.Text)
  5. texto_salida = CStr(texto_salida)
  6.  
  7. On Error GoTo Error_Enviando
  8. MSComm1.Output = texto_salida
  9. GoTo salir
  10.  
  11. Error_Enviando:
  12.      Valor_MsgBox = MsgBox(" Error al intentar enviar el texto" & Chr(13) & Chr(10) & Chr(10) & "Descripcion:" & Err.Description, vbCritical, "ERROR")
  13.    Resume salir
  14.    
  15. salir:
  16. End Sub

y el codigo en  el pic es:

Código: C
  1. while(TRUE){
  2.         char Dato1,Dato2,Dato3,Dato4;
  3.  
  4.      if(kbhit()){
  5.  
  6.         Dato1 = getc();
  7.        
  8.         Dato2 = fgetc();
  9.         Dato3 = getch();
  10.         Dato4 = getchar();
  11.  
  12.  
  13.                 lcd_gotoxy(1,1);
  14.                 printf(LCD_PUTC,"%c   %c        ",Dato1,Dato2);
  15.  
  16.                 lcd_gotoxy(1,2);
  17.                 printf(LCD_PUTC,"%c   %c        ",Dato3,Dato4);
  18.  
  19.                 delay_ms(5000);
  20.                 delay_ms(5000);
  21.  
  22.         }}


Esto en Labview se hace sumamente facil pero tengo la necesidad de hacerlo en Visual Basic 6
Título: Re: ¿Como debe recibir un dato por el puerto Serial?
Publicado por: BrunoF en 02 de Septiembre de 2006, 21:19:01
Hola pantera.
¿Y cual es el problema?
Saludos.
Título: Re: ¿Como debe recibir un dato por el puerto Serial?
Publicado por: pantera en 02 de Septiembre de 2006, 23:39:50
Mira ya solucione.

Mediante la siguien forma

Código: Visual Basic
  1. Private Sub Texto_a_Enviar_Click()
  2. Dim texto_salida As Variant
  3.  
  4. texto_salida = CByte(Texto_Mensajes.Text)
  5. texto_salida = Chr(texto_salida)
  6.  
  7. On Error GoTo Error_Enviando
  8.  
  9. MSComm1.Output = texto_salida
  10.  
  11. GoTo salir
  12.  
  13. Error_Enviando:
  14.      Valor_MsgBox = MsgBox(" Error al intentar enviar el texto" + Chr(13) + Chr(10) + Chr(10) + "Descripcion:" + Err.Description, vbCritical, "ERROR")
  15.    Resume salir
  16.    
  17. salir:
  18. End Sub

Lo que no comprendia es que tenia que mandar un caracter [0-255].

Ahora si mando un 48 [0 en ascii], manda un carcter "0". Y el microcontrolador recibe el numero 48 .

Ahora puedo mandar datos int8  [0-255].


¿Lo que pregunto ahora es si puedo mandar datos mas grandes a 255, Quizas un int16 ?
Título: Re: ¿Como debe recibir un dato por el puerto Serial?
Publicado por: BrunoF en 03 de Septiembre de 2006, 00:22:20
Por supuesto que puedes!

Saludos.
Título: Re: ¿Como debe recibir un dato por el puerto Serial?
Publicado por: Deimos en 03 de Septiembre de 2006, 06:59:16
Exacto. El valor que tu necesitas lo mandas en ascii, es decir, que en vez de mandar el valor que necesitas, lo ke tienes que mandar es el ascii y ya está, una vez en el micro puedes montar un diccionario que traduzca el ascii que recibe al valor que tu quieres. Esto te lo digo porque veo que lo que quieres hacer es controlar una pwm mediante un pc. Tu el valor de pwm lo envias al micro y este es el que genera la pwm.

Otra manera es montar el diccionario dentro del PC en VB. O sea, que si calculas una pwm le mandas ese valor al micro en ascii. Muy fácil ya verás. Recuerda que tienes que añadir al VB la libreria para comunicar via seria. Te saldrá un icono que representa un teléfono.

Venga herman@, que halla mucha suerte

Dewsss