You are on page 1of 41

Diseo De Controladores Digitales

Informe Proyecto Final

Diseo de Controladores Digitales

Informe Proyecto Final

Control de Temperatura

Profesor:
Jurez, Jos

Alumno:
LIO, Guillermo Gustavo
Legajo: 7620

Diseo De Controladores Digitales


Informe Proyecto Final

Introduccin
El proyecto consiste en un control de temperatura con modulacin
de fase. Se realiz una modulacin de fase con la salida PWM
detectando el cruce por cero con el Input Capture. Con ello se
movi un opto acoplador que actu sobre un triac que ser quien
alimente finalmente a la resistencia calefactora.
Se uso un sensor de temperatura y se acondicion la seal para
poder usar el conversor A/D del micro en todo su rango para
obtener un valor proporcional a la temperatura.
Se implement un control del tipo ventanas. Segn en que
ventana se encuentre, ser el porcentaje de potencia que se le
entregar a la resistencia.
Tiene pulsadores que me permiten cambiar de manual a
automtico, otros para subir y bajar la potencia de salida cuando
el equipo se encuentra en manual y si esta en automtico con
estos pulsadores podr variar el Set Point.
Los datos son enviados por el puerto serie y levantados por una
interfas que me muestra el valor del Set Point, la variable de
proceso y la potencia entregada a la resistencia calefactora.
Descripcin General
Integrados utilizados:
*Se utiliz un micro de la familia HC08 (MC68HC908GP32CP).
*Integrado de comunicacin MAX 232.
*Sensor de temperatura LM35.
*Amplificador para la seal de temperatura LM308.
*Opto acoplador MOC 3041.
*Triac de salida BTA16.
*Regulador LM 7805 y LM78L09.
2

Diseo De Controladores Digitales


Informe Proyecto Final

Entradas-Salidas:
*1 entradas analgica conectada al conversor A/D del micro
(sensor de temperatura).
*4 entradas digitales (pulsadores).
*1 salida PWM
*1 entrada del Input Capture.
*Salidas digitales para indicaciones de estado.
*Salida y entrada de TX-RX para el manejo de la comunicacin
serie RS-232.

220V

DIAGRAMA EN BLOQUES

FUENTE

INTERFAZ
USUARIO

MICRO

PLACA DE
POTENCIA

ACONDICIONAMIENTO
DE SEAL
SENSOR DE
TEMPERATURA

RESISTENCIA CALEFACTORA

Diseo De Controladores Digitales


Informe Proyecto Final

Hard
Cruce por cero:
Para detectar el cruce por cero, se coloc un diodo 1N4007 con
una resistencia en la entrada de 9VAC, obteniendo una
rectificacin de media onda. Con un diodo zener de 5V se trunco
este semi ciclo para obtener una onda casi cuadrada y poder entrar
al Input Capture del micro. Realizando una deteccin por flanco
de subida y bajada obtenemos los cruces por cero de nuestra seal
de alterna.
Amplificacin seal del sensor LM35:
El sensor de temperatura LM35 nos entrega 10mV/C y como
mximo soporta 150C. O sea que a lo sumo nos entregar 1.5V a
fondo de escala. Para utilizar todo el rango el conversor A/D del
micro, se tuvo que amplificar la seal 3.3 veces. Se utiliz un
LM308 que es fuente nica y se lo aliment con 9V. Se tuvo
problemas de inestabilidad con la amplificacin de la seal y se
logr solucionarlo perfectamente con filtros en la realimentacin
y en la salida.
Salida de potencia:
Se utiliz un triac BTA16 para manejar la resistencia calefactora
y se aisl la parte de alta potencia con la de baja mediante un opto
acoplador MOC3041. Este se lo conect a la salida PWM del
micro para poder lograr la modulacin de fase.
Comunicacin serie:
Se utiliz un MAX 232 para la comunicacin serie a travs de la
PC y se colocaron leds de indicacin de envi y recepcin de
datos.

Diseo De Controladores Digitales


Informe Proyecto Final

