# Manual Puerto serie RS232 Con PIC16F84A controlado por Visual C#



## Meta (Dic 4, 2008)

Hola:

_En primer lugar pido perdón si esto no va  aquí._

Presento _*Manual Puerto serie RS232 Con PIC16F84A controlado por Visual C#*_ en el que podrás aprender a controlar un PIC mediante una Interfaz en el PC bajo Visual C# .net.

Aún así, por falta de tiempo no he acabado la parte de MonoDevelop en Linux cosa que haré en el futuro ya en el 2009. Que sepan que también continuaré solo las primeras 200 páginas con _Visual Basic .net_ (depende de la demanda lo haré también con _Visual Basic 6_) y _Visual C++_ otras 200.

Por ahora no he encontrado un lugar donde poder descargarlo directamente en PDF.

Ver Manual

Descargar 1ª parte
Descargar 2ª parte

Si estás registrado, hay una opción para bajarlo en PDF.

*Ver vídeo*:
YouTube - RS232 con PIC 16F84A y Visual C#

Espero cualquier opinión, duda, preguntas sobre errores que puedan encontrar y mejoras del manual.

Un cordial saludo.


----------



## pic-man (Dic 4, 2008)

Gracias por compartir este manual Meta, si quieres con gusto te puedo ayudar a pasarlo a Visual Basic 2008. Voy a checar tu manual.


----------



## Meta (Dic 4, 2008)

Gracias, la verdad que si necesito ha alguien para poder pasarlo sin errores a Basic ya que no lo entiendo. Aunque tenía intención de ir a foros sobre Visual Basic.

Recuerda que _Visual Basic 6_ y *Visual Basic .net* ha cambiado mucho y no se programa igual.

*A ver si puedo colgar el PDF directamente aquí.*

Si lo pasamos a Visual Basic .net 2008, empezaré ha instalarlo. Visual C# y más aún Visual Basic lo quiere programar todo el mundo y eso que no me he metido con los puertos paralelos, que tengo intención de hacerlo.

Quizás esto nos ayude un poco. El cambiar de C# a Basic y al revés.
http://www.developerfusion.com/tools/convert/csharp-to-vb/


----------



## pic-man (Dic 4, 2008)

Que buena página!


----------



## Meta (Dic 4, 2008)

Si te funciona el truco del Visual C# que he hecho a Visual Basic me avisas.

Suerte con la página.


----------



## kain589 (Feb 17, 2009)

Saludos! Muy bueno el proyecto y el manual, te he leido en varios hilos hablar sobre hacer un manual para vb.net ¿sabes ya la forma de hacerlo? Es que lo he estado intentado, pero no consigo enviar y recibir datos tipo byte, solo encuentro ejemplos con cadenas de caracteres. He intentado adaptar codigos, y no consigo una recepcion limpia de datos.


----------



## Meta (Feb 18, 2009)

kain589 dijo:
			
		

> Saludos! Muy bueno el proyecto y el manual, te he leido en varios hilos hablar sobre hacer un manual para vb.net ¿sabes ya la forma de hacerlo? Es que lo he estado intentado, pero no consigo enviar y recibir datos tipo byte, solo encuentro ejemplos con cadenas de caracteres. He intentado adaptar codigos, y no consigo una recepcion limpia de datos.



Estoy trabajando con el manual para *Visual C++* que he logrado enviar datos y *Visual Basic .net 2008* que también he logrado enviar datos pero con una forma de programar que no me hace mucha gracia pero funciona.

Dentro del formulario principal si el proyecto es nuevo se llama Form1, colocas un button1 y el componente serialPort1.

Pincha dos veces el buttón1 o botón y te aparecerá esto.


```
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
    End Sub
```

Dentro de ella escribe este código:


```
SerialPort1.Open()
        Dim mBuffer As Byte() = New Byte(0) {}
        mBuffer(0) = &H74 'ASCII letra "t". 
        SerialPort1.Write(mBuffer, 0, mBuffer.Length)
        SerialPort1.Close()
```

