leer tres potenciometros en visual basic

Hola amigos les cuento que al enviar los datos de 2 potenciometros a visual b,no existe problema pero al intentar de recivir 3 me da error llevo dias tratando de solucionar esto quizas sea simple pero no cacho que es, les subo los archivos para que le echen un vistaso ,me imagino que es un problema con la variable string en visual

Saludos......
 

Adjuntos

  • testadc.rar
    2.6 KB · Visitas: 95
Que es lo que queres hacer?
Yo estoy con algo parecido, estoy usando un 12F675 que tiene cuatro canales de 10 bits. Pienso usar dos Cd4066 para multiplexar y leer 6 canales... el problema es que la simulacion del proteus no me cambia el estado del pin GP5, cuando tenga un rato lo armo en el proto y te comento como me fue.
Se te ocurre por que puede ser lo del pin gp5?
 
La verdad no tengo experiencia con ese pic ,me imagino que el cd4066 es un multiplexor
,se me ocurre si este tuviera 6 entradas solo ocuparias una entrada analogica del pic,
y por soft tomarias las muestras de cada canal en intervalos
En que proyecto estas .
 
Estoy armando un voltimetro de 6 canales, que es mas que suficiente. Voy a transmitir los datos por puerto serie a la pc, de ahi lo voy a leer con vb para mostrar las tensiones.
Incluso tambien se podrian medir corrientes utilizando resistencias shunt...
Por ahora solo lo hago para aprender, despues capaz que le doy algun uso como puede ser una fuente da alimentacion con control por pc... veremos.
Que micro estas usando?

Te paso lo que tengo hecho, esta hecho en pic simulator ide.
 

Adjuntos

  • 6XVOLT.jpg
    6XVOLT.jpg
    215.3 KB · Visitas: 85
  • VOLTIMETRO DE 6 CANALES CON PIC 12F675.rar
    45.9 KB · Visitas: 122
Estoy con el 877a con botloader asi voy probando en vivo y no en simulador que no es lo mismo que la realidad ,voy a mirar tus code haver k hay,tienes algo echo en visual.
 
hola buenas noches, djxero disculpa la pregunta pero tu problema para multiplexar es por parte del pic o con visual basic? si es el pic que lenguaje estas usando en C o ensamblador? ademas con cuantos bits del convertidor estas trabajando con los 10bits o con 8 ya que si es en C la libreria rs232 no te permite mandar mas de 8 bits y debes pasar los 10 bits a bcd osea enviar numero tras numero si es mayor de 255, en el caso de visual basic? debes fitrar la informacion como por ejemplo:
PHP:
Private Sub MSComm1_OnComm()
    Dim rs232 As String
    Dim dato_1 As String
    Dim dato_2 As String
    Dim dato_3 As String
    If MSComm1.CommEvent = comEvReceive Then
    rs232 = "" 'limpiamos la varible que recibe
    rs232 = MSComm1.Input 'obtenemos el valor del buffer
    End If
    dato_1 = Left(rs232, 1)   'como los datos recibidos son 3 filtro primero de lado   izquierdo un numero
    dato_2 = Mid(rs232, 2, 1)    ' luego tomo el segundo numero que practicamente se encuntra en medio de los 3
    dato_3 = Mid(rs232, 3, 1)    'por ultimo obtengo el ultimo dato tambien puedes usar rigth(rs232,1)
    Texto_recibido.Text = Asc(dato_3)    'como los datos vienen en ascii los convierto a decimal
    Texto_recibido.Text = Asc(dato_1) '& Chr(32) & Asc(dato_2) & Chr(32) & Asc(dato_3)
con respecto al lenguaje del pic no te doy ejemplos porq no se en que lenguaje programas espero que te sea util :LOL:
 
Estoy con el 877a con botloader asi voy probando en vivo y no en simulador que no es lo mismo que la realidad ,voy a mirar tus code haver k hay,tienes algo echo en visual.
Yo tampoco soy muy fana de los simuladores, todavia me queda ver el asunto del pin gp5, no voy a saber hasta que tenga un rato y lo arme:rolleyes:

No es mucho un 877 para 2 potenciometros?:eek:
La parte de visualb no la tengo, pero igual es un rato nomas... y estoy connsiderando la posibilidad de usar Macromedia flash que es mas lindo(y)
 
Fernandoae lo del 887a lo utiliso ppor el tema del botloader asi grabo mi programa en segundos y sin estar sacando el pic del circuito(solo para prueba).E estado haciendo unas pruebas con VB integrando flash pormedio de unos comando .sin duda para graficar y hacer cosas que se mueven flash la lleva.De macromedia no se nada pero si de swish max que es una maravilla y logras resultados rapidamente.Si necesitas algun ejemplo solo dime.
saludoss......

Amigo §-kelvi
Estoy programando en basic .lo que no se muy biem es que tipo de dato me envia el pic
segun la referncia del compilador (pbp) #envio en decimal y VB resive un stream no se si estoy en lo cierto
te adjunto mi code en basic

Código:
  @ device xt_osc 
define osc 4  
DEFINE ONINT_USED 1
Symbol T9600 = 2
TX var Byte
RX var Byte
A VAR WORD[3]
flag0 var bit
flag0 = %0
ADCON1=%100 
trisb=%00000000 'puerto b como salida
portb=%00000000 'set a cero el puerto b
trisc=%11111101 'set entradas y salidas
portc=%00000000 'set en cero al                               
MAIN:
PAUSE 500
X:
ADCON0 =%1000001
GOSUB LEER
A(0)= ADRESH
Y:
ADCON0 =%1001001
GOSUB LEER
A(1)= ADRESH                            
Z:
ADCON0 =%1011001
GOSUB LEER
A(2)= ADRESH
SerOut PORTC.6, T9600,[#A(0) ,"/",#A(1),"/",#A(2)]
GOTO MAIN
LEER
PAUSEUS 100
ADCON0.2 = 1
PAUSEUS 50
RETURN
end

No me queda claro eso de la conversion a asci mirando tu code toy con esa duda
Saludos y gracias
 
Última edición:
lo que no se muy bien es que tipo de dato me envia el pic
Me acabo de dar cuenta que yo tampoco! estuve con el HyperTerminal de windows y recibir recibe, se ven las 6 lineas que tendrian que decir "CANAL X: vdc" pero con caracteres extraños...
Pero esta casi casi completo... voy a estudiar otro poco ;)
 
bueno como sabras el pic te envia un codigo de 0 a 255 y la pc lo interpreta como ascii o caracteres aun cuando el pic te mande numeros es la pc la que siempre va a leerlos como caracteres es por es que debemos convertir la info a decimal, lo que hago al decir asc(variable)"en vb" es que la informacion se convierta en numero decimal, leendo tu codigo veo que estas enviando un string osea que son 3 tipos de informacion bueno para separar cada una de la informacion lo que debes hacer es filtrar dato por dato de esta forma:
dato_1 = Left(rs232, 1) ' en tu caso A/D 1
dato_2 = Mid(rs232, 2, 1) 'A/D 2

dato_3
= Mid(rs232, 3, 1) 'A/D 3

un ves que ya tienes los datos conviertes cada uno ellos en numeros decimales:
dato_en_decimal = Asc(dato_3) 'por ejemplo
y ya puedes utilizar la informacion para hacer tu programa, te recomiendo flitrar los datos y despues convertir a decimal, te dejo un link para que puedas ver el metodo en vb, http://www.recursosvisualbasic.com.ar/htm/tutoriales/tutorial-basico5.htm,
espero que te sea util saludo :LOL:
 
bueno como sabras el pic te envia un codigo de 0 a 255 y la pc lo interpreta como ascii o caracteres

El algoritmo que yo utilizo es pasar el valor a un arreglo y se me hace mas facil...
pongo el codigo...


Código:
Dim bit(7) As Integer, i As Integer
 a = 254 ' tu codigo asciii
 For i = 0 To 7
  If a And 2 ^ i Then bit(i) = 1 Else bit(i) = 0
 Next i

o directamente

Código:
a=254 'tu codigo ascii
bit=8 ' el bit a leer
mi_var=iif((a And 2 ^ bit)=0,0,1)

espero te sirva el tip...

saludos
 