Fuente:
Se utiliz un trafo de 220/9 VAC para bajar la tensin. Luego se
coloc un LM 7805 para alimentar al micro y dems integrados y
tambin se coloc un LM78L09 para alimentar el operacional.
Placa programadora:
Se utiliz una placa programadora casera que permite trabajar
sobre la placa que esta en construccin. Esta permite mediante
una llave cambiar a modo RUN o PROG agilizando mucho la
tarea de pruebas del programa en mi placa.

Diseo De Controladores Digitales


Informe Proyecto Final

Circuito placa programadora:

Diseo De Controladores Digitales


Informe Proyecto Final

Circuito

Diseo De Controladores Digitales


Informe Proyecto Final

Diseo De Controladores Digitales


Informe Proyecto Final

Diseo De Controladores Digitales


Informe Proyecto Final

10

Diseo De Controladores Digitales


Informe Proyecto Final

Flujo del Programa

FLUJO DEL
PROGRAMA

INICIALIZACION
GENERAL

MEDICION
TEMPERATURA

BARRER
TECLADO

CAMBIO
TECLAS?

NO

SI

ESTA EN MANUAL
O AUTOMATICO?

SUBIR O BAJAR SP
TECLAS = $01 => SUBIR SP
TECLAS = $02 => BAJAR SP
(FIJARSE QUE ESTE ENTRE 00-FF)
TECLAS = $03 => CAMBIAR A MANUAL

11

SUBIR O BAJAR % POTENCIA


TECLAS = $01 => SUBIR % POT
TECLAS = $02 => BAJAR % POT
(FIJARSE QUE ESTE ENTRE 00-FF)
TECLAS = $03 => CAMBIAR A AUTO

Diseo De Controladores Digitales


Informe Proyecto Final

ESTA EN MANUAL
O AUTOMATICO?

DIF = SP - VAR

SI

C = 1?

% POT = 0

NO

DIF > 20 CUENTAS?

NO

% POT = DIF * 12

% POTENCIA
=> RESITENCIA

MUESTRO
% POTENCIA

MUESTRO
TEMPERATURA

MUESTRO
SET POINT

12

SI

% POT = 100%

Diseo De Controladores Digitales


Informe Proyecto Final

Detalles Del Programa:


*Se realiz un programa estructurado.
*Se implementaron subrutinas varias.
*Interrupciones de PWM e Input Capture.
*Se modulariz en secciones y en archivos separados para poder
reutilizar el cdigo fcilmente.
Subrutina de Barrer Teclado:
Se llam a la subrutina desde el cuerpo principal del programa.
Lo que hace esta subrutina es levantar el puerto y compararlo con
el valor viejo del puerto que se tenia guardado en la pasada
anterior. Si coinciden por un lapso de tiempo determindado se
actualiza el valor en una variable llamada Teclas_Nuevo, con
esto logramos hacer un pequeo filtro por soft de las teclas.
Subrutina de vida:
Se llam a la subrutina desde el cuerpo principal del programa.
Esta subrutina lo que hace es decrementar unas variables y
cuando llegan a cero cambian el valor de un bit del puerto,
logrando una salida de vida que es muy til a la hora de realizar
un programa para poder detectar si el programa se nos colg o no.
Switch Case principal:
Se encuentra en el lazo principal del programa y lo que hacemos
es mirar constantemente si cambi el valor de la variable
Teclas_Nuevo. Si ocurri esto es porque se toco una tecla,
entonces analizamos que tecla se toco. Para ello realizamos un
Switch Case que mira el valor de Teclas_Nuevo y salta a la
subrutina adecuada segn este en manual o automtico. Para saber
ello se declar una variable Fase que tiene la informacin de
Manual o Auto. Por ejemplo, si se toc el pulsador de Subir y esta
en automtico, entonces salta a la subrutina de incrementar
SetPoint. Si estaba en Manual, entonces salta a la subrutina de

13

Diseo De Controladores Digitales


Informe Proyecto Final

