Está en la página 1de 64

//DESCARGA GRATUITA //

"intao = 2 , nm e ro 6" /* SEPTIEM BRE 2009 */

de s arrol
l
o de una l
ibre ra e n C para aprove ch ar
todo e lpote ncialde e s tos dis pl
ays

una bibl
iote ca PALpara PIC18 m s un puado
de com pone nte s al
canz an para ge ne rar
s e al
e s de TVe n bl
anco y ne gro

Pre s e ntacin de l
a "7m a Com pe te ncia Nacionalde Robtica"

.s taff
nm e ro = 6;ao = 2;
Dire ccin, Re daccin y Corre ccin:
Arie lPal
az z e s i
Arge ntina
arie l
pal
az z e s i@ gm ail
.com

Cons e jo Editorial
:
M ario Sacco
Arge ntina
s e rvice .s e rvis ys te m @ gm ail
.com
Al
e jandro Cas anova
Arge ntina
inf.pic.s uk y@ l
ive .com .ar
Pabl
o
Es paa
q uick bas ic@ te rra.e s
Bruno Gavando
Francia
bruno.gavand@ ad-val
ore m .fr

De s carga Gratuita.
Es te conte nido s e rige por l
al
ice ncia
de Cre ative Com m ons Lice ncia Cre ative
Com m ons Atribucin-No Com e rcial
-Sin
O bras De rivadas 3.0

.indice

Dis e o y Diagram acin:


Lucas M artn Tre s e r
Arge ntina
l
m tre s e r@ gm ail
.com

M dul
o PIC TRAINER 28

PIC16F628A e n as s e m bl
e r (ii)
Libre ra de grficos para GLCD
Te cl
ado m atriciale n PSI
7m a Com pe te ncia de Robtica
Brjul
a digitalde pre cis in
Un PIC e n tu TV!

0x05
0x0B
0x18
0x23
0x26
0x29
0x2E

.e ditorial

Dos m e s e s h an pas ado de s de l


a s al
ida de lnm e ro cinco de l
a
, y talcom o prom e tim os , tie ne s e n tu pantal
l
a una nue va e dicin.
Es ta ve z h e m os s um ado col
aboradore s y te m as , com o para q ue cada ve z
m s l
e ctore s e ncue ntran al
guna articul
o q ue l
e s re s ul
te de util
idad.
Sin dudas , e l"aconte cim ie nto" m s im portante q ue tuvo l
ugar e n l
os m e s e s
q ue pas aron de s de l
a ul
tim a ve z q ue e s crib una e ditorialpara l
a re vis ta fue
l
a cada de ls e rvidor q ue al
oja a uControly e lforo. Son cos as q ue pas an: e l
h ardw are pue de fal
l
ar, y vaya s i l
o h ace !. Durante una s e m ana e s tuvim os
fue ra de l
ine a.
, de El
e ctrnica y Se guridad Digital
,
nue s tro w e bm as te r de cabe ce ra, h iz o m al
abare s para conve rtir una s e rie de
de s prol
ijos arch ivos de re s pal
do nue vam e nte e n una pgina w e b funcional
.
Es tar fue ra de l
ine a una s e m ana im pl
ica s e r dado de baja de l
os ndice s de
Googl
e , e ntre otras cos as . Pas am os de l
as 2600 vis itas diarias q ue te nam os
ante s de l cras h , a unas 100 e n l
os dos o tre s das pos te riore s a l
a
re s tauracin de lback up. Sin e m bargo, e n tre s s e m anas vol
vim os a te ne r e l
trafico us ual
. Quie ro aprove ch ar e s te e s pacio para agrade ce r l
a pacie ncia y
fide l
idad de nue s tros vis itante s .
Se guim os s um ando proye ctos y curs os . Com o s ie m pre , h ay varie dad de
conte nidos com o para q ue todos e ncue ntre n al
go de util
idad. Elq ue re cin
com ie nz a a e xpe rim e ntar con l
a el
e ctrnica y program acin de m icrocontrol
adore s e n l
e nguaje C s e guram e nte s e s e ntir m as cm odos con l
os dis pl
ays
GLCD (Graph ic LCD) l
ue go de l
e e r e larticul
o q ue l
e de dicam os e n e s te
nm e ro. Para q uie ne s gus tan de program ar e n BASIC, h e m os pre parado un
articul
o s obre com o ge s tionar te cl
ados m atricial
e s de s de e lBASIC de lPIC
Sim ul
ator IDE.
Se guim os con e le xce l
e nte curs o de program acin de PICs e n as s e m bl
e r,
e s pe cial
m e nte e nfocado a uno de l
os m ode l
os m as e xitos os de M icroch ip: e l
16F628A. Si e s ts s iguie ndo l
a s e rie de artcul
os de dicados a l
a cons truccin
de le ntre nador para PICs , te gus tar s abe r q ue ya te ne m os l
is to e lm dul
o
para PICs de 28 pine s . Es e lcom pl
e m e nto ide alpara e lcurs o de as s e m bl
e r!
Por ul
tim o, s i an no conoce s nue s tro foro aprove ch am os para re com e ndarte
q ue pas e s por l
. Es ta publ
icacin s ol
o re coge al
gunos de l
os te m as q ue al
l

s e tratan, y e lform ato PDF no pe rm ite ni l


a col
aboracin ni e linte rcam bio de
opinione s q ue tie ne l
ugar e n e lforo. Se guram e nte podrs apre nde r m uch o
m s vis itndol
o pe ridicam e nte y, s obre todo, ayudarnos a m e jorar l
a re vis ta.
H as ta e lprxim o nm e ro!
Foro uControl: h ttp://w w w .ucontrol
.com .ar/foros m f/inde x.ph p
El
e ctrnica y Se guridad Digital
: h ttp://w w w .m axis im onaz z i.com .ar

//pgina 0x04

m dul
o PIC TRAINER 28
Es te e s te rce r m dul
o de nue s tro e ntre nador. Su funcin e s l
a de s e rvir com o
s oporte a l
os m icrocontrol
adore s PIC de 28 pine s , com o e l16F874A. Aligualq ue
s us h e rm anos , e m pl
e a un PCB de una s ol
a cara, por l
o q ue s u m ontaje de be ra
s e r pos ibl
e an para aq ue l
l
os e s tudiante s o aficionados q ue e s tn com e nz ando
trans itar e s te apas ionante cam ino.
//por: Arie lPal
az z e s i //
arie l
pal
az z e s i@ gm ail
.com

Siguie ndo con l


a s e rie
de pl
acas de s tinadas a form ar
parte de nue s tro e ntre nador
m odul
ar PIC TRAINER, vam os
a ve r com o cons truir e lm dul
o q ue pe rm ite re al
iz ar e xpe rim e ntos con PICs de 28 pine s .
Dado q ue e ldis e o de lcircuito y l
a pl
aca de circuito im pre s o s e as e m e ja m uch o a l
as
dos ante riore s (PIC TRAINER
40 y PIC TRAINER 18), s ol
o
ve re m os s us puntos m s re l
e vante s , pudie ndo e l l
e ctor
cons ul
tar l
os otros artcul
os
de l
a s e rie para conoce r m s
de tal
l
e s inte re s ante s s obre e l
proye cto. Aligualq ue ante s ,
te ne m os
q ue
re com e ndar
fue rte m e nte l
a cons ul
ta de l
as
h ojas de datos de l
os ch ips
q ue q ue ram os pinch ar e n e s ta pl
aca, ya q ue a pe s ar de
q ue M icroch ip dis tribuye l
a
funcin de cada pin cas i s ie m pre de l
a m is m a form a, e s to
no s e garantiz a e n e l100% de
l
os m ode l
os .

//pgina 0x05

Elm dul
o cons is te bs icam e nte e n un z cal
o e ncargado de al
ojar alm icrocontrol
ador bajo prue ba, un m e canis m o
de RESET, un cone ctor q ue
pe rm ite l
a program acin de l
inte grado s in re tirarl
o de l
a
pl
aca, una s e rie de cone ctore s
IDC e ncargados de com unicar
al m dul
o con l
as pl
acas de
am pl
iacin pre vis tas (o con l
as
q ue e l l
e ctor de s arrol
l
e ), una
e tapa de al
im e ntacin y un par
de LEDs y pul
s adore s de s tinados a prove e r una m nim a
capacidad de e ntrada y s al
ida
onboard.
La al
im e ntacin de l m dul
o s e h a re s ue l
to m e diante
uno de l
os popul
are s re gul
adore s de vol
taje inte grados de l
a
s e rie LM 78xx. Se trata de un
LM 7805, q ue pue de proporcionar 5V pe rfe ctam e nte e s tabl
es
a partir de una fue nte de
corrie nte continua con una te ns in de e ntre 7.5 y 15V. Una bor-

//pgina 0x06

ne ra de dos tornil
l
os pe rm ite
al
im e ntar a l
a pl
aca, y un
diodo 1N4007 prote ge al
circuito de una cone xin con
l
a pol
aridad e q uivocada. Tal
com o re com ie nda l
a h oja de
datos
de l re gul
ador de
vol
taje , h e m os col
ocado l
os
dos conde ns adore s de 0.1
uF de rigor. Ade m s , un
conde ns ador e l
e ctrol
tico de
470uF/16V fil
tra e l poco
rippl
e
q ue
pue da h abe r
e s capado al fil
tro de l
a
fue nte e xte rna, y un diodo
LED, e n s e rie con un re s is tor
de 220V, s e e ncie nde para
indicarnos q ue e l circuito
e s t al
im e ntado.
Talcom o ocurra con
l
as pl
acas para m icrocontrol
adore s de 18 o 40 pine s , e n
l
ugar de util
iz ar un cris tal
com o os cil
ador de l PIC
h e m os col
ocado 3 de e l
l
os ,
tam bie n s e l
e ccionabl
es mediante una s e rie de jum pe rs
(ide ntificados com o JP4, JP5
y JP6). De e s ta m ane ra
podre m os probar nue s tros
program as o m icrocontrol
adore s a dife re nte s fre cue ncias de trabajo. Los dos
conde ns adore s
de
22pF
com pl
e tan e s ta parte de l
circuito. En cas o de util
iz ar
PICs q ue funcione n a m s
de 20 M H z , e s pos ibl
e q ue
h aya q ue cam biarl
os por
conde ns adore s de 15pF o
al
go m e nos . Re corde m os
q ue s i s e col
oca m s de un
jum pe r a l
a ve z e lm icrocontrol
ador no funcionar.
En cuanto a l
os cris tal
e s , h e m os e l
e gido (com o
pue de ve rs e e n e le s q ue m a
el
ctrico) val
ore s de 4M H z ,
8M H z y 20M H z , pe ro nada
im pide util
iz ar otros . Ell
e ctor
//pgina 0x07

pue de cam biarl


os a gus to.
En e lcas o util
iz ar l
os
pul
s adore s o LEDs e xis te nte s e n l
a pl
aca, para ingre s ar (o re pre s e ntar) datos a
(o de ) nue s tro program a, de be re m os m ove r l
os jum pe rs
JP1 y JP2, q ue pe rm ite n s e l
e ccionar s i cone ctam os al
PIC e lLED o e lpul
s ador.

Si de s e am os s e l
e ccionar l
os
pul
s adore s , de be m os re cordar q ue e s tos pone n e lpin
corre s pondie nte a 5V cuando s on pre s ionados . M ie ntras q ue e s tn e n re pos o, l
as
e ntradas s e m antie ne n a
GND a travs de s e ndos
re s is tore s de 10K .
Los cone ctore s s igue n

e n e le ntre nador.
La nica e xce pcin, o
de s vo de l
o norm al
, q ue
pue de s ve r e n e l diagram a
de l
os cone ctore s e s e n l
os
pine s
corre s pondie nte s
a
RB6 (CLO CK ) y RB7 (DATA), ya q ue pos e e n un
re s is tor de 220 oh m s e n
s e rie . Cum pl
e n con l
a funcin de pe rm itir program ar e l
PIC m e diante e l cone ctor
ICSP s in ne ce s idad de
re tirar e lcabl
e q ue cone cta
e le ntre nador con e lm odul
o
de turno. Por s upue s to, s i l
o
de s e as pue de s re e m pl
az ar
e s os dos re s is tore s por s e ndos pue nte s . Sol
o de be rs
q uitar e l cabl
e pl
ano a l
a
h ora de re program ar e lPIC.
Elpin 1, q ue corre s ponde al RESET e n l
os
m icrocontrol
adore s PIC de
28 pine s com patibl
e s con
e s te e ntre nador, e s ta unido a
un pul
s ador a travs de un
re s is tor de 470 oh m s y a + V
m e diante otro de 4.7K y un
diodo 1N4148. Al pre s ionar
e lpul
s ador, e lm icrocontrol
ador s e re s e te a. Durante e l
funcionam ie nto norm al de l
program a, e lpin e s ta a + V.
El diodo im pide l
os probl
em as q ue podran s urgir e ntre
l
as al
im e ntacione s de l m dul
o y de l program ador al
util
iz ar e lcone ctor ICSP.
l
as m is m as norm as q ue e xpl
icam os e n e lartcul
o principal
de nue s tra re vis ta nm e ro 4,
as q ue no de be ras te ne r
probl
e m as a l
a h ora de
de te rm inar l
a funcin de cada pin. Com o re gl
a ge ne ral
,
re cue rda q ue de l
os pine s
e xte riore s de cada cone ctor
//pgina 0x08

s ol
o s e e m pl
e a uno (+ V) y
l
os otros cuatro e s tn s in
cone ctar. De l
o cinco inte rior,
uno corre s ponde a GND y
l
os otros 4 a datos . De be rias
te ne r a m ano e lgrafico con
l
a funcin de cada pin a
m ano cuando de cidas h ace r
al
gn program a para cargar

Si ya h as m ontado
al
guno de nue s tros proye ctos , e s tars altanto de q ue
bas ta con de s cargar e l
arch ivo PDF corre s pondie nte
alPCB de s de nue s tra W e b,
y m e diante l
a form a q ue m s
te gus te (pue de s us ar e l

m todo de l
a pl
anch ae xpl
icado e n l
a re vis ta num e ro 1)
de be s trans fe rir e ldis e o a
un troz o de PCB virge n.
Lue go, l
o s um e rge s e n un
bao de cl
oruro frrico; y por
ul
tim o, l
ue go de una bue na
l
im pie z a, l
e h ace s l
os aguje ros .
Al
a h ora de s ol
dar l
os
com pone nte s te n e n cue nta
q ue por l
o ge ne ral re s ul
ta
m s s e ncil
l
o s i prim e ro col
ocas l
os q ue s on m s bajos ,
com o l
os pue nte s , diodos ,
z cal
os y re s is tore s ; y de jas
para e lfinall
os cone ctore s ,
re gul
ador de vol
taje y conde ns adore s . As e grate de
q ue , invol
untariam e nte , no
h ace s un pue nte e ntre dos
puntos de lcircuito.
Pre s ta e s pe cial ate ncin a l
a h ora de s ol
dar l
os
com pone nte s q ue tie ne n pol
aridad
, com o l
os diodos ,
LEDs y conde ns adore s e l
e ctrol
ticos . Tam bin e s im portante q ue col
oq ue s e lz cal
o
de s tinado al PIC e n l
a
dire ccin corre cta, ya q ue de
h ace rl
o m alpue de s confundirte cuando ins e rte s e lm icrocontrol
ador, dandol
o.

//pgina 0x09

Una
ve z
m ontado
todo, s in col
ocar e lPIC e n
su l
ugar, al
im e nta e lcircuito
con una te ns in de e ntre 7.5
y 12V. ElLED Pow e rde be ra e nce nde rs e . Si e s as ,
ve rifica con un m ul
tm e tro
q ue l
a te ns in e ntre l
os pine s 8 (GND) y 20 (Vcc) de l
z cal
o de l m icrocontrol
ador
s e a de 5V. Tam bin pue de s
ve rificar q ue e n l
os cone ctore s de e xpans in e s t pre s e nte e s a te ns in. Si todo
e s ta bie n, ya tie ne s l
is to tu
e ntre nador. Cas o contrario,
re pas a l
as s ol
daduras y pos icin de l
os com pone nte s .

Ya pode m os com e nz ar a e xpe rim e ntar con PICs


de 28 pine s . H ay m uch o
para apre nde r con e l
l
os y, s i
de cide s e ncarar l
a cons truccin de al
guno de l
os
m dul
os acce s orios (com o e l
m dul
o de 8 E/S publ
icado
e n e lnm e ro ante rior de l
a
re vis ta uControl
), podrs m ul
tipl
icar por 100 l
as pos ibil
idade s de e s te e ntre nador.

