Autor Tema: Conversor A/D con PIC16F76  (Leído 9076 veces)

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

Desconectado telojurito

  • PIC12
  • **
  • Mensajes: 55
Conversor A/D con PIC16F76
« en: 25 de Octubre de 2008, 17:36:03 »
Hola,

Con la ayuda del foro acabo de hacer funcionar mi LCD de 4x20 y eso ha sido el inicio para el proyecto que traigo entre manos.

Se trata de un display LCD de 4x20 gobernado por un PIC16F76 con cristal de 8MHz que va a estar monitoreando el voltaje de entrada ya rectificado, es decir después del transformador de bajada de 127VAC a 18VAC. Después de rectificarlo con un puente de onda completa y capacitor de 100uF tengo un voltaje de 26VDC aprox.

Le he puesto un divisor de tensión con 1 resistencia de 10Kohms y luego una de 2Kohms y en medio de estas dos saco el valor muestra que lo llevo al RA5/AN5 de PIC. Esto es porque las RA0-RA3 las ocupo para controlar el LCD. Según mis calculos y lo que he encontrado de información aquí en el foro, el Valor Real de lo leido en el ADC seria

Vreal = 0.1171 * Vadc

Ok, el display funciona y al querer mostrar el valor leido en el ADC me muestra los caracteres correspondientes al binario del registro ADRES de acuerdo al mapa de caracteres del LCD. Encontré una rutina que convierte de binario a decimal y lo mujestra en el display:

LCDval08:
   clrf   Bcheck
   movlw   d'100'
   movwf   TEMP2
   call   VALcnv
   movlw   d'10'
   movwf   TEMP2
   call   VALcnv
   movlw   d'1'
   movwf   TEMP2
   bsf      Bcheck,0
   call   VALcnv
   return

VALcnv:
      clrf   TEMP1
      movfw   TEMP2
VALc01   subwf   VIN,0
      skpc
      goto   LCDval2
      incf   TEMP1,1
      movfw   TEMP2
      subwf   VIN,1
      bsf      Bcheck,0
      goto   VALc01

LCDval2   movlw   '0'
      addwf   TEMP1,0
      btfss   Bcheck,0
      movlw   ' '
      call   LCD_DAT

el valor de VIN es el que saco del registro ADRES.

Lo he probado físicamente y sí me muestra un valor decimal en el display pero no me parece que sea el valor que busco a veces es un valor de un sólo digito, a veces de 2 digitos a veces es cero y a veces nada. Podrían explicarme cómo funciona esta rutina? ya que como mencioné la encontre en un libro en pdf y sólo lo copié con algunos cambios de acuerdo a mis variables pero no logro entender cómo funciona.

Por otro lado, si hay alguna forma para hacer que el valor en ADRES lo pueda visualizar en el LCD les agradecería me dijeran cómo hacerlo.

Saludos

Desconectado telojurito

  • PIC12
  • **
  • Mensajes: 55
Re: Conversor A/D con PIC16F76
« Respuesta #1 en: 25 de Octubre de 2008, 21:20:10 »
Bueno, una pregunta más concreta:

Si ya tengo un valor en el registro ADRES del PIC cómo lo convierto al correspondiente valor real de voltaje y lo pongo en el lcd?

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Conversor A/D con PIC16F76
« Respuesta #2 en: 27 de Octubre de 2008, 18:57:35 »
Saludos

Lo único mal que veo por encima es que no estás configurando las entradas del puerto A como entradas digitales,
La sugerencia que te doy es que configures el módulo A/D, los registros son los siguientes ADCON0 y ADCON1 (1FH, 9FH respectivamente), creo que el error esta aquí.

Un saludo desde Pereira - Colombia
Un saludo desde Pereira - Colombia

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Conversor A/D con PIC16F76
« Respuesta #3 en: 27 de Octubre de 2008, 19:53:45 »

Saludos

Que pena compañero pero la red esta loca. lo que te queria comentar es que tienes que tener en cuenta la resolución de loa conversión. La conversión es dada por, Resolución = VREF / (2^N - 1) donde N es el número de bits, creo que este micro tiene 10 Bits lo que da una resolución de = VREF / 1023. Lo que decir , que por cada paso el conversor me va a entragar VREF / 1023.

Espero haber sido conciso y espero que puedas solucionar tu problema

Un saludo desde Pereira - Colombia 
Un saludo desde Pereira - Colombia

Desconectado telojurito

  • PIC12
  • **
  • Mensajes: 55
Re: Conversor A/D con PIC16F76
« Respuesta #4 en: 28 de Octubre de 2008, 19:39:46 »
No el PIC16F76 tiene un ADC de 8 bits. Como comentaba al principio del post trato de monitorer el voltaje de entrada ya rectificado, es decir después del transformador de bajada de 127VAC a 18VAC. Después de rectificarlo con un puente de onda completa y capacitor de 100uF tengo un voltaje de 26VDC aprox.

