//DESCARGA GRATUITA //
"intaño = 2 , núm e ro 6" /* SEPTIEM BRE 2009 */
de s arrol l o de una l ibre ría 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 puñado 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 ntación de l a "7m a Com pe te ncia Nacionalde Robótica"
.s taff núm e ro = 6;año = 2; Dire cción, Re dacción y Corre cción: 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 paña 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 Atribución-No Com e rcial -Sin O bras De rivadas 3.0”
.indice
Dis e ño y Diagram ación: Lucas M artín 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 ría de gráficos para GLCD Te cl ado m atriciale n PSI 7m a Com pe te ncia de Robótica Brújul a digitalde pre cis ión ¡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 lnúm 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 dición. 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 caída 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 ctrónica 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 página 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 níam os ante s de l cras h , a unas 100 e n l os dos o tre s días pos te riore s a l a re s tauración 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 cién com ie nz a a e xpe rim e ntar con l a el e ctrónica y program ación de m icrocontrol adore s e n l e nguaje C s e guram e nte s e s e ntirá m as cóm 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 núm 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 ación 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 tás s iguie ndo l a s e rie de artícul os de dicados a l a cons trucción 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 aún 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 icación 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 aboración ni e linte rcam bio de opinione s q ue tie ne l ugar e n e lforo. Se guram e nte podrás apre nde r m uch o m ás vis itándol o pe riódicam e nte y, s obre todo, ayudarnos a m e jorar l a re vis ta. ¡H as ta e lpróxim o núm e ro! Foro uControl: h ttp://w w w .ucontrol .com .ar/foros m f/inde x.ph p El e ctrónica y Se guridad Digital : h ttp://w w w .m axis im onaz z i.com .ar
//página 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 función 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 ría s e r pos ibl e aún para aq ue l l os e s tudiante s o aficionados q ue e s tán 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 artícul 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 función 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 .
//página 0x05
Elm ódul o cons is te bás 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 ación 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 iación 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 ntación 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 ntación 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 ión de e ntre 7.5 y 15V. Una bor-
//pรกgina 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 xión 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 ocurría 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 //página 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 tán e n re pos o, l as e ntradas s e m antie ne n a GND a través 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 pción, o de s vío 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 función 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 rás 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 través 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 podrían 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 lartícul o principal de nue s tra re vis ta núm e ro 4, as í q ue no de be rías te ne r probl e m as a l a h ora de de te rm inar l a función 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 //página 0x08
s ol o s e e m pl e a uno (+ V) y l os otros cuatro e s tán 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 función de cada pin a m ano cuando de cidas h ace r al gún program a para cargar
Si ya h as m ontado al guno de nue s tros proye ctos , e s tarás 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 a”e 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 baño de cl oruro férrico; 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 gúrate 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 nción 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 bién e s im portante q ue col oq ue s e lz ócal o de s tinado al PIC e n l a dire cción corre cta, ya q ue de h ace rl o m alpue de s confundirte cuando ins e rte s e lm icrocontrol ador, dañándol o.
//página 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 ión de e ntre 7.5 y 12V. ElLED “Pow e r”de be ría e nce nde rs e . Si e s as í, ve rifica con un m ul tím e tro q ue l a te ns ión 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 bién pue de s ve rificar q ue e n l os cone ctore s de e xpans ión e s té pre s e nte e s a te ns ión. 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 ición 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 trucción 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 lnúm e ro ante rior de l a re vis ta uControl ), podrás 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 ación 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 cuántas dis pone m os y s u im pl e m e ntación 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
//página 0x0B
En l a program ación de l os m icrocontrol adore s PIC l a m ayoría de l as ins truccione s e m pl e an dire ccionam ie nto dire cto, pe ro tam bién 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 fís ico). El re gis tro FSR se e m pl e a para “s e ñal ar o apuntar” a una dire cción 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 trucción 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 lcódigo 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 lcódigo 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 l“0” , ó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 ración l ógica o aritm ética re al iz ada da com o re s ul tado ce ro. Tam bién 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.
//página 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 finición de variabl e s **** Contador equ 0x20 ;Se l e ccionam os pos ición 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**** ;**** Configuración 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 Código de 7 s e gm e ntos .m ovfw INDF ;Le e m os código 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 ación **** 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 código 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.//página 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 lcódigo 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 código 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 código 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 código 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 código 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 código 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 código 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 código 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 código 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 código 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 //página 0x0E
Una de l as caracte rís 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 continúe con l o s uyo. H ay dos tipos de inte rrupcione s pos ibl e s , una e s m e diante una acción e xte rna (e s de cir por l a activación 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 rrupción:
com paradore s anal ógicos . • Inte rrupción provocada por e l m ódul o CCP e n m odo com paración o captura.
Cada fue nte de inte rrupción 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 ibición de e je cución. Si e s ta e n 0 bl oq ue ará l a s ol icitud de inte rrupción, y s i e s ta e n 1 pe rm itirá l a e je cución. Un bit q ue actúa 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 rrupción. 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 rrupción y e lbit PEIE (INTCO N • Fl anco as ce nde nte o de s <6>) q ue s e ría 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 cción 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 nvío de un dato por USART. • O curre un cam bio e n l os //página 0x0F
El bit GIE s e borra autom áticam e nte cuando s e re conoce una inte rrupción 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 rrupción con l a ins trucción RETFIE, e l bit GIE s e vue l ve a activar poniéndos e a 1. En cam bio l os bits s e ñal iz adore s o bande ras de inte rrupción de be n s e r pue s tos a ce ro por e l tratam ie nto de l a inte rrupción re al iz ada por e l us uario (program ador). Cuando una inte rrupción e s tá h abil itada (s u bit l ocal de h abil itación 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 rrupción). Es a partir de e s ta dire cción q ue s e de be col ocar e ltratam ie nto de l a inte rrupción, de te c-
guie nte ins trucción.
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 rrupción de fin de trans l e ctura y e s critura q ue m is ión 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 ación y h abil itación para e l rrupción de l l e gada de datos para pre s e rvar al gún 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 nción a l a inte rrup-ción e xte rna e n l a rrupción por cam bio de e s tainte rrupción 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. rrupción por cam bio de rrupción de fin de e s critura e s tado RB4-RB7. e e prom inte rna. 1. INTF: Indicador de inte rrupción e xte rna. PIE1. Re gis tro q ue • O curre un e ve nto q ue os bits de h abil itación s ol icita l a inte rrupción, e lbit 2. T0IF: Indicador de inte - pos e e l rrupción 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 riféricos . Elbit • Si e lbit l ocalde inte rrup3. RBI E: H abil it ación de int e PEIE de l re gis tro INTCO N cione s e s ta activado, e l bit rrupción 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 itación de cual q uie r vado s e produce l a inte rrup4. INTE: H abil itación de inte - inte rrupción de pe riférico. ción. rrupción e xte rna. • Se de s activa GIE. 5. T0IE: H abil itación de inte - 0. TM R1IE: H abil itación de • Elval or de lPC s e guarda rrupción por de s bordam ie nto inte rrupción 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 itación de inte - 1. TM R2IE: H abil itación de • Se e je cuta l a rutina de rrupción de pe riféricos . inte rrupción por de s bordaate nción de inte rrupción cre a7. GI E: H abil it ación 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 itación de l os re gis tros ne ce s arios y inte rrupción de l m ódul o de re al iz ando l a bifurcación coPIR1. Elre gis tro PIR1 Captura/Com paración/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. ción de l e ve nto por m e dio l iz ación indiv idual de l as 4. TXI E: H abil itación de de lbitbande ra. inte rrupcione s de pe riféricos . inte rrupción de fin de trans • Al final iz ar e l tratam ie nto m is ión USART. de le ve nto, s e de vue l ve n l os 0. TM R1IF: Indicador de 5. RCIE: H abil itación de val ore s de l os re gis tros l e gada de s al vados y s e borran por inte rrupción por de s borda- inte rrupción 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 itación de • La rutina de ate nción inte rrupción por de s borda- inte rrupción por cam bio de de be rá te rm inar con una e s tado de al guna de l as s ains trucción 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 rrupción de l m ódul o de 7. EEI E: H abil itación de (GIE=1) y l ee l a PILA para Captura /Com paración. inte rrupción 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 cución 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 gún s e a e lcas o.
//página 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 trucciรณn corrom pe l a bande ra Z , m odificando e lre gis tro de STATUS. Se gรบn 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 cรณdigo 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 rrupciรณn 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 rrupciรณn. 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
//pรกgina 0x11
;**** Rutina de s e rvicio de Inte rrupciรณn **** ; 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 rrupciรณn.;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 rrupciรณn.;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 rrupciรณn 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 finición 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 rrupción **** org 0x04 ;Atie ndo Inte rrupción.goto ISR ;**** Program a Principal**** ;**** Configuración de pue rtos *** org 0x05 ;O rige n de lcódigo 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 rrupción por RB0) m ovw fINTCO N ;**** Bucl e infinito **** Bucl e nop ; goto Bucl e ; ;............................................. ;**** Rutina de s e rvicio de Inte rrupción **** ;**** Inte rrupción 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 rrupción.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 //página 0x12
Fin_ ISR bcf INTCO N,INTF ;Lim piam os bande ra.re tfie ;Sal im os de inte rrupción.;.......................................... ;**** 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 rrupción.
Com o e ltitul o l o indica e s ta inte rrupción 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 rrupción 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 núm e ro de pine s re q ue ridos . Un te cl ado m atricial4×3 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//página 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 ión de te cl as ) e s tarán 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 rrupción. 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 gún 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 ación 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 cción de te cl a pul s ada: alocurrir una inte rrupción 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 //página 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 ración 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 bién 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 rrupción. para codificar e n ASCK II l a m ovfw NTe cl a cal l Tabl a_ TM atricial ;Codificación 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 finición de variabl e s **** NTe cl a e q u 0x20 ;Se l e ccionam os pos ición 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 rrupción **** org 0x04 ;Atie ndo Inte rrupción.goto ISR ;**** Program a principal**** ;**** Configuración 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 rrupción.m ovl w b'10001000' ;H abil itam os GIE y RBIE (inte rrupción 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 rrupción **** ;**** Inte rrupción 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 rrupción.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 rrupción.;**** Rutinas ***** //página 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 código. 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 ación 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 rotación 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 //página 0x16
l ibre ría de gráficos para GLCD e n C Cuando ne ce s itam os util iz ar un dis pl ay LCD gráfico (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 lcódigo 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 ría capaz de dibujar prim itivas s obre varios m ode l os de dis pl ays LCD gráficos o GLCD (por Graph ic Liq uid Cris tal Dis pl ay). H ay ve rs ione s de e s ta l ibre ría 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 bién 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 iés 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 taríam 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. //página 0x18
Es por e l l o q ue nos h e m os de cidido a e s cribir una l ibre ría 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 ría 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 ría. //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 función 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 trucción //Envio datos de inicial iz ación ----------------------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 función de l a l ibre ría q ue de be l l am ar nue s tro program a. Se e ncarga de inicial iz ar e lGLCD, y e lparám 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 función 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 parám 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 bién 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, página por página, de arriba h acia abajo, e s cribie ndo "0x00" o "0xFF" s e gún s e h aya e l e gido pintar o borrar.
Es ta e s
l a función q ue
//página 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 trucción //Com ie nz o, e n cada página, de s de l a dire cción 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 gráfica" 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 parám 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 vál 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 vál 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 píxe l es GLCD_ e nviaBYTE(GLCD_ l ado_ CS2, 0xFF * col or); //Encie nde /apaga píxe 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. } //página 0x1A
La l ine a tam bién re s ul ta indis pe ns abl e a l a h ora de dibujar un gráfico. Los parám 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 vál 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 vál 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 vál 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 vál 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 trucción 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 cción 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 cción 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 lpíxe l el se bit_ cl e ar(dato, y% 8); //apago e lpíxe 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 trucción 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 lpíxe 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);
//página 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 ctángul os de dibujan (inte rnam e nte ) m e diante cuatro l l am adas a l a función GLCD_ l ine a. Los parám 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 ctángul o, con val ore s vál 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 ctángul o, con val ore s vál 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 función de l a pos ición 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 ctángul o, con val ore s vál 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 ctán{ gul o, con val ore s vál idos de GLCD_ punto(x, y, col or); 0 a 63 (arriba a abajo). col or: un bit, "0" = re ctánguif(P < 0) l o e n bl anco, "1" = re ctángu{ 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 ctángul 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 bién 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 función GLCD_ l ine el se a. Los parám 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//página 0x1C
y + = incre m e nto_ y;} q uina s upe rior iz q uie rda de l el se re ctángul o, con val ore s vál 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 ctán} gul o, con val ore s vál 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 ctángul o, con val ore s vál 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 ctángul o, con val ore s vál 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 función 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 parám 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 vál i-
//página 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 vál 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 ctángul 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 rían 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 ctángul o GLCD_ re ctangul o(10,10,117,40,1); }
//página 0x1E
//----------------------------------------------------------------------//Dibuja un re ctángul 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 píxe l e s q ue "cae n" s obre l os e je s //carte s ianos . GLCD_ punto(x1, y1 + radio, col or); //página 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);} }
//pรกgina 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 ría. 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 continuación, e lcódigo 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; }
//página 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 través 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 artín 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 ducción 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 4×4, pos e e s ól o 8 pine s de cone xión y 16 te cl as a nue s tra dis pos ición. 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 fácil m e nte portabl e a //página 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 finición de pue rtos . TRISA = % 00000000 TRISB = % 00001111 'De finición 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 código 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 código e s ve r l a m e cánica 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 práctico s in m ayore s dificul tade s .
//página 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 robótica ElGrupo de Robótica y Sim ul ación (GRS) pe rte ne cie nte alDe partam e nto de Inge nie ría 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 lpaís : l a "Séptim a Com pe te ncia Nacionalde Robotica". //por: Grupo de Robótica y Sim ul ación // com pe te nciarobotica@ frbb.utn.e du.ar
La "Séptim a Com pe te ncia Nacionalde Robótica" 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 goría 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 año m e nor alSum o Cl ás ico. Por te rce r año 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 víde os de l a com pe te ncia e s tarán a s u dis pos ición e n //página 0x26
nue s tra nue va pagina w e b cuya dire cción 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 trucción de l os robots y tam bién 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 año. La ins cripción al ce rtam e n ce rrará e ldía 6 de novie m bre . Aq ue l l os participante s q ue te ngan dudas s obre s u participación 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 podrán com pe tir. La ins cripción s e ra a través de nue s tra pagina. La com pe te ncia dura un día s ol am e nte y e laño pas ado s e pre s e ntaron 71 robots e n todas l as cate gorías s ie ndo l a dis tribución m as o m e nos l a
s iguie nte :
La ins cripción 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 ría 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 través de una ins titución 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 cción de corre o e l e ctrónico: com pe te nciarobotica@ frbb.utn.e du.ar
//página 0x27
brújul a digitalde pre cis ión con s e ns or de e fe cto h al l Elfís 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 año1879 . De s de e ntonce s h an pas ado m uch os años 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 nóm e no. H acie ndo us o de e l l os podre m os cons truir una brújul a digitalde gran pre cis ión. //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 ión trans ve rs alq ue apare ce e n un conductor cuando e s tá s om e tido a un cam po m agnético. 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 tím e tro s e ns ibl e e ntre dos puntos trans ve rs al e s , alace rcar un im án s e podría m e dir una pe q ue ñís im a te ns ión. 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 rán 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 ión e ntre e s os dos puntos de lcabl e . Als e parar e lim án, l a te ns ión trans ve rs alde s apare ce . Para pode r m e dir e s ta te ns ión 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 //página 0x29
s ie ndo m uy poca cos a para nue s tro propós ito, ya q ue e l cam po m agnético 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 débilcom 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 pañía Al l e gro, q ue a s u s al ida nos e ntre ga una variación 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 ión 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 ificación. 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 agnético 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 ión de fue nte y s i dam os vue l ta e lim án, e nfre ntándol 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 tím 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 rán 10m V. Pe ro com o e l cam po m agnético de l a Tie rra produce 5m V, todavía 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 ntación INA122, de m uy bajo ruido y "railto rail ". Es te ch ip de pre cis ión 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 fácilde 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 ión m áxim a de 5V y m ínim a de 0, s ino q ue s u rango dinám ico e s bas tante m e nor, l o q ue nos trae rá probl e m as a l a //página 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 ificación de 560 ve ce s l a te ns ión e ntrante . Por l o q ue l os 5m V de lcam po m agnético te rre s tre s acarían 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 ión.
En un conve rs or A/D de 10 bits (1023 puntos de re s ol u-
ción) con una te ns ión de re fe re ncia de 5V, l a s al ida de 2,8V de lINA122 e q uival e a una variación de 572 puntos . Al girar 360º varias ve ce s e lm ontaje s e obtie ne una gráfica com o l a de l a figura 3. Se trata de una función 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 gráficas 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 gráfica de puntos com o e s ta l a de l a figura 5. Se trata de un círcul o pe rfe cto, función de l s e no y e lcos e no ge ne rados por e lcam po m agnético 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 ión q ue te ndrá nue s tra brújul a as í: 572 x 3.1416 = 179 6 puntos de circunfe re ncia totalde lcírcul o
//página 0x2B
360 grados /179 6 puntos = 0,2 grados de re s ol ución
Ah ora unas e cuacione s con
función arco-tange nte para obte ne r de e s ta gráfica 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 nci贸n: para q ue e s to funcione , h ay q ue ajus tar e l ce ntro de l "c铆rcul 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 i贸n 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)
//p谩gina 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 ación 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 fácilde de s arrol l ar. Sin e m bargo, ah ora podrás h ace rl o. Es te artícul o te m os trará cóm 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 núm 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 ación. //por: Bruno Gavando // bruno.gavand@ ad-val ore m .fr
¿Por q ue una bibl iote ca PAL para PICs ? Si e s tás util iz ando PICs , pos ibl e m e nte al gun día inte ntas te cons truir un dis pos itivo proce s ador de víde 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 víde o, pos ibl e m e nte h ayas vis to al guna de e s tas páginas w e b: Rick ard Gune e s PIC PO NG y Eric Sm ith víde 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 carácte 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 rápida 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 víde o //página 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 ría. 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 ación h oriz ontalde ls is te m a PAL. La l ibre ría 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 crítico, 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 lcódigo fue nte ). La l ibre ría 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 función pre para l a l ibre ría 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 ría tom a e lcontrol de lTIM ER0 y s us inte rrupcione s as ociadas . Tam bién util iz a e lPO RTD.
Es ta función control a l a ge ne ración de l a s e ñalde vide o. Cuando com ie nz a l a s incroniz ación 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 función l l e na l a pantal l a con un patrón 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 función cam bia e lcol or de lborde q ue rode a l a im age n.
Es ta e s l a función q ue pe rm ite dibujar un punto e n una pos ición de te rm inada de l a pantal l a. //página 0x2F
Prototipo:
void PAL_ init(uns igne d ch ar y)
Parám e tros :
y : núm 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: Parám 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 ación PAL. PAL_ CNTL_ START : Com ie nz a s incroniz ación PAL. PAL_ CNTL_ STO P : De tie ne l a s incroniz ación 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 cución 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)
Parám e tros :
c : Patrón de re l l e no
De vue l ve :
Nada
Re q uie re :
La e je cución 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)
Parám 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 cución 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 cución pre via de PAL_ init();
Eje m pl o:
PAL_ s e tPixe l (10, 20, PAL_ CO LO R_ REVERSE);
Parám 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 )
Parám 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 cución 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 función dibuja una l ine a de s de (x0, y0) a (x1, y1).
Es ta función dibuja un circul o con ce ntro e n (x,y) y radio z .
Es ta función dibuja (y pinta) un re ctángul o.
Es ta función dibuja un re ctángul o vacío.
Es ta función 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 función 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 función 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 .
//página 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 cución pre via de PAL_ init();
Eje m pl o:
PAL_ circl e (30, 30, 5, PAL_ CO LO R_ W H ITE);
Parám 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 )
Parám 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 cución 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 cución pre via de PAL_ init();
Eje m pl o:
PAL_ re ctangl e (10, 10, 30, 30, PAL_ CO LO R_ W H ITE);
Parám e tros :
//página 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 ición (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 función 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 función inte rrupt(). Ate nción: s i e s tán 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 : Código 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 años 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 cución 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 años 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 cución 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 años 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 cución pre via de PAL_ init();
Eje m pl o:
PAL_ w rite (0, 5, m yCons tantString, PAL_ CH AR_ STANDARD);
Parám e tros :
Parám e tros :
Parám e tros :
//página 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 cución pre via de PAL_ init();
Eje m pl o:
PAL_ picture (0, 0, pict, 128, 128);
Parám 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
//página 0x33
Prototipo: void PAL_ ISR() Parám e tros : De vue l ve : Nada Re q uie re :
La e je cución 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 día, RB3 e lm e s y RB4 e l año. 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í. //página 0x34
Elarch ivo z ip contie ne : PAL_ l ibrary.c, 37 K b : Código 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 : Código de le je m pl o PALde m o.e e d, 1 K b : De finición 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 //pรกgina 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 //pรกgina 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' ; //pรกgina 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) ; //pรกgina 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)) {
//pรกgina 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 */ //pรกgina 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) {
//pรกgina 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 */
//pรกgina 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) //pรกgina 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 } }
//pรกgina 0x3E