PIC16F628A e n as s e m bl
er
s e gunda parte
En e s ta s e gunda parte de ltutorialde program acin e n l
e nguaje as s e m bl
e r nos
introducire m os e n e lm ane jo de ldire ccionam ie nto indire cto y e n e lm undo de l
as
inte rrupcione s de lm icrocontrol
ador. Expl
icare m os q u s on, para q u s irve n, de
cuntas dis pone m os y s u im pl
e m e ntacin e n nue s tros program as . M anos a l
a
obra!
//por: Al
e jandro Cas anova //
inf.pic.s uk y@ l
ive .com .ar

m odo de
dire ccionam ie nto
indire cto s e
e m pl
e an dos
re gis tros
e s pe cial
es:el
FSR y e lINDF

//pgina 0x0B

En l
a program acin de
l
os m icrocontrol
adore s PIC l
a
m ayora de l
as ins truccione s
e m pl
e an dire ccionam ie nto dire cto, pe ro tam bin e s pos ibl
e q ue ope re n e n un m odo
de dire ccionam ie nto indire cto. Para e s te m odo s e e m pl
ean dos re gis tros e s pe cial
es:
e lFSR y e lINDF (e s te l
tim o
no e s un re gis tro fs ico).
El re gis tro FSR
se
e m pl
e a para s e al
ar o apuntar
a una dire ccin de l
a m e m oria
RAM cuyo conte nido pue de s e r
l
e do o e s crito de form a indire cta e m pl
e ando cual
q uie r ins truccin q ue us e com o ope rando al
re gis tro INDF. Es ta form a de
dire ccionam ie nto e s particul
arm e nte tilcuando s e m ane jan
tabl
as o arre gl
os de datos .
Util
iz are m os e l dire ccionam ie nto Indire cto para cre ar l
a
tabl
a de controlde lDis pl
ay de 7
s e gm e ntos y e n e s te cas o no
util
iz are m os e lpul
s ador, s ol
o se
h ar e lcontador autom tico de
0 a 9 . Aliniciar e lm icrocontrol
a-

dor cargare m os l
a tabl
a para
control
ar e l dis pl
ay de 7 s e gm e ntos e n l
a m e m oria de datos
(GPR) con dire ccionam ie nto indire cto.
Lue go, alre al
iz ar e lconte o l
e e re m os e lcdigo corre s pondie nte al
m ace nado y l
o e nviare m os alPO RTB.
Aq u util
iz am os e l re gis tro STATUS nue vam e nte , pe ro
para controlde l
as ope racione s
aritm ticas . Se guardar e lcdigo de 7 Se gm e ntos de l0 al9 ,
en l
os re gis tros 0x30 a 0x39 . Si
nue s tro contador nos dire cciona
e lre gis tro ubicado e n 0x3A, q ue
s e ria e l 10
, l
o re s e te am os y
dire ccionam os e l0
, s e a re gis tro 0x30. Es to l
o h ace m os
re al
iz ando l
a re s ta de lre gis tro
sel
e ccionado y 0x3A, FSR
0x3A, y s i e lre s ul
tado e s ce ro,
re s e te am os .
Elbit Z (Z e ro) de lre gis tro
STATUS, e s te indica s i una
ope racin l
gica o aritm tica
re al
iz ada da com o re s ul
tado
ce ro. Tam bin te ne m os e lbit C

;DIRECTO :
;De finim os re gis tro e n l
a m e m oria de datos .M iRe gis tro e q u 0x20
;Ubicado e n 0x20.;Cargam os dato e n e lre gis tro.m ovl
w 0x8A
m ovw fM iRe gis tro
;Le e m os dato de lre gis tro.m ovfw M iRe gis tro
m ovw fPO RTB

;
;M iRe gis tro = 0x8a.;M ove m os e lval
or q ue te nga M iRe gis tro a W .;Por e je m pl
o, l
o cargam os e n PO RTB.-

;INDIRECTO :
;Cargam os dato e n e lre gis tro.m ovl
w 0x20
m ovw fFSR
m ovl
w 0x8A
m ovw fINDF

;
;Dire ccionam os Re gis tro de datos ubicado e n 0x20.;
;Cargam os re gis tro dire ccionado con e lval
or 0x8A.-

;Le e m os dato e n e lre gis tro.m ovl


w 0x20
m ovw fFSR
m ovfw INDF
m ovw fPO RTB

;
; Dire ccionam os Re gis tro de datos ubicado e n 0x20.;M ove m os e lval
or q ue te nga e lre gis tro s e l
e ccionado a W .;Por e je m pl
o, l
o cargam os e n PO RTB.-

(Carry) (0), q ue e n ins truccione s aritm ticas s e activa


cuando s e
pre s e nta un
acarre o de s de e l bit m as
s ignificativo de lre s ul
tado, e l
bit DC (Digit Carry), q ue e n
ope racione s aritm ticas s e
activa s i ocurre acarre o e ntre
e lbit3 y bit4.

//pgina 0x0C

;**** Encabe z ado ****


Lis tp=16f628A
;l
is tdire ctive to de fine proce s s or
#incl
ude <p16f628A.inc> ;proce s s or s pe cific variabl
e de finitions
_ _ CO NFIG _ CP_ O FF & _ W DT_ O FF & _ BO DEN_ O N & _ PW RTE_ O N &
_ INTO SC_ O SC_ NO CLK O UT & _ DATA_ CP_ O FF & _ LVP_ O FF & _ M CLRE_ O N
;**** De finicin de variabl
e s ****
Contador
equ
0x20 ;Se l
e ccionam os pos icin e n l
a RAM (GPR) para guardar
Contador1 e q u
0x21 ;Re gis tro util
iz ado e n de m ora.Contador2 e q u
0x22 ;Re gis tro util
iz ado e n de m ora.Re s e t
org
0x00
;Aq u com ie nz a e lm icro.goto Inicio
;Sal
to a inicio de m i program a.;**** Program a principal****
;**** Configuracin de pue rtos ****
org
0x05
Inicio
bs f STATUS,RP0
;Pas am os de Banco 0 a Banco 1.cl
rf TRISB
;PO RTB com o s al
ida.bcf STATUS,RP0
;Pas o de lBanco 1 alBanco 0
cal
l Config_ Tabl
a ;Cargam os re gis tros con Cdigo de 7 s e gm e ntos .m ovfw INDF
;Le e m os cdigo de 7 Se gm e ntos para e lCERO .m ovw fPO RTB
;M os tram os e lCERO .;**** Bucl
e de vis ual
iz acin ****
Bucl
e
cal
l De m ora_ 19 0m s
;De m ora para vis ual
iz ar Dis pl
ay
incf FSR,1
;Incre m e ntam os Punte ro.m ovl
w 0x3A
;Cons ul
tam os s i s e pide cdigo para m os trar "10",
s ubw f FSR,0
;s i e s as re s e te am os FSR, apunta a 0x30--> "0".btfs s STATUS,Z
;Si Z =1 --> 0x3A - FSR = 0.goto M ue s tro_ Dis pl
ay
;No, m ue s tro dis pl
ay.m ovl
w 0x30
;Si re s e te o punte ro.m ovw fFSR
;
M ue s tro_ Dis pl
ay
m ovfw INDF
;Le o Re gis tro q ue apunta FSR.m ovw fPO RTB
;Lo cargo e n PO RTB.goto Bucl
e
;Continuo conte o.;**** De m ora ****
De m ora_ 19 0m s
m ovl
w 0xFF
;
m ovw fContador1
;Iniciam os contador1.Re pe ticion1
m ovl
w 0xFF
;
m ovw fContador2
;Iniciam os contador2
Re pe ticion2
de cfs z Contador2,1
;De cre m e nta Contador2 y s i e s 0 s al
e .goto Re pe ticion2
;Si no e s 0 re pe tim os cicl
o.de cfs z Contador1,1
;De cre m e nta Contador1.goto Re pe ticion1
;Si no e s ce ro re pe tim os cicl
o.re turn
;Re gre s a de l
a s ubrutina.//pgina 0x0D

;**** Cargam os tabl


a e n m e m oria ****
Config_ Tabl
a
m ovl
w 0x30 ;
m ovw fFSR ;Dire ccionam os e lre gis tro 0x30 de l
a m e m oria RAM (GPR).m ovl
w 0x3F ;Cargam os e lcdigo para m os trar e lCERO .m ovw fINDF ;Lo guardam os donde apunta FSR --> 0x30.;....................
incf FSR,1 ;Incre m e ntam os FSR, ah ora apunta a 0x31.m ovl
w 0x06 ;Cargam os cdigo para UNO .m ovw fINDF ;Lo guardam os donde apunta FSR.;....................
incf FSR,1 ;Incre m e ntam os FSR, ah ora apunta a 0x32.m ovl
w 0x5B ;Cargam os cdigo para DO S.m ovw fINDF ;Lo guardam os donde apunta FSR.;....................
incf FSR,1 ;Incre m e ntam os FSR, ah ora apunta a 0x33.m ovl
w 0x4F ;Cargam os cdigo para TRES.m ovw fINDF ;Lo guardam os donde apunta FSR.;....................
incf FSR,1 ;Incre m e ntam os FSR, ah ora apunta a 0x34.m ovl
w 0x66 ;Cargam os cdigo para CUATRO .m ovw fINDF ;Lo guardam os donde apunta FSR.;....................
incf FSR,1 ;Incre m e ntam os FSR, ah ora apunta a 0x35.m ovl
w 0x6D ;Cargam os cdigo para CINCO .m ovw fINDF ;Lo guardam os donde apunta FSR.;....................
incf FSR,1 ;Incre m e ntam os FSR, ah ora apunta a 0x36.m ovl
w 0x7D ;Cargam os cdigo para SEIS.m ovw fINDF ;Lo guardam os donde apunta FSR.;....................
incf FSR,1 ;Incre m e ntam os FSR, ah ora apunta a 0x37.m ovl
w 0x07 ;Cargam os cdigo para SIETE.m ovw fINDF ;Lo guardam os donde apunta FSR.;....................
incf FSR,1 ;Incre m e ntam os FSR, ah ora apunta a 0x38.m ovl
w 0xFF ;Cargam os cdigo para O CH O .m ovw fINDF ;Lo guardam os donde apunta FSR.;....................
incf FSR,1 ;Incre m e ntam os FSR, ah ora apunta a 0x39 .m ovl
w 0x6F ;Cargam os cdigo para NUEVE.m ovw fINDF ;Lo guardam os donde apunta FSR.;....................
m ovl
w 0x30 ;
m ovw fFSR ;Dire ccionam os Re gis tro de lCERO .re turn
;Cargado l
os val
ore s , re tornam os .;..................................................................
e nd
//pgina 0x0E

Una de l
as caracte rs ticas m s im portante de l
os
m icrocontrol
adore s
e s q ue
tie ne n l
a pos ibil
idad de m ane jar inte rrupcione s . Se trata
de un aconte cim ie nto q ue
h ace q ue e l m icro de je de
l
ado l
o q ue s e e ncue ntra
re al
iz ando, atie nda e s e s uce s o, re gre s e y contine con l
o
s uyo.
H ay dos tipos de inte rrupcione s pos ibl
e s , una e s
m e diante una accin e xte rna
(e s de cir por l
a activacin de
uno de s us pine s ), l
a otra e s
inte rna (por e je m pl
o cuando
ocurre e lde s bordam ie nto de
uno de s us re gis tros )
En e l16F628A h ay 10
fue nte s de inte rrupcin:

com paradore s anal


gicos .
Inte rrupcin provocada por
e l m dul
o CCP e n m odo
com paracin o captura.

Cada fue nte de inte rrupcin e s ta control


ada por
2 bits . Un bit l
ocalde inte rrupcione s (te rm inado e n E)
de pe rm is o o proh ibicin de
e je cucin. Si e s ta e n 0 bl
oq ue ar l
a s ol
icitud de inte rrupcin, y s i e s ta e n 1
pe rm itir l
a e je cucin. Un bit
q ue acta com o s e al
iz ador
(te rm inado e n F) e lcuale s
activado (pue s to a 1) s i s e
h a producido l
a inte rrupcin.
Ade m s e xis te n 2 bits
de controlgl
obal
, e lbit GIE
(INTCO N <7>) e lcuals i e s ta
de s activado bl
oq ue a todas
l
as s ol
icitude s de inte rrupcin y e lbit PEIE (INTCO N
Fl
anco as ce nde nte o de s <6>) q ue s e ra com o un
ce nde nte de l pin RB0/INT, s e gundo bit de controlgl
obal
q ue re gre s a alPIC de lm odo
de inte rrupcione s e xce ptuanSLEEP.
do a
de s bordam ie nto de l
Por l
os pine s RB4 a RB7, Tim e r0, de te ccin de fl
anco
configurados com o e ntrada y
e n RB0 y cam bio de e s tado
e n cas o de q ue al
guno de
de RB4-RB7.
el
l
os cam bie de e s tado.
Lo ante rior de s crito
Por de s bordam ie nto de l pue de e nte nde rs e obs e rvanre gis tro TM R0, cuando e s te
do e ldiagram a l
gico de l
a
re gis tro pas a de 255 a 0 e n
figura #2.
de cim al
.
Por de s bordam ie nto de l Nota: Todos e s tos bits al
re gis tro Tim e r1, cuando pas a
re s e te ars e o iniciars e e lm ide 65535 a 0 e n de cim al
.
cro s e e ncue ntran e n 0.
Por de s bordam ie nto de l
re gis tro TM R2, cuando e s te
re gis tro s upe ra e l val
or de l
re gis tro PR2.
Alcom pl
e tar l
a e s critura de
l
a EEPRO M de datos .
Cuando s e re cibe un dato
por USART.
Cuando s e com pl
e ta e l
e nvo de un dato por USART.
O curre un cam bio e n l
os
//pgina 0x0F

El bit GIE s e borra


autom ticam e nte cuando s e
re conoce una inte rrupcin
para e vitar q ue s e produz ca
otra m ie ntras s e e s t ate ndie ndo a l
a prim e ra y al
re tornar de l
a inte rrupcin
con l
a ins truccin RETFIE, e l
bit GIE s e vue l
ve a activar
ponindos e a 1. En cam bio
l
os bits s e al
iz adore s o bande ras de inte rrupcin de be n
s e r pue s tos a ce ro por e l
tratam ie nto de l
a inte rrupcin
re al
iz ada por e l us uario
(program ador).
Cuando una inte rrupcin e s t h abil
itada (s u bit
l
ocal de h abil
itacin e s t
activado, e lbit GIE e s t activado y/o de pe ndie ndo de lcas o e lbit PEIE e s t activado)
y ocurre e l e ve nto q ue l
a
activa, e l val
or de PC s e
guarda e n l
a PILA y e n s te
s e carga e l0x04 (nico ve ctor de inte rrupcin). Es a
partir de e s ta dire ccin q ue
s e de be col
ocar e ltratam ie nto de l
a inte rrupcin, de te c-

guie nte ins truccin.

b) M odo Captura: H a ocurrido una captura de TM R1


