none
Hacer un ainterfaz sencilla para PIC RRS feed

  • Pregunta

  • Hola:

    Ya que estamos con Visual Studio Express gratuito. Quiero saber si hay gente por aquí cerca que haya programado un programa visual muy sencillo que sea capaz de grabar un PIC16F84A y EEPROM con el TE20 por puerto serie.

    Estoy liado que no puedo grabar pic con WinPic800, ni el ic-prog ni tampoco con el USB PIC Programmer con Windows 7 64 Bits. Ya se los comenté al de Winpic800 y no se si lo hará. Lo que se me ocurre es usar VirtualBox con Windows XP 32 bits dentro de ella que haré dentro poco.


    El programa es simple. Solo usaré PIC con el cual se usa mucho, en mi caso el 16F84A y 16F88 por el memento aunque tengo más por ahí como los 18Fx550. Por ahora nos centramos en intentar programa y ser capaz de granar un .hex al PIC16F84A. No se como será el tema, pero el protocolo de comunicación para enviar datos por puerto serie RS232 aquí y aquí tienes una idea de como hacerlo.

    El primer prototipo no haré configuración de bit ni mostraré los códigos en pantalla, solo que seleccione un .hex que tenga por ahí en Windows y con un botón sea capaz de grabar el PIC16F84A mediante el TE20 que funciona con el puerto serie.

    Cualquier información para empezar es útil. Con el tiempo ya se verá si loharé bonito como los demás grabadores.

    Saludo.
    miércoles, 15 de diciembre de 2010 22:46

Respuestas