*En general el códig completo es:*

```
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SerialPort1.Open()
        Dim mBuffer As Byte() = New Byte(0) {}
        mBuffer(0) = &H74 'ASCII letra "t". 
        SerialPort1.Write(mBuffer, 0, mBuffer.Length)
        SerialPort1.Close()
    End Sub
```

Tengo el manual completo para el Visual C# que quizás te funcione algo o pueda dar ideas para lo que buscas.
http://www.abcdatos.com/tutoriales/tutorial/z9521.html

Saludos


----------



## Moyano Jonathan (Feb 18, 2009)

Meta como estás , mirá con el manual del visual basic 6 te puedo ayudar a armarlo.


----------



## PabloHendrix83 (Abr 1, 2009)

Excelente tutorial. Muchas Gracias!


----------



## aknightofgod (Abr 24, 2009)

Hola man mira, yo estoy haciendo un programa o bueno tengo q hacer un programa q se comunique por medio del serial a una estacion labVolt q es un controlador foxbro modelo 761, en si por lo q entiendo tengo q mandar bloques de numeros en binario o hexadecimal para dar instrucciones y luego leer lo que me regresa, estoy usando half duplex, y una tarjeta q utiliza un max232, pero soy una basura en programacion o al menos aun lo soy, no sabes donde pueda encontrar un manual de C# o Visual basic, y que me recomendarias aprender, q sea a primera instancia mas facil o q si lo aprendo me pueda ayudar con mi problema, espero me puedas responder pronto y muchas gracias de antemano.


----------



## Meta (May 9, 2009)

Bueno, aquí hay también de Visual basic.

http://www.abcdatos.com/tutoriales/tutorial/v12.html

Saludo.


----------



## aknightofgod (May 11, 2009)

Hola man, disculpa q te moleste por aqui, pero ya no se donde postear , mira yo estoy siguiendo tu manual de c# el q hiciste para el pic, de antemano muchisimas gracias por el manual, me ha servido mucho y me ha dado idea de como sacar datos con c#, lo que yo quiero hacer es mandar una cadena de bytes para un controlador foxboro (es una estacion de trabajo muy flexible), pero bueno lo importante es mandar las cadenas, luego recibirlas y decodificarlas por asi decir, la primera parte creo q ya la tengo hecha gracias a tu manual esto es lo que puse

      private void button1_Click(object sender, EventArgs e)
           {
             {  int count = 7;        //esto creo q esta de mas pero no estoy seguro
                byte[] mBuffer = new byte[8];   
                mBuffer[0] = 0x10; // DLE
                mBuffer[1] = 0x02; //STX 
                mBuffer[2] = 0x01; //cont addr
                mBuffer[3] = 0x0B; //Poll command
                mBuffer[4] = 0x10; //DLE 
                mBuffer[5] = 0x03; //ETX
                mBuffer[6] = 0B; //crc alto
                mBuffer[7] = 0xA9; //crc bajo
                serialPort1.Write(mBuffer, 0, mBuffer.Length); } 
        }

claro despues de usar el if que pusiste para abrir el puerto, de nuevo gracias,

ahora lo q se supone mi programa debe de hacer es leer inmediatamente despues de mandar eso para recibir datos, el problema es q al igual q lo q mande me va a enviar una cadena de bytes, lo cual no se como estar muestreando y guardando cada byte, me estoy guiando mas o menos por tu manual para al menos recibirlo como string, y poder mostrar algo q me muestre en el textbox tal como lo haces tu con el pic, eso ya esta hecho gracias a ti basicamente, pero pues no lo he probado para ver q sale, ahora estaba buscando una pagina q una vez vi aqui q te ayudaba a pasar codigos de vb a c#, porq tengo algo q te hace lo que quiero, q de ahi tambien me estoy basando un poco, te lo posteo a continuacion

Private Sub Command1_Click()
Timer1.Enabled = True

End Sub

Private Sub Command2_Click()
End
End Sub

