Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?
28/03/2012 #121


Hola a todos! estoy trabajando con Visual Basic Express 2008. Tengo un problema, quiero enviar una variable char por puerto serial pero me sale un error cuando lo intento.
Si escribo:

MSComm.Output = "Y"

Lo envía sin nigun problema. El problema viene si escribo:

dim var as char = "Y"
MSComm.Output = var

me dice que hay error en la segunda linea. Yo pensaba que ahi mandaba lo que estuviese contenido en la variable var.

Ayudenme por favor :'(

Gracias por anticipado

Saludos
28/03/2012 #122

Avatar de Meta

Hola:

Manual puerto serie VB .net 2008


Saludo.
29/03/2012 #123


Listo! ya resolvi el problema. Hay que hacer una conversion antes de enviar por el puerto. Asi:

dim var as char = "Y"
MSComm.Output = CStr(var)

Creo que cualquier tipo de dato que se quiera mandar por puerto serial primero hay que convertirla a String.

Saludos! =)
26/05/2013 #124


Hola a la comunidad, tengo un problemilla, estoy enviando datos serialmente desde el pic a la pc, la idea es representar los datos del TMR0 en la compu, para eso envio la informacion de segundos en modo serial, los tomo con visual basic 6 y que cada 60 segundos aumente en un Label un minuto. Los segundos los observo correctamente en la pantalla. Ahora el problema es que cuando quiero tomar esa variable y sumarle un valor, solo ocurre que al iniciar el codigo aparece el valor de 1 en el Label (cuando llega al momento indicado), luego nada mas, no sigue aumentando la variable. Tanto usando:

If seg > 59 then
minu = minu+1

O transformando el valor de ASCII, y esperando el valor del numero 6 (el contador llega al valor 60 y pense que podia captar el valor decimal para indicar el cambio en minutos) (=36) para ver si me sumaba la variable.