Le he puesto un divisor de tensión con 1 resistencia de 10Kohms y luego una de 2Kohms y en medio de estas dos saco el valor muestra que lo llevo al RA0/AN0 del PIC (los pines de control del display los cambié al PORTC. En el divisor de tensión fije el voltaje de entrada o V1 a 30VDC y el de salida o V2 a 5V. De ahi los valores de las resistencias, fijé el de la primera a 10Kohms y de los cálculos me dá la segunda a 2Kohms. Según mis calculos y lo que he encontrado de información aquí en el foro, el Valor Real de lo leido en el ADC seria

Vreal = 0.1171 * Vadc

y si mi Vref+ sería de 5V y el Vref- de 0V

estoy en lo correcto????

Ahora, sé que tengo un valor en ADRES al hacer la conversión, por ejemplo un dato leido es el 100110011 = 307 DEC = 133 HEX

y lo que me esta faltando es cómo muestro el valor real de voltaje en el display?????

es decir, si tomo el valor de ADRES y lo pongo en el PORTB de datos del display me da el caracter correspondiente a ese valor

Saludos

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Conversor A/D con PIC16F76
« Respuesta #5 en: 28 de Octubre de 2008, 20:27:51 »

Saludos

Lo ùnico que tienes que hacer es multiplicar el valor del ADRES por la resolución del sistema
Un saludo desde Pereira - Colombia

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Conversor A/D con PIC16F76
« Respuesta #6 en: 28 de Octubre de 2008, 20:30:07 »
Tienes que convertir el valor de converison a ASCII

Y ese ascii ya lo puedes enviar al lcd.

Saludos

Desconectado telojurito

  • PIC12
  • **
  • Mensajes: 55
Re: Conversor A/D con PIC16F76
« Respuesta #7 en: 28 de Octubre de 2008, 21:13:11 »
Tal vez haga una pregunta tonta pero ahi va....

si mi valor leido en la conversión es 100110011 = 307 DEC = 133 HEX y lo multiplico por la resolución que es de 0.1171, en una calculadora normal me sale 15.5743,, pero cómo hago la multiplicación en asembler?????

otra, una vez hecha la multiplicación cómo pongo el resultado en el display??? por lo menos que ponga 15.5 V

Saludos


Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Conversor A/D con PIC16F76
« Respuesta #8 en: 28 de Octubre de 2008, 21:21:58 »
Digamos que tienes tu resultado en X registro,lo que tienes que hacer , como te lo dije arriba es pasar ese valor a caracteres ascii.

si tines digamos 155 en tu registro y eso equivaldria a 15.5 v

Lo que haces es pasar el valor de centenas , decenas y unidades.

Es decir

Esos 155 del registro inicial pasarlo a 1   5   5

le sumas 30 y lo tendras en ascii asi lo envias al lcd y listo.

En este mismo foro estan las rutinas de hex a ascii


Espero haberme explicado

Saludos

Desconectado telojurito

  • PIC12
  • **
  • Mensajes: 55
Re: Conversor A/D con PIC16F76
« Respuesta #9 en: 28 de Octubre de 2008, 21:25:49 »
Ok, me queda claro, pero cómo hago la multiplicación?

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Conversor A/D con PIC16F76
« Respuesta #10 en: 28 de Octubre de 2008, 21:46:32 »
Saludos

Hay maneras mas fácil sin tener que hacer la multiplicación y, es con una tabla, teniendo el valor del adresh se le asigna un valor de voltaje.

Pero si quieres hacer la multiplicación te deja tu correo y te envio un PDF con rutinas matemáticas en el ensamblador

Un saludo desde Pereira - Colombia
Un saludo desde Pereira - Colombia

Desconectado telojurito

  • PIC12
  • **
  • Mensajes: 55
Re: Conversor A/D con PIC16F76
« Respuesta #11 en: 28 de Octubre de 2008, 22:00:11 »
De acuedo chenao, te lo voy a agradecer muchisimo:

telojurito@hotmail.com

Gracias

Desconectado telojurito

  • PIC12
  • **
  • Mensajes: 55
Re: Conversor A/D con PIC16F76
« Respuesta #12 en: 29 de Octubre de 2008, 00:04:25 »
Ya le he hecho algunas modificaciones a mi programa con ayuda de las funciones matemáticas que publica Microchip en el AN526, le añadí las rutinas de la multiplicación de 2 registros de 8 bits y luego le puse el de convertir Ninario (16bits) a BDC. La cosa es que me aparecen 3 caracteres correspoondientes a los resultados de R0, R1 y R2 pero siguen siendo caracteres correspondientes al mapa de caracteres del LCD y no a los valores del conversor.

En las entradas para llamar a la multiplicación hago el multiplicando mulcnd = 0x75 dado que como mi resolución es de 0.117 lo tomo como 117 DEC = 0x75 HEX y el multiplicador mulplr = VIN que es el valor leido por el convertidor. Me da la impresión que por aquí esta el error pero no logro descifrarlo.

Si pudieran echarle un vistazo a estas rutinas y revisarlas? le quite alguno return y retlw pensando en modificarlas o ajustarlas a mi programa pero no estoy seguro si lo hice bien

Saludos compañeros y gracias nuevamente

Desconectado telojurito

  • PIC12
  • **
  • Mensajes: 55
Re: Conversor A/D con PIC16F76
« Respuesta #13 en: 29 de Octubre de 2008, 13:50:34 »
Pos ya nomas un paso más....  :-/

Ya probe la lectura del conversor, que me genera un dato en ADRES. También ya probé la multiplicación que en el archivo anterior no trabajaba bién, en este archivo pongo los datos VIN, H_byte y L_byte en el display para comprobar la multiplicación y está correcta VIN * 0x75 = H_byte:L_byte.

Lo que me falta es convertir H_byte:L_byte (16bits) a ASCII (5 digitos), aunque estoy probando algunas que he encontrado en Microchip y en Piclist quisiera ver si alguien tiene alguna rutina que me puedan ayudar o alguna idea?????

Adjunto el archivo asm actualizado con la rutina correcta del multiplicador

Gracias

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Conversor A/D con PIC16F76
« Respuesta #14 en: 29 de Octubre de 2008, 20:27:46 »

Saludos

Compañero cuanto es el valor máximo, de voltaje que deseas mostrar en los displays.
Un saludo desde Pereira - Colombia


 

anything