3. No Im pl
e m e ntado.
4. TXIF: Indicador de inte INTCO N. Re gis tro de
rrupcin de fin de trans l
e ctura y e s critura q ue
m is in USART.
Nota: e l nico re gis tro q ue
cont
ie
ne
v
arios
bit
s
de
s
e
a5. RCIF: Indicador de inte s e s al
va e n l
a PILA e s PC,
l
iz acin y h abil
itacin para e l rrupcin de l
l
e gada de datos
para pre s e rvar al
gn otro
de s bor-dam ie nto de l TM R0, USART.
re gis tro de be s e r e l propio
cam bio s obre e lpue rto RB e
6. CM IF: Indicador de inte program a de ate ncin a l
a
inte rrup-cin e xte rna e n l
a rrupcin por cam bio de e s tainte rrupcin e lq ue s e e ncarpat
il
l
a
RB0/
I
NT
.
do de al
guna de l
as s al
idas
gue de s al
var s u e s tado al
de l
os com paradore s .
inicio de l
a rutina y de de vol
0. RBIF: Indicador de inte - 7. EEIF: Indicador de inte ve rl
os alfinalde lm is m o.
rrupcin por cam bio de
rrupcin de fin de e s critura
e s tado RB4-RB7.
e e prom inte rna.
1. INTF: Indicador de inte rrupcin e xte rna.
PIE1. Re gis tro q ue
O curre un e ve nto q ue
os bits de h abil
itacin
s ol
icita l
a inte rrupcin, e lbit 2. T0IF: Indicador de inte - pos e e l
rrupcin por de s bordam ie nto individual para l
as inte rrupbande ra s e activa.
de Tim e r 0.
cione s de pe rifricos . Elbit
Si e lbit l
ocalde inte rrup3.
RBI
E:
H
abil
it
acin
de
int
e
PEIE de l re gis tro INTCO N
cione s e s ta activado, e l bit
rrupcin por cam bio de
de be s e r 1 para pe rm itir l
a
GIE activado y/o PEIE actie s tado RB4-RB7.
h abil
itacin
de
cual
q uie r
vado s e produce l
a inte rrup4. INTE: H abil
itacin de inte - inte rrupcin de pe rifrico.
cin.
rrupcin e xte rna.
Se de s activa GIE.
5. T0IE: H abil
itacin de inte - 0. TM R1IE: H abil
itacin de
Elval
or de lPC s e guarda
rrupcin por de s bordam ie nto inte rrupcin por de s bordaen l
a PILA, y PC s e carga
de Tim e r 0.
m ie nto de Tim e r 1.
con 0x04.
6. PEIE: H abil
itacin de inte - 1. TM R2IE: H abil
itacin de
Se e je cuta l
a rutina de
rrupcin de pe rifricos .
inte rrupcin por de s bordaate ncin de inte rrupcin cre a7.
GI
E:
H
abil
it
acin
ge
ne
ral
m ie nto de Tim e r 2.
da por e lus uario, guardando
de inte rrupcione s .
2. CCP1IE: H abil
itacin de
l
os re gis tros ne ce s arios y
inte rrupcin de l m dul
o de
re al
iz ando l
a bifurcacin coPIR1. Elre gis tro PIR1 Captura/Com paracin/PW M .
rre s pondie nte para l
a ate ncontie ne l
os bits de s e a- 3. No Im pl
e m e ntado.
cin de l e ve nto por m e dio
l
iz
acin
indiv
idual
de
l
as
4.
TXI
E:
H abil
itacin de
de lbitbande ra.
inte rrupcione s de pe rifricos .
inte rrupcin de fin de trans Al final
iz ar e l tratam ie nto
m is in USART.
de le ve nto, s e de vue l
ve n l
os
0. TM R1IF: Indicador de
5. RCIE: H abil
itacin de
val
ore s
de
l
os
re gis tros
l
e gada de
s al
vados y s e borran por inte rrupcin por de s borda- inte rrupcin de l
m
ie
nt
o
de
Tim
e
r
1.
dat
os
USART
.
s oftw are l
os bits bande ras .
1. TM R2IF: Indicador de
6. CM IE: H abil
itacin de
La rutina de ate ncin
inte rrupcin por de s borda- inte rrupcin por cam bio de
de be r te rm inar con una
e s tado de al
guna de l
as s ains truccin RETFIE, l
a cual m ie nto de Tim e r 2.
2. CCP1IF: Indicador de
l
idas de l
os com paradore s .
activa nue vam e nte e lbit GIE
int
e
rrupcin
de
l
m
dul
o
de
7.
EEI
E:
H abil
itacin de
(GIE=1) y l
ee l
a PILA para
Captura /Com paracin.
inte rrupcin de fin de e s crire s tabl
e ce r PC y continuar l
a
a) M odo Com parador: Coinci- tura e e prom inte rna.
e je cucin de lprogram a q ue
de ncia e ntre TM R1 y CCP1.
fue inte rrum pido e n l
a s iguitando por m e dio de l
os bits
bande ras cualde l
os e ve ntos h a ocurrido y actuar
s e gn s e a e lcas o.

//pgina 0x10

Prim e ro s e de be guardar e lconte nido de lre gis tro


W y STATUS. El probl
ema
de m ove r W a otro re gis tro
(h acie ndo us o de m ovf) e s
q ue e s ta ins truccin corrom pe l
a bande ra Z , m odificando
e lre gis tro de STATUS. Se gn l
a h oja de datos otorgada por M icroch ip, e n uno
de s us apartados re com ie nda una s e cue ncia de cdigo
q ue
pe rm ite
guardar y
re s taurar l
os re gis tros s in
m odificarl
os .

Para e lcontrolde l
a
inte rrupcin e xte rna s e ne ce s ita un bit adicionalINTEDG
(O PTIO N_ REG<6>) q ue s e l
e cciona e lfl
anco q ue ge ne rar l
a inte rrupcin. Si e s t
e n 1 s e ge ne ra por fl
anco
as ce nde nte y e n 0 por fl
anco
de s ce nde nte .
Para m os trar s u us o
h are m os un e je m pl
o s e ncil
l
o

//pgina 0x11

;**** Rutina de s e rvicio de Inte rrupcin ****


; Guardado de re gis tro W y STATUS.Inicio_ ISR
m ovw fW _ Te m p
;Copiam os W a un re gis tro
;Te m porario.s w apf STATUS, W
;Inve rtim os l
os nibl
e s de l
;re gis tro STATUS.m ovw fSTATUS_ Te m p
;Guardam os STATUS e n un
;re gis tro te m poral
.ISR
;Ate nde m os l
a inte rrupcin.;Re s tauram os l
os val
ore s de W y STATUS.Fin_ ISR
s w apf STATUS_ Te m p,W ;Inve rtim os l
o nibl
e s de
;STATUS_ Te m p.m ovw fSTATUS
s w apf W _ Te m p, f
;Inve rtim os l
os nibl
es yl
o
;guardam os e n e lm is m o
;re gis tro.s w apfW _ Te m p,W
;Inve rtim os l
os nibl
es
;nue vam e nte y l
o
;guardam os e n W .re tfie
;Sal
im os de inte rrupcin.;Los re gis tros W _ Te m p y STATUS_ Te m p s on re gis tros
;al
te rnativos para guardar te m porariam e nte s us val
ore s
;corre s pondie nte s .
q ue m ue s tre com o s e configura, e lcualalpre s ionar un
pul
s ador cone ctado a RB0
cam biar e l e s tado de un
LED cone ctado a RB1, para

el
l
o configuram os q ue l
a inte rrupcin de ge ne re por fl
anco as ce nde nte . En e s ta cas o
vam os a re al
iz ar e lguardado
de l
os re gis tro W y STATUS

;**** Encabe z ado ****


l
is t
p=16f628A ;l
is tdire ctive to de fine proce s s or
#incl
ude
<p16f628A.inc>
;proce s s or s pe cific variabl
e de finitions
_ _ CO NFIG _ CP_ O FF & _ W DT_ O FF & _ BO DEN_ O N & _ PW RTE_ O N &
_ INTO SC_ O SC_ NO CLK O UT & _ DATA_ CP_ O FF & _ LVP_ O FF & _ M CLRE_ O FF
;**** De finicin de variabl
e s ****
Contador1 e q u
0x20
Contador2 e q u
0x21
Pul
s ador
Le d

equ
equ

0
1

;pin RB0
;pin RB1

;**** Inicio de lM icro ****


Re s e t
org
0x00
;Aq u com ie nz a e lm icro.goto Inicio
;Sal
to a inicio de m i program a.;**** Ve ctor de Inte rrupcin ****
org
0x04
;Atie ndo Inte rrupcin.goto ISR
;**** Program a Principal****
;**** Configuracin de pue rtos ***
org
0x05
;O rige n de lcdigo de program a.Inicio
bs f STATUS,RP0
;Pas am os de Banco 0 a Banco 1.m ovl
w b'11111101' ;RB0 com o e ntrada y RB1 com o s al
ida.m ovw fTRISB
bs f O PTIO N_ REG,INTEDG ;Config. Por fl
anco As ce nde nte .bcf STATUS,RP0
;Pas o de lBanco 1 alBanco 0
bcf PO RTB,Le d ;ElLe d com ie nz a apagado.m ovl
w b'10010000' ;H abil
itam os GIE y INTE (inte rrupcin por RB0)
m ovw fINTCO N
;**** Bucl
e infinito ****
Bucl
e
nop
;
goto Bucl
e
;
;.............................................
;**** Rutina de s e rvicio de Inte rrupcin ****
;**** Inte rrupcin por RB0 ****
ISR
btfs s INTCO N,INTF
;Cons ul
tam os s i e s por RB0.re tfie
;No, Sal
im os de inte rrupcin.cal
l De m ora_ 20m s
;Com prue ba s i e s re bote .btfs s PO RTB,Pul
s ador
goto Fin_ ISR
;Es re bote , e ntonce s s al
im os .btfs s PO RTB,Le d
;Si e s ta pre ndido, l
o apagam os .goto Pre nde r_ Le d
bcf
PO RTB,Le d
;Apagam os Le d
goto Fin_ ISR
Pre nde r_ Le d
bs f
PO RTB,Le d
;Ence nde m os Le d
//pgina 0x12

Fin_ ISR
bcf
INTCO N,INTF
;Lim piam os bande ra.re tfie
;Sal
im os de inte rrupcin.;..........................................
;**** De m ora ****
De m ora_ 20m s
m ovl
w 0xFF
;
m ovw fContador1
;Iniciam os contador1.Re pe ticion1
m ovl
w 0x19
;
m ovw fContador2
;Iniciam os contador2
Re pe ticion2
de cfs z Contador2,1
;De cre m e nta Contador2 y s i e s 0 s al
e .goto Re pe ticion2
;Si no e s 0 re pe tim os cicl
o.de cfs z Contador1,1
;De cre m e nta Contador1.goto Re pe ticion1
;Si no e s ce ro re pe tim os cicl
o.re turn
;Re gre s a de l
a s ubrutina.e nd
para e je m pl
ificar e l m todo
pe ro no e s ne ce s ario ya q ue
e lm icrocontrol
ador s ol
o espe ra a q ue ocurra l
a inte rrupcin.

Com o e ltitul
o l
o indica e s ta inte rrupcin s e ge ne ra cuando s e pre s e nta un
cam bio de nive le n cual
q uie ra de l
os pine s RB4 a RB7
configurados com o e ntradas .
Aprove ch are m os e s ta
inte rrupcin para de te ctar
cuando s e h a pre s ionado
una te cl
a de un te cl
ado m atricial
. Un te cl
ado m atriciale s
un s im pl
e arre gl
o de botone s
cone ctados e n fil
as y col
um nas , de m odo q ue s e pue de n
l
e e r varios botone s con e l
m nim o nm e ro de pine s
re q ue ridos . Un te cl
ado m atricial43 s ol
am e nte ocupa 4
l
ne as de un pue rto para l
as
fil
as y otras 3 l
ne as para l
as
col
um nas , de e s te m odo s e
pue de n l
e e r 12 te cl
as util
i//pgina 0x13

util
iz ando s ol
am e nte 7 l
ne as
de un m icrocontrol
ador.
Configurare m os RB0
a RB3 com o s al
ida y l
as col
ocare m os a nive lbajo. RB4 y
RB7 configuradas com o e ntradas y h abil
itare m os l
as
re s is te ncias pul
l
-up inte rnas

de l pue rto
B,
RPBU
(O PTIO N_ REG<7>) a 0, e ntonce s e n e s tado norm al(s in
pre s in de te cl
as ) e s tarn a
nive l al
to. Al pre s ionar una
te cl
a s e cone cta una fil
a con
una col
um na, s e produce un
cam bio de nive le n al
guna de

l
as col
um nas (de nive lal
to a
bajo), y s e ge ne ra l
a inte rrupcin. Para de te ctar q ue te cl
a
s e h a pre s ionado, s e col
ocan RB0 a RB3 a nive lal
to,
y s e pas an a nive lbajo de a
una por ve z , de te ctando s i
s e produce al
gn cam bio e n
l
as col
um nas . Se util
iz a una
variabl
e q ue s e incre m e nta
con l
a cue nta de l
as te cl
as
re vis adas , de e s te m odo al
de te ctar una pul
s acin e l
val
or de l
a cue nta s e r e l
val
or de l
a te cl
a pre s ionada.
Si al final no s e pre s ion
ninguna te cl
a l
a variabl
e se
pone a ce ro y l
a cue nta
vue l
ve a com e nz ar.
Al
goritm o de de te ccin de te cl
a pul
s ada: alocurrir una inte rrupcin s e pue de de te rm inar q ue col
um na
h a cam biado de e s tado, pe ro
no l
a fil
a. Entonce s para de te ctarl
a ire m os col
ocando a
nive lbajo s ol
o una fil
a por
ve z , y te s te are m os l
as col
um nas , alde te ctar un nive lbajo
e n al
guna de te rm inare m os
m e diante l
a cue nta de te cl
as
te s te adas e xactam e nte cual
h a s ido.
En nue s tro e je m pl
o re //pgina 0x14

pre s e ntare m os
l
a
te cl
a te cl
a pre s ionada.
pre s ionada e n form a binaria
con LEDs cone ctados al Nota: La bande ra RBIF de be
pue rto A.
pone rs e a ce ro por s oftw are
pe ro ade m s de be re al
iz ars e
pre viam e nte una ope racin
de l
e ctura (o e s critura) de l
Te ne r e n cue nta q ue
Pue rto B para q ue de je de
tam bin con l
a variabl
e
dars e l
a dis cre pancia e ntre
NTe cl
a (Num e ro de Te cl
a e l val
or actual y e l val
or
pre s ionada) s e pue de util
iz ar l
e do, y no ge ne re una nue va
com o e ntrada a una tabl
a inte rrupcin.
para codificar e n ASCK II l
a
m ovfw NTe cl
a
cal
l Tabl
a_ TM atricial
;Codificacin de Te cl
a pre s ionada:
Tabl
a_ TM atricial
addw fPCL,1
DT
1,2, 3, 4, 5, 6, 7, 8, 9 , *, 0, #

;**** Encabe z ado ****


l
is tp=16f628A
;l
is tdire ctive to de fine proce s s or
#incl
ude <p16f628A.inc> ;proce s s or s pe cific variabl
e de finitions
_ _ CO NFIG _ CP_ O FF & _ W DT_ O FF & _ BO DEN_ O N & _ PW RTE_ O N &
_ INTO SC_ O SC_ NO CLK O UT & _ DATA_ CP_ O FF & _ LVP_ O FF & _ M CLRE_ O N
;**** De finicin de variabl
e s ****
NTe cl
a
e q u 0x20
;Se l
e ccionam os pos icin e n l
a m e m oria RAM (GPR)
para guardar Num e ro de Te cl
a pre s ionada
;**** Inicio de lM icro ****
Re s e t
org
0x00
;Aq u com ie nz a e lm icro.goto Inicio
;Sal
to a inicio de m i program a.;**** Ve ctor de Inte rrupcin ****
org
0x04
;Atie ndo Inte rrupcin.goto ISR
;**** Program a principal****
;**** Configuracin de pue rtos ****
org
0x05
Inicio
m ovl
w 0x07
;De s h abil
itam os Com paradore s anal
gicos
m ovw fCM CO N
bs f STATUS,RP0
;Pas am os de Banco 0 a Banco 1.cl
rf TRISA
;PO RTA com o Sal
ida.m ovl
w b'11110000'
;Nibl
e bajo com o Sal
ida y Nibl
e al
to com o Entrada.m ovw fTRISB
bcf O PTIO N_ REG,RBPU
;H abil
itam os re s is te ncias Pul
l
-Up.
bcf STATUS,RP0
;Pas o de lBanco 1 alBanco 0
cl
rf PO RTB
;Elpue rto q ue dar 11110000.cl
rf PO RTA
bcf INTCO N,RBIF
;Borram os bande ra de Inte rrupcin.m ovl
w b'10001000'
;H abil
itam os GIE y RBIE (inte rrupcin RB4 a RB7)
m ovw fINTCO N
cl
rf NTe cl
a
;**** Bucl
e ****
Bucl
e
nop
goto Bucl
e
;**** Rutina de s e rvicio de Inte rrupcin ****
;**** Inte rrupcin por TM R0 ****
ISR
btfs s INTCO N,RBIF
;Cons ul
tam os s i e s por RB4 a RB7.re tfie
;No, e ntonce s s al
im os de inte rrupcin.cal
l Te cl
a_ Pre s ionada ;Se de te cta q ue te cl
a fue pre s ionada
m ovfw NTe cl
a
;Te cl
a_ Pre s ionada l
a de vue l
ve e n NTe cl
a.m ovw fPO RTA
;M os tram os e n dis pl
ay te cl
a Pre s ionada.cl
rf PO RTB
;De jam os Pue rto para re cibir otra te cl
a.bcf INTCO N,RBIF
;borram os bande ra.re tfie
;Sal
im os de inte rrupcin.;**** Rutinas *****
//pgina 0x15

;Ras tre am os Te cl
a pre s ionada.Te cl
a_ Pre s ionada
cl
rf NTe cl
a
;Borra Num e ro de Te cl
a y
incf NTe cl
a,1
; pre para NTe cl
a para prim e r cdigo.
m ovl
w b'00001110'
;Saca 0 a l
a prim e ra fil
a
m ovw fPO RTB
; de l
a Pue rta B
nop
;Para e s tabil
iz acin de s e al
.
Te s t_ Col
um nas
btfs s PO RTB,4
;Prim e ra col
um na = 0?
goto Sue l
ta_ te cl
a
;Sal
e s i s e h a pul
s ado te cl
a.
incf NTe cl
a,1
;No e s , incre m e nta n te cl
a.
btfs s PO RTB,5
;Se gunda col
um na = 0?
goto Sue l
ta_ te cl
a
;Sal
e s i s e h a pul
s ado te cl
a.
incf NTe cl
a,1
;No e s , incre m e nta n te cl
a.
btfs s PO RTB,6
;Te rce ra col
um na = 0?
goto Sue l
ta_ te cl
a
;Sal
e s i s e h a pul
s ado te cl
a.
incf NTe cl
a,1
;No e s , incre m e nta n te cl
a.
;
En e s te cas o no s e Us a te cl
ado 3x4.;
btfs s PO RTB,7
;Cuarta col
um na = 0
;
goto Sue l
ta_ te cl
a
;Sal
e s i s e h a pul
s ado te cl
a.
;
incf NTe cl
a,1
;No e s , incre m e nta n Te cl
a.
Ul
tim a_ te cl
a
btfs s
goto
bs f
rl
f
goto