Gracias de antemano che!!!!
---------------------------------------------------------------------------------------------
PIC:
SEROUT portb.5,N2400,[#seg]
--------------------------------------------------------------------------------------------------
Visual Basic:

Private Sub Form_Load()
MSComm1.RThreshold = 1
MSComm1.InputLen = 2
MSComm1.Settings = "2400,N,8,1"
MSComm1.DTREnable = False
MSComm1.CommPort = 1
MSComm1.PortOpen = True
End Sub

Private Sub MSComm1_OnComm()
Dim seg As String
Dim minu As String
Dim numero1 As Integer
If MSComm1.CommEvent = comEvReceive Then
seg = MSComm1.Input
Label1.Caption = seg
minu = Asc(seg)
End If
Select Case minu
Case 36
numero1 = numero1 + 1
Label2.Caption = numero
numero1 = Val(Label2)
End Select
End Sub
26/05/2013 #125
Moderador

Avatar de D@rkbytes

Sube tu proyecto completo dentro de un archivo comprimido, incluyendo el código del PIC.
Y explica mejor que es lo que quieres hacer, ¿Cual es el propósito?
26/05/2013 #126


Hola D@rkbytes, gracias por la pronta respuesta. Luego de una buena tarde entre mates y foros de visual basic encontré el problema.
El error estaba en no convertir el valor String que llega del PIC a la compu en Integer, para luego si procesarlo. Dejo el código por si alguno le sirve, esta funcionando correctamente.

Por si no quedo claro en este proyecto se envían serialmente los datos del temporizador TMR0 del pic16f628a, la información correspondiente a segundos, luego Visual realiza los cálculos para minutos y horas.

Gracias!

Visual Basic:
---------------------------------------------------------------------------------------------------
Código:
Public seg2 As Integer
Public numero1 As Integer
Public hora As Integer
Public seg As String

Private Sub Command1_Click()
End
End Sub

Private Sub Form_Load()
MSComm1.RThreshold = 1
MSComm1.InputLen = 2
MSComm1.Settings = "2400,N,8,1"
MSComm1.DTREnable = False
MSComm1.CommPort = 1
MSComm1.PortOpen = True
End Sub

Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
seg = MSComm1.Input
Label1.Caption = seg
seg2 = CInt(seg)
End If
If seg2 > 59 Then
numero1 = Val(numero1) + 1
Label2.Caption = numero1
End If
If numero1 > 59 Then
numero1 = 0
hora = Val(hora) + 1
Label3.Caption = hora
End If
End Sub
--------------------------------------------------------------------------------------------------
Pic (Basic)

Código:
@ DEVICE pic16F628A, MCLR_OFF, XT_OSC
INCLUDE "modedefs.bas"
TRISA=%00000000
TRISB=%00000000
OPTION_REG = %1010110 ;setea TMR0 configurando y habilita PORTB pullups
INTCON = %10100000 ;hablilita TMR0 interrupción interna
ON INTERRUPT GOTO interrup
cuenta var byte
seg var byte
minu var byte
hora var byte
estado var bit 
x var byte
For x = 1 to 3
high porta.2
pause 500
low porta.2
next
seg=1
minu=0
hora=0
estado = 0
high porta.2
inicio:      
if hora=>24 and estado=0 then
seg=1
minu=0
hora=0
estado=1
high portb.4
else 
goto inicio
endif
if seg=>20 and estado=1 then
low portb.4
seg=1
minu=0
hora=0
estado=0
goto inicio
else 
goto inicio
endif
DISABLE ;deshabilita interrupciones durante el proceso
interrup:
cuenta = cuenta + 1 ;cuenta las interrupciones del TMR0
TMR0=4 ;resta 4 al contador de 256 del TMR0
IF cuenta < 31 THEN reset ;31 cuentas (32256ms = 999936uS)
cuenta = 0
seg = seg + 1
SEROUT portb.5,N2400,[#seg]
IF seg >= 60 THEN
seg = 0
minu = minu + 1
IF minu >= 60 THEN
minu = 0
hora = hora + 1
IF hora >= 24 THEN
hora = 0
ENDIF
ENDIF
ENDIF
reset:
INTCON.2 = 0
RESUME
END
---------------------------------------------------------------------------------------------------
22/12/2014 #128

Avatar de Finskey

Realice un proyecto controlado por del puerto RS232. Pero tengo unos problemas y unas dudas:

1) Es necesario utilizar un oscilador externo? use el interno y no tuve problemas, pero leí que si los trae.
2) Mi proyecto falla en algún punto, es un interruptor vía pc, el cual activa salidas de micro mediante un programa en Visual Basic. El proyecto consta de 9 salidas, 6 de estas funcionan de maravilla, las ultimas 3 tienen problemas .... Son las salida aux4,5 y 6. Si activo una de estas, luego al querer activar otra de estas se apaga la primera y ni siquiera se activa la 2da que toque, solo apaga la primera. No encuentro errores en la programación ni de VB ni de MICROCODE STUDIO. Ajunto todo lo referente al proyecto, Saludos Y Muchas gracias.

PD: Las salidas del micro activan leds, los pines que se usan como SERIN y SEROUT llevan resistencia 22K y 220 respectivamente.
Archivos Adjuntos
Tipo de Archivo: rar test.rar (246,8 KB (Kilobytes), 17 visitas)
23/12/2014 #129
Moderador

Avatar de D@rkbytes

Finskey dijo: Ver Mensaje
Realicé un proyecto controlado por el puerto RS232, pero tengo unos problemas y unas dudas:

1) Es necesario utilizar un oscilador externo? use el interno y no tuve problemas, pero leí que si los trae.
Al trabajar con 4MHz y el oscilador interno, pueden enviarse datos erróneos, sobre todo cuando se envían cadenas, en tu programa como sólo envías letras (1 Byte), no existe mucho problema.
Sin embargo, sí es recomendable usar un oscilador a cristal y una frecuencia superior a los 4MHz para trabajar con 9600Bps.
Finskey dijo: Ver Mensaje
2) Mi proyecto falla en algún punto, es un interruptor vía pc, el cual activa salidas del micro mediante un programa en Visual Basic.
El proyecto consta de 9 salidas, 6 de estas funcionan de maravilla, las ultimas 3 tienen problemas.
Son las salida aux4, 5 y 6.
Si activo una de éstas, luego al querer activar otra de éstas, se apaga la primera y ni siquiera se activa la 2da que toque, sólo se apaga la primera.
No encuentro errores en la programación ni de VB ni de MICROCODE STUDIO.
Ajunto todo lo referente al proyecto, Saludos y muchas gracias.
Errores de programación no tienes, pero al programa en PICBasic le hacen falta algunas mejoras.
El uso de TRIS para definir entradas y salidas es importante para tener un mejor control.
Si bien en PBP se puede hacer uso de INPUT y OUTPUT para definir entradas o salidas, es conveniente inicializar los puertos al comienzo del programa.
También es importante inicializar el bus RS-232 para que el primer dato válido enviado salga correcto.