incrementar Potencia. Si se toca el pulsador de cambiar entre


Manual o Auto lo que hacemos es cambiar el valor de la fase.
Subrutinas de incrementar/decrementar SP o %Potencia:
Son llamadas por el Switch Case principal y lo que hacen es
cambiarle el valor a las variables Var_Pot, Var_SP.
Subrutina de Control:
Se llam a la subrutina desde el cuerpo principal del programa. Se
fija la fase del programa, si esta en Manual deja el %Pot para que
se modifique con los pulsadores. Si esta en Auto lo que hace es
calcular la distancia de la variable de proceso con el Set Point y
aplicar un %Pot proporcional a esa distancia. Por ejemplo, en
Var_SP tengo el valor del SetPoint, en Var_Tmp tengo el
valor de la variable de proceso entonces calculamos la diferencia
haciendo
Dif = Var_SP - Var_Tmp
Si tuvimos Borrow quiere decir que la temperatura es mayor que
el SetPoint, entonces:
%Pot = 0
Si no tenemos Borrow entonces nos fijamos si:
Dif > 20 (cuentas)
De ser as la temperatura esta a una distancia mayor de 10 C por
debajo aproximadamente de mi Set Point, entonces aplicamos
%Pot = 100%
Si la diferencia se encuentra entre:
0 < Dif < 20 (cuentas)

14

Diseo De Controladores Digitales


Informe Proyecto Final

entonces hacemos la modulacin de fase calculando:


%Pot = Dif *$12
%Pot contiene un numero de cuentas proporcional al ancho del
pulso del PWM que aplicamos para mover el Triac. Por ejemplo
si %Pot = $80 estaremos aplicando un PWM con un ciclo de
actividad del 50%.
Nota: el $12 es un nmero que hay que ajustar cuando se cierre el
lazo.
Subrutina del conversor A/D:
Esta subrutina es llamada por la subrutina de vida, porque no
tiene mucho sentido tomar el valor de la temperatura muy seguido
por tener una dinmica muy lenta. Solamente se configuro esta
subrutina para que se guardara en Var_Tmp un valor
proporcional a la temperatura. Como nuestro rango es de 50 a 150
C, Var_Tmp = 0 equivale a 50 C y Var_Tmp = $FF equivale a
150 C.
Subrutina de envo de datos:
Esta subrutina tambin es llamada por la subrutina de vida,
porque tampoco tiene mucho sentido enviar datos rpidamente
(para nuestro caso en particular). Los datos que se mandaron por
el puerto serie fueron el valor de la temperatura, el Set Point y el
%Pot. Estos datos fueron levantados por una pequea interfas
hecha en Visual Basic y mostrados por pantalla.
Interrupcin de Input Capture:
Esta interrupcin es llamada por un mecanismo de Hard cada vez
que se produce un flanco de subida o bajada en el pin que se
encuentra configurada. Esto me esta indicando el cruce por cero
de la seal de alterna.
Lo que hacemos nosotros en esta interrupcin es deshabilitar el
PWM para poder manejar el pin de salida y ponerlo a cero lgico.
15

Diseo De Controladores Digitales


Informe Proyecto Final

Luego hacemos un escalamiento del %Pot para que se ajuste al


ancho de nuestra seal de alterna y este ser el nmero de cuentas
que le pondremos a la interrupcin del PWM para que cuando
pase este tiempo se active la salida a uno lgico. Al final
limpiamos los flags y habilitamos la interrupcin del PWM para
que el mecanismo de hard tome de nuevo el control de nuestro pin
de salida.
Interrupcin de Output Compare:
Esta interrupcin se configuro para que ponga en uno lgico mi
salida cada vez que se activa. Cuando llegamos al valor de
cuentas que le puso el Input Capture esta interrupcin se activa,
pone mi salida en uno lgico. Nosotros solamente limpiamos los
flags en esta interrupcin.

16

Diseo De Controladores Digitales


Informe Proyecto Final

Caractersticas del Micro


