Autor Tema: conversor analogico digital,  (Leído 5373 veces)

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

Desconectado riki

  • PIC10
  • *
  • Mensajes: 19
conversor analogico digital,
« en: 18 de Octubre de 2010, 18:14:02 »
buenas muchachos, soy Ricardo, estoy reincorporandome al foro despues de unos meses, les saludo con respeto y les quiero dejar mi pequeño problema, todo lo que me pidan se lo voy a ir pasando, de acuerdo a lo que necesiten, ya termine el sensor de temperatura con el lm 35 y el pic 16f873A, en ensamblador, esto con ayuda de ustedes en el ultimo tema propuesto por mi, el programa dispone de unas 400 lineas de codigo, entre lectura del sensor, conversion de binario a BCD para el display, ademas del sensor, le agregue al programa la opcion de poder definir limites o rangos de temperatura en las que van a trabajar dos salidas, ya sea por ejemplo, calefaccion o ventilacion, entonces vi necesario de guardar estos dos limites tanto el inferior como el superior, les cuento, y funciona de maravilla, algo mas para llegar al problema, los 10 milivoltios del lm35 por grado celcius, lo leo y lo divido por 2, de esta manera logro obtener 5 mv, que serian aproximadamente los 4.8mv que detecta el pic por defecto para cada bit, todo esto simplemente para evitarme el trabajo de amplificar la salida del sensor, bueno hasta aca todo bien, lo programe y arme la placa, todo espectacular, ya tenia mi sensor de temperatura, ya podia ver en display la temperatura ambiente, acercaba al sensor un soldador y la temperatura aumentaba como era de esperarse, ocurre que de un momento para otro, tuve que volver aprogramar el pic para modificar el programa y hacer algunos ajustes, puse en placa, y ocurrio algo extraño, el voltaje del sensor cayo bruscamente, en el display podia notar solamente unos 17 grados, procedi a medir con voltimetro la salida del lm, este efectivamente tenia 170 milivoltios, pero la temperatura real en ese momento era de 25 grados, el sensor mantenia un voltaje de 170 mv, entonces crei que el pin analogico del pic estaba quemado, pero tampoco era asi, crei tambien que el lm estaba dañado por aplicarle mucha temperatura con el soldador, saque el mismo, de la placa, y le aplique 5 voltios y la salida tenia 250 mv, o sea que funcionaba, segui robando y probando, me tarde dias, probe con otro pic y otro lm, y el problema era el mismo, yo ya no se que acer amigos, no estoy seguro de lo que estoy haciendo mal, tambien probe poner una resistencia limitadora entre la salida del lm y el pic, pero ahi incluso bajaba mas el voltaje, media 0 grados, pero lo raro es que de un momento para otro cuando por accidente hice un cortocircuito en la pata del pic con el lm, estos funcionaron bien, midiendo la temperatura ambiente tal cual era, no se exactamente lo que paso, no se si sea alguna configuracion adicional del pic que me falta, quise ir mas a fondo y deje el pic que funcionaba a un lado y programe otro, puse en placa con el mismo sensor y no funcionaba, puse el original y todo correcto, entonces quise ser mas atrevido y programe nuevamente el pic que funcionaba, lo monte en la placa y dejo de medir bien otra vez, esta es mi historia, disculpen que sea un poco extenso, pero todo sea por tratar de explicarme mejor, quisiera saber su opinion y experiencia al respecto para poser solucionar esta situacion gracias desde ya y espero su respuesta   

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: conversor analogico digital,
« Respuesta #1 en: 18 de Octubre de 2010, 22:58:57 »
Hola Riki.

Te sugiero encarecidamente que uses la tecla Enter de tu teclado y los signos de puntuación más comunes, así como la separación por párrafos. Esto para poder leer tu mensaje más fácilmente.

Desconectado riki

  • PIC10
  • *
  • Mensajes: 19
Re: conversor analogico digital,
« Respuesta #2 en: 21 de Octubre de 2010, 22:41:30 »
bueno, bueno, disculpame, voy a tener muy en cuenta la sugerencia, pero qtal?? se entendio lo que trate de explicar..??

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: conversor analogico digital,
« Respuesta #3 en: 22 de Octubre de 2010, 03:20:26 »
yo si te digo la verdad siempre que he empezado algo con programas de musica, dibujo, lu que sea... he tenido ese tipo de problemas. crees que algo esta pasando, y realmente es algo que se habia pasado por alto, normalmente minusculo pero que nos la hace. compara el programa del pic que funciona, con el hex que crees que funciona. a ver si son iguales
tambien podrias enseñarnos el circuito que a lo mejor vemos algo.

un saludo

Desconectado riki

  • PIC10
  • *
  • Mensajes: 19