En el programa en VB6 estás usando una forma no recomendada para realizar el ingreso de datos vía serial.
No es recomendable hacer uso de un Timer para estar verificando cuando llegan datos.
Para eso existe el evento OnComm() del control MSCOMM y se usa conjuntamente con el evento comEvReceive
De esta forma la recepción de datos no está regida por un temporizador y los datos son captados en el momento que llegan.

Notas:
El LED que está en RA4 tiene invertida la polaridad en el esquema que muestras.
Cambié de puerto al COM3 para realizar las pruebas y debes cambiarlo por el que uses.

Adjunto ambos programas con las correcciones mencionadas.
No lo he probado físicamente, realicé una simulación.
Verifica su funcionamiento en físico y observa las modificaciones realizadas en ambos programas.

Suerte.
Archivos Adjuntos
Tipo de Archivo: rar test II.rar (44,6 KB (Kilobytes), 20 visitas)
01/01/2015 #130

Avatar de Finskey

Estimado DarkBytes he probado con sus programas y sucede lo mismo que en el caso anterior (he probado con dos micros), me pregunto si los puertos que "fallan" (A0,A1,A2) tienen alguna diferencia en cuanto a los demás, le comento que estoy usando un conversor USB-RS232 para la transmisión de datos. Aprovecho para hacerle unas consultas:

1-He tenido un problema con mi pickit2 , cuando toque escribir y quise grabar un micro me salio el siguiente mensaje: programming failed at program memory adress 0×000000 , ya me ha pasado anteriormente. Hay alguna solución?

2- Es posible alimentar las cargas del micro y el micro desde el puerto rs-232 que sale del usb de mi computador? Así evitamos el uso de una fuente externa , si es así , cuanta corriente puede brindarme el usb de una netbook?

Muchísimas gracias por su ayuda
03/01/2015 #131
Moderador

Avatar de D@rkbytes

Finskey dijo: Ver Mensaje
Estimado D@rkbytes he probado con sus programas y sucede lo mismo que en el caso anterior (he probado con dos micros), me pregunto si los puertos que "fallan" (A0,A1,A2) tienen alguna diferencia en cuanto a los demás, le comento que estoy usando un conversor USB-RS232 para la transmisión de datos.
Pues lo que tienen esos pines, es que son las entradas análogas de comparadores.
Para hacerlas digitales se tiene que configurar el registro CMCON.
Cuando se usan como entradas digitales sí es muy importante configurar CMCON con el valor 7

Ahora he realizado una prueba en físico para probar el mismo proyecto del post #129
pero enviando los datos sin invertir, ya que en ese programa se mandan y se reciben invertidos.
El resultado fue positivo, no existió ningún problema de activación en RA0, RA1 y RA2, aún sin configurar el registro CMCON.
Como quiera haz una prueba colocando CMCON = 7 al inicio del programa.

¿Por qué necesitas los datos invertidos?
Yo he trabajado con el chip FT232RL y cuenta con una interfaz de configuración para definir este aspecto.
Finskey dijo: Ver Mensaje
Aprovecho para hacerle unas consultas:

