Untitled 1

270

Click here to load reader

Transcript of Untitled 1

Page 1: Untitled 1

COMPILADOR C CCS s:Y SIMoLADOR PROTEUSPARAMICROCONTROLADORES PIC

EduardoGarcia Breijo

11.Alfaomega marcomboediciones t s c n t o a s

Page 2: Untitled 1

COMPILADOR C CCSy

S.MULADOR PROTEUSPARA

M.CROCONTROLADORES PIC

Eduardo Garcia Breijo

11.Alfaomega ediciones r e c n t c a s

Page 3: Untitled 1

Datos catalograflcosGarcia. EduardoCompilador C CCS y simulador PROTEUS paraMicrocontroladores PIC

Primera Edici6nAlfaornega Grupo Editor, SA de C.V., Mexico

ISBN: 978-970-15-1397-2Formato: 17x 23 em P6ginas: 276

Compilador C CCS y simuJador PROTEUSpara Microcontroladores PICEduardo Garcia BreijoISBN: 978-84-267-1495-4. edici6n original publicada por MARCOMBO, SA, Barcelona. EspanaDerechos reservados @ MARCOMBO, S.A.

Prirncra edici6n: Alfaornega Grupo Editor, Mexico, junio de 2008.

© 2008 Alfaomega Grupo Edltor, S.A. de C.V.Piragoras 1139,Col. Del Valle. 03100, Mexico D.E

Miernbro de In Camara Nacionnl de la Industria Editorial MexicanaRegistro No. 2317

Pag. Web: hUp:!!www.alfaomega.com.mxB-mail: [email protected]

[SBN: 978-970-15-1397-2

Derechos reservados:Esta obra es propiedad intelectual de su autor y los derechos de publicaci6n en lengua espanola hansido legalmente rransferidos al editor. Prohibida su reproducci6n parcial 0 total por cualquler mediosln permiso por escrito del propietario de los dereehos del copyright

Nota importante:La informaci6n contcnida en esta obra tiene un fin exclusivamente clidlictico y, por 10 tanto. no est6previsto su aprovechanuento (I nivel profesional 0 industrial. Las indicacloncs tecnicas y prograrnaslncluidos, han sido elaborados con gran cuidado por eJ autor y reproducidos bajo estrictas normasde control. ALFAOMEGA GRUPO EDITOR. SA de C.V. no sera jurfdicarnente responsabtcPOI':errores u ornisiones; dniios y perjuicios que se pudieran atribuir al uso de la informacioncomprendida en esre libro y en el CD-ROM adjunto. ni por Inutilizaci6n indebida que pudiero cLirscle.

&lici6n autorizada para venta en Mexico y todo el continente arnericano.

Impreso en Mexico. Printed in Mexico.

fl.:mpresas del grupo:Mexico: Alfaomega Grupo Editor.S.A. de C.V. - Piulgof'd,\ I 139. Col. Del Vulle. Mexico, D.P. -C.P. 03100.Tel.: (52-55) 5089-7740 - Fax: (52-55) 5575-2420/2490. Sin coste: 01·800·020-4396E-moil: [email protected](Celombla: Alfaorneg« Colombiana SA - Carrera 15 No. 64 A 29 - PBX (57·1) 2100 122flux: (57-I) 6068648 - E-mail: scliontc(/hllfnomegn.com.coChUe: Alfaomega Grupo Editor, S.A. - General del Caruo 370-Provldenciu. Santiago. ChileTeL: (56-2) 235-4248 - Fax: (56-2) 235·5786 - E-mail: [email protected]: Attaorncga Grupo Editor Argentino. S.A. - Paraguay 1307 P.B. "II". Capital Federal.Buenos Aires. C.P. 1057 Tel.: (54-II) 4811-7183/8352, E-mail: [email protected]

Page 4: Untitled 1

,Indice analitico

1. ISIS de PROTEUS VSM 11.1 Introduccion 11.2 Captu ra electronica: entorno gcifico ISIS 21.3 Depuracion de los sistemas basados en PICmicro .l22. Compilador CCS C 232.1 Introduccion 232.2 Estructura de un programa 242.3 Tipos de datos 242.4 Las constantes 252.5 Variables 262.6 Operadorcs 272.6.1 Asignacion 272.6.2 .Arirmeticos 272.6.3 Relacionales 282.6.4 Logicos 282..6.5 De bits 282.6.6 Punrcros 282.7 Funciones 292.8 Declaraciones de control 302.8.1 IF-ELSE 312.8.2 SWITCH. 332.8.3 FOR 342.8.4 WIIILE / DO-WH]LR 352.8.5 Otros 372.9 Comentacios 372.10 Directivas y funclones (preprocessor commands y built-in functions) 382.10.1 Direcrivas 382.1 0.2 Funciones , 402.11 Librerfas, drivers y ejemplos .432.12 Entornc de rrabajo de CCS C Compiler 432.12,1 lntroducci6n 432.12,2 Enrorno de traba]o 443. La gesti6n de los puertos 553.1 Introduccion 553.2 Gcstion de pucrtos en C 573.2.1 A craves de la RAM 57

v

Page 5: Untitled 1

3.2.2 ,\ craves de las dircctivas 603.2.3 Con punrcros 623.3 Entradas )' salidas 653.3.1 LCD 653.3.2 LCD gr:ific() 703.3.3 Teclado (keypad })(4) 754. Las inrerrupciones y los temporizadores 834.11nt.roducci6n 834.2 Interrupciones 834.2.1 lnrcrrupciones en C 884.3 'rn\IERO 944.3.1 Tl iVLERO cn C 954.4 T1l\lERJ )' Tll\1ER2 994.4.1 TIJ\fER 1 YTTh1E.R2 en C 1025. Convertidor Anal6gico - Digital 1175.1 Introduccion 1175.2 Modulo Convcrtidor (gama media) 1185.2.1 Regisrros rSR 1195.2.2 Proccso de conversion 1225.2.3 Efcceo del modo SLEEP}, RESET en el modulo Al) 1245.3 Modulo AD en C 1256. Modulo CCP - Comparador, Captura y PWM 137G.1 lntroduccion 1376.2l\lodo Caprura 1396.3 Modo Cornparacion 1406.4 Modo P\'V'M 1416.5 Modulo CCP en C 1437. Transmision seric 1677.1 lniroduccion 1677.2 EI modulo USi\RT/SCl 1687.2.1 Irnroduccion 1687.2.2 EJmodulo USART en C 174-7.2..3 La norma RS232 1807.3 Puerto sene sincrono (SSP) 1907.3.1 lnterfaz Imer-Circuiros (l2C) 1908. Gama Alta - PIC18 2138.1 Iruroduccion 2138.2 Organizacion de la memoria 2148.2.1 Arquitectura HARDVARD 2158.2.2 Memoria de Programs 2158.2.3 Ccntador de Programs 2168.2.4 Memoria de Configuracicn 217

vi

Page 6: Untitled 1

8.2.5 Pila 21-8.2.6 Memoria de Datos 2188.2.7 Memoria EEPR01vl 2198.2.8 Modes de Direccionamienro 2208.2.91nrerrupdones , 2208.2.9. J Regisrros de salvaguarda 2228.2.10 Registro W 2238.2.11 Oscilador 2238.2.12 Unidades Funcionales 2238.2.12.1 Puertos de entrada/salida 2248.2.12.2 Temporizadores ,2258.2.12.3 Convertidor Analogico-Digiral 2268.2.12.4 Canal de Comunicacion Serle (EUSART) 2278.2.12.5 Modulo Master SSP (MSSP) 2288.2.12.6 Modulo de Cornpracion/Captura/Pwlvl (CCP) 2288.2.12.7 Modulo Comparador 2308.2.12.8 Modulo de referencia 2308.2.12.9 Modulo detector de Alto/Bajo Volrajc 2309. RTOS - Real Time Operating System 2399.1 lntroducci6n 2399.2 RTOS en C 24010, USB - Universal Serial Bus 25110.1lntroducci6n ,.251, O.l.l11igracion de RS232 a USB 252LO.t.l.1 USB CDC (Communication Device Class) 25210.2 USB con ISIS y CCS C ; 25310.2.1USB en ISIS 25310.2.2 USB en CCS C 254

vii

Page 7: Untitled 1

IntroduccionEI estudio de los microcontroladores PIC no consiste solo en dominar su arquitec­tura intema 0 el codigo rnaquina sino tambien en conocer programas auxiliares quefacilitan el disefio de los sistemas donde intervienen.

Entre los muchos programas para el desarrollo de sistemas con PICmicro® desta­can, par su potencia, el PROTEUS VSM de ©Labcenter Electronics y el compiladorC de ©Custom Computer Services Incorporated (CCS).

El programa PROTEUS VSM es una herramienta para la verification via softwareque permite comprobar, practicamente en cualquier disefio, la eficacia del progra­rna desarrollado. Su combination de simuladon de codigo de programacion y si­mulacion mixta SPICE permite verificaciones analogico-digitales de sistemas basa­dos enmicrocontroladores. Su potencia de trabajo es magnifica.

Por otra parte, tenemos el compilador C de CCS, ya que despues de conocer y "do­minar" ellenguaje ensamblador es muy uti! aprender a programar con un lenguajede alto nivel como el C. EI compilador CCS C permite desarrollar program as en Cenfocado a PIC con las ventajas que supone tener un lenguaje desarrollado espe­cificamente para un microcontrolador concreto. Su facilidad de usa, su cuidadoentomo de trabajc y la posibilidad de compilar en las tres familias de gamas baja,media yalta, Ie confieren una versatilidad y potentia muy elevadas,

Al escribir este libro se planteanmuchas dudas, sobre todo a la hera de concretarel temario. Escribir profusamente sobre losPIC 0 sobre el PROTEUS 0 sobre el CCSC supone, casi seguro, escribir un libro para cada uno de estos temas. Por ello, elplanteamiento ha sido diferente, desarrollar los conocimientos basicos necesariospara manejar cada prograrna, apoyarlo con elmayor numero de ejercicios y dejaral lector la posterior arnpliacion de conocimientos. Asi 10he decide en base a Ia

, experiencia que me da estar impartiendo dases sobre PIC en Ia carrera de Ingenie­ros Tecnicos Industriales, especialidad de Electronica Industrial, de la UniversidadPolitecnica de Valencia.

Con estas premisas espero que ellibro sirva a lector para aumentar sus conocimien­tos sobre el PIC 0 para iniciarlos en el caso de los que desconozcan este mundo.

ix

Page 8: Untitled 1

1. ISIS de PROTEUS VSM

C pitulo 1

ISIS de PROTEUS VSM

1•1 Introduccionillentorno de disefio electronico PROTEUS VSM de LABCENTER ELECTRONICS(W1.ow.labcenfer.co.lIk) ofrece la posibilidad de simular c6digo microcontrolador dealto y bajo nivel y, simulraneamente, con la simulacion en modo mixto de SPICE.Esto permite e1 disefio tanto a nivel hardware como software y realizar la simula­cion en un mismo y unico entomo. Para ello, se suministran tres po ten tes subentor­nos como son ellSlS para eldisefio grafico, VSM (Virhtaf SystemModelling) para lasimulaci6n y elARES para el disefio de places (figura I).

The V§M Advantages_k

~+"--- ~~ .... ~"~_:d~W:.:N:!M~O:~~ .. __ ----"~

- ......._,

, Con las herramientas tradlcionales de disel'io. al desarrollo del software y la comprobaciOn del sislBmano puede reiiflizars9 hasta que sa dasarrolla un prototipo real. esto puede suponer semanas de retraso.Ademas. sise /ocalrza algun error en el aiseno hardware. la totalidad de! proceso debe repeJjrse.

Usando Proteus VSM. al desarrollo del software puet:Jecomenzar tan pronto como al esqusmatiCO escJjbuJadoy la combinac;6n de software y hardware puede ser testeada antes del montar a/ prolDtipo.

Figura 1. Entomo de trabajo PROTEUS ffuente: Labcenter Electronics)

1

Page 9: Untitled 1

Compllador C CCS y Simulador PROTEUS para Microcontroladores PIC

1.2 Captura electronica: enterne grafico ISIS

JSIS es un potente programa de disefio electronico que permite realizar esquemasque pueden ser simulados en el entomo VSM 0 pasados a un circuito impreso yaen el entomo ARES.

Posee una muy buena coleccion de Iibrerfas de modelos tanto para dibujar, simularo para las placas. Ademas, permite Ia creacion de nuevos componentes, su mode­lizacion para su simulacion e, Incluso, la posibilidad de solicitar al fabricante (Lab­center Electronics) que cree un nuevo modele.

Sin entrar profundamente en como utilizar dicho programa (requeritia un Iibrosolo para ello), a continuacion se explican las bases para dibujar cualquier circuitoelectronico. El programa ISIS posee un entomo de trabajo (figura 2) fonnado pordistintas barras de herramientas y la ventana de trabajo.

Vontuna de Edicl6n

)lentajJa de Trabajo

CQI7Iando.s de:rolllclcln oj r~f[exl6n

Barrade slm~elOnBaI1il de estadc>

CO~ .. ' tLI,OJ I. j 11.1 .. 1,FIooI""'r1 _

Figura 2. EI e"tor"o de trabaJo del programa ISIS

Varies de estos menus tambien se pueden utilizar con la ayuda del boton derecho delraton, Alpulsarlo en cualquier parte del entomo de trabajo aparece un menu contex­tual donde se puedenir obteniendo los distintos submenus de trabajo (figura3).

2

Page 10: Untitled 1

:{> Comoonent

s..ItIct All ObJects +.Mctl)nOot;; le><l:Sc...,r J;;'8uS:Q:~

gT~I~DeWaPin

L<it1lP>s!Ml r_ R~corder

~@ DC

~VolooePr¢e stIlE~ Cllfent Probe Pl.lSf:

~ v.tuallY..truroent ElCP

/UM SfFM

Deox P'W1.1N

OCl'de FILC

~At<AlOIO

C:>PathOSTATE

AT ••t DEDGE

ElSymboiMA.SE

.M4Irl<etDCLOCK

.....,..,.,.,.. ~ATTERN

1. ISIS de PROTEUS VSM

Figura 3. Submenusde trabaJodel boton derechodel raton

Para dibujar, 10primero es coloear Jos distintos componentes en la hoja de trabajo,Para ello, se selecciona el modo cornponenres (figura 4) y, acto seguido, realizar unapulsaci6.n sobre el boron P de la venlana de componentes y librerfas (figura 5).

Figura 4.Modo componentes Figura 5. Boton Hplck"

Tras activar el boton P se abre la ventana para la edicion de componentes (figura 6)donde se puede buscar el componenre adecuado y comprobar sus earacteristicas.

Al localizar el components adecuado se realize una doble pulsaci6n en et de talforma que aparezca en la ventana de componentes y librerias (figura 7). Se pue­de realizar esta accion tantas veces como componentes se quieran incorporar alesquema. Una vez finalizado el proceso se puede cerrar la ventana de edicion decomponentes.

3

Page 11: Untitled 1

Compilador C CCS V Simulador PROTEUSpara MicrocontroJadores PIC

Permite locallzar por tlpo, clase y fabricante

Encapsuladopara placa

Pequeilo editor de las caracterisllcasde un componente (situar el raton sobre el)

Figura 6. Ventana para la edItion de componentes

PI LJ.n'lI~IIII'-E'_C16f876RE"SSW·SPST·MOM

w

Figura 7. Los componentes anadldos

Para situar un componente en e] esquema tan s610 debemos seleccionarlo de lalista. AI hacerlo se puede comprobar su orientacion (tal como se representara en elesquema) en la ventana de edicion (figura 8). Si deseamos modificar la rotacion 0la reflexion del components podemos acceder a ella a traves de Labarra de herra­mientas correspondiente (figura 9).

Haciendolo de esta forma, "todos" los componentes de la Iista tendran Ia mismaorientation (si se desea orientar un unico componente deberemos hacerlo una vezya situado ell el esquema).

4

Page 12: Untitled 1

1. ISIS de PROTEUS VSM

B~~+ .

E :i:Q: PI L I

LED·BLUE~ PlC16fIYS

;~'-.

C> ft:CI S'W·SPST·MOMr:

Figura 8. Seleccion y orientaciondel componente

Ahora solo falta realizar una pulsacion sobre la ventana de trabajo y se colocarael componente. El cursor del raton se convierte en un lapiz blanco (figura 10). Sepueden colocar varios componentes del mismo tipo simplemente realizando variaspulsaciones, Para terminar de colocar un componente se debe selecdonar otro com­ponente de la lista 0pasar a otro modo de trabajo.

Figura 9. Barra de rota ciony reflexion

~ Up£! blanco: die en boron Izquierdo coJoen el cOmpoocolC

Figura 10. Cursor en el modo de colocacion

Es importante activar la herramienta de referenda automatica (Real Tillie Annoia­tion). De esta forma, los componentes tendran una referenda distinta y de formaconsecutiva; en los circuitos integrados con varios cornponentes encapsulados tam­bien se referenciaran segun dicho encapsulado (UIA, U1B, etc.). Esta herramientase activa 0 desactiva desde 1aoption de menu TOOLS -7 Real Time Annotation.

Una vez situ ados los componentes en el area de trabajo se pueden mover, alpasarpor encima del componente el cursor se convierte en unamano (figura 11)y alrea­lizar una pulsacion, el cursor se transforma en una mano con una cruz, lndicandoque se puede mover el componente (quedan seleccionados al ponerse en IOjO) y sepuede arrastrar (atencion: si se vuelve a realizar otra pulsacion del boton izquierdose editan las caracterfsticas del componente). Tammen se puede cambiar su orienta­don utilizando los comandos de rotation y reflexion a traves de una pulsation delboron derecho del raton (figura 12) y se pueden eliminar con dos pulsadones con elboton derecho sobre elios (0 con el boton derecho y el comando Delete Objet).

\P"l\..J Seleccion del componerne

Figura 1,.el cursor en modo de selecCion y mover

5

Page 13: Untitled 1

Compllador C CCS Y Simulador PROTEUS para Microcontroladores PIC

+ Drao ObjectEdit PIope.tles CttI't-€DeleteOb)ojtt

C Rotate Clod<l\llse Ted~·l)e.SusU action

:0 f(!)I:ateAntKJoc~IMS. Tede·tle-Adicion

C RotatellSOde'Jlees.. )1.01'11"01 ad...MtY~'fi<

f) DIsplay Mallei Hdp CblH1OJ ~ey ~tasl\eet CtrI+D

Figura 12. Menu contextual de un componente actlvado por el boton derecho del raton

Todas estas aceiones ee pueden realizar indlvidualmente 0 de forma colectiva, esdecir, se pueden agrupar varies componentes a traves de pulsaciones consecutivassobre enos (manteniendo la tecla <Control> pulsada) 0 dibujando una ventana conel bot6n Izquierdo y arrastrandola sobre los mismos (figura 14).

I'leoillft 1RDIRfi12

R03lPOMFUloIRBa

RIIfliPGCR811PGO

.01", kEO-BlU~

4 SN1\ SW·SPST.MOf,1

1-RCOITIOSO/TICKIRC!1T10SIICCP2

RC2ICCI'I~~=IRCil/SOO

RCfIITX/CKReT/IIX10!

n R1yl~

Figura 13. Los componentes en eJ-'rea de trabaJo

Una vez selecclonado e1conjunto de componentes (se marcan todos en rojo) debemos utilizer 1aherrarnienta de gru po (figu ra 15), que tambien aparece tras pulsar elboron derecho, Con esta herramienta se pueden copiar, mover, rotar 0 ellmlnar loscom ponentes seleccionados,

6

Page 14: Untitled 1

1. ISIS de PROTEUS VSM

'" ......'* u.... ,.,. ~ .... ,.._ ... ,.... :w... ,.. [;a_iii lilt) .Q Q, •• +'1""D • 1... Cr:SII ......... .''''''~ !:I.a., 'Dil!Ir~ ------ -- I:',

I I J k..f!:

'l' ,\.~:;I) • \PCtlolUlif

l.

[!..0;

'" v, fi.' ~ .,. - _ h

~ ...' u F;l -'= 11 !:WI/ ~- - ~ .~:.. ...,..,.... !::......Ift - . .p

._ =IiCI 1:s- ~i,"' ~~-ulit ........ ,., lOt

._ H -if

A "-=:;"V •• 1CWt\O'I

+ ~-., "'ft

cor~ ~, Lt..LLf"OIIiJ ... ... .... •• "......... -. - ~.• .,. ....'"",,",-

Figura '4.Selecd6n de varlos componentes

I~~DDIa au

Figura 15.La heN'amlentade grupo

Para unir los componentes con cables hay que situarse en los extremes de los termi­nales, el cursor se convierte en un lapiz verde (figura 16).Ahora se pueden ejecutardos acciones 0 ir marcando el camino hasta el destine con distintas pulsaciones(figura 17) 0 realizar, directamente, una pulsaci6n en el destine y dejar que [SISreal ice el camino. Para ello, debe estar activada la herrarnienta TOOLS ~ WireAutorouter.

+01LE0.8LL

Figura 16. 'n.do de cable Figura 17.Clrculto-a manoH

7

Page 15: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

Las uniones entre cables se pueden realizer de forma autornatica. Para ella, mien­tras se traza un camino debemos realizar una pulsacion sabre el cable objeto de launion electrica (figura 18). Tambien se pueden realizar de forma manual medianteel modo de union (figura 19)i en este modo tan solo hay que ir hacienda pulsacio­nes sobre los puntos donde deseamos realizar la union.

Figura 18.Union ehktr.ca entre cables Figura '9.Modo de union

Se puede modificar el trazado de los cables. Para ella, se realiza una pulsaci6n so­bre el cable, en ese instante el cursor se convierte en una doble flecha (figura 20) yse puede arrastrar el raton para modificar el cable.

t Doble flccha: mover cables

Figura 20. Mover los cables

Tambien se pueden utilizar buses para las uniones multicable. Los buses permitenconectar varios terminales entre si utilizando un unico elemento (figura 21); en estecaso, el cursor se convierte en un lapiz azul (figura 22). Pero para distinguir losdistintos cables que forman parte del bus y distribuirlos en la entrada y en la salidase deben etiquetar mediante labels. En el caso de los cables se indicara una etiqueta{mica LCDO, LCD1, etc., y al bus una etiqueta conjunta segun el formate LCD[O..31que indique el nombre y la cantidad de cables que 10forman.

lCOO

lCD2!.C03

Figura 21. Cableado por bus

8

Page 16: Untitled 1

1. ISIS de PROTEUS VSM

, Lapi» azul: trazado de buses.

Figura 22. Cursor en modo de trazado de bus

1::.1etiquetado tambien permite unir cables virtualmente. Para eliot tan solo es nece­sario que los dos cables se llamen igual almque no esten conectados entre sf. Paraetiquetar cables 0 buses se utiliza el modo label (figura 23). Al activar este modo yrealizar una pulsaci6n sabre un cable 0 bus se abre una ventana donde podernos in­troducir la etiqueta, adem as de seleccionar posicion, orientacion y estilo (.£igura24).

.,,..I.ctt Cerit., A.:.QhI

1~ Midrit. BOIImI

Figura 23. Modo label Figura 24. Ventana de edlcion de etiquetas

Otro modo de union virtual es a traves de terminales. Al activar e1modo terminal(figura 25) se pueden seleccionar distintos tipos de terminales, entre ellos el utiliza­do por defecto (default). Al utilizar este terminal en varies componentes y darle elmismo nombre en todos ellos se consigue una union electrica.

:f>-+ ~:I®

lAlfl C-~

-=0,;~<n-

".:(J: PI "1'

~II:<:> OUTPUTCI BfOIRD- POWER

QROUNDL BUS@

\0)~".

Figura 25. Modo terminal

9

Page 17: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

Figura 26. Union e'ectrlca it traves de termfna.es

Mediante este modo tambien se pueden colocar las masas y alimentaciones delcircuito utilizando las opciones Ground y Potier (figura 26). De esta forma se puedefinalizar el circuito (figura 27).

OSC1/CLKINOSC21CLKOUT

L-_":""; MCLRNpp/lHV

RAOfANQRA11ANlRA2JAN2NREF­RA3lAN3I\IREB­RA4fTDCKrRASlAN4ISS

Figura 27. Orculto cab'eado

Tan solo queda modificar las caracteristicas de los componentes que 10 requieran,POt ejemplo modificando el valor de los componentes pasivos. Para eUo,se seleccio­na un components realizando una pulsacion conel boron derecho, aparece el menucontextual y se selecciona la opcion EDITPROPERTIES; tambien se puede utilizerel modo edicion (figura 28) en el cual tan solo es necesario haceruna pulsaci6n conel boton izquierdo sobre el componente; en este modo el cursor se convierte en unaflecha (figura 29). AI ejecutar esta acci6n se abre la ventana de edicion donde sepueden cambiarlas caracteristicas de los componentes (figura 30), pOI ejemplo la.resistencia de lOK a 180 ohm. Tambien se puede editar directamente la referencia 0

el valor de un componente sila pulsacion se realiza encima de estes elementos.

10

Page 18: Untitled 1

1. ISIS de PROTEUS VSM

Figura 28. Modo ed'cl6n

Flecha: modo edici6n

Figura 29. Cursoren modo edlcion

~~~ ~-:=~=..-=~=~.::..','~-.~-'--::0CooT_'",Be4 ... oc. IliiI Hld!IIn' I Jlr IR....w.c. [iii" ~odden I Jjdo I b:ModeITI'O<!' IANAlOG --- • rH~AI . I '"'" IREScO - 1"I'C8 PooQge - H<I6A1 -Jou""eo-tle,

IEiIOIJdo', ... ~ .. 1CI'1 _1w'.d1I.!IJOGAor.£_"...PC8~Edt .. ",,,,,,,,,,,,, .,,.'"

I:::

Con esro quedaria finalizado el circuito electronico (figura 31). Pero en el caso delos sistemas basados en un microcontrolador aun quedan por modificar Jas carac­tedsticas del mismo microcontrolador.

Figura 30. Ventana de edicl6n de un componente

OSC1/CLKNOSC2IClJ(OUT

'----'--IMCLRNppI'IHV

MOlANORA1/AN1RA2lAI'I2NReF·RA3/AN3NREF+RA4rrOCKIRA5IAI'I~SS

R8W~T~~------------~R81H~--~RB2

R83IPGMR84Res

RB6IPGCR871PGO

RCorr10Sorr1CKIRC1rr1OSVCCP2

RC2ICCP1RC3ISCI</SClRC4/SDVSOA

RC5ISDORC6iTXICKRC71RX1DT

SW101 SW-SPST-MOM

"tFigura 3'. EIesquemacompleto

11

Page 19: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

En el caso de los microcontroladores, Ia ventana de edicion aporta mucha infor­macion (figura 32). Tal vez lo mas importante es que permite cargar en el microcontrolador el archive de programa ("'.HEX) generado en la compilacion: tambiense puede modificar la frecuenda de reloj (por 10 tanto no es necesaria el usa decristales externos en la simulacion), cambiar la palabra de configuracion y otraspropiedades avanzadas,

, .. 1.\' " ,', C)r

Compono.ll B.eIer"",,'" UI If_ QI ICorr4Mm... ')!otvo: I'IC1lifVl6 Hodde.. Mdl> IFTI>!JllmFile iaeTON_4col ...li H'~AI ~ II"'.. IP'<>::<mOlClod F,equerey CI.IH% ·HlkAI ~ H_frlt I

11l1cJFfii ---P,_ CoM'llJl.o(ionWoot HrdoAi .I'Dii2itIAR . z: ~AI .:J £..,..,.)

PCBP8Ok_ -Advanceo Piope<1Jeo:- .3 Hrde~Ilandr:imirePtog;am M-....y' • ,No::tfs:, :\':'< :.J.!:! ;~Randorr.ce Da1. MetnOIl'1Dump CooIlgllraiion Wol'5l ...Modr!IPICS14It·upD~?Model PICWai<e-up o~,.,For<reAOC81!oakporrv.d S""'lifeT~Wom" StacI<UndeliO.....-iIows1

"~ham~'r.ulllliM: AAoclllllff~'~El<clvde:rom PCB l,~Edit.ollol('I''''tIeS ... te>d.,

,'" ;': "',~'~ ;,c'Figura 32.Ventana de edidon de un micro

1.3 Depuracion de los sistemas basadosen PICmicro

La caracteristica mas importante del PROTEUS VSM es la capaddad de depurar pro­gramas fuente de distintos lenguajes de programacion, Ademas de aceptar elarchivode programaci6n Intel Hex (HEX), tambien adrnite ficheros IAR UBROF (039), Byte­Cmft COD (COD), Microchip CompatibleCOF (COF) Y Croumhil!Proton PillS (BAS). Alutilizar estos archivos se puede abrir una ventana de codigo fuentellamada SOURCECODE mediante Ia cual se puede seguir el programafuente linea a linea de codigo.

Ademas permite visualizar elementos intern os del PIC como son Iamemoria deprograms, la memoria de datos RAM 0 la EEPROM, los registros especiales (FSR)y 1a pila (Stack).

Ademas, el entomo PROTEUS VSM permite compilar program as fuente en c6digoensamblador directamente, Para ello, se utiliza el comando SOURCE (figura 33).

12

Page 20: Untitled 1

1. ISIS de PROTEUS VSM

*DeFineCode Generation 10015...Setup External Text ,dltor ...Build 811

1. borra.asm

Figura 33. Generadorde c6dlgo de flcheros fuente

En el caso del compilador CCS C, despues de compiler se generan, entre otros, losarchivos ".HEX y ".COF, los cuales se pueden urilizar para trabajar con el entornoPROTEUS VSM. Para ejecutar el program a desde [SIS se debe abrir la ventana deedicion del microcontrolador (figura 32) y en el item PROGRAM FILE se puedeindica; el fichero de codigo fuente urilizado.

Adernas, en esta ventana se puede indicar la frecuencia de trabajo can la opcionPROCESSOR CLOCK FREQUENCY (debemos observar que para la simulacion noes necesario colocar elementos externos de 0501aci6n en el PTC,tan s610hacen faltaen caso de realizer la placa). En la opci6nADVANCED PROPERTIES podemos ha­bilitar 0 configurar muchos mas elementos: configurar el uacihdog, habilitar avisosde desbordamiento de pila, accesos no correctos a memoria, etc.

Una vez cargado el microcontrolador con el programa fuente, se puede proceder aLasimulacion del circuito empleando la barra de simulacion (figura 34). Esta barrase compone de la opcion MARCHA, PASO A PASO, PAUSA Y PARADA.

II a

Figura 34. Barra de slmulacl6n

Con la opcion MARCHA la simulacion se inicia (eJ boron se vuelve verde) y fun­dona en modo continuo. La simulacion NO es e11tiempo real y dependera de lacarga de rrabajo del Pc. En la barra de estado se indica la carga de Ia CPU del PC(a mayor carga menos real sera Ia simulacion) y el tiempo de ejecucion: este tiempoindica el tiempo que tardaria, en la realidad, eJ circuito en realizer un proceso (porejemplo esto implica que, dependiendo de la carga de trabajo de la CPU, un tiempode J s en e) circuito puede significar varies minutes de simulacion).

II I • I ANIMATING: 00'00:02.65 (CPU load 9~~l

Figura 35. Barra de estado en la slmulacl6n

13

Page 21: Untitled 1

CompUador C CCS y Simulador PROTEUSpara Microcontroladores PIC

La option STOP para totalmente la simulacion mientras que PAUSE Lapara de for­ma momentanea permitiendo hacer uso de las herramientas de depuration.

La opcion PASO a PASO permite trabajar en tramos de tiempo predefinidos y, ade­mas, permite utilizar Lasherramientas de depuracion, Esta opcion esta ligada aLaconfiguracion de La animacion (figura 36): SYSTEM -7 SET ANIMATION OP­TIONS -7 SINGLE STEP TIME donde se puede definir el incremento de tiempoque se desea que pase cada vez que se pulsa esta tecla.

-- SindabonSpE£dt----

fr<II1&P<'IS;ocood: ~

Tm",.repperF"""", ~

SIngIeS!ep Time: pm- ShowW~eVoltageb!lCc>ku?

Max. SPlaT,,~ Ps;;- ShowWreCment with Anow.?

ilK II ~el

-VoIt09l'lCweriRanger-

M6J!IJUI>Vdtaga IsCmeri TlYe$hold, l;"'lu---

SPlCE Option<

Figura 36. Setanimation options

En este cuadro de dialogo tambien se pueden cambiar los siguientes parametres:

• FRAMES PER SECOND: numero de veces que ]a pan talla de ISIS se refrescaen un segundo (par defecto 20).

• TIMESTEP PER FRAME: indica el tiempo de simulation par cada uno de losframes; 10ideal es que sea el valor inverse del escogido en la opci6n FRAMESPER SECOND.

• ANIMATIONS OPTIONS: permite habilitar la visualization de las sondas detension, y corriente, mostrar los niveles 16gicosen.los pines, mostrar e1nive1detension en los cables mediante colores 0mostrar la direccion de La corriente enlos cables mediante flechas.

• VOLTAGE/Clm-RENT RANGES: permite determiner el umbral de tension(±V) y corriente para utilizar en la visualizacion de las correspondientes ANI­['vrATIONS OPTIONS.

En este punto se puede simnlar (y animar) un sistema con el PICmicro (Figura 37).1.0mas interesante de la simulaci6n can microcontroladores es 1autilizacion de las.herramientas de depuracion Es decir, visualizar mediante ventanas las distintaspartes internes del microcontrolador: memoria de programa, memoria de datos,pila, etc. La mayor parte de estas ventanas solo se pueden visualizar durante unaPAUSA.

14

Page 22: Untitled 1

1. ISIS de PROTEUS VSM

R1SVV5••

1M

R2

1M

OSC11CLI(IN RAG I-ii:------'O~~ AAI~~-- J

4 MCUI ~ H-------------'RMIlOClll

RBOiINT ~------±--lRBIE---!-IRa2:P---~-iA8l R..--':--lRI341-=7~--:-IRBS ~i:--!-iRBIII-':-!'~--;'-iR!!7

PIC\5f~

SW-SPST

SVV2••

Figura 37. Una simuJacl6n en marcha

Desde el menu DEBUG (figura 38) tam bien se puede iniciar la simulacion peropensando en la depuration. Con la opcion STARTIRESTAR DEBUGGING se pue­de iniciar la simulacion pero haciendo una pausa para ver las distintas ventanasde depuraci6n. Tambien se puede ejecutar el programa directamente con Ia opcionEXECUTE, EXECUTE wrmour BREAKPOINT 0 EXECUTE FOR SPECIFIEDTIME que permite ejecutar directamente un programa, ejecutarlo sin puntos deruptura (en el caso de tenerlos) y ejecutarlo en un tiempo concreto.

R....tl'oj:qlvmcIwos,,_Pet,_.. _ Data.Cotfqx.~...Use P.....xeDebuQ_

Figura 38. Ef menu DEBUGantes de la slmulaci6n

'f15

Page 23: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

Desde esta ventana tambien se puede reinicializar la memoria EEPROM del rni­crocontroJador mediante RESET PERsrSTENT MODEL DATA. Al producirse unapausa, el menu DEBUG se modifica (figura 39) mosrrando las correspondientesherramientas de depuracion.

Llbrmy 1~11M $ystem Help

., 5t4lt/l!''''dtO~'''' tl;Il"'l~

FI2Exeat. WlthotA a.... ;pOi1ts 1\11.+1'12Exeate lot ~Jied Time

,.!:, stop 0 ... , FlO

~Stopll1t4 PI!,l.,Sl.pClul. arf+FII

I.M Remote 06truo MOllitor

::I Til.. HO";:or)tefy

]) T'!.y.. tIoiIIV

1·Slll1Ulo(rQ'll"'ll:. Watch Wlr'OJw1. Plr O>Us...,.Cod •• U IS. PIC O>UV6,.x.1M 1)1

§. PIC q.ufW<;b(c(~· VI

k. PIC O>UDate_v ·UIZ. PI<:"(i>U&IIr.f1 NI!(1I(VY'UI

Q pIC cpu ""0;1'''''' Memory -ul~. PICCPU3l«f ·111

Figura 39. EI menu DEBUGen una pausa

Estas herrarnientas son (figura 40):

• SIMULATION LOG:Mensajes resultantes de la simulacion .• WATCH WINDOWS: Ventana de visualizacion de posiciones de memoria.

Permite afiadir la que el usuario desea ver.• PIC CPU REGlSTERS: Muestra los registros FSR del PIC.• PIC CPU DATA MEMORY: Muestra la memoria de datos (RAM).• PIC CPU EPROM MEMORY: Muestra la memoria de datos (EPROM).• PIC CPU PROGRAM MEMORY; Muestra 1amemoria de programa.• PIC CPU STACK: Muestra la pila.

16

Page 24: Untitled 1

1. ISIS de PROTEUS VSM

/oo""~AlSI...

Figura 40. Ventanas de depuracion

La ventana WATCH WINDOW es la mas versatil puesto que se pueden aiiadirvariables y modificar su visualization. Al pulsar el boton derecho sobre la ven­tana se abre un menu contextual (figura 41). Con ADD ITEMS (name/address) semade la variable a visualizar directamente can el nomhre predefinido (figura 42)

en el PIC 0, en el caso de varia­bles propias del programador, sepueden visualizar par direccion(figura 43), donde se le indica elnombre, la direccion en hexade­cimal, el tipo de dato (byte, word,etc.) y el formate de visualizacion(binario, decimal, etc.). E1tipo dedato yel formate tambien se pue­de cambiar desde DATA TYPE YDISPLAY FORMAT.

vatueOt;oOOlll:;l;Oabuu..u-u

ws.ten e ..S1IV6·

"'~Aad~'~l\1)ffiSOow_._

"'S"'cM'k.!Itd"lE~1..___ s.e

Ii. 5ctfor' ...J5<l_ ...

Figura 41. Menu contextual deWATCH WINDOWS

17

Page 25: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

Can WATCH,POINT CONDITION se pueden habilitar puntos de ruptura median­te condiciones sabre las distintas variables (figura 44)i se indica la variable, lamas­cara de la condicion (NONE, AND, OR, XOR) Yel tipo de condicion (NONE, ONCHANGE, EQUALS, etc.).

ET G

Figura 42.Add by Name

Oala~:'A AS'ClIZ slti1q~B}'te(' Word (2 bjite;1(' O~W",d(4b)te:1c- QYOdW""dlS byte.),.. IEEE floa( I"byf.. l~ IEEE DOlilie (81)l'\eSlA H!ecOFk..t (3bY... )~ MierochipFIoaI (4 bjq:)

0::1[)~EQlTMI:

(\.SirloIy/' Oel'"A HeJl<adec~4 ~drnt!iiO?( lJmignedlliege,

Figura 43. Add by Addr,ess Figura 44. Puntos de ruptura

Hay una ventana de depuracion que solo se visualize si se .ha incorporado un fi­chero COD 0COF almicrocontrolador, se trata de la ventana CPU SOURCE CODE(figura 45). Can esta ventana se puede seguir la simulacion linea a linea del archivede codigo fuente.

En esta ventana (tambien en el menu DEBUG) estan disponibles unos botones decontrol (figura 46).

18

Page 26: Untitled 1

1. ISIS de PROTEUS VSM

OP.· void mainO {---- char kj

lnt V,Xj

0137018a0199

(lISe

1)1~;;OJ.::l'01'8019£01-".1-OlASO:JJU<du:>----II----II--- II---- 1/---IIOIJ'-(" )---- }

lcd_in;-tOikbd_inltO:pcrt_b_pull ups(TRUE);

, cd_putq:"\fLi s ro ... \n"):

wilil e (TRUE) {k=l<bd_oetcO i_k;)(;1(.-48; 11w.30if'kr~O)

11'(k='·'), cd...pLltC('\f');

elsl!!lcd_pute(k)jpri ntf!' cd putc "JCc" kj'prlntf loLP.utc:_""<:":".;pI"intf 1cd_putc, ")41" ,k ;prlnt1' 'cd_pu·te."~".v :Pr"l~ lcd_putc, "nu" ,x ;

//fmprln11!! caract:eriJ;~rnpr!me caract:~rIjlmprllne caracterl/impMmI!! valor es ct t//imprime valor MdfI/imprime valor numer1co

-0-~-~-~-[i]-,0-.1

Figura 45. La ventana CPU Source code

I ".( it .ua,Figura 46. Los controles para 5a simufacion

Simulacion en modo continuo, no permite ver las ventanas de depu­radon.Permite ejecutar una lnstruccion; si es una subrutina 0 una funci6n laejecuta directamente,Pennite ejecutar una instrucci6n; si es una subrutina 0 una funcionentra en ella.Trabaja en modo continuo hasta que encuentra un retorno de cual­quier subrutina.Trabaja en modo continuo hasta que se encuentra con un punto deruptura.Habilita 0 deshabilita los puntos de ruptura.

19

Page 27: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

Hay una ventana de diagnostico que facilita la depuracion, almacenando los erro­res, rnensajes de diagn6stico y avisos producidos durante el proceso de simulacion(figura 47). En la barra de estado (zona inferior del area de trabajo) se muestra unaviso (figura 48)i con una pulsacion en el aviso aparece la ventana de diagnosis .

......ag. SOIAcealSI~ R....... 701 tr(BI.OIcI:i6SZItClI.4boo<l .. £ .... .,,,,, rmlOO7., SO"". <XIdo ouId c.,..,.1ed O~Jc 1t\gdotogn C,IoiIt_ .. d!P"'OI.... ~'" [leell_IF,O(.... 1P1..... on.r.sAMf'lEoJ N C<flTPlot.oo _lc1odO,~,.. rl .. b" A.... 11g "",""""td or., P.,I1I.,.,.",ylotOIII1Ii>I<'!edor.JS"""'lII\lpbl""", 1438fC5f7].JPROSPiCE 11000 IQul<!26291(C) 1.oIx.", .. EIoor,,..., 1993-2007Jloaded .... litr (\DOCU~'E'I\EdJ\CONFlG 'IITomp\LI$6,lemSOrl",dMI;n 'GiS2.Il5MATC'H"PIC16~,.I .... 7000318"""368'1) """I;tI1gPlC16628,.,.." I,!!;oJl....,.<1 128 I;oj•• eI P., .... 1"1[[PAOlA dol. !.!lI.Jload,ng HE)(lie j,4och""HEX. 11£J R.od 1«<101fOOlb;lk,"omlk t.HGI."",ftD\' :,rJ loaded 5311~0111'" WIIId end 0 tlol.!IjI(et IiG

Figura 47. Mensajes de diagnostico de fa simufaci6n

Se pueden configurar las opciones de esta herrarnienta desde la opcion DEBUG~CONFIGURE DIS GNOSTIC (figura 49). En la ventana se muestran los componen­tes del esquema susceptibles de un diagnostico en la simulacion y las diferentesposibilidades de diagnostico y el tiempo de diagn6stico (figura 50).

FIgura 48. MensaJes de lit herramienta de dfagnostico

"'lbr6tYT8f1'II)I.;te~HaIt;

ChloH'l~

R.... POllJp ___ ._t,,,.

Figura 49. La configuracion de diagnostlcos

20

Page 28: Untitled 1

1. ISIS de PROTEUS VSM

r,,,,,. C4t00Ul""·InSYSll~ (ISIS/PROSPlCEI• ~ ~ILrOR0-4X20·IlKP (US)• 052405 lUll• 052405 IU21• OS24051U3)- III PIC16f&28A (UG)

oI I'IOglomLoeder

.., I,.,.bucbon~..,.. Mel1'lOl)llSFRICcon _.! R...d E"eo!,I SI"""","" Event.

Inten\llll EYer'llI WIIkI1dc!!hnal MocUo

PSPModIAeII_lnlllmo.;lJon LIIw.I

Figura 50. Opclones de conflguracl6n

Tras 1asimulacion aparecen los diferentes resultados del analisis; en eJ item SOUR­CE aparece indicado el dispositive fuenle del analisis y tras una pulsacion se puedeacceder a el (figura 51),

• [OIW10) CAC-8 Code ASH.,Cll\"'10}av."~, ''4,p(o[1 fieU Loaded 128 bjitet CIt "0",,1,,,,1 EEPROM doledLDdJg HEX lilo 'MooI1rcm HEX'._. Floodtdalcjl 082bjitethomfile 'Moehl.... H£)(,dLcoded536plogtam wad ~ 0 dolo bjite>

MeU<OQ&~Pin plebe on UOOOOI If dog.lal~p", PIOI»on Uooo."S" 6o,laI.r" Plob, (VI ~1~)1)~6,dgII"aplr>PI"tJ<, ,., uooro.>~I d.ll'I'"'if'•.JlCOt on UO(l(t28 " digital'if'in ptabo on UOO029, 6gJlaI.Pln Plol» on UOOQ-.iilt dog.l..d PIC16madeI ,""'est! 700 0318uid 3685)""'obngPICI6628deo,ioc;o.'_IOlWIOI Fbll.,Jy ·-"de lfJol1iWC.:'. :. 111« t' •

",'

Figura 51. Resultado del dlagn6stlco

EJ listado de nodes y patillas se pueden encontrar con Ja ayuda del DESIGN EX­PLORER (a esta opci6n podernosacceder a craves de disrintas opciones: coman­do DESIGN, boton derecho, etc.). En su venlana de trabajo se muestran todos losnodes y patillas que forman el circuito (Figura 52),

21

Page 29: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microconlroladores PIC

i5"''''~.~ Lb.... cl

.......-. !'" L ... - t..,_

Ed(Qc~PrOOCllbe'''' I ." ..,..". -...._ :: t' -....... ·n :=o,.lV ~ ....... -fdt $'oOI"'_tIH, .. i"'",M '1"'-~,K>II'l ~. l -lI!I~fII""

::f>- "'.., :'::::'-I~t -tdil""..... '_ ... ..... . ....::= - ......·IIi""'·~·" ;- .. -Corltoo.. ~A"', .. f:~ "'~T : .....

-1It .... .M ..~,... ,&.... '" " !, :or.:;

~ tIOo' 5h>oII.13IC_ ::::,r ...

....""'II"'lIl'-n.." ...''"'~.~J"',*I .. -."./ill1IO': . " -Wa--- I .. \....,.I~ltlo. ,~ .. -....,....."'" ,N " -~9~."""~ ~- -..... :::~ " ~'iOtI-",- .

0Il ~5heot Alf-P.fil.c:otO.so.e<ililfIe>l9n~or ,..+x +-

fir" l Root.t.o( I componentes ~!'lo5',.'lI'; ~:

"".r:, L". "- ,- :- ::i,. :r;s ..- _,_-'.I)'I'CI -", . IICO'" ::~V·"'i -""... _ ..

I "",.y,",~(.. -..... El II1II0'10

Y " ""'" -'.... • IICU'":;1""".. "',

¥tMo" -" ..... '1'.... t::;::'" ,,,.,,."·IdI1l. t '».W ,. 1:::v_, tJJ....... ..........-\o.~~Y":II' :!Y""I'.....~v_~=.........."'"v_ ~;.......,,-t.( ......A>ol.,.~... .

~Inodos

Figura 52. La ventana Design Explorer

22

Page 30: Untitled 1

2. Compilador CCS C

Capitulo 2

Compilador CCS C

2.1 'ntroduccionEI Compilndor C de ces ha sido desarrollado espedficamente para PIC MCU, ob­teniendo la maxima optimizaci6n del compilador con estos dispositivos. Disponede una amplia libreria de funciones predefinidas, comandos de preprocesado yejemplos. Adernas, suministra los controladores (drivers) para diversos dispositivoscomo LCD, convertidores AD, relojes en tiempo real, EEPROM serie, etc. Las ca­racteristicas generales de este compilador y mas informacion adicional se puedenencontrar en la direccion http://www.ccsinfo.com.

Un compilador convierte el lengua]e de alto nivel a instrucciones en codigo rna­quina; un cross-compiler es un compilador que funciona en un procesador (normal­mente en un PC) diferente al procesador objeto. El compilador CCS C es un cross­compiler. Los programas son editados y compiJados a instrucciones maquina en eJentorno de trabajo del PC, el codigo maquina puede ser cargado del PC al sistemaPIC mediante ellCD2 (0 mediante cualquier programador) y puede ser depurado(puntas de ruptura, paso a paso, etc.) desde el entorno de trabajo del Pc.

EI CCS C es C estandar y, adernas de las directives estandar (#illc/udc, etc.), surni­nistra unas directivas especificas para PIC (ltdc'vice,etc.): ademas induye funcionesespedficas (bif_sefO, etc.). Se surninistra con un editor que permite controlar la sin­taxis del programa.

NOTA

En el manual de CCS se da rnucha mas informacion de la que a continuacionse va a dar. En este capitulo solo se describiran los elementos mas basicos yesenciales para comenzar a programer.

23

Page 31: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

2.2 Estructura de un programaPara escribir un programa en C con el ccs C se deben tener en cuenta una serie deelementos basicos de su estructura (figura 1).

• DIRECTIVAS DE PREPROCESADO: controlan la conversion del programaa codigo maquina por parte del compilador.

• PROGRAMAS 0 FUNCIONES: conjunto de instrucciones. Puede haber unoo varies: en cualquier caso siernpre debe haber uno definido como principalmediante la inclusion de la llarnada maint).

• lNSTRUCCIONES: indican como debe comportar el PIC en todo momento.• COMENTARIOS: permiten describir 10que significa cada linea del programa.

18161>delay alock

XT mwD1'~'.ndArd_ ~o • ._____ Directivas

____ ----- FuncionTfMUO ur ..

v.,O -v.atO OUtput bit PUI. &0

It'1oi output 1>1c FTN 10 .•• t_'u.....tO - -

___------ Funci6n principalMin .-".t.. _tlJD..:_O P..TCC I~"ERNAL "''Tee DIV :

".."to....""'

Figura 1.Estructura baslcade un programa

2.3 Tiposde datosccs C acepta los siguientes tipos de datos:Tipo Tamaiio Rango Descr!.E_cionInn 1 bit Oal Entero de 1 bitShort

24

-------------------

Page 32: Untitled 1

2. Compilador CCS C

Tipo Tamaiio Rango Descripci6nInt 8 bit o a 255 EnteroInt8Int16 16 bit o a 65.535 Entero de 16 bitLongInt32 32 bit o a 4.294.967.295 Entero de 32 bit

Float 32 bit ±1.l75xlO·3jjaComa flotante±3.402xlO-JS

Char 8 bit o a 255 CaracterVoid - - Sin valorSignedlnt8 8 bit -128 a +127 Entero can signoSigned lnt16 16 bit -32768 a + 32767 Entero largo can signoSigned lnt32 32 bit _23Ja +(231-1) Entero 32 bit can signo

2.4 Las constantesLas constantes se pueden especificar en decimal, octal, hexadecimal 0 en binario:

123 Decimal0123 Octal (0)Ox123 Hexadecimal (Ox)

ObOl0010 Binario (Ob)

'x' Caracter'\010' Caracter octal'\)cAS' Caracter hexadecimal

25

Ademas, se pueden definir constantes can un sufijo:

lnt8 1270Long 80ULSigned INT16 BOLFloat 3.14FChar Can comillas simples 'C'

Tarnbien se de.finen earacteres especiales, algunos como:

\n Cambia de linea\r Retorno de carro

Page 33: Untitled 1

Compilador C CCS V Simulador PROTEUSpara Microcontroladores PIC

\t Tabulacion\b Backspace

2.5 VariablesLas variable se utilizan para nombrar posiciones de memoria RAMi se deben decla­rar, obJigatoriamente, antes de utilizarlas; para ello se debe indicar el nombre y eltipo de dato que se manejara. Se definen de Lasiguiente forma:

TIPO NOMBRE_ VARIABLE [=VALOR INICIAL]

TlPO hace referenda a cualquiera de los tipos de datos vistos en el punto 2.3. ElNOMBRE_VARlABLE puede ser cualquiera y el valor inicial es opcional. Veamosun ejemplo:

float temp_limic=500.0;

Las variables definidas en un programa pueden ser de tipo LOCAL 0 GLOBAL. Lasvariables locales solo se utilizan en la funcion donde se encuentran declaradas; Lasvariables glob ales se pueden utilizar en todas las funciones del programa. Ambasdeben declararse antes de ser utilizadas y Lasglobales deben dedararse antes decualquier £unci6n y fuera de elias. Las variable globales son puestas a cera cuandose inicia la funcion principalmain().

~Lnclude <16f876.h>

#us£ DELAY (CLOCK=4000aOO)

intl6 counter;void FUNCIONtvo ia)

/1 Variable g~obal

char K, kens='0'; II Variables locales

void main ( )

int8 temp; 1/ variable local

Las variables pueden ser definidas can:

• AUTO: (usada par defecto, no hace falta que se indique) donde la variableexiste rnientras la funcion esta activa. Estas variables no se inicializan a cero.Su valor se pierde cuando se sale de Lafuncion.

26

----~-------------------------------------------------------

Page 34: Untitled 1

2. Compilador CCS C

• STATIC: Una variable local se activa como global, se inicializa a cero y man­tiene su valor al entrar y salir de la Fund6n.

• EXTERN: Permite el uso de variables en oompilaciones multiples,

2.6 Operadores

2.6.1 Asignacion

+= Asignaci6n de suma (x+=yes 10mismo que x=x+y)

-= Asignacion de resta (x--y es 10mismo que x=x-y)It= Asignacion de multi plicacion (x"''"'yes 10 mismo que x=xry)/= Asignacion de division (x/=-y es 10 mismo que xc:x/y)

%= Asignacion del resto de la division (x%=y es 10mismo que x=x%y)

<<= Asignacion de desplazamiento a la izquierda (xcc=y es igual que x=x«y)

>>= Asignacion de desplazamiento a derecha (x>>--yes iguaJ que x=x»y)

&= Asignacion AND de bits (x&"')'es 10 miS010 que x=x&y)

1= Asignacion OR de bits (x 1=y es 10 mismo que x=xIy)

"= Asignacicn OR EXCLUSIVAde bits (x"=y es 10 mismo que x=x"y)

2 .6.2 Aritmetlcos

+ Suma

- Resta

* Mul tiplicaclon

I Division

% Modulo, resto de una division entera

-- Incremento

++ Decremento

sizeof Delermina el tarnafio, en bytes, de un operando

En las operaciones de decremento e incremento, en funcion de la posicion del ope­rador, se consigue un preincremento (++A)0 un postincremento (A++).

27

Page 35: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

II b-16 Y a~4;

2.6.3 Relacionales

< Menor que

> Mayor que

>= Mayor 0 iguaJ que

<= Menor igual que

- IguaJ

!= Distinto?: Expresi6n condicional

2.6.4 Loglcos

! NOT

&& AND

II OR

2.6.5 De bits

- Complemento a 1

& AND1\ OR EXCLUSIVA

I OR

» Desplazarniento a derechas« Desplazarniento a izquierdas

2.6.6 Punteros

& DirecdonIf Indirecci6n-> Puntero a estructura

28

Page 36: Untitled 1

2. Compilador CCS C

Orden de precedencia de los operadores:

Expresiones en orden de precedencia descendente

(expr)lexpr -expr ++expr expr++ --expr expr--(type)expr "expr &value sizeof(type)

expr'expr expr/expr expr%expr

expr+expr expr-expr

expr«expr expr»expr

expr<expr expr<=expr expr>expr expr>=expr

expr=expr exprl=expr

expr&expr

exproexpr

expr I expt

expr && expr

expr II expr

expr? expr:expr

Ivalue = expr Ivalue+sexpr Lvalue-=expr

Ivalue*=expr IvaJue/=expr Ivalue%=expr

1va1uex=expr lvaluecc=expr Ivalue&=expr

Ivalue==expr lvalue I=expr expr, expr

2.7 FuncionesLas funciones son bloques de sentencias; todas las sentencias se deben enmarcardentro de las funciones. Al iguaJ que las variables, las funciones deben definirseantes de utilizarse.

Una funcion puede ser invocada desde una sentencia de otra funcion. Una funcionpuede devolver un valor ala sentencia que 1aha llamado. El tipo de dato se indicaen la definicion de la funcion: en el caso de no indicarse nada se entiende que esun int8 )' en el caso de no devolver un valor se debe especiJicar el valor VOID. Lafunci6n, ademas de devolver un valor, puede recibir parametres 0 argumentos.

29

Page 37: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

La estructura de una funci6n es:

Tipo_Dar:.o{

Npmbre_Funcion (ripo paraml, param2, .... )

(sentencias) ,.

float trunca (floae a)

floatb,.b-ttoor (a) ,.

a-a"laa,.a-floor (a) ;

a ..a~O.OJ.;

a-b+a,.

return (aJ,.

La forma de devolver un valor es mediante la senten cia RETURN:

retum (expresion),­return expresi6n;

Donde expresi6n debe manejar el mismo tipo de dato que el indicado en la de­finicion de la funcion. En el caso de no devolver nada se finaliza con RETURN,a1encontrar esta sentencia el compilador vuelve a la ejecucion de la sentencia dellamada. Tambien se puede finalizar la funcion sin RETURN, tan solo con la Havede cierre "}".

Las funciones pueden agruparse en ficheros de librerias <fichera.It>,que se puedenutilizar mediante Ja directiva #inc/Ilda <fichero.h».

2.8 Declaraciones de controlLas declaraciones son usadas para controlar el proceso de ejecucion del programs.Las que admite CCS son:

• lj-Elsc.• While.

30

Page 38: Untitled 1

2. Compilador CCS C

• Do-While.

• For.• Switch-Case.• Return.• Break, Cantin ue y Gota.

2.8.1 IF-ELSECon 1aayuda de IF-ELSE se pueden tamar decisiones.

i:f (exp.t:esi6n)

sencencia_li(else

sen tencia_2; ]

NOTA

1...05 elementos que se encuentran entre corchetes [J son opdonales.

Primero se evalua.Ia EXPRESI0N y si es cierta (TRUE 01) ejecuta 1aSENTENCIA._l,en eJ caso contrario (FALSE .0 0) ejecuta la SENTENCTA_2.

Pueden anidarse los IF-ELSE dando lugar a los ELSE-IF; esto permite tomar deci­siones multiples.

if (expresi6n_lJsentencia_l;

[else if (expresiOn_2Jsen tencia _2i J

{elsesencenClil_3;}

En este caso las EXPRESTONES se evahian en orden, si alguna de eUas es cierta laSENTENCIA asociada a ella se ejecutara y se temrina la funcion. Encaso contrariose ejecuta Ia SENTENCIA del ELSE. En ambos casos si existe.n varias se.ntenciaspara ejecutar se deben utiliza las llaves f I:

31

Page 39: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

if (e.><presi6n)

sencenci<l_l;

sentenCid_n;

(else

sentenci<l_l;

sentencia_n;JJ

Eiemplos:

IF (A==O) 8=10,ELSE C=5;

IF (A!=1) 8=10,ELSE C=5:

32

IF (A>10){IF (A>20) B=5,ELSE B=15,}

Page 40: Untitled 1

2. Compilador CCS C

IF (A>10){IF (A>20) B=15;}

ELSE B=5,

2.8.2 SWITCHSwifch es un caso particular de una decision multiple

swit.cn(expresion)

case constante 1:sentencias;break;case constanta 2:sentencias;breek :

detail 1t:entencias;]

Evalua la expresi6n y en orden a la CONSTANTE adecuada realiza Lassentenciasasociadas. Si ninguno de los CASE corresponde a la CONSTANTE se ejecuta DE­FAULT (este comando es opcional),

EJ comando BREAK provoca la salida de SWTTCH, de 10 contra rio se ejecuta eliguiente CASE.

NOTA

I'\o puedcn existir dos CASE can 1amisma CONSTANTC.

33

Page 41: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microconfroladores PIC

Ejemplo:

NO

2.8.3 FORSe usa para repetir sentencias,

Switch (A) {case 0:8=1;

break;case 2:8=2,

break;case 3:8=3;

break,default: break;

for (inlcializacion ,. candicion de finalizacion incremento)

sentencias;

En las expresiones del FOR Ia inicializaclon es una variable a la cual se Ie asigna unvalor inicial con el que controlar el bucle, La condicion de finalizacion sirve paraevaluar ANTES de ejecutar las sentencias si es cierta 0 no, en el caso de ser cierta seejecutan las sentencias yen caso contrario se sale del FOR. Por ultimo, la expresi6nde incremento 0 decremento modifica la variable de control OeSPUES de ejecutarel bucle.

NOTA

Se pueden anidar bucles fOR utilizando distintas variables de control.

34

Page 42: Untitled 1

2. Compilador CCS C

Si se ejecuta la siguiente expresion se consigue un BUCLE SIN FIN;

For ( ;)

Ejemplo:

sentenciils;

S! 1NO~

IMPRlMIR N

LN-N'I

For (N=1:N<=10;N++)I{I Printf("%u",N);}

2.8.4 WHILE I DO-WHILEWHILE se utiliza para repetir sentencias.

while (expresion)

sentencias;

La expresi6n se evalua y 1asentencia Be ejecuta mientras la expresion es verdadera,cuando es £alsase sale del WHILE.

35

Page 43: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

DO-WHILE se diferencia del WHILE Ydel FOR en la condici6n de finalizacion, Lamal se evalua al final del bucle, par Laque las sentencias se ejecutan almenos unavez,

Do

sencenci~s;

while (eApresion);

Si se ejecutan las Sig1.1ientes expresiones se consigue un BUCLE STNFIN:

While (1)

(

DO

While (1)

Ejemplos:

36

sarrcencias i

serit.erici.es :

While (N)5 && M<10){A=1;8=2;

Page 44: Untitled 1

2.8.50tros• Return: se emplca para devolver datos en las funciones.• Break: permite salir de un bucle, se utiliza para While, ForDo Y Switch.• Goto: provoca un saito incondicional.

51 A=1,8=2,

I~hile (N)5 && M<10);

~~

NO,

2.9 ComentariosLos cornentarios en el programa facilitan la compresi6n de las distintas expresionestanto para el programador como para quien tiene que interpretar dicho programa.No afectan a la compilaci6n por 10que pueden ser tan extensos como el prograrna­dor quiera. Se pueden colocar en cualquier parte del program a y con dos forma­tos:

2. Compilador CCS C

• Utilizando /I. Al colocar estos signos se comienza el cornentario y finaliza enel final de la linea.

/1 Comentario que termlnilrEi ill uoe: de eet:« Lned.

• Utilizando /* y "l,Se debe utilizer al inicio y al final de cornentario, pero nopueden reperirse dentro del mismo comentario.

/' eece comencer io no iinallzil al final de esca lineaflnaliza cuando se clerre el comentario ~I

37

Page 45: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Mlcrocontroladores PIC

2.10 Directivas y funciones (Preprocessorcommands y built-in functions)

2.10.1 DirectivasLas directivas de pre-procesado cornienzan con el simbolo /I y continuan con uncomando especlfico. La sin taxis depende del comando. Algunos comandos no per­miten otros elementos sintacticos en lamisma expresion. Muchas de las directivesutilizadas par CCS son extensiones del C estandar.

ItDEFINETOSTRING !lIP expr !INOLIST!lELSE IfIFDEF id GPRAGMAcmd

Estandar C#USTItENDIP itUNDEFid

#ERROR illNCLUDE "FiLENAME"#INLINE PINT_GLOBAL #SEPARATE

Cualificadores~INT_DEFAULT !lINT_xxx__ DATE-- --LINR__ --PCH__

Identificadores --DEVlCE-- _ _PCB-- __ TIME--_FILE_ - _-PCM__ __ FILENAME__

RTOS 1ITASK ruSERTQS

Especificacion #DEVICECHIP IIID "filename" #FUSESoptionsDispositivos .ID CHECKSUM ~IDNUMBER IISERIAUZE

#USEDELAYCLOCK mSEFlXED_IO IfUSERS232Librerias #USEFAST_IO mSE12C /tUSESPIpredefinidas russ STANDARD_10

#ASM ItBYTEid=id IIROM#BJTid=id.const #ENDASM #TYPE

Control de #BIT id=const.const !IFILL_ROM !iZERO_RAMmemoria*BUIlD #LOCATEid=constII13YTE id=const ilRESERVE

Control de #CASE #OPTn !tPRIORITYcompilador bORG ltIGNORE_WARNINGS

A 10 largo del presente libro se iran viendo varias directivas en su ambito de apli­cacion particular.

38

Page 46: Untitled 1

2. Compilador CCS C

Como ejemplo se pueden comentar:

IIDEVICE chip, permite definir el PIC con el que se realizara la compilaciOn.

#device PIC16F84

#FUSES options, la cual peunite definir Ia palabra de configuraci6n para progra­mar un PIC. Por ejemplo, en el PIC16F841as opciones posibles son:

(P, XT,HS, nc,NOWDT, WDT, NOPlIT, PUT, PROTECT, NOPROTECf.

Hdevice PIC16F84

#fuses XT, NOWDT, PUT, NOPROTECT

IIINCLLlJE "filename", pennite mduir fichero en el programa.

linclude <16FB4.h>11fuses XT, NOWDT, PUT, NGPROTECT

/lUSE DELAY (CLOCK=SPEED), permite definir las freruencia del oscilador delPIC, el compilador 10utiliza para realizar caleulos de tiempo. Se puede utilizar M,MHZ, K YKHZ para de£i.nirla frecuenda.

39

KINCLUDE <16P877.h>

'use delay(clock=4009000)

#ASM Y#ENDASM, perrniten utilizer codigo ensamblador en el programa en C.Se utilizan a] inicio y al final del bloque ensamblador.

/iasmbsf TATUS,RPO

movl", OxSmovwf PORTB

bcf STA'I'US,RPO

ilendasm

Page 47: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

2.10.2 Funcionesces suministra una serie de fund ones predefinidas para acceder y utilizar el PIC Ysus perifericos. Estas fundones facilitan la configuraci6n deJ PIC sin entrar en el ni­vel de los registros espedales. Las funciones se dasifican por bloques funcionales.

ASSERT() GETCH( ) PUTC()

FGETC() GETCHAR() PUTCHAR()

E/S RS232FGEIS( ) GETS() PUTS{)

FPRINTF( ) KBHlT() SET_VART_SPEED( )

FPUTC() PERROR() SETDP_UART( )

FPUTS() PRINTF( )

E/S BUS SETUP_SPI( ) SP1_DATA_IS_IN() SPI_WRITE()

SPI2-HILOS SPl_XFER( ) SPI_READ( )

GET_TRlSx( ) lNPUT_K() OUIPUT_ SET_TRIS_B()FLOAT()

INPUT( ) INPUT_STATEC) OtJTPUT_G( ) SET_TRlS_C( )

INPUT_A() INPUT_x() OUTPUT Ji() SET_TRIS_D()

INPUT_B( ) OUTPUT_A() OUIPUT_ SET_TRIS_EOHIGH()

INPUT_C() OUTPUT_B() OUTPDTJ() SET_IRlS_F( )E/S [NPUT_D() OUTPUT_BITe) OUTPUT_K() SET_IRIS_G( )

DISCRETASINPUT_E() OUTPUT_C() OUI'POT_LOW() SET_TRIS_H( )

INPUT_F( ) OUTPUT_D() OUTPUT_TO- SET_TRIS__j()GGLE( )

INPUT_GO OUTPUT_DRI- PORT_A_PU- SET_TRlS_K( )VEO [LUPSO

INPUT_H() OUTPUT_E() PORT_B_PULLUPS( )

INPUT_j( ) OUTPUT]() SET_TRlS_A( )

E/SPUERTO PSP_INPUT FULL() PSP OVERFLOW()

.PARAlELO PSP_OUTPUT_FULL() SETUP _PSP( )ESCLAVOI2C_WRITE( ) 12C_SIaveAddr( ) I2C 15R_STATEO

ElSBUS12C I2C_POLL( ) 12C_START()

I2C_READ( ) I2C_STOP( )CLEAR_INTE- GOTO_ RESET_CPU( )

CONTROL RRUPT() ADDRESS()PROCESOS DlSABLE_IN- lNTERRUPT_

TERRUPTS( ) ACTIVE() RESTART_CAUSE( )

40

Page 48: Untitled 1

2. Compilador CCS C

ENABUUN- JUMI'_TO_lSR SETUP_OSCILLATOR()rERRUI'TS( )CONTROL EXT_lNT_ LABELPROCESOS - SLEEP( )EDGE( ) ADDRESS( )

GEIENV( ) READ_BANK( ) WRITE_BAl'\lK( )BIT_CLEAR( ) MAKE8( ) _MUL( ) Sl-ITFT_LEFT( )

MANEJO BIT- BIT_SET( ) MAKEI6() ROTATE- SHlFT_BYTE LEFT( ) RIGHT( )

BIT_TEST() MAKE32( ) ROTATE_ SWAP()RIGHT( )ABS( ) COSH( ) LABS( ) SIN( )

OPERADORES ACOS( ) DIV( ) LDEXP( ) SINH( )MAT.ASfN( ) EXP( ) LDIV( ) SQRT()A1AN() FABS() LOG() TAN()

C"ESTANDARATAN2() FLOOR() LOGlO( ) TANH()CElL( ) FMOD( ) MOOre)COS() FREXP( ) POW()

TENS16NDE SETUP_VREF( ) SETUP_LOW _VOLT_DETECT( )REFERENC1A

A/DCONVER- SET_ADC_ClIANNEL( ) SETUP_ADC_PORTS( )SleN SETUP_ADC( ) READ_ADC()

ATOF() ISLOWER(char) STRCMP() STRRCHR()ATOI( ) ISPRINT(x) SmCOLL() STRSPN( )AT0132( ) ISPUNCf(x) STRCPY( ) STRSTR( )ATOL( ) [SSPACE(char) STRCSPN( ) STRTOD( )

CARACTERES ISALNUM() ISUPPER(char) STRLEN( ) STRTOK()CESTANDAR 1SALPl:-lA(char) rSXDIGIT(char) STRLWR( ) STRTOL( )

lSAMOUNG( ) ITOA( ) STRNCAT() STRTOUL( )rSCNTI~L(x) SPRINTF( ) STRNCMP( ) STRXFRM()ISDIGIT(char) STLKAT() STRNCPY() TOLOWER()ISGRAPI lex) STRCllR( ) STRPBRK( ) TOUPPER( )GET_TTMERO() SET_RTCC( ) SETUP_ThVIER_O( )

TIMERSGET TIMERI() SET_TlMERO( ) S£TUP_T1MER_' ()GE'T_TIMER2( ) SET_T1MER1( ) SETUP_TlMER_2 ()GET_TLMERJ( ) SELTIMER2( ) SETUP_TIMER 3 ()

41

Page 49: Untitled 1

Compilador C CCS Y SimuJador PROTEUS para MicrocontroJadores PIC-----------------

GET_1IMER4( ) SET_TIMER3( ) SETUP_TIMER_4 ( )

TIMERSGET_TIMERS( ) SET_TlMER4( ) SETUP TIMER_5 ( )

CET:_TlMRRx( ) SET_TIMERS() SETUP_WDT ( )

RESTART_WDT( ) SETUP_COUNTERS( )CALLOC() MEMCMP() OFFSETOFBLT()

FREE( ) MElYfCPY( ) REALLOC()MEMORlAC LONG]MP() MEMMOVE() SET]MP()ESTANDAR

MAllOC() MEMSET()

MEMCHR() OFFSETOF()STRXFRM() MEMCHR() MEMCMP()

STRCAT() STRCHR( ) STRCMP()

STRCOLL() STRCSPN() SIRICMP()

CADENAS STRCOLL() STRCSPN() STRICMP()ESTANDAR STRLEN() STRLWR() STRNCAT()

STRNCMP() STRNCPY() STRPBRK{)

STRRCHR() STRSPN() STRSTR()

STANDARD STRING FUNCTION( )SET POWER PWM_OVERRIDE() SETUP_CCP2{ )

SET_POWER_PWMX_DUTY( ) SETIJP_CCP3( )

SET_PWMl_DUIY( ) SETUP CCP4()

MODULO SET PWM2 DUTY() SETUP_CCP5( )CCP SET_PWM3_DUTY( ) SETUP_CCP6()

SET PWM4 DUTY() SETUP_POWER_PWM( )

SET_PWMS_DUTY( ) SETUP_POWER_PWM_PINS( )

SETUP_CCPl()

ERASE_PROGRAM_EEPROM( ) SETUP EXTERNAL_MEMORY()

READ_CALIBRATION( ) ~TE_CONflGURArrON_MEMORY()

EEPROM READ_EEPROM( ) WRITE_EEPROMOINTERNA

READ_EXTERNAL_MEMORY( ) WRITE_EXTERNAL_MEMORY()

READ_PROGRAM_EEPROM( ) WRITE_PROGRAM_EEPROM( )

READ_PROGRAM_MEMORY( ) WRITE PROGRAM MEMORY()CESTANDAR BSEARCH() RAND() $RAND() QSORT()(ESPEClALES)

RETARDOS DELAY_CYCLES() DELAY USC) DELAY MS()

42

Page 50: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

o .PJT: fichero de proyccto; conriene toda Ia informacion rcJacionada con el pro­yecto.

o .lST: rnuestra un listado con el codigo C y el codigo ensamblador asociadopara cada linea de codigo.

o .SYM: muestra las posiciones y valores de los regisrros y las variables del pro­grama.

o .STA: rnuestra una estadistica de la utilizacion de la RAM, ROM Y1aPILA.o .TRE: rnuestra un arbol del programs donde se especifican las funciones y susllamadas, con la ROM y RAM usada en cada una de eHas.

o .HEX: fichero estandar para la programad6n del PIC.o .COF: fichero binario que inc1uye el codigo maquina y la informacion para ladepuracion correspondiente,

2.12.2 Entorno de trabajoE1entorno de trabajo del ces en pew y peWH perrnite compilar y tarnbien sumi­nistra una gran varied ad de herramientas auxiliares, En 1afigure 2 se muestra losdisrintos elementos basicos del entorno de trabajo. Existen dos forrnas de iniciaruna sesi6n: abriendo un fichero de codigo fuente 0 crcando un proyecto .

Barra deSubComandos

PestailaDel

Programa

IZONA DE C60lGO IBarra deVentanasauxiliares ... ,.,.,,,...', .

...l.,U_ .°'11,1.......::'::·::';::U:=. _ ....u,,.,._ ... t1..........•~t ..... '"_H''' 11.,..1_,..•••_t,

Figura 2. Entorno de TrabaJo

44

..

Page 51: Untitled 1

2. Compilador CCS C

Para abrir un fichero fuente directamente se realiza una pulsacion sobre el iconopara el manejo de ficheros (figura 3) y aparece un menu donde podemos crear,abrir, guardar 0 cerrar ficheros. Con el cornando NEW podemos crear un ficherofuente, un proyecto, un fichero RTF 0 un fichero de diagrama de flujo.

45

FIgura 3. los menus para el manejo de los fJcheros

Con la opcion NEW -7 SOURCE FILE, el program a pide el nombre del nuevo ficheroy crea una nueva ventana en blanco donde podemos empezar a escribir (Figura 4).

... '.

Figura 4. Flchero fuente nuevo

Page 52: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

51se ejecuta el comando PROJECTWIZARD, tras pedir el nombre del nuevo pro­yecto aparece la ventana de configuracion con dos pestafias, una para configurarlas distintas opciones que se muestran en la barra de 1a izquierda (figura 5) y otradonde se rnuestra el c6digo resuHante de la configuracion (figura 6). Recorriendolas distintas opciones (general, C0I111111111;catiolls, etc.) se llega a obtener el codlgo deconfiguraci6n deseado (figura 7), tras 10 cual ya podemos empezar a escribir elresto del codigo del programa. Debemos observer como se inc1uye un fichero decabecera *.11 donde se encuentra la configuraci6n del dispositivo (figura 8).

"'lIt.---- , :-,\\~.:~,J "iflJt

r _WOI """" ..... O(l.AY,r.;, OnahMpor ... ...ch •

-~-----Sf'I-.llCOT_l'OIT_;".q00..-".p,0_.1,0",,"IfcIMooV<Ioj>oI.. O...... C<rio,.-no.CAHIIU~lCO_MOOBU$

0..... c...--r~c; ..,.. 0 10 -., ...,. 0.-.0111_l1li'\ .".

~o ..~---:=J"'_110''''''

Figura 5. Ventana de conflguraclon de las opdones

Figura 6. Ventana de conflguracl6n con eJc6dlgo resuJtante

46

Page 53: Untitled 1

2. Compilador CCS C

9 &e~Up_8dc_pores ANO10 s",eup_ado!DC_CLOCK_INTERNAL11 saeup "pi FALSE12 "",r.UJI-r.inler0 RTCC INTEJlHALRTCC I>IV113 "",cup-CiJDer-l Tl DISABLED. --1~ seeUP-~imer-2 T2-DI5.lBLED15 lod inie - -16171819

Pl'ueba_l.c

12

! i5678

Of : ...CE\ pru::l:'-"'i_l. b"LCD C

mar.h h

Figura 7.E. codigo despues de una configuracion

~_l.C _b.~I'"> ..,076 b1 .tIC)

4 NOIffiT5 JIS6 PUT~ l'Iopp.oTtC1'8 NQB1IOIINOUTI) NQLVP10 IIOCPD11 HOVRT12 NODEBUCl~~4 de.1.y clOClC:lS 1:'!I232 baud

Figura 8. EI fichero de cabecera con fa configuradon de. PIC

2.12.2.1 EI primer programaLa opcion del PROJECT WIZARD es muy comoda pero para comenzar a trabajarcon CCS C, se recomienda iniciar los ficheros de codigo mente directa.mente hastaque el programador adquiera los conoci.mientos basicos para manejar esta opcion,

As! pues abrimos un fichero fuente nuevo donde se escribira un programa para en­cender yapagar un led durante 1s-egundo. Elled se conectara a la patiDa RB7 de unPIC16F876 trabajando a una frecuencia de 4MHz. En los siguientes temas se iranexplicando cada una de las sentencias utilizadas, ahara 10 interesante es manejar eIentorno d-etrabaja y no tanto 10 que hace cada sentencia

La primero es utiJizar el fichero de cabecera donde se especifican las caracteristicasdel microcontrolador PIC:

47

Page 54: Untitled 1

Compilador C CCS y SimuJador PROTEUS para MicrocontroJadores PIC

#include <16F876.b>

Este fichero 10suministra CCS y 10incorpora en el directorio de dispositivos (devi­ces).El compiJador tiene una ruta de busqueda para los ficheros sinclude; esta rutase puede modificar en el caso de querer incluir ficheros que se encuentren en otrosdirectories. Con el coman do OPTIONS -7 PROJECTS OPTIONS -7 INCLUDEFILES se accede a una ventana (figura 9) donde se puede afiadir, eliminar a mo­dificar el orden de busqueda de los ficheros .liindude (tambien podemos observarqlle se pueden configurar los ficheros de trabajo -FILES- a los ficheros de salida-OUTPUT FILES-).

Figura 9. Ruta de busqueda de los ficheros #include

A continuacion se definen, mediante las correspondientes directives, la velocidaddel PTC y el puerto utilizado. Es importante definir la velocidad inmediatamentedespues del PIC ya que muchos drivers (como el LCD) Ja necesitan para configu­rarse,

luse deLay (clock = (000000)# byte puerto_b = Ox06

Ahora se puede describir la funcion principal MAIN (). Los cambios de color, letra,etc., se puede configurar desde la opcion OPTIONS -7 EDITOR PROPERTIES ...

Al escribir el pTograma (figura 10) podemos observar como aparece un arbol defunciones a la izquierda de Ia ventana de programa; esto permite expandir 0 (on­'traer las funciones y declaraciones de control para optimizer la visualizacion de losprogramas mas complejos (figura 11).

48

Page 55: Untitled 1

2. Compilador CCS C

FIgura t t,Contrayendo eJ arbol

En ~Ieditor de texto se puede pulsar el boron derecho sobre cualquier lmea (figura12); en el caso de los ficheros sinclude permite abrirlos en una pestafia adicional.

Figura 12. Las opclones del boto" derecho

1 ~876 hZ delay cloek3.. p\leceo_b56 vow Min VOiI'78 aee_trls_b9 pueno_b

1011

;II 12 ~lav_1IISI 13 bit aee puereo_b

14d41.,,__

IS blt_Clear puereo_b1617 vhlle nUl18

Flgur .. TO.EIprograma

Iuu

t876 bdela, clock

puert.o_b

.(!t_trta_bPUeeto_bU..htl. TRUE

49

Page 56: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

Como ayuda para escribir el programa, CCS ofrece el comando VIEW (figura ]3)que permite visualizar las interrupciones (Valid Interrupts), fusibles de configura­cion (Valid Fllses), hojas de caracteristicas (Data Sht'ct) y una ventana completa don­de se describe el PIC (Device Table Editor) mediante distintas pestanas (esta opciontambien es accesible desde la opci6n TOOLS -7 DEVICE EDITOR (ver figura 15).

II<

"".~:~'....,.~t,~-:....I" "!!"P ......;:: 1 r~ "4.~!:''',,.. Hrl..'.~""".UOI' .. '" '~J{t~r"it""""_""''''"hl· '-11,..."..........'''~""llIjl _''_'''""",,., 1.-...'''''"''... .IU/"I" "._ "iII'I'.. 'MI.'.,.,q~ ....r;1."'0 t"t~_"""'.~1111""" ....."~'.' t """7....... ,- .c, ..... ...., ~--....- I' ...

-Ii:_ f ... _

~

••• '. I' I", II 0 I r ..~ltd ~ t\........ IJl! fC.;a ..... " '" ff " II f' u" "" " ,.." ff notf " II ,r " ,. H " •• tt " It .. h " ft

Figura 13.ComandovIewSe puede proceder a la cornpilacion, que se puede hacer con el comando COMPILE-7 COMPILE 0 directamente con la teda de funcion <F9>. Durante la compilacionaparece una ventana donde se inform a del proceso de compilacion y si hay errores(figura 14).Tras Ja compilacion aparece una ventana con los mensajes de error si loshubiese 0 el porcentaje de utilizacion de la memoria RAM y ROM si Ia compilacionha sido correcta (figura IS).

NOTA

jATENCI6N! Si sc escribe un fichero fuente y a continuaci6n se abre 0 se creaun segundo fichero fuente, al compilar este ultimo se compilara el primero.Siempre se compile siempre el PRIMER fichero abierto.

50

Page 57: Untitled 1

2. Compilador CCS C

F:I ...ATUR-\_PIClpracric<lsICLASElluz_l",_cllu%.c

COlllploltNo '00'.FII•• : 2. Slalt'"O"u; 8. TIm.: 1 Sec. 1I11'~266OUIJI,n f".~ERR HEX SYIl lST COF PJT TRt; STA

RAM:

ROM:

2'

I',W'Wt!m;vtiJ com

Figura 14.Ventana de compllacl6n

)......, - ~)li!i

\~H=~~r-------------------------------------------.iiFigura 15.MensaJesde compllacl6n

Tras la compilacion se obtiene, entre otros, el fichero HEX para programar 0 si­muJar el PIC. En OPTIONS -7 PROJECT OPT10NS ~ OUPUT FILES, se puedenconfigurar los ficheros de salida (figura 16).

51

? Ie

o.t>uol'tt ..... C<wroIe_UprNone . co_ Ho[mn.,.. stoncllinj .COCl

r """''''''*' 1~5ocf .:1r A11) MAP r 0Id-., Ontmr.r: Elcpandod,coo r,;-(. COf'f r ,.,.._

ov."... ObiOCtNt !I,.....Qc.elII .. " r. $1!I(11!X r: 0n0i'III1;1_'. r 168111!X r-.,rsc,""' .... ("~ '~~

Q_ .........Dot... P_w_l

Figura 16.Ficheros de salida

Page 58: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

En Laparte izquierda del fichero iuente aparecen unas ventanas auxihares (Identi­fiers, Projects, Piles) en las que se pueden observar la estructura de fichero de) pro­grama compilado (figura 17). Hacienda una pulsacion en cualquiera de ellos seabre una pestaria con su contenido.

~.,16f8~h

-ci:~lJr... ,iJo.O$YOIIu2.IIn...... "110l4.J«Iut.ccIIul.""lu... ta

1800c""""_'

Figura 17. Ventana auxiJiar pa1"aficheros

En Ja barra estandar -figura 18- (para activarla: OPTIONS -7 TOOLBAR... -7TOOLBARS, figura 19), tambien aparecen distintos comandos entre los que se en­cuentran la visualizacion de los fichercs de salida,

i!

Figura 18. Barra estandar

lCOOpens..veAfClose AICo~PICWlZMdSlCWa",d

Oesajptloru

Figura 19. Activacion barras de herramientas

52

Page 59: Untitled 1

2. Compilador CCS C

Hay un fichero de salida especialmenLe util para la simulacion con el PROTEUSVSM, se trata del fichero RAM SYMBOL MAP (*.SYM) donde aparecen todas lasvariables de la memoria RAM y sus correspondientes direcciones. Por ejemplo, sien un program a exists una variable FLOAT lIamada TEMP, se puede consulter sudireccion a traves de este fichero (figura 20) para utilizarla en el WATCHdel PRO­TEUS (figura 21 y Figura 22).

ad_ntc.c kd.c ad_lltc.sym

004-00$ QWAITE PROGRAM MEHOOO~-005 QREAO PROGRAM MENOR006 lcd _ _1t15-1t16 CCP_1015 CCP 1 LOW016 CCP-1-HIGHIt1B-01C CCP:=2-018 CCP 2 LOW01C CCP-2-HIGH021-02" MAIH.tu025-028 MAULt,.ufiO'Pf1l1ltiJlt'rm020-030 HAIH • .11031-032 HRIH.ualue033 lcd init_i033-034 QITOF.P1033 MAIN.asCRATCH034-0379PRIHTF_L320_J08FPF

Figura 20.Flchero de salida SYM

? )(

Dala1YPo<r ASOIZ SUing". BJ(e, W",d!2bj1t.. l

Double\llOId (~~1Quod\ll .. dra~lI~EE I'looI (4b.l(es)1m DO<A:lIe181¥eo)

... HItecIII'looI13b!1t .. )• MlcroclllP Fl9aIIHlI1tes)

" .i!1O tocioan

Figura 21. Configuracion del WATCHen el PROTEUS

53

Page 60: Untitled 1

Compilador C CCS V Simulador PROTEUS para Mjcrocontroladores PIC

AddressOXl9

Figura 22. Ventana de WATCH con la variable

54

x

Page 61: Untitled 1

3. La gesti6n de los puertos

Capitulo 3

La·gestion de los puertos

3. 1 Introducc.onLos microcontroladores PTC tienen terminales de entrada/salida divididos en puer­tos, que se encuentran nombrados alfabeticarnente A, B,C, 0, etc. Cada puerto pue­de tener hasta 8 terminales que, de forma basica, se comportan como una entrada/salida digital. Begun las caracterfsticas deJ PIC, cada puerto puede tener, adernas,aslgnado un bloque funcional: convertidor AD, USART, [2C, etc.

Por ejemplo, en la familia PIC16F87X (figura 1), pueden llegar hasta 5 puertos en elPIC16F877 donde se pueden encontrar bloques de TIMERS, CCP, MSSP, USART,PSP Yconvertidores AD.

CftrAct~rh.llrll~ I'JCI6FII73 l'IC16F874 l'IC16F876 I'ICI6f877Galli.M~dla - ~:[:I'rccu~ncla de IrabiTo, --- DC·1M1ih OC·20MII1. DC·1O~UI:t; DC·20MllL

Rt'c! (y delnYl) POR.nOR POR,OOR 1'0R,nOR POR,BOR(PWRT.OST) (PWRT.OSTJ (l'WRT.OST) (PWRTOSn

M~murl. d~ I'rogrllmll FI..A~ H ~K 4K HK ilK(uuhll,r", dll I.j..bll~)

l\M~U1nrl. Oucu.{llVIeJ) 192 192 368 3611Melllurim I)ACO.Et:P~OM 128 128 .- 156 256Incenupdoo.s 13 14 1.1 t4 ;;:Puerto, F)S l'omA.n.C Pori~A,B.C D e POMSA.B C Pur~ A.B.C.D.£ ';iTeonJ)Clrl:wdor~8 .'I l l lM6dulo5CCI' 1 2 2 1 ::ComuIIlcnCiOiiCio~ --- I\ISSP USART MSSPU~ART- M~SPUsAiiT 'iisSt>:USARTCOlllunICllcl~n;;;P;;ruiCiO - PSI' p&r fJModulo AD ue cObles 5 CANALES 8CANALt:!> 5 CANAl res 8(,"NAI_f.~

~'c"u de I11M~!CJ.!!lJ_. _. _._J~__ J§._ lL_ ~-_- tFIgura'. Caracterlstlcas de fa familia PIC' 6F87X

Consideranco a los puertos como entradas/salldas dlgitales, los puertos se carac­terizan por ser independientes, es decir, se puede programar cada terminal delpuerto para que se comporte como una entrada 0 una salida digital (figura 2). La

55

Page 62: Untitled 1

Compilador C CCS V Simulador PROTEUSpara Microcontroladores PIC

habilitacion como entrada 0 salida se realiza a traves del registro TR1Sx (TRISA:85h, TRlSB: 86h, TRISC: 87h, TRISD: 88h 0 TRISE: 89h en el BANCO 1 de la memo­ria RAM).

NOTA

Un valor 0 en estos registros indica que el terminal correspondiente del puertoes de salida, mientras que un valor 1 indica que sera de entrada.

La gestion del bus de datos se realiza a traves de los registros PORTx (pORTA:05h, PORTB: 06h, PORTC: 07h, PORTO: 08h 0 PORTE: 09h en el BANCO 0 de lamemoria RAM).

r-, ..c--J TERMINALBUS DATOS 0 Q V 110

--ESCRlTURA QDATOS

- 0 Of--

ESCRITURA QTRIESTADO

LECTURADATOS

Figura 2. Estructura basica de un terminal

Tambien existen algunos terminales que poseen unas caracteristicas especiales, porejemplo:

• En el puerto A, el terminal Ril4 tiene salida en drenador abierto 10 que obligaa utilizar i111a resistencia de pull-up en el caso de funcionar como salida. Esteterminal tiene entrada en trigger-schmitt 10 que permite su utilizacion comoentrada de contador de eventos extemos en conjuncion can un modulo tem­porizador (TIMER).

• En el puerto B, los terminales tienen una resistenda de pull-lip interna que sepuede habilitar a traves del bit RBPU del registro OPTION_REG (8Th, 18Th).51 dicho bit es I, todas las resistencias de pull-up estaran deshabilitadas, si esun 0 estaran habilitadas s610 en el caso de que el terminal funcione como en­trada (figura 3).

56

Page 63: Untitled 1

3. La gesti6n de los puertos

R/W·1 R/W·1 II/W·! RJW·, R/w·' R/w.' RJW·, R/W., II-BII.I •• rIIIBPU IINTEOG I TOCS I TOSE IpSA I PS2 I PSI Ipso I

WoBI•• esetlblr FU-SII no Impl .......ntado ~i:Llt7 SItO ,. '" como a"'''valor pare un POR resel

t'i'~ ~ '-

Figura 3. Reglstro OPTION_REG

Bit 7: RPBU: Habilita las resistencias de pull-up.t-Les deshabilita.D=Lashabilita todas.

Las caracteristicas electricas de los puertos delimltan su utilizacion para manejarcargas de forma directa.

Maxima corriente de salida a nivel alto par un pin I/O 25 mAMaxima corriente de salida a nivel baio nor un pin 1/0 20mAMAxima corricntc de salida a nivel aha eor el puerto A .!Q.!!!!,\MAxima corricrne de salida a nivel baio cor el puerto A 50mAMaxima corrieute de salida a nivel alto ear cI puerto B ~mAMaxima corricnte de salida a nivel bajo por el puerto B IOOmA

57

Figura 4. Caracteristicas electricas de los puertos de un PIC16F84

Estes niveles de tension perrniten trabajar con cargas de bajo consumo como leds,displnys de 7 segmentos 0 LCD, pero para activar cargas de mayor consumo es ne­cesaria la utilizacion de transistores.

3.2 Gestion de puertos en CEn lenguaje C se pueden gestionar los puertos de dos formes:

• Se declaran los regisrros TRISX y PORTX definiendo su posicion en la memo­ria RAM como variables de C.

• Utillzando las directivas espedficas del compilador (/tUSE FAST_IO, /;USEFIXED_lO, #USE STANDARD_IO).

3.2.1 A traves de la RAMSe definen los regisiros PORTx y TRISx como bytes y se sinian en 1a posicion co­rrespondiente de la memoria RAM, La directiva utilizada de C es IIBYTE:

IIBYTEvariable=constante:

'BYTE TJUSA • Ox8S 1/ Variable TRISA en 8Sh.

'BYTE PORT'" - OxOS // Variable PORTAen OSh.

ilBYTE TRISB - Ox86 /1 Variable TRISB en 86h.

Page 64: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

jBYTE PORTB = Ox06#BYTE TRIse = Ox87tBYTE PORTe = OxO?

II Variable PORTB en 06h.II Variable TRISe en 87h.II Variable PORTe en 07h.

Una vez definidas estas variables se pueden configurar y controlar los puertos atraves de los eomandos de asignacion.

TRISA = OxIT;TRISB c Oxoo;

TRIse = OxOF;

II 8 cerminales de entradaII 8 cerminales de saLida114 terminales de mayor peso de salida, 4 terminales deII menor peso de en~

Escritura en los puertos:

PORTC= OxOA;

Lectura de puertos:II salida del datos 00001010 por e1 puerto C

valor = PORTA; II Asigna e1 dato del puerto A a la variable valor.

Manejo de sentencias:

TRISD9JxOF;

if (PORTO& OxOF) PORTD 1= OxAO; II comprueba los 4 terminales deII meaos: peso de~ puerto D y 51 sonII 1111 saca pot: los 4 terminales deII mayor peso e1 data 1010.

Existen unas funciones de C que perrniten trabajar bit a bit con los registros 0 varia­bles definidas previamente. Estas funciones son las siguientes:

bit_clear (var,bit)i II Pone a 0 el bit especifieo (0 a 7) de la variable.

bit_set (var , bit)i II Pone aIel bit especifieo (0 a 7) de la variable.

bit_test (var, bit): /1 Muestra el bit especifico (0 a 7) de la variable.

swap (var); /1 Intercambia los 4 bits de mayor peso por los 4 de// menor peso de la variable

bi t_set (PORTe , 4); 1/ "sacs" un 1 pox e1 r:erminal RC4if (bit_.eS~iPORTB,O)==l)bit_cleariPORTB,l); Iisi F~O es 1 borre RBl

Se puede declarar unbit de unregistro con una variable mediante la directive ;iBIT,10 que permite trabajar directamente con el terminal:

ifBIT nombre =posicion. bit

#BIT RB4 = Ox06.4RB4 = 0;

•1 FORTA=Ox06

58

Page 65: Untitled 1

3. La gestion de los puertos

Ejemplo 1: Se configuran los terminales RBI como salida y el RBO como entrada(con resistenda de plill-lIp). La salida debe tener el mismo valor que la entrada. Seutiliza un interrupter en Ja entrada y un led en 1asalida (figura 5). ComponentesISIS: P1C16F876, RES, LED-BLUE Y SW-SPST-MOM.

RBO/INTH~------__,RS1 H~----,RB2

R83/PGMRB4Res

RB6IPGCRB7/PGO

•OSClICLKINOSC2ICU<OUT

'------1..-1MCLRNpp/l1-tV

RAOIANORA1/AN1RA21AN2NREF·RA3IAN3NREF<RA4/TOCKIRA5IAN4/SS RC0/T10S01T1CKI

RC1/Tl0SI/CCnRC21CCP1

RC3/SCKISCLRCI/SOI/SDA

RC5ISDORCGITXICKRC7/RXIOT

SW1SW-SPST-MOM01

LED-BLUj •

Figura s.EIesquemadel eJemplo1#include <16F876.h>il'fusesXT,NOWDT

#use delay( clock" 4000000 )IBY1'ETRISB Ox85'BYTE PORTB - Ox06'BYTE OPTION_REG - Ox8l

else

II Reloj de 4 MHz/1 TRISB en 85h.II PORTS en 05h.II OPTION_REG en Blh.

void main () (bic_clear(OPTION_REG, 1);bit_seC(TRISB,O);bit_clear(TRISE,l);bit_clear(PORTB,lJ;while (1) (

if (bit.test(portb,O) -- 1bic_clear(portb,l);

II Habilitacion Pull-upII BO como entradaII B1 como salidaII Apaga el LSD

II S~ RBO es J, apaga el LED

blt_set(portb,l); II Si REO - 0, enclende el LED

Figura 6. EIprograma del ejemplo 1

59

Page 66: Untitled 1

Compilador C CCS V Simulador PROTEUSpara Microcontroladores PIC

3.2.2 A traves de las directivasEl compilador ofrece funciones predefinidas para trabajar con los puertos. Estasfunciones son:

output_X (valor);

input_XO;

set_tris_X(valor);

port_b_puUups (valor);

get_trisXO

II Por el puerto correspondiente saca el valor (0-255).

II Se obtiene el valor en el puerto correspondiente.

1/ Carga el registro TRISx con el valor (0-255).

1/ Mediante valor = TRUE 0 valor = FALSEhabilitaI/o deshabilita las resistencias de pull-lip en PORTB./1 Devuelve el valor del registro TRISx

Donde la X es la inicial del puerto correspondiente (A, B, C,... ).

Output A(OxFF); II sees por el puerto Ii e1 valor 11111Valor~Tnput_B(); II Lee el valor del puerco BSec_tris_C(OxOF); II Configurae1 puertO C: CO-CJ encradas, C4-C? salidas

Existen una serie de funciones asociadas a un terminal 0 pin". EI para metro pin"se define en un fichero include (por ejemplo, 16F876.h) con lin Formato del tipoPIN_Xu, donde X es el puerto y n es el numero de pin.

IIdefine PIN_AO40

#de6ne PIN_A141

Las funciones ot/tput_xO e illput_xO depend en de la directiva tipo IIUSE "_10 queesre activa. Directivas:

Las funciones son:

output_low (pin");

output_high (pin"');

output_bit (pin" , valor);

output_toggle(pin");

output_float (pin");

input_state(pin");

input(pin");

II Pin a O.

II Pin a 1.

II Pin al valor especificado.

II Complementa el valor del pin.

II Pin de entrada, quedando a tension flotante ...II (simula salida en drenador abierto)

II Lee el valor del pin sin cambiar el sentido delI I terminal.

II Lee el valor del pin.

IIUSE FAST_IO (PUERTO) [PUERTO: A ... JCon la funci6n Olllpllt_xO se saca el valor al puerto y con la funcion input_xO se Iceel puerto. La directive no modi fica previa mente el registro TRTS correspondlenle.

60

Page 67: Untitled 1

3. La gestio" de los puertos-------------------------------------------------Hay que asegurarse de que los registros TRIS estan correcramente definidos. En­tonces, el ejemplo 1 quedaria :

#include <16FB16.h>

I fuses XT, NOWDTDuse de1ay( clock = 4000000

Huse fast_io (B) ~

void maJ.n() (

port_b_plll.lups (TRUE);

set_tris_B(OxOl);

outpuc_J.ow(PIN_BlJ;

while (1)

i1 (input (PIN_BO) = 1output_low(PIN_Bl);

elseourput_high(PIN_Bl);

IUSE STANDARD_IO (PUERTO) [PUERTO: A... ]Can la funcion output_x() el compilador se asegura de que el terminal, 0 terminalescorresponclientes, sean de salida mediante la modificacion del TRlS correspondien­teoCon Ia funcion input_xO ocurre 10mismo perc asegurando el terminal (termina­tes) como entrada. Es la direct iva por defecto. Entonces, el ejemplo 1 quedaria:

Hnclude <16F876.11>ifuses XT,NOWDT

fuse delay( clock = 4000000 )

juse standard_io(B) +-v~nd main () l

port_b_pullups (TRUE);

output_low(PIN_Bl);

vn.i.Le (1)

(

if (input(PIN_BO) == 1

ou~put_low(PIN_Bl);

elseoutput_hlgh(PIN_Bl);

61

~USEFIXED_10 (PUERTO_OUTPUTS=pin'" I ...) [PUERTO: A...JE1compilador se encarga de generar el codigo para definir los puertos de acuerdocan la informacion que indica la directiva (donde solo se inclican los terminales de

Page 68: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

salida), sin tener en cuenta si la operad6n es de entrada 0 de salida. Entonces, elejemplo 1 quedaria:

#include <16F876.h>

#fuses XT, NOWDT

juse delay( clock = 4000000 )

fuse fixed_io(b_outputs;pL~_bl) +­void main() I

port_byullups ('I'RUE);

oucput_low(PIN_Bl);

while (1)

if (input(PIN_BO) == 1

outPut_~ow(PIN_Bl);

else

outPuc_high(PIN_Bl);

3.2.3 Con punterosEn C se puede acceder a la memoria de datos mediante punteros. Los punteros sedeben definir como TNT:#define TRISA (inc*) ax8S'define PORTA(iDL*J oxos

El registro es manejado mediante la utilizacion del operando ...:

inc v<Jlor

valor = "porta

Los terminates se pueden leer 0 escribir utiJizando operadores logicos:

*porta 1= ObOOOOOOOl;

·porta &= Obllll1101;

If (*porta & ObOOOaOOOl) ...

//RAQ=l

II RA2 = 0

II Lee e1 valor de RAO

Entonces, el ejemplo 1 quedaria:#include <16F876.h>

tfuses XT,NOWDT

#use delay( clock = 4000000

Ideline TRLSB (int~J Ox86 +­itdefine PORTE (int·) Ox06 +­

-fdei1ne OP'l'IOlij (inz=) OxSl +-

62

Page 69: Untitled 1

3. La gestio" de los puertes

void main () {"option G= ObOl111111;

"trisb - OxOl;~portb~ OxOO;

while (1)

(

if (·portb & OxOl

*portb=OxOO;

else"portb-Ox02;

II Pone a 0 el bit 7 del OPTION RSGII (pull-up habilitado)II REOentrada, RBl saiidaII Apaga el .LED

/1 Lee el RBO y si es 1 ..

II Apa~ el LED (RBI ~ 0)

/1 ss es 0 enciende el LED (RBI. = 1)

12

Ejemplo 2: Realizar un contador de a a 99 con un doble display de 7 segmentos decatodo comun. La cuenta debe ser continua y de a a 9 el digito de las decenas debeestar apagado. Componentes ISIS: PIC16F876, RX8Y 7SEG-MPX2-CA-BLUE .

•• ,\,..-<.t~ .'

;, ~. .1. ,

byte C~NSt DLSPLAY(lO]

Figura 7. El esquema del ejemplo 2

#include <15£'875.h>

#USE DELAY(CLOCK = 4000000)

#FOSES XT,NOWDT,NOPROTECT,NOPUT

IUSE fast_IO (B)

JUSE fast_IO (A)

••

{Ox3f,Ox06,Ox5b,Ox4f,Ox56,Ox6d,Ox7d,Ox07,Ox7f,Ox6f);

63

Page 70: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

main () (byte ud=O,dec=O;SET_TRIS_B(OxOO);SET_TRLS_A(OxOO);OUTPUT_B(0);

fori ;; ) (for (dec=0;dec<10;dec++) /1 Cuenta digi~o decenas

for (ud=O;ud<lO;ud++)OUTPUT_A(Ox02); // cat_D = epeqeao , cat_U = encendi.do

OUTPUT_B(DISPLAY{ud); / Digito unidades

delay_ms(SO); // Para evicar parpadeos

if (dec==O) output_a(Ox03); /1 Si decenas = 0,// cac_D = apagado// Si decenas > 0,/1 cat_D = encendido1/ Digito decendsII Para evitar parpadeos

else output_a(OxOl);

OUTPUT_B(DISPLAY{dec]);

de.lay_.IIlS (50) ;

Figura 8. E.programa deJejemplo 2

Los terminales de los dos displlTYs son comunes por 10que el data es comun; paraque aparezca el digito solo en Jas unidades, 0 5610en las decenas, se debe apagarelot'ro display mediante e] terminal de carodo, Es deci.r, si se desea visualizar lasunidades se pasa e1 codigo "10" al display y si son las decenas se pasa el"Ol" (conun 1el display esta apagado y can un 0 esta encendido). La altemancia entre.los doscatodos debe ser tan rapida que el ojo no se de cuenta del parpadeo. En el caso quelas decenas sean cero, su display se apagara.

CONST DISPLAY[lO] = IOx3f,Ox06,OxSb,Ox4f,Ox66,Ox6d,Ox7d,Ox07,Ox7f,Ox6fl permi­te visualizar de 0 a 9 mediante la combinacion de digitos tipica de los displays de 7segrnentos (figura 9). Par ejemplo, en el 0 se encienden a, b, c, d, e y f, 10 que signi­fica 111111,Ox3F en hexadecimal.

a

Figura 9. Los 7 segmentos de. dispray

64

Page 71: Untitled 1

3. La gestio" de los puertos

3.3 Entradas y sa.idas3.3.1 LCDSe acosturnbran ha utilizar LCDdel tipo HD44780, con un nurnero de Iineas varia­ble y un numero de caracteres por linea tambien variable (por ejemplo, con 2 x 16se trabaja con dos lineas de 16 caracteres cada una) (ver figura ]0).

• C) lCDconar,v n I

1.·Vss ("'''SOl)2.-Vee(Alimentlldon de 2.7V a 5.SV)3.- Ajuste de c:ontraste (de 0 .. 5.SY)4' RS(scl~trlonde ~g,stro)

H5.- R/W (klduraJescrtturll)6.· £ (enable)7.- 00 (dam LSB)8.-01 ~,:9.·0210.·03U.-O"

Ii12.- OS13.- 0614,- 07 (dato "'58)

iii:',[

I

t,~:~.~

• • ,_, =-,

65

Figura 10. EI patlllaJe de un LCDtlplco

EI bus de datos es de 8 bits, aunqu.e tambien existe la posibilidad de trabajar con 4bits (con un menor nurnero de caracteres). El compilador C induye un fichero (dri­ver) que permite trabajar con un LCD. El archive es LCD.C y debe Ilamarse como un#ine/tlde. Este archive dispone de varias funciones ya definidas:

lcd_init 0;Es la primera funci6n que debe ser llamada.

Borra el LCD y 10 configura en el formato de 4 bits, con dos lineas Y con caracteresde 5 x 8 puntos, en modo encendido, cursor apagado y sin parpadeo.

Configura eJ LCD con un autoincremento del puntero de direcciones y sin despla­zamiento del display real.

lcd_gotoxy (byte x , byte y)iIndica la posicion de acceso al LCD. POl' ejemplo, (1,1) indica la primera posicion dela primera linea y (1,2) indica la primera posicion de la segunda linea.

lcdgetc (byte x , byte Y)i

Lee el caracter de la posicion (x.y).

Page 72: Untitled 1

Compilador C CCSYSimulador PROTEUSpara Microcontroladores PIC

lcd_pute (char s);

S es una variable de tipo char.Esta funcion escribe la variable en la posicion corres­pondiente. Si, ademas, se indica:

\£ se Jimpia el LCD.\n el cursor va a 1a posicion (1,2).\b el cursor retrocede una posicion.

El compilador de C ofrece una funcion mas versa til para trabajar con el LCD:

printf (string)

printf (cstring, values ...)

printf (fname, cstring, values ...)

String es una cadena 0 un array de caracteres, values es una lista de variables sepa­radas por comas yfiW/1I(! es una funcion,

El formate es %nt, donde n es opcional y puede ser:

1-9:para especificar cuantos caracteres se deben especificar.01-09: para indicar Ia cantidad de ceros ala izquierda.1.1-9.9 para coma £lotante.

t puede Indicar:

c Caracter.s Cadena 0 caracter.u Entero sin signo.d Entero con signo.Lu Entero largo sin signo.Ld Entero largo con signo.x Entero Hexadecimal (minusculas).X Entero Hexadecimal (mayusculas).Lx Entero largo Hexadecimal (mimisculas).LX Entero largo Hexadecimal (mayusculas).f Flotante con truncado.g Flotante con redondeo.e Flotante en forma to exponencial.w Entero sin signo con decimales insertados. La Iii ci.£raindica el total,

la 2~el rnrmero de decimates.

66

Page 73: Untitled 1

3. La gestio" de los puertos---------------------------------------------A continuacicn, mostramos unos ejemplos de los distintos formatos:

Formato Valor = Oxl2 VaJor = OxFE

%03u 018 254

%u 18 254

o/\l2u 18 "%5 18 254

%d 18 -2

%x 12 fe%X 12 FE

%4X 0012 OOFE

%3.1w 1.8 25.4

Ahora, mostramos una serie de ejempLosde aplicaci6n:by;;e x,y, z;

prlncf("B.oLa") ;

printf (\\Valor=>%2x\n \r" ,gec_rcce ());

princE ("~2!J iX i4X\n ~r", x,y, zt :_orinr:f(LCD_PUTC, "n=61)" .ni ,

Eldriver LCD.C esta pensado para trabajar con eJ PORTD 0 eJ PORTB. Por defecto,utiliza eJPORTD amenos que le indiquemos 10 contrario mediante:

#defineuse_portb_lcd lRUE, secomentao descomentatalcomose.ind:icaen la figurall.Por defecto, este driver usa siete terminales para La comunicaci6n entre el LCDYelPTC. En 1afigura 11se observa parte del fichero LCD.C donde se encuentran defini­das las conexiones u tilizadas y la posibilidad de cambiar de puerto./1 As defined in xtie following sr:ructure the pin connection is as follows:

II////////II/1II/1 LCD pins DO-D3 are noc used and PIC D3 is noC used.

/ / Un-commentthe following define to use port BII #deii.De use_portb_led TRUE

Figura 1,. Extracto de' flchero LCD.C

DO enableDl rs

D2 rwD4 1)4

D5 D5

D5 05D7 D7

67

Page 74: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

Se puede trabajar con otros puertos, por ejemplo el PORTC, modificando el ficheroLCD.C. En la 6gura 12 se muestra parte del fichero LCD.C donde se definen lospuertos de trabajo (el 0 0 el B);modificando estas sentencias se puede trabajar conotro puerto (A, C, etc.).

#if defined USE_porch_led

Jllocate led ~ getenv("sfr:PORTB") // This puts che entire structure overII che port

'define ser:_ tris_led (x) set_cIJ;s_b (x)#else

#loci1te led = get:env("srr:PORTD") II This puts the ent ire structure overII the port

#deflne ser_tris_lcd(xJ set_tris_d(xJ

#endif

Figura 12.Extracto del fichero LCD.C

Ejemplo 3: Realizer un menu de control mediante unpulsador. EI program a debemostrar un menu de 3 funciones. Mediante el pulsador se debe seleccionar uno delos 3 elementos y con otro ejecutar la funcion (en este caso encender un letI). Dispo­nemos de los componentes ISIS: PIC16F876,RES, BUTTONy LM016L.

R2.i:«

68

Figura 13.Ef esquema del ejemplo 3

Page 75: Untitled 1

3. La gestion de los puertos

ijnclud~ <16F876.h>Ifuses XT,NOII'IJT

luse del~Ylclock- 4000000)Ijnclud~ <lcrl.c>luse standard_lotC)luse standard_loIA)

enum funclones (med,cBl,lni];

void medlrlvold){

Ilalgodcmo corcE'spondlenceoucpuc_!:ogqle (pln_CO);

voia calibl:ar(void)(Ilalgoritmo corrospondiante

output_~ogQ'le(PlIJ_Cl);J

~ld inlclalizBt (void){Ilalgoricmo corr~spondfente

oucpuc_coggletp!n_C2J;

d run_func(int numfunc){

Sl>'lcch (num[uncJcase med:

medi r t ) ;bH!lJk;

case cal:c,11ibral'();bn'alc;

case ini:l n t c i e t izaL ();

1M1n I) (

r Item:

II Asigna un valor a cada elemen:o

II mcd - 0, cal - 1 e in! - 2

II Funcion de medlr

IIFuncion de callbra1

II FUncion de !nlclallzar

II As!gnacion de la funci6n a reallzar/1 viene dada par la vanable "item-

II variables de funclones

69

Page 76: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

char n_menus - 3; /1 Numero de funciones

1/ bit_setITRISA,O);lcd_lnit ();

while (1) (

if (input(PIN_AO) 1) ( II Detecca boton de selecc~6nII s1 pulsa aumenca la variable/1 Para evr taz- rebotes

J.cemr+;de1ay_ms (300);lcd_pucc ('\f' I:

if (ieem > (n_menus-1))

item - 0: J/1 Si la variable supers e1 numero de ...II funciones la J.nJ.cializa

stdtch (i tern)

case 0:lcd_gotoxy(l,l);printf(lcd_purc, "MEDIRH):1cd_goroxy/l,l};break;

case 1:printf Ilcd_putc, "CALIBRARH);lcd_gotoxy/l,l);break:

case 2:printf(lcd_putc, "INICIALIZARH);lcd_gocoxy(l,l);break:

if (input(PIN_Al)(delaY_1I1s(200);run_func (i tern);)

1) II S1 se pulsa e1 baton de seleccion ...

II se llama a 18 funci6n correspondienee

Figura 14.EIprograma del eJemp'o 3

3.3.2 LCD graflcoSe puede utilizar un LCD grMico con una controladora KS0108(como el de la figura15), por ejemplo la ASI-A-1286AS-Lj-EWS/W de la casa ALL SHORE INDUSTRIES.

70

Page 77: Untitled 1

_._3. La gesti6n de los puertos

Figura 15.LCD graflco con controladora KSO108

La distribuci6n de patillas es Ia siguiente:

VSS: masa.VOO: alimentaciOn.Vo: tension de contraste.D(I: entrada de datos/entrada de c6digos de instruction.RlW: Iectura/escritura.

E: enable.DBO..DB7: datos de entrada.CSl..CS2: chip select.RST:reset

EJcompilador Csuministra varios drivers para este tipo de LCD gnificos, el GLCD.C,GRAPHICS.C 0, el mas especifico, HDM64GS12.C.

La conexion definida en estos ficheros es la siguiente:

II II II II II II II II II 11/1/1111111//111111/1111I111111/1111111111111/11111/1111111111111/11IIII IIIIII/I LCD Pin eonnections: 1/11IIII (These C(l11 be dumged as needed in thefollowil1g defines). IIII/11/ VSS is connected to GND 1III1111 VDD is connected to +5V IIII///1 va - LCD opemtiflg voltage (Canstrast adjustment> Ifff/111DIT- Data or Instruction is connected to B2 I1I1//11 R/W - Read or Write is connected to B4c 111/1//1 Enable is connected to B5 IIIIIIII Data Bus 0 to 7 is connected to port d IIII

71

Page 78: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

//// Chip Select 1is connected fa 80Ilf/ ChipSelect 2 is connected to 81

If//III/

1/11Reset is connected to CO IIII//1/ Negative voltage is also connected to the 20k Ohm POT /////1// Positive voltngefor LED backlight is connected to +5V f/I///// Negnvtive volfagefor LED backlight is connected to GNDI///W W1///////////////////////////////////////////////////////////////////////////////////

Las funciones definidas son:

gcd_iill t(mode)Debe ser la primera fund6n en invocarse. Enciende el LCD.

glcd_pixel(x,y,color)Establece el color del pixel. Puede activarse 0 desactivarse.

glcd_filIScreen(color)Rellena at LCD de un color determinado. Puede activarse 0 desactivarse.

glcd_updateOEscribe en la RAM del LCD; s610 es posible si esta definido FAST_GLCD.

glcd_line(x1, y1, x2, y2, color)Dibuja una linea desde el primer punto al segundo asignando color, el cual, a suvel, puede activarse 0 desactivarse.

g1cd_rect(x1, yt, x2, yz, fill, color)Dibuja un rectangulo con un vertice en (xl, yl) y el otro en (x2, y2). Puede ser relle­nado 0 no y puede activarse un color 0 no.

glcd_bar(xl, yl, x2, y2, width, color)Dibuja una barra des de el primer punto aJ segundo; se puede definir el numero delrango de pixeles y puede activarse el color 0 no.

glcd_circle(x, y, radius, fill, color)Dibuja un circulo con centro en (x, y) y con el radio especificado; puede rellenarseo no y puede activarse eJ color 0 no.

gJcd_text57(x, y, textptr, size, color)Escribe el texto empezando en (x, y); los caracteres son de 5 x 7 pixeles; se puedeescalar el tarnafio y puede activarse el color 0 no. Esta funci6n envia .105caracteresa la linea siguiente (se debe usar #define GLCD_WIDTH para definir el ancho devisualizacion).

72

Page 79: Untitled 1

3. La gestion de los puertos

Ejemplo 4: Visualizar en un LCDel estado de las entradas del PUERTOA (ver figu­ra 16). Disponemos de los compone.ntes ISIS: PIC16F877, RESPACKB, LGM12641-BSIR Y SW-SPST-MOM.

PUERTO A

AO ts.AI .,

Figura 16.EI esquema de. eJemp.o 4

#include <16F877.h>

#fuses HS, NOWD'1',NOPROTECT, NOLVP

luse delay(clock·20000000)/linclude <HDM64GS12.c>

#:J.nclude <graphics. c>

'use standard_io (a)

void main ()

CHAR AS [ J -"AS";CHAR A4 ( J-"A4";CHAR A3 ( lellA3";CHAR A2[ J -"A2";CHAR Al [ 1~"Al" ;CHAR AO[ 1 "AO";

CHAR IN[ 1-"PUERTO A";

glcd_lniCrON);

t;J.1cd_textS? (33, 3D,AS, 1, 1) ;

glcd text57 (49, 30,M, 1, 1) ;

glcd_ textS7 (65, 30,A3, 1, 1) ;

glcd_textS7 (81, 30,A2, 1, 1) ;

73

Page 80: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

glcd_cext57(97, 30,AI, 1, 1);

glcd_cext57(113, 3~,AO, 1, ~};glcd_cext57(30,5,TN, 2, 1);

while(1)Iif (input_scate(PtN_A5)--OJ

glcd cecc(J2,40,46,60,1,1);else

glcd_rect(J2,40,46,60,1,O};glcd_cect(32,40,46,60,O,1};

i= (input_state(PIN_A4}~;0)glcd_cect(48,40,62,60,1,1};

elseglcd recc(48,40,62,50,1,0);

glcd_rect(48,40,62,bO,O,1);

if (input_state(PI~_A3)-=0)glcd_cecc(54,40,78,50,1,1);

elseglcd_cecc(64,40,78,60,1,0};

glcd_recc(64,40,78,60,0,1);

else

if (input_state(PIN_A2)~O)glcd_rect(SO,40,94,60,1,lJ;

glcd_cect(80,40,94,60,1,0),.glcd_rect(80,40,94,50,0,1);

if (input_staCe(PIN_Al}a;O)glcd_recc(96,~O,110,60,2,1);

elseglcd_recc(96,i~,••G,60,l,0);

glcd_rect(96,40,110,60,O,1);

if (inpu c_sCc'u:e (PTN_AO)=0)

.glcd_rect(112, 40,126,60,1,1);else

glcd_cecc(112,40,126,60,1,O);glca_cect(112,40,126,60,O,I);delay_ms(400):}

Figura' 7. EI programa conespondiente al ejemplo 4

74

Page 81: Untitled 1

3. La ges1i6n de los puertos

3.3.3Teclado (keypad 3x4JLas entradas a traves de un pulsador son muy habituales en los sistemas con micro­control adores para trabajar con una mayor informacion 0 informacion alfanumerica.Por ejemplo, se utilizan los teclados matriciales de lx4, 3x4 0 4x4 (ver Figura 18).

Figura 18. Dlferentes tlpos de tedados matrlciales

El cornpilador de C incluye el driver KBD.C para manejar el teclado (3x4). Las fun­clones que incorporan son las siguientes:

kbd_initOlnicializa el sistema, debe ser la primera funci6n en el programa.

kbd_getcODevuelve el valor de la tecla pulsada en funci6n de la tabla que tiene programada(ver figura 19).

liP 0 ! J •char const KEYS[4][3] a {{'1','2','3'}.

{'4' ,'5' ,'6'}.{'7','8','9'},{'*','O','U'}};

f1gura 19.La deflnlcl6n de teclas en el archlvo KBD.C

A traves de la modificaci6n de esta tabla podemos adecuar el resultado del progra­rna a las dislintas caratulas del teclado.

EI archive KBD.C esta pensado para trabajar con el PORTB 0 eJ PORTD (ver Figura20). Activando 0 no la linea #define Ilse_portb_lcd TRUE podemos seleccionar elPORTB (ver figura 21).

75

Page 82: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

Hlr deFrn ~~portb_kbdrtbl,ll kbd - 6 \

lIeIs!!IIhl)t1\ kbd - 8

tentJi f"Nldif

I '111 t 0 Iart n (I

I on I I I' 0 (I

IIlf defined use_portb_kbd ~lilli' inp set_tris_kbd(,.,rset_triS_b(X)<, )

1I1'1s£Pdefinl set tris kbd(\l set tris d(x)

lendlf _ - --

Figura 20. La conflguracl6n de puertos

Figura 21. La seleccl6n del PORTS

Las conexiones vienen dadas en el fichero pero se pueden modificar:

~h1I'till' COLO (1 « 5)tltlefio~COl1 (1 « 6)1IdeFtn,. COl2 (1 « 7)

111ft·fin ROWO (1 « 1) [)lIdHim RO~/1 (1 « 2)'IIIefin ROll2 (1 « 3)IIdel i111' ROlla(1 « 4)

r· :

CO Cli C21~ ... ~ rj,RO 1 2 3A

Rl8 4 5 6

rlflaOlIN'! ~ R2RB. 22 ,e 7 8 9R82 71 :~RtI3IPQM ..R84 26 R3:HI 0* 0 # ~\'RIle Hf-

_ocRS7iPGD r-1L

.~ ... T<'d",",~'"~f

Figura 22. La aslgnacl6n de patlllas

76

Page 83: Untitled 1

3. La gestion de los puertos

Se puede trabajar con el LCD y el teclado a traves de puertos separados 0 compar­tiendo el mismo puerto (con ej ahorro de patillas que conlleva) (ver figuras 23 yM).Compartir puerto suele eonllevar problemas si se quiere trabajar con el teclado ylas interrupciones RB4IRB7.

77

Figura 23. Ef1.CDYel tecJado en puertos distintos

LCD2

~j.......IListo•.• I

'1 I I 58,90.~~~ ~~~ B5ssa&Sa- -

., 1 2 3 .~;

. 1T1-1-'" •

• 4 5 6 tI~U1 -l r-

~1~rciJG'4

< 7 8 9~~ = ., 1 ~

$ AAIlMIIC ~~- 0* 0 #""11M' - >7

_oHJN_ -:t ~ P..!-npt;b,.

~~ fICIQIl1Q5O't,q;' I""un"""""'"~~

..",.,":"""st'OStI< g""....,..,.".,..".

MRt:1l~Ut!Gr"",_~~

Figura 24. Ef1.CDYel tedado compartiendo los mismos puertos

Ejemplo 5: Introducir datos par el teclado Y visualizarlos en el LCD. Cuando sepulsa la tecla 1/*" borrar e1LCD (ver figura 24). Se dispone de los siguientes compo­nentes ISIS: P[C18F876,LM016L Y KEYPAD-PHONE.#include <16FB76.h>

Ifuses XT,NOWDT,NOPROTECT,NOLVP

/use delay(clock= 4000000)

#include <lcd.c>

#incLude <kbd.c>

Page 84: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

void main ()char k;int: x;lcd_lnH (),.kbd_lnit();por.t_b_pullupS(TRUE),.lcd_putc("\fList;o ... In");

while (TRUE) (k-kbd_ger::ct) ,.x-k-48,.if(kJ"O) I

ifrk- 'W')

lcd_putc( '\f');

elselcd_pucc (k) ;

delay_ms (SOO) ;

II Conversion numerics

II Imprime caracter

prinr:f(1cd_putc, "If Car-flc",k),. II Imprime cerecce«delay_ms (SOO) ;

printf(lcd_putc, "Ie Car- u",k); /1 Imprime valor ASCIIdelay_ms (SOO);

princtUcd_puCC, "It Num-tu",x); 1/ Imprime valor numeric"delay_ms(500) ,.

lcd_putc("\tListo ... In"');

)

Figura 25. ef programa de. ejempfo 5

Debemos observer que el valor leido en el teclado y el visualizado en el LCD esun caracter ASCn. Si deseamos convertirlc a su valor numerico correspondientedeberemos restarle el valor 48 (30 en hexadecimal); esto se debe a que el caracter 0en ASCrr es 30h, ell es 31h, etc.

Ejemplo 6: Disefiar un sistema basico para el control de accesos; a traves de unteclado de 3x4 introducir una clave de 3 dlgitos que cuando sea correcta abra unapuerta (con un pulsu a un rele) y 10 indique en una pantalla de LCD. Guardar laclave de acceso en la memoria EEPROM (figure 26). Se dispone de los siguientescomponentes ISIS: PIC18F876, KEYPAD-PHONE, RES, 80135, CELL Y RELAY.

78

Page 85: Untitled 1

3. La gestio" de los puertos

LC02~I"YIn,. h,1I1 III .I

_"I- 1 2 3

~

. ',,'

t o.4 5 6

,- "'"_: :if- 7 8I 9

1I~~ It: * 0 #

hl._

;;-

~"" -

Sill !Rl.l 1III 'n-tr;::::l

rBAll

•• N

f------CFA:RAl)U}lA

Figura 26. EI esquema del ejemplo 6

#;include <16F876.h>#fuses XT,NOWDT,NOPROTECT,NOLVP#use delay(clock- 4000000)Husescandard_~o(a)

# inc:1IJdl'!<led. c>#include <kbd.c>#include <stdlib.h>!lrom Ox2100-( '7',' 2',' 3'} II Posicion 0,1 y 2 de la Eepromcon los dezos.:

II 1,2, Y 3 respectivamentevoid main()

char k;inc i :char daca{3}, clave(3]; II Matrices pari! quesde» c ieve y datoslcd_in.i.t; ();kbd_inJ.t ();port_b_pullups(TRUE);while (TRUE) {

II posicion de la matrizpnntf (lcd_pucc, "\ fpuls,u tecla 1In"); I I Para primer data1~.Iple(1<-2)( II Para eres datos

k-kbd_getc{); II Lee el teclado

79

Page 86: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

i-'-+;

1/ 5i se ha pulsado alguna reelaII se guarda en la posici6n correspondienre// de la macriz

if (k!=O)

{data l i i=k :

pri"Ci'(lcd_putc,"lfpulsar teela ulnH,iH);, II Siguiente dato

for (i=O;i<=2;~++) II Pasa datos de eeprom a la matriz claveclave[ij=read_eeprom(i);}

if ((data [OJ=clave (OJ)E.S (data Li.l =claveLLl) && (data (2j=clave(21))( printf(lcd_putc, "lfPueIt:a Abierca"); II Camparalos datos y !a claveoutput_high (PIN_AD); /1 5i es 190al da pu.Ieo a1 reledelay_ tas (500) ;oucput_low(PIN_AO);}

else printl (lcd_putc, H\ fPuerca Cerrada");

delay_InS (LOOO);}

I Clave erronea

Figura 27,' Programa del Ejemplo 6

Ejemplo 7: Introducir los datos, a craves de un teclado, de velocidad de un mo­tor y generar una serial modulada en ancho de pulso proporcional al dato de lavelocidad (ligura 28). Se dispone de los siguientes componentes ISIS: PIC18F876,KEYPAD-PHONE, RES, 2SKl058, CELL Y MOTOR.

Figura 28. El e.squemadel ejemplo 7

80

Page 87: Untitled 1

3. La gesti6n de los puertos

Se genera una sefial modulada en ancho de pulse PWM (sin utilizar el moduloCCP de los PiC) donde el sernlperiodo de sefial a nivel alto esta fijado por el valorintroducido en cl reclado. Para elJo, se uriliza lin registro de 8 bits para fijar el semi­periodo a nivel alto (PWMH) y el semiperiodo a nivel bajo (PWML) (ver la Figura29). Como el valor maximo del registro es 255, este debe coincidir con el valormaximo del teclado, es decir 9; por 10 tanto, la relacion entre el valor del teclado yel semiperiodo PWMH sera:

PWMH= (255/9) x Tecla, aproximadamente PWMH=28ItTecla.

J PWML

~

J

81

255

Figura 29. La modulacl6n PWM

Segun dicha ecuaci6n cuando el valor de teclado sea 0 la salida sera 0 de formaconti nus y el motor esta ra parade. Cuando el valor de teclado sea 9, el semiperiodoPWMH sera de 252 (no llega a 255) y el motor estara casi a toda marcha. EIsemipe­riodo a nivel bajo PWML se obticne de restar el PWMH a 255.

Hinclude <16f876.h>#fuses XT,NOWDT,NOPROTECT,NOLVPRUSE DELAY (CLOCK-4000000)IINCLUDE <kbd.c>IUSE STANDARD_IO (a)

VOID MAIN()

ICHAR X,kant '0'; / k valor de eeclado, k valor anterior de tecladoch~r PWMH·O,PWML 0; II Semiperiodo alto y bajokbd_in,it();PORT_B_PULLUPS(TRUE);

WHILE (1) {

kekbd_getc ()..if (ke·'\O') k-kant:

1/ Bucle in/mito (siempre consulta el teclado)'/ Lee en ASCII el valor de la tecla pulsada

II S1 no se pulsa cecla (10) se usa1/ e.L valor ancecJ.or

II Si se pulsa • 0 # se asiqna// un valor cera.

Page 88: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

kant-Jc; II Sa guarda tecla pulsadak-k-48; /1 Se convierce de ASCII a valor numer.lCOPWMH-k'28; II Proporci6n encre valor tecla.}'semiperiodo Alto.PWML-2S5-PWMH; II Semiper.lodo Bajo

for (PWMH;PWMH>D;PWMH--)( /1 Obcenci6n de la salida a nivel a1eoOUTPUT_HIGH{PIN_ADJ;}

[o.r(PWML;PWML>O:PWML--)(OUTPUT_LOW(PIN AD);}

II Obtencion de la salida a nlvel ba]o

FIgura 30. EI programa del ejemplo 7

FIgura 31. La senal obtenlda para el valor 9

82

Page 89: Untitled 1

4. Las interrupciones y los temporizadores

Capitulo 4

Las interrupciones ylos temporizadores

83

4. 1 IntroduccionLas intcrrupciones permiten a cualquier suceso interior 0 exterior interrumpir laejecuclon del programa principal en cualquier memento. En el memento de pro­ducirse la interrupcion, el PTC ejecuta un salto a ]a rutina de atencion a la interrup­cion, previamentc definida por el programador, donde se atendera a la demandade la interrupcion. Cuando se termina de ejecutar dicha rurina, el PIC retorna a laejecuci6n del program a principal en la misma posicion de la memoria de prograrnadonde se produ]o la interrupci6n.

EI rnane]o de interrupciones permite realizar program as que no tienen que estarcontinuamente consultando sucesos internes 0 externos mediante tecnicas de con­sulta 0 polling, las cuales provocan retardos 0 paradas en la ejecucion del programaprincipa1.

Los TIMER 0 Lemporizadores son m6dulos integrados en el PIC que pennite reali­zar cuentas tanto de eventos internes como extemos. Cuando la cuenta es internase habla de temporizacion y cuando la cuenta es extema se habla de contador. Lostinters estan intimamenle ligados al usa de las interrupciones, pero no por ella seutilizan siempre de forma conjunta.

4.2 InterrupcionesAI producirse una interrupcion, el PIC salta automaticamente a la direcci6n delvector de interrupcion de la memoria de prograrna y ejecuta Ja porcion de progra­rna, correspondiente ala atenci6n de la interrupcion, hasta enconrrar Ja instruccionRETFIE. Al encontrar dicha instruccion, abandons la interrupci6n y retorna a la

Page 90: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

posicion de memoria del prograrna principal desde la que salto al producirse lainterrupcion.

Las fuentes de interrupcion depcnden del PTCutilizado, Por ejemplo, el PIC16F84tiene 4 Fuentes de interrupcion y la familia PIC16F87X tiene entre 13 y 14.

Los PIC de gama baja y media tienen un unico vector de interrupci6n situado enla direccion 04h de programa (figure 1), mientras que los de gama alta tienen dosvectores de interrupcion de distinta prioridad, alta y baja, situados en la posicion08h y 18h de la memoria de programa.

PC<12'O>

CAl.I..IIETURN t HRETF1E.RETl.W+_ tiHlvel1 de la Plla

Hlvel 2 do la Plla 13-V............................

ItNlvel 8 de 18 Pile

IiVector d. Reset OOOOh

..................... ,........ +0- k--

ilVector do Interrupclon 0004h

0OO5h

Pegin.O07FFh

::!0800hPaglna 1

OFFFh1000h

Pagln! 2

1-- 17FFh1FFFh

f)Pa(Jlna3

Figura 1.Memoriade programa ,posicion del vector de interrupcl6nJ

Al poseer un unico vector de interrupcion (dos en la gama alta), el PIC posee unosregistros de control donde mediante la utilization de banderas, 0flags, el usuariopuede deterrninar que es 10 que ha producido la interrupcion: ademas, en estosregistros, se pueden habilitar 0 no las distintas fuentes de interrupcion (mascarasde Interrupcion) e, inc1uso, permite una habilitaci6n general.

Cuando Ia habilitacion general esra activa y algunes, 0 todas, Ia particulares tam­bien 10estan, los flags se activan en el caso de producirse algunas de las interrup­clones, de tal manera que el programador puede, mediante el testeo de dichos flags,actuar de la forma mas adecuada.

84

Page 91: Untitled 1

4. Las interrupciones y los temporizadores

La familia PIC16F87X tiene hasta 14 fuentes de interrupcion. Posee un registro decontrol, TNTCON (figura 2),que permite la habilitacion de interrupdones y el mancjode losflags. La habllitacion general se activa mediante e1 bit GIE (lNTCON<7», el cuales desactivado en el reset; por 10tanto, hay que habilitarlo por programa. Existen 4registros adicionales para Ia gesnon de las interrupciones: PIR1, PIR2, PIEl YPIE2.

Cuando se responde a una interrupcion, el bit Glf es inhabilltado para evitar inte­rrupciones sucesivas. La direccion de retorno del program a principal se almacenaen la pila y el contador de programa se carga can Ia direccion 0004h. Una vez en larutina de atenci6n a la interrupcion se puede deterrninar la fuente de la interrup­cion mediante el testeo de los difcrentes flags. Los flags activos deben ser "borrados"antes de abandoner la rutina de interrupci6n para cvitar reentradas err6neas.

Registro ITCON Idlreccion RAM: OBh/8Bh/1 OBh/18Bh, [PIC16F87x]

RIW·O RIW..o RIW·O R/w·O RIW·O RIW-O RIW..o RIW-x

GIE 'I PEIE I TOlE IINTE I RBIE I TOIF IINTF I RBIF

I i1Blt7 BltO ~,Figura 2. Reglstro INTCON

bit 7: GlE: Bit de habilitacion global de las interrupciones.1= Habilita todas las interrupciones no enmascararbles.0'" Las deshabilita.

bil6: PElE: Bit de habilitacion de las interrupciones de perifericos.1=Habilita todas las interrupciones no enmascarables deperifericos.0= Las deshabilita.

bit 5: TOlE: Bit de habilitaci6n de la interrupcion por desbordamiento delTMRO:

1 = Habilita la interrupcion del TMRO.0= La deshabilita.

bit 4: INTE: Bit de habilitacion de la interrupci6n extern a RBO/INT.1= Habilita la inlerrupci6n del RBO/INT.0= La deshabilita.

bit 3: RB1E: Bit de habilitaci6n de la interrupci6n por cambio en el PORTB.1 = Habilita la interrupci6n del PORTB.0= La deshabilita.

85

Page 92: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

bit 2: TOIF:Bit de jlag de Ja interrupcion del TMRO.1=EIregistro del TMRO se ha desbordado (debe borrarsepor software).o = EI registro del TMRO no se ha desbordado.

bit 1: fNTF: Bit de jlng de la interrupci6n del RBOIlNT.I=Se ha producido una interrupci6n extema por RBOIINT(debe borrarse por software).0= No se ha producido la interrupci6n.

bit 0: RBIF: Bit de jlng de la interrupci6n por cambio en PORTB.1=Al menos uno de los terminates RB7:RB4 ha cambiado de estado(debe borrarse por software).0= No se ha producido cambio en dichas patillas.

Reglstro PIE1 (dlreccfon RAM: 8Ch, [PIC16F87x]

RfW..() RfW·O RfW..() RfW·O RfW·O RfW-O RfW-O RfW..()

! PSPIE lADlE I RCIE I TXIE I SSPIE I CCP11E I TMR21E I TMR11E ~:Bit7 BitO i:i

,~,,~ 'ci,'

Figura 3. Regbtro PIE'

bit 7: PSPIE: Bit de habilitaci6n de interrupci6n por lectura/escritura del puertoparalelo esclavo:

1 = Habilita la interrupcion por lectura/escritura del PSP.0= La deshabilita.

bit 6: ADIE: Bit de habilitacion de interrupci6n por conversion AID.1=Habilita la interrupcion.0= La deshabilita.

bt 5: ReIE: Bit de habilitaci6n de interrupci6n por recepcion del USART.] =Habilita la interruption.0= La deshabilita.

bit 4: TXIE: Bit de habilitacion de interrupci6n por transmisi6n del USART.1=Habilita 1a interruption.0= La deshabilita.

86

Page 93: Untitled 1

4. Las Interrupciones y los temporizadores

bit 3: SSPIE: Bit de habilitacion de interrupci6n del puerto sene sincrono.] ""Habilita la interrupcion.0==La deshabilita.

bit 2: CCPlIE: Bit de habilitacion de interrupci6n del modulo CCP1.1 '" Habilita la interrupcicn.

0= La deshabilita.

bit I: TMR2IE: Bit de habilitaci6n de interrupcion por igualacion delTMR2 y PR2.

1 = Habilita la interrupcion.0= La deshabilita.

bit 0: TMRl1E:Bitde habilitacion de interrupci6n por desbordamiento del TMRI.1= Habilita la interrupci6n.o - La deshabllita.

Regfstro PfE2 ,dlrecclon RAM: 8Dh, (PIC' 6F87xlu-o RIW-O u-e RIW-O R]W·O u-e u-o RJW-O

I i. I I ~ r IEEIE I BCLIE I I ICCP21E ,

81t7 61tO~. -~

FIgura 4. Reglstro PIE2

bit 7: No implementado. Se lee como O.

bit 6: Reservado.

bit 5: No irnplementado. Se lee como O.

bit 4: EEIE: Habilitaci6n de interrupcion por escrirura en EEPROM.1= HabiJita la interrupcion.0 .. La deshabilita.

bit 3: BCLIF: Flag de interrupcion por colision en bus1 ""Colisi6n en el bus SSP 0 12C en modo master.0= No hay colislon.

bit 2-1: No impJementados. Se leen como O.

bit 0: CCP2JE: Habilitacion de interrupcion del modulo CCP2.1=Habilita la interrupcion,0= La deshabilita

87

Page 94: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

Los registros PIRl yPIR2 contienen los flngs de las distintas interrupciones, El com­pilador C se encarga de generar el codigo necesario para leer y borrar dichos flags,tal y como podremos ver en el siguiente apartado.

4.2.1 Interrupciones en CEn el compilador C la directive habitual en el manejo de las interrupciones esIIINT_xxxx. Especifica que la funcion que le sigue es una funcion de interruption;edemas, no necesita mas parametres.

Las posibles directivas son las siguientes (en gris las posibles interrupdones en lafamilia PIC16F87X):

In terrup clones Descripci6n

#INT_AD Conversion AD completa.

!tINT_ADOF Conversion AD fuera de rango de tiempo.

~INT_BUSCOL Colision de bus.

#INT_BUTION Par boton (14000).

CINT_CANERR Error en el modulo CAN.

IiINT_CANlRX Mensaje invalido en e1 bus CAN.#INT_CANRXO Bus CAN redbe un nuevo mensaje en bufferO.

#INT_CANRXI Bus CAN recibe un nuevo mensaje en buffer 1.

#INT_CANTXO Bus CAN transmision completa en buffer O.4INT_CANDO Bus CAN transmision completa en buffer l.~INT_CANTX2 Bus CAN transmision completa en buffer 2.

#INT_CANWAKE Bus CAN even to de activacion 0 uiake-up.

i1INT_CCPl Unidad 1 de captura, comparacion y PWM.

IiINT_CCP2 Unidad 2 de captura, comparacion y PWM.

#INT_CCP3 Unidad 3 de captura, comparacion y PWM.UNT_CCP4 Unidad 4 de captura, comparacion y PvVM.#INT_CCP5 Unidad 5 de capture, comparacion y PWM.

#INT_COMP Comparador.

IIINT_COMP! Comparador 1.

88

Page 95: Untitled 1

4. las Interrupciones y los temporizadores

Interrupciones Descripcion

!TINT_COMP2 Comparador 2.

/tINT_CR Encriptacion finalizada.

IIrNT_EEPROM Escritura EEPROM finalizada.

flINT_EXT Interrupcion extema (RBO).

/lINT_EXTl Interrupcion extema ttl.

ttlNT_EXT2 Interrupci6n externa #2.

ttINT_EXT3 Interrupcion externa 113.

#INT_I2C Interrupcion 12C (14000).

#lNT_ICl Entrada capture ttl.'---

ItINT_IC2 Entrada captura 112.

ttINT_IC3 Entrada captura #3.

#INT LCD Actividad LCD

RINT_LOWVOLT Detectado bajo voltaje.

ItINT_LVD Detectado bajo voltaje.

#lNT_OSC_FAIL Fallo en oscilador.

!tINT OSCF Fallo en oscilador.

dINT_PSP Dato de entrada en puerto paralelo.

#INT_PWMTB Base de tiempo PWM.

!tINT .RA Cambio de estado en AO-AS.

ilTNT_RB Cambio de estado en B4-B7.

f1INT_RC Cambio de estado en C4-C7.

tiINT_RDA RS232 dato recibido.

/tINT_ROAO RS232 dato recibido en bllffer O.#INT_RDAI RS232 dato recibido en buffer 1.

IIINT_ROA2 RS232 dato recibido en bllffer 2.ItINT_RTCC Desbordamiento del Timer 0 (RTCC).ilINT_PSP Escrltura/lectura del puerto paralelo.

89

Page 96: Untitled 1

4. Las interrupciones y los temporizadores

Interrupcioncs Descripcion

,ltINT_COMP2 Comparador 2.~INT_CR Encriptacion finalizada.

#INT_EEPROM Escritura EEPROM finalizada.

dINT_EXT Interrupcion externa (RBG).

#INT_EXTI lnterrupcion extema #1.

IiINT_EXT2 Interrupcion externa .Ii2.

#INT_EXT3 Interrupcion externa 1t3.

#fNT_I2C Interrupcion 12C (1':1000).

!lINT_ICI Entrada captura 111.

#lNT_IC2 Entrada caplura #2.

~INT_IC3 Entrada captura #3.

I1INT_LCD Actividad LCD

#INT_lOWVOLT Detectado bajo voltaje.

#INT_LVD Detectado bajo voltaje.

IHNT_OSC_FAIl Fallo en oscilador.

I1INT_OSCF Fallo en oscilador.

#INT_PSP Dato de entrada en puerto paralclo.

ItrNT_PWMTB Base de tiernpo PWM.

ttlNT_RA Cambio de estado en AO-AS.

ltINT_RB Cambio de estado en B4-l37.

#lNT_RC Cambio de estado en C4-C7.

#INT_RDA RS232 dato rccibido.

#lNT_RDAO RS232 dato recibido en lll~ffi.'rO.

ItINT_RDAl RS232 dato recibido en buffer 1.

#INT_RDA2 RS232 dato recibido en bllffer 2.

#INT_RTCC Desbordarniento del Timer 0 (RTCC).

#INT_PSP Escritura/lectura del puerto paralelo,

89

Page 97: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Mlcrocontroladores PIC

Interrupdones Descripci6n

ItlNT_SSP Actividad en SP! 0 12C.

itINT_SSP2 Actividad en SPIo 12CPort 2.#INT_TBE RS232 ouffer de transmision vacio.

# INT_TB EO RS232 btiffer 0 de transmision vacio.

#INT_TBEl RS232 buffer 1de transmision vacio.

#INT_TBE2 RS232 bliffel' 2 de transmision vado.

IIINT_ TIMERO Desbordamiento del Timer 0 (RTCC).

ItlNT_ TIMER1 Desbordamiento del Timer 1.

ftINT_ TIMER2 Desbordamiento del Timer 2.

#INT_ TIMER3 Desbordamiento del Timer 3.

#INT_TlMER4 Desbordamiento del Timer 4.

#INT_TIMERS Desbordamiento del Timer 5.

#INT_USB Actividad en el USB.

Existe una directive #INT_DEFAULT que irnplica que se utilizara Ia funcion que Jeacornparia si se activa una interrupcion y ninguno de losflrrgs esta activo.

La directiva #INT_GLOBAL implica que la fundon sustituye todas las acetones queinserts el compilador al aceptarse una interrupcion. Se ejecuta solamente 10escrito endicha funcion, No se sueIe utilizar y si se hace debe hacerse con mucho cuidado.

Si se utilizan las directivas de interrupcion, el compilador genera el codigo nece­sario para ejecutar la funci6n que sigue a la directive. Ademas genel'a el c6digoriecesario para guardar al principio y restituir al final el contexto; tambien borrarael flng activo por la interrupcion.

E1compilador C induye funciones para el mejor manejo de las directives de 'inte­rrupd6n:

enable_interrupts (nivel),nioel es una constante definida en un fichero de cabecera (16F87X.h -figura 5-) ygenera el codigo necesario para activar las mascaras correspondientes, afectando alos registros ITeON, PIEI y PIE2.

En el PICl6F876, los "niveles" permitidos son:

90

Page 98: Untitled 1

4. Las interrupciones y los temporizadores

enable_interrupts ITCON(OBh) PIE1(8Ch) PlE2(8Dh)(nivel);

GLOBAL 11000000COh

INT_RTCC 00100000

INT_TIMERO 20h

INT_EXT 0001000010h

INT_RB 00001000OSh

INT_AD 0100000040h

INT_RDA 0010000020h

INT_TBE 0001000010h

INT_SSP 0000100008h

INT_CCPl 0000010004h

INT_TIMER2 00000010OTh

INT_TlMERl 00000001cu.

INT_EEPROM 0001000010h

JNT_BUSCOL 0000100008h

INT_CCP2 0000010004h

91

GLOBAL equivale a GIE = PElE = 1 Ydebe activarse de forma lndependiente. Elresto activaran la mascara correspodiente.

disable_interrupts (nivel);Realiza Lafuncion contraria a Laanterior, mhabilita las mascaras dela mterrupcioncorrespondiente.

Page 99: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

L_TO.HH_TO_L

I etU\C INT_TBtINT_ItllAINT_TUIERlINT TIltER2

,. lNT:::CCPllNT_CCPZINT SSP

Mo:I~h. INT:::PSP

Figura 5. Parte del flchero Include 16F87x.h

4.2.1.1 'nterrupclon exterIor por RBOEs una interrupcion basics, corruin a 1amayoria de los PTe. Permite generar una in­terrupcion tras eJ cambio de nivel de alto a bajo 0 de bajo a alto en la entrada RBO.

La directive utilizada es #JNT_EXT y se debe acompsfiar de las siguicnres funciones (afectan al bit 6 del registro OPTION_REG, ver figura 6).

ext_int_edge (H_TO_L);

La Interrupcion es por Ilanco de bajada (active el flag INTF).

ext_int_edge (L_TO_H);

La interrupci6n es por f1ancode subida (activa el flag INTF).

R1W·1 R1W·1 R1W·1 R1W·1 R1W·1 RJW·1 RJW·1 RJW·1

I RBPU IINTEDG I Toes I TOSE IpSA I PS2 I PS1 Ipso

Blt7 BltO ~."'A'-~~~~ .~""-'~

Figura 6. Reglstro OPTION_REG

bit 6: INTEDG: Bit de seleccion del f1ancode interrupcion de RBO.

1= La interrupci6n es por flanco de subida del pin RBO/fNT.0= La interrupci6n es por flanco de bajada del pin RBOflNT.

92

Page 100: Untitled 1

4. las interrupciones y los temporizadores

Ejemplo 1:Eticcuder y npagnr, cOlIsecutiVI111I1!11tc, un LED ell Inpaiilla RB7 cuando sepro­tiuzca U/I camuio de ulue! ell In patill« RBO(ver figura 7). Compouentes: 1515:PIC16F876,RES, LED-GREEN 1) SW-SPDT-MOM.

asel/ClKINOSCgJClKOUT

1...---.J....4 MCLRlVpplTHV

RBo/lNTRB'RB2

RB3fPGMRB4RBS

RB61PGCRB7/PGO 1-""'-----...,

SW-SPDT-MQMRAO{ANORi\1/AN1RA2/AN2JVREF·RA31AN3NREF+RA4fTOCKIRA6IAN4ISS

RComosomCKIRClfT10SUCCP2

RC2ICCPlRC3/SCKISCLRC4ISDIISDA

RC5ISOORC8ITXICKR07lRXlDT

01LED-GREEN

PIC16F876

Figura 7. Ejemplo 1

'include <15F876.h>

Ifuses XT,NOWDT,PUT,NOWRT

luse delay(clock- 4000000)

luse fast_io (B)

~ntl cambio-O;

lINT EXT

ext_isr() (

II Variable de cambio

II Atenci6n a inten'upcic:in por cambio en RBO

II Punci6n de interrupc~6n

output_toggle (pin_B7);

void main () Isec tris~B{OxOl); II SO como entrada, B7 como salida

outpuc_low{PIN_B7); II Apaga LED

porc_b_pulJupS(TRUE); II Pull-up pe s:« RBOenable_interrupts (lnt_ext); II Habil~ta inc. RBO...

ext_int_edge(L_TO_H); /1 por flanco de subida

enable_inteaupts (GLOBAL),. II Habilita inc. general

~hile 11)( II Bucle inJmito de espera

Figura 8. Programa del ejemplo 1

93

Page 101: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

4.3 TIMEROEI bloque funcional TIMERO/WATCHDOG es un contador (registro) de 8 bits, mere­mentado por hardware y programable. La cuenta maxima es de 255 (el incrementoes constante e independiente).

• Contador: cuenta los eventos externos (a traves del pin RA4ffOCKl).• Temporizador: cuenta Los pulsos internes de reloj.

Se puede insertar un prescaler, es decir, un divisor de frecuencia programable quepuede dividir por 2, 4, 8, 16, 32, 64, 128 0 256. La frecuencia de conteo es una cuartaparte de la frecuencia de reloj (fosc/4). Posteriormente, con el uso del prescaler sepuede dividir la frecuencia,

E1bloque del TIMERO puede fundonar como WATCHDOG, 10que permite que du­rante el funcionamiento normal del microcontrolador, un desbordamiento (0 time­out) del Watdldog provo que un reset (Watchdog Timer Reset). Para evitar el desbor­damiento se debe, cada derto tiempo y antes de que llegue aJ limite, ejecutar unainstruceion CLRWOT que borra el Watchdog y que hace comenzar un nuevo con teodesde cero. Se basa en un oscilador RC interno, independiente del oscilador del mi­crocontrolador y que no requiere ningun componente extemo. ElWatclrdog cuenta in­cluso si el reloj conectado a OSCl/CLI<I y/o OSC2ICLKO esta parade, por ejemplo,por la ejecucion de una instruccion SLEEP 0 por un defecto del cristal oscilador.

Los registros implicados en la configuradon del TIMEROIWDT son los siguientes:

• OPTION_REG: configura el"hardware" del TIMERO/WDT.

• lNTCON: permite trabajar con la tnterrupcicn de] TlMERO/WDT.

• TRISA: habilita la patilla RA4.

Reglstro OPTION_REG (direccion RAM: 81h/18th, [PICt6F87x]

,MN -1__ .-MN__.1__ ,-AAN__ ._1-._AAN__ ._1-._AAN .1-"AAN .1__ .-RNV_·_-1__ r-AAN__ ._1__ ,~I RBPU IINTEDGI Toes I rOSE IpSA I PS2 I PS1 Ipso h

Figura 9. Registro OPTION_REG

bit 5: TOeS:Procedencia de las sefiales:1=RA4ITOCKl.0= Reloj interne.

bit 4: TOSE:Tipo de flanco en el TOCK1/RA4:1 =Flanco descendente.o =Flanco ascendente.

94

Page 102: Untitled 1

4. las interrupciones y los temporizadores

bit 3; PSA; Asignacion del divisor de frecuencias:

l=WDT.

O=TMRO.

bit 2:0: PS2:PS1;PSO:Deterrnina el divisor de frecuencias a actuar segun Iasiguiente tabla.

Valor Ran,goTMRO RangoWDT

000 1:2 1.1

001 1:4 1:2

010 1:8 1:4

011 1:16 1:8

100 1:32 1:16

101 1:64 1:32

110 1:128 1:64

111 1:256 1:128

El tiempo de desbordamiento del TIMERO se calcula segun 1asiguiente ecuacion:

T =TCM·Prescaler·(256 _ Carga TMRO)

Donde TCM es e1 ciclo maquina quese puede calcular mediante la ecuaci6n:

TCM =4/Fosc

4.3.1 TIMERO en CLa funcion para configurar el TIMERO es:

setup_timer_O (modo);

Donde modo esta definido en el fichero de cabecera (afecta a los bits 5:0 del OP­TION_REG):

Setup _Timer._O(modo)i OPTION_REG(81h/181h)

RTCC_INTERNAL , 00000000OOh

RTCC EXT_L_TO_H 00100000~ 20h

95

Page 103: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

Setup _Timer_O(modo); OPTION_REG(8lh/18lh)

RTCC_EXT_H_TO_L 0011000030b

RTCC_DlV_1 00001000OSh

RTCC_DN_2 00000000OOh

RTCC_DIV_4 00000001OIh

RTCC_DJV_S 0000001002b

RTCC_DN _16 0000001103h

RTCC_DIV_32 0000010004h

RTCC_DJV_64 00000101OSh

RTCC_DIV_llS 0000011006b

RTCC_DIV_256 0000011107h

Los distintos modos se pueden agrupar mediante el empleo de simbolo I.setup_eimer_O (R!l'CC_DIV_2 I R'l"CC_EXT_L_TO_H);

La funcion para configurar el WDTes:

setup_wdt (modo);Donde modo esta def:i:nidoen eJ fichero de cabecera (aiecta a los bits 3:0 del OPTION _REG):

Setup_wdl(modo); OPTION_REG(8lh/18lh)

WDT_18MS 0000100008h

WDT_36MS 0000100109h

WDT_72MS 00001010OM

96

Page 104: Untitled 1

4. Las interrupciones y los temporizadores

Setup_wdt(modo)i OPTION_REG(81h/181h)

WDT_144MS 00001011DBh

WDT_288MS 00001100DCb

WDT_576MS OOOOllOlOOh

WDT_1152MS 00001110OEh

WDT_2304MS 00001111OFh

Para activar el Watchdog se deben utilizer los bits de configuration mediante ladirective #FUSES:

IffusesWDT Activado.

Jtfuses NOWDT Desactivado.

EI comp:ilador C suministra una serie de funciones para leer 0 escribir en el Tl­MEROIWDT. Para escribir un valor en el registro :

set_timerO (valor),

valor: entero de 8 bits.

Para leer el valor actual del registro:

valor = get_timeT() Oioalar: entero de 8 bits.

Tambien permite realizar la puesta a cero del Watchdog (como CLRWDJ):

restart_wdt 0;Ejemplo 2: Generar una seiial cuadrada de 1KHz utilizando [a interrupciim del TIMERO(ver figura 10). Componentes IS[S: PIC16F876 e lnstrumentos ISIS: OSCILLOSCOPE yCOUNTER TIMER.

Para generar una sefial de 1 Khz se necesita un semiperiodo de 500 1-lS. SegUn 1aecuacion de desbordamiento del K, utilizando un crista} de 4 MHz Y tID prescalerde 2:

T= TCM·Prescaler·(256 _ Carga TMRO)

97

Page 105: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

500 J.1S = (4!4000000)·2·C256-x)

donde x = 6, es decir, se debe cargar el TlMERO con e] valor 6. Pero esta relation5610 se cumple si se trabaja en ensamblador. Al trabajar en C, el compilador generalfneas de codigo que aumentan e] tiempo de ejecucion de] programa y, por ello, esnecesario ajustar el valor final. En este caso se ha utilizado un valor de carga de 29(OxlD).

Figura' o. Ejemplo 2

NINCLUDE <16F876.b>

#use delay(clock=4000000)

#fuses XT,NOWDT

fuse standard_io(B)

#int_TIMERO

void TIMERO_isr(void)

ou-cput_togg.le(PIN_BO);

set ~imeIO (OxIS); )

void main() (setup_rimer_O(RTCC_IN~~IRTCC_DIV_2); II Configurdci6n timerO

II Se recarge el ciff~rO

set_ timerO (OxlE); I I Carge del timerO

enable_interrupts(LNT_~teRO); II Habillta interrupci6n timerO

enable_in-ceLTupcs(global); // HabiljLa interrupc~6n generaL

while (1); II bucle infinico

FI.gura 11. Programa del EJemplo 2

98

Page 106: Untitled 1

4. las interrupciones y los temporizadores--------------------------------EI compilador se encarga alentrar en la interrupci6n de inhabilitar las interrupcio­nes y al salir de borrar los flags, por 10 que no es necesario hacerlo por programa.

Se puede observar la serial con el osciloscopio digital y activando los cursores en elmenu de Trigger (figura 12) y la rnedida es de 998.76 us.

99

Figura 12. Osciloscopio digital

4.4 TIMER1 Y TIMER2El modulo TIMER1 es otro temporizador/contador con las siguientes caracteristicas:

• Trabaja con 16 bits (con dos registros de 8 bits: TMRlH y TMRlL).• Ambos registros se pueden leer y escribir,• Interruption por desbordamiento de FFFFh a OOOOh.• Reset por clisparo del modulo CCP.• Controlado por el registro TlCON (ver figura 13). Con el bit TMRION

(TlCON<O» se puede habilitar 0 deshabilitar.

Registro T1CON (dlreccion RAM: 10h,[PIC16F87x]bit 7:6: No Impiernentados: Se leen como O.

bit 5:4: TICKPSl:T1CKPSO: Selection del valor del presenter del reloj del TMR1:11= Prescaler a 1:8.

Page 107: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

10= Prescaler a 1:4.

01= Prescaler a J.:2.00= Prescalcr a l il.

u-e u..o RIW-O R/w·O RIW-O RIW-O R/w·O RIW-O

I I IT1CKPS1 I nCKPSO I nOSCEN IT1SYNC I TMR1CS I TMR10N tBil7 BltO

.~ - -. .",

Figura 13. Reglstro neON

bit 3: T10SCEN: Bit de habilitacion del oscilador del TMR1:

1 =Oscilador habilitado.

0= Oscilador parado.

bit 2: T1SYNC: Sincronizacion de la entrada de reloj extema.

Si TMR1CS = 1:

1=No sincronizado con la entrada de reloj interno.

0= Sincronizacion de la entrada del reloj externo.

Si TMRJ CS = 0:Esre bit es ignorado. TMRl uriliza el reloj intarno.

bit 1: TMR1CS: Bit de seleccion de la Fuente de reJoj para el TMRO:

1= Reloj externo desde eI pin RCOITlOSOIT1CKl (flanco de subida).

0= Reloj interne (F(~/4).

bit 0: TMRION: Bit de habilitaci6n del TMR1:

] =TMRI habilitado.

0= TMRl parado,

EI TLMER1 puede operar en los siguientes modes:

• Como ternporizador.• Como contador sincrono.• Como contador asincrono.

El modo de operacion se establece mediante el bit TMR1CS (T1CON<1». Enmodo temporizador, el TIMERl se incrementa en cada ciclo de instruccion, Enmodo contador se incrementa por flanco de subida de la serial externa. Cuando

100

Page 108: Untitled 1

4. Las interrupciones y los temporizadores

se habilita el oscilador interne del TfMERl mediante el bit TlOSCEN, las patillasRClrrlOSI y RCO/TlOSOrnCKI se configuran como entradas ignorando el valorde TRlSC<1:0>. EI TlMCR7 tiene un reset interno que puede ser generado por elmodulo CCP. Las interrupciones deJ TIMERl se controlan a traves de los registrosPIEl y PIRl.

EJtic01po de desbordamiento del TTMER1 se calcula segun la siguiente ecuacion:

T=T(.:M·Prescaler·(65536- Carga TMR1)

Donde Tt'M es e) ciclo maquina que se puede calcular mediante la ecuaci6n:

TeM=4/Fosc

El TlMCR2 es un modulo ternporizador con las siguientes caracteristicas:

• Temporizaci6n de 8 bits (registro TMR2).•Registro de periodo de 8 bits (PR2).• Ambos registros se pueden leer 0 escribir.• Presenter programable por programa (1:1, 1:4, 1:16).• PO$fcn/crprogra01able pOl'programa (1:1 a ]:16).

• lnterrupcion controlada por PR2.• El modulo SSP utiliza opcionalmente el TIMER2 para generar una senal dereloj.

EI TfMER2 tiene un registro de control T2CON (figura 14). El TIMCR2 puede serhabilitado mediante el bit TMR20N (T2CON<2» para optimizar el consumo depotencia.

101

Reglstro T2CON (dlrecclon RAM: 12h)[PIC16F87x]

U·O u-o RJW·O Riw-o RJW-O RJW·O RJW-o RJW.Q

'~ .. :~ TOUTPS3 I TOUTPS2 I TOUTPS1 ITOUTPSO I TMR20N I T2CKPS1 I T2CKPSO III8117 81t0

~Figura 14.Reglstro T2CON

bit 7: No implementado: Se lee como O.

bit 6:3: TOUTPS3:TOUTPSO: Seleccion del valor del postscater del TMR2.0000:: Postscaler a 1:1.000 1 = Postscaler a 1:2.

Page 109: Untitled 1

Compilador C CCSY Simulador PROTEUS para Microcontroladores PIC ---------------- --

1110= Poslscaler a 1:15.1111=Posiscater a 1:16.

bit 2: TMR.20N: 1Mde habilitaci6n del TMR2:1>=TMR2habilitado.o == TMRl parado.

bit 1:0: T2CKPS1:T2CKPSO: Selecd6n del valor del prescaler del TMR2.00 = Prescaler a 1:1.01=Prescaler a 1:4.Ix = Prescaler a 1:16.

E1TIMf.R2 se puede emplear como base de tiempos para la modulacion en anchode pulso (PWM)mediantela utilizacion del modulo CCP. ElTIMERl se puede leero escribir y es borrado en el reset. La entrada de reloj (FOSC/4) tiene un prescaler de1:1. 1:401:16 seleccionado mediante los bits T2CKPSl:T2CKPSO (T2CON<1:0».La salidase obtiene a craves de un postscaler (de 1:1 a 1:16) que permite generar lainterrupcion cuyo flag se encuentra en TMR2IF, (PIR1<.1». Los contadores de pres­caler y postscaler son borrados cuando se escribe en el registro TIMER2, cuando seescribe en el registro T2CON 0 en cualquier reset E1TIMER2no se berra cuandose escribe en el T2CON.

El tiempo de desbordamiento del TIMER2 se calcula segUn la siguiente ecuacion:

T = TcM,[Prescaler·(Carga TMR2 + l)·Postscaler]

Donde TCM es el ciclo maquina que se puede calcular mediante la ecuaci6n:

TeM =4/Fosc

4.4.1 TIMER1 YTIMER2 en CLa configuradon del modulo TMRI en e] compilador de C se realiza a craves de Iafuncion:

Tl_DISABLED 00000000DOh

setup_timeT_l (modo);Donde modo esta definido en el fichero de cabecera (afecta a los bits 5:0 del registroTlCON):

Setup_Timer_l(modo); TICON(lOh)

102

Page 110: Untitled 1

4. las interrupciones y los temporizadores

Setup_ Timer_l(modo); TICON(lOh)

Tl_INTERNAL 1000010185h

Tl_EXTERNAL 1000011187h

Tl_EXTERNAL_SYNC 1000001183h

Tl_CLK_OUT 0000100008h

Tl_DIV _BY_l 00000000OOh

Tl_DIV _BY_2 0001000010h

Tl_DIV _BY_4 0010000020h

TI_DIV _BY_B 00]]000030h

Los distintos modos se pueden agrupar mediante el cmpleo de simbolo I.

La lecture y escritura ell el modulo TMJU se realiza a traves de las siguienles fun­clones:

valor= get_timer1 Oi

set_timer1 (valor);donde valor es un entero de 16 bits.

La configuradon del modulo TMRl en el compilador de C se realize con la fun­cion:

setup_timer_2 (modo,periodo,postscaier);

donde:

• periodo es un valor entero de 8 bits (0-255)para el registro PR2;• postscale: es el valor del postscaler (1 a ]6). Afecta a los bits 6:3 del registroT2CONiY

• modo afecta a los bits 2:0 del registro T2CON.

103

Page 111: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

Setup_Timer_2(modo,periodo,postscaler); T2CON(12h)

T2_DISABLED 00000000DOh

Tl_DIV _BY_l 00000100. 0411

Tl_DIV _BY_4 00000101OSh

rr,DIV_BY_16 00000110OSh

La lectura y escritura en el modulo TMR2 se realize con la ayuda de las siguientesfunciones:

Ejemplo 3: Generar WIn [uncion que permiia realizar retardos de 1 segundo empleanda elTIMER1. Contponentes ISIS: PIC16F876.

valor =get_timer2 0;set_timer2 (valor);donde ualor es lID entero de 8 bits.

PIQ1ef'S'T!l

.- __. _lrW"filII!ii,,1iiI_- - - --, ,-' - I

• , , ,', l

I.. :.........\ ~•• ' ,,',". -•.. I.... I('I'.(J~ ~

D1 .~O-DLEt>-Bl _j '...t.... ,

GoA:t£~ MOCf' .'NI.'1~. I AD 0 .""........,.."v .e~.'

Figura 15.Ejemplo 3

Se calcula un periodo parcial de 0.5 segtm~os y se repite dos veces:

104

Page 112: Untitled 1

4. las interrupciones y los temporizadores

0.5 = 4/F osc·(65536-x)·P

con Posc= <I; MHz y preeecaie» 1:8,; e) TMRI = 3036.

NOTA

Para observer mejor el perioda conectar el Counter Timer a CE y ponerlo enmodo TiME (segundos).

iinclude <J6f876.h>#{lJses XT,NOWDT

#use delay (clock=4000000Jruse st.:Jnd:Jrd_~o(b)

luLl ("on(-O:

Nint_TIMER1void cempls (void)

II [ncerrupci6n TIMERJ.

II FunclOn

if (COIlL:"'l) output toggle(PIN_Bl);

sel:_ Clme.: 1 (3036):conr;+-t:

II Cada 2 interrupciones de 0.5 sII recarga del TMRI

main I)

set up_timer_l (Tl_TNTERNAL I Tl_DIV_BY_8J:set_timer] (3036);

enable_ inr:ern)pts (INT_TINERl) .­

enable_interrupt.s (global);

II recarga del TMRIII habi li ta intert-upcion cimerl/1 habllita lnl:errupci6n general

while (1):

Figura 16. Programa del ejemplo 3

Tarnbien se podria realizar sin inrerrupciones, esperando a que e) TMRl se desbor­dase.

,jn~llJde<16f876.h>'fuses XT,NOI-mT

luse de!dj'(clock-4000000)luse sCdnda"'d_J:o (b)

105

Page 113: Untitled 1

Compilador C CCS Y Slmulader PROTEUS para Microcontroladores PIC

temp1 s ()(

int cont-O;

outpuc_coggle(?lN_Bl);

while tcontcs] II Pa~a conrar 2 voces D.S seg

set_timer~ (30361; II Inicializa e1 TNRlwhile (geC_timerl(I~-3036); /1 Espera a que se desbocde (0.5 5)conc++;

main ()

secup_timer_l (Tl_INTERNAL Tl_DTV_BY_8J;

while (11 (

templs () ; II Llamada a la funci6n de cemporizacion

Figura 17. Programa de. ejemplo 3 sin interrupdones

Ejemplo 4:MediI' ei auclu: de un pulso mediante el TIMr.Rl y 1(1inierrupcion exierna pOl'RBO (Figura 18). Coinponentes ISIS: PIC16F876 !/ LM016L. lnstrumentos: OSCILLOS­COPE Y Genemdores: PULSE.

LC02LMOII!I.

102.0uS

Figura 18. EJemplo 4

106

Page 114: Untitled 1

4. las interrupclones y los temporizadores

A] medir el ancho de uri pulso se necesita detectar su flanco de subida y despuessu flanco de bajada. E510 se puede realizer mediante la interrupcion RBO ya queperrnite configurar el flanco de disparo.

Al producirse una interrupci6n, por ejemplo en el flanco de subida, se puede inicia­lizar el valor del ternporizador (TlMER1) en ese momento; se cambia la activacionde la intcrrupcion del RBO a flanco de bajada y cuando se vuelva a producir la si­gulenre interrupcion por dicho flanco se guarda el valor del temporizador.

EIancho de pulso sera la diferencia entre el valor del TlMERl en eJ (Janco de subiday 01flanco de bajada. EI ancho de puJso maximo para una frecuencia de 4 MHz (ci­elo maquina de 1 !-IS) es de 65,536 ms (un cicio del TIMERl). EI minimo dependeradel tiempo que tarda un program a en gestionar Ja interrupci6n y los calculos, En eJejemplo se puede conseguir medir anchos de pulso de entre 64,934 ms y 69 IJs.

Modificar eJ fichero LCD.C para que se visualice a traves del puerto C.

s t nol ude ,,16f876.h>

Uuses XT,NOWDT'use aelay(clockc4000000)linclude <lcd.c>

Int16 TFB;tloet: AP;

intl nuevopulso-O;intl cambio'O;

lint_extvoid funcian_Bxt_lnt() (if (cambio--O){set_ tlmer1 (0);

ext_int_edge (0,lI_TO_L);cambio-l;else (TFB~get_tlmerl();ext illtedge(O,L T~ H);cambia-O;if(nllevopulso."'O)I

nuevopulso-l;}

}

void main ()lcd_J.nit ();

II Tiempo Danco de bajada// Valor finaldel ancho de pulso/1 Enera otro pulso1/ Cambio de flanco de disparo

/1 Funci6n Inrerrupci6n1/ F.lanco de Subida1/ InicialJ.za TMRlII Conflgurar para flanco baJadaII Control de cambio de flanco1/ Flanco de BaJada

II Valor del TIMERl para el flanco de bajada/1 Cenfigurar para flanco subidaII Control de cambia de Danco1/ Fin de pulso ...1/ Pulse a calcular

107

Page 115: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

set:up_timeL"_l(Tl_INTERNAL Tl_DIV_BY_l): // Coniiqure ci on TillERl

ext:_int:_edge(O,L_TO_HI:

cambia = 0;enable_interrupts(int_ext):enable_2nterruptslglobal);

do (if (nuevopulso==l)(

AP = TFB"l.O;

1/ Configurarpara flancasub.lda// Control de cambio de uanco

// Habilitaci6n Interrupcion RaO1/ Hab.llitaciongeneral

/1 .;Pulso nuet'o?1/ Ancno de pulso en m:i crosequndos de ?'IMERI_

/1 a 4MHZ eI T = Ips'Timerlprintf(lcd_putc,"\nPu~o = %6.1fuS ". API; 1/ VLsualiza medida

1/ en !.CD

nuevopulso=O: /1 Puiso medida

while (TRUEI; /1 Buc1e iatin.!to

Figura 19.Programa de. Ejemplo 4

EI generador PULSE se utiliza para crear la serial de entrada. Con eJ boron derechose pueden editar sus caracteristicas (figura 20).

';

G_.oIQlN_ l_llowlVoI._ J{l- :j~

PuI:ed lH..nlV",,* s ·~AMlcpT=

Stalt{S=l 0DCs.'" R"" T.... 's..,.j (SOOn :.~ :Pwiln r.IT....IS_) 51»>

~ N,·W,,*"AIJdoo :E,_,.,-j ~ IIfdnlSeoclsmt • Puia"""""(\') 50 ·~['Jg!"Type~

F~t!lIOdSteadySl~5,g.Edge • f~YIH.J 51. :S"'!lIo1'ul<>o POR>dIS.."t ·~ ~PtI'OfO 4'dM1G,. :Cuterl SotAoe?~B<I"e1M.....!lEat.?

"'lido~'m; II C4nc;ej

, -5

Figura 20. Propiedades d~PULSE

Ejemplo 5:Geuerar una seiial cuadrada de 1 KHz utilizando la inierrupcion del TIMER2(figura 21). Componentes ISIS; PIC16F876 e Instrumenios ISIS: OSOLLQSCOPE yCOUNTER TIMER

108

Page 116: Untitled 1

4. Las inlerrupciones y los temporizadores

Para generar una serial de 1 Khz se necesita un semiperiodo de 500 fJS, segun laecuacion deJ desbordamiento del TIMERl, utilizando un crista! de 4 MHz, un pre­escaler de 4 y un postscale« de 1:

T= TQwl·[Prescaler·(Carga1'MR2+1)·Postscaler)

500 j.lS = (4/4000000)· [4, (X+1)'1]

donde X = 125;es decir, se debe cargar el,TIMER2 con el valor 125.Pero esta relacionsolo se cumple si se trabaja en ensamblador. AI trabajar en C, el cornpilador generalineas de codigo que awnentan el tiempo de ejecuci6n del program a y, par ello, esnecesario ajustar el valor final. En este caso se ha utilizado un valor de carga de 11.

109

_mn

, ;;-. I •

, I ,",-_, .. - - - ~\ . - .

RIlO/INTRBIBe2

RB3.'PGMRB4Re5

ReffJPGgRI!7IP(,1)

RCOITIOSOfl' ICJ(lR01IT1OSI/tCPZ

RC2ICCPIRC'lISCKlSClRc4lSollS0A

FlCI51SDGR06ITX1CKRC11RX1DT

Figura 21. EjempJo5

{(INCLUDE <16F876.h>

luse aelay(clock=4000000)

-/Ffuses XT,NOWDTifuse $candard_ i.o(8)

tine TIMER2

void TLMER2_isr(void) {outpu t_ TOGGLE (PIN_ BO) ;

sec_ timer2 (11); I/ para semipez::iodo a1!:Co

/1 se recarga e1 TrMERO

Page 117: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

void main () fsetup_umer ,t!(T2_DIV_BY_4,124,l); 1/ contiqurecion TlMER2

enable_interrupts (INT_TTMER2); 1/ habilit:a ~nterrCJpci6n TlMERO

enpble_interJ:upts(qlobal); II habl1~ta interxupci6n general

Ivh~le (1),. 1/ bucle inilnito

Figura 22. Programa del ejemp'o 5

Figura 23. Sma' de , KHz

Ejemplo 6: lntroducir los datos, a traves del tedado, de In oelocidad de un motor de co­mente continua y generar una seiial modulada en un ancho de pulso proporcional al dato develocidad. Controiar la uelocidad en rpm y oisualizarla ell 1111LCD (figura 24). Componen­tes iSIS: PiC18F876, KEYPAD-PHONE, RES, 2SKl058, CELL, LM016L y MOTOR­ENCODER

Funciona igual que el ejemplo 6 del tema de los puertos, pero ahora se le afiade uncontador de pulses controlado por e] TlMERO. Los pulsos proceden de un encoderque suministra el modele del MOTOR-ENCODER. Este modele permite obtenertres tipos de salidas: Ql, Q2 e mx.Ql y Q2permiten controlar el sentido de giro y la position angular del motor (seconfiguran en la option PULSES PER REVOLUTION del menu de edition del mo­tor). La sefial IDX suministra un pulso por revolution y es la que se usara para medirla velocidad del motor en este ejemplo; a] suministrar un pulse por revolucion sepueden contar los pulsos por minuto mediante el TMROYvisualizarlos en el LCD.

110

Page 118: Untitled 1

4. Las interrupciones y los temporizadores

Figura 24. EJempio6

Sc pucde utilizar el puerto B conjuntamente para el LCD y el teclado, pero se hapreferido utilizar el puerto C para el LCD (esto supone modificar el fichero LCD.Cpara que en Iugar de utilizar el puerto DoE utilice el C), 6gura 25.

, .. I- 1/Para laleccl6nar olro puerto

oc.ruc:t !Cld_'P3D_Al6J)lI()()J.t.IJl.nlll>le ,

Il00Ltm c..Booum rvI100UA1I\In.... "ln~ CIa •• ~

let"

• ~e!'tJn"d_Pt:tf_

• d~tl1\ell Wle ~"'rl:b_lc4., " led -, ./" 101-1., ' led ,."tEl ... .- I.' r r <::::::::::::• I 1Iby1.'cd • OxF82I'l! dotined Wlc_POEtb_loCS

.~01, led < 'c' •

~l)fL" led

~'lIby1.'Cd.7

_JI'e'ldH

::tIf n<j1' I/on to porte (ataddr ... 7).. ......• detlll.lCl \ol•• _poz:tb lOCS '. ~~.~ ... t_ItI~."Icd(.).•• ,-:~_,.c:(")u" •• e cr1. lad x •• ~tt1.bXD, •

Ifjj-C1'~ a.t tt"u led It ~et ttl. d j("111111

111

Figura 25. Flchero LCD.Camodlffcar

Page 119: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

E1programa se basa en producir una interrupci6n del TlMERO cada 0.5 segundos yleer el TlMERO que se utiliza como contador de pulsos externos. La Jectura se debemultiplicar par 2 tpreescnler minima del TMRO) y par 120 (puesto que aJ ser revolu­ciones par minute, si se mide cada 0.5 segundos se necesitara rnultiplicar par estefactor). La carga del TMRI can un preescaler de 8 es de 3036.

t;.nclude...16fB76.h>Ifuses XT,NOWDT,NOPROTECT,NOLVPfUSE DELAY (CLOCK-4000000)IINCLUDE <kbd.C>tinclude <lcd.c>IUSE STANDARD_IO (a)

inr;16 counter~O;

Dint_TINERlvoid TIMER1_!srlvoid)counter=get_timerO();counter-counter·2·120;

II zeccura contador THROII Conversion a rpm

printf(lcd_plJcc,"i61u rpm",counter) /lcd_gotoxy(l,l);

s~t_cimerO (0);set_time!1 (3036):

II Re~nicia cuencaII Recarga a 0.5 s

/110 '" III ,.. It 'Ii'''' .j '" iii .;. ~ oj to _ .- " .- ..

VOID MAIN()(

CHAR K,kant-'O';char PWMH-O,PWHL 0;lcd_lnit();kbd_init ()/PORT_B_PULWPS (TRUE),.

setup t;.mer_0(rtcc~ext_1_to_hIRTCC_DIV_2);setup tlmer_lITl_lnternaJ,Tl_DIV_BY_B);set_timerO (0)rset_timerl (3036);enable_incerrupcs(inc_timerJ)/

enable_loterrupcs{global);

II Conflguraci6nTMROII ContiguracionTMRl

II Sorrado contadorII Cc3rga a 0.5 s

II Habilltac~6n de interrupciones

WHTLE (l) Ik-kbd_getcif (k-' \0') k-kanc,.

112

Page 120: Untitled 1

4. Las interrupciones y los temporizadores

if ((k 1°1 II (k--'II')) k-'O';

kant~k:

/("k-·18 ;

PWMH-k'28;PWML-2SS-PWMfI;

tor(f'WMH;['WMH>O;PWNH--)(OUTPU:r_HIGIi (PIN_AD) ;}

for (PWML;PNML>O:PWML--) (OUTPUT_LOv.'(PIN_AO) ;}

Figura 26. Programa del eJemplo 6

113

Figura 27. Senal modula y salida del encoder

Ejemplo 7: Seg,;1/ In duracion de plt/sacio/l de L//I botoll oinenet fres fipos de f"llciol/es:1/ lin I,I/Isncioll corm cia II/gar a 'III/a fllllci611 (por ejempl» enceuder 1111 leri ell e! puerto A),una primera pulsaciou mayor de Ires segundosda lugar a otrafuucion (por ejemplo encen­tier /III led en el puerto C) y 111111 scgunda pulsacion mayor de ires segundos de Illgar fI oiraftlllcioll (por ejclllpio flpngnr cl led del puerto C). Cuando 5Ctrabaic call In segundo 0 tercerafllllCi611 flO seatendenin Ins pulsncianes cortas (figura 28). Componentes ISIS: PIC18F877,BUTTON, RES, LED-RED, LED-BLUE.

En este ejemplo se utiliza una tecnica de polling (comprobaci6n continua) del esta­do del pulsador pero empleando la interrupcion del TIMERO; de esta forma no setendra al programa principal parado comprobando el estado del pulsador.

Page 121: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

~.'m)1"''8Pl .. .,~D21f1!1121tO~..,......~­._I""'!-----,,.,1"'&1»'

Figura 28. EJempJo7

Se programa eJ TlMCRO para que provoque una interrupcion cada determinadotiempo, en este caso de 20 ms. Cada vez que se produzca la interrupcion se com­prueba si el bot6n ha sido pulsado. En el caso de que haya sido pulsado se com­prueba si es una pulsaci6n corta 0 mayor de 3 segundos. Para este ultimo casose comprueba si el bot6n esta pulsado durante 1SOinterrupciones del TIMERO(3s/20ms = 150).

Si el boron no ha sido pulsado se designa como Fll1lciol1_D6 =0, si ha sido puJsadouna vez durante mas de 3 segundos se designa como Fll1ldolt_D6 = 1, si ha sidopulsado mornentaneamente se designa como F,l/Icioll_D6 = 2 Ysi ha sido pulsadodurante mas de 3 segundos por segunda vez se designa como FllI1ci611_D6=3.

Para distinguir si se ha pulsado durante mas de 3 segundos una 0 dos veces se uti­liza una variable de control (que se llarnara CON_D6) que puede valer cero 0 uno,dependiendo de si es la prirnera vez 0 la segunda vez que se pulsa.

Para controlar el tiempo que esta el boron pulsado se utiJiza una variable (06) que se iraincrementando si el bot6n esta pulsado y se produce una interru pci6n del TMRO.IINCLUDE <16F877.h>#device adc-10#use delay(clock-4000000)Ifuses XT,NOWDT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NO~EBUGIUSE F'IIST_10 (8)

'BYTE TRISA - Ox85

tBYTE PORTA - OxOS

114

Page 122: Untitled 1

115

4. las interrupciones y los temporizadores~ ----------

IFloTE TRISC - Ox8?

ISYTb: PORTC - Ox07

IEn'TE TRTSD - 0.,<88

IBYTE POR'I'D..OxOSIBYTE TIMERO • OxOl

IBIT RAS - OxOS.SIBIT RC2 - Ox07.2

CUAR DG, FUNCION_D(o, CON_D6;

INTI CNT;

tint_TIMEROvoln TIMERO_~sr(voldJ (

rf (TNPUT(PIN_D6J •• OJ

if' ([16 >- 150) {

If' (CON_D6--0) {

D6-0,.

roNcroN_D6-1;CON_D6-1; }

ELSE (06-0;

FUNC10N_D6-3,.

CON_D6-0; )

II 51 estD pu1sado//D~tectR si J s (20ms x 150)// Pulsndo 1· vex 3 s

II Pulsado 2" vez 3 s

ELSE D6h,. /IS1 no 11ega a los 3 s a~entd contadar

ELSE {if {D6>O 6& funciC)n_D6 --I} "6aO,.

IF ID6 > 0 && FUNCION D6 !-1 &&{FUNCION_D6-2 ;

D6-0;}

1/ 51 pulsado anres pOlO menos1/ 3 seq borra contadoc

roNCION_D6 1-3 ) II 51 pulsado sntes_// y NO r-i Y NO 1'-3_

1/ entonces F-2

S£T_TIMERO uooi • 1/ Relnici~li%a el eontadol

/ /. " t '" • * t " ,. .. ~~-t .. <I ,. It i t ~ PRINe1 PAL •• ,..• ,. It ,. lit 1* ~ w" It" ..III • )It •

void main () Idisable_interrupts (GLOBAL);secup_cimer_OIRTCC_INTERNALIRTCC_DIV_128);D6-0; FUNCION_D6-0: COU_D6-0; II Lilffplacontadores teelaTRTSA - OXOO; '/00000000

TRISC - OXOO; 100000000

Page 123: Untitled 1

Compilador C CCS V Simulador PROTEUS para Microcontroladores PIC

TRISD - OX40; 1101000000BIT_CLEAR(PORTA,S);BIT_CLEAR(PORTC,2);enable_interrupts (GLOBAL];SET_TIMf:RO (100): /1 TZNERO-20ms de polling: 20ms-(2S6-100}"1 iJs·128enable_if1terrupts (INT_ TIMERO) ;

CNT+';

1/ S1 fun~idn I ~nc~ende RCL// SJ. [uneidn J apaga RC2•••••

t~empopara no provocar una [un~j6n2II no deseada.1/ Vuelve a f~nciDn 0/, S1 funcJOn 2, ~na vez enclenda led_

1/ segundn vez 10 apaga, asl continuamente

IF (FUNCION_D6--lJ RC2-1;

IF (FUNCION_06--J) (

RC2-0; 1/ Espera unDELAY_MS (400);

FUNCION_D6-0; IIF (FUNCION_D6--2) {

IF (CN7'-0) RAS-l;ELSE RJl5-0;FUNCION_ D6-0;

J1/ Vuelve a funeidn 0

Figura 29. Program.. del ejemplo 7

116

Page 124: Untitled 1

5. Convertidor Analogico - Digital

Ca .tulo 5

Convertidor Analogico - Digital

5.1 IntroduccionLos microcontroladores PIC puedcn incorporar un modulo de conversion de sefialanalogica a serial digital. Los modules AD que utiliza Microchip hacen un muestreo yretendon (snlllpl£' & h()ld) con un condensador y despues utiliza el modulo de conver­sion (figura 1). El modulo de conversion AID es dcl tipo de aproxlmaciones sucesivas,

ENTRADA ~

ANALOGICA iv .1

S/H

SALIDADIGITALAID

•• j

Figura 1. Fases de la conversion anal6glcajdigltal

EI convertidor de aproximaciones sucesivas se utiliza en aplicaciones donde se ne­cesitan altas velocidades de conversion. Se basa en realizar sucesivas cornparacio­nes de forma ascendente 0 descendente hasta encontrar un valor digital que igualeIn tension cnrregada por ol converser D/A YIa tension de entrada.

Durante la fase de rnuestro el interrupter se cierra y el condensador se carga aIa tension de entrada (eJ tiernpo que el intcrruptor pcrmanece cerrado es funda­mental para la corrects carga del condensador). Una vez abierto el interrupter, elcondensador mantendra (teoricamente) la tensi6n de entrada mientras el moduloA/D realize la conversion.

EImodulo de conversion se caracteriza por pararnerros como los siguicntes:

• Rango de entrada.

117

Page 125: Untitled 1

Compilador C CCS V Simulador PROTEUS para Mlcrocontroladores PIC

• Numero de bits.• Resolud6n.• Tension de fondo de escala.• Tiernpo de conversion.• Error de conversion.

EI m6dulo que utilizan los PIC de gama media tiene un nurnero de bits de 10, por10 que su resolucion es:

Vresolucion =--!L

2"-I

siendo VL'I la tension de entrada y N el nurnero de bits del convertidor. Es dedr, parala tension maxima de entrada (5V) la resoluci6n es de 0,0048V (4,8 mV) por LSB.

La resolucion 51cambia si se modi fica la tension de fondo de escala, es dear, la ten­si6n de referenda. Los PICs permiten cambiar la tension de referenda en un valorabsoluto (de °a +V",,) 0 en un margen (de -Vr., a +V">I)'

Las tensiones a convertir siempre son positivas.

5.2 Modulo Convertidor (gama media)81modulo convertidor AID en la gama media posee hasta 8 entradas analogicas.Los 16F876/873 tienen 5 canales (en el puerto A) y los 16F877/874tienen 8 canales (5en eJ puerto A y 3 en el puerto E). EI convertidor (figura 2) es de 10 bits y, tal comose ha comentado, es de aproximaciones sucesivas. Permite variar la tension de refe­renda a la maxima V000 a tina tension positiva menor a traves de AN3N REF ya laminima V55 0 a tina tension positive mayor a traves de AN2N RFF'

Vln_ ~Ck - Circuuo de!;:-V Aproximaciooes

Sucesivas"

Dato digital

flMOdUIOD/A] ~:

Figura 2. Bloques b,blcos de un convertJdor AID de aproxlmaclones suceslva$

Puede seguir funcionando cuando el PIC esta en modo SLEEP ya que dispone deun oscilador RC interne propio.

118

Page 126: Untitled 1

5. Convertidor Analogico - Digital

ClrcuitoAID

ACIt .. H, .... _ ~'Il;._.:~.OI)iOOolf.

rm..rNpfOI" de_n:ro

IU, 1lUc;r-r--c:::>--r-<=-

., , It,1-001 I

Figura 3. Arqultec1ura del modulo convertldor AID

La funcion de transferencia del eonverlidor AID es el resultado de que la primeratransicion ocurra cuando Latension anal6giea de entrada es igual a Vm/1024.

La resolution vendra dada por la siguiente ecuacion:

ILSB = V. + (('UF. -VRFf_)Rf.F- 1024

En el caso de que la VRlLf, =V00 YVRrF =Vssentonces la resolucion es:

51LSB =-- = 4,81111'1024

de esta forma si la leetura es de 512 LSB,la tension analogica leida es:5V/N =512 --=512·4,8mV=2,4576V

1024

5.2.1 Registros FSRHay 11 registros asociados a este periferico:

• Definicion de pines de entrada y sefiales aplicadas:TR[SA - PORTA - TRISE - PORTE.

• Manejo de interrupciones:INTCON - PIEl - PIRl.

119

Page 127: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

• Control del conversor AID:ADCONO - ADCON 1 - ADRESH - ADRESL.

I'tegistro de control ADCONO tdlreccl6n 1lAM: 1FhJ [PIC16F87x]

I ADCS1R/W-O R/W.() R/W.() RJW-O R/W-O u-e R/W.()

I ADCSO I CHS2 I CHS1 I CHSO I GO/DONE I ' I ADONSI(7 SItO

Figura 4. Reglstro ADCONO

bits 7:6 DCS1:ADCSO: BHsde seleccion del reloj para Ia conversion A/D.

00 = Fosd2.01 = Fosc/8.10 co Fosc/32.11 =-FRC (Reloj del osdlador in tern 0 RC).

bits 5:3 CHS2:CHSO: Bits de seleccion del canal.

000 ...Canal a, (RAO/ANO).

001 =Canal L (RA1/AN1).

010 =Canal 2, (RA2/AN2).

all = Canal 3, (RA3/AN3).

100 = Canal 4, (RA4/AN4).

101=Canal 5, (RAS/ANS).

110=Canal 6, (RA6/AN6).

111=Canal 7, (RA7/AN7).

bit 2 GO! DONE: Bits de estado de la conversion.

51ADCON = 1

1 = Conversion en progreso (a 1 inicia una conversion).

a = La conversion ha finalizado (este bit es bon-ado por hardwareal terrninar la conversion)

bit 1 No usado: valor O.

bit a ADCON: Activacion del converser A/D.

1= convertidor activo.

0= convertidor no activo.

120

Page 128: Untitled 1

5. Convertidor Analogico - Digital

Reglstro de control ADCON1 (dlreccl6n RAM: 9FhJ [PIC16F87x]

BU7 BIIO

R/W.o u-e u-e u-e RJW.o R/W.o RJW·O R/w.o [\Ir-''''-O-F...;.M-,....->=-t-;lr-."Y-.,r.:'-;.---T" 1-...-"-"'--'-";II"-p"';'C-F-G-3 --r1-P-C-FG"';'2-"'-1 P"':C';"F"';'G-1--r1-PC';_';_FG';"o---'1

Figura s.Registro ADCON1

bit 7: ADFM:Selecci6nde formate del resultado (figura 6):1= [ustificacion a derechas. Los 6 bits mas significativos deADRESII SOl1 leidos como '0'.

0= Justificaci6n a jzquierdas. Los 6 bits menos significativos deADRESL son leidos como '0',

bit 6·4: No usado: valor 0

bit 3-0: PCFG3:PCFGO: Configuracion de las entradas al modulo AfD (figura 7).

I 000000

ADFM=1 AOFM=O

121

7 2 10 7 o 7 0765

000000

AORESH AORESL,- __ L_ _ _,

: Resultado 10 bit :

AORESH AORESL

Justlficacl6n a derechas Justlficacl6n a Izqulerdas

Figura 6. Justlflcacl6n mediante bit ADFM

"CF(;3 AN7 1\1'/6 ,\1'15 "'1'14 \\3 ,1\2 ,," ,,1'00 'RH' ,~V CIt",1PCF(iO REl RI':I RliO RAS RO R,o\2 RAI RAG RF~

OOO() 1\ A II 1\ II A 7\ I-i\ voo VSS ~l()

orK'1 A --;::- v«... r-x --:-A RAJ I-vss 7/1 .,1A A .~

(J(}I() () [) f) A A A A A von vss SIU :01)11 n 0 0 A VktJ• A A A RA3 VoSS .j Imoo I) I) I) n A I) A A VOO VSS 30 :"0101 I) I) f) I) VRrr• 0 A A VA3 VSS :!II !:ronx ~ D 0 0 0 0 0 0 VOO V!iS 0,01000 A A A 1\ -V~" Vutl• A A VM RA1 612W(II f) I) A A A A A A VDO \'SS (>,01(110 I) 0 A A V"..' II A <\ VA3 VSS 5 IlOll n D A A V,u-,- VKU. A A V<\j JV\2 4'21100 IJ I) I) A V~". \ arr A A VA) RA1 3f21101 I) o I) 0 V~Ff' VRrr A A VAl RAl 2/21110 I? _ 0 o 0 0 I) ~ A VDO VSS 110LllJ D -0-- 0 D V.,,-,- V.... 0 --A- tv.u -RA:! 1'1

~', .......,Figura 7. Tabla de conflguracl6n de los canales

Page 129: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microconlroladores PIC

En las versiones PIC17F87xA existen unas pequefias variaciones en estos dos re­gistros.

En el registro ADCONO (direcci6n RAM:lFh) [PIC16F87xAJ los bits:

bit 7-6: ADCSl:ADCSO: Seleccion del reloj para la conversi6n AID junto conADCS2 que esta en ADCONI.

ADCS2:() 00= roscz 01 = roSC/8 10= roSC/32 11= IRC

ADCS2=1 00= roSC/4 01 rosc/re 10 10SC/64 II =fRC

En el registro ADCONI (direcci6n RAM: 9Fh) [PIC16F87xA] el bit:

bit 6: ADCS2: Selecd6n de reloj para conversion AID junto con ADCSI yADCSO.

Otros registros que afectan al modulo convertidor son los referentes a la interrup­d6n: INTCON, PIEl Y erai.

5.2.2 Proceso de conversionPara realizar Ja conversion, el fabricante recomienda seguir los siguientes pasos:

1.Configurar el modulo AID:

il. Configuration de pines analogicos/tension de eeferenda/E/S dlgitales(ADCONl).

b. Seleccion de la entrada AID (ADCONO).c. Seleccion de reloj para la conversion AID (ADCONO).d. Habilitar modulo AID (ADON (ADCONO<O»

2. Configurar las interrupciones (si se desea):

a. ADIF =0;b. GIE =r PEIE =ADlE '" 1.

3. Esperar el tiempo de adquisicion.

4. Comenzar la conversion poniendo a '1' el bit GOIDONE(ADCON0<2».

S. Esperar a que termine la conversion. Puede ser de dos formes:

a. Mediante lecture continua del bit GOIDONE hasta que sea '0', indicando el finde la conversion.

b. Esperando a Ia interrupci6n.6. Leer rei egisrro de conversion ADRES y borrar enf1ng ADIF si es necesario.

122

Page 130: Untitled 1

5. Convertldor Analogico - Digital

7. Para la slguiente conversion se salta a los puntos I, 2 03 en funcion de 10 que senecesite. EI tiempo de conversion por bit se define como TAO' Un minimo de 2-T~oson necesarios antes de la conversion (esto no es necesario para los PIC16F87xA de­bide a que el interrupter de muestreo se cierra en cuanto se obtiene el resultado).

Existen do~ tiempos basicos de trabajo: el tiempo de adquisici6n (fACQ) y el tiempode conversion TAl)'

• Tiempo de adquisid6n (TACQ): tiempo necesario para que se cargue el con­densador de retencion (CIIOLO> con la tension de entrada. Este proceso de cargadel condensador depende de distintos Iactores, entre otros, la impedancia deIn Fuente de tension de entrada (c1 fabricante recomienda que se situe por de­bajo de los 10 kohm).EI tiernpo de adquisici6n dentro de los mar-genes tipicos es de, aproximada­mente, 20 ,",so

La adquisici6n no comienza hasta que no acabe la conversi6n. Asi que se debeespera un TACO tras una conversion. tras seleccionar un nuevo canal 0 tras en­cender el modulo AD.

• Tiempo de conversion (TAO): tiempo necesario para obtener el valor digital dela tension analogica de entrada. Este tiempo depende de la Fuente de reloj quese seleccione para la conversion. Para una correcta conversion AID, el relojdebe seleccionarse para asegurar un tiempo minimo TAOde l,6lls. En la figura8 se rnuestra la tabla de seleccion de fuenles de reloj con su TAD asociado, Jasceldas sornbreadas son las que no se recomienda SU uso.

Fuente de relo] (TAnl Frecuencia del dispositi~333.33 k:i'hOperacien ADCSI :ADCSO 20Mlu 5 l\fllz 1.25MHz

2T"". 00 100 nsl"' 400 nsl';, 1.6!ls 6 ~IS8To~ - 01 400 ns\·' J.6gs 6.4 !lS 24 !lSI>'32TI1," 10 1.6 ).IS 6.4 J.lS 25.6 !ls(J) 98 jJSll)

RC II 2-6 us cu 2-6 jJS(4) 2-6 JJSl'A' 2-6 jJs{')

-..._~ es=e=e-

FIgura 8. Tabla de seleccJ6n de fuentes de reloJ

Las notas de la figura 8 indican:(1): La fuente RC tiene un TAD tipico de 4 us.(2): Estos valores violan el minima tiempo requerido de TAO'(3): Para conversiones mas rapidas se recomienda utilizar otra fuente de reloj.(4): En PICs con frecuencias superiores a 1 MHz, el modo RC s610 es recomen-

dable en modo SLEEP.ElTAl) se configura en ADCONO (reloj de la conversi6n).

TAO'2·TOSC TIO 8'TOSC T,,(J 32·TOSC

123

Page 131: Untitled 1

Compilador C CCSV Simulador PROTEUSpara Microcontroladores PIC

Tambien en el PIC16F87xA.I T~p 4·Tose I TAJI-16'TOSC1 TAD-M'Tose I

Para convertir 10 bits se requiere un tiempo de 12·TAD(figura 9).

r- - - - - -,- - - - r- -- , --- -,----r ---, --- -T - - - , - - - - r- - - - T - - - - r --- -I I I I I I I I I I It:I I I I I I I I , f , I

T~yloT.lOlT,.C1'T~c2' T;.;)3'T~:~' T.:-t\' T",:,6'T ..:.7' T-08' T-c91.T~C:l0'T-:;·.,

rr

t 09 1>8 1>7 b6 es b.l 1.J3 1.)2 :>1 toINICIOCONVERSI6N

EL CONOENSADORYA CARGADOSE DESCONECTADE LA FUENTEANAL6GICA(T1PICAMENTEA LOS 100os)

IGO/DONE= 1 I ..SECARGA ADRESEL BIT GO/DONE SE PONEA 0SEACTIVA EL FLAGADIFEL CONOESADORSE CONTECTADE NUEVOA LA FUENTEANAL6GICA

FIgura 9. Ciclosde conversi6n

Considerando los dos tiempos (de adquisicion y de conversion) la secuenda com­plete de muestreo/retenci6n y adquisici6n en los PICs de gama media se muestraen la figura 10. Existe una diferencia entre los PIC16F87XY los PIC16F87XAien losprimeros es necesario esperar tin tiempo 2·TAOantes de iniciar una nueva adquisi­cion, cosa que no ocurre en los segundos.

nempo de mUOltro y conv.rsUIO

. :En los

Plc16F87.S. debe

espera2·T ...

TI_po d.eon__ iclrtEI CHOl.D.. ducon.CI. de I•• nlr.da I

101 lOOn, do GO.l.

TI.mpo de .dqul.lei6nDurante .. te tllmpo .1 CHOI.I)

pormanteo .erradohula "eanear IIv.lor d. la leftal doon!nul.

I;t

tn' .,.I"WJtO¥ d•• " ...... )\1"0 .I(

lOOn,

Iniclo do ConvsrelonGOIOONE-1

Fin d. Conv.rslOn GOIOONE-OValor en ADRES.S.activ. flag -'OIF

Selecel6n Canal (AOCONO)Habllillcl6n m6dulo AD (AOCONO)

Inlelo d. odqulslcl6n

Figura 10.Tiempode muestro y conversl6n

;~...

5.2.3 Efecto del modo SLEEPy RESET en el modulo ADEn el modo dormido (sleep), el m6dulo AD puede funcionar si se selecciona comoreloj para la conversion el RC interne (ADCSl= 1 YADCSO = 1). En este caso, elmodulo espera 1 cicio de instruccion antes de iniciar la conversion, permitiendo laejecucion de la siguiente instruccion SLEEP, eliminando as! todo posible ruido de

124

Page 132: Untitled 1

5. Convertidor AnalOgico - Digital

conmuradon durante la conversion. Al finalizar 1" conversion, eJ bit GO/DONEes puesto a "0" y el resultado se carga en los registros ADR[SH y ADRE.SL. En e]caso de que la Interrupcion del modulo AD este habili.tada CADlE= 1YPEIE = 1) eldispositive se despierta, perc en el caso de no estar habilitada, el modulo se apagaaunque el bit ADON siga ali]".

En el caso de qtle la fuente de relo] no es la RC interna, la ejecucion de una instruc­cion SLEEP hace que la conversion que se este realizando se pare y que el modulose apague aunque el bit ADON siga a "1".

En el caso de producirse un RESET, los registros del modulo AD se inicializan a losvalores indicados por el fabricante. EI efecto del RESET es el apagado del moduloy la parada instantanea de la conversion actual, los terminales se reinicializan aentradas analogicas (ADCONl parte baja a 0); el valor de ADRESX no se modifiesen el caso de un Reset pero en et caso de un Power-on Reset es desconoddo.

5.3 Modulo AD en CEn eJ compilador C las funciones para manejar el convertidor AD son las siguientes:setup_adc (modo);modo: para la configuraci6ndel modulo converser AID correspondientes a los bits7:6 del ADCONO.

125

SClUp_lIdc(lIlodo); AOCONO(IFh)

ADC_OFfi' 00000000OOh

AOC_CLOCK_fNTERNAL 11000000COh

ADC_CLOCK_OIV _2 000000000OOh

ADC_CLOCK_DIY _8 0100000040h

AOC_CLOCK_DI"_32 1000000080h

setup_adc_ports (valor);Valor: definicion de las entradas anal6gicas correspondiente a los bits 3-0 delA DCONI (figura 11).

set_adc_channel (canal);canal:selecci6n del canal analogico correspondiente a los bits 5:3 de ADCONO.

o (ANO) I (ANI) 2 (A~2) 3 (AN3)

4 (AN4) 5 (ANS) 6 (AN6) 7 (AN7)

Page 133: Untitled 1

Compllador C CCS y Simulador PROTEUSpara Mlcrocontroladores PIC

P<H:J '''7 'Nfi A'i~ "'i~ "'''l '''1 '''I \"n setup_adc_portll (vaJor);l'iPC-F(;O 11£.1 Rt:1 RF.O liAS RA) RAl R\1 RAO

0000 A A 1\ 1\ A A A A AI L_A""LOG

"0001 \ \ ," '"... 1\ , \ '",,0_"'I '''1_ v.~,,~_"'_ '''7_Vll.'i. \ RU 1 t.!

0010 II 11 11 A .. A , \ '"0 1\1'>1'''1 ",,1\'4 [)0011 D I) D A "If'" , " A \ 'O_AI'>I_AI'o1_M'~_\ ~,_ \ Ilff

::!OlilO 1) 1) 11 11 A I) A " \:\U_.'"

_'Nl ,/

0101 I) 0 0 0 'In· 0 ,\ .\ 1\1100\"_V~'_\ltH ':t

OIlX II 0 1) 0 0 11 0 II 1'I0_1\'1I\LOC" ti,IUOO \ \ , A \ "t. \ "n· , A ~'O.I\" \I'I~ \NS \" "7 'Rn \ Rf .... i:1001 I) Il A \ 1\ " A " ~ "0_,,1'1 I_A'1 ;"")_"'~ .11..'5 ii1010 I) 1) A \ 'MH. ... \ " ""0 ""I_MO_ \"~_A'$_\ l-.'_VRfF k1011 I) D 1\ A \MH '... 1\ , ~'O_A"I_A'4 "S_\IlH_'kH il1100 I) 11 1) A \ .., \ 'II". A , ,_,,"AI.OC_lt;\l_RAl 11.1;1 t!IIUI 0 I) 0 0 '!tu 'm. A ~ 11.'0''11 '!Iff \Rn r1110 II Il I) 1) II 0 I) A '''0 P1111 I) II 11 n 'w \ll'(t. I) ... 'SO "RfF \'REr i\

Figura 11. Poslble vafores de setup_adc_port(vaforJ

valor = read_adc 0;Lectura del resultado donde valor es un entero de 16 bits segun la directive I!DE VI­CEADC.. empleada. Dicha directiva trabaja segun la tabla:

DEVICE 8 bit 10bit II bit 16bit

ADC=8 OO-FF OO-FF OO-FF OO-FF

ADC=lO x 0-3FF ;I. x

ADC=II x x 0-7FF x

ADC=16 o-rroo O-HCO O-FFEO O-fHf

Por ejemplo, el fichero 16f876.hincluye como primera dircctiva Itdl!lJict! PIC16FS76.Paraincluir 1ainformacion del tipo de converser AID se debe afiadir #device adc = 10.

READ_ADCO admite ires modes de funcionamiento:

ADC_START .AND_READ Si no se indica nada es In opcicn por defeeto.Permite inicinr y leer el Convertidor. --ADC START ONLY S610 inicia Jo conversion.

ADC R.EAD ONty S610 Icc los regisrros del convertidor,

126

Page 134: Untitled 1

lC01u.oo ...

IRDC = 511 If:i

Voltage = 2.49U

t ~~~U...ao!!8i5~8B4···.. .. ~I [:!. IIiU1

f: PSC'''''''' R9OoIN'1"" •ose>.c.KOVT '!S.

~IL---.L. ...cm~ ~gz •

I-J- BAT1RV1 J1:~~_,"'""jIt''' RSJ.-= .

I + AAtJANI R850,

• tv,,,,,,,,'<Z"IIlEfO ROOI'GC

l:• •~

"""_. l'I1!fil'GO• . 1tMI'IOC<1

~~RAsrA.III4:SS ~toeOrltQCI ,

R:C1/tt(]6l11CCf2 [:i-:.: " 'RC2.'CCPI ~RClISCKlIiC.* f\ftt:A~

~RC$"SQ(tRell"""'"

,RC7AX,oOl .!.:! ,

PIlI~m

5. Convertidor Anal6gico _ Digital----------------------------------Ejemplo 1: Lecture de una tenskir:analogicapar el canalANO (figllrtl 12). ComponeniesISIS: PIC16F876, POT-LIN, CELL Y LM016L.

Figu1'a 12. Ejemplo 1

t2Dclude <16F876.h>#aevice adc=10

;FUSES X'l',NOWDT

IFUSESluse delay(clock=400000Qj#include <LCD.C>

void main ()int16 q:Ilaet: PI

setup_adc_ports(ANO);setup_ddc (ADC_CLOCK_INTERNAL);

IICanal 0 ana16gicoI/Fuence de r~loj RC

10d_ .i n.i t: () ,.

for (;I) (

set_adc_channel(O);delay_us (20) ;

/IHabili taci6n canal 0

127

Page 135: Untitled 1

Compilador C CCS V SimuJador PROTEUS para Microcontroladores PIC

qp

read_a de-() ;5.0.* q , 1024.0;

IILectura canal 0IIConversi6n a cension

printf(lad_pucc, "\fADe = MId", q);pr~ntt-(lcd_pt1tc, "\nVolcage = e"Ol-2fV", .0);

delay_ms (100) ;}

Figura 13. Programa del Ejemplo 1

Ejemplo 2: Ternuimetro call IInaNTC NTSAOWB203 (figura 16). Componentes [SIS:prC16F876, NTSAOWB203, CELL Y LM016L.

Se utiliza una NTC NTSAOWB203con una beta de 4050y una resistencia a 25°C de20 kohm (figura 14)i estas caracteristicas se pueden ajustar asi como la temperaturaa medir en el menu de edicion del componente (boton derecho, figura 15).

P~ ..t.)~ ... ft..l':,«n,rtl4\1 ~1~~~~Wi~,tlnqrr.J~£,~t~l'If'Ir""l[ih~1(>rl nl&lmfttCTlmP (J"."'~F:

F",INllTltutt t~S(1 ~~OI-:l ' <)n::: CJr;· I f:~~'T""'"'1~:."',.tk(lhlhl ' •• 1 in,1oU 1InV"N1$A0Jt,.~Onlll& _'J 1~V' f'~ I'" 11 11 T ~:)I~tl5

f:im<r,01[ll502CiFfOO .. noo.±l~ Q£ 21 1.1 , ...tOlol1'

trnAtXJlIPlt:iEIDY 10 ''''fiO.tt'l:. 0)3 15 I; , -.,to 12~.l!.T~ io, . ·'IL n., 11 . ~"1(I) 125 n~TK'OVlI\mtJE1B~ 10 ",'!i:.1:'''' OJ1 I J1 1.1 , .oIl]l"'~ ~t:NTSAl)Wc..\o'\.1OE 1!Ie Y> ..(JM ~ (t~. )1 .11 . -'01",125

~= .~Figura 14. Caracteristicas de Ja NTC NTSAOWB203

Matet'" Comiart

Oi~I"" f.ccorWrc r------nmeConllanl{,,"c)

Usp'McdejF'1Ie-

fiidoAil'Hdt"ATHI<ieAII

• 1 H"odoAUPCBP~Ad\.><>OOed I'I""",,_r"""""wu,'( .25 _

Otherfropoj\ltt

E#ludelrom£~E•• ~ ~cmPO! !.<J.oo":Edit JII ,",op.,be!.ntelIr

Figura 15. EdlcUm del componente

128

Page 136: Untitled 1

La NTC se linealiza mediante una resistencia Rl de 10 kohm, el valor de tensionde la NTC (V,) se puede obtener segun las siguientes ecuadones (temperatures engrados kelvin):

R_ ~. R[ 10000 . VI

r- V8AT - VT 5 - Vr1

Tr= 1 Rr 1 -273.15= 1 Rr 1-In(--) +- --In(--) +--fJ RT25 T15 4050 20000 298.15

5. Convertidor Analogico - Digital

273.15

1~~

,.,---r::::~'-"iP!~~-I RAOI_RA11ANlF!A2/i'J<1'VREf'RA3IAA3M<EF'AA4fT0CKlRJI5I/lmIlS

LC011.M01&

I T ~ 25.45C

Figura '6. Ejemplo 2

/ /uecesex ie .oarB los calculos matemaricos

+i nc.Iuae ··lQ£875.b"~deyice acic=10"fuses XT,NOWDT

"use dElay (clock=4000000)~include <matb.b>linclude <lcd. c>

=oi.d main () {

129

//Variab1es de eCl1acionfloat tv,tr,cemp,y:

int16 value:

lcd_init () :setl1pyOrt_a ( ALL_ANALOG);

serup_a.dc ( ADC_CLOCK_INTERNAI. l :

Page 137: Untitled 1

Compilador C CCS Y Simulador PROTEUS para MicrocontroJadores PIC

set_ado_channel( 0 ),.

delay_us (10);

do (value = Read_ADe();

tv = 5.0 • value 1024.0;

tr = tv • 10000.0 / (5.0 - tv);

Y = lag(tr/20000.0);

y = Il.0/29B.15) + (y • (1.0/4050.0»;

temp=l.O/y;temp = temp -273.15;

printf(lcd_putc, "\nT - i04.2fCP, cerr>.p);

while (TRUE),.

Figura 17.- Program a de ejemplo 2

Ejemplo 3: Realizar lin bar6metrolaltlmetro que mida en Kp«, Psi, Attn 0 tnt!>median­te su seleccion por un pulsador (figura 20). Componenies ISIS: PIC16F876I MPX4115,NTSAOWB203, eurto. CAP y LM016L.El sensor de presion MPX4115 de 15 a 115 kPa (2.2 to 16.7 psi) con una tension desalida de 0.2 a 4.8V. La funcion de transferencia se muestra en la figura 18, laecua­cion de Ia tension de salida es:

vOUT = Vs * (0.009 * P - 0.095)± (Error Presion * FactorTmp * 0.009Vs)

I I I I I I I I I I I , I I ~!¢i- TRA'~SFERFWC'OOH. - UAXl&~i- VOlA~v,' (.O(9"P-.Oi» ± faot 1\.

Vs."S.l Vdc \..~~,

,_ TO.!P = 010as 'C~~

TYP-

~~iA~'P~~,

~~ " \a~

~ ~"-F~.

ijJ..5~ 3.0

~ 25S 2.0

1..51.0

0.5

~~=~~~~~~$~S~2=2~g~88~=~.----"-_

Figura 18. MPX41IS (cortesia de Motorola)

El error de Presion y el factor de temperatura vienen definidos por el fabricante(figura 19). El error de Presion se sima en ±1.5y el factor de temperatura varia entre

130

Page 138: Untitled 1

Una vez calculada Ia presion en Kpa se reladona con Psi y Atm:

1 Kpa = 0.0098692Atm.1 Kpa =0.1450377 Psi.

La altitud en metros se pu.ede calcular segiln la ecuacion:

5. Convertidor Anal6gico - Digital

1Y 3 segun Ja temperatura. Este factor hace que sea necesario medir la temperaturade trabajo y, por ello, se utilizara una NTC.

.-- Temper;)tureError BandMPX4115A.MPXA4115ASefieS

~J- --1lI- ...... ...."'"-. .40 Jltm1>orJl ... DlDlII 1

£JIll 14- 1:& JFa:...

1.0-

" I I I I I I I I I I~ -JII ~ 111 CI eo 110 1110 1211 140

T_;,O

.-- Pressure Error Band

I I I I I I "'''''<If (OIlWOo)l!) 40 Q) 110 100 11'0

"...... 1a....lII&r.j15.115~ :tU(oPOI

Figura 19.Error de Presl6ny FactordeTemperatura [eertesra deMotorofaJ

La ecuacion para calcular la presion con una Vsde5V y un error de presion de ±l.5esde:

p 0.475+v'___ ....!:O~f..,T~+1.5.FactorImp0.045

H = -7990.6527 .In( PKpa J101.304

131

Page 139: Untitled 1

Compilador C CCS y Simulador PROTEUS para Mlcrocontroladores PIC

LCD1

p= 99.S7 KpaT = 2S.35C

M1

Figura 20. Ejemp'o 3

linclude <16FB76.h>Idevice adc-10#E'USESXT,NOWDT#FUSES

Nuse delaylclock-4000000)'include <mach.h>#include <LCD.C>IBYTE TRISA - DxBSKBYTE PORTA - DxDS

void main()int16 q;iloat cv,rr,temp,y,cf,error;floatp,presion,pres_atm,pres_psi,slt;

IIVarisoles ecusclonesI/Variables calculo presionIly altura

inc cne-O;bit_set (TRISA, 2);

setup_adc_ports(RAO_RAl_RA3_ANALOG); IIRAO y RAl analogica, RA2 digital

132

Page 140: Untitled 1

133

5. Convertidor Analogico _ Digital

setup_adc(ADC_C~OCK_INTEFNAL):lcd_inic () :

Ear t t r! {set_adc_channel(O};delay_us(201;q - r-ead_adc (};

p - 5.0 ' q I 1024.0;preslon- (O.475+p}IO.04S;

//Lecrura presion en voltios

//~ectura presion en KPB

sec_adc_c~an~el(_I;delay_us(201:q = read_adc();tv - 5.0 • q I 1024.0;

tr - tv * 10000.0 I (S.O - tvl;y - log(tr/20000.0);y - (l.O/298.1S) + (y ·(1.OI4050.0}1;

/ILec~ura temperatura

cemp-l.OI},;cemp - cemp -273.1S:

~f (cemp>=O && te~<-8S) TF=1.0;

else TF=3.0iERRCR a TF 9 1.5; ICa1culo del error de p~esi6n con la ~emperatura

/e1 error puede ser z pero aqui usaoos - 0 +

pLoesion-presion-ERROR;

pres_atm = presion ~ 0.0098692;

I/Presi6n en KpaI/Presi6n en .4cm

pres_psi = presion· 0.1450377; I/Presi6n en Psi

alt: - -7990. 652789"log(presion/lCl.304); IIAl:::uraif (BIT_TEST(PORTA,2)==0) cnt++; Calcular QUmera veces pulsa baton

If (cnt>=4) cnt=C;

$Iatch tcnc)

case 0:

lcd_gOtDXY (1,1);

princfOcd_Fl1T.:c, "\P= is.2f Frpa

I/Segun numero veces pulsa bacon sa elige menu

.. , PRESION);

printf(Icd_putc,"\nT - !04.2i C", ~ea:p);break;case 1:

lcd_gotDxy(l,l);pr:incf(lcd_pur:c, "\Fa 14.2f a"1!' ". PRES_a-:m);

printf(lcd_PL~c,"\nT - i04.2f C", r:emp);

break;case 2:lcd_gocaxy(l,l);prinef(lcd_putc, "\p ... H.2f psi ", PRES_psi);

Page 141: Untitled 1

Compilador C CCS y SimuJador PROTEUS para Microcontroladores PIC

print£(lcd_purc,H\nT = i04.2f CH, temp);

break;case 3:lcd_gor:ox.y(l,l) ;

printf{lcd_pur:c, "\Alt= %7.2f m ", ale);

printr( lcd_putc, "\nT = i04. 2f en, temp);break;

delay_ms (100) ;

)

Figura 21. Programa del ejemplo 3

Ejemplo 4: Simlliacio/l de adquisici6n de tensiones negatioas (jigura 22). Componenies[SIS: PIC16F876, CELL Y LM016L.

Como se ha comentado al inicio del capitulo, el convertidos AD del PIC 5610 puedeadquirir tensiones POSITNAS. Talcomo esta configurada la entrada del converser,el PIC se "QUEMARIA" en e] caso de introducir una serial de tension negativapar los canales AD. Pero la simulacion es "muy sufrida" y sf qu€ penn.ite adquirirtensiones negativas sin que al PIC le ocurra nada, pero la realidad es mucho "mascruel"; jOJO can esta diferencia entre la simulaci6n y la realidad!

Figura 22. Ejemplo 4

134

Page 142: Untitled 1

135

5. Convertidor Anal6gico _ Digital

linclude <16F876.h>Idev;.ceadc-IOIFUSES XT,NOWDTIroSES'use delay(clock-4000000}linclude <LCD.C>void main ()

int16 q;floatp;spcup_~dc_portS(ANO_VRF.F_VREF);secup_sdc(AOC CLOCK_INTERNAL);lcd_ini e () ;

tor (;;) (

set "dc_channel (0);

delay us(20);q reacl_adc t t :P ~ (-2.0) + (4*q I 1024.0);print! (lcd_putc, "\fADC - 141dN, q);

pz-intf(lcd_putc, "\nVoltage - IOl.2fVH, p);

delay_ms(lOO);}

Figura 23. Programa del ejemplo 4

La solucion practice para medir tensiones negativas es desplazar la tension hastavalores positivos y despues restar este desplazamiento por software.

Page 143: Untitled 1

6. Modulo CCP - Comparador, Captura y PWM

Capitulo 6

Modulo CCP - Comparador,Captura y PWM

137

6.1 IntroduccionLos modules CCP permiten realizar tres funciones basicas basadas en el manejo delos temporizadores (Timer):

• Comparador: compara el valor del temporizador COnel valor de un registro yprovoca una acci6n en el PIC.

• Captura: obtiene el valor del temporizador en un momento dado, fijado por laacci6n de un terminal del PIC.

• PWM: genera una senal rnodulada en amplitud de pulso.LosPIC de la gama media pueden tener hasta 2m6dulos CCP.Los dos modules CCPse comportan practice men te iguaJ (menos en un caso especial que se estudiara peste­riormcnte). TrOISproducirse un reset, el modulo CCP se encuentra deshabilitado.

Cada m6dulo CCP posee un registro de 16 bits que puedc utilizarse de las tressiguientes formas:

• Registro de 16 bits para capturer el valor del temporizador al producirse unevenLo (CAPTURA).

• Registro de 16 bits para cornparar su valor can el valor del ternporizadorTMRl, pudiendo provocar Linevento cuando se alcanza el valor contenido eneste registro (COMPARADOR).

• Registro de 10 bits para el ciclo de trabajo de una sefial PWM (PWM).Cada uno de los registros CCP tiene asociados tres registros (la x indica CCPl 0CCP2):

• CCPxCON: Registro de control del CCP.

Page 144: Untitled 1

Compilador C CCS y Sjmulador PROTEUS para Microcontroladores PIC

• CCPRxH: Byte alto del registro de 16 bits del CCP.• CCPRxL: Byte bajo del registro de 16 bits del CCP.• CCPX: pin del CCP.

Registro de control CCP.xCON fdireccion RAM: 17h/D1h, CPI­C16F87.x]

Figura t. Registro de control CCPxCONRrN-O RrN-O RrN-O RrN-O RrN-O RrN-OI CCPxX I CCPltY I CCPxM3 I CCPxM2 I CCPxM1 I CCPxMO

81tO

bit 7:6 No usados: valor O.

bit 5:4 CCPxX:CCPxY: bitl y bitOdel Duty Cycle deJ PWM.

Modo captura: No se usa.

Modo comparacion: No se usa.

Modo PWM: Son los dos bits menos significativos de los 10 bits utilizados para eJDUhj Cycle del PWM. Los ocho bits de mayor peso del Duty Cycle se encuentranenel registro CCPRxL.

bit 3:0 CCPxM3:CCPxMO: bits de selecci6n del modo CCPx.

0000 CCP inhabilitado (reset del modulo CCPx).

0100 Modo de captura, cada flanco de bajada......'"'........................-..~-.-..-----.------.---..-....-..............-~------...-....,.._ ........-.......-0101 Modo de captura, cada flanco de subida.

............................ -- .....-.-......._........,._---~-.-....---.----.--------~-........-...--------------~~__.._0110 Modo de capture, cada 4 flancos de subida.----------------~--.-.--.-.----.--- ..------.------------DIll Modo de captura, cada 16 flancos de subida.

1000 Modo de comparacion, pin CCP a 1 al igualarse (CCPxIF = 1)..__..._._._ ..._._ ....._ .._._ ...._...._ ..-.-_.-_._ ........-......-~-.-1001 Modo de compara cion, pin CCP a 0 al igualarse (CCPx1F=1).

......--..-........-.......'"""'...----~.-.-.-.-.----------------------------~- .-_ ...1010 Modo de cornparacion, genera interrupcion al igualarse (CCPx1F = 1,

CCPx no es afectado).-----------~---------------------------------------------.--Modo de compara cion, lanza accion especi.a1(CCPxlF = I, CCPl resetea

1011 TMRl, CCP2 resetea TMRI y lanza una conversion AID (si esta habi-litada).

llxx ModoPWM.

138

Page 145: Untitled 1

6. Modulo CCP - Comparador, Captura y PWM----------------------------------Debido a que los dos m6dulos CCP utilizan los temporizadores, cuando estan acti­vos los dos m6dulos se puede dar alguna interaccion entre elios. La siguiente tablamuestra dichas interacciones.

Modo CCP" ModoCCPy Interaction

Captura Caprura Misma base de tiempos en TMR1.

Captura Comparacion La comparacion debe configurarse para la ac-cion especial de disparo que borra elTMRl.

Comparacion Comparacion La comparaci6n debe con.figurarse para la ac-cion especial de disparo que berra eJ TMRl.

PWM PWM LosPWM deberan tener la misma frecuenciay tasa de actualization (interruption TMR2).

PWM Captura Ninguna.

PWM Comparacion Ninguna.

6.2 Modo CapturaEn elmodo de captura, CCPRxH:CCPRxL capturan el valor de los 16 bits del regis­tro TMRl cuando ocurre un evento en e1 pin CCPx. Los posihles event os son:

• Flanco de bajada.• Flanco de subida.• 4 flancos de subida,

• 16 flancos de subida.Estes eventos se seleccionan con los bits CCPxM3:CCPxMO (CCPxCON<3:O». Enel momento de la captura, el bit CCPlIF (pJR1<2» [y/o el CCP21F (PIR2<O>)]sepone a I, produciendo una interrupcion en el caso de que este habilitada. E1flag hade ser borrado por software. Si sucede otra captura antes de haber Ieido el registroCCPRx, el valor de 1a captura previa se habra perdido.

En modo captura, el pin RC2ICCPl (:flo elpin RClff105I1CCP2) debe configurar­se como entrada poniendo a uno el bit TRISC<z> [y/o el TRI5C<1>]. 51el bit RC2!CCPl [y/o RCVCCP2] se configura como salida, una escritura en este pin podriaoriginar una captura.

Este modo trabaja can el TMRl.Ademas, es necesario q_ueeste funcione como tern­porizador 0 como contador en modo sincrono. En modo asincrono no funcionaria.

Si se produce un cambio en el modo captura, por ejemplo de flanco de bajada acada 4 flancos, se puede dar una falsa interruption. Por software se debe borrar el

139

Page 146: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

bit CCPxIE para deshabilitar las interrupciones, limpiar elflag CCPxIF y cambiarel modo de captura,

Mediante el preescaler se puede alcanzar una resolucion mas precisa sobre Lasse­fiales de entrada. Hay cuatro configuraciones de preescaler especificadas mediantelos bits CCPxM3:CCPxMO. Cuando el modulo CCPx esta inhabilitado no esta enmodo captura, el contador del predivisor es puesto a cero, Cualquier tipo de resetborra el preescaier.

Para cambiar el tipo de preescaler se debe apagar antes el modulo CCPx (horrar elpreescaler) y posteriormente modificar dicho valor, de 10 contra rio se puede produ­cir una interrupcion.

Si se utiliza el modo sleep (dorrnido), el TMRl (configurado en modo sincrono) nose incrementa, pero el preescaler del CCPx si que continua incrementando el conta­dor de eventos y, pOT10 tanto, cuando alcanza el valor prefijado, el bit CCPxF sepone a 1,10que provoca un despertar del PIC; asf el contenido del TMRl se guardaen los CCPRx pero su valor no es significativo dado que el TMRl estaba parado.

6.3 Modo ComparacionEn el modo comparacion el valor de 16 bits del registro CCPRx se compara conti­nuamente con el valor del temporizador TMRI. Cuando ambos valores se igualan,en el pin CCPx se puede producir, 0 no, un even to de los siguientes:

Sepone a 1.Se pone a O.No cambia.

Estos eventos se seleccionan mediante la configuracion de los bits de controlCCPxM3:CCPxMO (CCPxCON<3:0»:

1000 Modo de comparacion, pin CCP a 1 al igualarse (CCPxIF = 1)....__ ..__ ...........__ ..__ ...- ..--............~..........-- ..._-........-...-.......- ...----.-

1001 Modo de comparacion, pin CCP a 0 al igualarse (CCPx:IF= 1).-..-.•-~ ...---- ......_---.-------.-.-----------.---.-.- .•--.~ ..----.........-.....~

1010 Modo de comparacion, genera interrupcion al igualarse (CCPxIF = I,CCPx no es afectado).

_ .................._--_ ....•--...._,......................._. __ ......---..---.-~-.----- .....--------------~...-.----.--- ..---Modo de comparacion, lanza accion especial (CCPxIF = 1, CCPl re-

1011 setea TMRl, CCP2 resetea TMRl y lanza una conversion AID (si estahabilitada).

Por otra parte, alproducirse un evento en el pin, se producira 1a interrupcion encaso de que este habilitada, ya que elflag CCPxIF (dePlR1 0 P1R2) se pone a 1.

140

Page 147: Untitled 1

6. Modulo CCP- Comparador, Captura V PWM

El T'IMERl se debe configurar en modo temporizador 0 modo contador sincronopara que el modulo CCPx funcione correctamente en el modo comparacion,

Para trabajar en este modo, el pin CCPx debe configurarse como salida, poniendoa 0 el bit del registro TRISC correspondiente, Cuando se selecciona uno de losmodos de comparacion, el pin CCPx toma el nivel logico contrario a] que tienegue tomar cuando se produzca Ia igualdad (es dear si se tiene que poner a 1 en Ialgualdad, se pone a 0 en estado normal)

Hay un modo de trabajo (CCPxM3:CCPxMO: 1010) en el que se produce una inte­rrupcion aJ producirse la igualdad, se activa elflng CCPxIF y se genera la interrup­cion, si esta habilitada, perc el pin CCPx no se ve afectado.

Porwtimo,puedetrabajarenmododedisparodeaccionespedaJ(CCPxM3:CCPxMO:1011). En este caso cuando se produce la igualdad, el temporizador TIMERl se re­setea, por 10que se utiliza como marcador de la acd6n. En el m6dulo CCP2, ade­mas de producirse el reset del TlMERl, se inicia una nueva conversi6nAD si dichomodulo esta habilitado: esto permite realizar conversiones AID peri6dicas.

En e1modo sleep (dormido), el TlMERl no funciona y, par 10tanto, Ia comparaciontampoco. EI pin CCPx tendra el mismo valor que antes de trabajar en modo sleep.Despues de cualquier reset, el modulo CCP esta deshabilitado.

OutPUL

6.4 Modo PWMsimodo PWM (Puise WidthMQdulanon) 0MODULACTON DE ANCHO DE PULSO,permite obtener en los pines CCPx una sefial periodica enla que se puede modifi­car su ciclo de trabajo (Duty Cicle). Es decir, puede variarse el tiempo en el coal lasefial esta a nivel alto (TON) frente a] tiempo que esta a ruvel bajo (ToFF);verla figura2. De esta fo.rma,la tension media aplicada a la carga es proporcional a] TON' centro­lando, par ejemplo, 1avelocidad de motores, luminosidad de lamparas, etc.

Vmod t

Too ccV mod

T =cte.

Ton

V mod L

14:1

Figura 2. Sella. PWM

Page 148: Untitled 1

Compilador C CCS Y Simulador PROTEUSpara Microcontroladores PIC

La resolucion de salida es de hasta 10 bits. Para que este modulo funcione correc­tamente, el pin debe estar configura do como salida, mediante la configuration delTRIS correspondiente.

El periodo de 1a sefial PWM Be obtiene de configurar el TIMER2 Yel contenido delregistro PR2 (direcci6n 0x92); ver la figura 3. Este registro de 8 bits contiene los 8bits mas significativos de una cuenta de 10 bits. Para calcular el periodo de la serialPWM se utiliza la siguiente ecuaci6n:

PWMT = (PR2 +1)·4-Tosc·(Valordel Preescaler del TMR2)

Cuando el valor del TMR2 se iguaJa al valor de PR2, pueden ocurrir los siguienteseventos:

• TMR2 se borra .• El pin CCPx se pone a 1 (excepci6n: si el Duty Cycle es 0%, el CCPx no se pone

a 1).• El valor de CCPRxL se carga en el CCPRxH, el cual es el que se compara. con

el TIMERl para fijar el duty cycle.

PERIOOO ~..

,CicIo dE>Trabajo : TMR2=PR2

TMR2=PR2 TMR2=Clclo de Trabajo

FIgura 3. Se;;alde sanda PWM

El ciclo de trabajo (duty cycle) se define par el valor del registro CCPRxL y can losbits CCPICON<5:4> antes de comenzar un nuevo periodo. El registro CCPRxLcontiene los 8 bit de mayor peso y e1 CCPICON<5:4> contiene los 2 bits de menorpeso. Por 10 tanto, se consigue una resolucion de 10 bits (DCxB9:DCxBO). E1tern­porizador base con el que se campara el contenido de estos registros es el TMR2.La siguiente ecuaci6n permitecalcular el valor del Duty Cycle:

PWM duty dele = (CCPRxL:CCPxCON<5:4»·Tosc·TMR2pRESCAl£R

Los registros CCPRlL y los bits CCPICON<5:4> pueden escribirse en cualquiermemento, pero no se cargan en CCPR1H hasta que finalice e1 periodo de la ondaPWM actual (es decir que se produce la igualdad entre PRl y TMR2). En este modoel CCPRIH es de solo lectura.

142

Page 149: Untitled 1

6. Modulo CCP- Comparador. Captura y PWM

EI CCPx se pone a 0, terminando el cido de trabajo, cuando el TMR2 mas 2 bits seiguala a CCPxH mas 2 bits

Si el cido de trabajo de la onda PWM es mayor que eJ periodo, la seiial que sale porla patilla CCPx esta siempre a 1.

La resoluci6n maxima en bits viene dada par 1a expresi6n:

,fosc )resolucion = FpWM bits

192

Par ejemplo, para una frecuencia de PWM de 1.22 kHz can un preescaler de TMR2de 16 y una frecuencia de reIoj de 20 MHz:

1 1-=(PR2 + 1)·4·--·161220 20.106

se obtiene un valor de PR2 = 255 (OxFF), y una resolution de:

Ij20'106), 1200

resolucion = > to bitsIg2

Para porter en marcha el modo PWM se deben dar los siguientes pasos:

1. Configurar el periodo PWM mediante escritura del registro PR2.2. Configurar el DItty Cycle escribiendo en el registro CCPRlL y los bits

CCPICON<5:4>.3. Configurar CCPx como salida mediante eI TRlSC.4. Configurar el preescaler del TMRl y habilitarlo mediante escritura en

T2CON.5. Configurar el modulo CCPpara la operacion en modo PWM.

6.5 Modulo CCPen CEI compilador C suministra una sene de fundones para eI manejo del modulo CCP.

Configuracion del modulo CCPx:

setup_ccpx (modo);modo hace referenda a los bits CCPxM3:CCPxMO del registro CCPxCON (figura 4).

143

Page 150: Untitled 1

Compilador C CCS YSimulador PROTEUS para Microconlroladores PIC

SETUP_CCPl(MODO); MODO RElJlstro CCPxCOII (17hID1b)

CCP_OFF DeshabiliIKion 00000000(OOh)CCP CAPTURE_FE Captura per flanco de bajada 00000100(04h) :':CCP CAPTURE RE Captura per f1anc:ode subfda 00000101 (05h)

CCP CAPTURE_DIV_4 Captura tras 4 pulsos 00000110(06h)CCP_CAPTURE_DIV_16 Captura tras 16 PUlS05 00000111(07h)CCP COMPARE SET ON MATCH Salida a 1 en ccmparactcn 00001000(OSh)CCP_COM~ARE_CLR_ON_MATCH Salida a0 en comparaci6n 00001001(OA9)CCP COMPARE INT Interrupcl6n en comparacl6n 00001010(OAh)CCP_COMPARE_RESET_TIMER Reset TMRen comparaci6n 00001011(OBh)CCP_PWM Habllitacl6n PWM 00001100(OCh)

,.~

Figura 4. Modos de SETUP_CCPx(MODOJ

Los valores para comparar se fijan en los registros CCPRx. En el compilador C,estos registros estan definidos en el fichero include, por ejemplo en eI16F87x.h:

10ngCCP_I; long CCP_2;

#byte CCP_1 = OxlS #byte CCP_2 =OXlB#byte CCP_I_LOW;Ox15 #byte CCP_2_LOW = OxlB

#byte CCP_I_HIGH = Ox16 #byte CCP_Z_HIGH = OxIC

Definicion del cicio de trabajo para PWM:

set_pwmx_ duty (valor);valor: dato de 8 0 16 bits que determina el cido de trabajo. Este valor, junto con elvalor del preescaler del TMR2, determina el valor del ciclo de trabajo, En la configu­radon del T1lvlER2, el postcaler debe valer 1.

S92.BuS I

Figura S. Ejemplo 1

144

Page 151: Untitled 1

6. Modulo CCP _ Comparador, Captura y PWM

Ejemplo 1:Medir III ancho de 1111 pulso mediante el modulo CCP (figura 5). COIIII'0Ilt'"tt':;ISIS; P1C16F876v LM016L. Instrulllt!lltoS: OSCILLOSCOPE y Generadores: PULSE.

Se utiliza el modo captura del CCP, configurandolo para que detecte el Ilanco desubida 0 de bajada del pulso a medir. Este ejemplo es similar al ejernplo 4 del temade interrupciones, pero en esc la deteccion era por interrupcion de RBO.

Cada VC7 que se produzca una deteccion de flanco, el valor del T'oARl pasara alregistro del modulo CCP.

I~nclude ~lbcblb.h~

Ifuses XT,NOWDT/fusedelay tclock-')OOOOOO)K~ncludo <lcd.c>~byte PIRI-OxOC

intl nuevapulso-O;int16 TFB-0,1·P."O,rF 0:floacAP-O.O:intI cambia-O:

#lnt_ccpl

void ccpl_Jnt()(

I/Sntra otro pulsoI/Ti(Jmpo!lancos//Valor tmal del ancho de pul so//CfJmbiode Danco de disparo

//Contral de cambio de uenco//Flonco de Bajada

IIFuncion intel.'rupciOnIf{cfJmblo--O)( /IFIBnco de subidaTFS-CCP_l; //CBrgB del valor del regisero CCPRl en Danco subidBsetup_ccpl(CCP_CAPTURE_FE): //Conflguracionmodo CBptuca en flancobajada

TFS-CCP_l; //CacgB del valor del registro CCPRI en fJancoba]adasetup_ccpl(CCP_CAPTURe~RE): //Conflguraci6nmodo captura en fldncosubidacambia-O; //Control de cambio de [Janco

cambio-l;else {

if (nuevopulso--O//nuevopulso-l;

void maln IJ

lcd_inH (/;seotup_tlm81_1 ('fl_TNTERNALJ;

seeup_ccpl/CCP_CAPTURE_RE) ;

camblO - 0:

//FJn de pulso ...//pulso a medi.r

//Conflguracion n~Rl//Conflguracionmodo Capcura en flancosublda//Conrrol de cambio a 0

145

Page 152: Untitled 1

Compllador C CCS y Simulador PROTEUS para Microcontroladores PIC

enable_lnterrupcs(~nt_cCpl);enable_interrupts(global);do (

if(nuevopulso"-l)ITF- (TFB-TFS) ,.

IIHab~litaci6n interrupci6n modulo CCPI/Habilitacion interrupci6n global

/1,Pulso nuevo?I/Ancho de pulso.

AP - TF"1.0; //Allchode pulso en microsegundos (a 4 MHz:l us)pcinc£(lcd_pucc,H\nPulso - ~6.1fuS ". AP);

nuevopulso-O; /IPulso ya medido, ~spera nuevo

} while (TRUE);

Figura 6. Programa del ejemplo ,

Ejemplc 2: Generar ulla seiia! cuadrada de 2 kHz mediante el modulo CCP (figura 7).Componenies [SIS: PIC16F876 s LM016L. lnetrumentos: OSCILLOSCOPE v COUN­TER TIME.

~OO(TI080ITI0I4RC11T10SVCCP2 t-=-J~ ..... ---~

RC2ICCP,RClISCI<ISClRC4ISOI/SOA

RCilISClOR08JTXlCVRC7!1lM)T

II

Figura 7. Ejemplo 2

Se uriliza el modo cornparacion del CCP, configurandolo en modo conmutacion delpin ecp pot' comparacion. Este ejemplo es similar a los ejemplos 1 y 5 del tema deinterrupciones, pero en esos la detection era por interrupcion del TRMO y TMR2,res pectivamen teo

146

Page 153: Untitled 1

6. Mlldulo CCP _ Comparador, Captura V PWM------------------------------------

E1m6dulo CCP compara continuamente el valor de TMRI con el valor prefijado:cuando se produce la igualdad se produce el cambio de estado del pin CCP Y laactivacion de la interrupcion del.modulo CCP.

En cada conmutaci6n se debe fijar el valor a comparar para obtener una onda cua­drada (un cido de trabajo de150tyo), es decir un semiperiodo de 250 fls (a 4MHz elciclomaquina es de 1 us), por 10 tanto, el CCP2 se debe cargar con este valor (ajus­tando el valor final es de 199).

#include <16f876.h>IIfusesXT,NOWDTintI cambio=-O; //Variable de cancrol de cambia

#int_ccp2vo.id ccp2_int ()(if(++cambio--l)(

setup_ccp2(CCP_COMPARE_CLR_ON_MATCH);//Modo Comparacion, calnbio a 0

//Funcion de interrupci6n

else {setup_ccp2(CCP_COMPARE_SET_ON_MATCH);//Modo Comparacion, cambio a 1

set_timer1(0):CCP_2 = 199;

para un Duty del 50%}

void ma.i n () (disable_interrupts (global);setup_timer_l(Tl_INTERNAL I Tl_DIV_BY_l); //ConflguracionTMRIsetup_ccp2(CCP_COl1PARE_SET_ON_MA'I'CH);//Configuraci6ninicial modulo ccrCCP_2 = 199; /IInicializaci6n del registro CCPR2

//para un Duty del 50%

IIBarrado de TMRl

I/Inic~al~zacion del registro CCPR2

enable_interrupts(int_ccp2);enable_inteJirupts(global);do (

) while (TRUE);

IIHabilitaci6n interrupc~6n modulo CCP2Ilffabilitacioninterrupcion general

Figura 8. Programa de. ejemplo 2

Ejemplo 3:Mediante Laconfiguracion del modulo CCP lanzar una conversion AD, auto­mdtica cada 11115. Con el valor obienido se realisarti una conversion DA uiilizando el PWMy un filtro paso-bajo (figura 10). Cotnponentes TSIS: PIC16F876, CAP, CELL, LED-BAR­GRAPH-GRN, LM3914, POT-LIN Y RES.lnstrumentos: OSCILLOSCOPE.

Seconfigura elmodulo CCP2 en modo comparacion can accion especial de disparo,ruanda se produce la igualdad se resetea el TMR1 se y se lanza una conversi6nAD,si esta habilitada. Cargando el registro de CCP2 COn elvalor adecuado se consigue

147

Page 154: Untitled 1

Compilador C CCS V Simulador PROTEUS para Microcontroladores PIC

que, cuando coincida con el valor de TMR1, se produzca una conversion AD, eneste caso cada 1ms, Dado que la frecuencia de trabajo es 4 MHz (1ms/l f-ls=1000),e1 registro CCP2 se carga a 1000.

Figura 9. Senal de 2 KHz fejemplo 21

Con el valor obtenido de la conversion se puede obtener una serial PWM prop or­donal a este valor. Para ello se utiliza el modulo CCP1, dado que el valor de la con­version es de 10 bits y el registro del modulo PWM tambien es de 10 bits, el valorpuede ser transferido directamente.

£1 periodo de la sefial PWM viene fijado por el TMR2, con un prescalery un posicalerde valor 1 y W1 valor de registro PR2 de 224, 10 que implica un periodo de 225 I-'s(4444Hz).

Si dicha serial es filtrada con un filtro de paso bajo se obtiene una corriente continuaproporcional al valor de la conversion. Como aplicacion se pucde aplicar esta sefiala una barra de leds y obtener una serial luminosa proporcional a la serial adquirida(volill/eter). Para ello se utiliza eJ circuito integrado LM3914 (figura 11).

En la Figura 10 se observa el funclonamiento del circuito: con una pila y un poten­ciornetro se varia la tension de entrada, la cual es muestreada cada 1 ms. Con estevalor se genera una serial PWM (ver canal A del osciloscopio) y mediante el filtrode paso bajo se obtiene la tension media proporcional (ver canal B del oscilosco­pio), Dicha tension se inyecta a la entrada del LM3914 que proporciona 1a serial alos leds.

148

Page 155: Untitled 1

6. Modulo CCP - Comparador. Captura y PWM

Figura 10. Ejemplo 3

I FO

" ~, 1i n_1 11 'I

L[O~O 10

11 11 n 14 1) 11 II 10

LM3914

r­IIII LEDINO.1II

....Lu ..r .....,._.IIIIL ~ __ __,

l'

ov-svSIGNAlSOURCE

Figura 11.Apllcacl6n tlplca del LM39141cortesia National SMq

#include <16f876.h>Ifdevice adc=10

#fuses XT,NOIVDT

.i.nt16 valor;/line_ad

149

Page 156: Untitled 1

Compilador C CCS y Slmulador PROTEUS para Microcontroladores PIC

void ad_int (){valoc=read_adc(};set_pwm1_duty (valor);)

void main () (disable_interrupts(global);

setvp_acc_ports(ANO);

setup_adc(lWC_CLQC[{_INTERNAL) ;

set_adc_channel(O);

IIFuncion interrupcion ADIIValor de fuente ana16gica...Iia Duty de PWM

//Habilitaci6nRAO ana~6gicoIIReloj interno RC

//C,mal 0

setup_timer_2(T2_DIV_BY_1,224,1);setup_ccpl (CCP_1?WM);

setup_ccp2 (CCP_COMP.I!RE_RESET_TIMER),.

I/PR2=Z24, Tpwm=225 US

I/CCPl en modo PWM

IICCP2 modo COMPARACION...

II y dispare especial

setup_timer_lITl_INTERNlfL Tl_DIV_BY_l); IIConliguracidn TMR1

set_ timerl (0) ;

cc'p_2=1000;enable_interrupts(INT_AD};

enable_interrupts(global);

do I) l"hi.Ie (TRUE);

I IPuesta a 0/IMuestreo cada 1 ms a 4 Mnz

IIHabilitacidn Interrupci6n ADI/Ha.oilitacion Interrupci6n global

Figura 12. Programa de. ejemplo 3

Figura 13.Senal moduJada y sena. fjltrada

150

Page 157: Untitled 1

6. M6dulo CCP - Comparador, Captura y PWM

NOTA

Puede detectarse un error en el m6dulo CCP en modo PWM con valores altos(ver el ultimo ejemplo de este capitulo).

Ejemplo 4: Mediallte In cOllfiguracion del modulo CCP lanzar Lit/aconoersion AD auto­nuitia; COli el tin/or ootenido representor In tension de entrada ell WI display grcifico (fi­gura 14). Conuxmeutes [SIS: PTC16F877, CELL, V5IN, LGM12641BSIR. Instrumentos:OSCILLOSCOPE.

En este ejercicio hay que teneren cuenta dos factores. Por un lado que Ja frecuenciade muestreo debe ser, por 10 menos, dos veces mayor que la frecuencia a mues­rrear: en este caso si la frccuencia de muestreo es de 5 kl-lz (200 J,Js),la frecuencia dela serial a muestrear debe ser inferior a 2 KHz.

Por orro lado, hay que ajustar e) rango de tension de entrada a valores positives, Seutiliza una fuente de continua de 2.5 V para elevar una fuente senoidal de 5 V depico a pico con una frecuencia de 10Hz (tambien se puede desplazar la tension conel offset de la fuente VSINE). Para representar esta tension se ajusta el tamafio de lapantalla: en el eje de las XeJ tiernpo (de] a 128plxeles), en el eje de las Y la tension(de 1a 64 pixeles).

LCO,tOU'... ·85Jft

-~ . r " r-; 0,1:1-.• / , ..-

-D I \ ';.

t':,v v.1Lt fl:OIC'ICli(,. ,.....,,,,, .'R, !!\:" •• ....·~t-~~~ Rt, • ::s. __...... ... ..

'Ie.':: ~ i,1_l.A/tt)roW;.. P&iI • :=j ~""'I -

rE,"'lI~I''''VN.' "&II'ICC jj

~~. !i'.l1,tQ)

t~i'V -- ~~Q 1C11~lQI.':

:t RP.6''''''~I"C1trt~

FIC2,,(P1":'!U>1'_~ ~-.1~tTl

~t':'''·H& -"-"""""'" :!kCMlJf)(1IIC,~m..,.~A) •

f,i:=~~:'==. It_.'"*""'" •H011f1U1-'1' • :~:""II"" 'i~ ~~

151

Figura 14. Ejemplo 4

linclude C16f817.h>#device adc-10

Page 158: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

luse delay(clock=20000000)#fuses HS,NOWD'1'#include <HDM64GS12.C>#include <graphics.c>int16 valor;floattension;lint_advoid ad_int()(valor=reaq_adc(ADC_READ_ONLY);ccp_2:1000;)

void main ()int8 xa=128.ya=O;glcd_init (ON) ;

disable_incerrupcs(global);setup_adc_ports(ANO);setup_adc(ADC_CLOCK_INYERNAL);set_adc_channel(0);

//Funci6n interrupci6n ADI/Valor de fuence ana16a~ca...Ilreinicia cuenta

IIHabilitacion RAO anal6gicoIIReloj incerno RCIICanal 0

setup_ccp2(CCP_COMPARE_RESEJ_TIMaR); //CC!?2modo COMPARACION._

secup_timer_l(Tl_INTERNALset_ timerl (0);

ccp_2=lOOO;enable_interrupts(INT_JW);

enable_interrupcs(global);glcd nllscreen(O);g~cd_l.ine{L, 64,1,1,1) ;glcd_line(l,31,128,31,1);

dotension=(valor~5.0)/1024.0;ya=l. 0+-12.6"1:ension;glcd_pixel(xo,ya,l);

// Y disparo especialTl_DIV_BY_l}; IIConnguraci6n L~l

//puesta a 0

I/Muestreo cada 200 PS a 20 MHZ

//Habilitacion Interrupcion AD//Habilitaci6n Interrupci6n global//8orrado de pantaI1a/Ilineas de x e y

//Escalado de Vin, y de 1 a 64 (y=1+5415~Vin)

//vin en voltios (de 0 a 5V)

xa._-;

if (xa<Z)(xa=128;

glcd_flllscreen(O);glcd__l~ne(l,64,1,1,l};

glcd 11ne(1,31,128,31,1),.

lvhiJ.e (TRUE);

//E]e de ~empos (x de 1 a 128)

III~neas de x e y

Figura 15. Programa del ejempfo 4

152

Page 159: Untitled 1

6. Modulo CCP - Comparador, Captura y PWM

Ejemplo 5: Realizar 1111 control PID parn regular la temperatura de 1111 homo (figura16). Componentes ISIS: PIC16F877, lRLI004, OVEN, RES Y CELL. lnstrumentas: OS­CILLOSCOPE.

Rl... ~~EtJ, J..J01",.""

OVI

""'"FIgura '6.EjempJo 5

Un.O de los controladores mas comunes que se utilizan en el control de temperaturaes el PW (Proporcional-Integral-Derivada). Sin entrar en teoria de control, se pue­de indicar que 1.1n controlador PID responde ala siguiente ecuacion:

K If de(t)U(l) = K peel) +___L_ e(t)dt + K pTd --r. dt/ ()

donde e(t) es el errol' de la sefial y u(t) es la entrada de control del proceso. K es lagananda proportional, T, es la constante de tiempo integral y Td es Ia constante detiempo derivative.

En. el dominio 5, el controlador PID se puede escribir como:

Un controlador PID ti.ene tres parametres (Kp' Tv Td) los cuales interacnian uno conel otro y su ajuste para obtener el mejor control puede ser muy complicado.

153

Page 160: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

Ziegler/Nichols sugirieron valores para los parametres del control PID basados enanalisis de lazo abierto y laze cerrado del proceso a controlar. En lazo abierto, mu­chos procesos pueden definirse segun la siguiente funcion de transferencia:

-.IT"G(s) = 1(0 ·e

(1+sYo)

donde Loscoeficientes ~l' 'toYYose obtienen de la respuesta del sistema en lazo abier­to a una entrada escalon. Se parte del sistema estabilizado en y(t) = Yopara u(t) = urYse aplica una entrada escalon de llu a ~ (el salto debe estar entre un 10 y un 20% delvalor nominal) y se registra la respuesta de la salida hasta que se estabilice en el nue­vo punto de operacion.

y(t) I-----------I---=-=.-.:-~----

yo iI--,.--C(·---·--·------r---------------------II !

I :I i

to t(5)

Figura 17_Respuesta de salida a una entrada escalon

Los parametres se pueden obtener de esta respuesta:

'0 = tl =!«

Yo = t2 -II

K - YI- Yo0-

ul-uO

Begun Ziegler/Nochols, las relaciones de estos coeficientes con los parametres delcontrolador son:

154

K = 1.2·yup Ko -rt)

Page 161: Untitled 1

6. ModiJlo CCP - Comparador, Captura y PWM

La realizacion de un controJador Pill discreto viene dado por la transformada z:

U(z) = E(Z)KI'[I + T _I +TJ _(I_-_Z_-I..;..)]1;(1-.: ) T

tambien:

U(z) b ( -I--=a+--+c l-z )E(z) 1-Z-I

donde:

a=K,1K-T

b=-P-1';

Existen distintas posibilidades de la realizacion practica de un controlador Pill;una de las mas habituales es la realizacion en paralelo (figura 18).

integral

u(kT)

155

Figura 18.Dlseno paraleJo del controlador PIO

E1algoritmo utilizado para programar elPICse muestra en la figura 19 de la pagi­na slguiente. El muestreo debe ser mucho rnenor que el tiempo de establecimientodel sistema en lazo abierto. En el modele Ziegler/Nichols se toma un valor T <TJ4(tarnbien puede utilizarse T <yJI0).

Un problema asociado a este tipo de disefio es el llamado "integral toindup", el coalpuede provocar largos periodes de sobreimpulsos (overshoot), motivados por losvalores excesivos que alcanza Ia serial de control debido a 1a acumulacion en eJintegrador, Para evitar este problema se suele limitar la serial de control entre unvalor maximo y otro mirnmo, impidiendo que el integrador actue cuando se supe­ran esos limites.

Page 162: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

( AD )

CALCULODB- ERRORe(kT)=l{kT)-y(kT)

cxcuro oe,TERMINO INTEGRAl~T)=b·e(kT).jf(kTo)

cALcuLoDaTERMINO DERIVATIVOd(kTt)"C·e(kT)·c"e(kT0)

CALCULODE LA SAUDAAD

u(kT)=i(kT)i'<I~BQ<T)+d(kT)

.. ITR.lWSFERENCIADE t(KI)

AL .acTU,aoOR

Jj(kTo~T)e(kTope(kT)

I

Figura' 9.AJgoritmo de programacion del PID

En el ejemplo, el control se realiza sabre un homo can una resistencia calefactora.Se actua sobre dicha resistencia mediante una serial PWM generada en funcion delcontrol PID. Para lacilitar la simulation se alimenta la resistencia con una fuente

156

Page 163: Untitled 1

6. Modulo CCP - Comparador, Captura y PWM

de corriente continua de 12 V Y se modifica su potentia de calentamiento (editar elcomponerrte con el boton derecho) a 120 W (figura 20).

Ccrnponel'd8Er~EnCe HlddenCIl'fol1Ol100t ~oIvc: OVEN IbciJM

r-- 'H.j;,AIU$AModclF'de

Mi!lllted I'!op!ltlet..... ·'1126 lido ... -Ot~_~_~.

tllCiIdo (,om~inuilllioo\E.cIiIde 110mPCB j,~EditjP rA«lortle. aoleit·

Figura 20. CaracteristJcas del OVEN

Dado que Ia corriente maxima es de 10 A se ha utilizado un MOSFET de potencia,elIRLl004.

Como sensor de temperatura se puede utilizer cualquier dispositive NTC, RID,termopares, etc.; pero el OVEN tiene un terminal que indica la temperatura delhomo en grades Celsius. Sera este terminal el que se utilice para introducir al PICla temperatura del horno: dado que la temperatura esta medida directamente engrad os Celsius es conveniente utilizar (para este ejemplo) undivisor par 100 quepermita obtener el valor en milivoltios de la temperatura (25 °C seran 250 mV).

~.~!~i.J~h Com~,.,~nl •.o~" ~.... _,.I,o

rM'--- Ic..._.,.llef"...... H>Odm !!~ IC_YaIo= ~ HlJoo,oo I I~USA...oddFIe.

....- ~d.", .-1'\-- - ~...:.;;:..I•.•,' ...•,. :15 -~.Il!,<"~~ ..I ~e~from.i"'l.U;on: - ............ JllCdIe.Ed"i."...,PCS.... '"f~;iJ_" ... ,...

Figura 21. Caracteristicas del OVEN

157

Page 164: Untitled 1

Compilador C ecs y Simulador PROTEUSpara Microcontroladores PIC--- - ---------------La temperatura a alcanzar (0 set point) se podria introducir por teclado (y LCD)pero, para simplificar, se establece directamente en el programa (se deja al lectormodificar dicho programa para podervariar la temperatura de set point). La tempe­ratura inicial se puede modificar en el menu de edicion del componente OVEN.

El res to de caracteristicas a modilicar en el componente OVEN son (figura 22):

• Temperature coefficient (V1~C):da una idea de la temperatura que alcanzara eJhomo segUn l~ tension aplicada. Valor: L V1°C.

• Oven time Constant (sec): es Laconstante de tiempo del homo. Para evitar unalarga simulacion se ajusta a 10 segundos.

• Heater time Constant (sec): esla constante de tiempo del calefactor. Para evitaruna larga sirnulacion se ajusta a 1segundo.

• Thermal resistance to ambient ("ClW): resistencia termica homo-ambiente. Seajusta al mismo valor que el dado por defecto, 0.7.

USA Madti Ae:AtJ.oncod ",,_toe.:_T'_'''t.lrel·q

1helIIId 19e=au toAotlonl r"-AIJ)DvMTiIIe!:<matt!«< 1Ii_ r"""c-.ntI see,J...,......••_(IIrcl"0"""'_

E_",,",~E~"""PC8~~E<iljl_~.....,*'"

Figura 2L Caracteristicas deJ OVEN

Para determinar los parametres (Ko- 'toy yo> del control P1Dbasados en el analisis delazo abierto seglin Ziegler/Nichols, se realize un analisis transitorio del homo canuna entrada escalon de 0 a 2 V (10% a 20% del valor nominal); ver figura 23.

Para trazar la grafica se utiliza 1a Simulation graphs en el ISIS (figura 24); el tipointeractive. En el comando GRAPH/ADD TRACE (figura 25) se afiade la traza dela sonda de tension colocada en la salida de temperatura del homo. Al realizarla simulacion temporal de la forma habitual (0 con la barra espaciadora) se lanzatambien la simulation grafica y durante el tiempo fijado en la grafica (editandosus caracterlsticas -figura 26-), el valor dela sonda se reflejara en dicha grafica (sedeja abierto el interruptor un tiempo y despues se cierra para provocar el escalon

158

Page 165: Untitled 1

6. Modulo CCP - Comparador, Captura y PWM

de entrada). Realizando una pulsacion en la barra de titulo de la grafica se puedeampliar y utilizar un cursor para realizar las medidas; tarnbien se puede exporterla gnifica a un fichero,

SW1••SW-SPST

HOMor

BAT1

100

50 .11

111.00e.ee

FIgura 23. Respuesta a una entrada escalon

ANAlOGUEDIGITALMIXEDFREQUEtltvTRANSFER'~DISEISTORllONOURIERAUDIO':II~) COliroriMANCf

~ OCSWEEP'",," AC SWEEP

r;;/

Figura 24. Simulation Graphs

:~.j Soul", C<t1luQ To... ,,"" ~"'''''' tIoIwh!t<ltOIlOll...

I;OnI",_".An "'(111"' /QoOI,t. _ Carl", ". ANoI, ..

Figura 25. Menu Graph

159

Page 166: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

G,.,n,'j"1.,... ,....

itoolr.. ~

I~TERACTI\I£NIAL)'S,s

lit II ~

'......(le .... "'" "~:mJ.'* ."

Figura 26. Caracteristicas del grafico

De la recta de maxima pendiente se deducen los parametres KO' -CoYYo definidospara el analisis en lazo abierto de Ziegler/Nichols (figura 27).

,..TO =/, -/0 =5.5-4.5= Irs=t->', =J8.5-5.5=13

Ko = y, - Yo = 276- 25 = 125.51I,-Uo 2-0

...

..;...:"~.- r _ ,.,-::;,~ -21G'C " __

: I, ," I" ,,:

/I,IIII

/•,,,,/:/,

.... i l'.S.

..i/ .'1' I ..f IS.' ~_. ".. ".1 ~.. "Ii, .". ."

'to

••

4'.'

Figura 27. Determinacion de los parametros "0" "toY Yo

Los parametres Kp'T,YT~se calculan en base a estos:

K = 1.2· y.!!_ = 1.2·13 = 0.1243" Ko "0 125.5·1

T,=2·Tu=2·1=2T" = 0.5· Tel = 0.5 . 1= 0.5

160

Page 167: Untitled 1

6. Modulo CCP - Comparador. Captura y PWM

Los parametres del controlador discreto se calculan en base al tiempo T que segunZiegler/Nichols es de 0.1 s por ser menor de T < 'to /4.

(I = Kp = 0.1243

b= Kp ·T = 0.1243·0.1 =0.0062T, 2

c = _K....:...p_._TJ~= 0.1243·0.5 = 0.6215T 0.1

HINCLUDE <16P877.h>

ildevice adc=10

lose delay(clock=4000000)

Itfuses X'I',NOWDT

#BYTE TRISC = Ox87

void main () {int16 valor;

int16 control;float a,b,c;

/ lectora de temperatura

//valor del PWM

//constantes del PID

/Itemperatura a alcanzar

l!vilI~bles de ecuaciones

float temp_limit;

floa t rT, et, iT,dT, yT, cr. i.TO, eTO,iT_l, eT_1:iloat max,min;

min=O.O;max=1000.0:

12'_1=0.0;eT_l=C,O;

a<=O.120;

b=O.0062;c=0.6215;

temp_limit=500.0;

TRISC=G;

setup_cimer_2 (t2_div_by_4,249,1);

setup_ccp1(ccp_pwm);

ser::up_adc_ports(all_analog);s'e-cup_adc (ADC_CLOCK_INTERNAL):

~et_adc_cbannel(O);

while (1) (

va1or=read_ adc ();yT=valor~5000.0/1024,Oi

l'T=bemp_limit;eT=rT-yT:iT=b*eT+iTO;

//limir::esmaximo y minimo de control//inicia11zacion variables

//constantes del PID

IITemp~a~UIa a alcanzar

I/periodo de la sena] PWM a lms

IIM6du~o CCP a modo PWM

//Puerco A ana~6gicoI/reloj convertidor AD int:erno

IILectura por el canal 0

IILectura de la temperacuraIlconversi6n a mV (0.251' a 250mV)

I/Calculo error

licalcu10 del termino integral

161

Page 168: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

dT..c· (eT-eTO) ;

IJT .. iT+a*eT+dT,if (uT>max) '{

//Calculo del termino derivativo

//Calculo de la salida PID//Salida PID si es mayor que el MAX

uT-max; Ielse {

if (uT<min) (

uT-min; I//Sallda PID s i es menor que el NIN

//Guardar variables

control-uTi

set_pwml ducytcont cal i ,iTO-1T,

eTO-I:T,

delay_ms(lOO) ,

)

/ /Transferencia de sal ida PID a seilal PW/1

//Tiempo de muestreo

Figura 28. Programa del ejempJo S

La respuesta del sistema se muestra en la figura 29; si se reduce el tiempo de rnues­treo a J ms se reduce el sobreimpulso (figura 30).

,.. 1IlTI' L_ r-, ~~',..."!of.

-,;,'

>I. I r-,..... -+- -,

::1.,. r-, -k---".•. ::,... j ---_--- .-1.11I--

j -- --- - ---~ :,'1/.•.. - --I a=0.1243....j fi<iu.u,,~- t,'.... caO.6215 - ------ -- -1---'I- T-100mt

t:l:.. _,n,

j Min:O_,

/..-) t:

n.• ---.... ._'---

".''!!_ ~ .Figura 29. Respuesta con T - tOOms

162

Page 169: Untitled 1

6. Modulo CCP- Comparador, Captura y PWM

,"..~.., (;i....~ -I --6'.9 V

~ :::•• ,e

/ I ~,:". / ii.... / i~....j 3"'0.1243

:j•.. h:llMnnl

/ c:"S2.151... IT=1......

I Max=100[1[:,. Min",n_

.... / 'I/"'.

.. r. / II'j ,...·V1""

....!~2;;.i; ~Figura 30. Respuesta con T = 1ms

Ejemplo 6: Problenmsen Lasimuiacian del mMulo CCP en modo PWM,con el ISIS (figu­ra 16). Componentes ISIS: PIC16F876. lnsirumentos: OSCILLOSCOPE,

Se ha detectado un problema, que pronto sera resue1to par LabCenter, en e1 modu­lo CCP trabajando en modo PWM. Los valores del dutty pueden itde 0 a 1023 dan­do una serial modulada desde 0 V can el valor 0 a 5 V can eI valor 1023; pero en elISIS, a partir del valor 900 la serial se convierte en una sefial cuadrada can un cidodel 50% y un periodo doble delque tenia. En el ejemplo se observa este de£ecto.

ReOllNlRBlRllZ

Rll3IPGIvIRB4-RB6

Ri*WPGCRB7/PGD

RCOfflosom C1<1RCliT10SIJCCP2

RC2JCCP1 ~'-- ...JRC3/SC1(/SCLRCAISOlISoA

RC5/S00RC6fTXICKRC71RXIDT

OSC11CLrJNOSC21!fLKOI.IT

L.-.----!.-j MCLRIVppITHV

MOlANORAIIANIRA2lAN2NREF­RA3/AN~EF+RA4/TOCKIRA$lA~

PIC16f878

Figura 31, Ejemplo 6

163

Page 170: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

Figura 32. PWM convalor menor de 900

Figura 33. rWM con valor mayor de 900

164

Page 171: Untitled 1

linclude <16f876.h>

IctusesXT,NOWDT,use delay(clock-4000000)

~nc16 i;void main (J (

setup_tlmer_2(T2_DIV_B)~1,224,lJ;

secup_ccpl (CCP_PwY,J,.~or (~=O;~<l024;l~+)(

sec_pI':ml_ducy(iJ;

delay_ms(25J;)

6. Modulo CCP _ Comparador, Captura y PWM

I/PR2=224, 1pwm=22Sus

IlccP! en =000 Ph~

I/a Duty de PlfM

FIgura 34. Programa del eJemplo 6

165

Page 172: Untitled 1

7. Transmisi6n serie

Capitulo 1

Transmision serie

7.1 Introducc;onLos PIC utili zan, entre otros, dos modos de transmision en serie:

• El puerto serie sincrono (SSP).• La interfaz de comunicaci6n serie (SO) 0 receptor transmisor serie sincrono­

asincrono universal (USART).El SSP se suele utilizar en la comunicaci6n con otros microcontroladores 0 can pe­rifericos. Las dos interfaces de trabajo son:

• Interfaz sene de perifericos (SPI): desarrollada por Motorota para la cornu­nicaci6n entre microcontroladores de Ia misma, 0 diferente, familia en modomaestro-esclavo: Full-duplex.

• Interfaz Inter-Circuitos (FC): lnter.£az desarrol1ado por Philips, can una grancapacidad para comunicar microcontroladores y perifericos; Half-duplex.

L(.Iconfiguracion USART (transmisor-receptor serie sincrono-asincrono universal),tambien conocido como SCT (interfaz de comunicacion serie), permite la comunica­cion can un ordenador trabajando en modo full-duplex asincrono 0 Con perifericostrabajando en modo half-duplex. En general, puede trabajar de dos formas:

• Asfncrono (full-duplex).• Sincrono (half-duplex).

Otros tipos de comunicacion soportados par los PIC son: J-Wire bus, UN (LocalInterconnect Network), USB (Universal Serial Hus), el CAN (Controller Area Nenvork)y Ethernet,

167

Page 173: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

7.2 EI modulo USART/SCI

7.2.1 rntroduccionAlgunos prc disponen del modulo de comunicacion serie USARTISCl, tal vez elmas u tilizado entre los modules de interfaz sene,

La principal funci6n del USART es la de transmitir 0 recibir datos en serie. Estaoperacion puede dividirse en dos categorias: sincrona 0 asincrona. La transmisionsincrona uriliza una serial de reloj y una linea de datos, mientras que en la transmi­sion asincrona no se envia la serial de reloj, por 10 que el ernisor y el receptor debentener relojes con la misma frecuencia y fase, Cuando la distancia entre el emisor yel receptor es pequefia se suele utilizer la rransmision slncrona, mientras que paradistancias mayores se utiliza la transmision asincrona,

El USART puede transmitir 0 recibir datos serie. Puede transferir trarnas de datosde 8 0 9 bits por transmision y detectar errores de transmision. Tarnbien puede ge­nerar interrupdones cuando se produce una recepcion de datos 0 cuando la trans­miston ha sido completada.

Algunos PIC tienen un USART direcdonable 0 AUSART (Add1'eSnbleUSARD queutiliza el noveno bit de datos para disringuir entre Ia reception de datos 0 de direc­cion. En algunos PIC se ha mejorado el modulo USART dando lugar a1 EUSART 0USART mejorado, el cual permite la deteccion automatica de baudios, el despertarautomatico al recibir la serial de sincronismo 0 la transmision del caracter Break de12 bits, permitiendo su utilizacion en sistemas de redes de interconexi6n local (busLJN).

Basicamente, 1a transrnision serie consiste en enviar los datos bit a bit a traves deuna linea cornun en periodos de tiempo fijos, dando lugar a Ja llamada velocidadde rransrnision 0 numero de bits enviados pOTsegundo (baudios). Tanto el ernisorcomo el receptor poseen registros de desplazamiento para realizar la comunica­cion. Los bits estan codificados en NRZ (nivel alto: I, nivel bajo: 0),NRZI (cambiode nivel: 1, sin cambio de nivel: 0), etc.

En eJ modo sincrono se permite la transmision continua de datos y no existe unlimite de tamaiio, es un modo semi-duplex (la cornunicacion serie se establcce a tra­ves de una unica linea, en ambos sentidos, pero no se puede transferir informacionen ambos sentidos de forma simultanea), En este modo de transmision se puedetrabajar de dos formes:

• En modo Maestro, donde el microcontrolador maestro genera la scfia! de reloje inicia 0 finalize la comunicacion.

• En modo Esclavo, donde el microcontrolador esclavo recibe la sefial de reJojydepende del rnicrocontrolador maestro para recibir 0 enviar informacion,

168

Page 174: Untitled 1

7. Transmisi6n serie

Datos

Reloj

Figura 1. Transmlsl6n sincrona

En el modo asincrono se emplean relojes tanto en el emisor como en el receptor.Ambos relojes deben ser de iguaJ frecuenda y deben estar en Ease0 sincronizados.La frecuenda de reloj se aeuerda antes de la transmisi6n configurando la velocidadmiantras que Lasincronizacion se realiza durante Latransmision. Cada trama dedatos tiene lID tamafio fijoy poseen un bit initial 0 de arranque (start) y un bit finalo de parada (stop) que permiten realizar dicha sincronizacion, La transmision esen modo full-duplex (se utilizan dos lineas. una transmisora -TX- y otra receptor a-RX-, transfiriendo informacion en ambos sentidos: se puede transmitir y recibirinformaci6n de forma simultanea),

Bit start Bit stop1 I 0 I I I I I I I I 11 ,____I

Figura 2. Transmlsl6n asincrona

El modo mas habitual de transmision par e1USART es e1 modo asincrono, pues­to que permite comunicaciones en largas distancias. Existen distintas normas detransmision serie asincrona, como LaRS232, la RS485, etc. Los niveles de tensi6nempleados en estas normas son diferentes al empleado par el PIC Por ello, sueleser necesaria la utilizacion de circuiros extemos de adaptacion

Los terminales utilizados en el modulo USART son el RC6ffX1CK y el RC71RX1DT:

• En el modo sincrono maestro, el pin RC6rrXlCK se utiliza como seftal de reloj(de salida) yel RC71RX1DT como linea de datos a enviar 0 recibir.

• En el modo sincrono esdavo, elpin RC6fIXJCK se utilize como sefial de reloj(de entrada) y el RC7/RXlDT como linea de datos a enviar 0 recibir.

• En elmodo asincrono, el pin RC6/TX/CK se utiliza como terminalde transmi­sion de datos y elRC7/RXIDT como terminal de recepoon de datos.

Los registros asociadas a] modulo USARTISCT son:

• SPBRG: Generador del ratio de baudios.• TXSTA: Estado de transmisi6n y control.

169

Page 175: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

• RCSTA: Estado de recepcion y control.• TXREG: Registro de datos de transmisi6n.• RCREG: Registro de datos de recepcion.• pml: Flag de internrpcion.• PIE1: Habilitacion de Lainterrupcion.

Registro TXSTA (direcclon RAM: 98hJ (PIC16F87x1

RIW~ RIW"() RIW"() RIW..() u-o RIW"() RIW"()

I CSRC I TXEN I SYNC I SRGH I TRMT I TX9DBlt7 SitO

bit 6:

Figura 3. EJregistro TXSTA

CSRC: Bit de seleccion de la fuente de reloj.Enmodo asincrono no interviene.En modo sincrono:

1=Modo maestro (genera sefial de reloj mediante BRG).0= Modo esclavo (fuente de reloj exterior).

TX9:Bit de habilitacion de la transmision de 9 bits:1=Transmision de 9 bits.0= Transmision de 8 bits.

bit 7:

bitS: TXEN: Bit de habilitacion de la transmision:1=Transmision habilitada0= Transmision deshabilitada.

1=Transmision sincrona.o =Transmision asfncrona.

bit 4: SYNC: Bit de seleccion del modo del USART:

bit 3:

bit 2:

No implementado. Se lee como O.

BRGH: Bit de seleccion del valor de baudios.

Modo asincrono:1 =Alta velocidad.o =Baja velocidad.

No se utiliza en el modo sincrono.

170

Page 176: Untitled 1

7. Transmision serie

bit 1: TRMT: Bit de estado del registro TSR:1= TSR vacio.o = TSR !leno.

bit 0: TX9D: 9 bit de datos transmitidos. Puede ser el bit de paridad.

.'-.-.-."T~~~'~'1"'1!

,TX9=1 1bit ;'. --- _.- ------------ ---~

Figura 4. Esquemade' proceso de transmision

EI USART puede configurarse para transmitir 8 0 9 bit de datos configurando elbit TX9 del registro TXSTA. Si se utiliza el Formato de 9 bits, el novena bit debecolocarse en el bit TX9D del registro TXSTA antes de escribir los 8 bit en el registroTXREG. Una vez estan todos los bits en dicho registro, son transferidos alregistrode desplazamiento de transmision (TSR). Desde alli son transmitidos al cido dereloj por el pin TX comenzando por el bit de start y terminando por el bit de stop.

171

Figura 5. £1envfo de las t.ramas

Registro RCSTAfdireccion RAM: 18b) [pIC16F87xlRfW.Q RfW·O RfW·O RfW·O R.Q R.Q

SPEN I RX9 I SREN I CREN IOERR I RX9D

BitT BilO

bit 7:

Figura 6• .EJ regist.roRCSTA

SPEN:Bit de habilitacion del puerto serie.1=Habilitado (RXlDT YTXlCK como puerto serie).0= Deshabilitado.

Page 177: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC

bit 6: RX9: Bit de habilitad6n de la recepcion de 9 bits.J = Recepd6n de 9 bits.o =Recepd6n de 8 bits.

bitS: SREN: Bit de habilltaci6n de recepci6n sincrona.

No utilizado en modo asincrono.Modo sincrono:

1=Recepci6n unica habilitada,0= Deshabilitada. (5e pone a 0 despues de una recepci6ncompleta).

CREN: Bit de habilitacion de recepcion continua.Modo asincrono:

1 = Habilitada.0= Deshabilitada.

Modo sincrono:1 = Habilitada hasta que e1 bit CREN es puesto a O.0= Deshabilitada.

bit 4:

bit 3: No implementado. Se lee como O.

bit 2: FERR: Bit de error de trama.1 = Error (Se actualiza alleer RCREG).o =No error.

bit 1: OERR: Bit de error de ooerrrun.1 == Error (Sepone a 0 si CREN es 0).O=No error.

bit 0: RX9D: 9 bit de datos transmitido

pin REGISTRO DE DESPLAZAMIENTO DE ENTRADAI

1 bit 8 bit ~:I,," 9< ............ --r----, f\jjj

I RX9D I; Buffer 0u.; , u::RX9=1 RCREG

t!............. -...---~-~..-

Figura 1. EI esquema del proceso de la recepcion de datos

172

Page 178: Untitled 1

1. Transmision serie

El USART puede configurarse para recibir 8 0 9 bit configurando el bit RX9 delregistro RCSTA. Despues de 1a deteccion del bit de start, los 8 0 9 bits entrantespor el pill RX son desplazados pOIel registro de desplazamiento de entrada (RSR)uno a uno. Despues de que el Ultimo bit ha sido desplazado dentro, el bit de stopes testeado y el data (el paquete de bits) es transferido a un bllffer el cual, a su vez,10 transfiere al registro RCREG si esta vado. El buffer y el registro RCREG formanLilla FIFO de dos elementos (el primer dato que entra es el primer dato que sale). Enei caso de transmision de 9 bit, el noveno bit pasa la bit RX9D del registro RCSTAdel mismo modo que los otros 8 pasan al registro RCEG.

Algunos dispositivos tienen un USART modificada, Ilamado AUSART 0 USARTdireccionabie, que permite filtrar autornaticamente ciertas transmisiones. Los datosrecibidos son separados en dos categorias, direcdon y datos, que se indican porel noveno bit. Solo los bytes de direccion son procesados por el USART, los datosson ignorados. Este echo se utiliza normalments cuando hay varios dispositivos enun bus y las transmisiones se direccionan a uno en concreto. Los dispositivos quereciben Ia transmislon ignoran todos los bytes de datos con el noveno bit a 0 y soloreciben los bytes de direccion con el noveno bit a 1.Cuando se recibe el byte de di­reccion y coincide, el dispositive puede pasar a recepci6n normal y recibir el restode los datos. En este tipo de dispositivos el bit 2 del RCSTA es:

173

bit 3: ADDEN: Bit de habilitacion de deteccion de direccionl=Habilitada (5610si RX9=1)O=<Deshabilitada

~REGISTRO DE DESPLAZAMIENTO DE ENTRADA ItilADDEN=1

RX9=1 I TEST I ,~~:~asolo si 1 i:;

............, 8 bitttl1 bit ., ,,. ,., ,

'~....,

Buffer 0IL

RX9D RCREG u::!",,,

Figura 8. Esquema del proceso de recepci6n en los AUSART

Registro SPBRG(0x99, [PIC16F87x1La velocidad de ccmunicacion se controla par el valor cargado en este registro.Genera el reloj que permite 1a comunicacion. La veloddad se expresa en baudios(bit/s).

Page 179: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

En modo asincrono:

BRGH=O(baja velocidad) BAUD/OS = lose64· (SPBRG + I)

BRGH=l(alta velocidad) BAUD/OS = lose16· (SPBRG + I)

En modo sfncrono: BAUDIOS = lose4· (SPBRG + I)

Siempre hay que considerar un margen de error.

7.2.2 EI modulo USARTen CConfiguraci6n generics del USART:

#USE RS232 (opciones)

Esta directive permite configurar varies parametres del USART: velocidad de trans­rnisi6n, pins utilizados, etc. Se puede modificar en cualquier parte del program apero siernpre despues de habet definido la directiva ::USE DELAY. Esta directivehabiJita el uso de funciones tales como G£TCH, PUTCHAR Y PRINTF. Permite suuso en dispositivos que no poseen modulo USART mediante software U5ART.

Cuando se utilizan dispositivos con USART, si no se puede alcanzar una tasa debaudios dentro del ~%del valor deseado utilizando la frecuencia de reloj actual, segenerara un error.

BAUD=X Velocidad en Baudios.

XMIT=pin Pin de transmisi6n.

RCV=pin Pin de recepcion.

Usa un software UART software en lugar del hard-FORCE_SW ware aun cuando se especifican los pines del hard-

ware.

RESTART_WDT Haee que la funcion GETC() ponga a cero el WDTmientras espera un caracter.

BRGH10K Permite velocidades de transmision bajas en chipsque tienen problemas de transmisi6n.

174

Page 180: Untitled 1

7. Transmislon serie

ENABLE=pin El pin especificado estara a nivel alto durante latransmtsion. Utilizado en transmision 485.

Permite depuraci6n a traves del JCD. EI pin por de-DEBUGGER fecto es el B3;usar XMJT y RCV para cambiar eJpin

(debe ser el mismo en ambos).

RESTART _WDT Provoca que la funci6n GETCO borre el WDT si es-pera un caracter.

Invierte la polaridad de los pines serie (normalmen-

INVERT tc no es necesario con eJ convertidor de nivel, comoel MAX232). No puede usarse con el USART inter-no.

PARITY=X Donde X es N, E, u O.

BITS=X Donde X es 5-9 (no puede usarse 5-7 con el USARTinterne).

FLOAT_HIGH Se utiliza para las salidas de colector abierto.

Indica al compilador que guarde los errores recibi-ERRORS dos en la variable RS232_£RRORS para restablecer-

Los cuando se producen.

No se puede utilizar con USART interne. Provo-SAMPLE_EARLY ca que el muestreo del dato a traves de la funci6n

GETC() se realice a1principle de un bit de tiernpo.

Para FLOAT_HIGH y MULTI_MASTER, este pin se

RETURN=pin usa para leer la serial de retorno. Por defecto, paraFLOAT_HIG! I es XMJT y para MULT/_MASTER esRCV.

Usa el pin de RETURN para determinar si otro mas-ter en el bus esta transmitiendo al misrno tiempo. Sise detecta una colislon, el bit 6 se pone a 1en RS232_

MULTI_MASTER ERRORSY todos los posibJes PUTCO son ignoradoshasta que el bit 6 este a O.La sefial es comprobadaal final y aJ principle de cada bit de tiempo. No sepuede utilizer con USART interne.

LONG_DATA Permite manejar INT16 a las funciones GETC() yPUTCO. En formatos de datos de 9 bits.

Provoca la deshabilitacion de interrupciones cuan-OISABLE_INTS do se ejecuta GETCO y PUTCO evitando distorsio-

nes en los datos.

175

Page 181: Untitled 1

Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC

STOP=x Numero de bits de stop (por defecto 1)

Para establecer el tiempo que GETC() espera un ca-TIMEOUT=x racter (en ms). Si no se recibe caracter en este tiem-

po, elRS232_ERRORS se pone a O.

Provoca una linea RS232 en modo esclavo sincro-

SYNC_SLAVE no, haciendo la patilla de recepcion como entradade relo] y la de transmision como entrada/salida dedatos.

Provoca una linea RS232 en modo maestro sincrono,SYNC_MASTER haciendo la patilla de recepcion como salida de reloj

y la de transmision como entrada/salida de datos.

Provoca una linea RS232 en modo maestro sincrono

SYNC_MATER_CONT en modo continuo, haciendo la patilla de recepcioncomo salida de reloj y la de transmision como entra-da/salida de datos.

UARTl Configurar el XMlT y RCV para el USART1.

UART2 Configura! el XMIT YReV para el USART2.

case 0 ser_uart_speed(2400); break;

case 1 set:_uart_speed(4800) ; break;case 2 set_uarc_speed(960D); break;case 3 set:_uarr_speed(l920Q); break;

Ejemplos:#use delay (clock=2000000);#-use rs232 (BACJD=9600, XMIT=PIN_C6 , RCV=PIN_C7 , BITS=8)

#use rs232 (BAUD=9600 , XMIT=PLN_A2 , RCV=PLN_A3)

setup_uart(baud)baud es una constante que define la velocidad. Un 1 enciende el USART y un 0 10apaga. Con cualquier valor de velocidad, el USART se enciende. En dispositivosque utilizan AUSART se admiten los siguientes parametres:

UART_ADDRESS UART: solo acepta datos con elnoveno bit a 1.UART_DATA UART: acepta todos los datos.

set_uart __speed (baud)Identica a la funcion anterior.

II se establece la veiocidad mediante la combinacL6n de las patil1.as 80 y 81

swi tcn ( input_b () .. 3 ) l

176

Page 182: Untitled 1

7. transmtslen serie

Transmision de datos:

putc (cdata)

putchar (cdata)

cdaia es un caracter de 8 bits. Esta funcion envia un caracter mediante la patiUaXMIT. La directiva #US£ RS232 debe situarse siempre antes de utilizar esta fun­cion.

puts (string)

string: cadena de caracteres constante 0 matriz de caracteres terminada con un O.La funcion putst) rnanda los caracteres de la cadena, uno a uno, a traves del busRS-232 utilizando la funcion PUTCO; detras de la cadena envia un RETURN (13) Yun retorno de carro (10).

printf (fname, cstring, values ...)

cstring: es una cadena de caracteres (constante) 0 matriz de caracteres terminadacon un O.

!IW/IIe: las funciones a utilizar para escribir la cadena indicada; por defecto se utilizaIs funcion PUTCO, que perrnite escribir en el bus RS-232.

values: valores a incluir en la cadena separados por comas; se debe indicar %nt. EIforma to es %nt, donde n es opcional y puede ser:

1-9 para espccificar cuantos caracteres deben ser especificados;

01-09 para indicar la cantidad de ceros ala izquierda;

1.1 - 9.9 para coma flotante.

t puede indicar:

177

c Caracter.

s Cadena 0 caracter.

u Entero sin signo,

d Entero con signo.

Lu Entero largo sin signo.

Ld Entero largo con signo.

x Entero hexadecimal (minuscules),

X Entero hexadecimal (rnayusculas).

Page 183: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

Lx Entero largo hexadecimal (rninusculas).

LX Entero largo hexadecimal (mayUsculas).

f Flotante con truncado,

g Flotante con redondeo.

e Flotante en formato exponencial.

w Entero sin signo con decimales insertados. La Ii cifra indica e1 total, la 2~el mrmero de decirnales.

Recepcion de datos:

val ue=getcO

value=getchO

value=getcharO

tmlue es un caracter de 8 bits. Espera recibir un caracrer por la linea RS-232 y de­vuelve su valor. En los dispositivos con USART interne, se pueden almacenar hastatres caracteres; para evitar esperas se puede usarla funcion KBHlT().

valor =kbhitO

taler es 0 (FALSE) si GETCO debe esperar a que llegue un caracter: 1 (TRUE) si yahay un caracter listo para ser Iefdo por la funcionGETC().

Ejemplo 1:Enoiar los datosdel 0 allO, en modoaslncrono, entre dos PIC. Yisualizar conun LCD los datos enuiados y los datos recibidos; la recepcion del data debera ser par inter­rupcion del USART. (ver figura 10). Componenies ISIS: PICl6F876 y LM016L. lnsiru­mentes: VIRTUAL TERMINAL.

ilinclude <l6r875.h>

#FUSES JIT,NOWDT

luse delay(clock=4000000)

fuse rs232(baud=9600, xmic=p~n_c6, rcv=p~n_c7)

#include <LCD.C>

void main () (

inc vaJ.or;lcd_ini<: ();

while (l) (

for (va1.or=0;valor<=10;valor-'--)

rurctve ior) ;

178

Page 184: Untitled 1

7. Transmision serle

print[ (lcd_pute, "I fenviando-%lD", VALOR);delay_ms (500);

}

Figura 9. Programa PIC_1de' ejemplo 1

AI hanumeric LCDr;::=~~~===illCO'env iando=9 LMO'II.MO'ANO~A1'AH'FlA:)JAN?NPHRA3IANlNREF ..ffA4flOClo_A~

e-evec

:~~~'T, Ii'iWWppl'l1lV

• RAO/NfJ•• :;~~~lVre

R.UJ.Nl~FtRAAllOOKI

• MlI'N~

AI hanumeric LCDr;::=====:::;==;llC02I t"ec.ibiendo=9 CO',IIa,

~~~ ~lw SoSS!888

II"Ovec

FIgura 10. EI eJemplo 1

Hinelude <16F876.h>#P'USESXT,NOWDTHuse delay(elock~4000000)Huse rs232(baud-9600,xmit·pin_c6, rcv-pin_c7, bits-B)'include <LCD.C>HBYTE TRlSA-OX85

179

Page 185: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

IBYTE PORTA=OX05ine valor;~_nt_RDARDA_isr()(

vaior=GE!I'C();

void main()bit_clear(TR!SA,O);lcd_init () ;en~Ie_inceLrup~s(INT_RDA);

en~ble_interrupts(GLOBAL);

for (;;) (lcd_gotoxy(l,l);printf (lcd_pul:C,"recibierrdo=%]J)",valor);

Figura 12. Virtual Terminal

Figura' 1. Programa PIC_2 del ejemplo ,

Con el programa VIRTUAL TERMINAL (boton derecho: Hex display mode) se pue­den visualizar los datos del bus serie (figura 12).

7.2.3 La norma RS232La norma RS232 es Ia mas habitual en 1a comunicacion serie, Basicamente cornu­nica un equipo terminal de datos (DIE a Data Terminal Equipment) y el equipo decomunicacion de datos (DCE a Data Contmunications Equipment).

Las caracteristicas electricas de la sefial en esta norma establecen que 1a Iongitudmaxima entre el DTE y el DCE no debe ser superior a los 15 metros y 1avelocidadmaxima de transmision es de 20.000 bps. Los niveles Iogicos no son compatibles

180

Page 186: Untitled 1

7. Transmisilin sene

ITL, deben situarse dentro de los siguientes rangos: Llogico entre -3V y -15V Y0logico entre +3Vy +15\1.Se utilizan conectores de 25 patillas (DB 25) 0 de 9 patillas(DB9) siendo asignado el conector macho al DTE Yel conector hembra a1DCE.

Para una comunica cion full duplex desde el USART del prc, se debe conectar unmfnimo numero de sefiales, TXO y RXD asi como la masa (GNU). Los PIC utilizansefial TTL en el modulo USART por 10 que se debe utilizar un conversor de nivel aRS232, como el MAX232.

NIVElES TTL ..... __ ...

Figura' 3. Conexion basica fuU duplex entre PICy PC

En Ia mayoria de los PC actuales, sobre todo ellos porta tiles, estan desapareciendolos puertos serie. Como solucion se pueden utilizar cables de conversion SERlE­USB que utilizan el UnioersalSerial Port (USB), no se debe confundir con la utiliza­cion del modulo USB integrado en el PIC can gestion de comunicacion USB (verla figura 14).

FIgura '4. Dlferencla entre un convertidor serie-usb y un mOdulo USBintegrado

Estos cables (ver Ia figura 15) se basan en integrados como el FT232BM de FillIchip (figura 16) (http://wwwjtdichip.camfProducts/FT232BM.hhn). En Ia propia Webdel fabricante se pueden encontrar los drivers para la configuracion de windoioe(figura 17) y los disefios de un sistema de conversion SERIE-USB.

BUS USB BUS USB

PIC

DISPOSITIVOINTERFAZSERJE-USB BUS

SERlE

I Modulo IUSB

PIC

181

Page 187: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

Figura 15. Cable SERlE-USB

Figura 16. FT232BM

-JO )(

• .!!I Adoot_ do ".....011.,~_"do,od• y' Adoi>t_~..... Add:odoI'tJ ~'!l~, ~~or"._"doW.$<o."""",'", _j Cfdrolador .. 1IlEAlA/AT"'", ._jCor<,....,... .;.~+ tJ~doW..".,,.I .,~.,lYoodo_+ ~ ""Q•• to_ do1OOIdo. YIdeo ~ '*00>,!lEllUlX'• .. It-MOIQItoISol"<IPII>AU"".o!.),~

•!!d'-"I )",_yot,oscl_"",JCiloIodor ..- ..IP1Jett"(C~Il<lPt).y_to do """""' __ (COM')

:I Puzl9iltffll!_tt<)I.!-(\l'II)lot~ s..'"Po-t (COI'1S), .u lee""""

, ..J i.l'>dodos do d<c>l, "*,,~dediq.tel.

Figura 17. Universal Serial Port

Bl/STS del PROTEUS proporciona un potente cornponente que permite la simula­cion a traves del puerto serie: COMPIM (figura 18).

182

Page 188: Untitled 1

7. Transmisi6n serle

o E.RRCR 0COMPIM

FIgura 18. £1componente COMPIM

Utilizando este componente no es necesario aiiadir al esquema del PIC un MAX232,ya que el propio components gestiona la comunicacion con el puerto del PC, Utili­zando este componente podemos cornunicarnos con el propio PC (si tiene 2 puer­tos serie 01 puerto serie y un puerto USB -utilizando el convertidor- como pode­mos ver en la figura 19) y rnanejar los datos que proceden del PIC con cualquierprograma de aplicacion (Visual BAS1C, visua! C, etc.).

COM1COM2

CABLE SERlEHEMBRA-HEMBRA

CABLEHEMBRA-HEMBRA+ USB-SERlE

Figura 19. Las conexlones serle-serle 0 serle-usb

183

Page 189: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

La configuraci6n del puerto se realiza como en cualquier componente y se puedencambiar practicamente todas las propiedades de un puerto serie: ruimero de puer­to, velocidad, paridad, runnero de bits, etc. (ver la figura 20).

~~"'er>e~- pj

CoMponent ~4AJe: caMPtI-!

VSM MQdeI~$i:<>Ipon: colon~8.oudA. rwrPhylicalO!lla8~o: '8~Parlt;r. HONE

V_8>lodRat.: 2-400Virtual0«.Bitsc '8Virt\ralP~; tlmlE

HI<IeAl

• HeAl

• HlCleAR

• HldeAl--=:------. tHideAl

• HmAi- .... --~ HideAl

• HIdeAl

Eo..de hom~,"",la(JonEdxlehOlllPCS!.~E6I ~ PlOI>I!'1*ml<>ld

Figura 20. Configuracion COMPIM

Ejemplo 2: Enoiar los datos de una conversion AD al puerto serie de Ill!PC (figura 21).Camponentes 1515:PTC16F876,COMPIM, POTLIN Y LMOI6L. htstrumentos: DC VOL­TMETER Y VIRTUAL TERMINAL.

Para probar este ejemplo se pueden utilizar dos PC 0un PC can dos puertos serie 0un PC con un puerto serie y un puerto USB (utilizando un cable SERIE-USB).

Para observar los datos que envia el PIC se utiliza un COMPIM y tambien se puedeutilizar unCOMPlM para leer los datos que entran por elPCo, eneste caso, utilizarelHyperTermillnl de Windows 0 cualquier otro program a emulador del puerto serie.

Par el Virtual Terminal se pueden comprobar los datos de salida y entrada. En estecaso se han conectado los dos puertos serie del PC (COM1 y COM2 con un cable).

Se puede utilizar el HyperTerminal de Windows (Accesorios/Comunicaciones/HyperTer­minal), configurandolo segun las siguientes figuras: figura 23, figura 24, figura 25,figura 26 y la figura 27.En este caso se han conectado el puerto COMl del PC YunUSB configurado en COM6.

184

Page 190: Untitled 1

Figura 21. EIejemplo 2

Figura 22. Virtual Terminal de salida (COM 1) Y entrada (COM2): las pantallas son Identicas

E:crilaLlflra;ob~y-8a~IC'QI'IOPllq-fa~

NolIi:e:EJ£MI'l.ll ~

lcaa

Figura 23. EInombre de la conexJ6n

185

Page 191: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

~ EJEMPL02

C6tigo de .§lea

» odu, one

(hedN wando. COM1~lrn~M~1r-------------~COMZ§Itt.

Figura 24. La seteeeten del puerto (COM' en el PROTEUSy COM6 en el HyperTerminall

Bhpco __ rn._ ••

Figura 25. La configuracion del puerto

EOIuXI Vet IJiItIn;!t tf.-dor..tiU!'l'<ACOI1!":cn-.._dar~di.'amo.

C«"Irpft !'.!ON,.._.C;:. %1 .g

Figura 26. EI comando Archivo/Propiedades para modificar fa visuaJizaclon

186

Page 192: Untitled 1

7. Transmision serie

187

Conocl.. Ccrill)l.r~

_.."''''''''''I• Itdlnllll''''''''''

.~"-:I.I'I'I ~~?1'n,j = E"",""oe"I1i9o!C!OI"IPt:~:hljne&Cl~.H Supo CJMI.E .... " (I~.a w £..... 10< ... """" ..... "'_

2: ~~da'jMs!llWClClcaddli""l~

InleI7ttf.-~elel ~-CCJit'IoASOI cte 7 bib'" AjUll!l' IlneO}4'& rot.!petd'l. aneho de temw:aI

Frgura 27. Act;var ~Agregar avance de IInea...··

SilVol laDe = 2.49V511 Voltall'! = 2. 49V511 Vol t"'....= 2.49VSU'Iollllve 2.49V511 Volt age ~ 2.'-9VSll Voltage = 2.49vStl Vollage = 2_49V511 Volt.09 • 2.49V511 Voltaoe • 2.49V;!,p Volloge = 2.49V... 1 Voll.ge = 2.49V511 VolI_lie • 2.49VS11 Vol taSIQ 2.49V

Figura 28.La simulaclon entre PROTEUSy el PCutJlizando el HyperTermlnal

Page 193: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

linclude <16F877.h>

JdeviCii! adc:lO

ffFUSES XT, NOWDT

luse delay(clock=400000D)

luse rs232(baud=96DD, xmit=pin_c6, rcv=pLn_c7, b~rs=8, paricy=N)

#~nclude <LCO.C>

void main()

lnU6 q;

float p;

setup_adc_ports (AND);

setup_adc(ADC_CLOCK_INTERNAL);

lcd_ ini t ();for (;;) (

set_adc_channel (0);

de1ay_us(10) ;

g = read_ade();

p = 5.0 w q / 1024.0.

prin tf (lcd_putc, "\fADe = '"Hd", q);

printf(lcd_putc, "\nVolt.3qe= %Ol.2fV", p);

prinr;f("ADC : -%4.ld .. , q);

princf("Voltage = ~01.2fV\r", p); II \r permi'ce camhiar de l~nea.

delay_ms(100);

}

Figura 29. E. programa de. ejemp.o 2

Ejemplo 3: Enuiar 1111 dnto desde el PC al PIC pOl' el puerto serie. Cuando 10 reciba debe vi­sualizarlo en uu LCD y enuiar In paiabra "recibido" al Pc. Emplear interrupciones (figura31). Componenies ISIS: PICl6F876, COMPIM Y LM016L.

linclude <15F876.h>

#FUSES XT,NOWDT

#use delay(clock=4000000)

Huse rs232 (baucJ=9600, xmit"'Pin_c6, rc~in_c7, b1ts=8, parit:y=N)

#include <LCD. C>

cnes: ChI

lint_rdavoid seri~l_isr() (

ch=aexcner () ;pur;s("~ecibidD");

188

Page 194: Untitled 1

void main()

7. Transmision serie

J cd_wit () renable_incerrupts(global);

ellable_incerrupts (int_rda) ;whiLe t l ) ,

printf(lcd put:c, "\n\r Valor 8c",ch);

)

Figura 30. £1programa del ejemplo 3

nUlOI>C"CUltl lIl!Q.""" ..~

oselAKOUT "". 12 Alphanumeric LCDMeIJI_' "'" ~

I,,-

I IAAIlIAlIl _ ·f<A'- I'lIII ·M.·...N7MO£I'. ;8I.ror;: · Ualor~"'A.Nl!'~ R67.'Fm.onoc.cl"",.,..,ss """'-rl~":'"i ~B::! ili .. 8011i!aSlHiitt:~r'OSVCCP2 >,.

RC.VccP1 1~4 1~I~J~I'I"f·•••'lCa/S¢i<Ald.-""""DO t;-J~qcT~

P'IC~t5"mOIO)IA:)C

P1

-£.I"* "'""To """"TS-¥.- ~ '0:E on.RI

0"",,,,,0

(~nflr)lr"cilin ASCII ., I!D~Figura 31. EIejemplo 3

"\I",,,,",,",5CII

121 Enyi .. lit do Ifn... ccn 1004'0'....,.1de lineao Ec:odeloo""'ac!eI... _loxa"'-.

Figura 32.Configuraclon del HyperTermlnal paraEnviarjRecibir

R_dod.lr~ 0

R~I«dod.c!I'AtIe'(

,>J,fd!.ASO

l~lAgtegl.. yOl'Cede hneulfllal ere oat:i511nu Ildttdao 1018",,_ c~ eres ,.obJoto"""", ASOIde 1~(3~I II".,., que tcbI.p.r.en.of _hodo~

189

Page 195: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

Fl_ ~'"D~ ~ dUll !ilia .. +,.:,",.i!IC ... r.." rJ ~r:: a [,

~~

"",,~Ar\tM ~ .... u.... l'.:o'o!>olf ~

D~ :; n1!J ~ ..'" .. Rocibldo

r:,o iWri\!ii ,_ lRecibidoIi 1~t'~r.'1J1ITI 2Rec;buJo~ If\'PJIID',u"'tfll.Al.

U;DllD I,:L. lloltliL JRftcibido _ I..--_-At"~.,_.. 'c:p:::;'l~I"" U:'~I; 11 ..:- > ~r"'<m [:i..,..~en 2Recilndo- t.tIJIiI£s.e~r E'··.."....t.. Mp.j~(iZJ;.R ~I!ecibldo 4J]~ ~tl~~ i:iii' ~lUW :i""""""'" -/ PlJUlIra ~'11o r f:l'\ -.:t:C8 1- ~.~

[::,\ .-• ¥ .,_;;_• Ii -- I',~~r!i.-"flI"*""~ ..- _ ....,

i:;ii

- - :!~..c ~- ,. , • o 10"'..... ./'t .. _'oco ...." 'J=n)(.'IJ .. c. )11'" ,.,.g IIi!'~-'-':_-'"',~~~ ~. ~. "-.

Figura 33. Comun'cacl6n full duplex con el PC

7.3 Puerto serie sincrono (SSP)Los dos modos de trabajo son:

• Interfaz serie de perifericos (SPT): Desarrollada por Motorota para la cornu­nicaci6n entre microcontroladores de la misma 0 diferente familia en modomaestro-esclavo. Full-duplex.

• Interfaz Inter-Circuitos (FC): lnterfaz dcsarrollado por Philips, con gran capa­cidad para comunicar rnicrocontroledores y perifericos. Half-duplex.

7.3.1 Interfaz Inter·Circuitos (J2CJEI bus PC se basa en la cornunicacion a traves de 2 hilos. Cada dispositive co­nectado al bus tiene una direcd6n. Puede configurarse como comunicacion de unmaestro y varies esclavos 0 una configuraci6n Mllltimaestro. En ambas configura­ciones, el dispositivo maestro es el que tiene la iniciativa en la transferencia, decidecon quien se realiza, el sentido de la misma (envio 0 recepci6n desde eJ punto devista del maestro) y cuando finalize. Cuando el maestro inicia una comunicacion,primero transmite la direccion del dispositivo con el cual sc quiere comunicar y losesclavos comprueban si la direcci6n concuerda con la suya. La transmision puede

190

Page 196: Untitled 1

7. Transmisi6n serie

ser de lectura 0 escritura, el ultimo bit de la direction 10indica; asi el maestro estaraen transmision y cl esc1avo en recepci6n 0 viceversa, En cualquier caso la senal dereloj la genera el maestro.

Los dos hilos del bus PC son dos Iineas de colector abierto: la sefial de reloj SCLo pin RC3 y la linea de datos SOA 0 pin RC4. Se deben utilizar unas resistenciasexternas 0 de pull-up para asegurar un nivel alto cuando no hay dispositivos conec­tados a) bus.

EI nurnero de dispositivos conectados y la longitud de conexi6n estan limitadospor 10 capacidad de dircccionamicnto (de 7 a 10bits) y por la maxima carga del bus(400 pF). La velocidad maxima estandar es de hasta 100Kbps, la rapida hasta 400Kbps y 10 Alta hasta los 3.4 Mbps

IC()J

Figura 34. Cafculo del valor de RL en 'unclon de la capacldad yvelocldad del bus ,cortesia de ST)

La trensmlsion se inicia con W1 bit de inicio 0 START}' termina con el bit de finali­zacion 0 STOP. STARTse establece con una transicion de alto a bajo en la linea SOA(normalmente a nivel alto) cuando 1alinea SCL esta a nivel alto. STOP se establececuando se produce una transicion de bajo a alto en Ia linea SOA cuando SCt estaa nivel alto; de esta forma los datos en la linea SOA s610cambian en el estado bajode la Iinea SCL (figura 35)._____uART

SOA

sel

s

Figura 35. Condiciones de la transmlslon

191

Page 197: Untitled 1

Compilador C CCS y Simulador PROTEUS para Mlcrocontroladores PIC

AI iniciar la transmisi6n, el master envia la direcci6n del esc1avo con e) que deseaestablecer la comunicacion. La direcci6n puede ser de 7 0 10 bits con forma to debyte (uno 0 dos bytes respectivamente). Tras la direccion se adjunta un bit de lee­tura/escrirura (figura 36).

DIRECCION DE 7 BITS

DIRECCION DE 10 BITS

Sumlnlslrado por el Maestro

Dlrecc:16nde 7 bit. dol Esclavo

Primer byte .umlnl8lrado por 81 Maestro rr:., DelEsclavo

Segundo byte 8umlnlstrado POt 81M..".lro

Figura 36. Los formatos de dJreccl6n

Una vez el master envia la direcci6n (0 datos), el esclavo genera un bit de reco­nocirniento (ACK), si el master no recibe este bit la comunicacion se interrumpe,generando la sefial de STOP. EI maestro tarnbien puede recibir datos, en este casoes el quien genera la serial de reconocirniento para cada byte recibido menos para elultimo, en este caso el esclavo libera Ia Hnea SDA y el master genera un STOP.

Existe la posibilidad de que el master, tras una transmision/recepcion, no abando­ne el bus y siga en comunicacion con el esclavo; en esta ocasion genera una nuevacondition de START, Hamada START REPETTDA (Sr), identica a la anterior perodespues de un pulso de reconocimiento.

En los PIC de Ja gama media existen dos modules que permitcn realizar una cornu­nicacion PC, el BSSP (Basic SyllchroJ/ous Seria! Port) y el MMSP (Master SYllchrollollsSerial Port), y se diferencian en modo de trabajo maestro. EIm6dulo MSSP permltedetectar condiciones de START y STOP por interrupcion. Este modulo puede tra­bajar en tres mod os:

• Maestro.• Esclavo con direccion de 7 bits.• Esclavo con direcci6n de 10 bits.

Los registros asociados a este modulo son seis: SSPCON, SSPCON2, SSPADD,SSPBUF, SSPSTAT y el SSPSR.

192

Page 198: Untitled 1

R/W.O R/W..o R·O RoO RoO R·O RoO

7. Transmisi6n serie

Reglstro SSPSTAT,dlreccion RAM: 94h) [PIC16F87x]

I SMP I eKE lOlA Is IUA I BFBII7 BilO

Figura 37. EI reglstro SSPSTAT

bit 7: SMP: Bit de muestreo.SPI en modo maestro:

1 - EI data se muestrea al final de ciclo.0= EI dato so rnuestrea en el media del ciclo.

SPI en modo esclavo:SMP debe ponerse a '0' cuando se trabaje en modo esclavo.

PC en modo master 0 esclavo:1=Deshabilitacion del control Slew rate para una velocidadestandar (100 \<Hz i1MHz)0= Habili taci6n del control Sieu: rate para alta velocidad (400 kHz)

bit 6: eKE: Selecci6n de flanco de reloj en modo SPI.

CPK=O1 = EJdato se transmite en eJ flanco de subida de CKS.0=£1 dato se transmite en el flanco de bajada de CKS.

CKP=l1=£1 dato se transrnite en eJ flanco de bajada de CKS.0= Bl dato se transmite en el flanco de subida de CKS.

PC en modo master a esclavo:1=Niveles de entrada can forme especificaciones 5MBUS.0= Niveles de entrada conforme especificadones Pc.

biL5: D/A: Bit de datos/ direccion (solo en el modo FC).1 '" Indica que el ultimo byte recibido 0 transmitido era un data.0= Indica que el ultimo byte recibido 0 transmitido era unadireccion.

bit 4: P: Bit de Stop (5610en el modo J2C).1= Indica que ha sido detectada una condici6n de Slop.a =- No se he detectado la condicion de Stop.

193

Page 199: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

bit 3: S: Bit de Start (5610en el modo rC).1 = Indica que ha sido detectada una condicion de Start.0= No seha detectado la condici6n de Start.

bit 2: R/W: Bit de Lecrura/ Escritura (5610 en el modo PC). Este bit retiene lainformacion de lectura 0 escritura despues de la Ultima deteccion de di­recd6n correcta. S610es valido desde la confirmad6n de direccion hasta elsiguiente bit de Start, Stop 0 no ACKEn PC modo esdavo:

1=Lectura.0= Escritura.

En PC modo master:1 =Transmision en progreso.0= Transmisi6n en no progreso.

bit 1: UA: Actualizacion de direccion (solo en el modo PC de 10 bits).1=Se necesita una actualizad6n de direcdon en el registro SSPADD.

I0= La direction no necesi ta una actualizacion.

bit 0: BF: Bit de bttJfe:r l1eno.Recepcion (mod os SPI e PC):

1=Recepcion compte tada, SSPBUF esta lleno.o =La recepcion no ha finalizado, SSP-SUFesta "ado.

Transm ision:1 = Transmision en proceso, SSPBUF lleno.o=Transmisi6n completa, SSPBUF vacio.

Reglstro SSPCON (direccion RAM: 14hJ [PIC16F87xjRIW-O RIW-O RIW-O RfW-O RIW-O RlW-O RlW-O RIW-OIwcoi, I ss=ov I SSPEN I CKP I SSPM3 I SSPM3 I SSPM1 I SPMO f':

i r

Bit7 BilO~~f'

Figura 38. EIregistro SSPCON

bit7: WCOL:Bit de deteccion de colision.Modo master:

1=Seha produddo una escritura en SSPBUFsin que las condicionesdel PC sean validas.

194

Page 200: Untitled 1

7. Transmisi6n serie

o =No hay colision.Modo Esclavo:

1 = El registro SSPBUF ha sido escrito mientras se realizaba unatransmislon previa.0= No hay colision,

bit 6: SSPOV: Bit de ovel:f!ow (debe ser borrado par software).En modo SPI:

1= Un nuevo dato se ha redbido cuando aun no se ha lefdo el dataanterior almacenado en SSPBUF. E1dato del registro SSPSR se pier­de y se mantiene el anterior. 5610 se produce OllL>rJlOW en modoesclavo.0= No hay ooetfkno.

EnmodoFC:1= Un nuevo byte es recibido cuando aun no se ha leido el registroSSPBUF donde se encuentra eJ byte anteriormente recibido.O=No hay overflow.

bit 5: SSPEN: Bit de habilitacion del puerto serie sincrono.

En ambosmodos, los pines han de ser correctamente configurados comoentradas 0 salidas,En modo SP]:

1=Habilitacion del puerto serie y configura cion de los pines SCK,SDO, SDI YSS como fuente del puerto.o =Puerto serie deshabilltado y pines configurados como ElS.

En modo PC:1=Habilitacion del puerto serie y configuraci6n de los pines SDA ySeL como fuente del puerto.o =Puerto serie deshabilitado y pines configurados como E/5.

bit 4: eKP:BHde seleccion de la poJaridad del reloj.Enmodo SPI:

1=El estado de reposo para e1.relojes el nivel alto.0= El estado de reposo para el reloj es elnivel bajo,

Enmodo PC esc1avo: (control de liberaci6n de SCK).1 = Habilitaci6n del reloj.0= Mantiene e1 relo] en estado bajo.

195

Page 201: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

bits 3:0 SSPM3:58PMO: Seleccion del modo del modulo SSP.

0000= SPI, modo maestro, reloj = Fr::f5{.J4.

0001 = SPI, modo maestro, reloj =Fosd16.0010=SPT,modo maestro, reloj = Fosc/64.. 001] = SP~ modo maestro, reloj =Salida del TMR2/2.0100 = SPI, modo esclavo, reloj = pin 5CK, pin 5S habilitado.0]01 = SPI, modo esclavo, reloj =pin SCK, pin 58 deshabilitado,Puede usarse como pin de E/S.0110 =PC, modo esclavo, direccion de 7 bits.0111 = PC,modo esclavo, direccion de 10 bits.1000 = PC modo master, reloj=F".//4"(SSPADD+l».1011=FC enmodo maestro controlado por firmuare (esdavo inactivo).1110 =PC en modo maestro control ado porjirn1llmre (direccion 7bit con interrupcion de bit START Y STOP).1111= PC en modo maestro controlado por ji nnware (direcdon 10bit con interrupcion de bit START YSTOP).1001, lOla, 1100, 1101=Reservado.

Registro SSPCON2 Idireccion RAM; 91 h) [PJC16F87x].

R1W-O RIW-O R1W-O R1W-O R1W-O R1W-O R1W-O R1W-OGCEN IACKSTAT I ACKOT I ACKEN I RCEN I PEN I RSEN I SEN 'HBlt7 auo

;",-~~-£;~ ,._,. ~[

Figura 39. EI registro SSPCON2

bit 7: GCEN: Bit de habilitacion llamada general (5610en modo PC esclavo).1=Habilita la interrupcion cuando se recibe una Hamada genera](direccion OOOOh)en el SSPSR.0= Deshabilitado.

bit 6: ACKSTAT: Bit de estado de reconocimiento (solo en modo PC master).En modo master transmision:

1 =No recibido ACK del esclavo.0= ACK recibido del esclavo.

bit 5: ACKDT: Bit de dato de reconocimiento (s610en modo PC master).

196

Page 202: Untitled 1

7. transmlslen serie

En modo master recepcion: Valor que sera transmitido cuando e1usuarioinicie una secuencia de reconocimiento a] finaJ de una reception:

l=NoACK.O=ACK.

bit 4: ACKEN: Habilitacion secuencia de ACK (solo en modo FCmaster).En modo master recepcion:

1= Inicia secuencia de reconocimiento de SOA y SCL, Ytransmiteun ACKDT. Borrado por hardware.0= Desactivado.

bit 3: RCEN: Bit de habilitacion de recepci6n (s610en modo PC master).1=Recepcion habilitada.0= Deshabilitada.

bit 2: PEN: Habilitation de la secuencia de STOP (solo en modo FC master).1=Inicia condicion de Stop en SDA y seL.Borrado por hardware.0= Deshabilitada.

bit 1: RSEN: Habilitacion de) STARTrepetido (solo en modo PC master).1= Inicia la condidon de SRen SOAy sa.Borrado por hardware.0= Deshabilitada.

197

bit 0: SEN: Habilitacion del START (s610en modo PC master).1=IniOOla condition de START en SDA y SCL. Borradopor hardware.o =Deshabilitada.

El resto de registros son:

• El registro SSPBUF (direccion Ram: 13h) es un buffer de transmision/recep­cion serie: es el registro desde e1cual se leen 0 escriben los datos a transmitir.

• El registro SSPSR es un registro de desplazamiento SSP (no accesible direct a­mente). Desplaza e1dato para transmitirlo 0 recibirlo. En una transmision, eldato se escribe desde el registro SSPBUF, mientras que en una recepcion, secarga el dato de SSPSR a SSPBUF.

• EI registro SSPADO (direccion Ram: 93h) define Ia direcci6n de1 esdavo 0los baudios de Ja comunicacion del master. En este registro se almacena ladireccion del esdavo; en elmodo de 10bits primero se debe cargar el byte aJto(1111 0A9AS 0)Ydespues el byte bajo (A7:AO).

Otros registros relacionados con el modulo MSSP son el TRISC (direction Ram:87h) para definir RC3 y RC4 como entradas, E1 PIRlIPIEl (direcciones Ram:

Page 203: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Mlcrocontroladores PIC

OO1/SO,) para la gestion de interrupdones (SSPIF/SSPIE). EIpm2lPIE2 (direccio­nes Ram: OOh/8Dh) para la gestion de la interrupclon por colisi6n del bus (BCLIF/BCLlE) Yel INTCON (direcciones Ram: OBh/SBh/10Bh/18Bh)para la habilitacionde las interrupciones de perifericos,

7.3.1.1 12C en CConfiguraclon generica del FC:

Ituse 12C (opciones)Opciones: separadas por comas, pueden ser las siguientes:

MULTI_MASTER Establece modo Multirnaestro.

MASTER Establece modo maestro.

SLAVE Establece modo esdavo.

SCL=pin Especifica el pin SCL.

SOA=pin Especifica el pin SOA.

ADORESS=nn Especifica la direcci6n en modo esclavo.

FAST Utilize velocidad alta.

SLOW Utiliza velocidad baja.

RESTART_WDT Barra e)WDT mientras espera una lectura.

FORCE_HW Utiliza las funciones PC hardware.

NOfLOAT_HIGH No permite sefiales flotantes.

5MBUS Utilize el bus en formate 5MBUS.-.STREAM=id Asocia un identificar stream.

Esta directiva (#USE 12C) tiene efecto sobrc las funciones 12C_START, 12C_STOP,T2C_READ, T2C_WRITC e 12C_POLL. Se utilizan funciones software a menos quese especifique FORCE_HW. EI modo esclavo 5610 pucde sec usado can el moduloffsico SSP.fuse 12C(master, sda-PIN_BO, scl-PIN_Bl)fuse I2C(slave, sda-PIN_C4, scI-PIN e3, dddress~OxaO, rORCE_HWINuse 12C(mast~r,sci-PIN BO, sda-PIN_Sl, tasc=4S0000)

• 12C_WRITEO.• I2C_STARTO.

Las funciones asociadas son

198

Page 204: Untitled 1

7. Transmlsion serie

• 12C_READO.• 12C_STOPO.• I2C_POLLO.• I2C_ISR_STATEO.• 12C_SlaveAddr().

I2C_STARTOiEn modo master, esta funcion inicializa la transrnision. Despues de la condid6n deStart, el reloj es puesto a nivel bajo hasta que se escribe con la fund6n 12C_WRlT£().Si se llama a otra funci6n 12C_START antes de un 12C_STOP se esta utilizando unSTART rcpetido (Sr). Esta funcion dependera de Ja respuesta del esclavo.

i2c_start ();i2c_write (OxaO);

12c_write(iJddress),­i2c_start () ii2c_write(OKdl);

as ta-12c_l"ead (0) ,-12c stcp(J;

IITnicializacion de la transmisionIIDireccion del esclavoIIDatos a esclovoIIRestactIICambio it lectu~a/IDatos del esclavo a1 master.IIFinalizacion de la transmision

12C_STOP 0;Finaliza la transmision.

12C_WRlTE(dato);Dato es un entero de 8 bits que envla por el bus. En modo master, esta funci6ngenera la senal de relo] que marca la veJocidad de transmision del dato: en modoesclavo espera la serial de reloj que genere el maestro.

Devuelve eJ bit de reconocimiento ACK que envla eJ receptor cuando la transmi­sion ha terminado: 0 indica ACK, l indica un NO ACK Yun 2 indica una colisionen modo multi master.

EI bit de menor pesor (Isb) deJ primer dato transmitido tras un START indica el sen­tido de la comunlcacion (si el bit es "0", 1a informacion se transmltira de maestroa esclavo).

dato = 12C_REAO({ACKJ)iDate es un entero de 8 bits leido del bus. En modo master, esta funci6n genera lasefial de reloj; en modo esclavo espera la serial de reloj. No hay timeout por 10quese l.1tilizajunto con 12C_POLL para prevenir bloqueos.

Opcionalmente se puede incluir un ACK donde 1 indica un ACK y un 0 indica unNO ACK. Se puede borrar el Watchdogrnientras se espera a leer el dato, para ello sedebe incluir 1aopcion RESTART_WDTen la directive [use i2c().

199

Page 205: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

valor = 12C_POLLOiSe utiliza 5610 si el PIC tiene modulo SSP. Devuelve un TRUE (1) si se ha recibidoel dato en el buffer y un FALSE (0) si no se ha recibido. Cuando devuelve un TRUE,la funcion 12C_REAOO guarda el dato leido.

I2C_SlaveAddr(int8 adr);Se especifica la direccion de] dispositivo en modo esclavo.

estado = l2C_ISR_STATE();Se utiliza solo si el PIC tiene modulo SSP. Devuelve e) estado del bus en modo es­clave despues de una i.nterrupci6n.

Estado es un entero de 8 bits:

0= Indica direccion coincidente can un R{Wa cero.1-0x7F= El master ha escrito un data, se debe utilizer l2C_READ{).Ox80= Indica direccion coinddente can un R/W a uno, responder can 12C_WRITE().

Ox81-OxFF =Transmision terminada y reconocida, se responde can 12C_WR!TE().

Ejemplo 4: Guarder y leer datos ell las 10 priiueras posiciones de memoria de IIIIll EE­PROM PC. Representor los vnlores escritos y leidos en till display LCD (Figura 40). COIII­

ponentes ISIS: PIC16F877, M24512, RES Y LM016L. lnstrumentos: 12C DEBUGGER.

200

.. 0I011C1.I<HOKI'C1.1<OU!'WCI.-HNJ ........ '"

• ffAOI"~• kAl'AAI

fW)••..,.,_~AAI,VAEF.IoUI,.&Jfoocrp",,_

~[,,_A!5kE\IANr!MH"l:rt""10

Figura 40.EIejemplo 4

Page 206: Untitled 1

7. transmislen serie

La EEPROM PC 24512 ttene un byte de control (figura 41) donde la parte alta tieneun valor fijo (Ah) y la parte baja consta de Ia direccion impuesta en sus patillas(E2:EO)y el bit de lectura/escritura, de tal forma que si se fijan las entradas de di­recci6n amasa, el byte de control puede tener los valores AOh para escritura y Alhpara ledura.

O.VU:'l'yp' td.nbllllr Chip En3bl. AdOI.,. fffl :ii'1.1 en tl5 bJ b3 1)2 D b!l

Cew ... f!."If"ctCod. I I 0 I I I 0 E2 I E' 1 Ell RW .=J

o\c" -c-, ACI< .aClo.

[ [ O~~ ~~ 11,1 ~~:;b~~i'l ~~-~ ;'~!~f' III :~'A~<-< 110t ~~ ~~ .. ,_V!

Figura 41. Byte de control del 24512 [eertesta de STJ

EI formate de escritura es el mostrado en la Figura 42, donde tras un START se es­cribe la palabra de control para seleccionar el dispositivo y el modo de trabajo, dosbytes para Ia direccion de escritura en el dispositive y el dato a escribir.

Figura 42. EI formato de escritura (cortesia de ST)

A continuaci6n se describe una funcion para la escritura en 1aEEPROM, que debeseT llamada desde el programa principal donde se Ie pasa Ia direccion a escribir yel dato.

void write_exl:_eeprom(long inc address, BYTE data)

short int status;

i2c_start ();i2c_wrics(OxAO);

i2c_wri~e(address»8}i

i2c_write(address);

i2~wrice(daca);

i2c_stop ();i2c_scart ();status=i2C_IVrite(OxaO);

llInicializa La cransmision

IIEscribe La palabra de control (direcci6n/IOIl T C para -esc.zi.tuire}

I(Parre alta de La direccion a escrLbir en 1aI/SEPROM

IIParte baja de La direccion a escribir en La/IEEPMM

IIDato a escribir

IIFinalizacion de la transmis~6n.

I/Reinicio

I/Leccu.ra del bit ACK, para ev itieu: escri ture sIlincorreceas

201

Page 207: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

wbile (stiltus~l) 115i es 1 esperar a que responds el esclavo

i2c_start ();status~i2c_1~rite(OxilO);

FIgura 43. Funcl6n de escrltura en la EEPROM

EI Formato de lecture puede ser de cuatro formas: lectura de la direccion actual en elbus, lectura de una direccion cualquiera, lectura secuencial a partir de la direccionactual y lectura secuencial a partir de una direccion cualquiera. La forma mas normales la de leer una direecion cualquiera (figura 44), donde el proceso es muy similaral de escrirura y tras una reinicializacion hay dos ciclos donde se indica el modo delectura y se envia el dato. En este caso, el master debe devolver un NO ACK.

R....lI.OOM.o.ODRESSREAD

FIgura 44. Lectura de una dlreccl6n cualqulera (cortesla de STI

A continuacion se describe una funcion para la lectura de la EEPROM, que debe serlIamada desde el programa principal donde se Ie pasa la direccion a leer.

BYTE read_ext_eeprom (long int address) (BYTE data:i2c_start ();i2c_wrice(OxAO);

IIInicia1izd 18 transmisi6n/IEscribe la palabra de conerol (direccion Dh/1+ 0 para escritura)//Parte alta de 18 direccion a escr~bir en 18//EEPROM//Parte baja de 18 dlrecclon a escrlblr en la/IESPROMIIReinicloIIEscribe la palabra de conerol (direccion Oh11+ 1 para lectura)Illectura del dato/IFinallzaclon' de 18 cransmislOn.

i2c_wri te (addJ.-ess»8);

i2c_write(address) ;

i2c_sca.rt(I;12c_wrlte(Oxal);

data-i2c_read(O);12c_seop() ;return (data),.

Flgur .. 45. Funcl6n de lectura de la EEPROM

202

Page 208: Untitled 1

7. Transmision serie

Para la aplicacion del ejemplo se utilizan estas funciones en eJ program a princi­pal.

Hinclude <16F877.h>'fuses X~,NOWDT,NOPROTECT,NQLVPluse delayfclock-4000000)#use i2c(Master,sda=PIN_C4,scl=PIN_C3)linclude <lcd.c>

//Canflguracion r2C

IdefineEEPROM_ADDRESS long inc

vaia 'o/rite_exf_peprom(longinc address, BYTE data)

(//inc1ua.r la funci6n exp ii cea« an teriormen tie] ~

BYTE read_ext_eepram(lanq inc address}

(I/incluir 18 tunoion explicada anteriormentej ~

void ms i n () (

incS valor-O, datolEEPROM_ADDRESS address;,­

lcd_init (),-

for (address"'O,-address<&9,-address++)WRITE_ EXT_ EEPROM (address, valor};lcd_gotoxy(l,l),-

print f (lcd_putc, "enviando-ilD", valor) ;delay_ms (500);valor++ I

[or (address-O ,-addxess<-9 ;address++)

dato-READ_EXT_EEPROM( address};

lcd_gacaxy(l,2),-printf(lcd_putc, "L'ecip;iendo··1D",aecor ,delaY_ffls (500);

Figura 46. EIprograma del ejemplo 4

En el 12C debllgger se pueden seguir las transiciones del bus. En la figura 47 sernuestra una operacion de lecture tal como se ha explicado anteriormente. La Ssignifica START, la A es reconocirniento (ACK), la Sr es START repetido, la N es NOACK Yla P indica STOP (cornpararla con la Figura 44, en este caso la direccion es01h ye) dato es Olh).

203

Page 209: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

-.. 6_.l!3. 6_ Uo( • S AO .1. .00 A 01 .l. Sr A.L 1. 01 Jl ,.. E.12J s--t" ~.!~~ s.

t ~ 6.U3,....4- 6.U4 J;

... '_124!!.

-. L~w :~-+. 6.124 s ~O::'

~_._. 6_.1_l~__' _--------------------------------------_--~--_--~~ fil~E<f~~ ~__ ~:'

I~ tJ~~~~.,~~~~..~ ..~~~ ..~~~~~~~~~~~~,

".~23 So AD ..'.1'2... s, 00 ~E..1Z.f. · 01 ..C l24 e $r

• a•·"'46.124 So 01 IIg.lZ4 ·P

Figura 47. La operacion de lectura con el12C debugger

Ejemplo 5: Leer la temperatura y hora de lectura y guarder los datos en una EEPROM;utilizar un sensor de temperatura I2C (DS1621), un reloj en tiempo real 12C (D51307) yuna EEPROM eerie I2C (M24512). La lectura se reolizarii en funcion de una orden dadapar el puerto eerie; con otra orden se vislIaiizaran los primeros datos de la EEPROM enun monitor del puerto eerie (figure 48). Componentes ISIS: PIC16F877, M24512, RES,COMPIM, 051621, DS1307 Y LM016L. lnstrumentos: 12C DEBUGGER.

t2C RTC_UI_

rf===::til::!. 1;.!!:...

-..."'_""n' I2C EepromRS[ Il6

...... ,014 ~

~

12C SENSOR TEMP

Figura 48. EIejemplo 5

Para facilitar el desarrollo del programa se van ha crear 3 ficheros driver para cadauno de los peruericos. Para 1a EEPROM serie 12CM24512 se utilizaran los algorit-

204

Page 210: Untitled 1

7. Transmision serie

mos descritos en el ejemplo anterior (figura 49). La direccion asignada en el esque­ma es la OxOD.

void write_ext_eepromllong int address, BYTE data)

short int status;i2c_start ();i2c_write(OxaD):i2c_write(address»8);i2c_wrice(address);i2c_write(data};i.2c_iiitop ();i2e_start::o ,status=i2c_wr~te(OxaO);r.hile(status--l)

i2c_start:();status=i2c_write(OxBO):

205

.BYTE read_ext_eeprom(long int eaaxees) {BYTE data;i2c_start:();

i2C_f"rite(OxaO);i2c_write(address»8};i2c_write(address):lZC_SCctrt ();

i2c_write(Oxal):data=i2c_read(O};i2c_ scop ();return (dar:.a);

Figura 49. Fichero EEPROM_24512.C

Para el reloj en tiempo real D51307 se necesitan conocer sus caracteristicas y es­cribir el driver. El D51307 suministra segundos, minutes, horas, dia, mes y afio entiempo real (mediante una bateria y un cristal de cuarzo exterior permite un fun­cionamiento independiente del sistema). Posee una serie de registros donde apa­recen los datos necesarios (figura 50), los cuales se suministran en codigo BCD caneJ formato indicado en la parte derecha de la figura. En este ejempLo solo se leeranlos segundos, minutos y horas.

Para la escritura y lectura del integrado, el fabricante recomienda los cidos indi­cados en la figura 51. Podemos observer que el dclo de escritura se inida con Ia

Page 211: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

palabra OxDOy la de lectura con OxD1.En el ciclo de escritura, el segundo byte esun puntero que debe indicar la direcci6n de inicio (en este caso 0). En el ciclo delectura se realizara la lectura de los tres primeras dlrecciones de la memoria delD51307 (los segundos, minutes y horas), el ultimo byte debe indicar un NACK almaster. Tan 5610queda convertir los bytes en BCD a binario. EI fichero se rnuestraen la figura 52.

I'"--r---------r--------~ -SECONOSI-- MINUTES

HOURSelf .. ...",. w.nu _: ...

.- ;;--/i"I"I'·,11I -- .' "t--- ~ r 4. --:-----~-1 "'~'" t 0 _:_l__ fUi" __J I'l ,01 ......

• 'O~:'l r»n. ,t..;jll)r- -t--.- 0'''',tr-I.......--'~._'_l...IQi-"~--r_--~-~ ••1>

"'A/4 J '"""I J "'.J ~

OA.Y().\TE

r-- "iONTHr YEARJ7H L C04'ITRO_ _3611 r RAMlFH L ~.8_ ....I~ t I I -r IICV¢ • I

051307 ADDRESS MAP OS1307TIMEKEEPER REGISTERS

FIgura 50. Reglstros con dlreccfones y formilto.s (cortesia de Dallas Smc.)

IS !rT,,"'~ • Ar._roorf • "(lI>A ~T iIC""OWUtx..E

'W ~O"lII'JFcnoN tiT ~".O'h

Figura 51. CIcio de escrltura y lectura (cortesla de Dallas Smc.)

int BCDaBIN(inc bed) (int varia;ver ie • bed;varia »- 1;

//ConverSJon de BCD B Binario

varia ~- Ox78;~'ecurn(varJa + (VBrJlI » 2) + (bed" OxO());

206

Page 212: Untitled 1

7. Transmision serie

void tiempo(byte snox, byte &min, byl:essec)(i2c_start(): //Escril:urai2c_write (OxDO); //COdLgO de escriturai2c_wrire(OxOO): I/~Jncero a 1a primera direccionl2c_start(}; I/Lecturai2c_write(OxDl); //C6digo de 1ecturasec = BCDaBIN(i2c_read()&Ox7t): //Lectura de los 7 bit de los segundosmin; BCDaBIN(i2c_read()&Ox7f): //Lectura de los 7 bit de ~os minutoshor = BCDaBIN(12c_read(O)&Ox3f): //Lecr.urade los 6 .oLtde las horasi2c_stop(),.

Figura 52. Flchero RTC_DS1307.C

El termometro digital y termostato I2C 051621 permite medir temperaturas entre-55°C Y 125°C. Bl valor de temperatura se suministra en dos bytes, el byte alto esel valor entero con resolucion de 1 °C Y el segundo byte es el valor decimal conresolucion de 0.5 °C (figura 53).

rDIPER.!rrar DIG.IIAL orrrt'r DlGIHl. OlTPl'T(lbnOlr\') tHt:!:) :'-eST CIIII10! ceooccoo 7DOflh

-2:"( 0001100: 00000000 1900h~I ,:(' ooooom IOOC«lQO OOSOl!...o·c 00000000 OOOOCOOO O-;)IJ:lh_,,0( 111111111000cOOO FrSllh-::!5T 1110011100000000 ElOCll h-55'( 11001001 00000000 C900h

Figura 53. Formato de Ja temperatura fc:ortesia de Dallas Smc:.,

La direction asignada en el esquema es laOxOl.Tiene un registro de control para elfuncionamiento como termostato que en esta aplicaci6n DO se utiliza. La palabra decontrol para Ia Iectu.ra 0 escritura es 1001A3A2A1-RJW (figura 55). Los comandosde control pueden ser, entres OrrOS, OxAA para lectura de la temperatura, OxEEpara el inicio de 1a conversion. Con estos datos se puede escribir el fichero para elcontrol del 051621 (figura 54).

void init_temp(int address) (i2c_start(),.i2c_write(Ox901(address«l)); //Genera prLmer byte (lODIA2ALADW)i2c_wrice(Oxee); //Inicia conversion12c_seop(J,.

floatread_foll_terop(int address) (

signed int datah,..int: datal:Iloe t: tura;

207

Page 213: Untitled 1

Cornpilador C CCS y Sirnulador PROTEUSpara Microcontroladores PIC

i2c_starc (),.i2c_write(Ox90 I (address«l)); IIGenera primer b.yce (lOOIA2AIAO-W)i2c_WlicerOxaa),. IILeer temperatural2c_start IJ;12c_wd ce (Ox91 I (address«l); IIGenera primer byte (1001A2AIAO-R)datah ..i2c_read(),. IILecwra parte altadacal-i2c_read(0); IILectura parte baja y NACKi2c:_stop() ;tura"'dacah; IIConversion a flotanteif (datal~p128) (U1"a-cuLa+0.5;return (ture);

Figura 54. Flchero TEMP_OS1621.C

&l.Ho A ""IfAHOA".... ccw.w4NO ,,' ... 1..,01 C'QIff't'IAl)

Ul.llJ1.J1.fUI.rU1.rUUU1.f1.I1nJlI"tnr­....u/, A..Ar.'W)~·.~-"'"...®"..!),~.!Xg;.l'X.~..!.-I".III!O t , t t

'W""" ro.I¥tOI.64'iT1At0lt1Vl (~"A~--...JUlJl ..nnn nruU1J1 n.~l1I1.nnnnnnnnn.n ..n.r­

.... \aJ 1\A..J>_r.VW'.ll.~IIDIDg:I;n~'4!!:).l.l.®:Vt®,~ fi

..... 1 . tIt :a1...M' ..onqn:"IVll ~I ~\C).,.. 01...::' 04'~.'U. O$~I ...er

....... TO.fW0..8YB~c:c;e'I"(JII(1',;.fl.)Uu J1nnnn..nnnrinnrtnnn nrU1.11Il ..'11U1.I11Ul.JUUUtnnnl1I"

r_ I :0'"~JYTf ""J~' CIOWWA.'C-."" ~~'UA.OJ"OW.~"'.Ynf(ICIII1(1't'CQt\~lON.w.OI't.~'fll.)--. nn ..n n nnI1JlJ JU1.Il.J1I1..nnn.n.n...rUlILi tJ1..fl..IUlI1..fU1.1lIU1.11.H.!1J~r \.I/i\AJr.'iifjJ4)..,,_A.IIi~i;y.g;.J'~~".lfiiiBlrii!'SI'.!i)'!&1R~W-.'J;'"".I l J' l I ! ' l-. -. Ij t

llNU' AtIOAIMetTt O:s,f,;'1 ~'. I'f '" =to'l ""~"'I'1D.ADCJIIIf'II OIl"'l Q.&.t• ..".,IJ!, ..., IfNllf ....,,, ~:I

IillUOntOWA 1"I'fIO.4YTCMGWl1:"~ 'I.. f{""'~'..a.~ 11fl!U"1I1..f1J1J1.fl.!lJ1.n ...nnnnnn.!lJU1.n.nnIVl.nn nn.->-,a.J'"0~ ... ~l:O.A.N"iu....a..fi'!D£@),"' ~liQ~W:®'~ ••

SIl' t I : t t........ ,,at,,ta.........• • • ...I1J\IUU1.J1J1.. '1...ru-­

"(ijifii:l'~~'V: ..:lSl!.{j,'j't:\...__fi"~.... t I

lD>Tf

Figura 55. Protocolo de lectura,lescritura (cortesia de Dallas Smc.)

Puesto que la temperatura es un FLOAT no se puede guardar este dato directamente enla EEPROM segun las funciones dadas en el fichero EEPROM_24512.C;por 10 tanto, se

208

Page 214: Untitled 1

T. Transmision serie

puede utilizar el fichero suministrado por CCS C llamado FLOATEE.Cpara guardar yleer datos tipo FLOAT en una EEPROM. El fichero se muestra en 1afigura 56.

WRITE;_FLOAT_SXT_EEPROM(longint n, Itaet: data} (

ln t i ,for (i = 0; i < 4: i~)

write_€iXC_eeprom(1 .,. n, • «(inc8 ~) (&daea) + i);

tioet: RE-AD_E'LOAT_EXT_EEPROl·t(longint n)

int i;noe t ae ta;

for (1 - 0; ~ < 4; ~H)"«lnt8 .) (&data) + i) = read_ext_eeprom{i + n);

return (data) ;

Figura 56. Flchero FLOATEE.C

Una vez definidos Ios ficheros para eJ manejo de los perifericos se puede escribirel programa principal. El programa se comunica con un terminal del puerto seriede tal forma que mediante un menu se pueden elegir dos opciones: Con 1se iniciala lecture de temperatura y tiempo para almacenarlo en Ia EEPROM y con 2 sevisualize, a traves del puerto sene, los primeros datos de la EEPROM (los 4 bytesdel FLOAT de 1a temperatura y los 3 bytes del tiempo -seg., min. y horas-), La co­municaci6n serie se realiza por interrupcion.

~include <loF876.h>#fuses Xl',NOWDT,NOPROTECT,WOLVP

fuse delay(clock=4000000)'use rs232(baud=9600, xmic=pin_c6, rcv=pin_c7, bits=B,parity=N);luse 12c (Master,sda=PIN_C4 ,scl=PrN_C3)

#include <lcd.c>#include <EEPROM 24SL2.c>lIinclude <J~TC_ds1307.c>

Hinclude <TEMPds1621.c>

#include <floatee.c>

//F~cbecos driver de los pexifericos

209

int: dat_in, cnt:, ar smin i eec:int16 eddrees=a:

inC dat_serie[7];float dato;

!hnt_rda //rnterrUpC20n para el puerto serie

Page 215: Untitled 1

Compllador C CCS y Simulador PROTEUSpara Microcontroladores PIC

rd,,_isr()

dac_~n~getc();printt ("\.c");if (dat_i.n~'::')/15i as "2" se visualizan los primeros datos de 111 EEPROM

IILee el pue.ctoserie

for(cnt-O;cnt<-6;cnt++) IILeccu.cade los 7 prlmeros bytes de la EEPR~

dat_serie[cnt}-read_ext_eeprom(cnt);

Jfor(cnc..O:cnt<-6;cnt++) /IV~sua1iza los 7 pdmeros bytes de la EEPROM

printf("Byte tu-13u \c",C'l',dac_serie[cnt)) ;}

void main ()lcd_init(J;enable_lntercupts(inc_rda);enable_interrupts(global);

address-O;

pnncf("Pu1sar para leer datos\r"); IIMenu para e1 term~nal serleprintf("Pulsar 2 para visualiza.cdatos\r");

while (1) (

ff(dac_in--'l') IIS1 es "I" se inicia IIIlecturll y grabado en 18 EEPROM

init_cemp(OxOl); IIInicializa e1 DS1621

delay_ms t ioc) :tiempo(hr,min,sec): IILee c~empo del D51307dace - read_full_cemp(OxOZ): IILea temperatura del D51621WRITE_FLOAT_EXT_EEPROM(address,date); I/Guaeda 4 byres del FLOAT

address-address+4:

WRTTE_EXT_EEPROMladdressf',hrl; I/Guaeda byte de hora

WRITE_EXT_EEPROMladdress ~,min); I/Guarda byte de minuto

HRITE_EXT_EEPROH(lIddnUJ.· «,» A}: IIGu'3Cdabyte de seC/undo

lcd_gocoxy(l,l):prinCf(lcd_putc,~Temp-t4.Jf C\n",daco): IIVlsuallza 1a ce~peraturDprintf (lcd_pucc,..t2u: 12c;:t2u" .nr,min,sec); IIVJ.sual1zala hera

210

Page 216: Untitled 1

7. Transmisi6n serie

If (address--Oxf(ff) address-a: I/Cuando se termina la EEE'RON vtlelveI/al pnncipio.

}

I}

Figura 57. Programa principal del eJemplo5

Se puede uriliza el HypcrTermil1(1i para cornunicarse con el PIC. La configuracion semuestra en 1aAgura 58; el resultado se muestra en la figura 59.

I j En....'" fll1 de IInM con lot avaI'IOe$de linea, I feD de mC41acle''''I!~''1)$ JocaImerleRete,do do linea 0Aetaldodeceraaler

o

AI ,eciJ. ASCI

o Agregar evetlQode llnee '" finalde cada Irnea ,eabida

L Inle,plel!lf caaclem recIbidos como ASCII de 7 bi.s

l Ajutter Iineilt ql,l$sob,epasen el an~ de lermin!!l

I .Acepl!lf I I ClII'ICeiar I

Figura 58. Conflgurad6n del HyperTermlnal

~ ~ •• lt~ ft","" ,..,....

O~ ~ CiS "

Pulsar 1 pore teer datospulsor 2 f)t;I,.4't visu,;l ildr ~to-;J2Byl. O· 0Byl" I' I)By 0 2· 0By!o S 0lJylo 4 18Byte Sa 12Byte 6· 311

Figura 59. Pantalla de comunlcacl6n

_,_

211

Page 217: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC -- -----En e1 comando DEBUG del PROTEUS se puede visualizar la EEPROM serie me-dlante el comando 12CMEMORY INTERNAL MEMORY (figura 60).

0000 0 0 0 18 12 0 l.8 12 H 00010 1) 16 12 is 0 0 3S llO 8 0 .............. "......OOZO .18 3S 130 8 a 18 u 8 0 0 ~8 12 •• .:I •••••• tII ••••••0(31) 3$ S El 0 1& 12 }5 130 0 18 U 36130 ....... •1.....•• S.aOAO a 0 18 U 36 DO 8 0 18 12 16 ilO 8 0 ..... s...... s...0050 0 lEI 12 }6 no 8 0 0 16 12 36 HO 8 0 a 18 ••. s ••...• s..• ,'OQl;O 12 36 130 8 0 0 18 12. 37 130 8 0 0 18 12 )] .s ..... ,w" .... ,.0070 13El 8 0 0 18 1D 26 130 a 0 0 18 10 24 130 s ................0080 0 0 18 10 2'; 130 II 0 0 18 10 lG 130 8 0 0 .................OQ90 18 10 l6 -130 8 0 0 16 10 2{; :130 8 0 0 18 10 ................DOM 27 130 8 0 0 l.8 10 Z7 130 8 0 0 18 10 ~7 130 ....... - ...........00&0 8 0 0 18 10 7.7130 S 0 0 18 "10 27 :130 II 0 ................coco 0 18 10 27 130 8 0 0 18 10 28 130 8 0 0 18 ..................0000 10 zs no 8 I) 0 18 10 28 130 8 0 0 18 10 28 ................00.0 130 6 D 0 16 10 28 130 8 0 0 18 10 29 130 a .................MFO 0 0 13 )0 11>130 8 0 0 11 )0 .1S 130 8 0 0 ................0100 13 30 15 -:130 8 0 0 13 30 1$ 130 8 0 0 13 30 .................CUI) 16 130 8 I) 0 13 30 16 130 8 0 0 j.l 30 16 ~30 ................01Z0 8 I) 0 13 30 1. 130 S 0 0 13 30 1] 130 8 0 ................on!) o 13 30 l.7 130 8 0 0 13 30 11130 8 0 0 13 ...... - .........0140 30 17 130 8 0 0 13 30 V 139 El 0 0 13 30 H .................0150 130 8 0 0 13 30 18 130 8 0 0 13 ]0 18 130 e ..................OlOO 0 0 13 30 16 130 8 0 0 11 30 18 1.30 B 0 0 .................0170 13 30 18 130 8 e e 13 30 13 no s 0 I) 13 30 ................IUGO 19 130 8 0 0 1"3 30 is 130 8 0 0 13 30 19130 ................Ol~O 8 0 0 -:13 }Q 19 130 8 0 a 1~ 30 19 US 8 0 ................CIAO 0 11 30 lO 130 I> 0 0 13 30 20 130 8 ., 0 n ................01BO 30 20130 Ii 0 a 13 30 20 130 S 0 0 13 lD ~O ................OlCO 1.30 8 0 0 13 ]0 20 13() 8 0 0 13 30 Z1 130 8 ................OtoO 0 a 13 30 2:1.130 8 0 0 13 30 :n HO a 0 0 .................OlEO l.3 30 21 -:1l0 8 0 0 13 30 21 UO 8 0 0 U lO ............ - ..-01£0 z ; 110 8 0 Q 11 .0 II 130 6 Q 0 13 3(1 U 130 ................0200 8 0 0 H 30 22 130 6 0 0 13 30 22 HO 8 0 .......- .........DUO 0 U 30 Z2 130 8 0 0 ~3 30 2:2 110 8 o 0 u .................0220 30 H 13:0 8 0 0 11 30 H 130 e 0 0 130 30 23 .................ono HO s I) 0 U 3D 13 255 2S5 2Sc5255 255 255 255 2SS 2SS .................02:.40- 25S ;?SS 255 25S 255 l5S HS 25S lSS 2S~ 1SS 2:5~ lSS 1SS 255 2iS ................0250 255 2SS 2SS 2SS ~S5 255 2SS 2S5 ZSS 255 ZSS 2SS 255 ZSS .,5 255 ...............0260 ..55 as lS5 255- 2SS 1S5 255 255 255 Z5S ass 25-5 255 255 255 2S5 ...............0270 2SI> 155 as HS 25!>.55 25"5 255 255 25; 255 255 25S. 255 2SS zss ................02eo lS5 :155 2SS 25. 25"5155 255 Z5S 1SS ?SS 255 255 255 255 2SS 2S5 ................OHO 255 2SS ZSS 2SS 2S5 255 255 255 2SS 255 255 255 255 255 255 2SS ..................02';0 ZS5 255 255 255 255 255 255 ass 2SS ~5S- l5S 25S 2S5 lSS ~5S 255 ................0190 255 ~SS 2:!-~ 255 255 255 c55 ass 2SS 255 25$- :!SS 255 255 2SS 2SS ...............1)2CI) Z55 Z55 255 >!5S ZS5 2S5 250 ZSS 255 255 2,SS 255 255 zss 255 Z55 ................0200 zss 255 ass 2S5 255 255 zss 25S 255 zss zss 255 Z55 255 255 lSS ................OlEO as Z5S 255 255 255 255 251>Z55 255 255 2SS lSS 255 255 255 255 ................GZFo 25-5 ~55 2S5 255 2!>5 2SS zss 2S5 255 25~ 255 lS5 255 255 255 255 ................0300 15S ess 255 255 2"SS 255 255 2,.5 25"5 25S lSS 255 255 255 255 255 .................. _.0310 255 ~SS 2SS 15S 255 US l55 255 255 255 lSS 255 255 lS5 25'S iss ................D320 !!55 lS5 2~5 ~S5 255 255 255 ?S5 2S"5 255 zss 2SS 255 ZSS 255 255 ................tl3·Z0 2S!>Z5S <sS ass lS5 255 255 255 255 H5 !SS 255 255 lSS 255 ~S5

Figura 60. Memoria in1ema de la EEPROM 12C

212

Page 218: Untitled 1

8. Gama Alta - PIC18

213

Ca itulo 8

Gama Alta - PIC1S

8"1 IntroduccionEn los ultimos anos, Microchip ha lanzado varias gamas de PIC con elevadas pres­laciones, los PIC18, los PIC24 Y los dsPIC. Con la gama alta (PIC18), Microchiprnantiene la arquitectura basica que tan buenos resultados ha obtenido con la gamabaja y media y, adernas, reduce las Iimitaciones de estas dos ultimas, Los PICl8tienen una arquitectura RISC avanzada Harvard con 16 bits de bus de programa y 8bits de bus de datos (figure 1).

16 8ORIA

DATO(H STA KB)

M v'lORJAPROGRAM A

fLASHASTA2MB)

PIC18RISCCPU

Figura 1.Arqultectura PIC1S

La memoria de program a aumenta hasta I MWord (en realldad se manejan hasta64 Kbytes pero llegan hasta los 2 Mbytes con memoria externa) y desaparece la pa­ginad6n. La memoria de datos RAM puede liegar hasta 16 x 256 (4 KBytes) y hastalos 1 Kbytes de EEPROM.

La pila aurnenta hasta 31 niveles. Incluyen tres punteros FSR que perrniten direc­donal' la memoria de datos de forma indirecta Y sin bancos. Eljuego de instruccio­nes aumenta hasta las 75 instrucciones. Introduce un multiplicador hardware 8x8.La frecuencia maxima de reloj es de 40 MHZ Y la velocidad de procesador lJega alos 10 MTPScon oscilador de 10 MHz. Inc1uye perifericos de comunicaclon avan­zados (CAN y USB). Con la filosofia tradicional de Microchip, los P[CIS son com­patibles con los P(C16CXXy P(C17CXX.Ademas ha desarrollado un compilador Cespecifico para esta gama alta, eLC18.

Page 219: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

Car.cteri~aH' PICI8F14%fI PIC18Fl51l1 PICI8F'~O PICIBT.IS!lIClImaAII.

Frceuencta ue ()("~OVlllz DC-40.\UIz OC-4O.\lJIz OC-lO'\fHz [,1:!rlb.·oli...t(y d~l.ys) POR.BOR. POR.BOR. POR. BOR. POR,BOR.

InslrucciOn RESET. In$ITUcei&nRESET. Instrurc.iOn RESET. Inmllcclon RESET..'PUp nel1Jl. PiluUena, Piblk"", Pib nona.

Oesbnnlamiento de Dc3bnnlamlrntD d~ Dc3bnrdaml~IO de Dc3bnrd.mien.o de <'Pi1u (PWRT. OST). PD. (PWRT. OST). Pil. (PWRT. OST). PI,. (PWRT. omi~::MCLR (opciiJnaJ). MCt.R (opdon.». MCLR (opdonall. Ma.R (opdOnaI).

WOT WOT WOT \\OTMomon. de 1638-1 32768 16384 32768PrOOl'llma (bytt'S) ~;Memorl. d. 8191 16384 8192 16384 :i:P~ogramaIInstrucdon .. )Memori. DJitos 768 1536 768 1536(bl''')Memoria O'IO~ 2.."6 156 Z$6 !56 ~!EEl'RO\1InlUtul)CiuneJ 19 19 20 20Puerto< EIS Porli A.B.C.I£) PortsA.B.C.IE) POri. A.B.C.E Poru A.s,c.D.Er~mjJjI~madoreo .. ~ .. ..M6dulosCCP 2 1 I Il\l6duJo.CCP 0 0 I I

[In,ejol'lldosComu.nJc.cloncs MSSP. £OSARI MSSP .EUSARI MSSP..EUSART 'fSSP.£USART I,

mi.Con,unic:acLones psp psp

f\Paral.lnMOdl'l. AD d. 10 10C"~AU:S 10 CANALES 13CASALES L1CANALESbits'\limero de 75(8.1 Ext.) 7S(83 Exto) 15 (83 ExL) 15 (83 E'f.)In~lrucdon6ProgttDlllcidn SI SI SI Si c:'eon balo .01.. 1"Oetocd6n d. baja lSI Si SI Si bttnsitmErtCllpsul.dD. 211-pin 1'011' 28-pin POW 4()..pin PDIP "()..pio porp

~iIll-pln SOle Z8-pinSOIC -U-pln QF" -U-pIoQF:\ZlI-pluQFN Zs-Plo QfN .u.j,ill rorr .w-iHniQFP

Figura 2. Caracteristlcas de PIC 18F2420, PIC18F2520, PIC 18F4420 YPIC18F4520

8.2 Organizacion de la memoriaElPTC18P4520 dispone de las siguientes memorias:

• Memoria de programa: memoria FLASH intema de 32768 bytes:• Almacena instrucdones y constantes/datos.• Puede ser escrita/leida mediante un programador extemo 0 durante la

ejecud6n del programa mediante unos punteros.• Memoria RAM de datos: memoria SRAM interne de 1.536 bytes en la que

estan incluidos los registros de funcion especial:• Almacena datos de forma temporal durante 1aejecucion del programa.• Puede ser escrita/lefda en tiempo de ejecucion mediante diversas ins­

trucciones.

214

Page 220: Untitled 1

8. Gama Alla - PIC18

• Memoria EEPROM de datos: memoria no volatil de 256 bytes.• Almacena datos que se deben conservar aun en ausencia de tension de

alimentaci6n.• I'uede ser escrita/lelda en tiempo de ejecuci6n a traves de reglstros,

• Pila: bloque de 31 palabras de 21 bits.• Almacena Ia direcci6n de la instrucci6n que debe ser ejecutada despues

de una interrupci6n 0 subrutina.• Memoria de configuracion. memoria en la que se incluyen los bits de confi­

guracion (12 bytes de memoriaflnsh) y los registros de identification (2 bytesde memoria de solo Jectura).

8.2.1 Arquftectura HARDVARDEI PIC18F4520 dispone de buses dlferentes para el acceso a Ia memoria de progra­rna y a la memoria de datos (arquitectura Harvnrd):

• Bus de la memoria de programa:• 2J lineas de direcci6n.• 16/8 lineas de datos (16 lineas para instrucciones/8 lineas para datos).

• Bus de la memoria de datos:• 12 lineas de direcci6n.• 8 llneas de datos.

Esto permite acceder simultanearnente a la memoria de programa y a la memoriade datos. Es decir, se puede ejecutar una instruccion (10que por 10general requiereacceso a la memoria de datos) mientras se lee de la memoria de programa Ia si­guiente instrucci6n (proceso pipeline).

8.2.2 Memoria de ProgramaEl PIC18F4520 dispone de una memoria de programa de 32.768 bytes (OOOOH-7-FFFH) (figura 3). Las instrucciones ocupan 2 bytes (excepto las instrucciones CALL,MOVFF, GOTO Y LSFR que ocupan 4). Por 10 tanto, Ia memoria de programa puedealrnacenar hasta 16.384 instrucciones.

Primero se almacena la parte baja de la instruccion y luego Ja parte alta (para lasinstrucciones de 4 bytes primero los bytes menos significativos y luego los massignificativos). Las instrucciones siempre empiezan en direcoones pares.

La operacion de Iectura en 1a posici6n de memoria por encima de 7FFFH da '0'como resultado (equivalente a la instruccion NOP).

215

Page 221: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

Direcciones especiales de la memoria de programa:

• Vectorizacion del Reset es OOOOH.• Vectorlzacion de las interrupciones de alta prioridad es la OOOSH.• Vectorizacion de las interrupciones de baja prioridad es Ja 0018H.

mPh8000h

Figura 3. Memoria de Programa

La memoria de programs puedc ser lelda, borrada y escrita durante Is ejecuciondel programa. La operacion que se utiliza normalmente en tiempo de ejecuci6n esla de lectura de tablas 0 datos almacenados en memoria de programa.

8.2.3 Contador de ProgramaEI PC (contador de programa) tiene 21 bits (PCU, PCH Y PCL).EIbit mcnos significa­tivo del PC apunta a BYTEs,no a WORDs, por 10 que es "0". E1PC se incrementa dedos en dos. Se dispone de los correspondientes registros auxiliares PCLATU y PCLA­TH para actuar de forma cornbinada con el PC cuando este se escribe 0 se lee.

216

r - PC<2~2-1-

-r Nlvel 1 de ,; plla -lL Nlvel31 de la !!!Ia

r+: Veclor de Rosel OOOOh

~r In~ ::a---p;iOrld&d 0008h

Vector InUmupcion de baja priolfdad 001811

Memoria de Program. Intelna

leldo5 como '0'

1 FrFFF'h'-------------' 2000QOh

Page 222: Untitled 1

8. Gama Alta - PIC18

• PCU: parte superior del PC, registro no cfuectamente accesible; las operacionesde lectura/escritura sobre este registro se hacen a traves del registro peLATU.

• Pell: parte alta del PC, registro no directamente accesible: las operaciones delectura/escrirura sobre este registro se hacen a traves del registro PCLATH.

• PCL: parte baja del PC, registro directamente accesible. Una operad6n de lee­tura sabre PCL provoca que los valores de PCU y PCH pasen a los registrosPCLATU y PCLATH, respectivamente. Y una operad6n de escritura sobre PeLprovoca que los valores de peLAru y PCLATH pasen a peu y PCH, respecti­vamente. El peL siempre tiene el bit menos significative a '0' debido a que lasinstrucciones siempre empiezan en direcciones pares.

8.2.4 Memoria de ConfiguracionSe trata de un bloque de memoria situado apartir de la posicion 30000H dela me­moria de programa (mas alia de la zona de memoria de program a de usuario), Enesta memoria de configuracion se incluyen:

• Bits de configuraci6n: contenidos en 12 bytes de memoria flash permiten laconfigura cion de algunas opciones del PIC como:

• Opciones del oscilador.• Opciones de reset.• Opciones del watchdog.• Opciones de la circuiteria de depuracion y programaci6n.• Opciones de protection contra escritura de la memoria de programa y

de 1amemoria EEPROM de datos.Estos bits se configuran generaJrnente durante la programadon C, aunque tambienpueden ser leidos y modificados durante la ejecuci6n del programa.

• Registros de identificacion: se trata de dos registros situados en las direccio­nes 3FFFFEH y 3FFFFFH que contienen informacion del modele y revisiondel dispositivo. Son registros de s6lo Jectura y no pueden ser modificados porel usuario.

8.2.5 PilaLa Pila es un bloque de memoria RAM independiente, de 31 palabras de 21bi 15Yunpuntero de 5 bits, q_uesirve para almacenar temporalmente el valor del PC cuando seproduce una Hamada a una subrutina 0 interrupci6n. El "Top Of Stack" es accesible,se puede 1eery escribir (sera convenrenre quitar previamente las interrupciones).

El puntero de pila (contenido en el registro STKPTR) es un contador de 5 bits queindica la posicion actual del final de pila. El contenido del final de pila es accesiblemediante los registros TOSU, TOSH, TOSL.

217

Page 223: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

Cuando Seprocesa una interrupcion 0 se ejecutan las instrucciones CALL 0 RCALL(el PC esta apuntando a la siguiente instruccion] se incrementa e) STKPTR y sealmacena e1 valor del PC en el final de pila. Cuando se ejecutan las instruccionesRETURN, RETLW 0 RETFIE se copia en el PC el valor almacenado en 1a cima depila y se decrementa el STKPTR.

8.2.6 Memoria de DatosLos PIC1S tienen basta un total de 4 KBytes agrupados en 16 ban cos, con 256 bytescada uno. Como en el resto de las gamas, existen los registros de prop6sito generalGPR y los registros especiales SFR; estes ultimos se sinian en Ia zona mas alta (des­de FOOhhasta FFFh).

EI PIC18F4520 dispone una memoria RAM de datos 1.536 bytes (6 bancos de 256bytes). Ademas dispone de 126 bytes dedicados a los registros de funcion especial(SFRs) situados en la parte alta del banco 15 (figura 4).

BSR<3:0> Mapa dememoriaRAMde~os

~

DOllAtcess RAM-:

1~

Bam;oOSPR

_,FflI OFl'hDOlI 100II \

Banco 1 6PRFAI lF1'h

~.00II -8aoo02 SPRfFb 2Ff1I

1 OOh JOan.. Banco 3 GPA~Fl> .JfJ1> \= 11100 00II ~0010.. Banco4 GPRFflI oIffjl

= 0101 00b '500ftBancoS GPA

l= F1'h 5fR1 BanCO de Al:ceso00It MOIl Rapldo

Baooo6FflI :ra: eon

= 0111 QOh Access RAM l.clW 5flIBanco 7

Access RAMHIgh1118>m 7fFb00b 8OOt\ (SFRs) fFlo

~ 1000 IBanco 8 Unusued

IRead uOOh

To=1110

Banc:o 14

Ifill EFAt

= 1111 00b Unusued '00II-- .. Banco 15 fTRl

FFh SER ,.., Figura 4. MemoriaFfll> RAMPIC18F4520

218

Page 224: Untitled 1

8. Gama Alta - PIC18

Para acceder a W1 byte de la memoria RAM de datos primero se debe selecdonar elbanco a] que pertenece el byte mediante el registro de selecci6n de banco (BSR) y, acontinuad6n, direccionar el byte dentro del banco. Ademas existe una modalidadde acceso rapido a las 126 posiciones de la parte baja del banco 0 y a los U6 bytesde SFR (banco de acceso rapido).

La memoria RAM de datos se compone de registros de prop6sito general (GPRs) yde registros de funcion especial (SFRs). Los SFRs son los registros mediante los cua­les se puede monitorizar/controlar el fundonamiento de 1aCPU y de las unidadesfuncionaJes del pre. En el P]C18F4520 se situa en el bloque de memoria de OxF80aOxFFF(£igura 5). Se distinguen dos conjuntos de SFRs:

SFRs asociados con eI nucleo del PIC:CPU: WREG, STATUS,-aSK etc.Interrupciones: lNTCON, PIEl, PIRl, IPR1, etc.Reset: RCON.

SFRs asociados con las unidades funcionales:Timers: TOCON,TMRlH, TMRIL, TlCON, etc.Convertidor AID: ADRESH, ADREsL, ADCONO, ADCONl, etc.EUSART: TXREG,TXSTA,RCSTA, etc.CCP: CCPRlH, CCPRlL, CCPICON, etc.MSSP: SsPSTAT, SSPDATA, sSPCFG, etc.Puertos de E/S: TRIsA, PORTA, TRISB,PORTB, etc.

PORTA OxF80 SPBRG OxFAFPORTB OxF81 --PORTC OxF82 TIMERIL OxFCEPORTO OxF83 T1MERIH OxfCFPORTE OxF84 -

--.--.- TIMEOL OxFD6TRISA OxF92 TlMEROH OxFD7TRISB OxF93 ---.-TRISC OxF94 WERG OxFE8TRlSD OxF95 -----TRISE OxF96 STKPTR OxFFc:

Figura S. Reglstros SFR

8.2.7 Memoria EEPROMEl PIC18F4520 dispone una memoria EEPROM de datos de 256 bytes. A1 ser unamemoria no volatil, los datos almacenados en ella se mantienen en ausencia de

219

Page 225: Untitled 1

eompilador e ees y Simulador PROTEUS para Microcontroladores PIC

tension de alimentacion. EI acceso a esta memoria se realiza mediante los SFRs:EECON1, EECON2, EEDATA Y EEADR. Esta memoria permite hasta 1.000.000 deciclos de borrado/escritura. Se puede leer/escribir de forma individual en cada unade las 256 posiciones de memoria.

Cuando se realiza una operacion de escritura, la circuiteria interna del PIC se en­carga de borrar previamente la posicion en la que se desea escribir, La duracion deun ciclo complete de borrado/escritura de un byte en la memoria EEPROM sueleser de unos 4 ms.

8.2.8 Modos de DireccionamientoEI modo de direccicnamiento es 1aforma en la que se obtienen los datos que van aser utiJizados en la instruccion. Existen 4 modos de direccionamiento: INHEREN­TE, LITERAL, DlRECTO e INDIRECTO.

• Modo de direccionamiento inherente: en este modo, abien la instruccion notiene operando 0 bien el operando viene especificado en el propio codigo deoperacion de la instruccion,

• Modo de direccionamiento literal: en este modo, el valor del operando vieneindicado de forma explidta en la tnstruccion.

• Modo de direccionamiento directo: en este modo, la direccion en la que seencuentra el valor del operando viene indicada de forma explicita en la ins­truccion,

• Modo de direccionamiento indirecto: en este modo, la direccion de memoriaen la que se encuentra el dato viene especificado en uno de los registros FSRO,FSRI Y FSR2.

8.2.9InterrupcionesSe dispone de dos niveles de prioridad:

• Nivel alto vectorizado en la direccion OOOSH.• Nivel bajo, vectorizado en la direcci6n 0018H.

Todas las interrupciones pueden ser programadas con cualquiera de las dos priori­dades, salvo la interrupcion externa 0 (que siempre tiene alta prioridad). Se puedeforzar el modo compatible "solo alta priori dad", mediante el bit lPeN= O.

GIE/GIEH & PETE/GIEL controlan los respectivos perrnisos globales. Cuando sesirve una interrupci6n, automaticamente se quita su correspondientc permiso glo­bal. El servicio de interrupci6n de alta prioridad impide el scrvicio de baja priori­dad. Cuando se ejecuta RETrJE se pone el perrniso correspondiente al nivel que seesta sirviendo.

220

Page 226: Untitled 1

8. Gama Alta _ PIC18

Todas las interrupciones disponen de 3 bits de configura cion (excepto la interrup­cion extema 0 que tiene dos):

• Bit de hahllitacion de Interrupcion: permite habilitar a nivel individual lainterrupcion .

• Flag de interrupcion: se pone a '1' cuando se produce la condici6n de inte­rrupcion independientemente de si la interrupcion esta habilitada 0 no. Esteflag debe ponerse '0' par software cuando se process la interrupcion.

• Bit de prioridad de interrupci6n: establece S1 la interrupcion es de alta 0 debaja prioridad (este bit no esta disponible para la interrupcion externa 0).

El PIC18F4520 dispone de 20 mentes de interrupciones. Se distinguen dos gruposde interrupciones:

• Grupo general de interrupciones:Interrupckin de Temporlzadur 0

Interruption externa IInterrunclon externa 2

Interruption POI' cambio en PORTB~nterruPci{in exrerna 0

• Grupe de interrupciones de perifencos:Interrupelen del SSP loterrupcion del fallo del osclladorlnterrupclen del AID tnterrupeten del comparadorlnterrunclen de recenclon de III EUSART Interrunclon del CCP2Interruption de trsnsmision de la £USART tnterrupcien de escrttura en HasbJEEPROl\1tnrerrunclen del MMSP tnterruncten de collsion de bus (MSSP)Interrupcion del CCPl Interruption de detecclen de anomallas en \J!D_Interrupci6n del Temporlzader I tnterrupclen del Temporlzador 2Interrupclen del Temnorizador 3

En el compilador C se modifica la directive ItINT_XXXXde taJ forma que se pue­den incluir las palabras clave HIGH y FAST.

Una priori dad HIGH puede interrumpir a otra interrupci6n. Una prioridad FASTse realiza sin salvar 0 restaurar registros (ver el siguiente apartado).

Asi, en los PICl8 se pueden dar las siguientes interrupciones en C:#INT _x.x.xx Prioridad normal (baja) de interrupcion. El compilador guarda y

restaura los regisiros clave. Esta interrupcion no interrurnpe aotras en progreso.

i.:#INT_xxxx FAST Interruption de alta prioridad. En compilador NO guarda yrcstaura los registros clave. Esta inrerrupcion pucde interrurnpir a [:;otras en p..!:,ogreso.S610 se pcrmiie una en el.e.r2~ramtl. rl#J'NT_xx.xxHrGII lntcrrupclen de alta prioridad. EI eompilador guarda y rcstauralos registros clave. Esta interrupcion puede intcrrumpir 0 oiras enprogreso.

221

Page 227: Untitled 1

Compilador C CCS V Simulador PROTEUSpara Microcontroladores PIC

• HINT_xxxx: Priori dad normal (baja) de interrupcion, El compilador guarda yrestaura los registros clave. Esta interrupcion no interrumpe a otras en pro­greso.

• ItlNT_xxxx FAST: Interrupcion de alta prloridad. En compilador NO guarday restaura los registros clave. Esta interrupcion puede interrumpir a otras enprogreso. 5610 se permite una en el programa.

• ItINT_xxxx HIGH: Interrupcion de alta prioridad. El compilador guarda yrestaura los registros clave. Esta interrupci6n puede interrumpir a otras enprogreso.

illPIC18F4550 tiene las fuentes de interrupcion mostradas en la figura 6.

rTimer I) .,.,..flow f.....,., srte name)rTIIIlI!,I)OYedJowfu;lngTIMEROn!fme)rTime, 1 ovedlowrTime,2 cwerlIowrTline, 3 O'MfflowrExlemal i1Ie!fup!rEIiteJM "'""Up!blrEl<IetMirlar;rpl112rPod B all' change on 84.fl7rp!I~ S,- Portdata..rAna!oo to dgt.1convemon c:cxrPet&rRSm,_ved«a ....aiabIerRS232tr_ bufferernpt~rSPI 0I12C ae1JVit~rCept... 01 Canpare on "" 1rC<JPiUfe 01 Compare on 1A'112rsu: eoIIi=rGnrLow voIloge det~r~alOI 1 detectrD~o eepTomWrite C(lI!1Ilir.IteI "31Fl""",:~F

Figura 6. Fuentes de interl'upci6n del PIC18F4520 desde el Wizard del CCS

8.2.9.1 Registros de salvaguardaLas interrupdones se disparan durante la ejecucion de codigo del program a prin­cipal 0 de otra interrupcion. Esto hace que durante la ejecud6n de la rutina de tra­tamiento de Ia intermpci6n se pueda modificar el valor de los registros que estansiendo utilizados por otras partes del codigo.

Para evitar que estas modificaciones alteren elcorrecto funcionamiento del sistemaconviene almacenar los valores de estos registros al inicio de la interrupdon pararecuperarlos al final

Se puede salvar y restaurar el contenido de las variables deentomo (WREG, STA­TUS y BSR) en sus respectivos registros sombra, 10 que equivale a una pila de unsolo nivel.

222

Page 228: Untitled 1

8. 6ama Alta - PIC18

8.2.10 Registro WEI registro WREG pasa a ser un registro direcdonable (OxFES),por 10que se puedeutilizar de forma explicita.

8.2.11 OsciladorEl PIC18F4520 permite multiples configuraciones:

LP Cristal Baia-Potencla __ima;(.200KHz)XT Crtstal-Resenador (max. 4MHz)HS Cristal-Resonador Alta-VeJocidad j_mn. 40MHz_lHSPLL Crlstal-Resonador Alta-Velecidad coo habilitation de PLLJ..max. lOl\'(Hz)RC Enema R-C con FOSCl4 salida eo RA6 (max. 4J\.IHz)ROO ExternaR-C con 1/0 enRA6 (max. 4MHZ)fNTIOI Oscilador Interne FOSC/4 salida en RA6 e flO en RA 7j_301500 KHz. J/4/8 MHz)INTI02 Oscilador Interne con 1/0 en RA6 v RA7EC Rcloj Extcrno con FOSC/4 de salida (max. 40MHz).EC)O ReloJ Externo con I/O en RA6 (max. 40MHz).

La disponibilidad de oscilador intemo pennite multiples configuraciones (figura 7).

- ",I

31.251-.",(_cIocl<~"""&f,'HZr

31~hr (~_ de","" """'""""'0_

8.2.12 Unidades FuncionalesEI PIC18F4520 dispone de una serie de Unidades Funcionales que Ie permiten:

• Realizar tareas especificas especializadas (conversion AID, transmision/re­cepcion de datos, generacion de seiiales digitales con temporizadones pro­gramables, etc).

125KHZ

" 311-.llZ

Figura 7. Configuracl6n del oscilador interno

223

Page 229: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

• Optimizar el rendimiento del PIC, ya que estas unidades trabajan en paraIeloa la CPU permitiendo que esta se centre en otras tareas como el procesado dedatos, calculos, movimiento de datos, etc.

Las ilnidades Funcionalesmas importantes del PIC18F4520 son:

Puerto de [IS Uoidad de Comparacion/Captura/PWM meiorada (ECCP)Temporizador 0 Canal de cemunicacten serle EUSARTTemporizador 1 Canal de comuoicaci6n serie MSSPTemnorizador 2 MOdulo 8nslol!ico de comnaraclonTemporlzador 3 Canal de transmislon de datos en paralelo (SPP)Convertidor AID Acceso a memoria cxrerna (EMA)

I Unidad de CompJlrllci6n/CapluralP\V'\1 (CCP)

8.2.12.1 Puertos de entrada/salidaEl PIC18F4520 dispone de 5 puertos de E/S que incluyen un total de 36 lineas digi­tales de E/S:

PUERTO. LL~SDEENTRADNSAUDAPo.RTA 8 LlNEAS DE ENTRAD1VSALJDA

t;Po.RTB 8 LINEAS DE ENTRADA/SAUDAPORTC 6LlNEASDE ENTRADNSALIDA +2LINEAS DE E]\iRADAPo.RTO 8 L1NEAS DE ENTRADNSALIDA 'I'

PORTE 3 LL~AS DE ENTRADA/SALIDA + J LINEA DE ENTRADA :'i

Todas las lineas digitales de E/S disponen, como minimo, de una funcion aItema­tiva asociada a alguna circuiteria especifica del prc.Cuando una linea trabaja en elmodo alternative no puede ser utilizada como linea digital de EjS estandar.

<FRD:_:V.:::.J --')-... ----,

Figura 8. Esquemade un terminaJ

224

Page 230: Untitled 1

8. Gama Alta - PIC18

Cada puerto de E/S tiene asociado 3 registros:• Registro TRIS: mediante este registro se configuran cada una de las lineas de

E/S del puerto como ENTRADA (bit correspondiente a '1') 0 como SALLDA(bit correspondiente a '0').

• Rcgistro PORT: mediante este registro se puede leer el nivel de pin de E/S yse puede establecer cl valor dellflfelt de salida.

• Registro LAT: mediante este registro se puede leer 0 establecer el valor dellatch de salida.

TEMPomZADOR 1:• Configurable como temporlzador/contador de 16 bits.• Dispone de un oscilador propio que puede funcionar como:

• Sefial de reloj del temporizador 1.• Serial de relo] del PIC en mod os de bajo consume.

• Pre-escalar de 3 bits programable.• lnterrupcion por desbordamiento.

8.2.12.2 Temporizadores

TEMPORlZADOR 0:• Configurable como temporizador/contador de 8 bits/16 bits.• Pre-escalar de 8 bits programable.• lnlerrupcion por desbordamiento,

TEMPORlZADOR 2:• Temporizador de 8 bits (registro TMR2).• Registro de periodo P(Z2.• Pre-escalar de 2 bits programable (1:1, 1:4, 1:16).• Post-escalar de 4 bits (J:1. .. l:16).• Interrupcion por igualdad entre TMR2 y PR2.• Se puede utilizar junto con los modules CCP y £CCp,• Se puede utilizar como selia I de reloj del modulo MSSP en modo SPI.

TEMPORIZADOR 3:• Con figurable como temporizador/contador de 16 bits.• Dispone de varias opciones de sefial de reloj en el modo temporizador:

• Oscilador principal con 0 sin pre-escalar.• Oscilador del temporizador 1 con 0 sin pre-escalar,

225

Page 231: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

• Pre-escalar de 3 bits program able.• lnterrupdon por desbordarniento,

h... (filet,I:" Nolused g.".,u.,.,

ITT a", Irte""" rs •2...e>4_Uo_h 4",

18m. a",3Sm. "'_"-Io_1 1S ...nm. F,~I- 32",144 ... 64U1

lZ8",298 ... Ov",flow Il"", 25.6 ...57&"" 512 "'1152"" LA1..:_ll!f

~ ... A'c:c_8_B~

lan, ' i.::tCI ....

O,.abIed A"""""," Ow:rllow ~Embled OvedllMPOIlOIf

Intemol .2"" 13.1"" l'i=iutQn .0 ,- ·2",E_ 4... <62"" 214But 52.' "" 8ill

11"1.",,,,,_I G", 164m. r.; ·2w,32", 1 r·

r'Lli Tw._.

Figura 9. WDT Y TMRO,TMR' YTMRZ

r~3

Ol$abledl...temaiEl<lernaiEl.1ef1lalSsone

2", 131ms

4\1$ 262nu

8u, S2Am:

16u: 104m.

r,equeney 5 OOQ 000

Figura 10. TMR3

8.2.12.3 Convertidor Analogico-Digital• 10 bits de resolucion,• 13 canales multiplexados.

226

Page 232: Untitled 1

8. Gama Alta - PIC18

• Sefial de reloj de conversion con£igurable.• Tiernpo de adquisicion program able (Oa 20 TAD).• Posibilidad de establecer el fango de tensionesde conversion mediante ten­

siones de referencia externas .

•n'llOII'''IfJ'.',,,,,,'rlgP'r,

NoneADAl A2A3AljEO E1£28283818480

, ADA' A2A3A5EOE.lE2828381 B~AOA1.6.2A3A5EOCI £2929381ADAl A2A3A\\EOEl £28293

, AOA1A2A3A5EOEl E2B2AOA1A2A3A5 EO£l E2ADA' A2A3A5 EO EIADA' A2A3A5EOADAl p.2A3A5ACiAl A2A3AOA1A2AOA'AD

'i"1l'"11 . .,~

U""~ ()'11l23 .,if:[

OOi:k 4~, ..;,"

Ac~$ioon line 1 2ua y

:i~:

::1:b'

Figura 1,. Modulo AD

8.2.12.4 Canal de Comunlcaclon Serle (EUSARTJCaracterlsticas fundarnentales:

• Modos de trabajo:• Modo asincrono de 8 bits.• Modo asmcrono de 9 bits.• Modo sincrono Mnestro.• Modo sincrono Escitwo.

• Auto-activacion por detecci6n de dato recibido.• Deteccion automatica de velocidad de comunicaci6n (bnNdrnte),• Transrnision y deteeei6n de caracter de BREAK (bus UN).

RS232tl1

S~ltd 9600 1re~brl_wcl]1.-1

JFIo.lI_~lEllor;

10RGHI(l(

Olr. a y

Roo".., C7Figura 12.Comunlcacl6n Serle

227

Page 233: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

8.2.12.5 Modulo Master SSP(MSSPJEl modulo MSSP es un interfaz serie capaz de cornunicarse con perifericos u otromicrocontrolador. Puede operar en dos modos:

• Serial Peripheral Interface (SPl).

• III ter-ln regratedCircuit (J20.La interfaz 12C admite los siguientes mod os:

• Master mode.• Multi-Master mode.• Slave mode ..flll

HOIdw",.SPl~l

Mo,t., i:.S18..

l!0" ~

• et.P.o C~(.()

CKP,OCk.E.l

CI\P.'CHoOCKP.' CX[.,•DIVtda by. •DIVIde by IS ., U1.. 12': .... "1• • F~tDIVtda by 64

C' • Sb•• s....UreT_2 SO"

SCL C3 LJR_"_""F~' ...

S~mpl. 01End

,',.,";""-~:':'-'---~

Figura 13. Modo SPI Figura 14. Modo 12C

8.2.12.6 Modulo de Compraclon/Captura/PWM ,CCP)Dispone de tres modos de funcionarniento:

• Modo de Captura: so utiliza para rnedir eventos externos como la duracion depuJsos digitales.

• Modo de Comparaci6n: se utiliza para generar sefiales digitales con ternpori­zaciones program abies. Este tipo de sefiales son muy utiles para el control deetapas de potencia (convertidores DCIDC, DC/AC, AC/DC, AC/DC).

• Modo PWM: se utiliza para generar senates de modulacion de ancho de pulso(PWM).

Tarnbien existe un modulo de comparacion/capturalPWM mejorado (ECCP).

228

Page 234: Untitled 1

8. Gama Alta - PIC18

Dispone de cuatro modes de funcionamiento:

• Modo de Captura: se utiliza para rnedir eventos extemos como la dnracion depuls os digi tales.

• Modo de Comparaci6n: se utiliza para generar sefiales digitales con tempori­zaciones programables. Este tipo de seiiales son muy utiles para el control deetapas depotenda (convertidores DCIDC, DCIAC, ACIDC, ACIDC).

• Modo PWM: se utiliza para generar sefiales de modulacion de ancho de pulso(PWM).

• Modo PWM mejorado: se utiliza para generar sefiales PWM complementa­rias para el control de semipuentes de transistores,

CCPX•.;p ,e'" '9Hod..

Of!capMeCompateF'WM

Pulse V(,dlh Modulator O!.ilpIA I)(l

,.....I"'p )-c:jI Jg

Oul' II Dr~"FuII8ndgeFull Bridge revereeHeUBridge

PltItA endCShuldownSl~eDrIVepint A "nd C to '0' ,

Pir~B and0 ShutdownStaleDrive Pins B ar>d 0 10'0'

FIgura '5. Modulos CCPYECCP

C1plKln• 5000.000 Khz. Out)i=O1041250.000Khz DUll""O 104312.51)0 Khz. Duty=O fa 4

OlfC"."palato! 1 OIApul

i:omparl!iof 2 oufWEilhet Compar~orAEOABO orCotIlparotlJllABO01Comp.oraior 2ABOor Ellner Co~ah:>!

NOTA

El modulo ECCP no firnciona correctamente en Ja Ultima version del Proteus.Es de esperar que LabCenter Lo solueione en breve.

229

Page 235: Untitled 1

Compilador C CCS V Simulador PROTEUS para Microcontroladores PIC

8.2.12.7 Modulo ComparadorEl modulo de comparadores analogicos contiene dos comparadores que pueden serconfigurados de distintas formas. Las entradas pueden seleccionarse entre las entradasanalogicas de los pins RAO a RAS. Las salidas digitales (normal 0 invertida) son aceesi­bles exteriormente y pueden ser leidas a traves de un registro de control

r~;;I"f

GndVOGoo 1....1

Gnd t>o I~

Gnd

Figura 16.Modulo Comparador

8.2.12.8 Modulo de referenciaEI modulo de referenda esta Iormado por una red de resistencias y pennite selec­cionar una tension de referenda.

teOft 2.81 1.04

~I'1.25 2.97 1.25

111.41 3.13 . 1.461.56 3.28 1.S7172 3.44 _ 1.00

tt100 ,- 3.59 2.082.03 UOO 2.292.19 021 2.502.34 0.42 2.712.50 0.63 2.922.66 0.83 - 313

OVrer ..>F5 :::JComp -} Vrel ~IFigura 17. Referencia

8.2.12.9 Modulo detector de Alto/Bajo VoltajeEste modulo program able permite, a1usuario, definir un punto umbra! de tensiony 1adireccion de cambio. Si el dispositive experimenta un cambio en la tension yen1adirecci6n indicada sobre elpunto umbral se produce una inrerrupcion.

230

Page 236: Untitled 1

8. Gama Alta - PIC18

II I(

Figura 18. HLVDYLVD

Ejemplo 1:Diseiiar '111 Reloj en Tiempo Real (RTC) utilizando la interrupcion del TMRIcon oscilador exterior; urilizar para la visualizacion WJ display de 7 segmenfos (figura 19).Catnponentes ISIS: PlC18F4520, RES, 7SEG-BCD !J Generador ISlS: Pulse.

Figura 19. EJemplo I

EI Proteus tiene un components 7SEC-BCD que es un display 7 de segmentos con eldecodificador 7 SEC-BCD integrado, 10 que facilita la simulacion.

EJempleo del TIMERl con osciJador exterior permite trabajar a dicho TIMERl in­duso cuando el PIC esta en modo sleep. EI Proteus no simula el oscilador extemodel TMR1 con crista! de cuarzo (figura 20), por 10 que hay que sustituirlo pOT un

231

Page 237: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

generador de pulsos con la frecuencia adecuada e inrroducirlo por el pin RCO/TlO­SO (figura 21). Al editar las caracterlsticas del generador de pulso hay que cambiarel Pulse (High) uoltn]: a 5 V Y La[I'eqlle7lcy a 32.768 Hz.

Para conseguir una interrupcion cada 1 seg con dicha frecuencia hace falta precar­gal' el TMRl a Ox8000segun los calculos de la siguiente ecuaci6n.

Figura 20.TMRI con oscllador de cuarzo externo

U2(RCOI rlOSOITI 3CKII

Figura 21. TMRt con oscllador externo slmuhdo con un generador

"'_ PI" 11n~rl«:J1• ~~I'"r"'h'"~=l","",

fitAu<!£I'Po"~'" ",*"'Wdtli1Ulj

<r'M • PIAt''''odoi,f'II '50r,?,,,,,,,,,>I"""IS,,,,S<Qotdo- •"_IH'~;"'110"''' ~I~~dCIo.,PtfIM~ i.1)<;lwG,«,j>,

c........s""".?l··",.eelor.(!j...... Ed.. ?

~Ii.jol'l_'..?

Figura 22. Caracterfstlcas de. generador Pulse

232

Page 238: Untitled 1

I.II-._-PIC1I

La interrupci6n del TMR1 debera ser de alta priondad. los datos en ......,~''"''gundos, minutes y horas) se deben paS"'f a dol' digitos en BCD.

NOTA

Sc han utilizado los puertosA, By D (ya que el C es necesario parael oscilador). Enel puerto A de los PICl8, la patilla RA4 ya NO es un Drenadot Abierfo pero el PRO­rEUS sigue tratandola como tal, por 10que haec falta una resistenda de pull-III' ala salida. En realidad esto no seria necesario. Por otra parte, 13 sirnuladon no es cntiempo real par 10 que J c;egundo de simuladon puede tardar varios segundos deprocesador del ordenador: se puede comprobar la reladon en la bema inferior delProteus donde nos indica el tiernpo de procesado (figura 23).

FIgura 23. Tlempo de procesado

tlnclude ,18F4520.h>

#devic~ high_ints·true /IPara manejar inter~upciones de alta prioridad#IH.'e delay (clock-l0000000)int:hores O,minl.lcos..O,segutldos-O;int LSdigito, MSd~9ito,BCD;#IN'l'_2'IMERl high /lIncerrupci6n de alta pr1.oridad del TMRlVOJD J.nt_tmt·l (void)

I//Cuenta los segundossegundost.;

1f (segundos~-60J

(m.inutos+; //Cuenca los l7I.inutos

233

Page 239: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

segundos"O;Jif (mlnutos....60)

(horas++;minutos~O;J

if (horas-~24) horBs~O;set_timerl(OX8000);

void BINaBCD(inc valor)(MSdigito-O;if (valor>-10)(

dolvalor-valor-IO;MSdigiro++;

!while (valor>~lO);

J.,Sdiglto-valor;MSdigito-Msdigito«4:

BCD-MSdigito I LSdigito;

void main ()(

IICuenta las boras

IIPrecarga el TNMRI anres de salir

IIFuneion de conversion de Binario a BCD

IIUnidades en BCDIIOeeenas en BCD (se desplazan a la parCeIlaHa del int)IIOR entre los dos numeros para obcener unIlentero que se pueda sacar directamente porIlel puerto

secup_adc_porrs (NO_ANALOGSIVSS_VDD);setup_wdt(WOT_OFF);setup_timel._l(Tl_EXTERNALITl_DTV_BY_lJ; IITMRI con oscilador externo

Ilmodo asincrono y prescaler-lsetup_comparator(NC_NC_NC_NC);setup_vref(FALSE):serup_oscillator(False) ;enable_interrupes(INT_TIMERl);enable_incerrupeS(GLOBAL);set_Cimerl(OX8000); IITMRl-6SS36-(1ITOSCl)~65536-32768~32768-0x8000whlle(rrue)

BINaBCD(segundos); IICom-ieree los segundos de binario a BCD_.OUTPUT_D(BCD); IIIos sees por el puerto D.BINaBCD(minutos);OUTPUT_B (BCD);BINa8CD (nore»);OUTPUT_A(BCD) ;)

234

Figura 24. Programa del Ejemplo t

Page 240: Untitled 1

8. 6ama Alta - PIC18

Es necesario deshabilitar el watchdog en el PIC (figura 25).

PCBP..,J..Prog... r..I'rocottoI ClockF,_M._"'__

• N.

r_,_s......."",fi,th. "om PCII~.....EdII"PlOIJI'II ....... '"

Figura 25. Deshabllltacion de. Watchdog

Ejemplo 2: Elcuador de tellsion (llO/tajr-boostconterter) COil realimenmcion de control (6-gura 26). Compouentes [SIS: PIC18F4520, RES, [RF130, TNDUCTOR, 108Q015 Y CAP.

Figura 26. E'evador de tension

NOTA

En PROTeUS, el m6dulo comparador en el modelo del PICIS no funciona co­rrectamente en la simulacion, asi tambien el modulo ECCP tiene algunos pro­blemas. Esperemos que LabCenter 10solucione en breve.

235

Page 241: Untitled 1

Compllador C CCS y Simulador PROTEUSpara Microcontroladores PIC

Se configura el modulo ecp para trabajar en modo PWM y el comparador paraque compare la sefial de salida (dividida por un coeficiente) y la tensi6n de refe­rencia interna (en este caso se fija a 3.59 V aunque se puede modificar su valor porprogramaci6n). En cl programa se modifica el modulo de referenda con 101 funcionsetup_vrefO, pero el cornparador se modifica directamente en su registro CMCONya que con la funcion serup_comparatorO existe un incorrecta asignacion de valo­res en el fichero <18F4520.h>.

El modulo de referenda se configura para obtener un valor de 3.59 V mediante laprogramaci6n del registro CVRCON=ObllOOll11 0 en compilador C de CCS: se­tup _vref(VREF ..H1GH 115IVREF_FS).

El modulo comparador se configura para introdueir la serial externa por RAO yutillzar 101 referenda interna (figura 27) mediante la programaci6n del registroCMCON= ObOOOOOllO,en C deberla ser setup_comparator(AO_ VR_Al_ VR) perose ha detectado un error en la asignaci6n #define del fichero de cabecera (se puedemodificar 0 utilizer directamente cJ valor de CMCON). La frecuencia de la sefialPWM se ha fijado en 4 KHz.

C20UT

A CM2. CMO- 110

RAO •CIS:rr'~__RA3~~ ClOUT

VREF

Figura 27. Modo del comparador

EIsistema funciona en un equilibrio dlnamico, mientras la tension de salida (divi­dida) sea rnenor que la VRlf la serial PWM acnia, si es mayor la senal PWM es O.Deesta forma se consigue una tension continua en la salida del convertidor. De estaforma se consigue una V"Il,=20± 0.27 V.

Es importante inicializar la salida (con un label IC=S sobre el cable) para evitarerrores de convergencia en la simuJaci6n.

lIinclude <18f4520.h>Iffuses X2', NOWDT#use delay(clock-4000000)(byte CMCON-OxF84IIbyteTRISA-OxF92

236

Page 242: Untitled 1

8. Gama Alta _ PIC18

void main () (

.int16 dl,Jtcy;TRISA- Obll1010ll;CMCON- ObOOOOOllO;setup_vl·ef IVRIU HIGHI151 VREF_FS);

setup_ cimel,_2 (T2_DIV_BY_ 4,62,1) ;secup_ccpl (CCP_PWM);

set_pwml_ducy (714);

//setup_comparator(AO_t~_AI_VR);

//CVRCON=Obl1001111;

/14 KHz//CCPl en modo PWN

while (1) (

IP(CIOUTJ dutty-714/

.,1".. dot ty"'O;set_pwml_dl,Jey (duety) ;)

//S~ VoutlCoef < I'REF1151 VOIJt/Co@f > VREF'

FIgura 28.Programa del ejemplo 2

Si se quiere utilizar una VREf distinta a la interna para ajustar mas finamente la ten­sion de salida, se puede utilizar el m6dulo comparador segun la figura 29, introdu­ciendo la sefial por MD y una referenda extema por RA3.

CM2..CMO = 100

C20UT

Figura 29. Modo del Comparador

FIgura 30. Clrculto con referenda eJrterna

237

Page 243: Untitled 1

Compllador C CCS y Simulador PROTEUSpara Microcontroladores PIC

linclude <18f4520.h>Ifuses X-,NOWDTiuse delay(clock-4000000)Ibyte CMCON-OxFB4Nbyte TRISA-OxF92void main () (inc16 dutty;

TRISA- OblllOlOll;CMCON- ObOOOOOlOO;

setup_tlmer_2(T2_DIV_BY_4,62,1);

setup_ccpl(CCP_PWM);sec_pwml_duty (714);

while(l) (IF(CIOUT) dutty-714,'else ducty-O;

set_pwml_duty(ducty) ;

J

Figura J 1. Programa para referenda edema

238

Page 244: Untitled 1

9. Real Time Operating System - RTDS----------------------------------------------

Capitulo 9

RTOS - Real TimeOperating System

9.1 Introduce;onEl Sistema Operatioo en Tiempo Real simplifica el desarrollo de una aplicacion y,mediante e1 uso de tareas, reduce los errores de programacion. En general, se pue­de definir un RTOS como un program a que trabaja en segundo plano, controla laejecucion de varias tareas y facilita Lacomunicaci6n entre el1as.En el caso de que seeste ejecutando mas de una tarea al mismo tiempo, el sistema se denomina multi­tarea; cada tarea tiene asignado un tiempo de procesador.

El RTOS no es exactamente UJl SO (sistema operative) a pesar de que los dos sebasan en un nucleo (kernel) que se encarga de controlar la de ejecucion de las tareas,La diferencia estriba en la carga inicial, si es solo el nucleo (RTOS) 0 si ademas secargan otros procesos (SO). El RTOS esta pensado para trabajar con los micro con­troladores. Puede utilizarse en los PIC de gama media pero donde mayor rendi­miento se obtiene es en los PIC de gama alta.

E1RTOS que utiliza CCS permite eJ PIC ejecute regularmente las tareas program a­das sin necesidad de interrupciones. Este se logra a traves de la funcion RTOS_RUNO que actua como planificador de tareas (dispatcher).La funcion del planifica­dor consiste en dar el control del procesador ala tarea que debe ejecutarse en unmemento dado.

Cuando la tarea ha terminado de ejecutarse 0 ya no necesita del procesador, elcontrol de dicho procesador es devuelto al planificador el cual dara el control delprocesador a la siguJente tarea que este Iista para ejecutarse en ese momento. Esteproceso se conoce como cooperative multitarea (cooperativemulti-tnsking)

Un buen ejemplo de la optimizacion del uso del PIC con el RTOS es el PiD utilizadoen el tema sobre el modulo CCP para regular la temperatura de un homo (ejemplo

239

Page 245: Untitled 1

Compilador C CCS y Simulador PROTEUS para MicrocontroladDres PIC

5). Estudiando el program a realizado en esa ocasi6n se observa como el PIC estatotalmente ocupado en realizar el proceso Pill; si se necesitase utilizar dicho mi­crocontrolador para realizar mas funciones se deberia realizar una programaci6nbastante compleja, intentando siempre respetar el tiempo de muestreo del PID.

Utilizando elRIOS en dicho ejemplo, no solo se simplifica el programa sino queadernas se consigue rnejorar la respuesta en el sistema ya que se optimizan los re­cursos del micro.

De 105dos casos estudiados (tiempos de muestreo de 100ms y 1 ms), en e1primercaso se reduce el sobreimpulso y las oscilaciones y en el segundo caso se alcanzaantes la temperatura fijada (Figura 1).

Pero ademas, la utilizacion de RTOS va ha permitir afiadir facilmente mas tareas a1PIC como veremos en los proximos ejemplos.

~:' =:-:-:=--=J-=-..=-c=-c=~:.=-:.=-_=--r~=-=-=-=.j.F--'-::..:-::..:-=-=r=-=-1I f-: :::_:;-I~~;:=~==ft-I-"-~--~-fl-1t-~---_-_-_-.1;-1 --'Ij;

:-I--_-t~..-+---+-r_-'-~-~f----j--t-..:.:.---+---:I;I-~-:.---r-y~-J-I+-J~I=r="Tl'~~/~~~--~·~~TO~S~~----~~II.~~/I_==±~_·7-_c~omn~kr~~~~rf_,_~I• ~IOA~ .... 1 - I ms~~~ __,___ Wum" '+-~-T--r--~~----T-~roI-I--+--I--t----I--t---+--;I··-' + - t- j- - ..--+-----1--I:~___+---l----+--~-~f__I[:~I..- 1 1-: .. --.,..,.. .L-.--:-.l.....,.. .} •.- _.... • ..- .•~ ..~-

Figura 1. Respuesta del PID con y sin programacion RTOS

9.2 RYOS en CLas funciones que incorpora CCS para 1agestion del RTOS son las que aparecen en1asiguiente tabla:

240

Page 246: Untitled 1

9. Real Time Operating System _ RTOS

rtos_runO lnicia la operaei6n del RTOS. Todas las iareas sc ejecutan

r--- -- a traves de esta funcion.rtos_ terrninateO Finalize In operaci6n del RTOS y dcvuclve el control al

program a principal. a la linea siguicnte de la funcionrtos runt), E!> como una funcion RETURN.

I·tos_cnablc(task) Habilita una de las tareas RTOS. Una \CZ la tarca oshabilitada, In funcion rlos_run() llamara a esta tareacuando Ie toque por tiempo. EI parametro de esta funciones 01 nornbre de la tarea.- Deshabilita una de las tareas RTOS. Una vez la tarea esrtos _disnblc(task)dcshabilitada. In funci6n rtos runt] no llamara a esta tareahasta que vuclva a scr habilitada medianrc la funcionrtos _mab/eO.EI parametro de esta funcion es el nombre(.II! la tarea.

rtos_msg_poIlO Devuelve un TRUE si hay un dato en la cola de mensajesde tareas.

rtos_msg_rcadO Devuelve el siguientc byte del dato contenido en la cola demensajes de iareas.

I'toS_Rlsg_lIend(task,byte) Envla un byte de datos para una tares concrete. EI daio cssituado en la cola de mcns~s j~ tareas,

rtos__yieldO Sc llama desde una de las tareas y devuelve el control delprograrna a la funei6n rtosjunt), Todas las tareas dcben

~s sigllal(scrn)tenor una lIamada a esta funcion al final de su c6digo.Incrementa un SEMAFORO que se utiliza para difundir la

r-rtos_wait(scm)disponibilidad de un recurso lirmtado. ---Espera a que el rceurso asociado con el semaforo estedisponible y entonces decrementa el scmaforo para

~!I_await(exprc) - reclarnar el recurso.Lspera a que la EXPRESION sea TRUE antes de permitir

- que la tarea continue.rtos_overrun(tnsk) Rctorna un TRUE si la tarca ha sobrepasado el ticmpo

permitido de ejecuci6n. ---rtos _stafs(task,stat) Retorna una EST ADISTICA de una tarea concrcta. Lacstadistica incluye cl tiempo minimo y maximo deejecuci6n de la tarea y el tiempo total que la tarea hasobrepasado su eiccucion.

Las directives asociadas son dos:

#use rtos (options)Las options pueden ser las siguientes (separadas pOl'comas):timer=X: donde X (0 a 4) indica el TIMER que se utilizara para la ejecucion delas tareas. EI TIMER seleccionado debe utilizarse para el RTOS.minor_cycle=time: donde TIME es un numero seguido de 5,ms, ps 0 ns, Indi­ca el tiempo que debera tardar en ejecutarse una tarea, Los riempos de ejecu-

241

Page 247: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

cion de cada tarea deben ser multiples de esta cantidad. Si no se especifica, elcornpilador se encargara de calcularlo.statistics: indica el tiempo minimo, maximo y el total utilizado por cada tarea.

#task (options): Esta directiva indica al compilador que la funcion que Ie 51-gue es una tarea de RTOS.Las options pueden ser las siguientes (separadas por comas):rate=time: donde TIME es un numero seguido de 5, ms, ps, 0 ns. Especifica1a frecuencia con se ejecutara la tarea. Debe ser igual 0 multiple del valor mi­nor_cycle.

max=time: donde TIME es un numero seguido de s, ms, /-lS,0 ns. Especificael tiempo de ejecucion de la tarea. Este tiempo debe ser menor 0 iguaJ que elvalor millar_cycle. EI compilador no puede hacer cumplir este tiempo por 10que el programador debe tener cuidado en asignar el tiempo de ejecuci6n.Ademas, este tiempo activa la funcion rfos_overnm(fask).

queue=bytes: especifica cuantos bytes son colocados en la cola de mensajes.El valor por defecto es O.

Como primer ejemplo se puede utillzar el controlador PID (ejemplo 5) del lemasobre el m6dulo CCP.Comparando el programa escrito en aqueUa ocaston y el quese presenta ehora con RTOS (figura 2), se observa que el bloque del PID que estabaen el programa principal es ahora una tarea. EI tiempo de mueslreo estaba especi­ficado con un delaY_lIIs() y ahora se utiliza el tiempo de ejecuci6n de la tarea comotiempo de muestreo. Tal como se ha comentado en el punto anterior, se ha obtenidouna rnejora en el funcionamiento del sistema (Figura I).

#INCLUDE <16F877.h>[device adc-l0fuse delay(clock-4000000)Ifuses XT,NOWDTIByee TRISC - Ox87

luse rtos(timer=O,minor_cycle:lms) IIDirectiva del RTOS

int16 valor;int16 control;tloet: a-0.1243;floacb=O.00006;Iloet: c·62.1514;floattemp_11mit-5DO.O;floatrT,eT,pT,qT,yT,uT;floatpT_l-O. 0;float eT_l-O. 0;

Illectura de temperaturaIlvalor del PWM

Ilconstances del prD para lOOms

Ilcpmperacura a alcanzarIlvariables de ecuaciones

242

Page 248: Untitled 1

9. Real Time Operating System _ RTOS

floatmax=lOOO.O;floatmin-O.O;

//limites maximo y minimo de control

Ntask(rate-lms, max#lmsjvoid pid ( );

I/Indica que la siguiente funcion es una TareaIlque se ejecutara cada lOOms.

void ma~n() (TRISC-O;setup_timer_2(t2_div_by_4,249,1);setup ccpl (ccp_pwm);setup_~dc_portsrall_analoq);$etLlp_adc(JlDC_CLOCK_INTERNAL) ;

set_sdc_channclrO);

//Periodo de la se~al PWM a 1msI/Modulo CCP a modo PWMI/Puerto A analcgico//reloj eonvertidor AD interneI/Lectura por e1 canal 0

rtos_run ( ); I/Inicia la operaclon de RTOS

voi.d pJ.d ( //Tare8 PID

output_bi r ( PIN_CO, 0);

valor=read adell;yT-vDlorYSOOO.O/1024.0;rTatemp_limlt;eT-rT-y'1';pT-o"lreT+pT_l,-q2'-c· (6T-eT_1);uT=pT+a'eT+qT;if (u'Z'>fflax) {

uT-max; Ielse (

sr (uT<min)IuT=min;}

control-uT;set_pwml_duty(control};pT_I-pT;eT_lreT;

Figura 2. Programa del PIOcon RTOS

En el ejernplo se puedc afiadir una tarea que permita visualizar en un display LCDla temperatura que tiene en homo (figura 3). AI rnanejar varias tareas es convenien­te utilizar la funci6n rtos_yieldO para devolver el control aJ planificador de tareas

243

Page 249: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

y coord ina I" las tareas mediante las funciones rtos_waitO y rtos_signaJO; para utili­zar estas dos funciones se debe utilizer un "sernaforo", el cual permite a una tareautilizar til, recurso compartido 0 esperar en eJ casu de que este en uso.

!IIl.e --~••.211'----::r-"---,1--+---+---I

~ .e /v

I T"""'" 35.64 I~~~~t~ 85Sa~SgQ

~tJ ," [+I+Iffrr-

~BAr'L1. I;

Figura 3. Dos tareas: PIDy DISPLAY

En este ejemplo no se utlliza ningun recurso compartido, pOl' 10que no se utilizanlas Iunciones rtos_waitO y rtos_signaIO.

UNCLUDE <l6F877.h>#device adc-10#use delay(clock-4000000)#fuses .'(2',NOWDT#include <lcd.c>duse x cos (t i filei=0 , mi;I)or_ cycle-lms)Myte TRISC - Ox87Jnc16 ve Lor, cont.rol;float 0-0.1243/

floa t b=t), 00006/

244

Page 250: Untitled 1

float c-62.1S14;float temp_llmit-SOO.O;itoat: rT,oT,pT, qT,yT, UTillost pT_l-O.O;floltt (':7_1-0. 0;ilo~t m~x-lOOO.OIfloat min-O.O;floattempera;

tCaSk(rate-lmo,maxElms)void pid ( ),.

voui dl:oplay( );

vai d nIlI i n (I (Ic::d j nlt ();TRISC-O;seWp_ciml'1l_2It2_dl v_by_ 4,249,l),.SElt·UP. cCl'l (ccp p ••'m);

sotup_udc_ports(all_dnalogl;

.... tup_itdc (ADC'_CU)(,K_INTERNALJ ,.

set_3dc channel (0);

n:os_run ( );

void p.1d ( I{

valor-read_adc(l;yT"valol ·SOOO.0/1024.0;rT-cemp_llml tl

eT-rT-yT;pT-b*eT+pT_J;

qT-c' ter-er 1);uT=pT+-a'eT+qT;~[' (u2'>max)

uT-max; Ielse (

if (uT<minl(

uT-mll1; J

cont.roi=ur,

9. Real Time Operating System _ RTOS

//Tarea ael PID

I/Tdred d~l DISPLAY

//Tarea del PID

245

Page 251: Untitled 1

Compilador C CCS y Simulador PROTEUS para MicrocontroladDres PIC

set_Plvml_duty (control);pT_l=pT;eT_l=eT;

rtos_yie1d ();)

liSe devuelve e1 c~ntrol al planiilcador

void display () IITarea del DISPLAY

1 cd_ gotoxy (1,1) ;tempera=yTIIO;prin tf (lcd_putc, "Temp=%F", tempera) ;

rtos_yie1d() ; liSe devuelve e1 control al p1aniticador

FIgura 4. el programa

Las variables se pueden definir de forma global a particular como en cualquierfuncion, En el caso de variables globales, todas las tareas pueden utilizarlas, percen el caso de funciones particulates se pueden utilizar Jas funciones de correo:rtos_msg_pollO, rtos_msg_readO y rtos jnsgsendltask.byte) para transferir in­formacion. En el ejemplo anterior la variable utilizada es global, por 10 que puedeser utilizada por las dos tareas, pero en el caso de ser local se podrian ulilizar lasfunciones de correo (aunque la variable sea global tambien se pueden utilizar).En el caso de variables glob ales puede ser interesante el usa de estas funciones enaquellos cases en los que una de las tareas este esperando que la variable modifi­que su valor a traves de otra tarea.

Para utilizar estas funciones en el ejemplo se modifica la llamada a la tarea DiS­PLAY Yse anade una variable para el correo (figura 5).

INT16 valor_l;

#task(rate=lOms,max=lms,queue=2)void display! );

IIC01a de 2 bytes.

Figura 5. Modificaciones del programa II,

Se realiza el envio de la variable valor desde la tarea PID y se recibe en la tareaDISPLAY para su posterior uso (figura 6). El resultado es similar al del ejemploanterior.

void pid ( )

valor=read_adc();yT=valor*5000.011024.0;

rT=temp_limit;

246

Page 252: Untitled 1

9. Real Time Operating System _ RTOS

rtos_msg_send(display,valor);rtos_yield();

IIEl resto de codigo como siempreIIEnvia los 2 bytes de valor a DISPLAY

void display t )

valor l~rtos msg_read(); IIRecibe los 2 bytes de Valor

tempera-valor_l·Soo.011024. 0;lcd_gotoxyll,l);printf(lcd_putc, "Temp= 'l.F", tempera);

rtos_yield ();

Figura 6. Modiflcaciones del programa (If)

Para term inar con este ejemplo se ha aiiadido una tercera tarea que permita modi­ficar Ja temperatura limite en cualquier momenta mediante un boron en la patillaREO. Para esta tercera opcion se ha cambiado a un PIC18F4520. Como ya se hacomentado, el RTOS adquiere toda su eficiencia enlos PIC de gama alta (Iigura 7).

Figura 7. Tres tareas: PID, DISPLAY Y TECLA

247

Page 253: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

Dado que en este caso se modifica una variable en dos de las tareas es convenienteutilizar las fundones rtos_wait() y rtos_signalO (£i.gura8).

#INCLUDE <18F4520.h>#device adc=10luse delay(clock=4000000)IIfusesXT,NOWD'I'linclude <lcd.e>luse rtos(timer=O,minor_oycle=lms)luse standard_io(B)juse standard_io(e)#deEne BO PIN_BO

int16 valor;int16 control;floata=0.1243;floatb=O.00006:floatc=62.1514;float temp_limit=50D.0;floatr'I',eT,pT,qT,yT,u'I';

//lectura de temperatura//valor del PWM

//constantes del PID//temperatura a alcanzar

uos t pT_l=O.0:110at eT_l=O.O;floatmax=1000.0;floatmin=O.O;float tempera;int16 t_l;ine8 sem;

//variables de ecuaciones

//1imites maximo y minimo de eoncrol.//Para visualizar 1a temperatura del horno./ /Para visualizar la tempera tura limite.//Variable de semaforo.

#task(rate=ims,max=lms)void pid ( );

Itask(rate=lOms,max=lms,gueue=2)void display( );

#task(rate=10ms,max=lms)void teclado ( );

void maine) I

lcd_inic ();

248

Page 254: Untitled 1

9. Real Time Operating System _ RTOS

setup_timer_2(t2_div_by_4,249,lJ; Iperiodo de 1a senal Pffl~almssetup_ccpl (ccp_pwm); I Modulo CCP a modo Pf-lM

249

ser.up_adc_ports(all_ana1og); //Puerto A ana16gicosetup_adC(ADC_~LOC~lNTERNALJ; //reloj converc~dor AD incerno

set_adc_channel (0) ;

sem..l;rtos_run ( );

void pid ( )(

;rtos_l~<Jjt (sem);

valor-read_adc();yT~valor·5000.0/1024.0;

rT-temp limit;

//Lectura d~ la temperatura/ /convers ion a mV (0. 25V a 250mV)

eT-rT-yT;pT"V'eT+pT_l;

qT"c' (eT-eT_1),.uT-pT+a 'eT+ql';

//Calculo error//CJlculo del termino integral//C61culo del termino derivativo,//Calculo de 1a salida PID

if (uT>mllx)

uT~max;,

else Iif (uT<min){

ur-min; }

//S811da prD s1 es mayor que e1 MAX

//Salida prD si es menor que e1 MIN

control-uT,. //Transferenc2a de salida prD 8 se~al PWMset_pwml duty(control);

pT_l-pT;eT_1-eT;

/ /cueraer vanables

rros_signal(sem);rtos_yleld();

void display()

reos_wait;tsem) ;

Page 255: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

tempe==yT/IO;lcd_gotoxy(l,l);printf(lcd_putc, «Temp=%F\n», tempera);t_l=temp_limitllO;printE(lco_putc, "Limite= %£u", t_l);

rtos_signal(sem);

rtos_yield();

void teclado I)

reos_ wa~t tsem);if (input(PIN_C4)==O)temp_limit=t~o_limit+lO.O;

if (temp_limit > 1000.0) temp_limic=500.0;

rtos_signal(sem);rtos_yield() ,-J

Figura S. Programa con PIC! SF4520

250•

Page 256: Untitled 1

10. USB - Universal Serial Bus

Capitulo 10

USB - Universal Serial BusNOTA DEL AUTOR

Cuando este libro estaba practicamente en imprenta, LabCenter .realizo unaactualizacion de la version 7 con unnuevo (y esperado) modelo: e] USB (USB­CONN).CCS C ya proponia ejemplos y suministraba librerias para utilizar USBque no se podlan simular en ISIS.Con este nuevo modele se puede abandonerya 1asimulacion por puerto serie RS-232 (la mayoria de los PC ya no disponende este puerto) y afrontar el USB.Al estar el Iibro en imprenta, solo he podidomcluir algo de teoria basica de USByalgun ejemplo sencillo sobre emulacionRS-232 can USB;espero que si hay mas ediciones de este libro pueda completary aumentar este capitulo.

10.1 Introduccio"E1Bus Serie Universal fue creado en los aries 90 por una asociacion de empresas conla idea, entre otras, de mejorar las tecnicas plug-and-p7ay, es decir, permitir a los dis­positives conectarse y desconectarse sin necesidad de reiniciacion, configurandoseautomaticamente al ser conectados; ademas se le doto de transmision de energiaelectrica para los dispositivos conectados.

Este bus tiene una estructura de arbol y se pueden it conectado dispositivos encadena, pudiendose conectar hasta 127 dispositivos permitiendo Ia transferenciasincrona y asincrona.

Se puede clasificar segun su velocidad de transferencia de datos (desde kilobitsbasta megabits): Baja Velocidad (1.0) utilizado para los Dispositivos de Inter.fazHumana (HID) como ratones, etc., Velocidad Completa (1.1) y Alta Velocidad (2.0)para conexiones a Internet, etc.

251

Page 257: Untitled 1

Compllador C CCS y Simulador PROTEUSpara Microcontroladores PIC

Flsfcarnente, los datos del USB se transmiten por un par trenzado (D+y 0-) adernasde la rnasa y alimentaci6n (+5V). Los conectores estan sujetos al estandar (tipo A,tipo B).

USB es un bus punro a punto, con inlcio en eJ HOST y destino en un dispositivoo en un HUB; s610 puede existir un unico HOST en la arquitectura USB. HOST sedefine como el dispositive maestro que inicializa Ja comunicacion y HUB es el dis­positivo que contiene uno 0 mas conectores 0 conexiones hacia otros dispositivosUSB; cada conector es un puerto USB. EI protocolo de cornunicacion se basa en elpaso de testigo (tokel1), donde el HOST proporciona ellestigo al dispositivo selec­cionado y este Ie devuelve el testigo como respuesta.

10.1.1 Migracl6n de RS232 a USBLa Interfaz serie RS-232esta desapareciendo practicamente de los ordenadores per­sonales y esto supone un problema, ya que much as de las aplicaciones con micro­controladores utilizan este bus para su comunicacion con el PC. La soluci6n ideales migrar a una interfaz USB y existen distintas forrnas de hacerlo. El metodo massenciJlo es ernular RS-232 con el USB, con la ventaja de que el PC vera la conexionUSB como una conexi6n COM RS-232Yno requerira cambios en el software exis­tente. Otra ventaja es que se urilizan drivers suministrados por Windows, por 10queno es necesario desarrollar uno ad hoc; estos drivers son el usbser.sys y el ccport.sys. Ademas, puesto que el protocolo USB maneja comunicaciones de bajo nivel,los conceptos bnud rate, bit de paridad y control de flujo para el RS-232ya no im­portan.

'0.1.1.1 USB CDC ,CommunIcatIon Device Class'Una clase USB es una agrupecion de dispositivos de caracteristicas comunes, esdecir, utilizan una misrna forma de comunicarse con el entomo. La dase de dis­posltlvo permite conocer la forma en que la interfaz se cornunica con el sistema, elcual puede localizar el driver que puede controlar la conectividad entre la intcrfazy el sistema.

USB solo permite aJ driller comunicarse con el periferico a traves de las tuberias(pipes) establecidas entre el sistema USB y los endpoints del periferico. Los tipos detransferencia a traves de las pipes dependen del endpoint y pueden ser: Bulk, Control,lnierrupt e Isochronous. Una tuberia es un enlace virtual entre elHaSTy el dispositi­vo USB, donde se configura eJ ancho de banda, eJ tipo de transferencia, Ia direcciondel flujo de datos y el tamafio del paquete de datos.

Estos enlaces se definen y crean durante la inicializacion del USB. Un endpoint esun buffer dentro del dispositivo 0 periferico donde sc almacenan paquetes de infor­macion; todos los dispositivos deben admitir el endpoint 0, el cual recibe el control yJas petidones de estado durante la enumeracion del dispositive. Cuando se conectaun dispositive al HOSTse produce la enurneracion en la cual el HOST interroga al

252

Page 258: Untitled 1

10. USB - Universal Serial Bus

dispositive sobre sus caracteristicas principales, asignandole una direccion yper­mitiendo la transferencia de datos.

La especificacion Clase de Dispositivo de Comunicacion (CDq define algunos rna­delos de comunicacion, incluyendo la comunicacion serle. Windows suministra eldriver usber.sys para esta especificaci6n. Para la especificacion CDC se necesitandos interfaces USB, primero Ia interfaz C071Lmunicai ion Class usando un IN interruptendpoint de interrupcion y el segundo es lainte.faz Data Class usando un OUT bulkendpoint y un IN bulk endpoint. Esta interfaz es utilizada para transferir los datosque normalmente deberian ser transferidos a traves de la interfaz RS-232.

Desde el punto de vista de sistema USB, el dispositive puede tener distintas con­figuraciones, para cada una de las cuales puede funcionar de forma distinta. Losdispositivos suministran 1a informacion necesaria al sistema USB a traves de losdescriptores; estes contienen unos campos que permiten al sistema clasificar al dis­positive Y asignarle un driver. La primera informacion que necesita es 1adel fabri­cante y producto (USB vendor ill- VIP Yel Product ID - PID). El VIP es un numerode 16 bits asignado por el USB implementers Forum (USB-IF) y debe ser obtenido porel fabricante del dispositive USB; cada VTD puede contener 65.536 PID diferentesal ser rambien un ruimero de 16 bits. Microchip suministra su VIP y los PID paracada familia de PIC con USB.

Microsoft Windows (2000 0XP) no tiene un fichero "Inf estandar para e1 driver CDC,asi que es necesario suministrar este fichero cuando Be conecta un dispositive USBpOI primer a vez al sistema. Microchip suministra e1 fichero mchpcdc.inf necesariopara sus dispositivos PIC.

10.2 USB con ISIS y CCS C

10.2.1 USB en ISISLabCenter ha incorporado, en su version 7, dos herramientas para Ia simulacion decircuitos con USB: el conector USB Ilamado USBCONN (figura 1), el cual permiteconectar y desconectar e1 bus y el visualizador de USB Ilamado Analizador de Tran­siciones USB (figura 2); este ultimo se debe adquirir como un modulo aparte.

Figura 1. USBCONN

Ademas, elsoftware de LABCENTERincorpora los drivers necesarios para la simu­lacion con USB. Para instalarlos hay que it a 1aopcion INIGO> PROGRAMAS>

253

Page 259: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

PROTEUS 7 PROFESS10NAL> VIRTUAL USB> INSTALL USB DRIVERS. Tras esteproceso ya se puede trabajar con el USB CONN.

Figura 2. AnaJizador de Translclones USB

10.2.2 USB en CCS CCCS suministra Iibrerias para comunicar PIC con el PC utilizando el bus USB, me­diante perifericos Internes (familia PIC18F4550 0 el PIC16C765) 0mediante dispo­sitivos externos al PIC (del tipo USBN9603).

Las librerias suministradas son:

• pic_usb.h: driver de capa hardware de Ia familia PIC16C765.• pic_18usb.h: driver de capa hardware de 1afamilia PIC18F4550.• usbn960x.h: dtioer de capa hardware para el dispositive extemo USBN9603/

USBN9604.De esta forma, se puede utiliza el bus USB en cualquier PIC.o usb.h: definiciones y prototipos utilizados en el driver USB.• usb.e El USBstack, que maneja las interrupciones USB y el USB Setup Requests

en Endpoint O.• usb_cdc.h: driver que permite utilizar una clase de dispositivo CDC USB, emu­

lando un dispositive RS232 Y10muestra como un puerto COM en Windows.

Las funciones mas .importantes, entre otras rnuchas, son:

o usb_initO: Inicializa el hardware USB. Espera en un bucle infinito hasta queel periferico USB es conectado al bus (aunque eso no significa que ha sidoenumerado por el PC). Habilita y utiliza la interrupcion USB.

• usb_taskO: Si se utiliza una deteccion de conexion para la inicializacion, en­tonces se debe llamar periodicamente a esta funcion para controlar el pin dedetecci6n de conexion, Cuando el PIC es conectado 0 desconectado del bus,esta funcion inicializa elperiferico USB 0 resetea el USB stack y el periferico.

254

Page 260: Untitled 1

10. USB _ Universal Serial Bus

• usb_enumeratedO: Devuelve un TRUE si el dispositivo ha sido enurneradopOJ;el PC y, en este caso, el dispositive entra en modo de operacion normal ypuede enviar y recibir paquetes de datos.

Existen funciones espedficas para CDC, entre elias:

• usb_cdc_putc(c): Es identica a putic) y envia un caracter. Coloca un caracteren el bllffer de transrnision: en el caso de que este lleno esperara hasta quepueda enviarlo.

• usb_cdc_getc(c): Es identica a gel(c) y lee un caracter. Redbe un caracter delbllffer de transmisicn: en el caso de estar vacio esperara hasta que se reciba.

CCS aporta varlos ejemplos de aplicacion de USB segun las clases de dispositi­vas, par ejcmplo para el CDC encontramos el EX_USB_SERIAl.C y el EX_USB_SERIAL2.C.

Ejemplo 1: Euuiar los datos de 111117 conversion AD nl puerto USB como Virtllal COIIIIll.Contpoucnies ISIS: PICIBF4550, USBCONN, POTLlN, CELL, RES Y LED-BLUE.

El ejemplo se basa en la aplicacion para CDC, EX_USB_SERIAL2.C, donde el USBemula un puerto serie COM. De todas las posibles clases de dispositivos, la CDCes 18 mas sencilla de aplicar y entender (dada su sirnilitud con el fundonamientode un puerto serie). EI ejemplo EX_USB_SERIAL2.C perrnite la visualizacion deuna parte de la memoria EEPROM del PIC. La estructura de librerias de CCS semuestra en la figura 3.

EX_USB_SER1AL2.C J#Include <18F4550.h>#include <usb_cdc.h>I

IIlnclude <usb.h>

IUSB_COC.H I#Include<pic18_usbh>#Include<usb_desc_cdc.h> -#include «use.c>

~USBe=]

#tnclude<usb.h>

i':,

iii

IUSB_OESC_COC H :1

Figura 3. Ubrerlas en EX,_CDC_SERIAL2.C

Se va ha modificar este ejemplo para adaptarlo a 105ejemplos del tema 7 sobre lospuertos sene. Adernas de modificar el programa principal, hay que realizar unamodificacion importante en la Iibrerla de descriptores USB_DESC_CDC.H, dondese indica, al final de la libreria, cl fabricante y el producto (VlP/PID); en este casoaparece:

255

Page 261: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

Ox61,Ox04,//vendor id (Ox04D8isMicrochip, or is it Ox0461??)= 8,9Ox33,OxOO,//product id= 10,11

Para trabajar con Microchip hay que indicar en el identificador de fabricante elVENDOR TOOx04D8 yen el identificador de productor elPRODUCT lD OxOA paralafamilia de los PICI8. Es decir, esas dos lineas deben de quedar asf (es aconsejablehacer una copia de la Iibreria original antes de proceder al cambio):

OxD8,Ox04,//vendorid = 8,9OxOA,OXOO,//product id =10,11

Estes dos identificadores permiten la conexion con el driver de Windows; al iniciarse1a conexion, Windows recibe los dos identificadores y localiza el driver necesariopara Ia conexion. En el caso de no localizarlo, permite 1aInstalacion de los recursosnecesarios para Ia conexion: en este caso a traves del fichero mchpcdc.inf suminis­trado por Microchip.

Por otra parte, alfinal de la libreria se encuentra la descripcion textual del disposi­tivo que sera detectado por WiI,dowSi para ello utiliza USB_STRING_DESC. Se pue­de modificar a gusto del usuario, teniendo cuidado con la definicion de Ia posicionde st:'ings Y sus tamafios.

char USB_STRlNG_DESC_OFFSETO={O,4,12I;char const USB_STRING_DESCO={//stringO

4, //length of string indexUSB_DESC_STRlNG_TYPE,//descriptor type Ox03(STRING)Ox09,Ox04,//Microsoft Defined for US-English

J/string 18, /Jlength of string indexUSB_DESC_STRING_TYPE,//descriptor type Ox03(STRING)'C',O,'C',O,'5',0,

//string 230, Illength of string indexUSB_DESC_STRING_TYPE, //deseriptor type Ox03(STRING)'C',O,'C',O,

256

Page 262: Untitled 1

10. USB - Universal Serial Bus

El ejemplo (figura 4) realiza la lectura de una sefial analogica por el canal ANa yenvia el dato por el USB emulando RS-232, de forma similar a] ejemplo 2 del tema7; el dato se enviara solo en el caso de que vade la tension.

'5',0,r ',0,

'R',O,'5',0,'2',0,'3',0,'2',0,, ',0,

'0',0,'e',O,'m',O,'0',0

Ii

,..-----, RVl

BAn•

R2

••

"'"R1 D1LEQ.81i£

CcmElClOlfUSB...

Figura 4. Ejemplo ,

Aligual queen el tema 7 sepuede utilizar elHyperterminal de Windows (0 cualquierotro visor del puerto serie) para visualizar los datos. En este caso, hay que esperara conectar el USB para que aparezca el puerto en las posibles conexiones del Hy­perterminal.

257

Page 263: Untitled 1

Compilador C CCS y Simulador PROTEUSpara Microcontroladores PIC

t!"".f:tr~

D~ )30613Volt age"1.BOVVo1 t69""1. 49VVol tlllle-2.49VVollagea2.99VVolldll~~3.49VVollage=2 99VVoltage=tl nov

Figura 5. Hyperterminal conectado al puerto Virtual

#include <18F4550.b>

Ifdevice adc=10

#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIVl,VREGENluse de1ay(clock=48000000)

#defineOSB_CON_SENSE_PIN PIN_B2

#include <uso_cdc.h>

void maln () (BYTE i, j, address, value;

int16 q,ql;float p;q1=0;

setup_ddcyorcs (ANOIVSS_VDD);

setup_adc(ADC_CLOCK_INTERNAL);set adc channel (0) ;

usb_cdc_init() ;

usb_inic (J ,.

dous.lr_task () ;

:if !uso_enumerated())

q = read ade();

if tql=ql ) Ip = 5.0 - g /1024.0;

printf(usb_cdc_putc, "\n\r Voltage = iOl.2fV", p);

258

I

Page 264: Untitled 1

ql=q;delay_ms (SaO);

) while (TRUE);

10. USB _ Universal Serial Bus

Figura 6. Programa del ejemplo 1

La configuracion de PIC18F4550 es la habitual, tan 5610 debemos tener en cuentaque la frecuencia debe ser de 48 MHz pero que utilizando el bit de configuraci6nPLLS se puede emplear un cristal de cuarzo exterior de 20 MHz. Es importanteconfigurar el pin de deteccion del sentido de transmision (USB_CON_SENSE_PfN)para poder controlar la conexi6n 0 desconexion delPIC alUSB;la conexion fisica semuestra en la figura 4. Antes de utilizar el puerto en el programa hay que iniciali­zarlo (usb_cdc_initO y usb_initO) y, "muy importante", comprobar que ha sido erru­merado por el HOST (usb_enumera"te'd(».Con eJ fin de inicializar 0 resetear La co­nexion con el USB se debe realizer una llamada peri6dica ala funcion usb_taskO.

Al inieiar la simul ad on con e1PLAY del ISIS, el sistema permanecera inacti vo hastaque se conecte el USBCONN (con las flechas rojas correspondientes). Tras conec­tar, por primera vez el USB,Windows solicita la instalacion del driver (se debe indi­car el directorio donde se guarde el fichero mchpcdc.inf) (figura 7 y figura 8).

1Mc:..~ ob.,,--

"- ......... ~-llI>.< _~~ ...:.-~~k.Mt,_...~.a... .. " .... ~ _____

Figura 7. Pasosen la instalacion del driver

259

Page 265: Untitled 1

Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC

Tras esta instalacion y cada vez que se conecte el USBCONN aparecera el puertoCOM virtual en eJ adrninistrador de dispositivos de Windows (Figura 9). Tarnbiendesaparecera el COM virtual cada vez que se desconecte.

".1.

flndfl:UII:iMl dol AiI""onr. pall,}h;w<ttN",.1'IUM'Q .. ntOflh ....uo.... ' ................ -.<* .-

Figura 8. Pasos en la Instalacl6n fcontJnuacl6nJ

-.:w-"",...• .... niIJlIotHotI,i'''~II-.dc1'''.!.11• ~(~.CI.~W.~(\.!SIi• :J~_irf.'AlAf»':~=~o;.~......~,:c=::=~..,...· ,-· ......, l'1It."'rc:tII"~-"_~......-.. .J "'-.1"'~~ ,~"•..JI , i 5 i;; i

11I\.tpt=·...., ~~I'J I""~" (11 ,U:l"· ,~"*

Figura 9. Puerto COMvirtual en el adminlstrador de disp""sitivos

En este instante el PIC queda conectado al PC y se puede abrir un visor del puertoserie para comprobar la transrnision (figura 5).

En los ejemplos de CCS tambien se pueden encontrar aplicaciones para Mass Stora­ge Device Class (MSO) y Human Interface Device Cinss (HJD).

Ejemplo 2: Enuiar los dntos de ulla conversion AD al puerto USB C0ll10 Virtual Commpara detenniuar la reuntesta ell lazo aalerto de 1111 homo (figura 10). Componenies ISIS:PIC18F4550, USBCONN, CELL, RES, LED-BLUE, SW-SPDT Y OVEN.

EI ejemplo es similar aJ anterior, en este caso se utiliza EXCEL con Visual Basic, detal forma que se pueden guardar los datos de tiempo y temperatura en una hoja decalculo y representarlos graficamente.

260

Page 266: Untitled 1

10. USB_ Universal Serial Bus

Figura 10. Ejemplo 2

Para utilizar el fichero en Excel, HORNO.XLS, se debe configurar eJ puerto serievirtual: en el fichero esta definido como el puerto 9 y ademas habilitar las macrosen el caso de tener Excel protegido (Herrtnnientns >Macro> Seguridad >Medin/Bnja).Para carnbiarlo a la rnedida del usuario hay que abrir el editor de Visual Basic (He­rramienios >Macro> Editor de Yisua! Basic), buscar Commport = 9 Ysustituirlo por elnurnero adecuado de puerto serie virtual (figura 11).

Pt ,vote ~u.b (cmncuadlhlttont ClJCk()(OtmJaudBllttOnl. 8.t~kColt1l.. PfiJ! 'Of 255, 0)CO~\lt.to:.l.8.ckC010l" • PCI'I'~OO, ~OO# 'ZOO)WQI~h,.~t,(··"n.l.l") .(oJ1JI!IIl\a~"''') .ll\Jt'trlf'rrOt."'Wlat .. "0.000"Vork.b~.t.("HOlst·). (01wrrn.e ,lfr", .JJW1II:>4trP'OUlllllit.. ·0. (Ie"

It PUOC'to • 0 Tbell puerto • 1Vnb ftSCOlmIl.Sett1no~ • "'GOO,tI,S, I"".COb:llJ'lort • 9+--­.AThre.bola • 1• Input ftotOte .. c:cbClfnpcu:l'Ioclethnar.,.Inpuc"t..n • 0.PortOpen .. TrueEnd 1I1tl\I • 0

EnOl SubrrlV~te Sui:) CC!M'I'IeftClSur.r:on2:Cl,elcU

(oll~nd,D\lttonl. 8eekColQr - ~G' ,0, lSS, 0)C011ftlandBuU.On2.ht:kColor • PC;!1200, 200, ::00)

FIgura 1I. Modlflcacf6n del puerto serte

#include <l8F45S0.h>#device eac lO#fuses HSPLL,NOWDT,NOPRorECT,NOLVP,NODEBUG, USBDIV,PLLS,CPUDIV l,VREGENKuse delay(clock-48000000/#defineUSB_CON_SENSE_PIN PIN_B2

261

Page 267: Untitled 1

Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC

#1nclude <usb_cdc.h>void main() (

1nc16 g,n:float p;int qL;tnt qH;

inc nL,nH:setup_adc_ports(ANO);setup_adc(ADC_CLOCK_INTERNAL);

n~O;

uSb_cdc_init (),o

usb inic ();delay_ms(3000),oI/Retardo para poder abrir e1 puerto con e1 Exceldo (

usb_ task();if (usb_enumerated())

set_adc_channel(O);delay_uS(lO);q - read_adc();p - 5.0 • q I 1024.0;

nL-makeB tn, 0) ;

nH·make8(n,1);it (usb_cdc_putready() usb_cdc_putc(nL),oif (usb_cdc_putready()) usb_cdc_putc (nH),o

qLcmake8 (q, 0) ;qH"makeB(q,l);if (usb_cdcpucready()) usb_cdc_putC(qL);if (usb_cdc_putready()) usb_cdc_pucc(qH);delay_ms(SOO); liSe envi,~n i:latos ced« 0.5 !J

n++;

) while (TRUE);

Figura' 2. Programa del ejemplo 2

Para la simulacicn se debe abrir el fichero de Excel (figura ]3); en este fichero exis­ten dos botones para abrir el puerto y cerrarlo (tambien hay un boron para borrarlos datos adquiridos). Antes de abrir el puerto se debe arrancar el ISIS e iniciar lasimulaci6n del programa, a continuacion se puede conectar el USBCONN y, una

262

Page 268: Untitled 1

10. USB - Universal Serial Bus

vez conectado, se puede abrir el puerto con el boton de Excel para iniciar 1aad qui­sidon.

1\tI,(/j _p ':-""1..- fill""'. oP~ ~ ~ :J.fIII -1(\ .... ' ilJn(1jcpc:,

l­a-...

;•·~Db·.."·:;~

1:-' • lot \Wulo'tifolnA2 r).t!n,l-j

~. /a1tDr~·

"'"II •

.. ."

"L ~---

Figura 13. Fichero de Excel

Para ver la curva de calentam iento se puede cerrar el interruptor de) homo de talforma que comience a calentarse (figura 14c).

·e·•"

.1 l1lw' "Jtl:t~·f"'1.. ,.."

OJ """.. "..,,. ,",""" .t.fl.:..,..U "'",.

"~i'f .~JIIfj, .,.... v._" ,an".. """.. "',..'f i1~&»-o. .....II ...... .!ll1.'!U ...... ''''''.. ...... ....." .....- ....... _,.

~'"-....' .".... 4",r;r •

>.."..D2,0""..~.-, , ~\_tl'_J'<uU1

.'"

...

_-~~--_7~ ••/--------

Figura 14. Datos adquiridos y su represe:ntacion

263

Page 269: Untitled 1

ESIa edicion se rerminc de imprimir en junio de 2008. Publicadapor ALFAOMEGA GRUPO EDITOR, SA de C.V.Apanado Postal

73-267,03311, MexIco, D.F. La impresion y encuademaci6n se realizaronen FUENTES TMPRESORES, SA, Centeno No. 109, Col. Granjas Esmeralda.

Iztapalapa. 09810, Mexico, D.F.

Page 270: Untitled 1

Los mierocontroladores PICmicro de Microchip han experimentado un importanteaumento de presencia en el sector industrial esto se debe. entre otros muchos fac­tores, a la politica de ape.rtura que tiene Microchip, ya que facilita y potencia el de­sarrollo de herramientas por parte de otras compaiiias.

En lenguajes de programacion destacan los compiladores C para PIC de companiescomo CCS Inc. EI desarrollo de nn lenguaje C especifico para un microcontroladorpennite obtener el maximo rendimiento del micro.Los programas de simulacion permiten depurar hasta casi la perfecci6n el disefioantes de SeTmontado en una pla ea. No hace falta explicar el ahorro de tiempo ycoste que ello supone. Tal vez uno de los mejores simuladores para microcontro­ladores es el rSIS de PROTEUS.En el capitulo 1 de este libro se bace nna breve, pero intensa, descripcion del ISISde PROTEUS, de forma que elleetor pueda afrontar la simulacion de disefios sinningun problema. En el capitulo 2 tambien se realiza un.repaso del compilador Cpara PIC de CCS; obviamente no puede explicarse este lenguaje en un solo capi­tulo, pero tras su lectura eualquier lector podra afrontar los pequefios programas dedisefio que se exponen en los siguientes capitulos.Del capitule 3 al 7 se desarrollan los distintos m6dulos que integran, un PIC (ADC,USART,CCP, etc.) a niveLhardware, enlazandolos con las correspondientes direc­tivas y funciones del C. En cada capitulo se plantean y desarrollan sencillos ejem­plos de aplicacion que el lecter podra estudiar y, como no, modificar para eompletarsus conocimientos.En el capitulo 8 se expone la gama alta (pTe18) yen el capitulo 9 una aplicacienmas compleja, elRTOS (Real Time Operating System). Tambien en estos capitulosse incorporan distintos ejemplos de aplicacion. Por ultimo, en el capitulo 10 sedesarrolla el USB de reciente incorporaci6n aLISIS.Este libro esta enfocado a todos aquellos lectores movidos pOTel interes acerca delos microcontroladores PIC sin necesidad de tener conocimientos muy profundosen la materia. Los ejemplos desarrollados no tienen una excesiva complejidad, sonbreves y permiten ir afianzando Losconocimientos capitulo a capitulo.