Private Sub Timer1_Timer()
    Dim Count As Integer
    Dim s As Integer
    Dim t As Long
    Dim x As Double
    Dim y As Double
    Dim a As Integer
    Dim b As Long
    Dim c As Double
    Dim d As Double
    Dim e As Integer
    Dim f As Long
    Dim g As Double
    Dim h As Double
   Dim largo1 As Integer
   Dim bin3 As String
   Dim bin4 As String
   Dim cadena1 As String
   Dim largo2 As Integer
   Dim bin6 As String
   Dim bin5 As String
   Dim cadena2 As String
   Dim largo As Integer
   Dim bin As String
   Dim bin2 As String
   Dim cadena As String
    Dim poll_cmd(0 To 7) As Byte
    Dim poll_resp(0 To 23) As Byte
    Const DLE = &H10, STX = &H2, ETX = &H3
    Const addr = &H1, poll = &HB
    poll_cmd(0) = DLE
    poll_cmd(1) = STX
    poll_cmd(2) = addr
    poll_cmd(3) = poll
    poll_cmd(4) = DLE
    poll_cmd(5) = ETX
    poll_cmd(6) = &HDB
    poll_cmd(7) = &HA9
    envio = poll_cmd()
    MSComm1.Output = envio

/////////////////segun yo la parte que esta aqui arriba es lo q llevo hecho, ahora para loo siguiente es lo q tengo q hacer
    MSComm1.InputLen = 24
    If MSComm1.InBufferCount Then
    recibe = MSComm1.Input
    For Count = 0 To (LenB(recibe) - 1)
    poll_resp(Count) = CByte(recibe(Count))
    List1.AddItem poll_resp(Count)
    Next Count
    End If

////////////////// lo siguiente es pura decifracion segun yo..., hace una parte de un ciclo crc..., no se si estes familiarizado

    ' Para set point
'asignar la respuesta
x = (poll_resp(13))
y = (poll_resp(14))
'conversion a binario
largo = 7
For K = largo To 0 Step -1
    If x And (2 ^ K) Then
    bin = bin + "1"
    Else
    bin = bin + "0"
    End If
    If y And (2 ^ K) Then
    bin2 = bin2 + "1"
    Else
    bin2 = bin2 + "0"
    End If
Next
'concatenacion
cadena = (bin & bin2)
'binario a decimal
For s = 1 To 16
t = t + (Mid(cadena, Len(cadena) - s + 1, 1) * (2 ^ (s - 1)))
Next s
'resultado
Text1.Text = t / 20
Text2.Text = t

' Para control de variable
'conversion a binario
c = (poll_resp(15))
d = (poll_resp(16))

largo2 = 7
For M = largo2 To 0 Step -1
    If c And (2 ^ M) Then
    bin6 = bin6 + "1"
    Else
    bin6 = bin6 + "0"
    End If
    If d And (2 ^ M) Then
    bin5 = bin5 + "1"
    Else
    bin5 = bin5 + "0"
    End If
Next
'concatenacion
cadena2 = (bin6 & bin5)
'binario a decimal
For a = 1 To 16
b = b + (Mid(cadena2, Len(cadena2) - a + 1, 1) * (2 ^ (a - 1)))
Next a
'resultado
Text3.Text = b / 20
Text4.Text = b

'asignar la respuesta

' Para valor de salida
'conversion a binario
g = (poll_resp(17))
h = (poll_resp(18))
largo1 = 7
For R = largo1 To 0 Step -1
    If g And (2 ^ R) Then
    bin3 = bin3 + "1"
    Else
    bin3 = bin3 + "0"
    End If
    If h And (2 ^ R) Then
    bin4 = bin4 + "1"
    Else
    bin4 = bin4 + "0"
    End If
Next
'concatenacion
cadena1 = (bin3 & bin4)
'binario a decimal
For e = 1 To 16
f = f + (Mid(cadena1, Len(cadena1) - e + 1, 1) * (2 ^ (e - 1)))
Next e
'resultado
Text5.Text = f / 39.985
Text6.Text = f

