Autor Tema: AYUDA URGENTE ADC con representación en 4 DISPLAY DE 7 SEGMENTOS  (Leído 6021 veces)

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

Desconectado hernando2999

  • PIC12
  • **
  • Mensajes: 99


HOLA AMIGOS...
LES CUENTO QUE ESTOY PROGRAMANDO EN ASM CON MPLAB PARA EL PIC 16F873 Y PUES QUE ASI MISMO CON EL CONVERSOR ANALOGO ....UTILIZO UN POT PARA VARIAR LA ENTRADA ANALOGA... BUENO LES CUENTO COMO ESTOY ... LA COMVERSION LA ESTOY HACIENDO A 10BIT EN LA CUAL QUIERO UNA RESOLUCION DE RESOLUCION=VREF/1024 =150/1024 =14.64mV...BUENO ME PASA LO SIGUIENTE... EN LA PARTE DE VISUALIZACION DE VALORES EN LOS DISPLAY ESTA MUY BIEN ... PASO BINARIO A BCD PARA MOSTRAR POR VARRIDO VALORES EN CADA DISPLAY... ESTO OK...

AHORA EL PROBLEMA
RESULTA QUE LLAMO LA CONVERSION Y MUESTRO EL ADRESH Y EL ADRESL EN LOS DISPLAY ... LO MINIMO 0 0 0 0 LO MAX 3 2 5 5 EN LOS DISPLAY... AHORA SE QUE DEBO MUUTIPLICAR EL (ADRESH Y ADRESL) X RESOLUCION OSEA : (ADRESH Y ADRESL) X (VREF/1024) ASI OBTENDRE COMO MINIMO 0 0 0 0 Y COMO MAXIMO 150.0 EN LOS DISPLAY .... OK

BIEN RESULTA QUE ME CONSEGUI UNAS LIBRERIAS DE ARITMETICAS.... Y ESTOY INTENTANDO HACERLO (LO DE LAS MULTIPLICACIONES) PERO RESULTA QUE ESTAS MANEJAN REGISTROS DE HASTA 32BITS.... Y PUES COMO SABRAN QUEDO FRITO YA HE PROGRAMADO Y REPROGRAMADO Y NO DOY CON EL CHISTE ....

ALGUIEN DE USTEDES AH TENIDO ESTA EXPERIENCIA Y LA HA SOLUCIONADO... NECESITO UN EJEMPLO DE COMO PASAR UNA CONVERSION DE 10BIT X RESOLUCION A CUATRO DISPLAY DE SIETE SEGMENTOS....


ESPERO UNA REAL AYUDA ... POR FAVOR NO ME ENREDEN LA PITA...
SALUDOS

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: AYUDA URGENTE ADC con representación en 4 DISPLAY DE 7 SEGMENTOS
« Respuesta #1 en: 25 de Enero de 2006, 00:25:00 »
Hola. Como es esto?
Necesitas multiplicar 10 bits(del ADC) por cuantos bits?? no entendi bien...perdona pero a estas horas ando lentoSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa Gigante

Y a ver si me explicas ese maximo de 3255 de donde salelocoloco que me perdi algo sino...

Exitos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado hernando2999

  • PIC12
  • **
  • Mensajes: 99
RE: AYUDA URGENTE ADC con representación en 4 DISPLAY DE 7 SEGMENTOS
« Respuesta #2 en: 25 de Enero de 2006, 00:40:00 »
HOLA GRACIAS POR RESPONDER ....MIRA
SI HAGO LA CONVERSION A 10 BITS TENDRE DOS REGISTROS UNO DE 8BIT Y OTRO DE 2BIT LOS CUALES SON EL ADRESH Y EL ADRESL EN DONDE ESTA EL VALOR DE LA CONVERSION... BUENO COMO SON 10 BIT ENTONCES EL BALOR MAXIMO EN LA CONVERSION ES 1024 QUE ESTA EN LOS MISMOS REGISTROS ADRESH Y ADRESL EN DONDE 3 ES EL VALOR MAS SIGNIFICATIVO Y 255 EL MENOS SIGNIFICATIVOS