*Frecuencia interna del bus de 8MHz.
*32 Kbytes de memoria flash.
*512 bytes de memoria RAM.
*Timer Interface Module (TIM) de 16bits, con entrada de captura,
salida de comparacin y PWM.
*8 canales de conversor A/D de 8bits.
*Modulo generador de reloj compatible con cristal de 32KHz.
*29 pines de propsito general de entrada/salida.
*Entradas con Pullups configurables por pin.
*10 mA de corriente de salida por pin.
*Encapsulado de 40 pines.
*Soporta lenguaje C.

17

Diseo De Controladores Digitales


Informe Proyecto Final

18

Diseo De Controladores Digitales


Informe Proyecto Final

Conclusiones
Este proyecto nos permiti utilizar casi todo lo que este micro nos
brinda, como el conversor A/D, las interrupciones (captura y
comparacin), PWM, perifrico SCI para comunicarnos, puertos
de salida, entrada. Adems se trabajo con electrnica para poder
amplificar la seal de la temperatura, mover la salida de potencia,
comunicarse a travs del puerto serie, fuente, etc.
Se lograron casi todas las metas que hacan a este proyecto un
controlador de temperatura, menos obtener una buena seal de

19

Diseo De Controladores Digitales


Informe Proyecto Final

modulacin de fase con el Triac, por lo cual no se pudo cerrar el


lazo como se pensaba.
Los logros fueron:
*Adquirir un valor de temperatura con el sensor, amplificar la
seal y capturarla con el conversor A/D.
*Obtener una seal de PWM de salida en fase con la seal de
alterna y que se modificara mediante unos pulsadores cuando este
en Manual o automticamente si se encontraba en Automatico.
*Funcionamiento correcto de la lgica de control creada.
*Poder mandar los datos de temperatura, set point y % de
potencia a travs del puerto serie.
*Levantar los datos con una interfas realizada en Visual Basic que
me muestra la temperatura, el set point y el % de potencia.
Fracasos:
*No se pudo cerrar el lazo debido al problema con el Triac de
salida. Primeramente se prob con un BTA16 y no funcion.
Luego se intento con un TIC206 pensando que era un problema
de la corriente que se estaba manejando pero tampoco. Se
cambiaron los valores de las resistencias pero no funcion. Por
falta de tiempo no se pudo seguir investigando del porque de la
falla. Se sugiere mirar con el osciloscopio la modulacin de fase
en la parte de alta tensin a ver que es lo que esta ocurriendo.
Mejoras:
*Hacer manejo de un display para mostrar los datos adems de
enviarlos a la PC.
*Poner un conversor aparte de mas bits para poder tener una
mejor resolucin de la temperatura. Ahora tenemos una
resolucin de un grado aproximadamente.
*Cambiar el triac por dos tiristores que no tienen problemas de
apagado.

20

Diseo De Controladores Digitales


Informe Proyecto Final

Anexo:
Cdigo del programa:
***************************************
*******CONTROL DE TEMPERATURA****
*******POR MODULACION DE FASE*****
***************************************
*********REALIZADO: 01/12/07***********
***************************************
;Definicion de ctes de pre-copilacion
$SEtNOT EMULADOR
$SETnot WATCH_DOG
$SET CLOCK_8M
$SETnot CLOCK_4M9
****************************************
****************************************
;Definicion de ctes simbolicas
RAM_Start
EQU $0040
ROM_Start
EQU $8100
Vector_Start EQU $FFDC
****************************************
****************************************
;Comienzo de la memoria RAM
org

RAM_Start

****************************************
;Archivos incluidos de variables y ctes

21

Diseo De Controladores Digitales


Informe Proyecto Final

$include 'gpgtregs.inc'
$include 'SCI_Var.asm'
$include 'Variables.asm'
$include 'TIM_var.asm'
****************************************
****************************************
;Definicion de variables y ctes
****************************************
End_RAM:
****************************************
;Comienzo de la memoria ROM
org

ROM_Start

