ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Propeller Clock Manual


Enviado por   •  7 de Junio de 2013  •  1.573 Palabras (7 Páginas)  •  2.387 Visitas

Página 1 de 7

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

;--------

; here? bigtick has rolled over to zero and one minute has passed.

; reload bigtick and set a flag for the main counter

;--------

movlw 0xFC ;234375 = 0x039387

movwf bigtick_dbl ;0 - 0x039387 = 0xFC6C79

movlw 0x6C

movwf bigtick_hi

movlw 0x79

movwf bigtick_lo

bsf flags,1 ;notify Keep_time

Bigtick_out

;--------

; done working, start restoring

;--------

swapf safe_s,w ;fetch status, reswap nibbles

movwf STATUS ;restore status

swapf safe_w,f ;swap nibbles in preparation

swapf safe_w,w ;for the swap restoration of w

bcf INTCON,2 ;clear interrupt flag before return

retfie ;return from interrupt

;--------

; CHARACTER LOOKUP TABLE

; ignore high bit. set=LED off, clear=LED on, bit0=bottom LED, bit6=top LED

;--------

Char_tbl

addwf PCL,f

dt 0xC1,0xBE,0xBE,0xBE,0xC1 ;"O"

dt 0xFF,0xDE,0x80,0xFE,0xFF ;"1"

dt 0xDE,0xBC,0xBA,0xB6,0xCE ;"2"

dt 0xBD,0xBE,0xAE,0x96,0xB9 ;"3"

dt 0xF3,0xEB,0xDB,0x80,0xFB ;"4"

dt 0x8D,0xAE,0xAE,0xAE,0xB1 ;"5"

dt 0xE1,0xD6,0xB6,0xB6,0xF9 ;"6"

dt 0xBF,0xB8,0xB7,0xAF,0x9F ;"7"

dt 0xC9,0xB6,0xB6,0xB6,0xC9 ;"8"

dt 0xCF,0xB6,0xB6,0xB5,0xC3 ;"9"

dt 0xFF,0xC9,0xC9,0xFF,0xFF ;":"

Char_tbl_end

;--------

; SUBROUTINES STARTING HERE

;--------

; clear important bits of ram

;--------

Ram_init movlw 0x07

movwf keys

movlw 0x12 ;why do clocks always start

movwf hours ;at 12:00 ?

clrf minutes

clrf dot_index

clrf digit_index

movlw 0xFC

movwf bigtick_dbl

retlw 0

;--------

; unused pins I am setting to be outputs

;--------

Port_init movlw 0x00 ;all output, b7=unused

tris PORTB ;on port b attached to LEDs

movlw b'00010111' ;port a has 5 pins. I need 4 inputs

;b0=minutes, b1=10mins, b2=hours

;b3=unused, b4=rotation index

tris PORTA ;on port a

retlw 0

;--------

; get timer-based interrupts going

;--------

...

Descargar como (para miembros actualizados) txt (15 Kb)
Leer 6 páginas más »
Disponible sólo en Clubensayos.com