martes, 21 de mayo de 2013

Sensor de Temperatura con ADC

Objetivo

Nuestro objetivo en este proyecto es la aplicación simple del Convertidor Analógico-Digital de nuestro Microcontrolador MC9S08SE8.
La forma de Aplicación será a través de un sensor de temperatura de precisión, dicha interpretación de la entrada análoga se hará por medio de 2 display en un formato decimal.

Material

  • Microcontrolador MC9S08SE8
  • USBDM
  • TTL 7448 (decodificador a 7 segmentos)
  • Display Catodo Comun
  • Sensor LM35-TO92 (sensor termico de presición)

Desarrollo

Para este programa se diseñara en una salida al Puerto B de nuestro Microcontrolador y configurado el canal 1 como la entrada analógica de nuestra implementación.
Para esto también configuraremos nuestro Microcontrolador para que los datos enviados al puerto B sean en el sistema decimal, esto para que nuestros drivers puedan mostrarnos en el display la información explícita.

Programación




;-------------------------------------------------------------------------------------------------------
;Inicializamos nuestras variables a Utilizar
;-------------------------------------------------------------------------------------------------------

ExampleVar: DS.B   1
Corregido:  equ     $83
Convertido: equ     $84
Comparador: equ     $85
Tope:       equ     $86


            ORG    ROMStart
;-------------------------------------------------------------------------------------------------------
;Configuramos los registros para habilitar el ADC de nuestro Microprocesador con salida a puerto B
;-------------------------------------------------------------------------------------------------------
_Startup:
            LDHX   #RAMEnd+1        ; initialize the stack pointer
            TXS
            CLI                     ; enable interrupts
           ;-------------------------------------------------------------------------------------------------------             
           ;Declaramos Puerto B como Salida
           ;-------------------------------------------------------------------------------------------------------
            LDA #$FF          
            STA PTBDD         ;lo colocamos en el registro PTBDD para hacer PTBD la Salida
            
           ;-------------------------------------------------------------------------------------------------------
           ;Configuracion del ADC
           ;-------------------------------------------------------------------------------------------------------
            LDA #$90          ;Cargamos $90=10010000
            STA ADCCFG        ;Colocamos en registro ADCCFG con la siguiente configuracion
                              ;Bajo Poder, clock /1,largo tiempo muestreo, resolucion 8 bits, 
             
            LDA #$00
            STA ADCSC2       
             
            LDA #$21          ;$21=00100001, COCO y AIEN desactivados, Activada conversion continua, Canal 1 seleccionado
            STA ADCSC1
             
           ;-------------------------------------------------------------------------------------------------------
           ;Inicializamos nuestras variables
           ;-------------------------------------------------------------------------------------------------------
            LDA #$00
            STA Corregido
            STA Convertido
            STA Comparador
            STA Tope
;-------------------------------------------------------------------------------------------------------
;Programa Principal
;-------------------------------------------------------------------------------------------------------
MainLoop:
            BSR ConvertidorAD       ;Realizamos la adquision de datos del canal 1              
            BSR Conversor           ;Realiza la conversion del sistema hexagesimal a decimal
            LDA Corregido           ;Carga nuestro valor corregido 
            STA PTBD                ;Manda la Informacion al puerto B
            BSR Retardo             ;Llama al ciclo de retardo para la apreciación de datos en tiempo real
            feed_watchdog
            BRA MainLoop
;-------------------------------------------------------------------------------------------------------
;Programa convertidor
;-------------------------------------------------------------------------------------------------------
ConvertidorAD:
            LDA ADCSC1              ;Se carga el contenido de ADCSC1 para verificar COCO
            CMP #$A1                ;Comparamos con $A1=%10100001 si igual Z=1,(COCO activado, AIEN desactivado, Conversion continua activada, Canal 1), 
            BNE ConvertidorAD       ;si COCO no esta activado (Z=0), regresa (Branch) a main, con COCO debe ser: 
            LDA ADCRL               ;Cargamos la entrada convertida del Canal 1 
            STA Convertido          ;La mandamos a variable para realizar el arreglo decimal
            feed_watchdog
            RTS
;-------------------------------------------------------------------------------------------------------
;Programa que realiza la conversion del sistema hexagesimal al decimal
;-------------------------------------------------------------------------------------------------------
Conversor:
            LDA Convertido
            ADD #$A
            STA Tope 
             
            LDA #$00
            STA Corregido
            STA Comparador
             
for:
            feed_watchdog
            LDA Comparador
            CMP Tope
            BEQ Salir_Ciclo
            LDA Corregido
            ADD #$01
            DAA
            STA Corregido
            INC Comparador
            BRA for
             
Salir_Ciclo:
            RTS                      
            
;-------------------------------------------------------------------------------------------------------
;Programa de Retardo
;-------------------------------------------------------------------------------------------------------                 
Retardo:
            LDA #$A            
            STA $100
            STA $101
            STA $102
             
Retardomain:
             
            feed_watchdog
            LDA $100             
            CMP #$00
            BEQ Retorno
            DECA                
            STA $100
            LDA #$78            
            STA $101
             
Subretardo_1:
            feed_watchdog 
            LDA $101
            CMP #$00
            BEQ Retardomain
            DECA
            STA $101
            LDA #$78
            STA $102            
             
Subretardo_2:
             
            LDA $102
            CMP #$00
            BEQ Subretardo_1
            DECA
            STA $102
            BRA Subretardo_2
             
 Retorno:
            RTS     





Como se puede apreciar, este programa es una aplicación básica del ADC, la cual puede servir como base para proyectos futuros. Esto porque no es exclusiva del diseño, sino es una programación general del ADC, es posible conectar casi cualquier entrada análoga para su cuantización digital.
Otra aplicación adicional es que puede programarse alguna entrada de control para procesos de automatización.

3 comentarios:

  1. no tendras el diagrama de conexion?

    ResponderEliminar
    Respuestas
    1. ya lo actualicé, por favor revisen bien la codificación esta mas que clara, ya subí también el datasheed de los componentes para que no tengan problema.

      cualquier otra duda comenten o envíen correo

      Eliminar
  2. Buen aporte... lo voy a realizar, no tengo muy claro la parte de la programación, me recomiendas algún módulo de programación PIC?

    un saludo

    ResponderEliminar