****************************************
;Archivos incluidos de funciones
$include 'SCI_Fun.asm'
$include 'Funciones.asm'
$include 'ADC_Fun.asm'
$include 'TIM.asm'
****************************************
****************************************
;Inicializacion del main
Main_Init:
mov #$FF,DDRD
mov #$F8,DDRC
mov #$FE,ALTO
mov #$FE,BAJO
22

Diseo De Controladores Digitales


Informe Proyecto Final

mov
mov
mov
mov
mov

#$01,Var_Tmp
#$C8,Var_SP
#$80,Var_Pot
#$01,Var_SCI
#$01,Rot_SCI

mov #$FF,Ret_Tec_Val
mov #$40,Ret1_Val
mov Ret1_Val,Ret1
mov #$40,Ret2_Val
mov Ret2_Val,Ret2
mov ALTO,Bandera
mov BAJO,Bandera+1
mov #$20,Dif_Valor
mov #$08,Dif_Factor
mov #$FF,Ret3
clr
clr
clr
clr

PORTD
PORTC
Fase
Dif

RTS
*****************************************
*****************************************
;Configuracion del Micro
Main_Prog:
RSP

; Reset the low byte of the stack


pointer to
; the top of the stack page
23

Diseo De Controladores Digitales


Informe Proyecto Final

$IF WATCH_DOG
MOV #$00,config1 ; Enable COP
$ELSEIF
MOV #$01,config1 ; disable COP
$ENDIF
mov

#$03,config2 ; For GP32 - SCI clock source is Bus

$IF CLOCK_8M
;------------------------ Valores para el Clock Generator
Module
;
fBUS=8Mhz
;
--------------------------------------bclr 5,PCTL
; PLLON=0
mov #$02,PCTL
; P=0 ; E=2
mov #$D1,PMSL
; N=3D1
mov #$03,PMSH
;
mov #$D0,PMRS
; L=D0
bset 7,PBWC
; Auto = 1
bset 5,PCTL
; PLLON=1
bset 4,PCTL
; BCS=1
$ENDIF
$IF CLOCK_4M9
;------------------------ Valores para el Clock Generator
Module
;
fBUS=4.9152Mhz
--------------------------------------bclr 5,PCTL
; PLLON=0
mov #$02,PCTL
; P=0 ; E=2
mov #$58,PMSL
; N=258
mov #$02,PMSH
;
mov #$80,PMRS
; L=80
bset 7,PBWC
; Auto = 1
24

Diseo De Controladores Digitales


Informe Proyecto Final

bset 5,PCTL
bset 4,PCTL

; PLLON=1
; BCS=1

$ENDIF
jsr Main_Init
jsr Init_SCI
jsr ADC_Init
jsr Init_TIM
cli
*******************************************
*******************************************
;Lazo Principal del programa
Main_loop:
jsr Varrido
jsr Vida
Case_Principal:
lda Teclas_Nuevo
cmp #$01
beq Man_Auto
cmp #$02
beq Incrementa
cmp #$04
beq Decrementa
bra Case_Principal_01
;Cambia de Manual a Auto o viceversa
Man_Auto:
lda Fase
cmp #Man
bne Man_Auto_01
mov #Auto,Fase
25

Diseo De Controladores Digitales


Informe Proyecto Final

bra Man_Auto_02
Man_Auto_01:
mov #Man,Fase
Man_Auto_02:
bra Case_Principal_01
;Incrementa el SP o %Pot
Incrementa:
lda Fase
cmp #Man
bne Incrementa_01
jsr Incre_Pot
bra Incrementa_02
Incrementa_01:
jsr Incre_SP
Incrementa_02:

bra Case_Principal_01

;Decrementa el SP o %Pot
Decrementa:
lda
eor
sta

PortD
#$10
PortD

lda Fase
cmp #Man
26

Diseo De Controladores Digitales


Informe Proyecto Final

bne Decrementa_01
jsr Decre_Pot
bra Decrementa_02
Decrementa_01:
jsr Decre_SP
Decrementa_02:

Case_Principal_01:
*********************************************
jsr
jsr
jsr

