Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ucontrol Revista 0006
Ucontrol Revista 0006
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
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
//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
//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
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 .
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.-
;
; 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.-
//pgina 0x0C
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:
//pgina 0x10
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
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
equ
equ
0
1
;pin RB0
;pin RB1
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, #
;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
//-------------------------------------------------------------------------------//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);
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.
#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.
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
//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
//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);
}
//-------------------------------------------------------------------------------//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);
}
#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)
//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
//Inicial
iz o e lGLCD, e nce ndido.
//Lim pio l
a pantal
l
a
//pgina 0x20
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.
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.
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 iguie nte :
//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
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-
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
' ------(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
'------------------------------------------------------------------
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
Com o l
a pantal
l
a de vde o
//pgina 0x2E
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 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:
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 :
De vue l
ve :
Nada
Re q uie re :
Eje m pl
o:
PAL_ control
(PAL_ CNTL_ START,
PAL_ CNTL_ RENDER);
Prototipo:
Parm e tros :
c : Patrn de re l
l
e no
De vue l
ve :
Nada
Re q uie re :
Eje m pl
o:
PALL_ fil
l
(0);
Prototipo:
Parm e tros :
De vue l
ve :
Re q uie re :
Eje m pl
o:
Prototipo:
De vue l
ve :
Re q uie re :
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 :
Re q uie re :
Eje m pl
o:
PAL_ l
ine (0, 0, 127, 127, PAL_ CO LO R_ W H ITE);
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 :
Re q uie re :
Eje m pl
o:
PAL_ circl
e (30, 30, 5, PAL_ CO LO R_ W H ITE);
Parm e tros :
Prototipo:
Parm e tros :
De vue l
ve :
Re q uie re :
Eje m pl
o:
Prototipo:
De vue l
ve :
Re q uie re :
Eje m pl
o:
PAL_ re ctangl
e (10, 10, 30, 30, PAL_ CO LO R_ W H ITE);
Parm e tros :
//pgina 0x31
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 :
Eje m pl
o:
Prototipo:
De vue l
ve :
Re q uie re :
Eje m pl
o:
Prototipo:
De vue l
ve :
Re q uie re :
Eje m pl
o:
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 :
Eje m pl
o:
Parm e tros :
//pgina 0x33
Eje m pl
o:
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.
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
/*
* 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
/*************
* 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
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
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;
/*
* 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