En la Figura 5.6 se ofrece una tabla que resume los bits de los registros que se utilizan en el mane- jo del TMR2.
Figura 5.5. Esquema por bloques de la estructura del TMR2.
Figura 5.6. Resumen de los bits de los registros que se utilizan en el manejo y programación del TMR2.
DIREC- VALOR VALOR
CIÓN NOMBRE BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 EN POR, EN EL RESTO BOR DE RESETS
0Bh, INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
8Bh, 10B, 18Bh
0Ch PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000 8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
11h TMR2 Registro del módulo TMR2 xxxx xxxx uuuu uuuu
12h T2CON — TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 xxxx xxxx uuuu uuuu
92h PR2 Registro de perớodo del TMRằ –00 0000 –uu uuuu
MIDIENDO EL TIEMPO
La mayoría de los programas tienen una o más rutinas de temporización. Dicha temporización se puede realizar mediante bucles anidados en que se van decrementando el valor de varios contado- res hasta llegar a 0 o, más eficientemente, descargando de esta tarea a la CPU, utilizándola para otras cosas, mientras un temporizador especial que lleva la cuenta. En este capítulo se ha hablado del as- pecto teórico de los temporizadores; vamos ahora a llevarlo a la práctica mediante un ejercicio. El uso de los temporizadores es tan común que en capítulos posteriores se seguirán mostrando ejem- plos de utilización aunque no sea el recurso a estudiar.
Enunciado
Se quiere que el temporizador TMR1 se comporte como un contador de eventos externos. Dichos eventos vendrán por la línea RC0/T1CKI desde el generador de onda del Micro’PIC I/O. Si cuenta los eventos durante 0,250 seg y el resultado se multiplica por 4, se obtiene el número de pulsos por segundo (herzios). Cambiando el intervalo de tiempo de medición se podrían medir KHz, MHz, etc.
Si en lugar de ser el generador el que proporcionara los pulsos, fuera el optoacoplador asociado al motor del Micro’PIC I/O, estaríamos consiguiendo medir su velocidad. Los herzios se van a mos- trar, además, por la pantalla LCD del Micro’PIC Trainer. El TMR0 va a funcionar como tempori- zador auxiliar.
Esquema eléctrico
La única conexión que deberá realizarse entre el Micro’PIC I/Oy el Micro’PIC Trainer, además del PICBUS, es entre la salida del generador y la patita RC0/T1CKI de entrada de pulsos para el TMR1.
En la Figura 5.7 se muestran las conexiones al completo.
Organigrama
Una vez más, el organigrama del programa principal es tan simple como la inicialización de los di- ferentes registros y recursos a utilizar, y la espera en un bucle a que se produzca una interrupción, que será la que realmente realice las operaciones necesarias. (Figura 5.8.)
Programar PIC es fácil
107
Figura 5.7. Esquema eléctrico del ejercicio propuesto.
Vss Vdd Vo RS R/W# E D0 D1 D2 D3 D4 D5 D6 D7
+5V
2 3 4 5 6 7 8 9 10 11 12 13 14 1
CONTRASTE
PIC16F873 1
2 3 4 5 6 7 8 9 10 11 12 13 14
RB7/PGD RB6/PGC RB5 RB4 RB3/PGM RB2 RB1 RB0/INT V
V RC7/RX/DT RC6/TX/CK RC5/SDO RC4/SDI/SDA
DD SS
28 27 26 25 24 23 22 21 20 19 18 17 16 15 MCLR#/V /THV
RA0/AN0 RA1/AN1 RA2/AN2/V RA3/AN3/V RA4/T0CKI RA5/AN4/SS#
V OSC1/CLKIN OSC2/CLKOUT RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL
PP
REF- REF+
SS
15 pF CRISTAL 4 Mhz
15 pF
+5 V 100
RESET In4148
10K +5V
GENERADOR MICRO’PIC I/O
Se entrará en la rutina de interrupción cada 50 ms. Éste es el tiempo aproximado que tarda el TMR0 en desbordarse con los valores cargados. Como se requiere una temporización de 250 ms, se entrarỏ en dicha interrupciún 5 veces, antes de hacer el tratamiento ôverdaderoằ. Una vez llegado a este punto se visualizará el TMR1, que se habrá ido incrementando con los pulsos proporcionados por el generador, en la pantalla LCD y, tras reponer los valores adecuadamente, se volverá al pro- grama principal hasta que se produzca una nueva interrupción. (Figura 5.9.)
Figura 5.8. Organigrama del ejercicio.
Figura 5.9. Organigrama de la rutina de tratamiento de interrupción.
Programa comentado
El programa quedará de la siguiente manera:
LIST P=16F873 ; Se indica el tipo de
; procesador
RADIX HEX ; Sistema de numeración
; hexadecimal
INCLUDE ôP16F873.INCằ ; Se incluye la definiciún de
; los registros internos en
; una librería
Lcd_var EQU 0x20 ; Variables para LCD
BYTE_L EQU 0X22 ; Parte baja del byte a
BYTE_H EQU 0X23 ; convertir y parte alta
BCD_2 EQU 0x24 ; Variables BCD
BCD_1 EQU 0x25
BCD_0 EQU 0x26
CONTADOR EQU 0x27
TEMPORAL EQU 0x28
DELAY EQU 0x29 ; Variable de temporización
ORG 0x00 ; Inicio en el Vector de
; Reset
goto INICIO ; Va a la primera instrucción
; del programa
ORG 0x04 ; Vector de
goto INTER ; interrupción
INCLUDE ôLCD_CXX.INCằ ; Incluye rutinas de LCD
; Se visualiza por el LCD los cinco dígitos situados en las variables BCD2-0
VISUALIZAR movlw 0x80
call LCD_REG
movlw 3
movwf CONTADOR
movlw BCD_0
movwf FSR
VISU_LOOP swapf INDF,W
andlw 0x0f
iorlw 0x30
call LCD_DATO
movf INDF,W
andlw 0x0f
iorlw 0x30
call LCD_DATO
decf FSR,F
decfsz CONTADOR,F
goto VISU_LOOP
return
; Rutina de conversión de un número binario de 16 bits a 5 dígitos BCD para el LCD
BITS16_BCD bcf STATUS,C
clrf CONTADOR
bsf CONTADOR,4
clrf BCD_0
clrf BCD_1
clrf BCD_2
LOOP_16 rlf DATOC_L,F
rlf DATOC_H,F
rlf BCD_2,F
rlf BCD_1,F
rlf BCD_0,F
decfsz CONTADOR,F
goto AJUSTE
return
AJUSTE movlw BCD_2
movwf FSR
call AJUSTE_BCD
incf FSR,F
call AJUSTE_BCD
incf FSR,F
call AJUSTE_BCD
goto LOOP_16
AJUSTE_BCD movf INDF,W
addlw 0x03
movwf TEMPORAL
btfsc TEMPORAL,3
movwf INDF
movf INDF,W
addlw 0x30
movwf TEMPORAL
btfsc TEMPORAL,7
movwf INDF
return
; Rutina de tratamiento de la interrupción
INTER decfsz DELAY,F ; ¿Han pasado 250 ms?
goto NO_250_MS ; No
SI_250_MS bcf T1CON,0 ; Sí. Para el TMR1
bcf STATUS,C
rlf TMR1L,F ; Lo multiplica por 4
rlf TMR1H,F
rlf TMR1L,F
rlf TMR1H,F
movf TMR1L,W ; Salva el contador
movwf BYTE_L
movf TMR1H,W
movwf BYTE_H
call BITS16_BCD ; Lo convierte a BCD
call VISUALIZAR ; Lo visualiza por el LCD
movlw ~.195 ; Repone el valor del TMR0
movwf TMR0 ; para volver a temporizar
movlw .5 ; 50 x 5 = 250 ms
movwf DELAY
bcf INTCON,2 ; Repone flag
clrf TMR1L
clrf TMR1H
bsf T1CON,0 ; Activa TMR1
retfie
NO_250_MS movlw ~.195 ; Para volver a contar otros
movwf TMR0 ; 50 ms, hasta llegar a los
bcf INTCON,2 ; 250
retfie
; Comienzo del programa principal
INICIO clrf PORTB ; Limpia salidas
clrf PORTA
bsf STATUS,RP0 ; Cambio al banco 1
bcf STATUS,RP1
movlw b’00000110’ ; Puerta A E/S digitales
movwf ADCON1
clrf TRISB ; Puerta B como salida
clrf TRISA ; Puerta A salida
movlw FF ; Puerta C como entrada
movwf TRISC
movlw b’11000111’ ; Configuración del TMR0
movwf OPTION_REG ; con predivisor de 256
bcf STATUS,RP0 ; Cambio a banco 0
movlw b’00000010’ ; Desactivación del TMR1
movwf T1CON
clrf TMR1L ; Inicialización del TMR1
clrf TMR1H
call UP_LCD ; Configuración de líneas
; para LCD
call LCD_INI ; Inicialización de LCD
movlw b’00001100’ ; LCD On, Cursor y Blink
call LCD_REG ; Off
movlw ~.195 ; Inicialización del TMR0
movwf TMR0
bsf T1CON,0 ; Activación del TMR1
movlw .5 ; Preparación de
movwf DELAY ; temporización de 250 ms
movlw b’10100000’ ; Habilitación de
movwf INTCON ; interrupción del TMR0
BUCLE clrwdt ; Refresca perro guardián
goto BUCLE
END
Prueba del programa
Se deberán conectar las líneas tal y como muestra el esquema eléctrico. Además, se deberá tener en cuenta:
La Figura 5.10 muestra una fotografía del programa funcionando. En el LCD puede observarse el valor numérico que muestra los herzios y el osciloscopio los pulsos generados por el oscilador del Micro’PIC I/O.
1.o En la ejecución, el jumper J6 del Micro’PIC Trainer debe estar cerrado.
2.o Los interruptores RA0-RA2 del Micro’PIC Trainer deben permanecer activados para no interferir con el funcionamiento del LCD.
Figura 5.10. Fotografía del ejercicio propuesto en ejecución.
APLICACIÓN DE LOS PIC AL CONTROL DE MOTORES Y SENSORES
Tarjetas como la Micro’PIC Trainer Plusy la Micro’PIC I/Opueden ser muy adecuadas para la de- puración de programas, ya que cada una de ellas dispone de periféricos de E/S variados junto con sus controladores. Esto permite la prueba de diferentes rutinas facilitando así el aprendizaje.
Sin embargo, cuando se acomete un proyecto real, a menudo los sensores y actuadores no se en- cuentran sobre la tarjeta, sino sobre el elemento al cual controlan. Para esto se hace necesario que la circuitería de control guarde cierta independencia de los sensores y actuadores.
La tarjeta MSx84
Se trata de una controladora de motores y sensores que puede contener un PIC16F84 de 18 patitas para su gobierno o puede conectarse a otro sistema como el Micro’PIC Trainerque, a través del PICBUS, puede pasarle las seủales de un PIC de un mỏximo de 28 patitas. (Figura 5.11.)
Figura 5.11. Fotografía que muestra las partes más importantes de la MSx84.
Diseủar con PIC es fỏcil
114
ALIMENTACIÓN AC
PICBUS
PIC18 HF40106
L2938
SW1 MOTORES
SENSORES
BATERÍA SW3
Descripción del esquema electrónico
En la Figura 5.13 se muestra el esquema de la tarjeta MSx84, que está compuesto de cuatro bloques principales:
1.o Fuente de alimentación.
2.o Sección del microcontrolador.
3.o Control de motores.
4.o Sección de sensores.
1.a Alimentación:se alimenta mediante un transformador de 12 VAC.
2.a Interruptor SW3:para el encendido y apagado de la placa.
3.a Entrada de batería J5:que permite la posibilidad de alimentación a pilas o con baterías, lo cual la hace muy apta para entornos en que se necesita autonomía de alimentación.
4.a Conexión de Motores J6 y J7:con el driver L293B que contiene la placa, que permite controlar a través de estos bornes 2 motores DC o uno PAP. Están asociados a las líneas RA0-RA3 del PIC.
5.a PICBUS:para la conexión con el Micro’PIC Trainer a través de este bus que permite, además de la disposición de las líneas de E/S de un PIC externo, la grabación del PIC que se encuentra en la propia tarjeta sin necesidad de sacarlo del zócalo.
6.a Conectores J -J4:asociados a las líneas RB0-RB3 y RA4 del PIC y que sirven para la conexión de 5 sensores, usando dos circuitos integrados HF40106.
7.a Dip-Switch SW1:son los encargados de realizar la asociación periféricos-líneas del PIC, tal y co- mo se muestra en la Figura 5.12, donde S0-S4 se refiere a los sensores, INx al sentido de los mo- tores y ENx a su encendido/apagado. En el caso de que se quiera realizar otra asociación, se de- berán quitar los microrruptores e interconectar las líneas mediante cables.
8.a PIC18:zócalo sobre el que se alojará el PIC16F84.
Figura 5.12. Zócalos que muestran la asociación de líneas con los sensores y actuadores.
MICROCONTROLADORES ôPICằ. DISEẹO PRÁCTICO DE APLICACIONES
Figura 5.13. Esquema electrónico de la tarjeta MSx84 para el control de motores y sensores.
Fuente de alimentación
Está formada por dos secciones. La primera recibe en el puente rectificador (D1) por J8 una tensión de 12 VAC y proporciona una tensión de 13 VDC, mediante el regulador UA7812 (U4) y los dio- dos D2, D3, D4 y D5.
Al cerrar el interruptor SW3, se consigue una tensión de 5 VDC a través del regulador UA7805 (U5) en el borne +VCC, mientras que en el borne +VBATse tienen los 13 VDC.
En lugar de la sección rectificadora del UA7812 se puede introducir una tensión de CC por me- dio de una batería en el conector J5.
Microcontrolador
La tarjeta contiene su propio microcontrolador PIC16F84, que pone a disposición del usuario todas sus patitas a través del conector PICBUS. Igualmente, usando este conector PICBUS puede conec- tarse al Micro’PIC Trainerpara grabar y borrar el microcontrolador directamente sobre la tarjeta de aplicación.
La circuitería que envuelve al PIC16F84 es la mínima necesaria: cristal X1 de 4 MHz, junto a los condensadores C7 y C8, y el circuito de Reset formado por el pulsador SW2 y la resistencia R11.
Sección de sensores
La tarjeta MSx84 puede controlar las seủales digitales procedentes de 5 sensores externos que se aplican por los conectores J0-J4. Dichas seủales se aplican a puertas Trigger inversoras para la adap- tación de niveles, evitando ruidos y deformaciones, mediante dos circuitos integrados HF40106.
Los microrruptores de SW1 permiten que cada una de las cinco seủales de los sensores puedan desconectarse de las líneas del microcontrolador, caso de no emplearse.