Control
Deshab
Pull_SCI ;Rota variables para SCI

*********************************************
;STA $FFFF ; Reset the COP
BRA Main_loop

dummy_isr:
rti

; return

**********************************************
;Vector Interrupciones
org

Vector_Start

dw dummy_isr ; Time Base Vector


dw dummy_isr ; ADC Conversion Complete
27

Diseo De Controladores Digitales


Informe Proyecto Final

dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw
dw

dummy_isr ; Keyboard Vector


dummy_isr ; SCI Transmit Vector
dummy_isr ; SCI Receive Vector
dummy_isr ; SCI Error Vector
dummy_isr ; SPI Transmit Vector
dummy_isr ; SPI Receive Vector
dummy_isr ; TIM2 Overflow Vector
dummy_isr ; TIM2 Channel 1 Vector
dummy_isr ; TIM2 Channel 0 Vector
dummy_isr ; TIM1 Overflow Vector
ICap_T1C1 ; TIM1 Channel 1 Vector
OComp_T1C0 ; TIM1 Channel 0 Vector
dummy_isr ; ICG/CGM Vector
dummy_isr ; ~IRQ1 Vector
dummy_isr ; SWI Vector
Main_Prog ; Reset Vector

*************************************
*************FUNCIONES*************
*************************************
*************************************
;Led de Vida
Vida:
lda
bne
lda
bne
mov
mov
dec

Bandera
Vida_00
Bandera+1
Vida_01
Alto,Bandera
Bajo,Bandera+1
Bandera+2

Vida_00:
dec
bne

Bandera
Vida_02

28

Diseo De Controladores Digitales


Informe Proyecto Final

Vida_01:
dec

Bandera+1

Vida_02:
lda Bandera+2
bne Vida_03
lda PortC
eor #$10
sta PortC
jsr
jsr

ADC_PTB3
SCI_Enviar

Vida_03:
rts
*************************************
;************************************
;Varrido de teclas con filtro
Varrido:
Lda PortC
coma
and #Msk_PortC
ldx #Msk_PortC
cmpa PortC_Viejo
bne Varrido_10
dec Ret_Tec
Varrido_10:
Sta
Ldx
Bne

PortC_Viejo
Ret_Tec
Varrido_20
29

Diseo De Controladores Digitales


Informe Proyecto Final

sta
ldx
stx

Teclas_Nuevo
Ret_Tec_Val
Ret_Tec

Varrido_20:
lda
Teclas_Viejo ;detecta flanco
coma
; subida
and
Teclas_Nuevo
Varrido_30:
lda
sta

Teclas_Nuevo
Teclas_Viejo

rts
*******************************************
;Incrementa Pot
Incre_Pot:
dec
bne
mov
dec
bne
mov
inc
bne
dec

Ret1
Incre_Pot_01
Ret1_Val,Ret1
Ret2
Incre_Pot_01
Ret2_Val,Ret2
Var_Pot
Incre_Pot_01
Var_Pot

Incre_Pot_01:
rts
********************************************
*******************************************
;Incrementa SP
30

Diseo De Controladores Digitales


Informe Proyecto Final

Incre_SP:
dec
bne
mov
dec
bne
mov
inc
bne
dec

Ret1
Incre_SP_01
Ret1_Val,Ret1
Ret2
Incre_SP_01
Ret2_Val,Ret2
Var_SP
Incre_SP_01
Var_SP

Incre_SP_01:
rts
********************************************
*******************************************
;Decrementa Pot
Decre_Pot:
dec
bne
mov
dec
bne
mov
dec
bne
inc

Ret1
Decre_Pot_01
Ret1_Val,Ret1
Ret2
Decre_Pot_01
Ret2_Val,Ret2
Var_Pot
Decre_Pot_01
Var_Pot

Decre_Pot_01:
rts
********************************************
*******************************************
;Decrementa SP
31

Diseo De Controladores Digitales


Informe Proyecto Final

Decre_SP:
dec
bne
mov
dec
bne
mov
dec
bne
inc