Re: conversor analogico digital,
« Respuesta #4 en: 22 de Octubre de 2010, 15:58:10 »
Buenas tardes, aqui les dejo el circuito y el programa en assembler.
Disculpen, el asm esta un tanto desordenado, gracias
Código: [Seleccionar]
LIST    p=16f873A
#include p16f873a.inc
      __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

estado     equ     0x03
intcon    equ     0x0b                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              0x03
porta      equ     0x05
portb      equ     0x06
portc      equ     0x07
adcon0     equ     0x1f ;registro de control de operacion de C A/D
adcon1     equ     0x9f ;sirve para configurar las patitas como entradas analogicas o E/S digitales
adresl     equ     0x9e ;parte baja del resultado de la conversion
EEDATA    EQU    0X10C ;aqui se guarda valores limite superior e inferior
EEADR    EQU    0X10D ;registros especificos de escritura-lectura eeprom
EECON1    EQU    0X18C
EECON2    EQU    0X18D
unidad    EQU     0X20 ;aqui se guarda adresl
decena    EQU     0X21 ;unidad-decena para conversion BCD
alfa    equ     0x22 ;registros utilizados para retardo
beta    equ     0x23
delta    equ    0x24
superior   equ    0x25
inferior   equ     0x26
memoria1   equ     0x27
memoria2   equ    0x28
sensar_bit equ    0x29
sensar_bit_2 equ   0x3a

       org     0x00
     goto    inicio
   org     0x04
   goto    interrupcion ;direccion de interrupcion. 0x04
;//////////////////////////////////////////
;//////////////////////////////////////////

inicio
       ;BANCO1
   bsf    estado,5 ;accedemos al banco1
       movlw   b'10001110' ;EL BIT 7 ADFM=1, ENTONCES justificado a la derecha
   movwf   adcon1
   clrf    porta ;puerto A, C, como salida
   clrf    portc
       movlw   b'11110000' ;configuracion de entrada en puerto B
   movwf   portb
       ;BANCO0
   bcf     estado,5 ;banco0
;//////////////////////////////////////////
;//////////////////////////////////////////
   movlw   b'10001000' ;se habilitan las interrupciones para rb4-rb7
   movwf   intcon
   clrf    unidad ;unidad
   clrf    decena ;decena
   clrf    sensar_bit
   clrf    sensar_bit_2
   clrf    superior ;registro que compara limite superior de temperatura
   clrf    inferior ;registro que compara limite inferior de temperatura
   clrf    portb
   clrf    portc
   movlw   b'00000110' ;puerto que controla catodo de display 1==>> deshabilita 0==>> habilita
   movwf   porta
       movlw   b'11110001' ;BIT 0 ADON=1 ---> habilita analogico digital,
       movwf   adcon0 ;BITS 5,4,3=0 CH2, CH1, CH0 --> canal 3(RA3/AN3),
   BSF    portb,0 ;led indicador de sensor
   movlw   .40
   movwf   memoria1
   movlw   .41
   movwf   memoria2
   call    LECTURA ;lee la direccion de eeprom, en la cual estan contenidas los valores del
habilita_conversion ;limite superior e inferior de temperatura
   bsf     adcon0,2 ;PONIENDO A 1 SE INICIA CONVERSION, BIT GO/DONE
pregunta   btfsc   adcon0,2 ;fin de conversion??
   goto    pregunta
   bsf     estado,5
   movf    adresl,0
   bcf     estado,5
   movwf   unidad
;,,,,,,,,,,,,,,,,,PROCESO DE DIVISION POR 2,,,,,,,,,,,
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,    
   rrf  unidad,1
   btfss unidad,7
   goto pasar
   bcf unidad,7
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
pasar    clrf     decena
         decf     unidad,1
   movf unidad,0
   subwf superior,0
   btfsc estado,0 ;unidad es mayor a superior???
   goto normal_1
   bsf porta,3
   goto conversion_BCD
normal_1
   bcf porta,3
   movf inferior,0
   subwf unidad,0
   btfsc estado,0 ;unidad es menor a inferior???
   goto normal_2
   bsf porta,5
   goto conversion_BCD
normal_2
   bcf porta,5  
conversion_BCD
   movlw    .10
   subwf    unidad,1
   btfsc    estado,0
   goto     incrementa
   movlw .10
   addwf unidad,1
   call     muestra_en_display
   goto habilita_conversion
incrementa incf     decena,1
   goto     conversion_BCD

muestra_en_display
;muestra unidad
       movlw   .100
   movwf   alfa
load     movlw   .100
   movwf   beta
   movf    unidad,0
       movwf   portc
   bcf     porta,1
dec    decfsz  beta,1
   goto    dec
   bsf     porta,1
;muestra decena
   movlw   .100
   movwf   beta
   movf    decena,0
       movwf   portc
   bcf     porta,2