End Sub


Private Sub Form_Load()
Dim K As Integer
Dim poll_cmd(0 To 7) As Byte
Const DLE = &H10, STX = &H2, ETX = &H3
Const addr = &H1, poll = &HB

    poll_cmd(0) = DLE
    poll_cmd(1) = STX
    poll_cmd(2) = addr
    poll_cmd(3) = poll
    poll_cmd(4) = DLE
    poll_cmd(5) = ETX
    poll_cmd(6) = &HDB
    poll_cmd(7) = &HA9

    For K = 0 To 7
    List2.AddItem Hex$(poll_cmd(K))
    Next K

    MSComm1.PortOpen = True

    Timer1.Enabled = False


End Sub

Private Sub Form_unload(Cancel As Integer)

    MSComm1.PortOpen = False
End Sub

bueno no se como seguir con esto, ahora mismo voy a buscar como postear esto tambien, disculpa q te agobie, y de nuevo gracias por tu manual, sin el estaria aun mas perdido xS.


----------



## Henry Diaz (May 28, 2009)

Donde pusiste los manuales que mencionas a principio? en el enlace de fusion de desarrolladores no lo encuentro. Quisiera leerlos para aportar. Gracias.


----------



## Meta (May 28, 2009)

aknightofgod dijo:
			
		

> Hola man, disculpa q te moleste por aqui, pero ya no se donde postear , mira yo estoy siguiendo tu manual de c# el q hiciste para el pic, de antemano muchisimas gracias por el manual, me ha servido mucho y me ha dado idea de como sacar datos con c#, lo que yo quiero hacer es mandar una cadena de bytes para un controlador foxboro (es una estacion de trabajo muy flexible), pero bueno lo importante es mandar las cadenas, luego recibirlas y decodificarlas por asi decir, la primera parte creo q ya la tengo hecha gracias a tu manual esto es lo que puse
> 
> [...]
> 
> ...



Hola *aknightofgod*;

Quizás este manual es Visual Basic .net te resuelva lo que buscas. No me molestas, ahora que estoy  con proyectos y nuevos manuales se me va el tiempo.
http://www.abcdatos.com/tutoriales/tutorial/v12.html

Hola *Henry Diaz*:

Te lo puedes descargar aquí en PDF.
http://www.abcdatos.com/tutoriales/tutorial/z9521.html

Si has podido descargarlo, avisa por aquí para confirmarlo a todo nuevos visitantes.

Saludo.


----------



## Henry Diaz (Jun 4, 2009)

No . Imposible bajarlo se queda en un bucle tanto en la pagina de abcdatos como en el enlace del autor a donde lo remiten si no inicia la descarga. Te agradecemos si lo puedes poner en otro lado. QAP.


----------



## Meta (Jun 4, 2009)

A la gente le funciona bien. Que raro.

Descárgalo por aquí abajo que está en otro servidor.

http://www.pic16f84a.org/index.php?option=com_content&view=category&layout=blog&id=54&Itemid=105

También lo puedes ver aquí en este visor de abajo. Si lo quieres descargar en PDF, debes estar registrado.

http://www.slideshare.net/Metaconta/pic-rs232-puerto-serie-con-pic16f84a-presentation

Si lo has logrado, avisa.

Saludos.


----------



## Henry Diaz (Jun 5, 2009)

Eureka! He logrado verlo. Bien... como tengo un programador de PICs de mi propio diseño (ya probado), este fin de semana estaré en mi salsa experimentando.
Te leí mencionando que proximamente le darás palo al puerto Pararalo y USB y me interesa mucho por cuanto tengo una máquina CNC y un software (realizado con V.Basic 6.0), ambos de mi autoría que trabajan de maravilla pero por el puerto paralelo, y como ya entró en extinción habrá que migrar todo el proyecto a puerto USB... trabajo que tengo! Saludo y gracias por el manual.


----------