1-He tenido un problema con mi pickit2 , cuando toque escribir y quise grabar un micro me salió el siguiente mensaje: programming failed at program memory adress 0×000000 , ya me ha pasado anteriormente. ¿Hay alguna solución?
Posiblemente exista alguna solución en este tema:
Programador de microcontroladores PIC y memorias por puerto USB PICKIT2 CLONE
Yo no te sabría decir porque uso el PICkit 3 y nunca me ha dado problemas.
Finskey dijo: Ver Mensaje
2- Es posible alimentar las cargas del micro y el micro desde el puerto rs-232 que sale del usb de mi computador? Así evitamos el uso de una fuente externa , si es así, ¿cuanta corriente puede brindarme el usb de una netbook?
Me parece que las netbook tienen unos 500mA. cómo máximo, no estoy muy seguro.
En este caso será mejor que busques en las especificaciones de tu netbook.
Finskey dijo: Ver Mensaje
Muchísimas gracias por su ayuda.
De nada.
Suerte.
14/01/2015 #132

Avatar de Finskey

Procederé a hacer la prueba declarando CMCON, la verdad no necesito los datos invertidos, me gustaría que me dijeras como hacer para no invertirlos. Muchas gracias

Edit: declarando CMCON = 7, funciona todo perfectamente, si no te molesta te hago una consulta porque 7? y que pasa si igualo a otro numero? Procederé a montar el proyecto y a agregarle una etapa de potencia. Muchas gracias por toda su ayuda.
14/01/2015 #133
Moderador

Avatar de D@rkbytes

Finskey dijo: Ver Mensaje
Procederé a hacer la prueba declarando CMCON, la verdad no necesito los datos invertidos.
Me gustaría que me dijeras cómo hacer para no invertirlos.
Los modos no invertidos llevan una T al principio y los invertidos una N.


También se puede poner su valor (Mode No.) y así se puede omitir el uso de la librería "modedefs.bas"
Esa librería cuenta con otras definiciones, pero su principal uso está en las definiciones de los modos de transmisión.
Finskey dijo: Ver Mensaje
Edit: declarando CMCON = 7, funciona todo perfectamente.
Si no te molesta te hago una consulta. ¿Por qué 7? ¿Y qué pasa si igualo a otro número?
Procederé a montar el proyecto y a agregarle una etapa de potencia.
Muchas gracias por toda su ayuda.

El registro CMCON se configura con el valor 7 por este motivo:


Entonces si pones otro número cambiarías el modo de operación de los comparadores.
Esto lo puedes entender mejor en la hoja de datos.

Saludos.
Imágenes Adjuntas
Tipo de Archivo: jpg Modos SerIn - SerOut.jpg (34,9 KB (Kilobytes), 57 visitas)
Tipo de Archivo: jpg Bits 2-0 Registro CMCON.jpg (79,0 KB (Kilobytes), 56 visitas)
15/01/2015 #134

Avatar de Finskey

La verdad que sus explicaciones son muy didácticas, forosdeelectronica tiene grandes moderadores.
El proyecto esta funcionando a la perfección, mi ultima consulta es acerca de la fuente de alimentación, como bien me dijo el puerto usb suministra 0.5 amperios , pero al hacer la conversión USB-RS232, sigue manteniendo este valor?. He realizado mediciones en la ficha DB9 y he encontrado 4.6-4.8 voltios entre un terminal y masa (Pin 4 con respecto a masa) mi pregunta es si con esta tensión puedo alimentar al micro controlador y al menos 1 o 2 leds, No quise probarlo físicamente por miedo a dañar el puerto. Esto me permitiría controlar pequeñas cargas sin necesidad de una fuente externa y una rápida prueba de funcionamiento. Saludos

15/01/2015 #135
Moderador

Avatar de D@rkbytes

Finskey dijo: Ver Mensaje
La verdad que sus explicaciones son muy didácticas.
www.forosdeelectronica.com tiene grandes moderadores.
Gracias. F.D.E. Por suerte, también cuenta con miembros muy capacitados.
Finskey dijo: Ver Mensaje
El proyecto está funcionando a la perfección.
Mi última consulta es acerca de la fuente de alimentación.
Cómo bien me dijo, el puerto usb suministra 0.5 amperios.
¿Pero al hacer la conversión USB-RS232, sigue manteniendo este valor?
El voltaje lo tienes que tomar de los pines 1 (VCC) y 4 (GND) del conector USB.
Entonces podrás alimentar a tu circuito con la corriente máxima que entregue el puerto USB.
Finskey dijo: Ver Mensaje
He realizado mediciones en la ficha DB9 y he encontrado 4.6-4.8 voltios entre un terminal y masa (Pin 4 con respecto a masa)
¿Mi pregunta es, si con esta tensión puedo alimentar al micro controlador y al menos 1 o 2 leds?
No quise probarlo físicamente por miedo a dañar el puerto.
Esto me permitiría controlar pequeñas cargas sin necesidad de una fuente externa y una rápida prueba de funcionamiento.
Saludos
Esa caída de tensión en las salidas de chip es normal y ese voltaje es suficiente para que el microcontrolador lo interprete como un 1 lógico.
Me parece que por arriba de los 2.5V ya lo toma como 1 lógico.