11   11111111
3       255
    V
 1024

RESULTA QUE PARA PASAR EL VALOR DE LA CONVERSION A UN LENGUAJE HUMANO ... OSEA VOLTAJE, CORRIENTE TEMPERATURA....ETC .SE DEBE MULTIPLICAR EL VALOR DE LA CONVERSION POR LA RESOLUCION EN MI CASO 153.7/1024   PARA QUE EN LOS DISPLAY ME APARESCA COMO VALOR MINIMO 000.0 VOLTIOS Y COMO MAXIMO 153.7 VOLTIOS

ENTONCES QUE TENGO...
UNA CONVERSION A 10 BIT... TOTALMENTE  FUNCIONANDO
UNA RUTINA  EN DONDE ME MUESTRA VALORES POR VARRIDO EN LOS 4 DISPLAY

QUE ME FALTA.....
UNA RUTINA QUE ME PERMITA TRANSFORMAR EL VALOR DE LA CONVERSION A UN LENGUAJE HUMANO....VOLTAJE TEM ...CORRIENTE ...ETC,,,

PIENSO QUE DEBO HACER: MULTIPLICAR EL (ADRESH Y ADRESL)* (153.7/1024) =
VALORES DECIMALES Y FLOTANTES PARA MOSTRAR EN LOS DISPLAY

FAVOR SI NO FUI CLARO DECIRMELO








Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
RE: AYUDA URGENTE ADC con representación en 4 DISPLAY DE 7 SEGMENTOS
« Respuesta #3 en: 25 de Enero de 2006, 03:06:00 »
Hola hernando2999.

Pégale un vistazo a este post.

http://miarroba.com/foros/ver.php?foroid=79706&temaid=4623928

Yo lo haría asi:

Si la Vref de mi conversión son 5V. y utilizamos 10 bits para la conversión tenemos una resolución de 5/1024 = 4.8828125*10^-3

Si los límites a representar en el los displays son de 0 a 150 el factor por el que tendremos que multiplicar el valor recibido del AD será:

150/1024 = 0.146484 (redondeamos a 0.15)

Que hago yo en estos casos? Multiplico por 15 despreciando los demas decimales. entonces tenemos:

Límite inferior -> 0*15 = 0 (a representar en el display)

Límite superior -> 1024*15 = 15360 (le quitamos un cero y lo representamos en el display).

No es muy preciso (puesto que las operaciones las hago en 16 bits y nunca podemos exceder el número 65535). Quieres más precisión? Hazlo con rutinas en 24 o 32 bits.

Con 24 bits se quedaría:

El factor por el que multiplicamos es

0.146484 (redondeamos a 0.14648)

Límite inferior -> 0*14648 = 0 (a representar en el display)

Límite superior -> 1024*14648 = 14999552 (nos quedamos con las 3 primeras cifras y las representamos en el display).

Tienes que valorar la precisión de la medida que deseas. Esta forma de trabajar no es exacta pero... si tu aplicación te lo permite, es muy rápda de hacer.

Para los decimales lo mejor es multiplicar o dividir por potencias de 10 y efectuar las operaciones aritméticas de forma normal (teniendo en cuanta siempre que no nos pasamos de los límites de las operaciones.)

Bueno... ya nos comentas.


Un saludo desde Alicante.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: AYUDA URGENTE ADC con representación en 4 DISPLAY DE 7 SEGMENTOS
« Respuesta #4 en: 25 de Enero de 2006, 03:50:00 »
Hola. Me puse un ratito con hoja y lapiz y programe este codigo...

Cabe destacar que lo programe exclusivamente para TU PROPOSITO. SIEMPRE multiplica por 1537 y divide por 1024.(Te equivocaste, en realidad habia que dividir por 1023 pero ya es demasiado tarde(me di cuenta cuando ya habia terminado), y modificarlo...lindo rollo...locoloco Sonrisa GiganteSonrisa Gigante. Lo hice para 1024...lo que produce un pequeño desfasaje de 0.2Volts MAXIMO)

