Autor Tema: Usar ADC para mi fuente digital con teclado 4x4  (Leído 13342 veces)

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

Desconectado frozen

  • PIC12
  • **
  • Mensajes: 53
Usar ADC para mi fuente digital con teclado 4x4
« en: 01 de Noviembre de 2011, 10:22:49 »
Buenos dias a todos. Tengo un problema con el ADC del pic16f877a.

-En proteus cada canal es independiente del otro y por tanto salen los valores binarios por los respectivos puertos.

                CANAL 0 --> El valor convertido lo mando al PORTB
                CANAL 1 --> El valor convertido lo mando al PORTC

-En circuito montado cuando vario un potenciometro afecta al otro canal.

                por ejemplo si pongo el canal0  a GND y el canal1 a 5v salida por el portc es F0h. Eso esta mal ya que debe salir FFh.

Aqui les dejo mi assembler y mi simulacion en proteus. Gracias de antemano.
Código: [Seleccionar]
;****************************
; BY JOEL HUAMAN HUARCAYA
;****************************

;****************************************************************
; PROGRAMA DE CONVIERTE LA SEÑAL ANALOGA DEL CANAL 0 Y CANAL 1
; Y MUESTRA LOS VALORES POR EL PORTB Y PORTC
;****************************************************************
__CONFIG _WDT_OFF&_PWRTE_ON&_HS_OSC&_LVP_OFF&_CP_OFF
LIST P=16F877A
INCLUDE <P16F877A.INC>
INCLUDE <MACROPIC.INC>

CBLOCK 0x20
VOLT
CORRIENTE
ENDC

ORG 0


;--------CONFIGURANDO CANALES DE --------------------------------------------
BANCO 1
clrf TRISC
clrf TRISB
MOV TRISA,0XFF
bsf TRISE,2
BANCO 0

;--------BORRANDO REGISTROS-------------------------------------------------
clrf PORTB
clrf PORTC

call INICIO_ADC ;inicia convertidor


infinito
CANAL 0 ;se selecciona el canal 0
bsf ADCON0,0 ;enciende el convertidor
call muestra_ADC_8 ;en w se obtiene el valor de conversion
movwf VOLT
movwf PORTB
call ret50ms

CANAL 1 ;selecciona el canal 1
bsf ADCON0,0
call muestra_ADC_8 ;en w se obtiene el valor de conversion
movwf CORRIENTE
movwf PORTC
call ret50ms
goto infinito

INCLUDE <conv_ad.ASM>
INCLUDE <RETARDO.ASM>

END
« Última modificación: 01 de Noviembre de 2011, 11:23:46 por frozen »

Desconectado frozen

  • PIC12
  • **
  • Mensajes: 53
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #1 en: 01 de Noviembre de 2011, 11:48:20 »
aqui les dejo una imagen en proteus funciona bien el ADC pero en protoboard no. :5]

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #2 en: 01 de Noviembre de 2011, 12:01:05 »
has mirado el voltaje que le llega al pin?? Puede que no llege VDD y por eso te marca F0h en vez de FF

Desconectado frozen

  • PIC12
  • **
  • Mensajes: 53
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #3 en: 01 de Noviembre de 2011, 13:39:13 »
has mirado el voltaje que le llega al pin?? Puede que no llege VDD y por eso te marca F0h en vez de FF

Si he medido ambos. canal0 4.9v  y el otro  canal 0v. No me podrias dar un ejemplo q como se cambia de canal correctamente.
En proteus simula correctamente. Pero en mi protoboard el canal0 afecta al canal 1. Pero el canal1 no altera al 0.
« Última modificación: 01 de Noviembre de 2011, 13:41:56 por frozen »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #4 en: 01 de Noviembre de 2011, 14:05:27 »
para tu pic creo que debes hacer un delay para esperar el tiempo de adqusicion con el tiempo de conversion. No se ve el codigo completo muestra_ADC_8.

Lo que te digo es que desde que seleccionas el canal hasta que empiezas la conversion debe haber un retardo (en el datasheet viene el tiempo minimo), este tiempo depende de la impedancia de la fuente, pero si no es un caso critico donde obtengas el voltaje por tiempos le pones un delay considerable y vale.


Desconectado frozen

  • PIC12
  • **
  • Mensajes: 53
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #5 en: 01 de Noviembre de 2011, 14:58:11 »
para tu pic creo que debes hacer un delay para esperar el tiempo de adqusicion con el tiempo de conversion. No se ve el codigo completo muestra_ADC_8.

a ver hay te dejo el codigo. Gracias por tu ayuda. Despues de la conversion tengo que esperar un tiempo( le puse 50ms), pero igual.


Código: [Seleccionar]
;----------------------inicializar
INICIO_ADC
BANCO 1
MOV ADCON1,B'00000000' ;CONFIGURA LOS 8 CANALES COMO ANALOGICOS
BANCO 0
clrf ADCON0
bsf ADCON0,7 ;FOSC/32
bcf PIR1,ADIF
return
;----------------------- PARA 8 bits
; la muestra de 8 bits se devuelve en W
muestra_ADC_8
bsf ADCON0,2
btfsc ADCON0,2
goto $-1
movf ADRESH,0
bcf ADCON0,0
bcf PIR1,ADIF
return

Código: [Seleccionar]
cblock
contador1 ;registro usado por retardo
contador2 ;registro usado por retardo
R_VAR1
R_VAR2
R_VAR3
R_VAR4
R_VAR5
endc

;*******************************************************************
t0 equ 0x82 ;constante para generar aprox. 25ms
t4.6ms equ 0x06*4 ;constante para generar 4,6ms
t15.4ms equ 0x14*4 ;constante para generar 15,4ms
t200us equ 0x01 ;constante para generar aprox. 200us

