Propeller Clock Manual
Enviado por Javo_lp • 7 de Junio de 2013 • 1.573 Palabras (7 Páginas) • 2.370 Visitas
Introducción
El proyecto consiste en un reloj digital de LED’S cuyo objetivo es mostrar la hora con una particularidad que lo distingue, girando los 360° grados.
La finalidad del reloj giratorio es lograr que las personas les llamé la tención por las funciones que tiene y observes la hora de una manera distinta.
Características Técnicas
Este proyecto se basa en un mecanismo giratorio que consta básicamente de un motor al cual va fijada a un protoboard que hace la función de hélice como si de un ventilador.
En el extremo del protoboard va una hilera vertical formada por siete LED’S. A través de la velocidad y de una adecuada programación del microcontrolador PIC16F648 que domina a los LED’S, además de todos sus componentes.
Requisitos de Reloj Digital
Para construir este reloj se necesitan los siguientes componentes:
- 2 capacitores de 33pF de cerámica.
- 4 capacitores 0.1µF de cerámica.
- 1 capacitor de 47µF a 50V
- 1 capacitor de 4700µF a 16V
- 7 LED’S (del color que gusten)
- 8 diodos 1N4001 1A
- 7 resistencias de 120Ω a 1/4W
- 7 resistencias 10kΩ a 1/4W
- 3 push button
- 1 PIC16F84A
- 1 Oscilador de cristal de 4 MHz
- 1 motor
- Cables
Diagrama
Conectamos los componentes de acuerdo al siguiente diagrama:
El PIC16F84A se tiene que configurar de la siguiente manera, a continuación se muestra la programación:
;--------
; mclock8.asm
; "The Propeller" mechanically scanned LED clock
; some changes since last version -
; modified table etc for compatiblility with 8th LED
; watchdog timer used to ensure startup
; Bob Blick February 12, 1997
; Licensed under the terms of the GNU General Public License, www.gnu.org
; No warranties expredded or implied
; Bob Blick February 18, 2002
;--------
list p=16C84
radix hex
include "p16c84.inc"
;--------
; remember to set blast-time options: OSC=regular xtal, WDT=ON
; timings all based on 4 MHz crystal
;--------
; are these equates already in the include file? someday I'll look.
;--------
w equ 0
f equ 1
;--------
; Start of available RAM.
;--------
cblock 0x0C
safe_w ;not really temp, used by interrupt svc
safe_s ;not really temp, used by interrupt svc
period_count ;incremented each interrupt
period_dup ;copy of period_count safe from interrupt
period_calc ;stable period after hysteresis calc.
flags ;b2=int b1=minute b4=edge
dot_index ;which column is being displayed
digit_index ;which digit is being displayed
hours ;in display format, not hex(01-12)
minutes ;00 to 59
bigtick_dbl ;incremented each interrupt
bigtick_hi
bigtick_lo
keys ;key value
scratch ;scratch value
tick ;used by delay
endc
;--------
; Start of ROM
;--------
org 0x00 ;Start of code space
goto Start
;--------
; INTERRUPT SERVICE ROUTINE
;--------
org 0x04 ;interrupt vector
Intsvc movwf safe_w ;save w
swapf STATUS,w ;swap status, w
movwf safe_s ;save status(nibble swap, remember)
;--------
; done saving, now start working
;--------
; clear watchdog timer to ensure startup
clrwdt
;
; increment period count
incf period_count,f
btfsc STATUS,Z ;zero set means overflow
decf period_count,f
; 234375 interrupts every minute. Increment the bigtick each time.
incf bigtick_lo,f
btfsc STATUS,Z
incf bigtick_hi,f
btfsc STATUS,Z
incfsz bigtick_dbl,f
goto Bigtick_out
...