PO RTB,3
;Ya s e re vis aron todas l
as fil
as ?
Nul
l
_ te cl
a
;Si, Fal
s a al
arm a, no s e h a pre s ionado ninguna.STATUS,C
;No, s e guim os con l
a s iguie nte . Pone a 1 BitC
PO RTB,1
; as l
a Fil
a 1 pas a a 1 con l
a rotacin a iz q da.
Te s t_ Col
um nas
;Se guim os te s te ando.

Nul
l
_ te cl
a
cl
rf NTe cl
a
re turn

;Col
oca variabl
e Te cl
a a 0 (Ninguna)
;re gre s a.

Sue l
ta_ te cl
a
;Ah ora s e e s pe ra a q ue l
a te cl
a s e a s ol
tada para e vitar re bote s y re activacione s de te cl
a.
Es pe ra1
btfs s PO RTB,4
;Si no s e s ue l
ta l
a te cl
a FILA 1
goto Es pe ra1
; vue l
ve a e s pe rar.
Es pe ra2
btfs s PO RTB,5
;Si no s e s ue l
ta l
a te cl
a FILA 2
goto Es pe ra2
; vue l
ve a e s pe rar.
Es pe ra3
btfs s PO RTB,6
;Si no s e s ue l
ta l
a te cl
a FILA 3
goto Es pe ra3
; vue l
ve a e s pe rar.
Es pe ra4
btfs s PO RTB,7
;Si no s e s ue l
ta l
a te cl
a FILA 4
goto Es pe ra4
; vue l
ve a e s pe rar.
re turn
;vue l
ve alprogram a q ue h iz o l
al
l
am ada.
;..........................................
e nd
//pgina 0x16

l
ibre ra de grficos
para GLCD e n C
Cuando ne ce s itam os util
iz ar un dis pl
ay LCD grfico (GLCD) nos e ncontram os
q ue no s ie m pre te ne m os a m ano l
as funcione s ne ce s arias para dibujar form as o
te xto s obre l
. Al
gunos com pil
adore s dis pone n de l
ibre rias ale fe cto, pe ro m uch as
ve ce s tie ne n re s triccione s l
e gal
e s s obre e lcdigo ge ne rado. H oy te m os tram os
com o e s cribir tus propias rutinas , y a adaptarl
as a tus ne ce s idade s .
//por: Arie lPal
az z e s i //
arie l
pal
az z e s i@ gm ail
.com

Elcom pil
ador CCS proporciona una l
ibre ra capaz
de dibujar prim itivas s obre varios m ode l
os de dis pl
ays LCD
grficos o GLCD (por Graph ic
Liq uid Cris tal Dis pl
ay). H ay
ve rs ione s de e s ta l
ibre ra para pantal
l
as con dife re nte s
control
adore s e m be bidos , com o e lSam s ung K S0108 o e l
Tos h iba T69 63.
Pe ro a pe s ar de q ue pue de n dis tribuirs e l
ibre m e nte l
os
trabajos q ue h agam os con e l
l
as , no pue de n com partirs e l
os
program as q ue l
as conte ngan, a
m e nos q ue l
a pe rs ona q ue l
os
re cibe tam bin s e a un us uario
re gis trado de CCS. Es to l
im ita
m uch o s u us o con fine s e ducativos . De h e ch o, s i q uis is e m os publ
icar e n l
a re vis ta
uControl un program a q ue
trafiq ue al
go e n un GLCD,
e s taram os viol
ando l
a l
ice ncia,
ya q ue e s m uy pos ibl
e q ue
m uch os de l
os nue s tros l
e ctore s
no h ayan com prado e lcom pil
ador.
//pgina 0x18

Es por e l
l
o q ue nos h e m os de cidido a e s cribir una l
ibre ra propia, q ue us are m os de
ah ora e n m s para nue s tros proye ctos . Las funcione s q ue pos e e e s ta l
ibre ra s on l
as s iguie nte s :
GLCD_ l
im piar(col
or)
GLCD_ inicial
iz a(m odo)
GLCD_ punto(x, y, col
or)
GLCD_ l
ine a(x1, y1, x2, y2,
col
or)
GLCD_ re ctangul
o(x1, y1, x2,
y2, col
or)
GLCD_ caja(x1, y1, x2, y2,
col
or)
GLCD_ circul
o(x1, y1, radio,
col
or)
Se as um e q ue l
as cone xione s e ntre e lPIC y e lGLCD
s on l
as s iguie nte s :

PIN
1
2
6
7
8
9 ...16
17

LCD
CS1
CS1
R/S
R/W
E
D0...D7
RESET

PIC
B1
B0
B2
B3
B4
D0...D7
B5

Por s upue s to, l


os pine s util
iz ados pue de n cam biars e m odificando l
as s e nte ncias DEFINE q ue s e e ncue ntran alprincipio de l
al
ibre ra.
//Pine s a us ar
#de fine GLCD_ CS1
PIN_ E2
#de fine GLCD_ CS2
PIN_ E1
#de fine GLCD_ DI
PIN_ C3
#de fine GLCD_ RW
PIN_ C2
#de fine GLCD_ E
PIN_ C1
#de fine GLCD_ RESET
PIN_ E0

//-------------------------------------------------------------------------------//GLCD_ inicial
iz a(m odo) - Es ta funcin inicial
iz a e lLCD.
//-------------------------------------------------------------------------------void GLCD_ inicial
iz a(int1 m odo)
{
//Pone l
os pine s de controle n e le s tado corre cto.
output_ h igh (GLCD_ RESET);
output_ l
ow (GLCD_ E);
output_ l
ow (GLCD_ CS1);
output_ l
ow (GLCD_ CS2);
output_ l
ow (GLCD_ DI); //M odo ins truccin
//Envio datos de inicial
iz acin ----------------------GLCD_ e nviaBYTE(GLCD_ l
ado_ CS1, 0xC0);
GLCD_ e nviaBYTE(GLCD_ l
ado_ CS2, 0xC0);
GLCD_ e nviaBYTE(GLCD_ l
ado_ CS1, 0x40);
GLCD_ e nviaBYTE(GLCD_ l
ado_ CS2, 0x40);
GLCD_ e nviaBYTE(GLCD_ l
ado_ CS1, 0xB8);
GLCD_ e nviaBYTE(GLCD_ l
ado_ CS2, 0xB8);
//Si m odo = 1 inicial
iz a e nce ndido. Sino, apagado.
if(m odo == 1)
{ GLCD_ e nviaBYTE(GLCD_ l
ado_ CS1, 0x3F);
//Encie ndo e lGLCD
GLCD_ e nviaBYTE(GLCD_ l
ado_ CS2, 0x3F);}
el
se {
GLCD_ e nviaBYTE(GLCD_ l
ado_ CS1, 0x3E);
//Apago e lGLCD
GLCD_ e nviaBYTE(GLCD_ l
ado_ CS2, 0x3E);}
//Borro l
a pantal
l
a
GLCD_ l
im piar(0);

Com e nce m os a anal


iz ar cada una de l
as funcione s im pl
e m e ntadas :

Es ta e s l
a prim e r funcin de
l
a l
ibre ra q ue de be l
l
am ar
nue s tro program a. Se e ncarga de inicial
iz ar e lGLCD, y
e lparm e tro "m odo" de te rm ina s i e s tar e nce ndido (s i
re cibe un "1") o apagado (s i
re cibe un "0"). Es im portante
s abe r q ue e s ta funcin ade m s de inicial
iz ar e l GLCD
borra l
a pantal
l
a.

"pinta" toda l
a pantal
l
a con
uno u otro col
or. Si re cibe com o parm e tro un "1", l
a
pintar com pl
e tam e nte de
ne gro. Si re cibe un "0", l
a
l
im piar por com pl
e to. Su
funcionam ie nto tam bin e s
m uy s e ncil
l
o, y s e "apoya"
e n GLCD_ e nvia BYTE() para
e s cribir e n e lGLCD. Re corre
am bas m itade s de l GLCD,
pgina por pgina, de arriba
h acia
abajo, e s cribie ndo
"0x00" o "0xFF" s e gn s e h aya e l
e gido pintar o borrar.

Es ta e s

l
a funcin q ue

//pgina 0x19

//--------------------------------------------------------------------------------//GLCD_ l
im piar(col
or) - Lim pia e lGLCD (pinta l
a pantal
l
a)
//--------------------------------------------------------------------------------void GLCD_ l
im piar(int1 col
or)
{
int8 i, j;
//Re corre l
as 8 paginas (ve rtical
)
for(i = 0;i < 8;+ + i)
{
output_ l
ow (GLCD_ DI); //M odo ins truccin
//Com ie nz o, e n cada pgina, de s de l
a dire ccin 0
GLCD_ e nviaBYTE(GLCD_ l
ado_ CS1, 0b01000000);
GLCD_ e nviaBYTE(GLCD_ l
ado_ CS2, 0b01000000);
//Se l
e cciono l
a dire ccion de ntro de l
a pagina
GLCD_ e nviaBYTE(GLCD_ l
ado_ CS1, i | 0b10111000);
GLCD_ e nviaBYTE(GLCD_ l
ado_ CS2, i | 0b10111000);

Es ta e s l
a "prim itiva grfica"
indis pe ns abl
e . A partir de
GLCD_ punto(x, y, col
or) e s cribire m os todas l
as funcione s re s tante s . Los parm e tros q ue re cibe GLCD_ punto(x, y, col
or) s on:
x: un byte , e s l
a coorde nada
"x" (h oriz ontal
), con val
ore s
vl
idos de 0 a 127 (iz q uie rda
a de re ch a).
y: un byte , e s l
a coorde nada
"y" (ve rtical
), con val
ore s vl
idos de 0 a 63 (arriba a abajo).
col
or: un bit, "0" = apagado,
"1" = e nce ndido.

output_ h igh (GLCD_ DI); //M odo datos


//Re corre l
as dos m itade s (h oriz ontal
es)
for(j= 0;j< 64;+ + j)
{ GLCD_ e nviaBYTE(GLCD_ l
ado_ CS1, 0xFF * col
or);
//Encie nde /apaga pxe l
es
GLCD_ e nviaBYTE(GLCD_ l
ado_ CS2, 0xFF * col
or);
//Encie nde /apaga pxe l
es
}
}
}

#incl
ude <16F877A.h >
#de vice *=16
#incl
ude <s tdl
ib.h >
#fus e s H S,NO W DT,NO LVP
#USE DELAY (CLO CK =20000000)
#incl
ude <GLCD_ K 0108.C>
//-------Com ie nz a e lprogram a ----------------------void m ain()
{
//Inicial
iz o e lGLCD, e nce ndido.
GLCD_ inicial
iz a(1);
GLCD_ l
im piar(1); //Lo pinto com pl
e tam e nte
de ne gro
de l
ay_ m s (2000); //Es pe ro dos s e gundos y...
GLCD_ l
im piar(0); //...l
ol
im pio.
}
//pgina 0x1A

La l
ine a tam bin re s ul
ta indis pe ns abl
e a l
a h ora de dibujar un grfico. Los parm e tros q ue re cibe GLCD_ l
ine a(x1, y1, x2, y2, col
or) s on:
x1: un byte , e s l
a coorde nada "x" (h oriz ontal
) de lprim e r
e xtre m o de l
a l
ine a, con
val
ore s vl
idos de 0 a 127
(iz q uie rda a de re ch a).
y1: un byte , e s l
a coorde nada "y" (ve rtical
) de l prim e r
e xtre m o de l
a l
ine a, con
val
ore s vl
idos de 0 a 63 (arriba a abajo).
x2: un byte , e s l
a coorde nada "x" (h oriz ontal
) de ls e gundo e xtre m o de l
a l
ine a, con
val
ore s vl
idos de 0 a 127
(iz q uie rda a de re ch a).
y2: un byte , e s l
a coorde nada "y" (ve rtical
) de ls e gundo
e xtre m o de l
al
ine a, con val
ore s vl
idos de 0 a 63 (arriba
a abajo).
col
or: un bit, "0" = l
ine a e n
bl
anco, "1" = l
ine a e n ne gro.

//----------------------------------------------------------------------//GLCD_ punto(x, y, col


or) - Dibuja un pixe l
//----------------------------------------------------------------------void GLCD_ punto(int8 x, int8 y, int1 col
or)
{
BYTE dato;
int1 l
ado = GLCD_ l
ado_ CS1; //Lado e n q ue voy a dibujar.
if(x > 63)
//Ve o s i cae de lotro l
ado
{ x -= 64;
l
ado = GLCD_ l
ado_ CS2;}
output_ l
ow (GLCD_ DI); //M odo ins truccin
bit_ cl
e ar(x,7);
//Lim pio bitM SB...
bit_ s e t(x,6);
//...y pongo e lbit6 e n 1
GLCD_ e nviaBYTE(l
ado, x);
//Envio l
a dire ccin de l
a coorde nada X
//Cal
cul
o e n q ue pagina de l
as 8 cae ...
GLCD_ e nviaBYTE(l
ado, (y/8 & 0xBF) | 0xB8);
output_ h igh (GLCD_ DI); //...y pas o a M odo datos
//Se ne ce s itan dos l
e cturas para q ue de vue l
va e ldato e n l
a
//nue va dire ccin
GLCD_ l
e e BYTE(l
ado);
dato = GLCD_ l
e e BYTE(l
ado);
//De acue rdo alval
or de col
or...
if(col
or == 1) bit_ s e t(dato, y% 8); //Encie ndo e lpxe l
el
se
bit_ cl
e ar(dato, y% 8); //apago e lpxe l

Eltraz ado de l
ine as s e bas a
e n e lAl
goritm o de Bre s e nh am .

output_ l
ow (GLCD_ DI);
//M odo ins truccin
GLCD_ e nviaBYTE(l
ado, x); //Fijo e ll
ado a e s cribir,
output_ h igh (GLCD_ DI);
//pongo e n M odo Datos y....
GLCD_ e nviaBYTE(l
ado, dato); //dibujo e lpxe l
}

#incl
ude <16F877A.h >
#de vice *=16
#incl
ude <s tdl
ib.h >
#fus e s H S,NO W DT,NO LVP

GLCD_ inicial
iz a(1);
GLCD, e nce ndido.
GLCD_ l
im piar(0);

//pgina 0x1B

//Lim pio l
a pantal
l
a

//Pinto puntos e n e lGLCD


for(i=0;i<=127;i=i+ 8){
for(j=0;j<=63;j=j+ 8){
GLCD_ punto(i,j,1);//Pinto e lpunto
}
}

#USE DELAY (CLO CK =20000000)