DESTACO: LA ALINEACION DEL RESULTADO DE LA CONVERSION DEBE SER A LA DERECHA.(CREO QUE YA LA ESTABAS USANDO ASI)

NECESITAS DECLARAR ESTOS REGISTROS:

AUX1,AUX2,AUX3,TMP1,TMP2,OUTL,OUTM,OUTH,RESTOL,RESTOH


LA FUNCION REGLA3

RECIBE: ADRESL : LECTURA 8 BITS BAJO PESO CONVERSOR AD
             ADRESH : LECTURA 2 BITS ALTO PESO CONVERSOR AD

DEVUELVE:
OUTL: BYTE BAJO PESO RESULTADO
OUTM: BYTE MEDIANO PESO RESULTADO
OUTH: BYTE ALTO PESO RESULTADO
RESTOL:RESTO BAJO PESO RESULTADO
RESTOH:RESTO ALTO PESO RESULTADO

DESTACO:

EL RESTO OBVIAMENTE ESTA DENTRO DEL INTERVALO CERRADO [0;1023]. ESTO SIRVE POR SI QUERES SEGUIR SACANDO MAS DECIMALES DE PRECISION, PODES HACERLO.(SINO PREGUNTAME QUE TE EXPLICOloco

EL RESULTADO SE ENTREGA EN OUTL Y OUTM Y COMO MAXIMO VA A VALER 0X5FF(SI LA CONVERSION AD ES 0X3FF). POR LO TANTO EL RESULTADO ES MAXIMO 12 BITS, ES DECIR:

PARA MOSTRARLO EN LOS 4 DISPLAYS, VAS A NECESITAR UN CODIGO QUE TE CONVIERTA ESTE RESULTADO A DECIMAS, UNIDADES,DECENAS Y CENTENAS.

UN EJEMPLO:

ADRESL = 0XAA
ADRESH=0X01

DEVUELVE:

OUTL=0X7F
OUTM=0X02
OUTH = SIEMPRE CERO. RECORDALO, PARA DESCARTARLO DIRECTAMENTE...
RESTOL=0XAA
RESTOH=0X00

ENTONCES TENEMOS COMO RESULTADO: 0X27F (ENCADENANDO LOS 2 BYTES)
0X27F = 639

COMO MULTIPLIQUE POR 1537 EN LUGAR DE HACERLO POR 153,7 AHORA TENGO QUE DESPLAZAR LA COMA UN LUGAR PARA LA IZQ. EL RESULTADO QUE DEBE APARECER EN LOS DISPLAYS ES:
0 6 3 9

O LO QUE ES LO MISMO: 63,9

EL CODIGO:

REGLA3      CLRF   AUX3
         CLRF   OUTH
         MOVF   ADRESH,W
         MOVWF   AUX2
         MOVWF   OUTM
                                                BSF          STATUS,RP0
         MOVF   ADRESL,W
                                                BCF          STATUS,RP0
         MOVWF   AUX1
         MOVWF   OUTL
         MOVLW   .9
         MOVWF   TMP1

SIGUEROT   CALL   ROTAIZQ
            
         DECFSZ   TMP1,F
         GOTO   SIGUEROT

         CALL   SUMA24
         CALL   ROTAIZQ
         CALL   SUMA24

         MOVF   OUTL,W      ;INICIO DIVISION (/1024)
         MOVWF   RESTOL
         CLRF   OUTL
         MOVF   OUTM,W
         MOVWF   TMP1
         CLRF   OUTM

         MOVF   OUTH,W
         MOVWF   TMP2
         CLRF   OUTH
         
         ;CLRF   AUX1
         CLRF   AUX2
         CLRF   AUX3
         
         MOVF   TMP2,W
         BTFSC   STATUS,Z
         GOTO   NOALTO

         MOVLW   .64
         MOVWF   AUX1
         CALL   SUMA24
         DECFSZ   TMP2,F
         GOTO   $-2

NOALTO      MOVF   TMP1,W
         BTFSC   STATUS,Z
         GOTO   NOHAYRESTO

OTROM      MOVLW   .4
         MOVWF   AUX1
         SUBWF   TMP1,F
         BTFSS   STATUS,C
         GOTO   FILLRESTO

         MOVLW   .1
         MOVWF   AUX1
         CALL   SUMA24

         MOVF   TMP1,F
         BTFSS   STATUS,Z
         GOTO   OTROM

         CLRF   RESTOH
         RETURN

NOHAYRESTO   CLRF   RESTOH
         RETURN

FILLRESTO   COMF   TMP1,F
         INCF   TMP1,F
         RETURN         




ROTAIZQ      BCF      STATUS,C
         RLF      AUX1,F
         RLF      AUX2,F
         RLF      AUX3,F
         RETURN

SUMA24      MOVF   AUX1,W
         ADDWF   OUTL,F
         BTFSS   STATUS,C
         GOTO   OKM

         INCFSZ   OUTM,F
         GOTO   OKM
         
         INCF   OUTH,F

OKM         MOVF   AUX2,W
         ADDWF   OUTM,F
         BTFSC   STATUS,C
         INCF   OUTH,F
   
         MOVF   AUX3,W
         ADDWF   OUTH,F
         RETURN

Ya voy a tener que comenzar a pantentar algoritmos si sigo asiSonrisa GiganteFumadorDivertido
EXITOS!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado hernando2999

  • PIC12
  • **
  • Mensajes: 99
RE: AYUDA URGENTE ADC con representación en 4 DISPLAY DE 7 SEGMENTOS
« Respuesta #5 en: 29 de Enero de 2006, 11:11:00 »
OK GRACIAS AMIGO VOY A HECHARLE UN VISTAZO

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: AYUDA URGENTE ADC con representación en 4 DISPLAY DE 7 SEGMENTOS
« Respuesta #6 en: 29 de Enero de 2006, 12:22:00 »
hernando, me olvide de pasar al banco 1 para tomar el valor del ADRESL y luego volver al cero. Fijate que modifique el programa mas arriba. Perdona...pequeño error...jaja.
Exitos...
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado hernando299

  • PIC10
  • *
  • Mensajes: 2
Re: AYUDA URGENTE ADC con representación en 4 DISPLAY DE 7 SEGMENTOS
« Respuesta #7 en: 26 de Julio de 2013, 14:49:59 »
Hola foristas, soy yo hernando, me han escrito a mi correo y pues aqui pongo una solucion, para lo que deseaba hacer, lo mejor es que manejes 2 registros o utilizar el adresh, bueno yo anduve por el asm varios años y en un programa donde utilice muchas funciones que fueron casi 3000 lineas de código dure casi 8 meses en perfeccionarlo trabajándole todas las semanas y en las noches, le cuento que ese mismo programa lo hice mejorado en csc y solo gaste 2 dias, no he vuelto a desde entonces a usar el asm, el c me ahorra tiempo y trasnochadas, además se hacen las cosas más rápido y así lo que sobra es tiempo.
Saludos

Desconectado BBMNet

  • PIC12
  • **
  • Mensajes: 91
Re: AYUDA URGENTE ADC con representación en 4 DISPLAY DE 7 SEGMENTOS
« Respuesta #8 en: 10 de Septiembre de 2013, 03:06:55 »
Por si a alguien le interesa, en el hilo siguiente doy una idea para resolver ese problema. Ésta es básicamente utilizar el valor obtenido del ADC para apuntar a una tabla conteniéndo los códigos a utilizar en el display. El link es el siguiente.

http://www.todopic.com.ar/foros/index.php?topic=36247.0

Como menciono en ese hilo esa es la técnica utilizada en la mayoría de los instrumentos comerciales ya que se obtiene mayor velocidad de respuesta además de que permite "linealizar" lecturas de cualquier transductor.

Saludos.