Autor Tema: Comunicacion Via puerto Serial  (Leído 8402 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dannyman

  • PIC10
  • *
  • Mensajes: 17
Comunicacion Via puerto Serial
« en: 22 de Octubre de 2004, 17:43:00 »
Hola amigos un gusto y un honor compartir con ustedes..

Mi problema es el siguiente: Tengo un circuito que me da 8 salidas ( señales digitales  5v para el 1log y 0v para el 0v) lo que quiero es capturar estas 8 salidas con el puerto serial del pc usando el mscomm de visual basic.

No se si el problema es que el puerto serial maneja otros niveles de voltaje para reconocer unos o ceros logicos o si estoy almacenando en una variable equivocada a las señales digitales del circuito o tengo que usar algo mas que las func del mscomm... nose la verdad es que ya estoy un poco desesperado...

Les voy a agradecer infinitamente al que me pueda ayudar o darme una pista..

Saludos desde ecuadorFlash

Desconectado nechevel

  • PIC10
  • *
  • Mensajes: 24
RE: Comunicacion Via puerto Serial
« Respuesta #1 en: 22 de Octubre de 2004, 18:53:00 »
Hola dannyman.

lo único que tienes que hacer es leerte este subforo Sonrojado y te dará toda la información necesaria para tu aplicación:

http://miarroba.com/foros/ver.php?foroid=64652&temaid=172512

Espero te sirva.

Saludos. DivertidoDivertidoDivertido

Desconectado dannyman

  • PIC10
  • *
  • Mensajes: 17
RE: Comunicacion Via puerto Serial
« Respuesta #2 en: 25 de Octubre de 2004, 15:21:00 »
hOLA NECHEVEL primero gracias por preocuparte en mi pregunta ya lei el subforo que me recomendaste pero nadie habla de los niveles de voltaje que maneja el puerto serial, como te dije ma nejo niveles TTL 0 y 5 voltios...

Mi aplicacion en visual recibe los datos pero siempre me devuelve 0 y nunca un 1, no se si el puerto serial maneje otros niveles de voltaje o cual es mi problem.. ayudame por fis es que ya estoy una semana sin avanzar en mi proyecto y no se que ya hacer....

Una vez mas gracias y perdon por responder antes pero se cayo el proveedor de internet dos dias pero ya estoy otra vez en la red..

Saludos desde ecuadorFlash

Desconectado dannyman

  • PIC10
  • *
  • Mensajes: 17
RE: Comunicacion Via puerto Serial
« Respuesta #3 en: 02 de Noviembre de 2004, 21:44:00 »
Hola una vez mas.. ya he avanzado con lo del diseño ya me consegui el max 232 ya lo adapte a mi circuito y ya me manda los niveles del voltaje requeridos 8voltios para 1 y -8 voltios para 0..

Pero no puedo leer todavia la secuencia de bits ya que siempre mi programa lee una secuencia 00000000. cuando en realidad me tendria que mandar algo como 01010101 o 11111010 me su pongo que esta mal cierto....???

Bueno en resumen mi programa usa el mscomm de vb6.. la propiedad inputmode a 1 para recibir en binario.. me imagino que si estoy recibiendo por que se activa el oncomm,y

variable=mscomm.input
es una variabletipo byte

en variable caracteres raros que me imagino que son ascii, los paso a decimal con
for x=1 to 8 do
variabe2=mid(variable,x,1)
variable2=asc(variable2)
next i
y siemprre me devuelve 0 0 0 0 0 en variable 2.

Por favor quisiera que me ayudaran diciendome que puede estar mal o si tengo que usar otro tipo de variables o el inputmode a 0... ya que el tiempo del proyecto de mi fin de carrera se acaba....Llorica les juro que les voy a agradecer infinitamente

Desconectado Golden_Eagle

  • PIC16
  • ***
  • Mensajes: 135
RE: Comunicacion Via puerto Serial
« Respuesta #4 en: 03 de Noviembre de 2004, 20:02:00 »
estas configurando la transmision de igual forma en tanto en la pc como en tu circuito??
me refiero al baudrate, paridad, etc.

Desconectado dannyman

  • PIC10
  • *
  • Mensajes: 17
RE: Comunicacion Via puerto Serial
« Respuesta #5 en: 03 de Noviembre de 2004, 21:54:00 »
Primero que todo gracias golden por responder y espero que me sigas ayudando..En lo que se refiere al baudrate no te lo sabria decir.. mi circuito manda un bit 0(8volt) o 1(-8volt) cada 1 segundo.. En el mscomm de visual lo pongo a 9600,n,8,1.. Cambie la variable a una tipo string Lo que me esta dando como resultado en la var o 255 o 0 pero no me da el resultado que mando...

Alguien me podria decir que es lo que me tendria que salir si mando por ejemplo una secuencia 00010111 me deberia un y solo un caracter ascii del byte???  o me debe dar 8 caracteres......

Al hacerle correr paso por paso a mi program en la variable=mscomm1.input
tengo un caracter cuadrado que al hacer asc(variable) me da 0.. o me da el caracter ? que me da como resultado 63 o un caracter que me da 255 o sino una secuencia de estos tres caracteres... es por esto que solo tendo o 0 o 63 o 255 como respuesta... esto repito almacenando  en una variable tipo string porque usando una byte siempre me da 0... No se si me puedas ayudar diciendo que tipo de variable tengo que ocupar y como ocupar para almacenar y operar con los datos que me ingresan del puerto...

Ah otra cosa tengo que usar algun otro pin ademas del pin de recepcion y tierra del puerto para recibir datos... ya que solo esos pines uso....

Por favor necesito una mano.. no perdon en realidad necesito unas cien manos para poder darme cuenta que es ta mal... De antemano gracias por la ayuda...

Desconectado randux

  • PIC10
  • *
  • Mensajes: 11
RE: Comunicacion Via puerto Serial
« Respuesta #6 en: 04 de Noviembre de 2004, 08:12:00 »
DannyMan he estado esperimentando un poco con el manejo de torniquetes o molinetes yo manejo Vb pero no domino lo referente a pic. Te envío algunas lineas de codigo pruebalas en tu aplicativo, debes tener en la forma un control mscom y un timer. Analiza un poco el codigo y ubicalo.

espero te sirva.

Trate de enviar un adjunto, pero da error

________________________Controla el puerto y la DataY LA DATA
Dim Good_Tx As Long
Dim Bad_Tx As Long
Dim Str_Index As Long
Dim Data_Val(10) As Integer
Dim Data_Str(10) As String
"_______________________________Son variables Modulares________________________________

Private Sub Tmr_Get_Data_Timer()
    Dim Counter As Byte
    Dim Temp_Data As String
    Dim i As Integer
    Dim e As Long
    Const Data_Pts As Integer = 3
    Dim BOF_Found As Boolean
    Dim Good_Data As Boolean
    Dim Bytes As String
    Dim Data_Size_Bar_Val As Integer
    Dim Err_Pct As Single
   
    If MSComm_RS232.InBufferCount > 0 Then
        Bytes = MSComm_RS232.Input
       
       
           Out Puerto, 253
         
                 
         
           For e = 1 To 10000000
           
           Next
           
           Out Puerto, 255
       
 
       
        Data_Size_Bar_Val = Len(Bytes)

        BOF_Found = False
        Good_Data = False
        Str_Index = 0
        Do
            Temp_Data = GetDelimitedText(Bytes, ":", ":", Str_Index)
            If Temp_Data = "BOF" Then
                BOF_Found = True
                Counter = 0
                Do
                    Data_Str(Counter) = GetDelimitedText(Bytes, ":", ":", Str_Index)
                    Counter = Counter + 1
                Loop Until Counter > Data_Pts Or Str_Index = 0
                If Data_Str(Counter - 1) <> "EOF" Then
                    "Label_tx_status.Caption = "Failed, no EOF"
                    Bad_Tx = Bad_Tx + 1
                    "List_Diagnostics_EOF.AddItem Bytes
                Else
                    "Label_tx_status.Caption = "Good "
                    Good_Tx = Good_Tx + 1
                    For i = 0 To Data_Pts - 1
                        "Data_Val(i) = Val(Data_Str(i))
                        "Data(i).Caption = Data_Str(i)
                    Next i
                    Good_Data = True
                End If
            End If
        Loop Until Str_Index = 0 Or Good_Data = True
        If BOF_Found = False Then
            "Label_tx_status.Caption = "Failed, no BOF"
            Bad_Tx = Bad_Tx + 1
            "List_Diagnostics_BOF.AddItem Bytes
        End If
        If Good_Tx > 2147483600 Or Bad_Tx > 2147483600 Then " long = 2,147,483,648
            Good_Tx = Int(Good_Tx / 2)
            Bad_Tx = Int(Bad_Tx / 2)
        End If
        If Bad_Tx + Good_Tx > 0 Then
            Err_Pct = Good_Tx / (Bad_Tx + Good_Tx) * 100
            "Label_good_Tx_percent.Caption = Val(Format$(Err_Pct, "###"Giño) & " %"
        Else
            "Label_good_Tx_percent.Caption = "---%"
        End If
        "Label_good_tx.Caption = Val(Good_Tx)
        "Label_bad_Tx.Caption = Val(Bad_Tx)
    End If

End Sub


Private Sub trm_Data_Interval_chg()
   
   
    Tmr_Get_Data.Interval = Val(420)
    Bad_Tx = 0
    Good_Tx = 0

End Sub

Function GetDelimitedText(Text As String, OpenDelimiter As String, _
    CloseDelimiter As String, Str_Index As Long) As String
    " get the text enclosed between two Delimiters
    "
    " it advances Index after the close delimiter
    " Returns "" and Index = 0 if not found
    " search is case insensitive
   
    Dim i As Long, j As Long
   
    If Str_Index = 0 Then Str_Index = 1
   
    " search the opening mark
    i = InStr(Str_Index, Text, OpenDelimiter, vbTextCompare)
    If i = 0 Then
        Str_Index = 0
        Exit Function
    End If
    i = i + Len(OpenDelimiter)
   
    " search the closing mark
    j = InStr(i + 1, Text, CloseDelimiter, vbTextCompare)
    If j = 0 Then
        Str_Index = 0
        Exit Function
    End If
   
    " get the text between the two Delimiters
    GetDelimitedText = Mid$(Text, i, j - i)

    " advanced the index after the closing Delimiter
    Str_Index = j + Len(CloseDelimiter) - 1
   
End Function


"_____________esto va en un modulo Module1...
Declare Sub Out Lib "inpout32.Dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

Desconectado Golden_Eagle

  • PIC16
  • ***
  • Mensajes: 135
RE: Comunicacion Via puerto Serial
« Respuesta #7 en: 04 de Noviembre de 2004, 10:06:00 »
pues creo q este es tu problema "1 bit 0(8volt) o 1(-8volt) cada 1 segundo.. "
Si tienes el mscomm configurado a una velocidad de 9600 bit por segundo, nunca lograras establecer la comunicacion.
Te recomiendo q estudies un poco el protocolo rs 232, y eventualmente, q consideres usar el puerto paralelo para tu aplicacion (si es q estas corto con el tiempo)
Q Pic estas usando para hacer la trasmision??? (si es q lo haces. pq de hecho en ningun momento lo mensionaste)

En este link hay rutinas de comunicacion rs232 de bajo nivel, con este codigo empece a experimentar con las comunicaciones seriales, me fue muy ultil.
http://www.todopic.com.ar/asm/RS232/txrxasin.txt

Otro detalle, la propiedad input, si estas usando la configuracion por defecto del mscomm, te devuelve datos q deverias almacenar en una variable tipo string. Y recurda q estaras recibiendo cracteres ascci, si quieres recuperar el valor binario
equivalente al q envia tu circuito, tienes q tratar estos datos para convertirlos a tal formato una vez recivbidos.


Por otro lado, parece q tus necesidades de comunicacion son basicas.. se me ocurre q podrias hacer un protocolo de comunicacion sencillo, y en lugar de usar el pin RX del puerto, Conectas con el CTS y lees el puerto cada cierto intervalo (1 seg?) para chequear los bits q entran. O incluso puedes hacer una comunicacion sincronica aprovechando el DTR.

Desconectado dannyman

  • PIC10
  • *
  • Mensajes: 17
RE: Comunicacion Via puerto Serial
« Respuesta #8 en: 05 de Noviembre de 2004, 14:26:00 »
Hola.. Sabes que he estado un poquitin ocupado por el tema de las practicas y arreglo de papeles..  pero veo que tu no te has despreocupado de mi problem y no me cansare de darte las gracias por ello...
El codigo que me enviaste no lo entiendo muy bien en la noche lo voy a pasar al visual para ahi entenderlo.. Con lo que respecta por que no uso el puerto serial te voy a comentar que mi proyecto consiste en un diseño de la mejor manera de controlar el acceso a un parqueadero.. para lo cual tengo que presentar la comunicacion via puerto paralelo y serial.. la parte del paralelo ya me funciono muy bien pero este puerto serial si ha tenido sus cosas raras que no me imagine..

No estoy usando ningun pic sino que el codigo es ingresado "por el cliente" mediante un teclado bueno.. lo que pasa es que al final tenia niveles de voltaje ttl 5v y 0v los que me funcionaron muy bien en el puerto paralelo.. para el serial tuve que añadir un max232 al circuito para adaptar los niveles de voltage.. Como te dije estos niveles son 8v y -8v cada 1 segundo ya que tiene que esperar que el usuario pulse end para enviar el codigo (esto si es así, ya que he medido con multimetro en el puerto y los niveles de voltaje ingresan cada un segundo).. He leido y probado varios codigos de los foros pero al igual que mi prog.. no me ha funcionado..  Espero que esta explicacion te aya sido clara y puedas ayudarme
Lo que quisiera es en una variable (no se de que tipo) tener los 8 bits que ingresan para pasarle a decimal.. mas claro quisiera tener el numero decimal de la secuencia ingresada..

Saludos... espero tu respuestaIdea

Desconectado dannyman

  • PIC10
  • *
  • Mensajes: 17
RE: Comunicacion Via puerto Serial
« Respuesta #9 en: 05 de Noviembre de 2004, 14:48:00 »
A por cierto randux me parece que tu necesitabas activar un torniquete con el puerto serial... como te fue lo conseguiste... Oye una pregunta los niveles de voltaje en el serial como los conseguiste por que recuerdo que tu trabajabas con mi mismos niveles de voltaje Rs-232

Saludos....

Desconectado Golden_Eagle

  • PIC16
  • ***
  • Mensajes: 135
RE: Comunicacion Via puerto Serial
« Respuesta #10 en: 05 de Noviembre de 2004, 17:24:00 »
mmnnm pues creo q tienes un serio problema...
Hay ciertos tiempos q respetar en una comuniacion serial (mas en tu caso q elegiste asincronica)
vas a necesitar un pic para poder gestionar el envio de datos. no se me ocurre ninguna otra alternativa; a menos q quieras liarte con un regitro de desplazamiento y un reloj a  una freq de 9,6 khz....  (alguien probo hacer esto??? me suena bastante interesante para terminar de comprender el protocolo rs232 jajaAvergonzado)

para tratar los datos luego puedes usar la funcion Asc que "Devuelve un tipo Integer que representa el código de carácter correspondiente a la primera letra de una cadena." La cadena q te entrega la propiedad input...

Pero insisto, te recomiendo q estudies un poco el protocolo rs 232...

Desconectado dannyman

  • PIC10
  • *
  • Mensajes: 17
RE: Comunicacion Via puerto Serial
« Respuesta #11 en: 08 de Noviembre de 2004, 12:59:00 »
En una parte de mi circuita multiplexo los datos lo hago ayudado de un multiplexor y un contador para el cual ocupo un reloj de un segundo... Es por esto que al final de multiplexar  tengo un bit cada un segundo... Si el problema es el reloj lo podria hacer de menos o de mas tu dime...

Ah otra cosa sabes que como todos estos dias he estado haciendo y haciendo pruebas le puse la config del puerto en 1200,n,8,1... y ya me empezo a recibir datos en mi variable tipo byte los mismos que los paso con la func asc() y tengo un decimal.. el problema es que solo me funciona cuando al pasar los 8 seg que empieza a mandar el primer bit mi circuito le corto la alimentacion es por esto que si me paso al menos un poco o me apresuro en cortar la alimentacion me da otro caracter y por ende otro decimal.. He pensado ocupar un bit del puerto paralelo para enviar desde ahi 5v o 0v de alimentacion del max232.. y asi cortar la alimentacion.. tu que me aconsejas ........Giño

Desconectado randux

  • PIC10
  • *
  • Mensajes: 11
RE: Comunicacion Via puerto Serial
« Respuesta #12 en: 09 de Noviembre de 2004, 08:36:00 »
Dannyman como estas me alegra ver que haz avanzado con tu proyecto.

Bueno en referencia a si logre activar el rele del torniquete, esto lo estoy haciendo para el lugar donde trabajo y en realidad debo esperar a que aprueben dicho proyecto por lo que he dejado un poco las pruebas, sin embargo te cuento que sigo con la necesidad de activarlo, alguien me hablo del uso de transistores para ampliar el voltaje y que no solo este es el que dispara el rele sino que requiero de cierto amperaje, pero en realidad yo soy programador desdconozco de pic y transistores, me llama la atension el tema y siempre dedico tiepo a leer los comentarios de este, para mi el mejor foro de la red...

hermano si me puedes dar alguna pista de como llevar adelante este proyecto te lo agradeseré

Randux

Desconectado dannyman

  • PIC10
  • *
  • Mensajes: 17
RE: Comunicacion Via puerto Serial
« Respuesta #13 en: 09 de Noviembre de 2004, 22:24:00 »
Mira no recuerdo si estas usando el serie o el paralelo...

Si es por el puerto paralelo usa un rele de 5voltios (yo ya lo hice y no es complicado)...

El rele tiene 5 patitas... en un lado tres Que son en orden: Vcc(5volt), Entrada(mas bien lo que quieres que salga por la salida al disparar el rele) y Gnd... Mientras que las otras dos son Nc y No que son normalmente abierto y cerrado (las que van a ser las salidas)

No se bien lo que quieres hacer pero te comento lo que hice a ver si te ayuda.. Como al activar un pin de mi puerto paralelo o serial tengo cierta cantidad de volt de salida pero un bajo amperaje (no suficiente para activar el rele) lo que hice es conectar esta salida a una resistencia de 2.2Kohmios y de ahi a la base de un transistor cualquiera (yo use el 222) el emisor de este transistor conectalo a gnd, y el colector a la patilla de Gnd del rele... En la patilla de Vcc del rele conectas 5 voltios y en la entrada (la patilla del medio) pones el voltaje que necesite tu torniquete directamente, de la patilla nc te saldra este voltaje y podras activar el torniquete... esto siempre y cuando el puerto te mande por ejemplo 5voltios ya que si te manda 0 voltios (es decir cuando no quieras que se active el torniquete) el rele no estara polarizado y por ende no disparara...

Espero haberme hecho entender pero sino dime que no y te ayudo nos vemos y suerte....Flash

Desconectado randux

  • PIC10
  • *
  • Mensajes: 11
RE: Comunicacion Via puerto Serial
« Respuesta #14 en: 11 de Noviembre de 2004, 07:37:00 »
Hola DannyMan, como estas?

Te comento que me he estado documentado con respecto a los pics  y a una que otra cosita ademas de atender los comentarios que te han hecho los maestros colaboradores con respecto a tu proyecto.

   Entiendo lo que me describes y mejor explicacion imposible, en cuanto a que puerto estoy usando pues he probado con los dos, paralelo y serial de hecho elaboré los cables yo mismo siguiendo un esquema que conseguí en la  web y conecte unos leg y bueno por lo menos encienden. ahora bien tengo un rele de 12 voltios es el 743h-1c-c, 10A 12V ac, 10A 24V cd, pero conseguire esta semana uno de 5 voltios o de seis, lo otro es que no se si requiero colocar la resistencia de 2.2Kohmios y el transistor  222 a una placa o si esto lo puedo hacer directo, de esto si no tengo ni idea.

  Gracias nuevamente DannyMan, realmente te estoy muy agradecido.