Autor Tema: Comunicacion de Multimetro UT60 con PIC18F452  (Leído 6309 veces)

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

Desconectado JohnMacklo

  • PIC10
  • *
  • Mensajes: 5
Comunicacion de Multimetro UT60 con PIC18F452
« en: 07 de Octubre de 2009, 15:18:43 »
Amigos del foro

Hace un par de meses se me encomendo el proyecto de muestrear voltajes auxiliandome de un multimetro. La cosa hasta ahi es sencilla, el problema es que esos voltajes necesitaban ser almacenados en una base de datos. El multimetro que tenía a la mano es un MUL-600 de Steren. Ese es el nombre con el que se le conoce en México, pero en el resto de America, el multimetro es un UT60e y en Europa es un V80.
Despues de mucho investigar, me di cuenta de que las hojas de datos que vienen en el multimetro no funcionan, ya que en ellas te especifican lo siguiente.

Baud Rate 2400
Start bit 1 (always 0)
End bit 1 (always 1)
Data bits 7
Parity NONE.


Cabe aclarar que esto NO es correcto. Lo correcto es:

Baud Rate 2400
Start bit 1 (always 0)
End bit 1 (always 1)
Data bits 8
Parity NONE.


Luego de varias pruebas con el puerto serial del multimetro, me di cuenta de que, este tiene tres señales de entrada y una de salida (datos). Construi el siguiente circuito y la habilitación por hardware del multimetro funciono bien, pero a la hora de intentar leer los datos, me di cuenta de que la decodificación de realiza de manera no estandar, lo que involucra conocer el string que llega perfectamente.
Aqui les dejo los datos de como hice el circuito y la decodificación del mismo.
El programa lo relice en PicBasic Pro.
Si alguien tiene alguna duda, por favor, hagamela saber. No soy ningun experto, ni mucho menos, pero creo que el asunto de la comunicación de este multimetro, esta sanjado.

Cabe aclarar, que no decodifique todas las unidades que puede medir el multimetro en este programa, debido a que yo unicamente iba a leer voltajes, pero, si necesitan las otras opciones, con gusto se las pasare a todos.

'  CONEXIONES ENTRE LA PIC Y LOS ADAPTADORES MAX232.
'  CONSULTAR HOJA DE DATOS DE MAX232 PARA CONEXIONADO DE CAPACITORES DE DESACOPLAMIENTO Y ALIMENTACION
'  CONSULTAR HOJA DE DATOS DE PIC18F452 PARA CONEXIONADO DE ALIMENTACION Y CIRCUITO DE RESONADOR
'                                                                                    |
'                                                                                    |
' +----------+                      +---------+                  +---+  |   +---+
' |              |26<-<-<-<-<-9|  MAX    |8<-<-<-<-<-| 2  |   |   | 2  |
' |              |25->->->->-10|  232     |7->->->->->| 7  |   |   | 7  |         
' |              |23->->->->-11|            |14>->->->->| 3  |   |   | 3  |   
' |              |                      +---------+                   |    |   |   |     |
' |              |                                                         |    |   |   |     |
' |  PIC       |                      +---------+                   |    |   |   |     |         
' |  18F452  |17->->->->-10|  MAX    |7->->->->->| 4  |   |   | 4  |                 
' |              |                       |  232    |                    |    |   |   |     |         
' |              |                       |           |                    |    |   |   |     |
' |              |                      +---------+       GND----| 5  |   |   | 5  |
' |              |                                                        +---+  |   +---+
' |              |                                                 CONECTOR |  CONECTOR
' +----------+                                               DB9 MACHO | DB9 HEMBRA
'                                                                                    |(CABLE DEL MULTIMETRO)
'                                                                                    |   
'  PIN 26 = RX                                                       
'  PIN 25 = RTS
'  PIN 23 = TX
'  PIN 17 = DTR
'
'  PARA COMUNICAR EL MULTIMETRO CON EL PUERTO SERIAL, SE NECESITAN 3 PINES DE SALIDA Y
'  UN PIN DE ENTRADA. EL CI MAX232, SOLO PROVEE 2 ENTRADAS Y DOS SALIDAS, POR LO QUE SE USARON
'  2 DE ESTOS CIRCUITOS PARA CONSTRUIR LA INTERFACE. cONSULTE LA HOJA DE DATOS DEL MAX232 PARA
'  REEMPLAZAR ESTOS DOS CI´S POR UNO MAS ROBUSTO.