dec_2    decfsz  beta,1
   goto    dec_2
   bsf     porta,2
   decfsz  alfa,1
   goto    load
   return
;//////////////////////////////////////////////////////////////////////////////////////////
;////////////////interrupcion para programar limites inferior y superior/////////////////////////
;//////////////////////////////////////////////////////////////////////////////////////////
;//////////////////////////////////////////////////////////////////////////////////////////
interrupcion
   bcf porta,1 ;el programa no permite que otros pulsadores aparte de RB4, habiliten la programacion
   bcf porta,2
   btfsc portb,4 ;pulsa para programar
   goto falsa_alarma ;si no es por RB4, era falsa alarma y vuelve a obtener datos del sensor
espera_2
   btfss portb,4
   goto espera
   btfsc sensar_bit,0 ;este registro permite seleccionar el ingreso a la programacion de limite
   goto hacer_cero ;superior o inferior, por cada pulso de RB4, sensar_bit se modifica en 1 o en 0,
   bsf sensar_bit,0 ;y decide ingresar a la programacion o salir de ella, volviendo a sensar la temperatura
   goto superior_inferior

espera
   bcf porta,1 ;espera a que se deje de pulsar RB4
   bcf porta,2
   goto espera_2
hacer_cero
   bcf sensar_bit,0
falsa_alarma
   bcf portb,2 ;siempre que haya terminado de modificar los limites, ingresados por el usuario,
   bcf portb,3 ;se vuelve al sensor por esta misma rutina, habilitando la interrupcion y retornando
   bsf portb,0 ;tambien antes de salir totalmente se guarda los limites en la memoria interna eeprom del pic
   bcf portb,1   ;haciendo un call para habilitar la escritura o grabacion
       call ESCRITURA
   bcf intcon,0 ;habilita interrupcion y retorna    
   retfie
superior_inferior
   bcf portb,0
   bsf portb,1
   btfsc portb,5 ;selector para limite superior e inferior
   goto inverso
espera_4   btfss portb,5
   goto espera_3
   btfsc sensar_bit_2,0
   goto hacer_cero_2
   bsf sensar_bit_2,0
   goto c_superior

espera_3
   bcf porta,1 ;espera a que se deje de pulsar RB5
   bcf porta,2
   goto espera_4
hacer_cero_2
   bcf sensar_bit_2,0
   goto c_inferior

inverso
   btfss sensar_bit_2,0
   goto c_superior
   goto c_inferior

c_superior bcf portb,3
   bsf portb,2
   movf superior,0
   movwf unidad
   call pasar_2
   btfsc portb,6 ;pulsador para incrementar
   goto sensar_RB7
espera_6
   btfss portb,6
   goto espera_5
   goto incrementa_superior
espera_5   bcf porta,1
   bcf porta,2
   goto espera_6
sensar_RB7
   btfsc portb,7 ;pulsador para decrementar
   goto estado_RB4

esperar_8
   btfss portb,7
   goto espera_7
   goto decrementa_superior
espera_7   bcf porta,1
   bcf porta,2
   goto esperar_8
estado_RB4
   btfsc portb,4
   goto superior_inferior
   goto espera_2

c_inferior
   bcf portb,2
   bsf portb,3
   movf inferior,0
   movwf unidad
   call pasar_2
   btfsc portb,6 ;pulsador para incrementar
   goto sensar_RB7_2

espera_10
   btfss portb,6
   goto espera_9
   goto incrementa_inferior
espera_9    
   bcf porta,1
   bcf porta,2
   goto espera_10    
sensar_RB7_2
   btfsc portb,7 ;pulsador para decrementar
   goto estado_RB4

espera_12
   btfss portb,7
   goto espera_11
   goto decrementa_inferior
espera_11
   bcf porta,1
   bcf porta,2
   goto espera_12
incrementa_superior
   incf     superior,1
   goto     estado_RB4

decrementa_superior
   decf     superior,1
   goto estado_RB4

incrementa_inferior
   incf     inferior,1
   goto     estado_RB4

decrementa_inferior
   decf     inferior,1
   goto estado_RB4

pasar_2    clrf    decena  
BCD_3    movlw    .10
   subwf    unidad,1
   btfsc    estado,0
   goto     incrementa_2
   movlw .10
   addwf unidad,1
   call     muestra_en_display
   return
incrementa_2
   incf     decena,1
   goto     BCD_3
   return

retardo    movlw .100
   movwf alfa
load_1    movlw .10
   movwf beta
load_2    movlw .10
   movwf delta
dec_3    decfsz delta,1
   goto  dec_3
   decfsz beta,1
   goto load_2
   decfsz alfa,1
   goto  load_1
   return