;*******************************************************************
retardo:
clrf contador1 ;aclara contador1
ret decfsz contador1,F ;
goto ret
decfsz contador2,F
goto ret
return

ret50ms: ;RETARDO 50 ms
movlw t0
movwf contador2
call retardo
call retardo
return

Código: [Seleccionar]
BANCO macro x
if x == 0
bcf STATUS,RP0
bcf STATUS,RP1
endif
if x == 1
bsf STATUS,RP0
bcf STATUS,RP1
endif
if x == 2
bcf STATUS,RP0
bsf STATUS,RP1
endif
if x == 3
bsf STATUS,RP0
bsf STATUS,RP1
endif
endm

;**************************************************************CANAL

CANAL macro x

if x==0
bcf ADCON0,3
bcf ADCON0,4
bcf ADCON0,5
endif

if x==1
bsf ADCON0,3
bcf ADCON0,4
bcf ADCON0,5
endif
if x==2
bcf ADCON0,3
bsf ADCON0,4
bcf ADCON0,5
endif
if x==3
bsf ADCON0,3
bsf ADCON0,4
bcf ADCON0,5
endif
if x==4
bcf ADCON0,3
bcf ADCON0,4
bsf ADCON0,5
endif
if x==5
bsf ADCON0,3
bcf ADCON0,4
bsf ADCON0,5
endif
if x==6
bcf ADCON0,3
bsf ADCON0,4
bsf ADCON0,5
endif
if x==7
bsf ADCON0,3
bsf ADCON0,4
bsf ADCON0,5
endif
endm

;************************************************************** mov
MOV macro registro,literal
movlw literal
movwf registro
endm


Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #6 en: 01 de Noviembre de 2011, 15:25:46 »
ponle el delay entre el macro CANAL 0, 1 y el adc_muestra

Desconectado frozen

  • PIC12
  • **
  • Mensajes: 53
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #7 en: 01 de Noviembre de 2011, 15:34:21 »
ponle el delay entre el macro CANAL 0, 1 y el adc_muestra

infinito
      CANAL   0            ;se selecciona el canal 0
      call   ret50ms                            ;YA LE AGREGUE AKI EL RETARDO. TE ENTENDI BIEN?
      bsf      ADCON0,0      ;enciende el convertidor   
      call   muestra_ADC_8   ;en w se obtiene el valor de conversion
      movwf   VOLT
      movwf   PORTB
      call   ret50ms

      CANAL    1            ;selecciona el canal 1
      call   ret50ms                             ;YA LE AGREGUE AKI EL RETARDO. TE ENTENDI BIEN?
      bsf      ADCON0,0
      call   muestra_ADC_8   ;en w se obtiene el valor de conversion
      movwf   CORRIENTE
      movwf   PORTC
      call    ret50ms         
      goto    infinito

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #8 en: 01 de Noviembre de 2011, 15:35:02 »
si, prueba asi, de cuanto es el potenciometro? 1k? 10k?

Desconectado frozen

  • PIC12
  • **
  • Mensajes: 53
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #9 en: 01 de Noviembre de 2011, 15:38:08 »
si, prueba asi, de cuanto es el potenciometro? 1k? 10k?

Le 2 potenciometros de5k ( uno para cada canal).
Estoy grabando el pic y probando.
« Última modificación: 01 de Noviembre de 2011, 15:47:25 por frozen »

Desconectado frozen

  • PIC12
  • **
  • Mensajes: 53
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #10 en: 01 de Noviembre de 2011, 15:41:10 »
si, prueba asi, de cuanto es el potenciometro? 1k? 10k?

Le 2 potenciometros de 5k ( uno para cada canal).
Estoy grabando el pic y probando.

-Lo pobre y solo afecto q ahora es mas lento en convertir. Pero sigue afectando el canal0 al 1.

« Última modificación: 01 de Noviembre de 2011, 15:45:50 por frozen »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #11 en: 01 de Noviembre de 2011, 15:48:58 »
tambien sabes que el resultado de la conversion se guarda en ADRESH y ADRESL no? te lo digo porque en tu codigo solo veo ADRESH

Desconectado frozen

  • PIC12
  • **
  • Mensajes: 53
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #12 en: 01 de Noviembre de 2011, 15:53:54 »
tambien sabes que el resultado de la conversion se guarda en ADRESH y ADRESL no? te lo digo porque en tu codigo solo veo ADRESH

Si, pero estoy usandolo a 8bits justificandolo a la izquierda(ADRESH) por eso el ADRESL no influye. Es correcto?. Gracias por ayudarme es que llevo tiempo pensando como solucionar esto y aun no consigo resolver el problema.
« Última modificación: 01 de Noviembre de 2011, 16:36:52 por frozen »

Desconectado JBQ

  • PIC16
  • ***
  • Mensajes: 118
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #13 en: 01 de Noviembre de 2011, 19:34:35 »
Le 2 potenciometros de5k ( uno para cada canal).
Estoy grabando el pic y probando.



Pero 5K es mucho, eso hace lenta la conversion, ponle máx 1K o 2 K.

Ahora, si siguen los problemas, podrías dedicar un canal del ADC a descargar el capacitor de muestreo, de esa forma, aceleras la conversión.

Suerte y saludos.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Usar ADC para mi fuente digital con teclado 4x4
« Respuesta #14 en: 02 de Noviembre de 2011, 10:23:58 »
tambien podrias provar a usar las interrupciones del ADC. :)
Montando mi primera impresora 3D (Raprep Prusa i3)