#incl
ude <GLCD_ K 0108.C>
//-------Com ie nz a e lprogram a ------------------void m ain()
{
inti,j;

//Inicial
iz o e l

Los re ctngul
os de dibujan
(inte rnam e nte ) m e diante cuatro l
l
am adas a l
a funcin
GLCD_ l
ine a.
Los parm e tros q ue re cibe GLCD_ re ctangul
o(x1, y1, x2, y2, col
or)
s on:

//-------------------------------------------------------------------------------//Dibuja una l
ine a de s de (x1,y1) a (x2,y2) de col
or (0 o 1)
//-------------------------------------------------------------------------------void GLCD_ l
ine a(intx1, inty1, intx2, inty2, int1 col
or)
{
//De cl
aro variabl
e s ------------------s igne d int x, y, incre m e nto_ x, incre m e nto_ y, dis tancia_ x,
dis tancia_ y;
s igne d l
ong P;
inti;

x1: un byte , e s l
a coorde na//Cal
cul
ol
as dife re ncias e ntre l
as coorde nadas de orige n y
da "x" (h oriz ontal
) de l
a esq uina s upe rior iz q uie rda de l de s tino
dis tancia_ x = abs ((s igne d int)(x2 - x1));
re ctngul
o, con val
ore s vl
idis tancia_ y = abs ((s igne d int)(y2 - y1));
dos de 0 a 127 (iz q uie rda a
de re ch a).
//Inicial
iz o x e y con l
as coorde nadas de orige n
y1: un byte , e s l
a coorde nax = x1;
da "y" (ve rtical
) de l
a e s q uina
y = y1;
s upe rior iz q uie rda de lre ctngul
o, con val
ore s vl
idos de
//Cal
cul
o e ls e ntido de l
os incre m e ntos (pos itivos o
0 a 63 (arriba a abajo).
ne gativos )
x2: un byte , e s l
a coorde na//e n funcin de l
a pos icin de lorige n y e lde s tino
da "x" (h oriz ontal
) de l
a esif(x1 > x2) incre m e nto_ x = -1;e l
s e incre m e nto_ x = 1;
q uina infe rior de re ch a de l
if(y1 > y2) incre m e nto_ y = -1;e l
s e incre m e nto_ y = 1;
re ctngul
o, con val
ore s vl
idos de 0 a 127 (iz q uie rda a
//Si l
a dis tancia h oriz ontale s m ayor a l
a ve rtical
...
de re ch a).
if(dis tancia_ x >= dis tancia_ y)
y2: un byte , e s l
a coorde na{ P = 2 * dis tancia_ y - dis tancia_ x;
da "y" (ve rtical
) de l
a e s q uina
for(i=0;i<=dis tancia_ x;+ + i)
infe rior de re ch a de l re ctn{
gul
o, con val
ore s vl
idos de
GLCD_ punto(x, y, col
or);
0 a 63 (arriba a abajo).
col
or: un bit, "0" = re ctnguif(P < 0)
l
o e n bl
anco, "1" = re ctngu{ P + = 2 * dis tancia_ y;
l
o e n ne gro.
x + = incre m e nto_ x;}
el
se
{ P + = 2*dis tancia_ y - 2*dis tancia_ x;
x + = incre m e nto_ x;
Las "cajas " s on re ctngul
os
y + = incre m e nto_ y;}
pintados e n s u inte rior con e l
}
m is m o col
or q ue e lborde e x}
te rior. Tam bin s e dibujan (inte rnam e nte ) m e diante l
l
am a//Si l
a dis tancia ve rticale s m ayor a l
a h oriz ontal
...
das a l
a funcin GLCD_ l
ine el
se
a. Los parm e tros q ue re ci{ P = 2 * dis tancia_ x - dis tancia_ y;
be GLCD_ caja(x1, y1, x2,
for(i=0;i<=dis tancia_ y;+ + i)
y2, col
or) s on:
{ GLCD_ punto(x, y, col
or);
if(P < 0)
x1: un byte , e s l
a coorde na{ P + = 2 * dis tancia_ x;
da "x" (h oriz ontal
) de l
a es//pgina 0x1C

y + = incre m e nto_ y;}


q uina s upe rior iz q uie rda de l
el
se
re ctngul
o, con val
ore s vl
i{ P + = 2 * dis tancia_ x - 2 * dis tancia_ y;
dos de 0 a 127 (iz q uie rda a
x + = incre m e nto_ x;
de re ch a).
y + = incre m e nto_ y;}
y1: un byte , e s l
a coorde na}
da "y" (ve rtical
) de l
a e s q uina
}
s upe rior iz q uie rda de lre ctn}
gul
o, con val
ore s vl
idos de
0 a 63 (arriba a abajo).
x2: un byte , e s l
a coorde na//Eje m pl
o de us o de GLCD_ l
ine a(x1, y1, x2, y2, col
or)
da "x" (h oriz ontal
) de l
a es#incl
ude <16F877A.h >
q uina infe rior de re ch a de l #de vice *=16
re ctngul
o, con val
ore s vl
i#incl
ude <s tdl
ib.h >
dos de 0 a 127 (iz q uie rda a
#fus e s H S,NO W DT,NO LVP
de re ch a).
y2: un byte , e s l
a coorde na#USE DELAY (CLO CK =20000000)
da "y" (ve rtical
) de l
a e s q uina
#incl
ude <GLCD_ K 0108.C>
infe rior de re ch a de lre ctngul
o, con val
ore s vl
idos de 0 a
//-------Com ie nz a e lprogram a ----------------------63 (arriba a abajo).
void m ain()
col
or: un bit, "0" = caja e n
{
bl
anco, "1" = caja e n ne gro.
inti;
GLCD_ inicial
iz a(1);
GLCD_ l
im piar(0);
Es ta e s l
a funcin q ue dibuja
un circul
o. Elinte rior de lcircul
o pe rm ane ce de lcol
or de l
fondo. Es trictam e nte h abl
ando, s e dibuja s ol
ol
a circunfe re ncia. Los parm e tros q ue
re cibe GLCD_ circul
o(x1, y1,
radio, col
or) s on:
x1: un byte , e s l
a coorde nada "x" (h oriz ontal
) de lce ntro
de lcircul
o, con val
ore s vl
i-

//pgina 0x1D

//Inicial
iz o e lGLCD, e nce ndido.
//Lim pio l
a pantal
l
a

//Dibujo e je "X"
GLCD_ l
ine a(0, 32, 127, 32, 1);
for(i=0;i<=127;i=i+ 8){ GLCD_ l
ine a(i,31,i,33,1);}
//Dibujo e je "Y"
GLCD_ l
ine a(64, 0, 64, 64, 1);
for(i=0;i<=63;i=i+ 8){ GLCD_ l
ine a(63,i,65,i,1);}
//Dibujo l
a "grafica"
GLCD_ l
ine a(0,63,127,0,1);
}

dos de 0 a 127 (iz q uie rda a


de re ch a).
y1: un byte , e s l
a coorde nada "y" (ve rtical
) de l ce ntro
de lcircul
o, con val
ore s vl
idos de 0 a 63 (arriba a abajo).
radio: un byte , e s e lradio de
l
a circunfe re ncia (e n pixe l
e s ).
col
or: un bit, "0" = circul
o en
bl
anco, "1" = circul
o e n ne gro.

//-------------------------------------------------------------------------------//Dibuja un re ctngul
o de s de (x1,y1) a (x2,y2)
//de col
or (0 1).
//----------------------------------------------------------------------void GLCD_ re ctangul
o(intx1, inty1, intx2, inty2, int1 col
or)
{
GLCD_ l
ine a(x1,y1,x2,y1,col
or);
GLCD_ l
ine a(x1,y1,x1,y2,col
or);
GLCD_ l
ine a(x1,y2,x2,y2,col
or);
GLCD_ l
ine a(x2,y1,x2,y2,col
or);
}

Las circunfe re ncias s e h an


re s ue l
to m e diante e l"al
goritm o de l punto m e dio", q ue
divide l
a circunfe re ncia e n 8
parte s s im tricas , e vitando
util
iz ar funcione s com o s e no,
cos e no o pote ncias , q ue vol
ve ran m uy l
e nta l
a tare a de l
traz ado.

#incl
ude <16F877A.h >
#de vice *=16
#incl
ude <s tdl
ib.h >
#fus e s H S,NO W DT,NO LVP

//Eje m pl
o de GLCD_ re ctangul
o(x1, y1, x2, y2, col
or)

#USE DELAY (CLO CK =20000000)


#incl
ude <GLCD_ K 0108.C>
//-------Com ie nz a e lprogram a ----------------------void m ain()
{
inti;
GLCD_ inicial
iz a(1);
GLCD_ l
im piar(0);

//Inicial
iz o e lGLCD, e nce ndido.
//Lim pio l
a pantal
l
a

//Dibujo un re ctngul
o
GLCD_ re ctangul
o(10,10,117,40,1);
}

//pgina 0x1E

//----------------------------------------------------------------------//Dibuja un re ctngul
o PINTADO de s de (x1,y1) a (x2,y2)
//de col
or (0 o 1)
//----------------------------------------------------------------------void GLCD_ caja(intx1, inty1, intx2, inty2, int1 col
or)
{
//De cl
aro variabl
e s ------------------inti;
for(i=y1;i<=y2;i+ + ) {
GLCD_ l
ine a(x1,i,x2,i,col
or);}
}
//Dibujando una caja
#incl
ude <16F877A.h >
#de vice *=16
#incl
ude <s tdl
ib.h >
#fus e s H S,NO W DT,NO LVP
#USE DELAY (CLO CK =20000000)
#incl
ude <GLCD_ K 0108.C>
//-------Com ie nz a e lprogram a ----------------------void m ain()
{
inti;
GLCD_ inicial
iz a(1);
GLCD_ l
im piar(0);

//Inicial
iz o e lGLCD, e nce ndido.
//Lim pio l
a pantal
l
a

//Dibujo una caja


GLCD_ caja(20,20,115,32,1);
}
//----------------------------------------------------------------------//Dibuja un circul
o con ce ntro e n (x1,y1), radio
//y col
or (0 1)
//----------------------------------------------------------------------void GLCD_ circul
o(intx1, inty1, intradio, int1 col
or)
{
s igne d intd, x, y;
//Inicial
iz o l
as variabl
es.
d = 1 - radio;
x = 0;
y = radio;
//Dibujo l
os cuatro pxe l
e s q ue "cae n" s obre l
os e je s
//carte s ianos .
GLCD_ punto(x1, y1 + radio, col
or);
//pgina 0x1F

GLCD_ punto(x1, y1 - radio, col


or);
GLCD_ punto(x1 + radio, y1, col
or);
GLCD_ punto(x1 - radio, y1, col
or);
//Es te e s e lbucl
e q ue pinta l
os octavos de l
a circunfe re ncia.
w h il
e (x < y) {
if(d < 0) {d = d + 2 * x + 3;}
el
s e {d = d + 2 * (x - y ) + 5;
y = y - 1 ;}
x = x + 1;
//Pone e lpunto e n cada uno de l
os "octante s ".
GLCD_ punto(x1 + x, y1 + y, col
or);
GLCD_ punto(x1 - x, y1 + y, col
or);
GLCD_ punto(x1 + x, y1 - y, col
or);
GLCD_ punto(x1 - x, y1 - y, col
or);
GLCD_ punto(x1 + y, y1 + x, col
or);
GLCD_ punto(x1 - y, y1 + x, col
or);
GLCD_ punto(x1 + y, y1 - x, col
or);
GLCD_ punto(x1 - y, y1 - x, col
or);
}
}
//Dibujando un circul
o
#incl
ude <16F877A.h >
#de vice *=16
#incl
ude <s tdl
ib.h >
#fus e s H S,NO W DT,NO LVP
#USE DELAY (CLO CK =20000000)
#incl
ude <GLCD_ K 0108.C>
//-------Com ie nz a e lprogram a ----------------------void m ain()
{
inti;
GLCD_ inicial
iz a(1);
GLCD_ l
im piar(0);

//Inicial
iz o e lGLCD, e nce ndido.
//Lim pio l
a pantal
l
a

//Dibujo varios circul


os
for(i=10;i<=100;i=i+ 16){
GLCD_ circul
o(i,30,i/5+ 2,1);}
}

//pgina 0x20

H ay dos funcione s acce s orias e n l


as q ue s e bas a e l
funcionam ie nto de toda l
a
l
ibre ra. Efe ctivam e nte , de
form a indire cta o indire cta todas l
as funcione s im pl
e m e ntadas h ace n us o de GLCD_ l
e e BYTE(int1 l
ado) y GLCD_ e nviaBYTE(int1 l
ado, BYTE
dato) para l
e e r o e s cribii byte s e n e ldis pl
ay. A continuacin, e lcdigo fue nte de cada una.

//----------------------------------------------------------------------//Es cribe un byte e n una de l