PRINCIPAL: INICIAL = 0                     
           FINAL = 3
           PUNTO = 0
           DIGITO = 0
           I = 0
           J = 0
           PTR = 0
           PORTE   = %00000000
         PORTB   = %00000000
         TARJETA = %00000000
         CELDA   = %00000000
         Low RTS1
'HABILITA TX. SE HABLITA LA INTERFACE DEL OPTOACOPLADOR DEL MULTIMETRO.
           High TX   
'HABILITA RTS. CON ESTA SEÑAL Y DTR, SE ALIMENTA EL OPTOACOPLADOR DEL MULTIMETRO.         
           High RTS   
'HABILITA DTR. CON ESTA SEÑAL Y RTS, SE ALIMENTA EL OPTOACOPLADOR DEL MULTIMETRO.                  
           Low DTR

DECODE:    Pause 3000       'ESPERA 3 SEGUNDOS A QUE EL MULTIMETRO SE ESTABILISE PARA OBTENER DATOS
'SE INTRODUCEN DATOS DEL MULTIMETRO CON FORMATO 24008N1                         
           Serin2 RX,396,3000,TIMEOUT,[WAIT ($17), STR BUFRS\13]
'CHECA SI EL MULTIMETRO ESTA EN MODO AUTOMATICO, RS232 ACTIVADO, CD Y LECTURA DE VOLTAJES.           
                     
'COMIENZA A DECODIFICAR LA CADENA DE CARACTERES QUE LE ENVIO EL MULTIMETRO.
'EJEMPLO 1
'EL MULTIMETRO ENVIA:
'17 2F 3D 47 5D 60 75 8F 9F A0 B8 C1 D4 E8
'ESTO SIGNIFICA:
'AUTO; RS232; DC: -001.8 mV

'EJEMPLO 2
'EL MULTIMETRO ENVIA:
'15 25 3B 40 55 67 7D 8F 9E A0 B0 C0 D1 E1
'ESTO SIGNIFICA:
'RS232; DC: 210.6

