none
Recibir datos por puerto serial desde PIC y mostrarlo en textbox RRS feed

  • Pregunta

  • Tengo un lector ADC con PIC16F887 el cual funciona bien y puedo tener control sobre el desde un programa de terminal (uso Hércules), le mando una señal y el pic responde enviándome los valores leídos por el ADC en la terminal.

    Tengo una interfaz echa en Visual Studio con C# en el cual selecciono el puerto COM en un combobox para hacer la conexión al pic, el programa si manda la señal al pic pero no logro leer los datos recibidos desde el pic y desplegarlos en un textbox (hice el programa en consola y funciono adecuadamente).

    Este es el código que esta cargado en el pic, por el momento esta comentado Pins_1 para enviar la cadena "los datos que manda" no he logrado leer cualquiera de los dos tipos de dato en C#

    #INCLUDE <16f887.h>
    #device adc=10
    #USE DELAY(CRYSTAL=4000000)
    #FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP
    #use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)
     
    #byte puerto_D = 0x08
    #byte puerto_C = 0x07
    #byte puerto_B = 0x06 
    
    //ng bitan;
    float bitan;
    float voltan;
    int dato;
    
    void Pins_1(void) {
       setup_adc_ports(SAN0);
       setup_adc(adc_clock_internal);
          
      
          set_adc_channel(1);
          delay_ms(1);
          bitan = read_adc();
          voltan = bitan*5.0/1023;
          delay_ms(7);
          printf("%f", voltan);
    }
    void main()
    {
       set_tris_d(0x00);
       set_tris_c(0b11000000);
       
       while(1)
       {
          dato = getc();
          if(dato = 1){
          printf("los datos que manda");
             //Pins_1();
          }
       }
    }

    Este es el código en C# por el momento tengo el error: cannot convert from 'int' to 'string' pero en otras intento he logrado solucionar ese problema pero no obtener la lectura del pic.

    private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                rev = serialPort1.ReadExisting();
            }
    
                            
            private void BtnScan_Click(object sender, EventArgs e)
            {
                serialPort1.Write(1);
    
                txtResults.Text = rev;
                label2.Text = rev;
            }

    les agradezco cualquier ayuda que me den o idea para solucionar el problema. 

    martes, 2 de julio de 2019 19:39

Respuestas

  • Cambie el TextBox por un RichTextBox y ya puedo leer los datos enviados por el pic, ahora solo me falta resolver un problema que imprime el mensaje en repetidas ocasiones.
    • Propuesto como respuesta eRiver1 viernes, 5 de julio de 2019 22:25
    • Marcado como respuesta josue.mireles16 martes, 9 de julio de 2019 13:21
    viernes, 5 de julio de 2019 15:04

Todas las respuestas

  • Hola

     lo que pasa es que la lectura del puerto esta en otro hilo y ocupas incertarla en el hilo principal de vista

    ocupas delegrala

    public delegate void Function();// esta es general
            
    // esto  incertalo en la funcion
    private void BtnScan_Click(object sender,EventArgs e)
    {
       serialport1.Write(1);
       this.Invoke(new Function(delegate ()
       {
           txtResult.Text = rev;
           label2.Text = rev;
        }));
    }

    miércoles, 3 de julio de 2019 2:54
  • Gracias, he intentado lo que me sugeriste, el resultado es el mismo, no tengo ningún error de compilación pero no logro visualizar los datos que envía el pic en el textbox ni en el label.
    miércoles, 3 de julio de 2019 14:42
  • Hola

    y con el debbuger nececitaras ver si te retorna algo

    o intenta con esto en el data recieved

    private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
       rev = serialPort1.ReadExisting();
       txtResults.Text = rev;
       label2.Text = rev;
    }

    • Editado Marti Llam jueves, 4 de julio de 2019 2:37
    jueves, 4 de julio de 2019 2:33
  • Lo del data received ya lo intente anteriormente y no dio resultado (de todas formas intentare de nuevo), desconozco como ver si retorna datos por medio del debugger pero lo investigare
    jueves, 4 de julio de 2019 12:41
  • Hola

    en  serialPort1_Data_recieved pones un breack point

    lo continuas ejecutandob paso a paso con F10

    en la ventana Locals te aparecen de forma dinamica las variables

    cuando cambian a rojo es que cambio el valor

    jueves, 4 de julio de 2019 13:13
  • Cambie el TextBox por un RichTextBox y ya puedo leer los datos enviados por el pic, ahora solo me falta resolver un problema que imprime el mensaje en repetidas ocasiones.
    • Propuesto como respuesta eRiver1 viernes, 5 de julio de 2019 22:25
    • Marcado como respuesta josue.mireles16 martes, 9 de julio de 2019 13:21
    viernes, 5 de julio de 2019 15:04