as m itade s de l
a pantal
l
a
//(l
ado=0:iz q Lado=1:de r)
//----------------------------------------------------------------------void GLCD_ e nviaBYTE(int1 l
ado, BYTE dato)
{
if(l
ado) output_ h igh (GLCD_ CS2); //Se l
e cciono l
a m itad
corre s pondie nte
el
s e output_ h igh (GLCD_ CS1);
output_ l
ow (GLCD_ RW );
//M odo e s critura
output_ d(dato);
//Col
oco e ldato e n e lpue rto y...
de l
ay_ us (1);
//...e s pe ro.
output_ h igh (GLCD_ E);
//Pongo e lbitEnabl
e e n al
to y...
de l
ay_ us (2);
//...e s pe ro.
output_ l
ow (GLCD_ E);
//Pongo e lbitEnabl
e e n bajo.

Por l
tim o pue de s de s cargar
l
a l
ibre ria GLCD_ K 0108.C
h acie ndo cl
ick aq u.

output_ l
ow (GLCD_ CS1);
output_ l
ow (GLCD_ CS2);

//Libe ro l
al
ine a CS1 y...
//CS2.

//----------------------------------------------------------------------//Le e un byte de una de l


as dos m itade s de l
a pantal
l
a
//----------------------------------------------------------------------BYTE GLCD_ l
e e BYTE(int1 l
ado)
{
BYTE dato;
s e t_ tris _ d(0xFF);
output_ h igh (GLCD_ RW );

//Pue rto D com o e ntrada


//GLCD e n M odo l
e ctura
//Se l
e cciono l
a m itad de ldis pl
ay a l
e e r.

if(l
ado) output_ h igh (GLCD_ CS2);
el
s e output_ h igh (GLCD_ CS1);
de l
ay_ us (1);
output_ h igh (GLCD_ E);
de l
ay_ us (2);
dato = input_ d();
output_ l
ow (GLCD_ E);

//Es pe ro...
//Pongo e n al
to e lpin e nabl
e y...
//...e s pe ro.
//Guardo e n "dato" e lval
or de vue l
to y...
//...pongo e n bajo e lpin e nabl
e.
//Vue l
vo a pone r e n bajo l
as l
ine as CS1 y CS2.

output_ l
ow (GLCD_ CS1);
output_ l
ow (GLCD_ CS2);
re turn dato;
}

//pgina 0x21

l
e e r un te cl
ado m atricial
con PIC Sim ul
ator IDE
Una de l
as m ane ras m s us ual
e s de ingre s ar datos a un m icrocontrol
ador e s a
travs de un te cl
ado m atricial
. En e s te tutoriale xpl
icare m os com o re al
iz ar una
rutina de l
e ctura e n e ll
e nguaje Bas ic de le ntorno PIC Sim ul
ator IDE para util
iz arl
a
e n nue s tros proye ctos .
//por: Lucas M artn Tre s e r //
l
m tre s e r@ gm ail
.com

Un te cl
ado m atricialno
e s m s q ue un arre gl
o de pul
s adore s , tanto norm al
m e nte
ce rrados com o abie rtos , dis pue s tos e n fil
as y col
um nas y
com partie ndo al
gunos de s us
pine s , l
ogrando una notabl
e
re duccin de e s tos . Por e je m pl
o un te cl
ado de 4 fil
as y 4
col
um nas , l
l
am ado ge ne ral
m e nte 44, pos e e s l
o 8 pine s de cone xin y 16 te cl
as a
nue s tra dis pos icin.
Ah ora bie n, a l
a h ora de
im pl
e m e ntar un te cl
ado de e s te
tipo e n al
guno de nue s tros proye ctos de be m os re al
iz ar una
rutina de l
e ctura pue s alcom partir pine s e n s u e s tructura inte rna, e lm icrocontrol
ador no pue de dil
ucidar por s i s ol
o cuale s
l
a te cl
a pre s ionada.

Nue s tra rutina com o ya


dijim os e s t e s crita e n e ll
e nguaje Bas ic de PIC Sim ul
ator IDE,
aunq ue e s fcil
m e nte portabl
e a
//pgina 0x23

otra variante de ll
e nguaje .
Lo q ue de be m os h ace r
e s ve rificar e le s tado de l
os pul
s adore s uno a uno para s abe r s i
h ubo un cam bio de e s tado. Para l
ograrl
o de be m os cone ctar
l
as cuatro col
um nas de lte cl
ado
a cuatro pine s de s al
ida de l
PIC, y l
as cuatro fil
as a otros
cuatros pine s de e ntrada de l
m icrocontrol
ador.
La s e cue ncia a s e guir e s
l
a s iguie nte :
Activar l
a prim e ra col
um na.
Ve rificar fil
a a fil
a e n bus ca de
un uno (1) l
gico.
Apagar l
a prim e ra col
um na.
Re pe tir e lproce dim ie nto con
l
as col
um nas s iguie nte s .

Al
l
Digital

'Subrutina de l
e ctura de un te cl
ado m atricial4x4.

'Nom bro l
os pine s q ue
'conform an l
as fil
as .
Sym bolfil
a1 = RB0
Sym bolfil
a2 = RB1
Sym bolfil
a3 = RB2
Sym bolfil
a4 = RB3

ge t_ button:
boton = 0
col
1=1
Iffil
a1 = 1 Th
Iffil
a2 = 1 Th
Iffil
a3 = 1 Th
Iffil
a4 = 1 Th
col
1=0
col
2=1
Iffil
a1 = 1 Th
Iffil
a2 = 1 Th
Iffil
a3 = 1 Th
Iffil
a4 = 1 Th
col
2=0
col
3=1
Iffil
a1 = 1 Th
Iffil
a2 = 1 Th
Iffil
a3 = 1 Th
Iffil
a4 = 1 Th
col
3=0
col
4=1
Iffil
a1 = 1 Th
Iffil
a2 = 1 Th
Iffil
a3 = 1 Th
Iffil
a4 = 1 Th
col
4=0
Re turn

'Nom bro l
os pine s q ue
'conform an l
as col
um nas .
Sym bolcol
1 = RB4
Sym bolcol
2 = RB5
Sym bolcol
3 = RB6
Sym bolcol
4 = RB7
'De finicin de pue rtos .
TRISA = % 00000000
TRISB = % 00001111
'De finicin de variabl
es.
Dim boton As Byte
'Com ie nz a bl
oq ue principal
.
l
oop:
Gos ub ge t_ button
PO RTA = boton
Goto l
oop
End
En nue s tro cdigo de e je m pl
o s im pl
e m e nte e s cane am os todas l
as te cl
as , s i s e
e ncue ntra al
guna pre s ionada
guarda un val
or num rico e n
l
a variabl
e "boton" y l
ue go
tras l
ada e l conte nido de
dich a variabl
e dire ctam e nte
alpue rto de s al
ida PO RTA.
O bviam e nte l
a final
idad de l
cdigo e s ve r l
a m e cnica de
l
e ctura de un te cl
ado m atricial4x4 para com pre nde rl
a,
m odificarl
a y adaptarl
a a un
program a prctico s in m ayore s dificul
tade s .

//pgina 0x24

'Activo l
a prim e ra col
um na.
e n boton = 1
e n boton = 5
e n boton = 9
e n boton = 13
'Activo l
a s e gunda col
um na.
e n boton = 2
e n boton = 6
e n boton = 10
e n boton = 14
'Activo l
a te rce ra col
um na.
e n boton = 3
e n boton = 7
e n boton = 11
e n boton = 15
'Activo l
a cuarta col
um na.
e n boton = 4
e n boton = 8
e n boton = 12
e n boton = 16
'Fin y re gre s o de s ubrutina

s ptim a com pe te ncia


nacionalde robtica
ElGrupo de Robtica y Sim ul
acin (GRS) pe rte ne cie nte alDe partam e nto de
Inge nie ra El
ctrica de l
a Unive rs idad Te cnol
gica NacionalFacul
tad Re gional
Bah a Bl
anca organiz a nue vam e nte uno de l
os e ve ntos m s im portante s de lpas :
l
a "Sptim a Com pe te ncia Nacionalde Robotica".
//por: Grupo de Robtica y Sim ul
acin //
com pe te nciarobotica@ frbb.utn.e du.ar

La "Sptim a Com pe te ncia Nacionalde Robtica"


s e re al
iz ar e l14 de novie m bre de l2009 e n l
a ciudad de
Bah ia Bl
anca, provincia de
Bue nos Aire s (Arge ntina).
En l
a
cate gora
Sum o e xis te n tre s nive l
e s . Una
es l
a l
l
am ada pol
im odale n cual
participan al
um nos de l nive l
m e dio o s e cundario. La otra e s
l
a l
l
am ada l
ibre donde participan al
um nos unive rs itarios , inge nie ros o publ
ico e n ge ne raly
por ul
tim o e lM ini Sum o donde
pue de n participar todas l
as
e dade s s ie ndo l
os robots de un
tam ao m e nor alSum o Cl
s ico.
Por te rce r ao cons e cutivo de s arrol
l
are m os l
a m odal
idad l
l
am ada ve l
ocis ta. La m is m a cons is te e n una carre ra de
dos robot s e guidore s de l
ine a
e n un circuito ce rrado. Elprim e r
robot q ue de l
a cantidad de
vue l
ta as ignada gana l
a carre ra.
Los nue vos re gl
am e ntos ,
fotos y vde os de l
a com pe te ncia e s tarn a s u dis pos icin e n
//pgina 0x26

nue s tra nue va pagina w e b cuya


dire ccin e s : w w w .grs bah iabl
anca.com .ar.
Con re s pe cto a l
os re gl
am e ntos h e m os tratado de s im pl
ificarl
o alm xim o dando l
ibe rtad
cas i abs ol
uta a l
os participante
en l
a cons truccin de l
os robots
y tam bin durante l
a com pe te ncia pidie ndo s ol
am e nte q ue s e
cum pl
a con e lpe s o y m e didas
e s tipul
adas por l
a norm a por l
o
tanto no h abr tol
e rancia e n l
os
m is m os e s te ao.
La ins cripcin al ce rtam e n ce rrar e lda 6 de novie m bre . Aq ue l
l
os participante s q ue
te ngan dudas s obre s u participacin e n e le ve nto s e l
e pe dir
q ue s e ins criban igual
m e nte
ante de l
a fe ch a tope porq ue de
otra m ane ra no podrn com pe tir. La ins cripcin s e ra a travs
de nue s tra pagina.
La com pe te ncia dura un
da s ol
am e nte y e lao pas ado
s e pre s e ntaron 71 robots e n
todas l
as cate goras s ie ndo l
a
dis tribucin m as o m e nos l
a

s iguie nte :

La ins cripcin no tie ne


cos to h as ta ah ora. Lo nico
q ue s e pide e s pagar un bono para l
a ce na de cam arade ra q ue s e h ace te rm inada
l
a com pe te ncia.
Elde s arrol
l
o de lrobot
pue de s e r a travs de una
ins titucin o e n form a particul
ar.
Cual
q uie r
inq uie tud
q ue te ngan no dude n e n e s cribir a l
os organiz adore s , a
l
a s iguie nte dire ccin de corre o e l
e ctrnico: com pe te nciarobotica@ frbb.utn.e du.ar

//pgina 0x27

brjul
a digitalde pre cis in
con s e ns or de e fe cto h al
l
Elfs ico Edw in H al
lde s cubri (por cas ual
idad) e le fe cto q ue l
l
e va s u nom bre e n e l
ao1879 . De s de e ntonce s h an pas ado m uch os aos y s e h an de s arrol
l
ado
m l
tipl
e s s e ns ore s q ue aprove ch an e s te fe nm e no. H acie ndo us o de e l
l
os
podre m os cons truir una brjul
a digitalde gran pre cis in.
//por: Pabl
o //
q uick bas ic@ te rra.e s

Ele fe cto H al
ls e m anifie s ta e n l
a te ns in trans ve rs alq ue apare ce e n un conductor cuando e s t s om e tido a
un cam po m agntico. Por e je m pl
o, s i te ne m os un cabl
e
conducie ndo corrie nte y l
e
pone m os un vol
tm e tro s e ns ibl
e e ntre dos puntos trans ve rs al
e s , alace rcar un im n s e
podra m e dir una pe q ue s im a te ns in. Es to e s de bido a
q ue l
os e l
e ctrone s q ue pas an
por e lcabl
e s e ve rn de s pl
az ados h acia un l
ado e n pre s e ncia de l im n. Entonce s
apare ce una dife re ncia de te ns in e ntre e s os dos puntos
de lcabl
e . Als e parar e lim n,
l
a te ns in trans ve rs alde s apare ce .
Para pode r m e dir e s ta
te ns in trans ve rs ale s ne ce s ario
am pl
ificarl
a, porq ue s u val
or e s
m uy re ducido. En e l m e rcado
h ay s e ns ore s de e fe cto h al
l
l
ine al
e s q ue inte gran un am pl
ificador y al
canz an s e ns ibil
idade s
de 5m V por Gaus s . Es to s igue
//pgina 0x29

s ie ndo m uy poca cos a para


nue s tro props ito, ya q ue e l
cam po m agntico de l
a tie rra,
q ue e s e lim n q ue q ue re m os
m e dir, e s tan dbilcom o aproxim adam e nte 0.5 Gaus s .
En nue s tro cas o util
iz are m os un s e ns or 1321 de l
a
com paa Al
l
e gro, q ue a s u
s al
ida nos e ntre ga una variacin m xim a e ntre l
os pol
os
norte y s ur de tan s l
o 2.5m V.

Es e vide nte q ue s i q ue re m os conve rtir l


a te ns in anal
gica q ue ofre ce e ls e ns or a una
s e al digital h ay q ue e fe ctuar
un proce s o de am pl
ificacin.
Com o ya dijim os ante riorm e nte , e ls e ns or 1321 e ntre ga
por s u pin "O UT" 2,5V cuando
e s t e n e s tado de re pos o, e s
de cir s in l
a pre s e ncia de un
cam po m agntico e n s us al
re de dore s . Pe ro cuando e l pol
o
norte de un im n e s ace rcado a
l
,l
a s al
ida variar proporcional
-

m e nte de 2,5V h acia l


a
te ns in de fue nte y s i dam os
vue l
ta e lim n, e nfre ntndol
o
alpol
o s ur, l
a s al
ida bajar
de 2,5Va nive lde m as a.
Aprove ch ando e s to y
para aum e ntar l
a s e ns ibil
idad al dobl
e m ontare m os
dos s e ns ore s opue s tos , uno
e nfre ntado a otro.
Si l
e ace rcam os al
m ontaje e l pol
o norte de l
im n, un de l
os s e ns ore s s ubir 1V por e ncim a de lnive l
de re pos o ( 2,5V) y e lotro
bajar 1V por de bajo de
dich o nive l
. Por l
o tanto te ne m os un s e ns or q ue e ntre ga
3,5V y e lotro 1,5. Si e ntonce s cone ctam os un vol
tm e tro e ntre s us dos s al
idas
"O UT" te ndre m os una dife re ncia s um ada de 2V (ve r
figura 1).
Con e s te arre gl
ol
ogram os m ul
tipl
icar l
a s e ns ibil
idad por 2: ah ora 1 Gaus s
s e rn 10m V. Pe ro com o e l
cam po m agntico de l
a Tie rra produce 5m V, todava
re s ul
ta ins uficie nte para atacar un conve rs or anal
gico /
digital
. Te ndre m os q ue am pl
ificar e s ta s e alm uch o m s .

h ora de conve rtir l


a s e alde
anal
gica a digital
. Por e s o
us am os e l am pl
ificador de
ins trum e ntacin INA122, de
m uy bajo ruido y "railto rail
".
Es te ch ip de pre cis in s e
s ue l
e us ar para am pl
ificar
l
as m nim as te ns ione s corporal
e s para e q uipos de e l
e ctrocardiogram as y e nce fal
ogram as . Es m uy fcilde m ontar
ya q ue s l
o ne ce s ita una
re s is te ncia e xte rna para de cirl
e q ue ganancia ne ce s itam os .
Si m iram os l
a h oja de
datos e ncontrare m os una form ul
a para cal
cul
ar l
a re s is te ncia q ue configura l
a ganancia de lam pl
ificador:
(200.000 /R) + 5 = Ganancia

Para e s te tipo de
apl
icacione s l
os am pl
ificadore s ope racional
e s (tipo LM 358) re s ul
tan
ine ficace s ,
introduce n de m as iado ruido
y no s on "rail to rail
", q ue
q uie re de cir q ue no e ntre gan
e n s u s al
ida una te ns in
m xim a de 5V y m nim a de
0, s ino q ue s u rango dinm ico e s bas tante m e nor, l
o q ue
nos trae r probl
e m as a l
a
//pgina 0x2A

Por e je m pl
o con una re s is te ncia de 360 oh m s s e
cons igue una am pl
ificacin
de 560 ve ce s l
a te ns in
e ntrante . Por l
o q ue l
os 5m V
de lcam po m agntico te rre s tre s acaran 2'8 vol
tios por e l
pin "O UT" de lINA122. Con
e s tas ganancias e lruido e s
cons ide rabl
e
y h ay q ue
fil
trarl
o con capacitore s para
l
ograr al
go l
e gibl
e . Elorige n
de e s te ruido captado por l
os
s e ns ore s h al
l e s un te m a
m uy inte re s ante , pe ro para
otra ocas in.

En un conve rs or A/D de 10
bits (1023 puntos de re s ol
u-

cin) con una te ns in de


re fe re ncia de 5V, l
a s al
ida de
2,8V de lINA122 e q uival
e a
una variacin de 572 puntos .
Al girar 360 varias
ve ce s e lm ontaje s e obtie ne
una grfica com o l
a de l
a
figura 3. Se trata de una
funcin SENO . Con un s e ns or s ol
am e nte te ne m os una
coorde nada: l
a X, o e ls e no.
Te ne m os q ue util
iz ar otro
s e ns or cruz ado a 9 0 grados
para obte ne r e l e je Y, e l
cos e no (ve r figura 2).
Ah ora bie n, con dos
s e ns ore s cruz ados y s i giram os e lm ontaje varias vue l
tas com pl
e tas de 360 grados , ve re m os dos s e al
es
com o l
as de l
a figura 4.
El de s fas e e ntre am bas grficas coincide con l
os
9 0. Inte rpol
ando am bas m e didas X e Y, y girando e l
m ontaje 360 grados , obte ndre m os una bonita grfica de
puntos com o e s ta l
a de l
a
figura 5. Se trata de un crcul
o pe rfe cto, funcin de l
s e no y e lcos e no ge ne rados
por e lcam po m agntico te rre s tre . Cabe acl
arar q ue l
as
im pe rfe ccione s q ue s e ve n
s on de bidas a m ovim ie ntos
inde bidos a l
a h ora de l
os
e ns ayos con e lcircuito re al
.

Las s e al
e s obte nidas
por e l circuito tie ne n una
am pl
itud de 572 puntos , con
e s to pode m os cal
cul
ar l
a pre cis in q ue te ndr nue s tra
brjul
a as :
572 x 3.1416 = 179 6 puntos de
circunfe re ncia totalde lcrcul
o

//pgina 0x2B

360 grados /179 6 puntos = 0,2


grados de re s ol
ucin

Ah ora unas e cuacione s con

funcin arco-tange nte para


obte ne r de e s ta grfica circul
ar un angul
o e ntre 0 y 360
grados :

' ------(vol
ts e s e le je X , vol
ts 1 e s e le je Y)---Ifvol
ts = 0 And vol
ts 1 > 0 Th e n angul
o = 270
Ifvol
ts = 0 And vol
ts 1 < 0 Th e n angul
o=90
Ifvol
ts > 0 And vol
ts 1 > 0 Th e n angul
o = 360 - (Atn(vol
ts 1 /
vol
ts ) * (180 /3.1416))
Ifvol
ts > 0 And vol
ts 1 < 0 Th e n angul
o = -(Atn(vol
ts 1 /vol
ts ) *
(180 /3.1416))
Ifvol
ts < 0 Th e n angul
o = 180 - (Atn(vol
ts 1 /vol
ts ) * (180 /
3.1416))
printangul
o
'------------------------------------------------------------------

Ate ncin: para q ue e s to


funcione , h ay q ue ajus tar e l
ce ntro de l "crcul
o" e n l
as
coorde nadas 0,0. Es to pue de s h ace rl
o s im pl
e m e nte re s tando o s um ando e l val
or
ade cuado a X e Y e n e l
program a. Con e s to ya te ndre m os una bonita l
e ctura
digital e n grados , con una
pre cis in m ayor de 1 grado.
Sol
o re s ta arm ar al
guna
inte rface atractiva e n Vis ual
Bas ic o s im il
ar para us ar con
nue s tro h ardw are .

Se ns or h al
lAl
l
e gro 1321 (4)
Circuito inte grado INA122 (2)
Re s is te ncia 47 k oh m s (4)
Re s is te ncia 360 oh m s (2)
Capacitor 4,7 uF (2)
Capacitor 100 nF (1)

//pgina 0x2C

un PIC e n tu TV!
Al
guna ve z , com o parte de al
guno de tus proye ctos , h as ne ce s itado m os trar
al
guna inform acin e n l
a pantal
l
a de un te l
e vis or? Es pos ibl
e q ue s i. Pe ro e l
h ardw are y e ls oftw are ne ce s arios para e s te tipo de proye cto no e s fcilde
de s arrol
l
ar. Sin e m bargo, ah ora podrs h ace rl
o. Es te artcul
o te m os trar cm o
conve rtir un PIC18 e n un ge ne rador PAL de graficos y te xtos (e n bl
anco y ne gro)
con un nm e ro m uy re ducido de com pone nte s de bajo cos to, con un m nim o de
e s fue rz o de program acin.
//por: Bruno Gavando //
bruno.gavand@ ad-val
ore m .fr

Por q ue una bibl


iote ca
PAL para PICs ? Si e s ts util
iz ando PICs , pos ibl
e m e nte
al
gun da inte ntas te cons truir
un dis pos itivo proce s ador de
vde o, ya s e a para dive rtirs e o
com o parte de un proye cto
m s grande . Si inte ntas te ge ne rar s e al
e s de vde o, pos ibl
e m e nte h ayas vis to al
guna
de e s tas pginas w e b: Rick ard Gune e s PIC PO NG y
Eric Sm ith vde o re l
oj.
Es tos proye ctos s on dive rtidos , pe ro dificil
e s de util
iz ar
com o un ge ne rador de vide o de
carcte r ge ne ral
, q ue pe rm ita
util
iz ar un TV com o s i fue s e una
pantal
l
a GLCD.
H e te nido l
a ide a de util
iz ar una e s cal
e ra de re s is tore s
com o una form a rpida y barata
cde cre ar un conve rtidor digital
a anal
gico, y com e nz ado a
trabajar e n e ls oftw are .

