
![]()
|
|
|
|
||
|
|
|
|||
|
|
|
|||
|
|
|
![]()
|
|
|
|
El Esquema del circuito del Temporizador digital ha sido realizado con la ayuda de EAGLE que es un programa de diseño de circuitos impresos por ordenador con el cúal se puede hacer un primer diseño teórico del circuito, el diseño de un posterior circuito impreso y sacar plantillas de perforaciones y máscaras de soldadura. No obstante, para el mejor entendimiento de cómo se hacen los diseños aquí se puede descargar un pequeño Manual de EAGLE que sirve de ayuda para futuros diseños.
|
|
|
|---|
|
|
TIPO/ REFERENCIA |
Encapsulado |
LIBRERÍA |
DENOMINACIÓN / ANOTACIONES |
UNIDADES |
PRECIO/ UNIDAD en € |
TOTAL en |
|
PIC16F84A |
|
Microchip |
Microcontrolador |
1 |
6,61 |
6,61 |
|
4511N |
DIL16 |
45xx |
BCD to 7-segment Latch/Decoder/ Driver |
1 |
0,29 |
0,29 |
|
RESISTOR (180W ) |
0204/5 |
rcl |
RESISTOR, American Symbol |
7 |
0,02 |
0,14 |
|
RESISTOR (10kW ) |
0204/5 |
rcl |
RESISTOR, American Symbol |
9 |
0,02 |
0,18 |
|
BUS 40 |
CON 40 |
Con-harting |
CONNECTOR |
1 |
0,11 |
0,11 |
|
ZUMBADOR |
AL 11 P |
buzzer |
------------------------ |
1 |
1,12 |
1,12 |
|
Display 7-SEG |
7SEG-13 |
Special |
7-Segment DISPLAY |
4 |
0,66 |
2,64 |
|
TRANSISTOR (BC107) |
TO18 |
Transitor-npn |
NPN Transistor |
5 |
0,29 |
1,45 |
|
PULSADOR |
DT6 |
Switch-misc |
ITT Switch |
4 |
0,25 |
1,00 |
|
VCC |
|
Supply1 |
PE* |
-------- |
|
----------- |
|
GND |
|
Supply1 |
V+* |
-------- |
|
----------- |
|
TOTAL =10,38 |
|
Los microcontroladores PIC, fabricados por Microchip, son productos de microelectrónica diseñados para facilitar y abaratar el control industrial. Los PIC pueden considerarse elementos de control incrustado y hoy en día se encuentran en amplios sectores del mercado internacional. A continuación muestro las características más importantes de este microcontrolador, no obstante para obtener una información más completa y detallada aquí dejo en formato zip el Manual del PIC16f84 procedente de Microchip.
|
FLASH-PROGRAMA |
MEMORIA-DATOS |
EEPROM-DATOS |
|---|---|---|
|
PIC16F83 512 bytes |
36 bytes |
64 bytes |
|
PIC16F84 1 K bytes |
68 bytes |
64 bytes |
Patillaje del PIC16F8X:

|
Nº pin |
Nombre |
Tipo (E/S/A) |
Tipo de buffer |
Descripción |
|
16 |
OSC1/CLKIN |
E |
ST/CMOS (3) |
entrada del cristal oscilador / entrada externa de reloj |
|
15 |
OSC2/CLKOUT |
S |
- |
Salida del cristal oscilador. En el modo de oscilación por cristal se conecta al cristal o resonador. En modo RC OSC2 proporciona CLKOUT (salida de reloj), que posee 1/4 de la frecuencia de OSC1, y representa el ciclo de instrucción. |
|
4 |
MCLR' |
E/A |
ST |
Entrada de reset / entrada de voltaje de programación. Este pin es un reset activo a nivel lógico bajo del dispositivo. |
|
17 |
RA0 |
E/S |
TTL |
PORTA es un puerto de E/S bidireccional Puede ser seleccionado también para ser la entrada de reloj al contador/temporizador TMR0. La salida es de colector abierto. |
|
6 |
RB0/INT |
E/S |
TTL/ST
(1) |
PORTB
es un puerto de E/S bidireccional que puede ser programado para
levantar internamente todas las entradas. |
|
5 |
Vss |
A |
- |
Referencia de tierra (masa) para todos los pines lógicos de E/S. |
|
14 |
Vdd |
A |
- |
Alimentación positiva para todos los pines lógicos de E/S. |
Leyenda y notas:
E=entrada S=salida E/S=entrada/salida A=alimentación - =no empleado TTL=entrada TTL ST=entrada Schmitt
|
(1)
Este buffer es una entrada Schmitt cuando se configura como
interrupción externa |
Arquitectura Interna
Los microcontroladores PIC utilizan la arquitectura Harvard, la cual separa la memoria de programa de la memoria de datos. Esto hace que el dispositivo tenga un bus de datos y un bus de memoria de programa, hecho que permite acceder a ambos simultáneamente. En el caso de la memoria de programa es interna, ya que se encuentra en forma de EPROM o FLASH dentro del propio PIC.
Otra característica reseñable es que las instrucciones en los PIC son de 14 bits y no de 8, permitiendo instrucciones de palabra única con operación y operando en la misma palabra.
Esta estructura, acompañada de un pipeline, permite que las instrucciones se ejecuten en un sólo ciclo de reloj, salvo en el caso de saltos/rupturas de programa. Lo que se hace internamente es que mientras se ejecuta la instrucción actual se carga la siguiente instrucción en el pipeline, con lo que se alcanza una alta velocidad de ejecución.
En cuanto a los registros los PIC pueden direccionarse tanto directa como indirectamente. Todos los registros de función especial, incluyendo el contador de programa, están accesibles en la memoria de datos y pueden ser operados de cualquier forma y empleando cualquier modo de direccionamiento (ortogonalización).
Igualmente, todos los elementos del sistema (temporizadores, puertos de e/s, etc) están implementados como registros
La unidad lógica aritmética (ALU)
Los PIC poseen una ALU de 8 bits y un registro de trabajo (W) de 8 bits, pudiéndose efectuar operaciones aritméticas y booleanas entre el registro de trabajo y cualquier otro registro. Por naturaleza los datos se operan en complemento a 2, a menos que se diga lo contrario.
En función de las instrucciones ejecutadas la ALU puede afectar los valores de los siguientes registros:
|
|---|
|
|
Organización de la memoria
Hay dos bloques de memoria en el PIC16F8x. Éstas son la memoria del programa y la memoria de datos. Cada bloque posee su propio bus, con la finalidad que el acceso para cada bloque pueda ocurrir durante el mismo ciclo del oscilador.
Memoria de programa
La memoria de programa está organizada en palabras de 14 bits y es del tipo FLASH. Esta memoria es de sólo lectura y únicamente se ejecutará el código contenido en ella. El vector de reset se encuentra en la posición 0000h y el de interrupciones en la 0004h, por lo que la memoria de usuario se extiende desde la dirección 0005h.
Memoria de Datos
|
|
La memoria de datos está dividida en Registros de Propósito General (GPR) y los Registros de Función Especiales (SFR).Los SFR controlan la operación del dispositivo. Para el estudio de esta memoria se suele dividir virtualmente la misma en dos bancos, tal y como podemos ver en el gráfico adjunto. De esta forma los registros GPR están agrupados entre 00h-0Bh y 80h-8Bh. Los registros de propósito general pueden ser accedidos desde 0Ch-2Fh o 8Ch-AFh, aunque se recomienda siempre el primer intervalo. Las zonas de memoria 30h-7Fh y B0h-FFh no son empleadas y devuelven 0 en lectura. El área de memoria de datos también contiene la memoria de datos EEPROM. Esta memoria no está directamente mapeada en la memoria de datos, pero está indirectamente mapeada. Esto es, un puntero de dirección indirecta especifica la dirección de la memoria de datos EEPROM para lectura/escritura. Los 64 bytes de memoria de datos EEPROM tienen el rango de dirección 00h-3Fh. Para acceder a la EEPROM en lectura y escritura empleamos dos registros, que forman el puntero de dirección indirecta: EEDATA
(0008h), para datos Para definir el modo de funcionamiento empleamos los registro especiales: EECON1
(0088h) |
Puertos de E/S
|
|
Disponemos de dos puertos de entrada y salida (E/S). Puerto A Posee 5 líneas (RA0 a RA4), en la que RA4 o T0CKI es compartida con la entrada para el temporizador 0 (TMR0). Puerto B Posee 8 líneas de E/S (RB0 a RB7), en la que la línea RB0 o INT es compartida con la entrada de interrupción externa. |
![]()
|
|
|---|
|
|
Para programar el microcontrolador hemos utilizado un lenguaje de programación de bajo nivel como es Ensamblador ya que es el que mejor se adapta a las características del PIC16F84. Con tan sólo 35 instrucciones somos capaces de dar todas las ordenes que queramos que haga el PIC. Estas órdenes tienen su base fundamental en operaciones aritmético-lógicas cuyos operandos son los Bits. En el programa del Temporizador digital hay varios puntos fuertes como por ejemplo: Tratamiento de Interrupciones (que se llama desde el programa principal) que va a ser la base del funcionamiento del mismo ya que es en esta parte dónde se controla que la cuenta regresiva se realice correctamente y sin saltos extraños. La cuenta por defecto empezará en '9.999' e irá disminuyendo de segundo en segundo hasta que llegue a '0' . Por supuesto, la cuenta se puede modificar para que empiece en cualquier otro número que deseemos en los correspondientes pulsadores. Rutina Start-Stop, también se llama desde el programa principal y va unida a un pulsador desde el cuál podremos iniciar o parar la cuenta en el momento que deseemos. Utilizamos una variable llamada start por la que comprobamos si se ha pulsado anteriormente y partir del dato que obtengamos se decide si debe de continuar la marcha o parar la cuenta. Para parar la cuenta deshabilitamos las interrupciones. Rutina Todo_0, en ella vamos comprobando que todas las unidades del temporizador han llegado a '0' y cuando se produce esa circunstancia deshabilitamos las interrupciones, al igual que en el caso anterior, para que la cuenta pare. Además de eso, desde esa rutina llamamos a su vez a otra que se va a encargar de avisar, ya sea óptica o acústicamente, de que la cuenta ha finalizado pudiendo iniciarla de nuevo cuando se desee. Otros punto que se llama desde el programa principal es la rutina que muestra los dígitos por los Displays de 7 segmentos por medio del Puerto B que no representa mayor complicación. Y por último, y no por ello menos importante, también vamos a controlar los distintos pulsadores que nos van a dar la oportunidad de modificar el tiempo a partir del cuál queremos que empiece la cuenta atrás. Eso lo hacemos con tres pulsadores: uno modifica las unidades de segundo, otro las decenas de segundo y otro las centenas de segundo y los millares de segundo al mismo tiempo, es decir, de 1.000 en 1.000. A continuación dejo el programa del Temporizador Digital para que os lo podáis guardar. También son de gran utilidad el Esquemático del circuito y el diagrama de Pistas. |
|
|
|---|
![]()
|
|
|
|
|
|
|
![]()
|
|
Para la realización de este proyecto ha sido necesario tener en cuenta alguna documentación de interés en relación a los componentes utilizados para su montaje: |
|
|
|---|
![]()