Pero te repito, debes alimentar al circuito con el voltaje de +5V que entrega el conector USB y el circuito tomará la corriente necesaria suministrada por el puerto.
La corriente por pin de un PIC es del orden de 25mA. Entonces tienes corriente suficiente para controlar LED's comunes de alrededor de 10mA.
16/01/2015 #136

Avatar de papirrin

Finskey dijo: Ver Mensaje
La verdad que sus explicaciones son muy didácticas, forosdeelectronica tiene grandes moderadores.
El proyecto esta funcionando a la perfección, mi ultima consulta es acerca de la fuente de alimentación, como bien me dijo el puerto usb suministra 0.5 amperios , pero al hacer la conversión USB-RS232, sigue manteniendo este valor?. He realizado mediciones en la ficha DB9 y he encontrado 4.6-4.8 voltios entre un terminal y masa (Pin 4 con respecto a masa) mi pregunta es si con esta tensión puedo alimentar al micro controlador y al menos 1 o 2 leds, No quise probarlo físicamente por miedo a dañar el puerto. Esto me permitiría controlar pequeñas cargas sin necesidad de una fuente externa y una rápida prueba de funcionamiento. Saludos

http://www.brainboxes.com/files/cata...232_Pinout.jpg
La mayoría de los puertos USB tienen protección de cortos/sobrecargas aunque es mejor no tentar a la suerte, y con respecto a la corriente que necesitas lo mejor es que midas con un amperímetro el consumo y si estas muy pegado a limite del máximo que da tu puerto puedes "tomar" mas corriente si usas dos puertos. Cada mother board es diferente unos son de 500mA otros de 1A dependiendo del fabricante.

16/01/2015 #137

Avatar de Finskey

Bueno muchas gracias por contestar a ambos. Debido a que tengo un puerto ocupado con el conversor usb/rs232 usare el otro para alimentar al circuito, me fijare en la netbook que corriente entrega el puerto.
Si tengo avances avisare.
22/01/2015 #138

Avatar de Finskey

Bueno, el usb alimenta bien a mi circuito, les cuento que le agregado un juego de Tx/Rx para activar inhalambricamente. Alguna sugerencia para agrandar el proyecto sera agradecida.

Consulta Técnica: Ya que no uso oscilador de 4Mhz sera posible usar esos dos pines como puertos comunes?
22/01/2015 #139

Avatar de papirrin

Ya que no uso oscilador de 4Mhz sera posible usar esos dos pines como puertos comunes?
no se entiende muy bien, ¿quisiste decir que no usas oscilador de cristal?, si no usas cristal y es un 16f628A, si... si se puede.
22/01/2015 #140
Moderador

Avatar de D@rkbytes

Finskey dijo: Ver Mensaje
Alguna sugerencia para agrandar el proyecto será agradecida.
¿A qué te refieres con agrandar el proyecto?
Finskey dijo: Ver Mensaje
Consulta Técnica: Ya que no uso oscilador de 4Mhz. ¿Será posible usar esos dos pines como puertos comunes?
Si es posible cuando no usarás un cristal y así es como está en el proyecto modificado del post #129
Ahí se encuentran libres los pines del oscilador porque se está usando el oscilador interno.

Algo que podrías hacer para mejorar el desempeño, es haciendo uso del módulo USART, pero se tiene que modificar un poco el programa y el diseño para usar los pines RB2 (Tx) y RB1 (Rx)
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.