Com o l
a pantal
l
a de vde o
//pgina 0x2E

q ue s e h a m ape ado e n m e m oria, s l


o un PIC con s uficie nte
m e m oria RAM pue de util
iz ar
e s ta l
ibre ra. Es por e l
l
o q ue l
a
PIC PAL Vide o Library s l
o
funciona con l
a fam il
ia PIC18.
ElPIC de be funcionar a
32M H z , con un cris talde 8M H z ,
para pode r obte ne r l
os 64 s
ne ce s arios para l
a s incroniz acin h oriz ontalde ls is te m a PAL.
La l
ibre ra ge ne ra una s e alPAL de 625 l
ne as inte rl
az adas , y pue de m os trar h as ta 248
l
ne as ve rtical
e s de 128 pixe l
es.
Cual
q uie r dis pos itivo con una
e ntrada PAL de vide o com pue s to pue de e m pl
e ars e para m os trar l
as im age ne s ge ne radas
por e lPIC.
Dado q ue e lm ane jo de
l
os tie m pos e s crtico, e ls oftw are s e h a e s crito e n C con al
gunas rutinas e n e ns am bl
ador. El
C util
iz ado e s e lm ik roC, y pue de s de s cargar e lproye cto com pl
e to (incl
uido e lcdigo fue nte ).
La l
ibre ra contie ne m uch as funcione s as i q ue e xpl
ica-

re m os e lus o de cada una de


el
l
as .

Es ta funcin pre para


l
a l
ibre ra PIC PAL. Cuanto
m ayor s e a l
a cantidad de
l
ine as ve rtical
e s q ue de s e e s
m os trar e n e lTV, m e nor s e r
l
a cantidad de m e m oria y de
re curs os q ue e l PIC te nga
para e lre s to de lprogram a.
Es ta l
ibre ra tom a e lcontrol
de lTIM ER0 y s us inte rrupcione s as ociadas . Tam bin util
iz a e lPO RTD.

Es ta funcin control
a
l
a ge ne racin de l
a s e alde
vide o. Cuando com ie nz a l
a
s incroniz acin PAL, l
a variabl
e PAL_ fram e Ctr (uns igne d
l
ong gl
obal
) s e incre m e nta
25 ve ce s por s e gundo.

Es ta funcin l
l
e na l
a
pantal
l
a con un patrn de te rm inado. Util
iz a 0x00 para l
im piar l
a pantal
l
a y 0xFF para
pintarl
a com pl
e tam e nte de
bl
anco.

Es ta funcin cam bia


e lcol
or de lborde q ue rode a
l
a im age n.

Es ta e s l
a funcin q ue
pe rm ite dibujar un punto e n
una pos icin de te rm inada de
l
a pantal
l
a.
//pgina 0x2F

Prototipo:

void PAL_ init(uns igne d ch ar y)

Parm e tros :

y : nm e ro de l
ine as ve rtical
e s , h as ta 128.

De vue l
ve :

Nada

Re q uie re :

Elfich e ro PAL_ l
ibrary.h de be s e r incl
uido
e n e lcodigo fue nte de lus uario. ElPIC18
de be funcionar a 32M H z .
PAL_ init(128);

Eje m pl
o:

Prototipo:
Parm e tros :

void PAL_ control


(uns igne d ch ar s t,
uns igne d ch ar rd)
s t: Controlde l
a s incroniz acin PAL.
PAL_ CNTL_ START : Com ie nz a s incroniz acin PAL.
PAL_ CNTL_ STO P : De tie ne l
a s incroniz acin PAL(l
ibe ra l
os re curs os de lPIC).
rd : Controlde re nde r PAL_ CNTL_ BLANK :
Sol
o s e m ue s tran l
os borde s (l
ibe ra parte
de l
os re curs os de lPIC).
PAL_ CNTL_ RENDER : M ue s tra todo e l
vide o, con borde s e im age n (cons um e m s
re curs os de lPIC).

De vue l
ve :

Nada

Re q uie re :

La e je cucin pre via de PAL_ init();

Eje m pl
o:

PAL_ control
(PAL_ CNTL_ START,
PAL_ CNTL_ RENDER);

Prototipo:

void PAL_ fil


l
(uns igne d ch ar c)

Parm e tros :

c : Patrn de re l
l
e no

De vue l
ve :

Nada

Re q uie re :

La e je cucin pre via de PAL_ init();

Eje m pl
o:

PALL_ fil
l
(0);

Prototipo:

void PAL_ s e tBorde r(uns igne d ch ar borde r)

Parm e tros :
De vue l
ve :

borde r : PAL_ CO LO R_ BLACK o


PAL_ CO LO R_ W H ITE
Nada

Re q uie re :

La e je cucin pre via de PAL_ init();

Eje m pl
o:

PAL_ borde r(PAL_ CO LO R_ BLACK );

Prototipo:

De vue l
ve :

void PAL_ s e tPixe l


(ch ar x, ch ar y, uns igne d
ch ar m ode )
x : col
um na de lpixe l
, de 0 a 127
y : Fil
a de lpixe l
, de 0 a num e ro de l
ine as -1
m ode : col
or de lpixe l
, PAL_ CO LO R_ BLACK , PAL_ CO LO R_ W H ITE o PAL_ CO LO R_ REVERSE
Nada

Re q uie re :

La e je cucin pre via de PAL_ init();

Eje m pl
o:

PAL_ s e tPixe l
(10, 20, PAL_ CO LO R_ REVERSE);

Parm e tros :

Prototipo:

void PAL_ l
ine (ch ar x0, ch ar y0, ch ar x1,
ch ar y1, uns igne d ch ar m ode )

Parm e tros :

De vue l
ve :

x0, y0 : Coorde nadas (fil


a y col
um na) de l
com ie nz o de l
al
ine a.
x1, y1 : Coorde nadas (fil
a y col
um na) de l
finalde l
al
ine a.
m ode : col
or de lpixe l
, PAL_ CO LO R_ BLACK , PAL_ CO LO R_ W H ITE o PAL_ CO LO R_ REVERSE.
Nada

Re q uie re :

La e je cucin pre via de PAL_ init();

Eje m pl
o:

PAL_ l
ine (0, 0, 127, 127, PAL_ CO LO R_ W H ITE);

Es ta funcin dibuja una l


ine a de s de (x0, y0) a (x1,
y1).

Es ta funcin dibuja un
circul
o con ce ntro e n (x,y) y
radio z .

Es ta funcin dibuja (y
pinta) un re ctngul
o.

Es ta funcin dibuja un
re ctngul
o vaco.

Es ta funcin e s cribe
un caracte r de te xto e n l
a fil
a
y col
um na de s e ada. Pue de s
us ar PAL_ box() para e s cribir
e n vide o inve rtido.

Es ta funcin e s cribe
una cade na de te xto a partir
de l
a fil
a y col
um na de s e ada.

Es ta funcin e s cribe
una cade na de te xto a partir
de l
a fil
a y col
um na de s e ada.
Es iguala l
a funcion ante rior,
pe ro para te xtos al
m ace nados e n RO M .

//pgina 0x30

Prototipo:

De vue l
ve :

void PAL_ circl


e (ch ar x, ch ar y, ch ar r,
uns igne d ch ar m ode )
x : Col
um na de lce ntro de lcircul
o.
y : Fil
a de lce ntro de lcircul
o.
r : Radio de lcircul
o.
m ode : col
or de lpixe l
, PAL_ CO LO R_ BLACK , PAL_ CO LO R_ W H ITE o PAL_ CO LO R_ REVERSE
Nada

Re q uie re :

La e je cucin pre via de PAL_ init();

Eje m pl
o:

PAL_ circl
e (30, 30, 5, PAL_ CO LO R_ W H ITE);

Parm e tros :

Prototipo:

void PAL_ box(ch ar x0, ch ar y0, ch ar x1,


ch ar y1, uns igne d ch ar m ode )

Parm e tros :

De vue l
ve :

x0, y0 :Coorde nadas de l


a e s q uina s upe rior
iz q uie rda.
x1, y1 :Coorde nadas de l
a e s q uina infe rior
de re ch a.
m ode : col
or de lpixe l
, PAL_ CO LO R_ BLACK , PAL_ CO LO R_ W H ITE o PAL_ CO LO R_ REVERSE
Nada

Re q uie re :

La e je cucin pre via de PAL_ init();

Eje m pl
o:

PAL_ box(10, 10, 30, 30, PAL_ CO LO R_ W H ITE);

Prototipo:

De vue l
ve :

void PAL_ re ctangl


e (ch ar x0, ch ar y0, ch ar
x1, ch ar y1, uns igne d ch ar m ode )
x0, y0 :Coorde nadas de l
a e s q uina s upe rior
iz q uie rda.
x1, y1 :Coorde nadas de l
a e s q uina infe rior
de re ch a.
m ode : col
or de lpixe l
, PAL_ CO LO R_ BLACK , PAL_ CO LO R_ W H ITE o PAL_ CO LO R_ REVERSE
Nada

Re q uie re :

La e je cucin pre via de PAL_ init();

Eje m pl
o:

PAL_ re ctangl
e (10, 10, 30, 30, PAL_ CO LO R_ W H ITE);

Parm e tros :

//pgina 0x31

Dibuja una im age n


(BitM ap) pre viam e nte al
m ace nado e n l
a RO M y apuntado por bm , e n l
a pos icin
(x, y). La im age n s e r m onocrom a, y pue de util
iz ars e l
a
h e rram ie nta para ge ne rar
m apas de bits para GLCD
T69 63 de m ik roEl
e k tronik a
para conve rtir l
as im age ne s .

Es ta funcin no pue de
serl
l
am ada dire ctam e nte por
e lus uario, pe rode be s e r col
ocada de ntro de l
a funcin
inte rrupt(). Ate ncin: s i e s tn
h abil
itadas , otras inte rrupcione s pue de ocas ionar probl
em as de s incronis m o e n e l
vide o.

Prototipo:

De vue l
ve :

void PAL_ ch ar(uns igne d ch ar x, uns igne d ch ar y, uns igne d ch ar c, uns igne d
ch ar s iz e )
x : Col
um na de lpixe ls upe rior iz q uie rdo de lcaracte r, de 0 to 127
y : Fil
a de lcaracte r, de 0 a num e ro de l
ine as -1
c : Cdigo ASCII de lcaracte r.
s iz e : Elnibbl
e al
to e s e lm ul
tipl
icador de l
a al
tura, e lbajo m ul
tipl
ica e lanch o.
Tam aos pre de finidos : PAL_ CH AR_ STANDARD, PAL_ CH AR_ DW IDTH ,
PAL_ CH AR_ DH EIGH T, PAL_ CH AR_ DSIZ E
Nada

Re q uie re :

La e je cucin pre via de PAL_ init();

Eje m pl
o:

PAL_ ch ar(3, 5, 'A', PAL_ CH AR_ DSIZ E);

Prototipo:

De vue l
ve :

void PAL_ w rite (uns igne d ch ar l


ig, uns igne d ch ar col
, uns igne d ch ar *s ,
uns igne d ch ar s iz e )
l
ig : Line a de lte xto
col: Col
um na de lte xto
s : Punte ro a l
a cade na de te xto (te rm inado e n NULL)
s iz e : Elnibbl
e al
to e s e lm ul
tipl
icador de l
a al
tura, e lbajo m ul
tipl
ica e lanch o.
Tam aos pre de finidos : PAL_ CH AR_ STANDARD, PAL_ CH AR_ DW IDTH ,
PAL_ CH AR_ DH EIGH T, PAL_ CH AR_ DSIZ E
Nada

Re q uie re :

La e je cucin pre via de PAL_ init();

Eje m pl
o:

PAL_ w rite (0, 5, m yString, PAL_ CH AR_ STANDARD);

Prototipo:

De vue l
ve :

void PAL_ cons tW rite (uns igne d ch ar l


ig, uns igne d ch ar col
, cons tuns igne d
ch ar *s , uns igne d ch ar s iz e )
l
ig : Line a de lte xto
col: Col
um na de lte xto
s : Punte ro a l
a cade na de te xto (te rm inado e n NULL)
s iz e : Elnibbl
e al
to e s e lm ul
tipl
icador de l
a al
tura, e lbajo m ul
tipl
ica e lanch o.
Tam aos pre de finidos : PAL_ CH AR_ STANDARD, PAL_ CH AR_ DW IDTH ,
PAL_ CH AR_ DH EIGH T, PAL_ CH AR_ DSIZ E
Nada

Re q uie re :

La e je cucin pre via de PAL_ init();

Eje m pl
o:

PAL_ w rite (0, 5, m yCons tantString, PAL_ CH AR_ STANDARD);

Parm e tros :

Parm e tros :

Parm e tros :

//pgina 0x32

Prototipo:

De vue l
ve :

void PAL_ picture (uns igne d ch ar x, uns igne d ch ar y, cons tuns igne d ch ar
*bm , uns igne d ch ar s x, uns igne d ch ar s y)
x : col
um na de lpixe ls upe rior iz q uie rdo de l
a im age n.
y : fil
a de lpixe ls upe rior iz q uie rdo de l
a im age n.
bm : Punte ro albitm ap e n RO M
s x : Anch o de l
a im age n.
s y : Al
to de l
a im age n.
Nada

Re q uie re :

La e je cucin pre via de PAL_ init();

Eje m pl
o:

PAL_ picture (0, 0, pict, 128, 128);

Parm e tros :

La im age n s iguie nte


m ue s tra e le s q ue m a e l
e ctrico de lh ardw are propue s to.
Elcoraz n de lcircuito
e s un PIC18F4620. C1, C3 y
C4 s on conde ns adore s de
de s acopl
e . El PIC funciona
con un cris talde 8 M H z . D1
s e util
iz a com o un s e ns or de
te m pe ratura cone ctado al

//pgina 0x33

Prototipo: void PAL_ ISR()


Parm e tros :
De vue l
ve : Nada
Re q uie re :

La e je cucin pre via de PAL_ init();

Eje m pl
o:

void inte rrupt(void)


{
PAL_ ISR();
}

conve rs or anal
ogico digital
de lPIC. La s e alde vide o
s e obtie ne de l
os re s is tore s
R8 y R9 . Los pul
s adore s s e
e m pl
e an para configurar e l
s oft.
La s e al de s al
ida
pue de apl
icars e dire ctam e nte a l
a e ntrada de vide o
com pue s to de un aparato de
TV.

Els iguie nte program a


s irve de e je m pl
o de com o
pue de s util
iz ar l
as funcione s
incl
uidas e n l
a PIC PAL
Library.
En un PIC18F4620 util
iz a s ol
am e nte e l25% de l
a
RO M y e l55% de l
a RAM !
La prim e r pantal
l
a de l
program a m ue s tra una im age n de 128x128 pixe l
e s , con
un borde parpade ante . El
program a e s pe ra a q ue s e
pul
se l
a te cl
a cone ctada a
RB7 para m os trar l
a s e gunda pantal
l
a.
La s e gunda pantal
l
a
m ue s tra un re l
oj-cal
e ndario y
l
a te m pe ratura. La h ora s e
m ue s tra s im ul
tane am e nte e n
form a digitaly anal
gica.
RB0 cam bia l
os m inutos , RB1 l
as h oras , RB2 e l
da, RB3 e lm e s y RB4 e l
ao. RB5 pe rm ite ajus tar l
a
te m pe ratura.
Pre s ionando
RB7 junto a l
as ante riore s opcione s , l
os val
ore s de cre m e ntan e n l
ugar de incre m e ntars e .

Pue de s de s cargar e l
proye cto com pl
e to, incl
uido
e lcodigo fue nte de s de aq u.
//pgina 0x34

Elarch ivo z ip contie ne :


PAL_ l
ibrary.c, 37 K b : Cdigo fue nte de l
al
ibre ria
PAL_ l
ibrary.h , 2 K b : De finicione s de l
al
ibre ria
PALde m o.c, 15 K b : Cdigo de le je m pl
o
PALde m o.e e d, 1 K b : De finicin de l
a EEPRO M
PALde m o.h e x, 46 K b : Arch ivo H EX fpara e lPIC18F4620
PALde m o.ppc, 2 K b : m ik roC proje ct
picture s .h , 9 K b : bitm ap de e je m pl
o