'  BIT  |  17      |    2F 3D        |    47 5D       |    60 75       |    8F 9F        |  A0      |  B8    |  C1     |  D4   |  E8
'  bit0  | RS232 |                    |                    |                   |                   | DIODO | BEEP | HOLD  | BAT  |  N/A
'  bit1  |  AUTO |                    |                    |                    |                   |   k        |  M     | DELTA |  Hz   |  N/A
'  bit2  |  DC    |                    |                    |                    |                    |   n       |  %     |  OHM  |  V     |  N/A
'  bit3  |  AC    |                    |                     |                   |                    |   u        |  m    |   F      |  A     |  N/A
'         |           |    -0             |     0             |      1            |     .8            |             |         |          |        |
'        | RANGO | 1ER DIGITO | 2DO DIGITO | 3ER DIGITO | 4TO DIGITO |       |      |       |      |
'
'              b5
'             ------                            MSB                  LSB
'           |        |
'      b6 |         | b1               DIGITO = b8 b7 b6 b5 b4 b3 b2 b1
'  b8     |  b2   |
'  ---       ------
'           |       |
'       b7 |       | b3
'           |       |
'    b8 .  ------
'            b4
'
'           I = 0                 'PUNTERO DE DIGITOS POR LECTURA (4 DIGITOS POR LECTURA)
           For J = 0 To 7 Step 2
               BYTE1 = ((BUFRS[J] & $07)<< 4)   'OBTIENE EL PRIMER DATO, SE HACE UNA MASCARA CON $07 Y LO RECORRE 4 ESPACIOS A LA IZQUIERDA
                                                '-001.8 = 2F 3D 47 5D 60 75 8F 9F 
                                                '        00101111 = $2F
                                                '      & 00000111 = $07
                                                '      = 00000111 = 01110000 (BYTE1)
               Byte2 = BUFRS[J+1] & $0F         'OBTIENE EL SEGUNDO DATO, SE HACE UNA MASCARA CON $0F
                                                '        00111101 = $3D
                                                '      & 00001111 = $0F
                                                '      = 00001101 = 00001101 (BYTE2)
               DIGITO = BYTE1 | BYTE2           'SUMA DE BYTE1 Y BYTE2
                                                '        01110000 = $70
                                                '      + 00001101 = $0D
                                                '      = 01111101 = $7D      (DIGITO)
               PUNTO = ((BUFRS[J] & $08)>> 3)   'DEL PRIMER DATO HACE UNA MASCARA CON $08 PARA OBTENER EL PUNTO DEIMAL O EL SIGNO
                                                '        00101111 = $2F
                                                '      & 00001000 = $08
                                                '      = 00001000 = 00000001 (PUNTO)
               Select Case DIGITO
                      Case $7D        '$7D = 0 ; $FD = 0 CON SIGNO o PUNTO DECIMAL
                           DIGITO = 0
                      Case $05       '$05 = 1 ; $85 = 1 CON SIGNO o PUNTO DECIMAL
                           DIGITO = 1
                      Case $5B       '$5B = 2 ; $DB = 2 CON SIGNO o PUNTO DECIMAL
                           DIGITO = 2
                      Case $1F       '$1F = 3 ; $9F = 3 CON SIGNO o PUNTO DECIMAL
                           DIGITO = 3
                      Case $27       '$27 = 4 ; $A7 = 4 CON SIGNO o PUNTO DECIMAL
                           DIGITO = 4
                      Case $3E       '$3E = 5 ; $BE = 5 CON SIGNO o PUNTO DECIMAL
                           DIGITO = 5
                      Case $7E       '$7E = 6 ; $FE = 6 CON SIGNO o PUNTO DECIMAL
                           DIGITO = 6
                      Case $15       '$15 = 7 ; $95 = 7 CON SIGNO o PUNTO DECIMAL
                           DIGITO = 7
                      Case $7F       '$7F = 8 ; $FF = 5 CON SIGNO o PUNTO DECIMAL
                           DIGITO = 8
                      Case $3F       '$3F = 9 ; $BF = 9 CON SIGNO o PUNTO DECIMAL
                           DIGITO = 9
                      Case $68
                           DIGITO = 0
                      Case Else
                           DIGITO = 0
               End Select
               CHAIN[PTR] = DIGITO        'GUARDA EL VALOR DE DIGITO
               FLOAT[PTR] = PUNTO         'GUARDA EL VALOR DE PUNTO
               PTR = PTR + 1
           Next J
           ESCALA = BUFRS[9]
           Select Case ESCALA
                  Case $B8     
                       ESCALA = "m"        'MILIS
                  Case Else
                       ESCALA = " "
           End Select
           UNIDADES = bufrs[11]
           Select Case UNIDADES
                  Case $D4
                       UNIDADES = "V"      'VOLTS
                  Case Else
                       UNIDADES = " "       
           End Select
           SCALE = ESCALA         'GUARDA LA ESCALA
           UNIT = UNIDADES        'GUARDA LAS UNIDADES
           I = i + 1
           Pause 500
           Return

Desconectado ema

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1078
Re: Comunicacion de Multimetro UT60 con PIC18F452
« Respuesta #1 en: 07 de Octubre de 2009, 15:48:05 »
Primero que nada bienvenido al Foro.

 :-/ :-/ gracias por compartir estos datos, me seran muy útiles, ya que poseo un UT60E...

Aunque no comprendi bien tu problema (Ademas no uso Basic), te adjunto un pdf que alguna ves encontre por ahi donde se detalla el protocolo de comunicación.

Muchas Gracias JohnMacklo..

P/D: Eres todo un artista del ASCII.  :mrgreen:

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Comunicacion de Multimetro UT60 con PIC18F452
« Respuesta #2 en: 07 de Octubre de 2009, 16:13:22 »
Enhorabuena por conseguirlo y gracias por compartirlo. Bienvenido.

Desconectado Felixls

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 300
Re: Comunicacion de Multimetro UT60 con PIC18F452
« Respuesta #3 en: 07 de Octubre de 2009, 21:13:40 »
JohnMacklo y Ema, muchas gracias!!  :-/ :-/ :-/ :-/ :-/ :-/ :-/

Tengo un UT60A y me viene al pelo vuestro avance!!

Gracias por compartir la investigación  :-) :-)

Desconectado JohnMacklo

  • PIC10
  • *
  • Mensajes: 5
Re: Comunicacion de Multimetro UT60 con PIC18F452
« Respuesta #4 en: 10 de Octubre de 2009, 20:28:40 »
Primero que nada bienvenido al Foro.

 :-/ :-/ gracias por compartir estos datos, me seran muy útiles, ya que poseo un UT60E...