;;;;;;;;;;;;;;;;;;;;;;;;LEER ESTADO SUPERIOR;;;;;;;;;;;;;;;;;;;;;;;;;;
LECTURA
;BANCO2
BSF estado,6
BCF estado,5 ; Selecciona banco 2
MOVF memoria1,0 ; Dirección a leer de
MOVWF EEADR ; la EEPROM PARTE BAJA
;BANCO3
BSF estado,5 ; Selecciona banco 3
BCF EECON1,7 ; se selecciona el acceso a la eeprom
BSF EECON1,0 ; Activar lectura RD
ESPERA_13
BTFSC EECON1,0 ; Espera final de lectura
GOTO ESPERA_13 ; a que baje la bandera
;BANCO2
BCF estado,5 ; Selecciona banco 2
MOVF EEDATA,0 ; W se carga con el valor
BCF estado,6 ; Selecciona banco 0
movwf superior ; leído en eeprom
;;;;;;;;;;;;;;;;;;;;;;;;LEER ESTADO INFERIOR;;;;;;;;;;;;;;;;;;;;;;;;;;
;BANCO2
BSF estado,6
BCF estado,5 ; Selecciona banco 2
MOVF memoria2,0 ; Dirección a leer de
MOVWF EEADR ; la EEPROM PARTE BAJA
;BANCO3
BSF estado,5 ; Selecciona banco 3
BCF EECON1,7 ; se selecciona el acceso a la eeprom
BSF EECON1,0 ; Activar lectura RD
ESPERA_14
BTFSC EECON1,0 ; Espera final de lectura
GOTO ESPERA_14 ; a que baje la bandera
;BANCO2
BCF estado,5 ; Selecciona banco 2
MOVF EEDATA,0 ; W se carga con el valor
;BANCO0
BCF estado,6 ; Selecciona banco 0
    movwf inferior ; leído en eeprom
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;PROCESO DE ESCRITURA DE EEPROM;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ESCRIBIR LIMITE SUPERIOR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ESCRITURA

;BANCO2
BSF estado,6 ;pasamos al banco 2
bcf estado,5 ; Establecer EEADR y EEDATA
MOVF memoria1,0
MOVWF EEADR ; Escribe la dirección en EEADR
MOVF superior,0
MOVWF EEDATA ; Se escribe el dato en EEDATA
;BANCO3
BSF estado,5 ; Selecciona el banco 3
BCF EECON1,7 ; se selecciona el acceso a la eeprom
BSF EECON1,2 ; Permiso de escritura activado

;Comienzo de la secuencia de escritura

MOVLW 0x55
MOVWF EECON2 ; Se escribe el dato 55 h en EECON2
MOVLW 0xAA
MOVWF EECON2 ; Se escribe AA h en EECON2
BSF EECON1,1 ; Comienza la escritura
BCF EECON1,2 ; Permiso de escritura desactivado
CALL retardo
ESPERA_15
    BTFSC EECON1,1 ; Espera a que termine la escritura
GOTO ESPERA_15

;;;;;;;;;;;;;;;;;;;;;;;;;;;PROCESO DE ESCRITURA DE EEPROM;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ESCRIBIR LIMITE INFERIOR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;BANCO2
bcf estado,5 ; pasamos al banco 2
MOVF memoria2,0 ;Establecer EEADR y EEDATA
MOVWF EEADR ; Escribe la dirección en EEADR
MOVF inferior,0
MOVWF EEDATA ; Se escribe el dato en EEDATA
;BANCO3
BSF estado,5 ; Selecciona el banco 3
BCF EECON1,7 ; se selecciona el acceso a la eeprom
BSF EECON1,2 ; Permiso de escritura activado

;Comienzo de la secuencia de escritura

MOVLW 0x55
MOVWF EECON2 ; Se escribe el dato 55 h en EECON2
MOVLW 0xAA
MOVWF EECON2 ; Se escribe AA h en EECON2
BSF EECON1,1 ; Comienza la escritura
BCF EECON1,2 ; Permiso de escritura desactivado
CALL retardo
ESPERA_16
BTFSC EECON1,1 ; Espera a que termine la escritura
GOTO ESPERA_16
;BANCO0
BCF estado,6 ; Selecciona el banco 0
BCF estado,5 ; Selecciona el banco 0
RETURN
   END


Desconectado riki

  • PIC10
  • *
  • Mensajes: 19
Re: conversor analogico digital,
« Respuesta #5 en: 04 de Noviembre de 2010, 13:28:01 »
hola muchachos, sgo en el mismo tema, y estoy poco a poco solucionando el problema, creo que no es otra cosa que alguna interferencia electromagnetica.
Como ven en el circuito, no pongo nada en la salida del sensor, va conectado directamente a la entrada analogica del pic; y leyendo algunos otros articulos me percaté que en la salida se conectaba un capacitor y una resistencia, ambos en serie y luego conectado a tierra.
Por las dudas no tienen algun circuito similar para ver la conexion?, gracias desde ya.


 

anything