/*
* fil
e
: PALde m o.c
* proje ct : PIC PALSO FTW ARE VIDEO GENERATO R DEM O
* auth or
: Bruno Gavand
* com pil
e r : m ik roC V6.2
* date
: January 17, 2006
*
* de s cription :
*
Th is program dis pl
ays a cl
ock , a cal
e ndar and th e te m pe rature on a TVs cre e n
* and s h ow s h ow to us e th e PIC PALl
ibrary.
*
pre s s RB7 to s k ip th e w e l
com e s cre e n
*
to adjus tcl
ock and cal
e ndar, pre s s :
*
RB0 to adjus tm inute
*
RB1 to adjus th our
*
RB2 to adjus tday
*
RB3 to adjus tm onth
*
RB4 to adjus tye ar
*
RB5 to adjus tte m pe rature
*
pre s s RB7 atth e s am e tim e to de cre m e nt.
*
* targe tde vice :
* PIC18F4620 @ 32 M h z (8 M h z crys tal+ H S PLL)
*
* Lice nce :
* Fe e lfre e to us e th is s ource code atyour ow n ris k s .
*
* h is tory :
* cre ate d january 2007
*
* s e e m ore de tail
s on h ttp://w w w .m icro-e xam pl
e s .com /
*/
#incl
ude
#incl
ude

"PAL_ Library.h "


"picture s .h "

/*************
* DEFINITIO NS
*************/
/*
* graph
*/
#de fine
#de fine
#de fine
#de fine
#de fine
#de fine

ic cl
ock
CLK _ CENTER_ X 9 0
CLK _ CENTER_ Y 60
CLK _ RADIUS_ PSS 28
CLK _ RADIUS_ SS 25
CLK _ RADIUS_ M N 20
CLK _ RADIUS_ H H 15

#de fine DEG_ NBH ISTO


//pgina 0x35

16

//ce nte r
//cl
ock radius
//s e conds
//m inute s
//h ours
//num be r ofte m pe rature s am pl
es

/*
* num be r ofve rticalpixe l
s
* from 1 to 128 incl
ude d
* th e m ore pixe l
s you h ave :
* - th e l
e s s RAM you h ave
* - th e l
e s s M CU tim e you h ave
*/
#de fine PAL_ Y
128
/*
* s im pl
e tim e s tructure de finition
*/
type de fs truct
{
uns igne d ch ar s s ; //s e conds
uns igne d ch ar m n ; //m inute s
uns igne d ch ar h h ; //h ours
uns igne d ch ar m d ; //day in m onth , from 1 to 31
uns igne d ch ar w d ; //day in w e e k , m onday=0, tue s day=1, .... s unday=6
uns igne d ch ar m o ; //m onth num be r, from 1 to 12
//(and notfrom 0 to 11 as w ith unix C tim e !)
uns igne d int yy ; //ye ar Y2K com pl
iant, from 189 2 to 2038
}Tim e Struct;
/********************
* RO M CO NSTANTS
********************/
/*
* m onth nam e s
*/
cons tuns igne d ch ar m onth Str[13][4] =
{
"???", "Jan", "Fe b", "M ar", "Apr", "M ay", "Jun", "Jul
", "Aug", "Se p", "O ct", "Nov", "De c"
};
/*
* day ofw e e k nam e s
*/
cons tuns igne d ch ar w Days tr[7][4] =
{
"M on", "Tue ", "W e d", "Th u", "Fri", "Sat", "Sun"
};
/********************
* RAM VARIABLES
********************/
/*
* s cre e n m e m ory m ap
//pgina 0x36

* do notch ange th is l
ine !
*/
uns igne d ch ar PAL_ s cre e n[PAL_ X * PAL_ Y /8] ;
/*
* ge ne ralpurpos e s tring
*/
uns igne d ch ar s tr[20] ;
ch ar de gRe f;
//DAC te m pe rature re fe re nce
ch ar de gH is to[DEG_ NBH ISTO ] ;
//te m pe rature s am pl
e s buffe r
ch ar tIdx = 0 ;
//te m pe rature s am pl
e s inde x
uns igne d l
ong s e cO ffs e t= 0 ;
//re fe re nce tim e s tam p
uns igne d l
ong ol
dCtr = 0 ;
//fram e counte r back up
Tim e Struct ts ;
//tim e s truct
/*************************
* FUNCTIO NS
*************************/
/*
* adjus ttim e s tructm e m be r
*/
void adjus t(uns igne d ch ar *v, uns igne d ch ar m in, uns igne d ch ar m ax)
{
if(PO RTB.F7)
{
if(*v == m in) *v = m ax ;
el
s e (*v)-- ;
}
el
se
{
if(*v == m ax) *v = m in ;
el
s e (*v)+ + ;
}
}
/*
* conve rtval
ue v into s tring pointe d to by p, l
e ading z e ro bl
ank s ifbl
k is s e t
*/
void ch ar2s tr(uns igne d ch ar *p, uns igne d ch ar v, uns igne d ch ar bl
k)
{
*p = v /10 + '0' ;
if(bl
k & & (*p == '0'))
{
*p = ' ' ;
}
p+ + ;
*p = v % 10 + '0' ;
//pgina 0x37

p+ + ;
*p = 0 ;
}
/*
* draw s cre e n w ith de coration ifful
lis s e t, us ing vide o m ode m ode
*/
void draw Scre e n(uns igne d ch ar ful
l
, uns igne d ch ar m ode )
{
s tatic uns igne d ch ar os x = CLK _ CENTER_ X, os y = CLK _ CENTER_ Y,
om x = CLK _ CENTER_ X, om y = CLK _ CENTER_ Y,
oh x = CLK _ CENTER_ X, oh y = CLK _ CENTER_ Y ;
uns igne d int i ;
int
t;
uns igne d ch ar s s ;
uns igne d ch ar s x, s y, m x, m y, h x, h y ;
PAL_ control
(PAL_ CNTL_ START, m ode ) ;
if(ful
l
)
//draw ful
ls cre e n w ith de coration
{
PAL_ fil
l
(0) ;
PAL_ cons tW rite ( 0, 0, "\xC9 \xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\
xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite ( 1, 0, "\xBA PALLIBRARY DEM O \xBA", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite ( 2, 0, "\xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\
xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC", PAL_ CH AR_ STANDARD) ;
PAL_ box(0, 0, 127, 21, PAL_ CO LO R_ REVERSE) ;
PAL_ cons tW rite ( 3, 0, "\xC9 \xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCB\xCD\xCD\
xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite ( 4, 0, "\xBA
\xBA
\xBA", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite ( 5, 0, "\xBA
\xBA
\xBA", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite ( 6, 0, "\xBA
\xBA
\xBA", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite ( 7, 0, "\xBA
\xBA
\xBA", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite ( 8, 0, "\xBA
\xBA
\xBA", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite ( 9 , 0, "\xBA
\xBA
\xBA", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite (10, 0, "\xBA
\xBA
\xBA", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite (11, 0, "\xCC\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCA\xCD\xCD\
xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xB9 ", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite (12, 0, "\xBA
\xBA", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite (13, 0, "\xBA
\xBA", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite (14, 0, "\xBA
\xBA", PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite (15, 0, "\xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\
xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC", PAL_ CH AR_ STANDARD) ;
PAL_ w rite (4, 3, "H

:", PAL_ CH AR_ DH EIGH T) ;

PAL_ cons tW rite (12, 3, "TEM P. : ", 0x31) ;


//pgina 0x38

PAL_ cons tW rite (12, 17, "\xf8C", 0x31) ;


for(s s = 0 ;s s < 60 ;s s + + )
{
s x = CLK _ CENTER_ X - (cos E3(9 0 + 6 * s s ) * CLK _ RADIUS_ PSS) /1000 ;
s y = CLK _ CENTER_ Y - (s inE3(9 0 + 6 * s s ) * CLK _ RADIUS_ PSS) /1000 ;
PAL_ s e tPixe l
(s x, s y, PAL_ CO LO R_ W H ITE) ;
if((s s % 5) == 0)
{
PAL_ s e tPixe l
(s x + 1, s y, PAL_ CO LO R_ W H ITE) ;
PAL_ s e tPixe l
(s x - 1, s y, PAL_ CO LO R_ W H ITE) ;
PAL_ s e tPixe l
(s x, s y + 1, PAL_ CO LO R_ W H ITE) ;
PAL_ s e tPixe l
(s x, s y - 1, PAL_ CO LO R_ W H ITE) ;
}
}
}
if(PAL_ fram e Ctr > O l
dCtr)
{
uns igne d ch ar h ;

//it's tim e to update th e cl


ock & cal
e ndar

ol
dCtr = PAL_ fram e Ctr + 24 ; //pre pare ol
dCtr for ne xtupdate tim e
//conve rttim e s tam p to date and tim e
Tim e _ Epoch ToDate (s e cO ffs e t+ PAL_ fram e Ctr /25, & ts ) ;

/*
* draw anal
og cl
ock
*/
s x = CLK _ CENTER_ X - (cos E3(9 0 + 6 * ts .s s ) * CLK _ RADIUS_ SS) /1000 ;
s y = CLK _ CENTER_ Y - (s inE3(9 0 + 6 * ts .s s ) * CLK _ RADIUS_ SS) /1000 ;
m x = CLK _ CENTER_ X - (cos E3(9 0 + 6 * ts .m n) * CLK _ RADIUS_ M N) /1000 ;
m y = CLK _ CENTER_ Y - (s inE3(9 0 + 6 * ts .m n) * CLK _ RADIUS_ M N) /1000 ;
h = (ts .h h % 12) * 5 + (ts .m n /8) ;
h x = CLK _ CENTER_ X - (cos E3(9 0 + 6 * h ) * CLK _ RADIUS_ H H ) /1000 ;
h y = CLK _ CENTER_ Y - (s inE3(9 0 + 6 * h ) * CLK _ RADIUS_ H H ) /1000 ;
if((h x != oh x) || (h y != oh y))
{
PAL_ l
ine (CLK _ CENTER_ X, CLK _ CENTER_ Y, oh x, oh y,
PAL_ CO LO R_ BLACK ) ;
}
if((m x != om x) || (m y != om y))
{

//pgina 0x39

PAL_ l
ine (CLK _ CENTER_ X, CLK _ CENTER_ Y, om x, om y, PAL_ CO LO R_ BLACK ) ;
}
if((s x != os x) || (s y != os y))
{
PAL_ l
ine (CLK _ CENTER_ X, CLK _ CENTER_ Y, os x, os y,
PAL_ CO LO R_ BLACK ) ;
}
PAL_ l
ine (CLK _ CENTER_ X, CLK _ CENTER_ Y, h x, h y, PAL_ CO LO R_ W H ITE) ;
PAL_ l
ine (CLK _ CENTER_ X, CLK _ CENTER_ Y, m x, m y, PAL_ CO LO R_ W H ITE) ;
PAL_ l
ine (CLK _ CENTER_ X, CLK _ CENTER_ Y, s x, s y, PAL_ CO LO R_ W H ITE) ;
/*
* printdate and tim e
*/
ch ar2s tr(s tr, ts .s s , 0) ;
PAL_ w rite (4, 7, s tr, PAL_ CH AR_ DH EIGH T) ;
ch ar2s tr(s tr, ts .m n, 0) ;
PAL_ w rite (4, 4, s tr, PAL_ CH AR_ DH EIGH T) ;
ch ar2s tr(s tr, ts .h h , 1) ;
PAL_ w rite (4, 1, s tr, PAL_ CH AR_ DH EIGH T) ;
PAL_ cons tW rite (6, 2, w dayStr[ts .w d], PAL_ CH AR_ STANDARD) ;
PAL_ cons tW rite (7, 2, m onth Str[ts .m o], PAL_ CH AR_ DH EIGH T) ;
ch ar2s tr(s tr, ts .m d, 1) ;
PAL_ w rite (6, 5, s tr, 0x32) ;
w ordToStr(ts .yy, s tr) ;
PAL_ w rite (9 , 1, s tr + 1, PAL_ CH AR_ DSIZ E) ;
/*
* s ave ol
d val
ue for fas tanal
og cl
ock cl
e aning atne xtupdate
*/
os x = s x ;
os y = s y ;
om x = m x ;
om y = m y ;
oh x = h x ;
oh y = h y ;
t= de gRe f- Adc_ Re ad(4) ; //re ad te m pe rature s e ns or
t*= 221 ;
t/= 102 ;
t= 25 + t;

//te m pe rature coe fficie ntofth e s il


icon junction
//ge tth e re s ul
tin ce l
cius

/*
* adjus tl
im its
*/
//pgina 0x3A

if(t< -9 9 )
{
t= -9 9 ;
}
if(t> 9 9 )
{
t= 9 9 ;
}
/*
* ave rage val
ue s
*/
de gH is to[tIdx] = t;
tIdx+ + ;
if(tIdx == DEG_ NBH ISTO )
{
tIdx = 0 ;
}
t= 0 ;
for(i = 0 ;i < DEG_ NBH ISTO ;i+ + )
{
t+ = de gH is to[i] ;
}
t/= DEG_ NBH ISTO ;
/*
* printte m pe rature
*/
if(t< 0)
{
i = -t;
PAL_ cons tW rite (12, 11, "-", 0x31) ;
}
el
se
{
i = t;
PAL_ cons tW rite (12, 11, " ", 0x31) ;
}
ch ar2s tr(s tr, i, 1) ;
PAL_ w rite (12, 12, s tr, 0x32) ;
}
//re s tore vide o re nde ring ifitw as s toppe d
PAL_ control
(PAL_ CNTL_ START, PAL_ CNTL_ RENDER) ;
}
/*
* inte rrupts e rvice routine
*/
void inte rrupt(void)
{

//pgina 0x3B

/*
* do PALs tuff
*/
PAL_ ISR() ;
}

//l
ibrary cal
l

/*
* m ain program
*/
void m ain(void)
{
uns igne d ch ar i ;
/*
* I/O configuration
*/
ADCO N1 = 0x0f;
TRISA = 0xff;
PO RTA = 0 ;
TRISB = 0xff;
PO RTB = 0 ;
TRISC = 0xff;
PO RTC = 0 ;
TRISD = 0 ;
PO RTD = 0 ;
TRISE = 0 ;
PO RTE = 0 ;
de gRe f= EEPRO M _ re ad(0) ; //ge tte m pe rature cal
ibration from EEPRO M
/*
* de faul
ttim e and date
*/
ts .s s = 0 ;
ts .m n = 0 ;
ts .h h = 12 ;
ts .m d = 1 ;
ts .m o = 1 ;
ts .yy = 2007 ;
s e cO ffs e t= Tim e _ date ToEpoch (& ts ) ;
/*
* s tartvide o and dis pl
ay firs ts cre e n
*/

//pgina 0x3C

PAL_ init(PAL_ Y) ;
//initPALl
ibrary
PAL_ fil
l
(0) ;
//cl
e ar s cre e n
PAL_ picture (0, 0, l
ogo_ bm p, 128, 128) ;
//paintpicture
PAL_ control
(PAL_ CNTL_ START, PAL_ CNTL_ RENDER) ; //s tartvide o and re nde ring
i=0;
w h il
e (PO RTB == 0) //w aitfor a k e y to be pre s s e d
{
/*
* ch ange borde r col
or tw o tim e s pe r s e cond
*/
if(PAL_ fram e Ctr > 12)
{
PAL_ s e tBorde r(i) ;
i = !i ;
PAL_ fram e Ctr = 0 ;
}
}
PAL_ s e tBorde r(PAL_ CO LO R_ BLACK ) ;//cl
e ar borde r
draw Scre e n(1, PAL_ CNTL_ BLANK ) ;//draw ful
ls cre e n in bl
ank m ode (fas te r)
for(;;)
{
if(PO RTB & 0b1111111) //a k e y is pre s s e d
{
Tim e _ Epoch ToDate (s e cO ffs e t+ PAL_ fram e Ctr /25, & ts ) ;
/*
* cal
e ndar s e ttings
*/
if(PO RTB.F0)
{
adjus t(& ts .m n, 0, 59 ) ;
ts .s s = 0 ;
}
if(PO RTB.F1)
{
adjus t(& ts .h h , 0, 59 ) ;
ts .s s = 0 ;
}
if(PO RTB.F2)
{
adjus t(& ts .m d, 1, 31) ;
}
if(PO RTB.F3)
{
adjus t(& ts .m o, 1, 12) ;
}
if(PO RTB.F4)
//pgina 0x3D

{
if(PO RTB.F7) ts .yy-- ;e l
s e ts .yy+ + ;
}
s e cO ffs e t= Tim e _ date ToEpoch (& ts ) ; //ne w tim e s tam p
/*
* te m pe rature cal
ibration
*/
if(PO RTB.F5)
{
if(PO RTB.F7)
{
de gRe f-- ;
EEPRO M _ w rite (0, de gre f) ;
}
el
se
{
de gRe f+ + ;
EEPRO M _ w rite (0, de gre f) ;
}
}
w h il
e (PO RTB & 0b1111111) ;//w aitfor th e k e y to be re l
e as e d
PAL_ fram e Ctr = 0 ;
ol
dCtr = 0 ;

//re s e tcounte rs

}
draw Scre e n(0, PAL_ CNTL_ RENDER) ; //update s cre e n
}
}

//pgina 0x3E

También podría gustarte