Aunque no comprendi bien tu problema (Ademas no uso Basic), te adjunto un pdf que alguna ves encontre por ahi donde se detalla el protocolo de comunicación.

Muchas Gracias JohnMacklo..

P/D: Eres todo un artista del ASCII.  :mrgreen:

Antes que nada, gracias por darme la bienvenida al foro. Es bueno saber que la información que uno reune le sirve a alguien para hacer más llevadera su vida.
Ahora, quisiera hacer una fé de erratas.
Cuando dije en mi post original
Citar
El multimetro que tenía a la mano es un MUL-600 de Steren. Ese es el nombre con el que se le conoce en México, pero en el resto de America, el multimetro es un UT60e y en Europa es un V80.
Realmente quise decir:

El multimetro que tenía a la mano es un MUL-600 de Steren. Ese es el nombre con el que se le conoce en México, pero en el resto de America, el multimetro es un UT60e de UNI-TREND y en Europa es un VC-840 de VoltCraft.

Creo, sin lugar a dudas, que por la emoción de compartir mi hallazgo, no establecí correctamente lo que queria hacer.
El proyecto consistía en hacer un sistema de muestreo de 85 voltajes diferentes con una PIC. Eso lo solucioné rápidamente haciendo un decodificador modular de 15 relevadores por tarjeta. lo que implica que necesitaba 6 tarjetas para muestrear los 85 voltajes requeridos. Cada vez que activara un relevador, este tenía que conmutar el voltaje que tuviera en sus puntas, hacia un multimetro, para que este último se encargara de la medición. Para obtener los datos en la PC, el multimetro debería tener comunicación serial. A mis manos llego el antes mencionado aparato y ahi fue donde comenzó el peregrinar.

Desarticule el cable de comunicaciones del multimetro, y con ayuda del osciloscopio, me pude dar cuenta de que utilizaba tres pines de entrada y uno de salida. Cada uno con una señal RS232 diferente (Esas señales estan explicadas anteriormente). Lo facíl fue hacer una interface con la pic y dos max232 y decirle a la pic que habilitara debidamente sus pines para obtener datos. 

Ema: Te agradezco infinitamente el documento. Cuando comencé a intentar desarrollar la comunicación con el multimetro, dicho documento llegó a mis manos, pero realmente no fue de mucha ayuda. Buscando en la red, me encontré el siguiente blog:

http://blog.lionelsacks.com/2007/06/exercies-reading-out-unit-trend-ut60e.html

Ese fue mi verdadero punto de partida para realizar el programa que les mostré. Luego de comunicarme con Lionel, él amablemente me dijo que ya no tenía info al respecto, por lo que, me di a a la tarea de seguir buscando y encontré una pagina en checoslovaco que, si bien no entendí nada del lenguaje coloquial, si entendí algo de ceros y unos, y eso tambien me ayudó bastante.

http://www.elektroda.pl/rtvforum/topic404247.html

Luego de que los gráficos me explicaran algo (Una imagén vale más que mil palabras). Decidí hacer un intento más con consecuencias nada agradables, el string que me enviaba el multimetro lo recibía correctamente, pero no sabía como decodificarlo. Lo que es peor, a veces, recibía el string incorrectamente, y ahi es donde torcía la marrana el rabo.

Realmente estaba desesperado, pero por ahi, en alguna pagina leí que en Alemania, dicho multimetro era manufacturado por VOLTCRAFT. Luego de una intensa busqueda, encontré el siguiente enlace:

http://www.hjberndt.de/soft/vc840.html

Ahi encontraran programas de ejemplo y una cantidad enorme de documentación de dicho aparato. Ahi es donde se darán cuenta que los revendedores falsean la información acerca de los datos de comunicación seriales a fin de que solo puedas utilizar su software para comunicación con la PC.

Espero que ahora con esta info, les sea más util mi primer aportación y espero poder seguir haciendo más aportaciones al foro.
 

Desconectado turkosale

  • PIC10
  • *
  • Mensajes: 4
Re: Comunicacion de Multimetro UT60 con PIC18F452
« Respuesta #5 en: 18 de Marzo de 2010, 13:34:27 »
Hola, muy buen proyecto, me gustaría que me expliques bien como armas los dígitos ya que no entiendo.


muchas gracias :)


 

anything