Última edición:
Este el code que estoy utlizando
Código:
Private Sub MSComm1_OnComm()
Dim MySplit() As String               
            Buffer = MSComm1.Input
            RX.Text = Buffer
               MySplit = Split(Buffer, "/")
                    A0.Text = Val(MySplit(0))
                    A1.Text = Val(MySplit(1))
                    A2.Text = Val(MySplit(2))   -[COLOR="Red"]Al agregar esta linea me da error  [/COLOR]                     
                                             
End Sub
 
puede que este confundiendo el ascii de "/" con el ascii recibido y retorna NULL

intenta cambiar el separador "/" por otro ie "//" o "/" & vbnewline , o cualquier otro que no sea recibido en la variable buffer...

otra podria ser que deberia ser asi...

Que Error te marca que el subindice esta fuera de intervalo.....
intenta esto :

Código:
Private Sub MSComm1_OnComm()
Dim MySplit() As String               
            Buffer =[B]Trim( MSComm1.Input & "/")[/B]
            RX.Text = Buffer
               MySplit = Split(Buffer, "/")
                    A0.Text =[B]Str(Asc(MySplit(0)))[/B]
                    A1.Text = [B]Str(Asc(MySplit(1)))[/B]
                    A2.Text = [B]Str(Asc(MySplit(2))) [/B]

o usa otro algoritmo diferente a split

la funcion split no es muy diferente en el tiempo del proceso si usas un ciclo for... next... e Instr() o mid()
pero si menos codigo.... crea tu propia funcion para ahorrar codigo....
 
Última edición:
E probado con tu codigo lubeck pero me da error aun,te cuento que al enviar 2 variables no hay problema separndola con "/" el problem esta con mas de 2 var ,le dare mas vuelta haber si invento algun protocolo para que no se tan directo la cosa,mientras tanto estoy viendo el tema de la integracion de visual y flash para poder consegir mejores graficas ,
les dejo un ejemplo .
 

Adjuntos

  • flasvisual.rar
    20.2 KB · Visitas: 64
Que error te marca....

a mi el que pusiste me marca un error pero sustitui la linea

Buffer = MSComm1.Input

por :

Buffer =Trim( MSComm1.Input & "/")

y ya no me marco nada

casi estoy seguro que ahi esta el error....


y creo que si estas recibiendo codigo ascii debes utilizar Asc() no Val()

por ejemplo pon:
msgbox val("a") te va a poner "0"
msgbox asc("a") te va a poner "97"
y no es lo mismo ... lo que esperas es el 97 no el 0 ... o si?

sino no entiendo que es lo que mandas por el puerto.... sorry....

espero te sirva...
 
Última edición:
utilizando el Buffer =Trim( MSComm1.Input & "/") si funcion en tu codigo el problema que yo veo es que cuando utilizo val(dato) me tira un error, pero si lo convierto asc(dato) funciona y no veo ningun problema, no pierdes nada con intentarlo...
 
Tambien detecte otro error

en esta linea del micro...

SerOut PORTC.6, T9600,[#A(0) ,"/",#A(1),"/",#A(2)]

deberia ser:


SerOut PORTC.6, T9600,[#A(0) ,#A(1),#A(2)]

y no utilizar el split() sino el mid()

porque va a confundir el codigo ascii(Dato) con el separador.... en algun momento...


P.D..

Kelvi
Estuve revisando el tema.... paso por paso
y en tu post #6 ya le habias dado la solucion.... yo creo que no lo quiere solucionar ....;)

saludos.....
 
Última edición:
Te cuento k ya resolvi el problema con este codigo



Código:
Private Sub MSComm1_OnComm()
             Buffer = " "
             Buffer = MSComm1.Input
Select Case Left(Buffer, 1)
Case "A"
A0.Text = Val(Right(Buffer, Len(Buffer) - 1)) 'borro A y dejo solo los numero
Case "B"
A1.Text = Val(Right(Buffer, Len(Buffer) - 1))
Case "C"
A2.Text = Val(Right(Buffer, Len(Buffer) - 1))
Case "D"
A3.Text = Val(Right(Buffer, Len(Buffer) - 1))
End Select
End Sub
SALUDOS Y GRACIAS
 
Atrás
Arriba