Todas las respuestas

  • yo tengo el programa indicado para grabar el pic 16f84a como lo envio usted nunca esta en msn
    sábado, 18 de diciembre de 2010 15:06
  • Ahora mismo estoy empañado en lograr grabar un .hex desde C# por puerto serie RS232.

    No se si es la manera adecuada para enviar un archivo. En realidad el .hex es un .txt.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    using System.IO.Ports; // No olvidar estos using.
    
    namespace RS232_a
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
        }
    
        private void button_Abrir_Click(object sender, EventArgs e)
        {
          if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
              textBox1.Text = openFileDialog1.FileName;
            }
    
        }
    
        private void button_Enviar_Click(object sender, EventArgs e)
        {
          serialPort1.Open();
          byte[] mBuffer = Encoding.ASCII.GetBytes(textBox1.Text.ToString());
          serialPort1.Write(mBuffer, 0, mBuffer.Length);
          serialPort1.Close();
          label1.Text = "Enviado";
        }
      }
    }

    Si encuentras otro código para enviar un archivo .txt o .hex por puerto COM lo ponen por aquí. Aún sigo investigando haber que tal. Puse

     

    Encoding.ASCII.GetBytes(textBox1.Text.ToString()); no creo que sea muy cierto para enviar un.txt por puerto serie. El que sepa una ayudita.

    Debe ser algo así:

    serialPort1.Open();
          byte[] mBuffer = Encoding.ASCII.GetBytes(@"C:\carpeta\nombre.txt");
          serialPort1.Write(mBuffer, 0, mBuffer.Length);
          serialPort1.Close();
     

    domingo, 19 de diciembre de 2010 13:18
  • Con el ejemplo que puse arriba, me da la impresión que sólo estoy enviando la ruta en byte al puerto serie, no el contenido del .hex (en realidad es un .txt). Espero que no me pase esto.

    domingo, 19 de diciembre de 2010 15:59
  • CUANDO YO ENVIO TEXTO POR PUERTO SERIE LO ENVIO ASI

    TEXTO

    SERIALPORT.WRITE("TEXTO" + CHR(13))

    BYTE ASI

     

    SERIALPORT.WRITE(COSASENBYTE,0,COSASENBYTE.LENGTH)

    HEX

    SERIALPORT.WRITE(&HFF,&H41,&H67)

    RECUERDA QUE SIEMPRE TIENES QUE AGREGAR EL CRC CUANDO ENVIAS EN TEXTO BYTE Y HEX

    domingo, 19 de diciembre de 2010 16:53
  • Buenas:

    En este caso quiero saber enviar un archhivo.hex, aunque sea un .jpg, .bmp, .gif, etc. Quiero enviar el contenido del .hex o .txt. Eso es lo que no soy capaz de hacer.

    ¿Qué eso de que tengo que recordar en agruegar el CRC? ¿A qué llamas CRC?

    Tampoco me funciona así:

        private void button_Enviar_Click(object sender, EventArgs e)
        {
          serialPort1.Open();
          string mBuffer = @"C:\carpeta\nombre_archivo.txt";
          serialPort1.Write(mBuffer);
          serialPort1.Close();
          MessageBox.Show("Enviado.");
        }
    

    Saludo.


    domingo, 19 de diciembre de 2010 17:16
  • subi un programa agrega la forma de cargar el text en el textbox1 y lo en via con el boton enviar

    http://hotfile.com/dl/90567447/0c304c4/EL_NUEVO_RS232_MEJORADO.rar.html ojala sirva

    • Marcado como respuesta Metaconta domingo, 19 de diciembre de 2010 23:00
    domingo, 19 de diciembre de 2010 18:32
  • Hola:

    Lo he traducido al C# con este enlace.

    using Microsoft.VisualBasic;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Data;
    using System.Diagnostics;
    public class Form1
    {
    	private System.IO.Ports.SerialPort withEventsField_RS232 = new System.IO.Ports.SerialPort();
    	private System.IO.Ports.SerialPort RS232 {
    		get { return withEventsField_RS232; }
    		set {
    			if (withEventsField_RS232 != null) {
    				withEventsField_RS232.DataReceived -= RS232_DataReceived;
    			}
    			withEventsField_RS232 = value;
    			if (withEventsField_RS232 != null) {
    				withEventsField_RS232.DataReceived += RS232_DataReceived;
    			}
    		}
    	}
    	public delegate void WriteDataDelegate(string str);
    
    	private void Form1_Load(System.Object sender, System.EventArgs e)
    	{
    		foreach (string strPort in My.Computer.Ports.SerialPortNames) {
    			ComboBox1.Items.Add(strPort);
    		}
    		if (ComboBox1.Items.Count > 0) {
    			ComboBox1.SelectedIndex = 0;
    
    		} else {
    		}
    	}
    
    	private void Button1_Click(System.Object sender, System.EventArgs e)
    	{
    		string SelectedPort = ComboBox1.SelectedItem;
    		try {
    			RS232 = My.Computer.Ports.OpenSerialPort(SelectedPort, 9600, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
    			TextBox1.AppendText(RS232.PortName + " abierto a las " + DateAndTime.Now.ToString() + Constants.vbCrLf);
    			ComboBox1.Enabled = false;
    		} catch (System.IO.IOException ex) {
    			TextBox1.AppendText("Error abriendo el puerto: " + Constants.vbCrLf + ex.Message + Constants.vbCrLf);
    		} catch (System.UnauthorizedAccessException ex) {
    			TextBox1.AppendText("El pueto ya esta abierto: " + Constants.vbCrLf + ex.Message + Constants.vbCrLf);
    		} catch (System.Exception ex) {
    			TextBox1.AppendText("Error general accediendo al puerto:" + Constants.vbCrLf + ex.Message + Constants.vbCrLf);
    		}
    	}
    
    	private void Button2_Click(System.Object sender, System.EventArgs e)
    	{
    		RS232.Close();
    		TextBox1.AppendText(RS232.PortName + " cerrado a las " + DateAndTime.Now.ToString() + Constants.vbCrLf);
    		ComboBox1.Enabled = true;
    	}
    
    	private void Button3_Click(System.Object sender, System.EventArgs e)
    	{
    		if (TextBox2.Text.Length > 0 && RS232.IsOpen) {
    			RS232.NewLine = Constants.vbCrLf;
    			TextBox1.AppendText("Cadena enviada: " + TextBox2.Text.Trim);
    			RS232.WriteLine(TextBox2.Text.Trim);
    		} else {
    			TextBox1.AppendText("Nada ha sido enviado" + Constants.vbCrLf);
    		}
    	}
    	private void WriteData(string str)
    	{
    		TextBox1.AppendText(str);
    	}
    	private void RS232_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    	{
    		string strData = RS232.ReadExisting();
    		WriteDataDelegate WriteInvoke = new WriteDataDelegate(this.WriteData);
    		this.Invoke(WriteInvoke, strData);
    	}
    	public Form1()
    	{
    		Load += Form1_Load;
    	}
    }
    
    

    Por lo que veo, funciona enviando datos. No archivo. Me he dado cuenta que para grabar el PIC se necesita un protocolo llamado ICSP.

    http://www.redeweb.com/_txt/artikel/800303.pdf

    Página 185.
    http://ww1.microchip.com/downloads/en/devicedoc/30277d.pdf

     

    ;)


    domingo, 19 de diciembre de 2010 22:59