Ret1
Decre_SP_01
Ret1_Val,Ret1
Ret2
Decre_SP_01
Ret2_Val,Ret2
Var_SP
Decre_SP_01
Var_SP

Decre_SP_01:
rts
********************************************
********************************************
;Control
Control:
lda Fase
cmp #Man
beq Control_Fin
lda Var_SP
sub Var_Tmp
sta Dif
bcc Control_01
;quito Pot si me pase del SP
mov #$02,Var_Pot
bra Control_Fin
Control_01:
lda
sub
bhi
lda

Dif
Dif_Valor
Control_02
Dif
32

Diseo De Controladores Digitales


Informe Proyecto Final

ldx Dif_Factor
mul
sta Var_Pot
bra Control_Fin
Control_02:
mov #$FE,Var_Pot
Control_Fin:
rts
*************************************
*************VARIABLES*************
*************************************
Bandera
DB $00,00,00
Msk_Bandera EQU $10
Alto
DB $00
Bajo
DB $00
Var_Tmp
DB $00
Var_SP
DB $00
Var_Pot
DB $00
Var_SCI
DB $00
Rot_SCI
DB $00
PortC_Viejo DB $00
Ret_Tec
DB $00
Teclas_Nuevo DB $00
Ret_Tec_Val DB $00
Teclas_Viejo DB $00
Msk_PortC EQU $07
Fase
DB $00
Auto
EQU $01
Man
EQU $00
Ret1
DB $00
Ret1_Val
DB $00
33

Diseo De Controladores Digitales


Informe Proyecto Final

Ret2
DB $00
Ret2_Val
DB $00
Dif
DB $00
Dif_Valor DB $00
Dif_Factor DB $00
Ret3
DB $00
CTE
DB $00,00

*************************************
*************************************
********FUNCIONES DEL SCI**********
*************************************
*************************************
;Inicializacion del SCI
Init_SCI:
$IF CLOCK_4M9
MOV
#$21,SCBR
;COMO TENEMOS 4.9152 MHz
PARA QUE NOS DE 9600 BAUDIOS SE TUBO QUE PONER
$ENDIF
$IF CLOCK_8M
MOV
#$30,SCBR
;COMO TENEMOS 8 MHz PARA
QUE NOS DE 9600 BAUDIOS SE TUBO QUE PONER
$ENDIF
BSET $06,SCC1

; Habilita el SCI

MOV

#$08,SCC2

LDA

SCS1

clr

; Lee el registro de estado para


; poder transmitir el primer caracter

SCDR

34

Diseo De Controladores Digitales


Informe Proyecto Final

rts
*****************************************
*****************************************
;Enviar Datos por el SCI
SCI_Enviar:
brclr $06,SCS1,SCI_Enviar_02
lda Rot_SCI
cmp #$03
bne SCI_Enviar_01
mov #$00,Rot_SCI
SCI_Enviar_01:
inc

Rot_SCI

lda
lda
sta
bset

SCS1
Var_SCI
SCDR
$03,SCC2

;Habilita SCI

SCI_Enviar_02:
rts
******************************************
********************************************
;Deshabilita Envio de datos
Deshab:
brclr $07,SCS1,Deshab_01
clr SCDR
bclr $03,SCC2
;Deshabilita SCI
Deshab_01:
35

Diseo De Controladores Digitales


Informe Proyecto Final

rts
*********************************************
*********************************************
;Pulling de variables a enviar por el SCI
Pull_SCI:
lda Rot_SCI
cmp #$01
beq Pull_SCI_01
cmp #$02
beq Pull_SCI_02
cmp #$03
beq Pull_SCI_03
bra Pull_SCI_04
Pull_SCI_01:
mov Var_Tmp,Var_SCI
bra Pull_SCI_04
Pull_SCI_02:
mov Var_SP,Var_SCI
bra Pull_SCI_04
Pull_SCI_03:
mov Var_pot,Var_SCI
Pull_SCI_04:
rts
*************************************
*************************************
********FUNCIONES DEL ADC********
36

