Lenguajes de programación para PC => Visual Basic => Mensaje iniciado por: djim en 06 de Enero de 2010, 23:59:47
Título: Recepcion a 10bits (Rs_232) y 16F877A
Publicado por: djim en 06 de Enero de 2010, 23:59:47
Hola a todos muchisimas felidades!!!. Les queria hacer una consulta y que me den una mano, lo que necesito es:
* Aquirir un dato analogo desde un MicroControlador (16F877A) * El dato adquirido enviarlo por Rs232 hacia la Pc * Recibir el dato en Visual Basic (6) * Visualizar el dato en forma decimal, el tema de hacer una grafica lo estudiare mas adelante.
Los problemas que tengo son los siguientes:
* La forma que utilizo en el micro para mandar el dato es: atravez de un dato alto y otro dato bajo a 10 bits, la comunicacion esta establecida, visualizo en un textbox el dato recibido pero me parece que es ASCII y solo me muestra eso. * Otra manera que utilize fue: En el micro le hago la conversion DEC a BCD y mando los datos, seria algo asi: si tengo 47,2º, mando el 4 despues el 7 y luego el 2, y al recibirlo en el visual basic le digo que junte los datos de la cadena y los muestre en una texbox (de esta manera funciona) pero lo que sucede es que pienso ampliar el proyecto a por lo menos 6 sensores, mas el Id del sensor, hora y fecha, entonces este sistema no me es de mucha utilidad.
Les adjunto un .rar con el codigo del Pic (ensamblador, hex) y Proyecto Visual Basic. El esquema de conexion es el siguiente.
analogo: RA0 (pata numero 02) txrs232: RC6 (pata numero 25)
Desde ya muchas gracias a todos!!! DJIM
Título: Re: Recepcion a 10bits (Rs_232) y 16F877A
Publicado por: Suky en 07 de Enero de 2010, 08:36:59
En VB.NET yo lo hago de la siguiente manera:
Código: vb.net
Dim Buffer asobject
Dim Data asInteger
Buffer=MSComm.input
Data= Buffer(0)*256+Buffer(1)' Si Primero se envia byte alto.
textbox.text=Data.ToString()' También se puede usar Cstr(Data)
Fíjate en comando equivalente en VB 6.
Saludos!
Título: Re: Recepcion a 10bits (Rs_232) y 16F877A
Publicado por: djim en 10 de Enero de 2010, 05:33:58
Suky: Gracias por contestar, ando re perdido, y para no andar molestando mucho estube leyendo algo. Ahora ya lo hago leer pero solo me lee el dato asta el numero 255 y de ahi vuelve a empesar de 0. Asi lo tengo visualizando el dato, pero no logro hacerlo leer a 1024 o 10 bits.
Private Sub Form_Activate()
MSComm1.CommPort = 1 'Selecciona puerto MSComm1.PortOpen = True 'Abrir Puerto
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent 'Errores Case comEventBreak Case comEventCDTO Case comEventCTSTO Case comEventDSRTO Case comEventFrame Case comEventOverrun Case comEventRxOver Case comEventRxParity Case comEventTxFull Case comEventDCB 'Eventos Case comEvCD Case comEvCTS Case comEvDSR Case comEvRing Case comEvReceive
Buffer = MSComm1.Input text1.Text = Asc(Buffer)
Case comEvSend Case comEvEOF End Select
End Sub
Private Sub Command1_Click()
End
End Sub
Título: Re: Recepcion a 10bits (Rs_232) y 16F877A
Publicado por: Suky en 10 de Enero de 2010, 09:33:21
Cuando entre al evento OnComm pregunta si hay 2 datos en el buffer, MsCommcounter.. (No me acuerdo el nombre :mrgreen: ) Si es cierta esa condición pasas a recibir los 2 bytes enviados por el microcontrolador para luego armar la variable de 16-bits para poder visualizar el dato correcto. Como te muestro en el mensaje anterior.
Saludos!
Título: Re: Recepcion a 10bits (Rs_232) y 16F877A
Publicado por: PalitroqueZ en 10 de Enero de 2010, 19:54:32
para leer solamente 2 bytes, hay que ajustar la propiedad RThreshold=2
quiere decir que cuando se genere el evento comEvReceive, habrán 2 bytes exactos en el buffer (después tendrás que controlar el flujo para recibir correctamente los datos)
Título: Re: Recepcion a 10bits (Rs_232) y 16F877A
Publicado por: alekspm en 15 de Mayo de 2010, 21:56:13
Yo lo hice asi... y ademas lo GRAFICA!!! Espero te sirva. Atte. Alekspm
1.Iniciar Microsoft Visual Basic 6.0 2.Crear un nuevo proyecto EXE standar (Form1) con las siguientes propiedades: Appearance= 1 - 3D AutoRedraw= True BackColor= H80000004 BorderStyle= 1 – Fixed Single Caption= Monitor AN-0 del PIC 16F73-1/SP Icon= (asigne uno) StartUpPosition= 2 – CenterScreen 3.En el formulario padre, agregar dos etiquetas con la siguientes propiedades: label1, BackColor= H80000009, Caption= Dato de 8 bits: label2, BackColor= H80000009, Caption= Voltaje aplicado al pin 2: 4.Agregar dos cuadros de texto con las siguientes propiedades: text1, Locked= True, Text= (vacio) text2, Locked= True, Text= (vacio) 5.Agregar el control AvtiveX MSComm El formulario debe parecerse al siguiente, puede cambiar según el gusto del desarrollador.
6.De dos clicks sobre el formulario padre, y al aparecer el examinador de código, escriba:
Dim MatrizY(150), MatrizY2(150) As Integer Dim Contador, Aux As Integer Dim CordX, CordY As Integer Dim Recibe As String
Private Sub Form_Load() Contador = 0 CurrentX = 1000 CurrentY = 5000 CordX = 250 'Inicio de la grafica original 1000 CordY = 5550
'Comprueba que el puerto este cerrado para poder abrirlo If MSComm1.PortOpen = False Then MSComm1.Settings = "2400, N, 8, 1" 'BPS, Parity, Bits, Stop MSComm1.Handshaking = comNone 'Sin protocolo. Vea Ayuda: MSComm MSComm1.InputMode = 0 '0: Datos recuperados como texto. 1: en binario MSComm1.RThreshold = 1 'Cada cuantos bytes recibidos se genera un evento MSComm1.InputLen = 1 'Cuantos bytes se extraen al leer el puerto MSComm1.PortOpen = True 'Abre el puerto seleccionado End If End Sub
Private Sub MSComm1_OnComm() 'MSComm1.CommEvent = 2 (CommEvReceive); No. de caracteres RThreshold recibido. 'Este evento se genera continuamente hasta que se usa la propiedad Input para 'quitar datos del búfer de recepción. If MSComm1.CommEvent = 2 Then 'El dato que llega por el puerto se guarda en "Recibe" Recibe = MSComm1.Input 'El dato se recibe en bytes MatrizY(149) = Asc(Recibe) 'Convierte el byte (11111111= FF) Recibe en ASCII 'El ASCII de recibe lo resta a 255 para hacer positiva la grafica Aux = 255 - Asc(Recibe) End If
For Contador = 0 To 148 MatrizY2(Contador) = MatrizY(Contador + 1) Next
For Contador = 0 To 149 MatrizY(Contador) = MatrizY2(Contador) Next Cls CordX = 250
For Contador = 0 To 147 Line (CordX, MatrizY2(Contador)) - (CordX + 20, MatrizY2(Contador + 1)) CordX = CordX + 20 Next End If 'El 10 es para aumentar la escala del Aux 'El 3000 es para ajustar el setpoint de la grafica Line (CordX, CordY) - (CordX + 20, (Aux * 10) + 3000)
CordY = (Aux * 10) + 3000 CordX = CurrentX
MatrizY(Contador) = CordY Contador = Contador + 1
'Muestra el dato en formato de 8 bits (255= 11111111) Text1.Text = Asc(Recibe) 'Convierte los 8 bits en voltaje. El (5/255) es el factor de resolución del PIC Text2.Text = Asc(Recibe) * (5 / 255) End Sub
Private Sub Form_UnLoad(Cancel As Integer) If MSComm1.PortOpen Then 'Cierra el puerto utilizado MSComm1.PortOpen = False End If