## Moyano Jonathan (Jun 6, 2009)

Y migrarlo a un lenguaje .net para que sea compatible con los nuevos sistemas operativos que trabajan con .net framework 3.5


----------



## Henry Diaz (Jun 9, 2009)

Muy seguramente; me comerá unas noches de sueño como lo hizo en su época el VBasic de la mano de "ElGuille" y de tutores de la Universidad. Ahora será con amigos en estos foros...


----------



## Meta (Jun 9, 2009)

Aquí hay uno muy bueno de VB .net:

http://www.recursosvisualbasic.com.ar/

Saludo.


----------



## Moyano Jonathan (Jun 9, 2009)

No te preocupes acá te vamos a ayudar en  todo lo que se pueda.


----------



## Depepees (Feb 14, 2011)

Hola soy nuevo en esto de visual basic me puse hacer un proyecto que publico metaconta de
visual basic y pic y me funciona bien.El pic no esta programado igual sino que incorporo al pic
4 puldadores de forma que puedo apagar y encender desde el pic ò desde el PC.La cuestion es la siguiente,me gustaria que en vez de visualizarse en el texbox si esta apagado o encendido lo ici_
ese por ejemplo en el mismo pulsador,que caambie de color por ejem en el micro los mensajes los
programe asi T=encendido t=apagado A=encendido a= apagado y asi los cuatro supongo que con
esta variable algo se puede hacer pero aunque con los micros me la manejo bien en visual_basic
estoy verde si me podeis hechar una mano os lo agradezco.PEPE


----------



## Alhayn21 (Mar 22, 2011)

Meta dijo:


> *En general el códig completo es:*
> 
> ```
> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
> ...



Hermano acabas de ayudarme como no tienes idea  te lo agradesco mucho, hize mi propio programa en VB con 3 botones que envian señales a un PIC 16f84 por sr232 
gracias


----------



## Depepees (Mar 22, 2011)

Hola Alhayn21 pupongo cuando dices que te he ayudado es que abras visitado comunicacion serial con
visual basic 2008 si no hazlo hay mas informacion,auq7ue no esta terminado hasta ahora pepe


----------



## Alhayn21 (Mar 23, 2011)

Bueno a decir verdad ya tenia tiempo trabajando con el hyperterminal para controlar circuitos pero ahora hize un programa en visual basic 2010 y ese evento me fue de gran utilidad para tener mi propio hyperterminal XD soy nuevo en VB asi que toda la info me es de gran utilidad


----------



## Depepees (Mar 23, 2011)

Hola Alhayn21 yo estoy haciendo un terminal,que yo le llamo interfaz,cuando te refieres a ese evento a que
te refieres,dado que lo mio no esta terminado,haber si as hecho algo que yo pueda aprobechar.yo tambien
soy nuevo en esto de visual,ynecesito una cosa concreta.hata ahora pepe


----------



## Alhayn21 (Mar 23, 2011)

hola Depepees  yo me refiero a este evento:



> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
> SerialPort1.Open()
> Dim mBuffer As Byte() = New Byte(0) {}
> mBuffer(0) = &H74 'ASCII letra "t".
> ...



en mi caso solo diseñe un programa de codigo duro donde a travez de botones mando la señal de algunas teclas predefinidas por mi ya que es para un proposito en especifico, aqui te adjunto mi pequeño programa el cual envia el ascii de la tecla a,b  y espacio. 
Nota: esta configurado para com34 pero puedes moverlo a el com que tu elijas  cualquier duda dime aver que `podemos hacer.


----------



## Meta (Mar 7, 2015)

Hola:

Tengo un tutorial que me falta por acabar. Este se incluye Visual C#, C++, VB .net, VB 6 y Java. También los WPF de C# y VB .net.







El que quiera que los pase para que lo revise la gente del foro, para que me den el visto bueno y no tan bueno para mejorar el tutorial.

De tanto pedirme desde el 2008 el VB 6, al final lo estoy haciendo.

Saludos.


----------