Diseo De Controladores Digitales


Informe Proyecto Final

*************************************
*************************************
;Inicio del ADC
ADC_Init:
mov
mov

#$00,ADCLK
#$03,ADSCR

rts
*************************************
;Convierte la entrada PTB3 a un valor digital
ADC_PTB3:
brclr $07,ADSCR,ADC_PTB3_01
mov
mov
mov

ADR,Var_Tmp
#$00,ADCLK
#$03,ADSCR

ADC_PTB3_01:
Rts
*************************************
****************TIM*****************
*************************************
*************************************
; Inicio del TIM
Init_TIM:
mov
#{TSTOP|TRST|PS1|PS0},T1SC
stop the counter an reset, asigna tiempo

37

; write el prescaler,

Diseo De Controladores Digitales


Informe Proyecto Final

lda
#{CHxIE|ELSxA|ELSxB}
o falling edge
sta T1SC1
lda
sta

; Input capture in rising


; Timer 1 canal 1

#{CHxIE|MSxA|ELSxA|ELSxB}
T1SC0

lda T1SC
and #$FF^TSTOP
sta T1SC

; Output Compare
; Timer 1 canal 0

; saca el STOP

rts
;----------------------------------------------------------------------Init_TIM ------; Interrupcin de input capture del timer 1 canal 1
ICap_T1C1:
lda T1SC0
and #$F3
sta T1SC0

; Output Compare
; Timer 1 canal 0

bclr $04,PortD
lda T1SC0
eor #$0C
sta T1SC0
lda Var_pot
psha
lda
sub
sta
bne
inc

#$FF
Var_pot
Var_pot
ICap_T1C1_01
Var_pot

ICap_T1C1_01:
38

Diseo De Controladores Digitales


Informe Proyecto Final

ldhx #$26FF
lda
div
ldx

#$64

;Parte alta y divisor


;Parte Baja

Var_pot

mul
sta CTE+1
stx CTE
lda T1CH1L
ADD CTE+1
STA T1CH0L
LDA T1CH1H
ADC CTE
STA T1CH0H
lda T1SC0
and #$F3
sta T1SC0

; CUANDO SALTA EL INPUT


; EL VALOR DEL CANAL 1 + UNA
; SE AGREGA EN EL CANAL 0 DEL
; OUTPUT COMPARE

; Output Compare
; Timer 1 canal 0

bclr $04,PortD
lda T1SC0
eor #$0C
sta T1SC0
ICap_T1C1_02:
lda T1CH0L
sta T1CH0L
lda T1CH1L

; habilita input capture

LDA T1SC1
;LIMPIA EL FLAG DEL Input Capture
AND #$FF^CHxF
;
STA T1SC1
;
39

Diseo De Controladores Digitales


Informe Proyecto Final

ICap_T1C1_04:
pula
sta Var_pot
rti
;-------------------------------------------------------------------------INT_IComp -------;----------------------------------------------------------------------------------; Interrupcin de output compare del timer 1 canal 0
OComp_T1C0:
LDA T1CH0L
STA T1CH0L
OComp_T1C0_00:
OComp_T1C0_02:
LDA T1SC0
;LIMPIA EL FLAG DEL Output
AND #$FF^CHxF ;
STA T1SC0
;
rti
*************************************
********VARIABLES DEL TIM*********
*************************************
*************************************
TSTOP
EQU $20
TRST
EQU $10
MSxB
EQU $20
MSxA
EQU $10
TOV0
EQU $02
40

Diseo De Controladores Digitales


Informe Proyecto Final

TOIE
ELSxA
ELSxB
PS0
PS1
PS2

EQU $40
EQU $04
EQU $08
EQU
EQU
EQU

$01
$02
$04

CHxF
CHxIE

EQU
EQU

$80
$40

T1MOD
T2MOD
TCH0
TCH1
TCH1L

EQU $0023
EQU $002E
EQU $0026
EQU $0029
EQU $0034

****************************************

41

You might also like