COMPILADOR C CCS In~) Y SIMoLADOR PROTEUS PARA MICROCONTROLADORES PIC Eduardo Garcia Breiio
A Alfaomega
ediclones
tecn ! cils
COMPILADOR C CCS y
S.MULADOR PROTEUS PARA
MICROCONTROLADORES PIC Eduardo Garcia Breijo
f1. Alfaomega
Datos C31111ognificos Garcia. Eduardo Compilador C CCS Ysimulador PROTEUS para Microcontroladores PIC Primera &lici6n Alfnomegn Gropo Editor. S.A. de c.y., Mexico ISBN : 978-970-15-1397-2 Formato: 17 x 23 cm Paginas: 276
Compilador C CCS Y simulador PROTEUS para Microcontroladores PIC Eduardo Garcia Breijo ISBN: 978-84-267-1495-4. edici6n original pJblicada por MARCOMBO. S.A .• Barcelona. Espana Derechos reservados Cl MARCOMBO. S.A. Primcra edici6n: Alfaomcga Gropo Editor, Mexico. junio de 2008. @ 2008AlfaomegaCrupo Editor, S.A. de C.Y. Pilagoras r 139, Col. Del Valle, 03100, Mexico D.F. Micmbm dc la Camara Nacional de In Industria Edilorial Mexicana Registm No. 2317 pag. Web: hUp:llwww.alfaomega.com.mx E-mail:
[email protected]
(SBN: 978·970-15-1397-2 Derechos rescrvados:
Esta obrn cs propiedad inrelecrual de su autor y los derechos de p.!blicaci6n en Jengua espanola han sido legulmcnte mmsferidos al edita-. Prohibida su reproducci6n parcial 0 total por cualquicr medio sin permisQ por escnlO del propietario de los derechos del copyright Nola imporlanlt": La infonnaci6n contcnida en esta obra tiene un fin exclusivamente didOCtico y. por 10 tanto. 00 esll1 previsto su aprovcchamiento a nivel profesional 0 industrial. Las indicacioncs tocnicas y programas incluidos. han sido elabomdos con gnm cuidado por el aUlor y reproducidos bajo estrictas oormas de control. ALFAOMEGA GR UPO EDlmR, S.A. de C. V. no sera jurCdicrunente responsable por: errores u omisiones: daflos y peJjuicios que se pudieran atribuir al uso de In infonnaci6n comprendida en este libro y en eJ CD-ROM adjunto. ni por la utiJizaci6n indebida que pudieradmeJe.
Edici6n 3U{orizada para venia en Mexico y todo el cominente americano. Impreso en Mhico. Printed in Mexico. Empresas del grupo: Mbko: Alfaomega Grupo Editor. S.A. de C.V. - PimgOl1lS 1139. Col. Del Valle. Mtxico. D.P. - c. P. 03100. Tel.: (52-55) 5089-7740 _ Pax (52-55) 5575-2420 12490. Sin costo: OI·SOO-020-4396 E-mail:
[email protected]
Colombia: Alfoomega Colombiana S.A. - Carrera 15 No. 64 A 29 - PBX (57-1 ) 2100122 fax : (57-]) 6068648 - E-mail:
[email protected] ChU..: Alfaomega Grupo Editor. S.A. - General del Canto 37Q.-Providencia. Sanliago. Chil" Tel. : (56-2) 235-4248 - Fax: (56-2) 235-5786 - E-mail:
[email protected] Argentina: Alfaomega Grupo Editor Argentino. S.A. _ Paraguay 13Q7 P.B. r I". Capilal Federal. Buenos Aires. C.P. 1057 - Tel.: (54-11) 481 1-7183 f 8352, E-mail:
[email protected] H
In dice analitico 1. ISIS de PROTEUS VSM ................................................................... 1 1.1 Introduccion ........................................... ........................................................................ 1 1.2 Captura ele<:tr6nica: entorno gnifico IS IS ................................................................. 2 1.3 D epumci6n de los s.istemas basados en PICmicro ................................................. 12
2. Compilador CCS C .................................................. ....................... 23 2.1 Introducci6n..................................... .................... ............................... .............23 2.2 Estructura de un programa ........... ........................................ .................................. 24 2.3 Tipos de cla(QS ........... .................... .........•......... . ...........•••.•...••24 2.4 Las constantes ...... .... ........ ........ ........................ ...........................25 2.5 Variables ..... ............. ........ ....................... .. .......................... .26 2.6 Operndore5 .................................................................................................................27 2.6.1 Asignaci6n ............................................................................................................................... 27 2.6.2 2.6.3 2.6.4 2.6.5 2.6.6
•
Ariunecicos ..................................................................................................................... _....... 27
Rclaciona1es .......................... .......................................................... ........................................ 28 LOgicos ..................................................................................................................................... 28 Dc biLS •.•.•.•.•.•..............................................•..•.•.•..•.•.•.•.......................................................... 28 Puntcros ................................................................................................................................... 28 2.7 Funciones ................................................................................................................... .. 29 2.8 D eclaraciones de control ...................... ......................................................................30 2.8.1 IF-ELSE................................................................................................................................. 31 2.8.2 S\VITCH ..........................................................................................................•...................... 33 2.8.3 FOR .......................................................................................................................................... 34 2.8.4 \VH.lLE I DO-\VHfLE ................................................................................•....................... 35 2.8.5 Ou-os ......................................................................................................................................... 37
2.9 Comentarios ...... .................................................
..............................................37
2. 10 Directivas y funciones (preprocessor commands y built-in functions) ............ 38 2. 10.1 Dircccivas ............................................................................................................................. 38 2.10.2 Funciones............................................................................................................................... 40 2.1 1 Librerias, drivers y ejemplos ................ ........ ............................................................. 43 2.12 Emorno de rrabajo de CCS C Compiler .......................................... ..................... .43 2.12.1 Introduccion.............................................................................................. ............................ 43 2.12.2 Emorno de rrabaio ................................................................................. .................... 44
3. La gesti6n de los puertos ......................................... ... .................... 55 3.1 Introducci6n ........................................ .........................................................................55 3.2 Gestion de pucrtos en .57 3.2.1 A travcsdc la RA.L\I ................................................................................................................ 57
c. .... ................................................. ....................................
v
........................................................................ ........................ 60 3.2.2 A traves de !:Is dircccivas 3.2.3 Con punteros ................. ........................................................................................................ 62 3.3 Entradas y salidas........ ................. ........... .......... ................................... 65 3.3.1 LCD. ........................................................................................................................... 65 3.3.2 LCD gniitco.......................................................................................................................... 70 3.3.3 Tedado (keypad 3x4) ........................................................................................................... 75
4. Las interrupcioncs y los tcmporizadorcs ............................ ............ 83 4.1 Jntroducdon.............................................................. ......... ................ .... ........... 83 4.2 Jnterrllpdones ........... ............................................................................. ...... ........... ... .83 4.2.1 Interrupciones en C......................
....................................................................... 88
4.3 'nr-. IERO..... ......................................
......................................................... 94 ...
4.3.1 TL.\lERO en C............. ............................ ...........................................................
4.4 Tl j\ l£Rl
r Tli\-lER2 .................... ...................
.... 95
..............................................99
4.4.1 TL.\IERI YTll\IER2 en C ............................................................................................... 102
5. Convcrtidor Analogico - Digital .................................................... 117 5.1 Introduccion.. ............................ ............................ ..................... 117 5.2 MOdulo Com'crticlor (gama media) ..................................................................... 118 5.2.1 Registros rSR ..................... ....................... .................................................. 119 5.2.2 ProcesQ de com·ersi6n...................... .................................................................... 122 5.2.3 EfCCto del modo SLEEP y RESHT en el mOdulo AD .................................. ...... 124
5.3l\ looulo
AD en C................................................... ..................
..................... 125
6. M6dulo CCP - Comparador, Captura y PWM .............................. 137 6.1 Introclucci6n .......................................................................................................... 137
6.2 ~Iodo Captu[a ............................................................... ................. .................. ...... 139 6.3 Modo Comparacion ..... .............................................. ................. ...... 140 6.4l\fodo P\'{'l\f ........................................................... ......... .... ............. ................... .... 141 6.5 f..-i6dulo
cep en C .................................................................... .............................. 143
7. T ransrnisi6n scrie ........................................................................... 167 7.1 Inrroducdon .............. .................................................................................... .......... 167 7.2 El mOdulo U5ART/SCl .......................................................................................... 168 7.2.1 Introducci6n ........................................................................................................................ 168 7.2.2 EJ mOdulo USARTen C ..................................................................................................... 174 7.2.3 1.a norma RS232 ................................................................................................................ 180 7.3 Puerto serie sincrono (SSP)............................... .................. .. 190 7.3.1 Interfaz Inter-Circuitos (l2q ............................................................................................. 190
8. GamaAlta-PIC18 ......................................................................... 213 8.1 Introducd6n ........................................................................................ .. .................. 213 8.2 Organizaci6n de 1a memoria ................................................ ................. 214 8.2.1 Ar'luitecrum HARDVARD ......................................... ....................................................... 215 8.2.2 11emoria de Programa ......................................................................................................... 215 8.2.3 COlltador de Progmma. .................................... ...................... ........................... 216 8.2.4 Memoria de Configuraci6n........................... .......................................................... 217
vi
8.2.5 Pila ............................. .............................. ..................... ............................................ 21 8.2.6l\lemoria de Datos ............................................................................................................. 218 ............................................................................................... 219 8.2.7 l\lemoria EEPRO,\] 8.2.8 i\lodos de Direccionamiento ............................................................................................ 220 8.2.91nterrupciones....... .................................... .................................................. 220 8.2.9.1 Registms de sah1lguarda ................................................................................................ 222 8.2.10 Registro \'(1....... ........... .................. ................ .. ............................... 223 8.2.1 ·J Oscilador............................................................................................................. 223 8.2.1 2 Unidades Funcionales ....................... . ........... ...................... ....... .... 223 8.2.12.1 Puertos de emr:lda/s.alida .............................................................................................. 224 8.2.12.2 Temporizadores ............................................................................................................. 225 8.2.12.3 Convcrcidor Analogico-Digital........... ..................................... ..................... 226 8.2.12.4 Canal de Comunicaci6n Serie (EUSARl) .................................................................. 227 8.2.12.5 i\lodulo Master SSP {i\ !SSP) .......................................................................................... 228 8.2.1 2.6 r.lodulo de Compr.acion/Captura!P\Vi\! (CCP) ........................................................ 228 8.2.12.7i\lodulo Companldor.............................. .............................................. 230 8.2.12.8l\Iodulo de referencia ..................................................................................................... 230 .. ................................ 230 8.2.12.9 Modulo detct:tor de Alto/Baio Voltaie .....................
9. RTOS - Real Time Operating System ........................................... 239 9.1 Introducci6n ............................................................................................................ 239 9.2 RTOS en C ............................................................................................................... 240 10. USB - Universal Serial Bus .......................................................... 251 10.1 lntroducci6n ............... .......... ........... ............. ..... ......... .. ..................................... .. ... 251 10.1.Il\ligracion de RS232 a USB ...................................................................................... ....... 252 10.1.1.1 USB CDC (Communication Device Clas5) ................................................................. 252 10.2 USB con ISIS y CCS C ............................................. ... ................ .................... ...... 253 10.2.1 USB en ISiS............................... ........................................................................ 253 10.2.2 USB en CCS C .................................................................................................................... 254
,
vii
. Introduccion EI estudio de los microcontroladores PIC no consiste sOlo en dominar su arquitectura intema 0 el c6digo maquina sino tambien en conocer programas auxiliares que fadlitan eJ diseilo de los sistemas donde intervienen.
Entre los muchas programas para el desarrollo de sistemas con PICmicro® destacan, por su potencia, el PROTEUS VSM de ©Labcenter Electronics y el compilador C de ©Custom Computer Services incorporated (CCS). El programa PROTEUS VSM es una herramienta para la verificacion vIa software que permite comprobar, pr
ix
1. ISIS de PROTEUS VSM
Capitulo 1 ISIS de PROTEUS VSM 1.1 Introduccion E1 entomo de diseiio electronico PROTEUS VSM de LA BCENTER ELECTRONICS (w'Ww.labcellfcr.co.llk) ofrece In posibilidad de simu lar c6digo microcontrolador de alto y bajo niveJ y, simul taneamente, con la simulacion en modo mixto de SPICE. Esto permite el diseno tanto a !livel hardware como software y realizar la simuJacion en un mismo y unieo entomo. Para ella, se suministran tres potenles subentornos como son el[SIS para el diseno grMico, VSM (Virtual System Modellillg) para la simulation y el ARES para el diseiio de placas (figura t).
The V!iM Advantage
-•
......-
-
'0
~
Con las hemim ....ntas
...
-
tntddooll/l!lS de diS>flflo. aI deSll!TOllo del soII'wsI8 Y Is rx:mprobac/6f! del sistema no puede (fIafzarsa hastB qve SII dssanolla IJIl protOOpo ffllJl, 115ft! pueOO supIXI#V semamos de ro/roso. AdlWlAs. 51 SII Iouliza 8(giln 8rrot' en et diseflo harrJw8ff1. fa lOI/11idad (Je/ proctJ$O debe ntpfItirse.
--
O-\!m
- -.- ... ,--
+-.... §
, /.;./
o
Usando Proteus VSM, e/ desatrOllo dol ~ pi.J8dtJ comenur IBn ptOn/O como eJ esquemMk;o os dibv}6do y Is oombinaciOn d& softwMl y flM1ware pufXIo ser /e.ste9da ~m"N riel montllf aI proIoIipo.
Figur" T. Entorno de tr"bajo PROTEUS Ifuente: Labc:enter Electronicsl
1
Compilador CCCS y Simulador PROTEUS para Mlcrocontroladores PIC
1.2 Captura electronica: entorno gratico ISIS ISIS es un potente programa de diseno electr6nico que permite realizar esquemas que pueden ser simu lados en el entomo VSM 0 pasados a un circuj to impreso ya en el entomo ARES.
Posee una muy buena coleccion de librerias de modelos tanto para dibujar, simular o para las placas. Ademas, permite la creaci6n de nuevas componentes, su mode· lizaci6n para su simulacion e, inciuso, la posibilidad de solicilar al fabricante (LAb· center Electrollics) que cree un nuevo modelo. Sin entrar profundamente en como utilizar dicho programa (requerirfa un libro sOia para ello), a continuati6n se explican las bases para dibujar cualquier circuito electr6nico. El programa ISIS posee un entomo de trabajo (figura 2) formada por distintas barras de herramientas y la ventana de trabajo.
.......
--~
• Ventana de TrabaIo
Fig ... r .. 2. EI entorno de trabajo del progra....a ISIS
Varios de estos menus tambien se pueden utilizar con la ayuda del bolon derecho del raton. Al pulsarlo en cualquier parte del entomo de trabajo apa rece un menu contextual donde se pueden i.r obteniendo los distintos submenus de trabaja (figura3).
2
1. ISIS d, PROTEUS VSM
+~~ ;; I->tSo#
"'U_M g'..... -c· ~PI'I
L.. .... a l_~
. @ ~v. . . Pf0b8
Y' C,-,...... Probe 11/ .... _
/~
"b ..
~
,,~
...-. . .,,~
A'"
..--_. ~
~~
~
=0
= ..
""'" """
~""
OI''''TT~
Figura 3. Submenus de t,,,b,.jo del bolon derec:ho del raton
Para dibujar, 10 primero es colocar los distintos componentes en la hoja de trabajo. Para ello, se selecciona el modo componentes (figura 4) y, acto seguido, realizar una pulsation sabre el boton P de la ventana de componentes y librerias (Figura 5).
2 Flgur.. 4. Modo componentes
1lgl.lr.. 5 . Boton
~plck~
Tras activar el bot6n P se abre la ventana para la edici6n de componentes (figura 6) donde se puede buscar el componente adecuado y comprobar sus caracteristicas.
Al localizar el componente adecuado se realiza una doble pulsaci6n en el, de tal forma que aparezca en la ventana de componentes y librerias (figura 7). Se puede reaHzar esta acci6n tantas veces como componentes se quieran incorporar al esquema. Una vez finalizado el proceso se puede cerrar la ventana de edici6n de componentes.
3
Compilador CCCS V Simulador PROTEUS para Microconlroladores PIC
por lipO. clue y fabricanta Permil, loeaHut componantfS par nombfe
..
Usia de d;;.~n;"' •• dI'~ffilt'''' ,.,".~,.""i.,""
y modelo
Encapsulado para plllce
=C::,~.,- . "
••
Peque/lo &dilor de Jaa caract.,ristlcaa de un componente (sltullr.,1 ralon aobr. "I
Figu,.. 6. Ventana pari'! la edlcion de componentes
Figura 7 . Los componentes a"adldos
Para situar un componente en el esquema tan s6lo debemos selecciona rlo de la lista. Al hacerlo se puede comprobar su orien tadon (tal como se representara en el esquema) en la ventana de edki6n (figura 8). Si deseamos modificar la rotacion 0 la reflexi6n del componente podemos acceder a ello a traves de la barra de herramientas correspondiente (figura 9). Haciendolo de esta forma, "todos" los componentes de 1a Hsta tendriln la misma orientacion (si se desea orientar un unico componente deberemos hacerlo una vez ya situado en el esquema).
4
1. ISIS de PROTEUS VSM
\O!'
"' ci~~:jl ..
Ie oro-_s:::
Figura 8 . Se 'ecc:lon y orienta tion
e
Figura 9 . Barra de ro ta cion y refl exi on
del componente
Ahara 5610 falta realizar una pulsaci6n sobre la ventana de trabaja y se colocara el componente. E1 cursor del raton se convierte en un i
UPI.l blaoro: elie en bcll6n iaju.,,-uo coloca.,1 roDlPOIICDI~
Figura
to. Cursor e n e l modo d e coJocad6n
Es importante activar la herramienta de referenda automiltica (Real Tillie AlIIlOtation). De esta forma, los componentes tendran una referenda distinta y de forma consecutiva; en los circuitos integrados con varios componentes encapsulados tambien se referenciaran segtin dicho encapsulado (UIA, UIB, etc.). Esta herramienla se acliva a desactiva desde la opcion de menu TOOLS -? Rea l Time Amlotatiol/. Una vez situ ados los componenles en el area de trabajo se pueden mover, al pasar por encima del camponenle el cursor se canvierte en una mano (figura 11) y al realizar una pulsation, el cursor se transforma en una mana con una cruz, indicando que se puede mover el componente (quedan seleccionados al panersc en raja) y se puede arraslrar (atencion: si se vuelve a realizar OITa pulsaci6n del balon izquierdo se editan las caracteristicas del componente). Tambien se puede cambiar su orientacion utilizando los comandos de rolacion y reflex ion a Iraves de una pulsacion del baton derecha del ralon (figora 12) y se pueden eliminar can dos pulsadones con e1 boton derecha sabre elias (a con el bot6n derecho y el camanda Delete Objet).
Flgu,,, 1 t. £1 cursor en modo de se leccion y move ,
5
CompUador CCCS y Simulador PROTEUS para Microconlroladores PIC
•
--
+ OragObioct
"""
f"Pt
0C .... _ _ '""""" C_llIOdov_ ~-.
t
Y-Mr,,,,
•
TKIH)&.~acciIn
-
,~
·•
o DIsJJIay /IIodoI tWI> ~-
......... ""'" ""'"
•
-
,1J'-"Des¢~.,
"....
J: p..o:.gn; 1001 f--J'FlgLlr~
_C
12. Men';' contextual de un componente
~ctlvado
por el boton derecho del
r~ton
Todas estas acdones se pueden realizar individualmente 0 de forma cole<:tiva, es dedr, se pue-den agrupar varios componentes a traves de puisaciones consecutivas sobre elIos (manten iendo la tecla
pulsada) a dibujando una ventana can el bot6n izquierdo y arrastnindola sabre los mismos (figura 14).
t-t:=-. _..... ,-UI
~~
R.UtANlMIEl'·
.-. M'
+01
~
,,~
RllllP
~.
1ICW'T1000000'OO 'tC111101.1CC1'7
"
~
•
---
" !Nil To
~RI,.
~ ~
PIC'6f~nI
Flgur~
~.-
13. LO$ componentes en el are~ de tr~b~Jo
Una vez seleccionado el conjunta de componentes (se marcan tadas en raja) debe mas u tilizar la herramienta de grupo (figura 15), que tambien aparece tras pulsar el bot6n derecho. Can esta herramienta se pueden copiar, mover, rotar a elimiIlar los componentes selecdonados.
6
1. ISIS de PROTEUS VSM
- ,"
-"
-----', - ' '
-•
••
-,---
Figura 14. Selection de varlos cornponentes
Figura 15. La herramlenta de grupo
Para unir los componentes con cables hay que situarse en los extremos de los termi¥ nales, el cursor se convierte en un i
.,.; :
R
,, ,
"
.1k· Figura 16. Inlclo de .:able
Flgur.. 11. Circ:uito #a milno #
7
Compilador CCCS YSimulador PROTEUS para Microconlroladores PIC Las uniones entre cables se pueden realizar de forma automatica. Para ella, mientras se traza un camino debemos realizar una pulsacion sobre el cable objeto de la union electrica (figura 18). Tambien se pueden realizar de forma manual mediante el modo de uni6n (figura 19)i en {'ste modo tan sOlo hay que ir hacienda pulsaciones sobre los puntas donde deseamos realizar la union.
~ 21 T 22 1 2H; 24 25
t-'
r
+
Figura 18. Union ele.c:trica entre cable$
Figura 19. Modo de union
Se puede modificar el trazado de los cables. Para ella, se realiza una pu lsati6n sobre el cable, en ese instante el cursor se convierte en una doble flecha (figura 20) y se puede arrastrar el raton para modificar el cable.
l
Doble flecha: mo"cr cables
Figura 20. Mover 10$ cable$
Tambien se pueden utilizar buses para las uniones multicable. Los buses perm iten conectar varios terminales entre sf utilizando un unico elemento (figura 21); en este caso, el cursor se convierte en un liipiz azul (figura 22). Pero para distinguir los distintos cables que fo rman parte del bus y distribuirlos en la entrad a y en 1a salida se deben etiquetar mediante labels. En el caso de los cables se indicani una etiqueta lmica LCDO, LCD1, etc., y al bus una etiqueta conjunta segun el formato LCD{O..3] que indique el nombre y la cantidad de cables que 10 fo rman.
lCOlll_.lI
Figura 21 . Cableado por bU$
8
1. ISIS de PROTEUS VSM
,
L.1piz (lzul: trazado de buses.
Figura 22. Cursor e n modo de tri'lZado d e bu.J
El etiquetado tamhiEm permite unir cables virtualmente. Para ella, tan sOia es necesario que los dos cables se lIamen iguaJ aunque no esten conectados entre sl. Para etiquetar cables 0 buses se utiliza el modo label (figura 23). AJ activar este modo y realizar una putsaci6n sobre un cable 0 bus se abre una ventana donde podemos introducir la etiqueta, ademas de seleccionar posicion, orientaci6n y estilo (figura 24).
• ••
''''
figura 23. Modo label
-..- .r-..
~
Figura 24. Vent"nill de edldon de etlq ... t!'tas
OtTO modO de uni6n virtual es a !raves de terminates. Al activar el modo terminal (figura 25) se pueden seleccionar distinlos tipos de terminaies, entre elias el ublizado poT defecto (de/all't). AI utilizar este terminal en varios componentes y darle el mismo nombre en todos ellos se consigue una union eltktrica.
Figura 25. Modo lerminal
9
Compilador CCCS y Slmulador PROTEUS para Mlcrocontroladores PIC
"""'00 """"""
~~l::::8~g
~oo----I~o
""""'" """"'" ''''''''''' '''''''''' """"'" RD1~1
"""""
RD71PSP7
Figura 26. Union electrlca a traves de tlNmlnales
Mediante este modo tambien se pueden colocar las masas y alimentaciones del circu ito utilizando las opciones GrOill/d y Pawer (figu ra 26). De esta forma se puede finalizar el circuito (figura 27).
OSCl/CU(N
oo"",",<>rr
L-.L.J MO."'""",
"'0"'" ""'''''''''''R,A3.lAN3/YREF. IVol/ANl
"""'" '" '" """'"
""""",
""'''"'''
SWl
~~""15W~'"'''' R1
''''
Flgurit 27. Clrculto citbleitdo
Tan solo queda modificar las caracteristicas de los componentes que 10 requieran, por ejemplo modificando el valor de los componentes pasivos. Para ello, se selecciona un componente realizando una pulsacion con el baton derecho, aparece el menu contextual y se selecciona la opcion EDIT PROPERTIES; tambien se puede utillzar el modo edicion (figura 28) en el cual tan salo es necesario harer una pulsaci6n con el boton izquierdo sobre el componente; en este modo el cursor se convierte en una flecha (figura 29). Al ejerutar esta acci6n se abre la ventana de edicion donde se pueden cambia r las caracteristicas de los componentes (figura 30), por ejemplo la resistencia de 10K a 180 ohm. Tambien se puede editar dire<:tamente la referenda 0 el valor de un componente si la pulsaci6n se reallza encima de estos elementos.
10
1. 1515 de PROTEUS VSM
~
Flgur.. 28. Modo ediclon -
Figur.. 29. Cunor en modo edldon
-
.
fdJl Compon.m
.......
-
-
-
IH"\
--
. '1 11..... -"
I~
.111 :.... '" Oil
lRESIO
~,-
I
r_ _ i _ [ _ _ POI.-'
- I'll!)
...... ......
c--.~' JIII
-'-
Flecha: modo edici6n
I I I
'"
H~
'""'
I I I
-''-''''''jIOCUII.
[dill _ _ lOW.
Figura 30. Ventanil de edicl6n de un componente
Con esto quedaria finalizado el circuito electr6nico (figu ra 31). Pero en el caso de los sistemas basados en un microcontrolador aim quedan por modificar las caracteristicas del mismo microcontrolador.
U1
*
OSCI/CLKIN <>=CU<
j j
-
~RIll/ANI
"""',...,.
Ro\3IAN~'
"""""""'''"'''
......, '" "" '''''OM
•
'" '" ''''''''''
SW1
~~,t sw.".,,..,
~''''''
RCIJ(l'1050{T1CKI
RC1If1OS!iCCP2
R1 ,.,
RC2i'CCPl
'''''''KOO. 'c",,,•..,. """'00
"""""'"
--
,
RC71RXJOT
".~
Figur.. 31. EI esquema completo
11
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC En el caso de los microcontroladores, la ventana de edici6n aporia mucha informacion (figura 32). Tal vez 10 mas importante es que permite cargar en el micro controlador el archivo de programa (·.H£X) generado en la compilacion; tambien se puede modificar la frecuencia de reloj (por 10 tanto no es neccsario el usc de cristales extemos en la simulaci6n), cambiar la palabra de configuraci6n y olTas propiedades avanzadas.
'-',.......
,",,"'"
f'Io\IO ... fk"
B010N_' cd
~O>eI
-
Proo"""'~""""Wm! IUP~'
........
...... ....
~1I1
""-',-
641ii----
:ikHa
"""""
~
"mO ~-
' Hido M
- -,.....,..,...-
-"
1 :"';" AI
-
' HidoM
Figur.. 32. Venta"., de edid6n de un micro
1.3 Depuracion de los sistemas basados en PICmicro La caracteristica mas importante del PROTEUS VSM es la capacidad de depurar programas fuente de distinlos lenguajes de programaci6n. Ademas de aceptar el archivo de programaci6n 111 tel Hex (HEX), tambien admite ficheros IAR UBROF (039), ByfeCraft COD (COD), Microchip Compatible COF (COF) Y CrownlIifl Proton Pills (BAS). AI utilizar estos archivos se puede abrir una ventana de c6digo fuente Ilamada S OURCE CODE mediante la cual se puede seguir el programa fuente linea a linea de c6digo.
Ademas permite visualiza r elementos internos del PIC como son la memoria de prograrna, la memoria de datos RAM 0 la EEPROM, los registros especiales (FSR) y la pila (S tack). Ademas, el entorno PROTEUS VSM permite com pilar progra mas fuente en cOdigo ensamblador directamente. Para ello, se utiliza el comando SOUR CE (figu ra 33).
12
1. ISIS de PROTEUS VSM
------'-
'*
Oefne Code Generation IooIs ...
......
Setup ExterMi Text ~di1:or ...
1. bot"ra,asm Figurill 33. Generador d e c6dlgo de flc:heros ' ... enll:
En el caso del campilador CCS C, despues de compilar se generan, entre otros, los archivos ".HEX y ",COF, los cuales se pueden utilizar para trabajar con el cotoma PROTEUS VSM. Para ejecutar el programa desde ISIS se debe abrir 1a ventana de edidon del microcontrolador (figura 32) y en e1 item PROGRAM FILE se puede indicar el Fichera de c6digo fllente utiIizado. Ademas, en esta ventana se puede indicar la frecuenda de trabajo con la option PROCESSOR CLOCK FREQUENCY(debemos observar que para la simulaci6n no es necesario colocar elementos extemos de oscilaci6n en el PIC, tan 5010 haeen falta en caso de realizar 1a placa). En la opdon ADVANCED PROPERTIES podemos habilitar 0 configurar muchos mas elementos: configurar el wtJcthdog. habilitar avisos de desbordamiento de pila, accesos no correctos a memoria, etc. Una vez cargada el microcontrolador can el programa fuente, se puede proceder a la simulation del circuito empleando la barra de simulation (figura 34). Esta barra se compone de la opdon MARCHA, PASOA PASO, PAUSA Y PARADA .
II
II
• =I ~
Figura 34. Barra de slmuladon
Con la opcion MARCHA la simuladon se inicia (eJ baton se vuelve verde) y fundona en modo continuo. La simulacion NO es en tiempo real y dependeni de la carga de trabajo del PC. En la barra de estado se indica Ja carga de la CPU del PC (a mayor carga menos real sera la si mulacion) y el tiempo de ejecuci6ni este tiempo indica el tiempo que tardaria, en la re.1lidad, el circuito en realizar un proceso (por ejemplo esto implica que, dependiendo de la carga de trabajo de la CPU. un tiempo de 1 sen el circuito puede significar varios minutes de sim ulation).
IT ~ ! I~
I
/I
I• I
ANIMATING: 00:00.02.65 (CPU loadS" )
,
Figura 35. Barra de estado en la slmuladon
13
Compilador C CCS y Simulador PROTEUS para Mlcrocontroladores PIC La opcion STOP para totalmente la simulati6n mientras que PAUSE la para de forma momentanea permitiendo haeer usa de las herramientas de depuration. La opcion PASO a PASO permite trabajar en tramos de tiempo predefinidos y, ademas, permite utiliza r las herramientas de depuracion. Esta opcion esta ligada a la configuraci6n de la animation (figura 36): SYSTEM ~ SET ANIMATION OPTIONS ~ SINGLE STEP TlME donde se puede definir el incremento de tiempo que se desea que pase cada vez que se pulsa esta tecla.
s_s~
F,_I'4Soc:ud
''''''''''I*F,.., S.-.gltSt.,> T_ IoI ...
SPIC£T__
r.--
~
P;-Ps;-
......... ~ Show\l"'-'~""Ptobet? ,; S'-lo\Jir:StaIoolPn7 S'-W..... oII •
';;
..,Cdo..?
s,-"",..c......."",,_?
Figura 36. Set animation options
En este cuadra de dicilogo tambien se pueden eambiar los siguientes parametros: • FRAMES PER SECOND: num ero de veces que la pantalla de ISIS se refresca en un segundo (por defecto 20) . • TIMESTEP PER FRAME: indica el tiempo de simulaci6n por cada uno de 105 frames; 10 ideal es que sea el valor inverso del escogido en la opdon FRAMES
PER SECOND. ANIMATIONS OPTIONS: perrnite habilitar la visualizacion de las sondas de tensi6n y corriente, mostrar los niveles 16gicos en 105 pines, mostrar el nivel de tension en los cables mediante colores 0 mostrar Ja direcci6n de la corriente en los cables mediante flechas. VOLTAGE/CURRENT RANGES: permite determinar el umbral de tensi6n (±V) y eorriente para utilizar en la visualizacion de las correspondientes ANIMATIONS OPTIONS.
En este punto se puede simular (y animar) un sistema can el PICmicro (figura 37). Lo mas interesante de la simulacion con microcontroladores es la utilizad6n de las herramientas de depuracion_ Es decir, visualizar mediante ventanas las d istintas partes intemas del microcontrolador: memoria de programa, memoria de datos, pila.. etc. La mayor parte de estas ventanas sOlo se pueden visuaHzar dUJ"aIlte una PAUSA.
14
•
1. ISIS de PROTEUS VSM
Figura 37. Una slmulad6n en marcha
Desde el menu DEBUG (figura 38) tam bien se puede inidar la simulaci6n pero pensando en la depurad6n. Con la opd6n START/RESTAR DEBUGGING se puede inidar la simulaci6n pero hacienda una pausa para vet las distintas ventanas de depuraci6n. Tambien se puede ejecutar el p rograma directamente cOllla opcion EXECUTE, EXECUTE WITHOUT BREAKPOI NT 0 EXECUTE FOR SPECfF1ED TIME que permite ejecutar dire<:tamente un programa, ejecutarlo sin puntas de ruptura (en el caso de tenerlos) y ejecu tarlo en un tiempo concreto. ~l."" Y
1..,....
~_
H ~~
.....
~~
•" • • I·'
,.
------
~---~ u.._Dobug_
Figura 38. 101 me"~ DEBUG antes de I. slmulaci6n
,
15
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC Desde esta ventana tambien se puede reinicializar la memoria EEPROM del microcontrolador mediante RESET PERSfSTENT MODEL DATA. AI producirse una pausa, el menu DEBUG se modifica (figura 39) mostrando las correspondientes herramientas de depuraci6n .
... - . . . . . .-... fOUKi'nMb:1'1
"-"t_
~._&
...... ... ......
'"
.fI...,-!;
~""~'ino
", '"
~
-~ ~
"'"'''
.-l·_~oQ
}. OI((JIU'IoI.o",(ooIo. II,
1·1'ICO\J¥"'--UI
s.I'ICO'U ........ ·UI ~
PICO'Utloo_, - UI
Z.• 1C(JIU~j)M""""'-Ul .. PlCCPUPr<9_--.. -UI 2-FlC(JIU~
-III
Figura 39. EI menu DEBUG en una pausa
Estas herramientas son (figura 40): • SIMULATION LOG: Mensajes resultantes de la simuiacion.
• WATCH WINDOWS: Ventana de visualizacion de posiciones de memoria. Permite anadir la que el usuario desea ver. • PTC CPU REGISTERS: Muestra [os 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 la memoria de programa. • PIC CPU STACK: Muestra la pila.
16
1. ISIS de PROTEUS VSM
............ .. ........ ........... ............ ...... ,., ... ........... ............ ............ .. .. .,.,... . ... , ...... .. ,e " ,. " ...
"'
."
.. "' ...... co
"'
CPU DATA MEMORY
..... ,.
.... ,...
... " .......
,"
.. , ,''' ". -.""" ' , ~.-
:;;;:::;::~:: ::
"""" ,. ,
,," "., .,
CPU EPROM MEMORY
.. . ........ =-•._. .......... ............ . ............ .. ......... ... ........ .. . ........ .......... ...... ,... ". ,...... " .. " .,.:."';-.... .......... ::... ,.:: !:....ijQilij;t.ldiM*i@I;I' . ...... . ... ,,"......... ",... ,."" ..... ""J' -•._.. ............ ........ " ........ ",... "" ... "" ...... ,."" .. ,' ...... ,, .. " .... , ............. :r; " .... ,. .. " ........ " . .. • """"'''''"''"''' " , .. ,,"" .. ,. ·· .. "H .... " ,.." ::' .................. " " ",. " ., -, "" , ..,,,.,, " ,
0(" . . . . . . . . . . . . . . , . . . . . . .
-
• • j . .. . . . .
"
.......... "
,
-
".
•r .................... "
Fi gura 40. VentitnillJ de depuraci6n
La ventana WATCH WINDOWes la mas versatil puesto que se pueden anadir variables y modificar su visualizati6n. Al pulsar el boton deremo sobre la ventana se abre un menu contextual (figura 41). Can ADD ITEMS (" ame/address) se anade la variable a visuaJizar directamente can el nombre predefinido (figura 42) x en el PIC 0, en et caso de varia::.;;"'... ".."" ••. SW6 bles propias del programador, se pueden visualizar por direcd6n '''''''''''t (figura 43), donde se Ie indica el nombre, la direccion en hexadecima l, el tipo de dato (byte, word, etc.) y el formato de visualizacion (binario, decimal, etc.). El tipo de data y el fonnato tam bien se puede cambiar desde DATA TYPE Y " DISPLAY FORMAT.
- --,
-,
..-
-- .
'-_
....,
" " - _[.000' - 1
-~ -~
Figura 41 . Menu contextual d e WATCH WINDOWS
17
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC Can WATCH POINT CONDmON se pueden habilitar puntas de ruptura median~ te condiciones sabre las distintas variables (figura 44); se indica la variable, la mas~ cara de la condicion (NONE, AND, OR, XOR) Yel tipo de candidon (NONE, ON CHANGE, EQUALS, etc.).
_ _ ............. h _ _ l
Figur;t 42. Add by N;tme
J:i_
JPCCflJO... M_ ,U2
H_
ISAlJ()o\.
-,""''..... '''
~ 1r..rom---------3~· O"'W-
.'"
t' ASOt;S-.g (' W
<' ocatlltwaodf4¥eof <' o-ll,o,'otd J8 b,
<' ttj .... fIooI13~1 0 ~FkooII'bJo'e.Il
1iIotMiI8'..... ~ (' T""'lAj.....I ..... _ A ~1Ioo~'J,JN_.. _ . - .
•
~""'
___ ont_AU_ ... _
<' --
c--IGnC!wn;lo
1 .. 11,...
I
<' , ......
,, ~',.
Fi gura 43. Add by Address
IFOATA
tI__
J..-ND
:£) 3~
3
F1g..r. 44. Punto$ de rupt ..r ..
Hay una ventana de depuracion que 5010 se visualiza si se ha incarporada un fi~ mera COD 0 COF al microcontralador, se trata de la ventana CPU SOURCE CODE (figura 45). Can esta ventana se puede seguir la simulation linea a linea del archiva de codigo fuente. En esta ventana (tambien en el menu DEBUG) estan disponibles unas botones de control (figura 46).
18
1. ISIS de PROTEUS VSM
---- ","c1 ..""
VO,., ..... 1nO (
H7
llt9 ,U~
188
c~at'
k;
tn t
V , Xi
le'L1nltCj'
kbcLtnit( \' pc~Lb..JI"
ups (mUE);
lccLputcC"\ft.t. t o ... \n") ,
FigurCil 45.
u
venta"a CPU Source code
Figura ".los c:ontroles pilriil Iii slmulacl6n
'0 '0
Simulacion en modo continuo, no permite ver las ventanas de depuracion. Pennite ejecutar una instruction; si es una subrutina ejecuta directamente.
0
una fundon 1a
.~
Permite ejecutar una instrucci6n; si es una subrutina 0 una fundon entra en ella.
.~
Trabaja en modo continuo hasta que encuentra un retorno de cualquier subrutina.
'[l]
Trabaja en modo continuo has ta que se encuentra con un punta de ruptura.
'1 0.1
Habilita
0
deshabilita los puntas de ruptura.
19
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC Hay tina ventana de diagnostico que facilita la depuracion, almacenando los errores, mensajes de diagnostieo y avisos produddos durante el proceso de simulacion (figura 47). En la barra de estado (zona inferior del area de trabajo) se muestra un aviso (figura 48); con una pulsation en el aviso aparece la ventana de diagnosis.
Figura 47. Me nsaje$ de diagnostlco de la simulacion
Se pueden configurar las opdones de esta herramienta desde la opeian DEB UG~ CONFIG URE DISGNOSTIC (figura 49). En la ventana se muestran los componenles del esquema susceptibles de un diagnostico en la simulacian y las diferentes posibilidades de diagnostico y el tiempo de diagn6stico (figura 50).
a
4
Ii
Figura 48. MensaJes de la helTamienta de dla gnonlco
...
_
_~
,;.~
r-n ....... &_".,....
OIW"'~
,,: ~ ... \2
~.""5po
--_ --...-.
.....
Figura 49. Lot configufiKlon de d lagnOstlcos
20
]
1. ISIS de PROTEUS VSM
I'oeo~
• ID-SYSTl ~ IISISIPRDSPlC[] • •
~ WllfDRD..()QO.B~P IU!§) DS2405 IUl1
•
DSl40'S 1U21
• I
DSZ405 lUll PlC1GF£2BA (uSI
oJ PIop_1.J>odor
O_E.-",
""''' ' ' 'I' 'SFJl _ _ A_E....ru I SIoopI'W'" E-. ~l~ • .....M:cMogI_M_ PSPWOItJo Iu.,.I_LO'I'd
•
Figura 50. Opclones de conflguraci6n
Tras la simulacion aparecen los diIerentes resultados del analisis; en e1 item SO URCE aparece indicado el dispositivQ fuente del analisis y tras una pulsacion se puede acceder a el (figura 51).
.. Figura 51 . Resultado del dlagn6stlco
EI listado de nodos y patillas se pueden encontrar con [a ayuda del DESIGN EXP LOR ER (a esta opci6n podemos acceder a traves de distinlas apdones: camando DESI GN, boton derecho, etc.). En su ventana de tTabaja se muestran lodos los nodos y patillas que forman el cirmito (figura 52).
21
Compilador CCCS YSimulador PROTEUS para Microconlroladores PIC
.. -_ --.--- 11--"....
.......
~-
r..~.-- . ,
~--
~
......
. ~-
~-
___ hot
_
£I~""'"
....
__..• • • • .-...-.-- -:-:-....~
y
~
.-..-.-H5 .-'-'-
Figu,OiI 52.
22
u
_. .------!:..
ventanOil Design Explore,
-_. -_.
2. Compilador CCS C
Capitulo 2 Compilador CCS C 2.1 'ntroduccion El Compi/ador C de CCS ha sido desarrollado especificamente para PIC MCU, obteniendo la maxima optimizacion del compiJador can estos dispositivos. Dispone de una amplia lihreria de funciones predefinidas, comandos de preprocesado y ejemplos. Ademas, suministra los controladores (dri!1trs) para diversos dispositivos como LCD, convertidores AD, relojes en tiempo real. EEPROM serie, etc. Las caracteristicas generales de este compilador y mas informacion adicional se pueden encontrar en ta direccion http://www.ccsinfo.com. Un compilador convierte el lenguaje de alto nivel a instrucciones en cOdigo maquina; un cross-compiler es un compilador que funciona en un procesador (normalmente en un PC) diferente al procesador objeto. EI compitador CCS C es un crosscompiler. Los programas son editados y compilados a instrucciones maquina en el entorno de trabajo del PC, el c6digo maquina puede ser cargado del PC a1 sistema PIC mediante elICD2 (0 mediante cualquier programador) y puede ser depurado (puntos de ruptura, paso a paso, etc.) desde el entomo de trabajo del Pc. El CCS C es C estandar y, ademas de las directivas estcindar (#include, etc.), suministra unas directivas especificas para PIC (tldevice, etc.); ademas induye funciones espedficas (bil_sctO, etc.). Se suministra can un editor que permite controlar la sintaxis del programa. NOTA
En el manual de CCS se da mucha mas informad6n de la que a continuad6n se va a dar. En este capitulo sOia se descrihiran los elementos mas basicos y esenciales para comenzar a programar.
23
Compilador CCCS y 5imulador PROTEUS para Microconlroladores PIC
---
2.2 Estructura de un programa Para escribir un programa en e can el ees C se deben tener en cuenta lma serie de elementos basicos de su estructu ra (figura 1). DIRECfIVAS DE PREPROCESADO: controlan la conversion del programa a codigo maquina par parte del compilador. PROGRAMAS 0 FUNClONES: conjunto de instrucOones. Puede haber uno o varios; en cualquier caso siempre debe haber uno definido como principal mediante la inclusion de la l1amada maillO . • INSTRUCCIONES: indican como debe comportar el PIC en todo momenta. COMENTARIOS: permilen describir 10 que significa cada linea del programa.
-- ----
\1'_ ... _,_,
-.~
...
t··~ .;.,.._- ":::..._
_4_ ."....- -=-
Pll' .. dooloy .1ocl<
,,- •
• "iil'-T"-
~ Directivas
.~,,'_a
.-______ Funcion
•
nrO
ve.O ' ••
..
.... ....
...
.u.pu••b1t Pl".,O
OU'P'J'_bU'III.IO
_..
.n_~
. ...
• ..
U)(n.~.u.
OTO
..
• _ - - - - - Funcion principal
•• '''P.t1. ."_o J.T<;(:_IJITlAAo\l, J.t<:C_DN." •• , 11••• 0
• ...bI. .".... ~.
IX.
nXlJlll
.""'".::""0",.," qlobal
~
- - - Instrucciones
~ Comentarios .".""
._-
-
Figura 1. Estructura bl'islc:a de un programa
2.3 Tipos de datos ces e acepta los siguientes tipos de datos: Tipo
Tamano
IntI Short
1 bit
24
Rango 0"
Description Entero de 1 bit
2. Compilador CCS C Tipo
Tamano
Rango
Descripcion
8 bit
Oa 255
Entero
16 bit
oa 65.535
En lero de 16 bit
Int32
32 bit
oa 4.294.967.295
Entero de 32 bit
Float
32 bit
±1.175x1(tl8 a ±3.402xl0·JI!
Ch"
8 bit
Oa 255
Cankter
Void
-
-
Sin valor
8 bit
·1 28 a +127
Signed Int16
16 bit
Signed lnt32
32 bit
-32768 a + 32767 _2 31 a +(2 31 _1)
Int Int8 Int16 Long
Signed lnl8
Coma fI otante
Entero con signo Entero largo can signa En tero 32 bit con signa
2.4 Las constantes Las constantes se pueden especiBcar en decimal, octal, hexadecima l a en bina rio: 123
Deci mal
0123
Oct, l (0)
Oxl23
Hexadecimal(Ox)
ObOl0010
Binaria (Db)
'><'
Ca r.kter
'\010'
Caracter octal
'\xAS'
Car
Ademas, se pueden defin ir constantes can un suBja: Int8
I27U
Long
80UL
Signed INTI6
BOL
Float
3.14F
Ch",
Con comillas simples 'e'
Tambien se definen caracteres especiales, algunos como: \n
Cambia de linea
\r
Retorno de carro
25
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC \t
Tabuladon
\b
Backspace
2.5 Variables Las variable se utilizan para nombrar posiciones de memoria RAM; se deben declarar, obligatoriamente, antes de utilizarlas; para ello se debe indicar el nombre y el tipo de dato que se manejara. Se definen de la siguiente forma: TJPO NOMBRE_ VARIABLE (",VALOR INICIALJ TfPO hace referenda a cualquiera de los tipos de datos vistas en el pun ta 2.3. EI NOMBRE_VARfABLE puede ser cualquiera y el valor inicial es opcional. Veamos
unejemplo:
Las variables definidas en un programa pueden ser de tipo LOCAL a GLOBAL. Las variables locales solo se utilizan en la funcion donde se encuentran declaradas; las variables globaJes se pueden utilizar en todas las fundones del programa. Ambas deben declararse antes de ser utilizadas y las glabales deben declararse antes de cualquier funcion y fuera de elias. Las variable globaJes son puestas a cera cua ndo se inicia la fundan prindpaimai,,(). 'include <16f876 . h> 'USE DELA Y (CLOCK-4000000) II Variable g;oblll in t 16 counter; void FUNCION(vOidJ ChilI K. kant .. ' 0 ';
II Vllciabl e .s loclIles
void Mllin ( )
intS t emp;
II Va ri ab le l ocal
Las variables pueden ser definidas con: • AUTO: (usada por defecto. no hace falta que se indique) donde la variable existe mientras la funcian esta activa. Estas variables no se inicializan a cera. Su valor se pierde cuanda se sale de la fundan.
26
2. Compilador CCS C • STATIC: Una variable local se activa como global, se iniciaJiza a cera y mantiene su valor aJ entrar y salir de 1a fundon . • EXTERN: Permite el uso de variables en compilaciones multiples.
2.6 Operadores 2.6.1 Asignaclon
~
Asignacion de resta (x--y es 10 mismo que x- x-y)
".
Asignacion de multiplicaci6n (x"'''')' es 10 mismo que x=x"'y)
/.
Asignaci6n de division (xl-yes 10 mismo que x-x/y)
%::
Asignaci6n del resto de la division (x%=y es 10 mismo que x=x%y)
<<=
Asignaci6n de desplazamiento a Ja izquierda (x«"yes igual que x"'"x«y)
>>"
Asignaci6n de desplazamiento a derecha (x>>=y es igual que x=x»y)
&:
Asignaci6n AND de hits (x&-y es 10 mismo que x-x&y)
I·
Asignaci6n OR de hits (x l=y es 10 mismo que X"'X Iy)
"=
Asignacion OR EXCLUSIVA de bits (x"-y es 10 mismo que x-x"y)
Asignaci6n de suma (x+=y es 10 mismo que x-x+Y)
2 .6.2 Aritmetlcos +
Suma
-
Resta
•
Multiplicacion
/
Division
%
Modulo, resta de una division entera
-
Incremento
++
Decremento
sizeof
Determina el tamana, en bytes. de un operando
En las operaciones de decremento e incremento, en funcion de la posicion del operadar, se ronsigue un preincremento (++A) 0 un postincremento (A++).
27
Compllador CCCS y Simulador PROTEUS para Microcontroladores PIC
b-4°0l++;
, b-4 Y 01-4;
,-, b-4°++3;
2.6.3 Relaclonales <
Menor que
>
Mayor que
,..
Mayor 0 igual que
<-
Menor iguaJ que
=
Igual
!.
Distinlo
?:
Expresi6n condicional
2.6.4 Loglcos !
NOT
&&
AND
II
OR
2 .6.5 De bits
-
Complemento a 1
&
AND
,
OR EXCLUSIVA
I
OR
»
Desplazamiento a derechas
«
Desplazamiento a izquierdas
2.6.6 Punteros &
Direcci6n
•
Indirecci6n
->
Puntero a estructura
28
_ _ _ _ _::. 2. Compllador CCS C Orden de precedencia de
\05
operadores:
Expresiones en orden de precedenda descendente (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
expr--
expr>=expr
expr&expr expr"expr expr I expr expr && expr expr I I expr
expr ? expr:expr Ivalue .. expr
Iva\ue+=expr
Ivalue-=€xpr
lvalue"~xp r
lvaJue/=expr
Iva\ue%=expr
Ivalue>>=expr
Ivalue«=expr
lvalue&=expr
Ivalue"=expr
Ivalue I"'expr
expr, expr
2.7 Funciones Las funciones son bloques de sentencias; todas las sentendas se deben enmarcar dentro de las funciones . AI igua\ que las variables, las funciones deben definirse antes de utiJizarse. Una funcion puede ser invocada desde una sentencia de otra funcion. Una funcion puede devolver un valor a la sentencia que la ha llamado. EI tipo de dato se indica en la definicion de la funcion; en el caso de no indicarse nada se entiende que es un int8 y en el caso de no devolver un valor se debe espedficar el valor VOID. La funci6n, ademas de devolver un valor, puede recibir parametros 0 argumentos.
29
Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC La estructura de una funcion es:
Nombre_Fllncion
(tipt:l p",r;lml ,
fJ
(sentencias) ;
float trunca
(noat a)
f
flOllt b ; b-noor(a} ; a-a-b ;
a-.,'100 ; a-floor (a) ..
"'-0'1 "0 . 01 , .. -bta ; return (a) ..
La forma de devolver un valor es mediante la sentencia RETURN: return
(expresionj ..
return e x presion;
Donde expresion debe manejar el mismo tipo de dato que el indicado en la definicion de la fundon. En el caso de no devolver nada Be finaliza con RETURN, al encontrar esta sentencia el compilador vuelve a la ejecucion de ta sentencia de Uamada. Tambien se puede finalizar la funcian sin RETURN, tan s610 con la Have de cierre ")". Las funcio nes pueden agruparse en ficheros de Iibrerias , que se pueden utilizar mediante la directiva tinell/de .
2.8 Declaraciones de control Las declaraciones son usadas para controlar el proceso de ejecuci6n del programa. Las que admite CCS son: • If-Else . • While.
_ _ _ _ _.c2:.:.. Compilador CCS C
•
•
Do-While. For.
• Switch-Case. • Refilm. • Break, Conti/we YColo. 2.8.1 IF·ELSE Con la ayuda de IF-ELSE se pueden tamar decisiones. i r (ex pres16n)
sentenci"_ 1 .. {else
sentencia_2 ,- J
NOTA
Los elementos que se encuentran entre corchetes { J son opcionales. Primero seevalua 1a EXPRESI6Ny si es cierta (TRUE 0 1) ejecuta la SENTENClA_l, en el caso contrario (FALSE 0 0) ejecuta la SENTENC1A_2.
Pueden anidarse los IF-ELSE dando lugar a los ELSE-IF; esto permi te tamar decisiones mUltiples. i f (expresion_1J
sentencia 1 ; {else i f (exp:;esi6n_ 2J sentflncia_2 ; ) [else
En este caso las EXPRESIONES se evaluan en orden, si algu na de elias es cierta la SENTENCIA asociada a ella se ejerutani y se termina la funci6n. En caso contrario
se ejecuta la SENTENCIA del ELSE. En ambos casos si existen vadas sentencias para ejecutar se deben utiliza las Uaves { I:
31
Compilador CCCS VSimulador PROTEUS para Microcontroladores PIC
if (exp:;esionj {
setltencis_l; selltellcid n; (else
sell tenci,,_ fl:
11
Ejemplos:
c:J -<2> ~{~
IF (A==O) 6= 10; ELSE C=5;
./
$
r
IF (AI=1) 8=10; ELSE C=5;
./
IF (A>10) (IF (A>20) 8=5; ELSE 8=15;)
Il 32
2. Compilador CCS C
IF (A>10) (IF (A>20) 8=15;) ELSE 8=5;
••
• 2.8.2 SWITCH Switch es un caso particular de una decision nlllltiple s,1i tch
(expres16n)
C4se constante 1 : lJentencias :
bre4k : ~4se
cons t ante 2 :
sentenciaS ; bre4k ; ~tault :
entencias ; 1
E\-a1ua la expresi6n y en orden a la CONSTANTE adecuada realiza las sentencias a30Ciadas. Si ningwlO de los CASE corresponde a la CONSTANTE se ejecuta DEr AULT (este comando es opdonal). EI romando BREAK provoca la salida de SWTTCH, de 10 contrario se ejeruta el ~lguiente
CASE.
NOTA
'0 pueden existir dos CASE can la misma CONSTANTE.
33
Compilador CCCS YSimulador PROTEUS para Microconfroladores PIC Ejemplo: ,-----------------------~
<2> -0 <2>--1 ~2 ~, "" <2>- 0 '
Switch (A) (
case 0: 8=1 ;
""
break;
case 2: 8=2; break;
case 3: 8=3; break; default: break;
)
•
• 2.8.3 FOR
Se usa para repehr sentencias. for finicializadon ; condici6n de: finlilizac16n
incre!llf:'nto J
sentencias :
En las expresiones del FOR la inicializacion es una variable a la cual se Ie asigna un valor inicial con el que controlar el bude. La condicion de finalizacion sirve para evaluar ANTES de ejecutar las sentencias si es cierta 0 no, en el caso de ser derta se ejecutan las sentencias y en caso contra rio se sale del FOR. Por ultimo, 1a expresion de incremento a decremento modifica 1a variable de control DESPUES de ejecutar el bude. NOTA
Se pueden anidar budes FOR utiJizando distintas variables de control.
34
2. Compilador CCS C Si se ejecuta la siguiente exp resi6n se consigue un BUCLE SIN FIN: For(
;
}
sentencias;
Ejemplo:
For (N=1;N<=10;N++) ( Printf("%u",N); }
'-
2.8.4 WHILE I DO·WHILE WHILE se utilizil para repetir sentencias. while
(expre~!on)
s ...ntencias ;
La expresi6n se evalua y la sente ncia se ejecuta mientras 1a expresi6n es verdadera, cuanda es falsa se sale del WHILE .
35
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC DO~WHrLE se diferencia del WHILE y del FOR en la condici6n de finalizaci6n, la cual se evalua al final del bucle, por 10 que las se.ntencias se ejecutan 011 menos una vez.
Do .sentencia.s ; while (expre.sionJ;
Si se ejecutan las siguientes expresiones se consigue un BUCLE SIN FIN: While (1) sentencias ;
Do
I sentencias : While
(1)
Ejemplos:
•
~
~I
.
""
[ ] I. 36
While (N)S && M<10) (
)
'-
2. Compilador CCS C
-
[. ,]
Do
(
•
A=1 :
6=2:
) While (N>5 && M<10):
¢
M<~o?
-----
NO
• 2.8.50tros Return: se emplea paTa devol veT datos en las funciones. Break: permite salir de un bude, se utiliza para While, For ,Do y Switch.
Goto: provoca un salta incondidonal.
2.9 Comentarios Los comentarios en eJ programa facilitan Ja compresibn de las distintas expresiones tanto para el programador como para quien tiene que interpretar dicho programa. No afectan a la compilacion por 10 que pueden ser tan extensos como el programadar quiera. Se pueden colocar en cualquier parte del programa y con dos formatos: • Utilizando II. Al colocar estos signos se comienza el comentario y finaliza en el final de la linea. II Comentario que teI'minaI'll 41 fWlll de fUlta linea .
.. Utilizando I"' y "'I. Se debe utilizar al initio y al final de comentario, pero no pueden repetirse dentra del mismo comentario.
I ' Este comentllcio no flnaliza
~I
31
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
2.10 Directivas y funciones (Preprocessor commands y built·ln functlonsl 2.1 0.1 olrectiva. Las directivas de pre-procesado comienzan con el simbolo # y continuan con un comando espedfico. La sintaxis depende del comando. Algunos comandos no permiten otros elementos sint
Cualificadores
IdentiRcadores
Especificacio n Dispositivos Librerias predefinidas
Control de memoria
Control de compilador
;NOLIST
:EL5E
; IFDEF id
IIPRAGMAcmd
tENDlF
lUST
.rUNOEF id
,fERROR
;INCLUDE "FILENAME"
IINUNE
iINT_GLOBAL
tINT_DEFAULT __ DATE __
:lNT xxx LlNE__
__DEVICE__ FILE
RrOS
tlF expr
--
--PCB-PCM
IISEPARATE
-- PCH-__TIME__
-
FILENAME
tTASK
WSERTOS
WEVICECHIP
#10 "filename"
"FUSES options
#iD CHECKSUM
#10 NUMBER
,SERIALIZE
;USE DELAY CLOCK
iUSE FlXED_IO
.fUSE RS232
WSEFAST_IO
;USEI2C
#USESPI
;USE SfANDARO 10 MSM
#BYTE id-id
IIROM
; BIT id-id.const
,fENOASM
~TYPE
iBIT id-(onst.consl
#F1LL_ROM
IIZERO_RAM
~BUILO
.LOCATE id-const
;BYTE id-const
tRESERVE
~CASE
"OPTn
IORG
llGNORE WARNINGS
;PRIORITY
A 10 largo del presente libro se iran viendo varias directivas en su ambito de aplicadon particular.
38
2. Compilador CCS C Como ejemplo se pueden comenlar: #DEVICE chip, permite definir el PIC con el que se realizar;i la compilaci6n.
'davic" PIC16F84
'FUSES options, la eual permite definir la palabra de configuraci6n para programar un PIC. Por ejemplo, en el PIC16F84 las opciones posibles son: LP, XT, HS, Re, NOWDT, WDT, NOPUT, PUT, PROTECT, NQPRQTECT.
Idevice PIC16F84
XT,
#{uses
NOWDT, PUT, NOPROTECT
gINCLL"DE "filename", permile induir fichero en el programa.
'include <15FB4 . h>
t fuses
XT, HOWDT,
PUT , NOPROT£CT
#USE DELAY (CLOCK=SPEEDt permite definir las freeuencia del oseiJador del PIC, el compilador 10 utiliza para realizar c.lleulos de tiempo. Se puede utilizar M,
MHZ, K Y KHZ para definir la freeuenda. #INCLUDE tU!;e delay (ci ock-4000000j
IASM Y IENDASM, permiten utilizar e6digo ensamblador en el programa en C. Se utilizan al inicio y at final del bloque ensamblador. #asm
bsf TATUS , RPO IIIC>vlw
Ox 8
movwf
PORTil
bef STATUS,RPO #endIJsln
39
Compilador CCCS VSimulador PROTEUS para Microcontrotadores PIC
2.10.2 Funciones CCS suministra una serie de funciones predefinidas para acceder y utilizar el PIC y sus perifericos. Estas funciones facilitan la configuration del PIC sin entrar en el nivel de los registros especiales. Las funciones se dasifican por bloques funcionales.
FlS RS232
FlSBU5 SPI2-HILOS
ASSERT( )
GETCH()
PUTq )
FGETC( )
GETCHAR( )
PUTCHAR( )
FGETS( )
GETS{ )
PUTS()
FPRLNTF( )
KBHIT()
SET UART SPEED() SETUP UART()
FPUTC()
PERROR( )
FPUTS( )
PRINTF( )
SETUP SPI()
SPI DATA IS tN()
sri
sri
XFER()
GET~TRlSx( )
ElS D1SCRETAS
INPUT~K()
OlITPlIT_ FLOAT( )
SET_TRIS_B( )
INPlIT( )
Il\.TPlIT SfATE() OVTPlIT_G( )
SET TRIS C()
INPlIT A()
INPlIT x()
OUTPUT H()
SET TRiS D()
INPlIT_B( )
OUTPUT_A()
OUTPlIT_ HIGH()
SET _TRIS_E()
INPUT C()
OUTPUT_B( )
OUTPUT.]()
SET TRIS F()
INPUT D()
OUTPUT_BIT( )
OUTPUT K()
SET TRIS G()
INPUT E()
OUTPUT_CCl
OUTPUT LDWO
SET TRIS H()
INPlTf]( )
OUTPUT_DO
OUTPUT_TOGGlE( )
SET_TRIS..J()
INPUT_G( )
OUTPUT_DRIVE()
LLUPSO
INPUT H()
OUTPUT_E{ )
PORT B PUllUPS()
INPUT..J( )
OUTPUT_F()
SET TRIS A()
PORT_A_PU-
SET_TRIS_K()
psp INPUT FULl()
psp OVERFlOW()
PARAlELO ESCLAVO
PSP_OUTPUT_FUll( )
SETUP_PSP( )
12C WRlTE()
12C SlaveAddr()
12C rSR STATEO
12C POLL()
12C START()
12C READ()
12C STOP()
CLEAR_rNfERRUPT( )
GOTO_ ADDRESS()
RESET_CPU( )
DISABlE_INTERRUPTS( )
INTERRUPT_ ACfIVE( )
RESTART_CAUSE( )
CONTROL PROCESOS
WRITE()
READ()
E/S PUERTO
fiS BUS I2C
40
I SPI
2. Compilador CCS C
CONTROL PROCESOS
MANEJO BIT~ BYTE
OPERADORES MAT.
CESrA..NDAR
TENSI6N DE REF ERENOA
ENABLE_INTERRUPTS( )
JUMP_TO_ISR
SETUP_OSCILLATOR( )
EXT_INT_ EDCE( )
LABEL ADDRESS( )
SLEEP()
Gr.TENV( )
READ BANK()
WRITE BANK()
BIT CLEAR()
MAKES( )
MUL()
BIT_SETe)
MAKE16( )
ROTATE LEIT( )
SHIFT_ RIGHT()
BIT_TEST( )
MAKE32()
ROTATE_ RlGHT( )
SWAP( )
AIlS{)
COSH( )
LABS{ )
SIN()
ACOS( )
DIV()
LDEXP( )
SINHII
ASIN()
EXP()
LDlV( )
SQRT()
ATAN()
FABS( )
LOG()
TAN() TANH()
ATAN2( )
FLooR( )
LOGlO( )
CEIL( )
FMOD()
MOD'I)
COS{)
FREXP()
POW()
SETUP_VREF( ) SETUP_LOW_VOLT_DETECT()
NDCONVER· SET AOC CHANNEL() SI6N SETUP ADC() READ_AOC()
CARACfERES C EsrANDAR
TIMERS
SH1FT LEFT()
SETUP AOC PORTS()
ATOF( )
ISLOWER(char)
STRCMP()
STRRCHR()
ATOi( )
ISPRlNT(x)
STReOLL( )
STRSPN()
AT0132()
ISPUNCT(x)
SfRCPY( )
STRSTR( )
ATOL( )
ISSPACE{char)
STRCSPN( )
STRTOD( )
ISALNUM()
ISUPPER(cllar)
STRLEN()
STRTOK{)
ISALPHA(char) ISXDIGIT(char)
STRLWR( )
STRTOL()
ISAMOUNG()
ITOA()
STRNCATO
STRTOUL( )
ISCNTRL(x)
SPRINTF( )
STRNCMP( )
STRXFRM( )
ISDIGIT(char)
STRCAT( )
STRNCPY( )
TOLOWER()
ISCRAPH(x)
STRCHR( )
STRPBRK()
TOUPPER( )
GET TIMERO() SET RTCC()
SETUP TIMER 0 ()
GET TlMER1() SET TIMERO()
SETUP T IMER 1 ()
GET TlMER2() SET TIMER1()
SETUP TIMER 2 ( )
GET TIM£R3() SET TIMER2()
SETUP TIMER 3 ( )
41
CompiJador C CCS YSimuJador PROTEUS para MicrocontroJadores PJC
TIMERS
MEMORIAC ESTANDAR
CAOENAS ESTANDAR
GET TlMER4( ) SET TIMER3()
SETIJP TIMER 4 ( )
GET TIMERS() SET TIMER4()
SETUP TIMER_5 ()
GET TIMERx() SET TIMERS()
SETUP WDT ()
RESTART WDT()
SETUP COUNTI:RS()
CA LLOC( )
MEMCMP()
OFFSETOFBIT{ )
FREE( )
MEMCPV()
REALLOC( )
LONG]MP()
MEMMOVE()
SE1]MP()
MALLOC( )
MEMSET()
MEMCHR()
OFFSETOF( )
SfRXFRM( )
MEMCHR()
MEMCMP()
STRCAT( )
STRCHR( )
STRCMP()
STRCOLL()
STRCSPN()
STRICMP()
STRCOLL()
STRCSPN()
STRICMPO
STRLEN()
STRLWR( )
SfRNCAT()
STRNCMP( )
STRNCPY()
STRPBRK()
STRRCHR( )
STRSPN()
SfRSTR()
STANDARD STRING FUNQ'ION() SET POWER PWM OVERRIDE() SETUP CCP2()
MODULO CCP
SET POWER PWMX DUTY()
SETUP CCP3()
SET PWMI DUTY()
SETUP CCP4()
SET PWM2 DlfrY()
SETIJP CCP5()
SET PWMJ DlITY()
SETUP CCP6()
SET PWM4 DlITY()
SETUP POWER PWM()
SET PWM5 DUTY()
SETUP POWER PWM PINS()
SETUP CCP1()
EEPROM INTERNA
CEsrAN DAR (ESPEClALES) RETARDOS
42
ERASE PROGRAM EEPROM()
SETIJP EXTERNAL MEMORY()
READ_CALIBRATION( )
WRITE_CONFIGURATION MEMORY()
READ EEPROM()
WRJTE EEPROM()
READ EXTERNAL MEMORY()
WRITE EXTERNAL MEMORY()
READ PROCRAM EEPROM()
WRITE PROGRAM EEPROM()
READ PROGRAM MEMORY()
WRITE PROGRAM MEMORY()
BSEARCH( )
SRAND()
QSORT()
DELAY uS()
DELAY MS()
RAND()
DELAY CYCLES()
Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC .PJT: Amero de proyecto; contiene tada la informaci6n relacionada con el p royecto.
• .lST: muestra un listado con el cooigo C y el cooigo ensa mblador asociado para cada linea de codigo . .SYM: muestra las posiciones y valores de los registros y las variables del programa. • .STA: muestra lma estadfstica de la utilizacion de la RAM, ROM Y la PILA. • .TRE: muestra un arbol del programa donde se especifican las hmdones y sus lIamadas, con la ROM y RAM usada en cada una de elias . .HEX: fichero estcindar para la programacion del PIC. • .COF: fichero binario que induye el cooigo maquina y la informaci6n para la depuracion correspond iente.
2.12.2 Entorno de trabajo EI e ntomo de trabajo del ecs e.n pew y PCWH permite com pilar y tambien su ministra u na gran variedad de hcrramientas auxiliares. En la Figura 2 se muestra los d istintos elementos basicos del entomo de trabajo. Existen dos formas de iniciar una sesi6n: abriendo un fichero de c6digo fuente 0 creando un proyecto.
I
I
<
Comando de maneJo . de flcheros .
"''I! '
Pesla!'!a
..,
Programa
)1
,
1 __.....
r
"".
I
- ,..... . --..... . .. .M"'_" ........ ....... ri .. .. _
..._
/: ......
g§[::~:.
"
Barr. de Ventana!> aUlliliares
.. "._.
..
IZONA DE C6DIGO I
....... M . . . . . . .
... -
I Macr;f
, -~ -
. ,.... , -
_--_..
.
Barra de InformacIOn
Figura 2. Entorno de Tr.. bajo
44
I
..
-. - - ~ - --
~~.,
•
Barra de
I
- j SubComandosr
Barra de estindar
.....
:::--:::::':'';;..'"-'''
---.-
,
.. .- -----------I
_ .... .... . . ,. . _
bX
"""':::"'----,-----,
_ . :;:-..:
~
ISarra de. Comandos ~
'
•
2. Compitador CCS C Para abrir un fichero fuente directamente se realiza una pulsaci6n sobre el icona para el manejo de ficheros (figuIa 3) y aparece un menu donde podemos crear, abrir, guardar a cerraI ficheros. Can el comando NEW podemos crear un fichero fuente, un proyecto, un fichero RTF a un fichero de diagrama de flujo. "';::"
-~.-·Itr~:
<=' . . _-
_M
J~
-..,.,.._ ..... '
~~---.-~
..."-.
JII-'"
-
~
....
,l."
Flgur.. J. Los menlls para el manejo de los "(heros
Con la opci6n NEW ~ SOURCE FILE, el programa pide el nombre del nuevo fichero y crea una nueva ventana en blanco donde podemos empezar a escribir (FiguIa 4) .
.'
•
0-- - , - ... ,.- _ ...- ......
-.
.l. '
.'
Co.
'1 ' :.l. .:; ' . . ....
0
......
I.
... FlgloIril 4. Flchero 'uente nuevo
45
Compilador CCCS y Simulador PROTEUS para Microconlroladores PIC Si se ejecuta el comando PR OJECT WI ZAR D, tras pedir el nombre del nuevo p royecto aparece la ventana de configuracion con dos pestanas, una para configurar las distintas opdones que se muestran en la barra de la izquierda (figura 5) y otra donde se muestra el cooigo resultante de [a configuration (figura 6). Recorriendo las distintas opciones (general, communicatiolls, etc.) se llega a obtener el cooigo de configuracion deseado (figura 7), tras 10 cual ya podemos empezar a escribir el resto del codigo del programa. Debemos observar como se induye un fichero de cabecera *.11 donde se encuentra la configuracion del disposi ti v~ (figura 8).
.....
-
,.
--
--'--"
,
,-- -' --....._. -
""",",,_~1 . &
_Ie-
~~=
-----~-
-.-
r•. _ _ ..... _ ...
~-
--=~-
Figura 5. Vrntana d e configu,acion de 1...5 opdone.5
---
'''''''''_1loo'_.. _ruW'! ,_~q
-'--
1_ .... ' ',~
...
=-... ~M
Flgur.. 6. Ve ntana de configuracion con r l cOdigo f'e.5ultantr
46
_ _---=2", C "o:.. mpilador CCS C
,,,
Me:', cea\ IIruoeb"'_I. h"
Lee c _t.h h
,
, •
vo~d
6
9
.... in
atl:cup_...:Ic_p.orta lHO
10
•• t-lIp_ad<: .lJ)C_CLOCK_ INTERN.lL
11
" .. CUll_Sill r.u.S!
12 13 1'1 15
8e""p_t.1-= .. _0 RTCC_lNTEIltUL RTCC_DIV_l Tl_D I$l..8U:O
!I .. t."p_t.~r_l
!lct.up_t.UD!:r_2 T2_DlSlEILED
le
"" " "
Flgur", 7. EI cOdlgo despues de una conflgl.l,iltcl6n
·· ,
· 1
'0
"
12
" "" H
.,..
a~
-~
..a.aQftCT
~~
ItOCPo
1I'DD1IW
Figura 8. EI "(hero de cabecera con la con"guracl6n del PIC
2.12.2.1 EI primer programa La opci6n del PROJECT WIZARD es muy comoda pero para comenza r a trabajar con CCS C se recomienda inidar los ficheros de c6diga fuente directamente hasta que el programador adquiera los conocimientos basicos para manejar esta opd6n. Asi pues abrimos un fichero fuente nuevo donde se escribira un programa para encendef y apagar un led durante 1 segundo. Elled se conectani a la patilla RB7 de un PIC16F876 trabajando a una frecuenda de 4 MHz. En los siguientes lemas se intn explicando cada una de las senlendas ut"ilizadas, ahara [0 interesante es manejar el entorno de trabajo y no tanto 10 que hace cada sentenda. La primero es utilizar el fichero de cabecera donde se especifican las caracteristicas del mkrocontrolador PIC:
47
CompiJador C CCS YSimulador PROTEUS para Microcontroladores PIC
linclude
Este fichero 10 suministra CCS y 10 incorpora en el directorio de dispositivos (devices) . El eompilador tiene una ruta de busqueda para los fieheros #illcfude; esta ruta
se puede modifiear en el casa de querer induir ficheros que Sf' encuentren en otros directorios. Can el comando OPTIONS ~ PROJECTS OPTIONS ~ fNCLUDE FILES se accede a una ventana (figura 9) donde Sf' puede anadir, eliminar a modifiear el orden de busqueda de los ficheros #i ndude (tam bien podemos observar que se pueden configurar los ficheros de trabajo -FILES- 0 los ficheros de salida - OUTPUT FlLES-) .
......
---.. ---. - - -. -- - -- .......... _.-
1.i:E!"-..6:<.-.'
!
•
......
..
:
, ..
I
~
.~-
.....
_
• ••
l!l1ioowt
-0
'-
.
-'~'--
... .
•.
. "".
FJo s-...a....
t!?J!!!'t'~
t "'!'~
+-'". ,----;;;;;;-:;-,
-'--_.._. _- • .--
Figura 9. Ruta de b~squedil de los ficheros .include
A continuacion se definen, mediante las correspondientes directivas, la velocidad del PIC y el puerto utilizado. Es importante definir la velocidad inmediatamente despues del PIC ya que muchos drivers (como el LCD) la nccesitan para eonfigurarse. luae delay (clock = 4000000) , byte puerto_ b _ 0,,06
Ahora se puede describir la funcion principal MAfN (). Los cambios de color, letra, etc., se puede configurar desde la opcion OPTIONS ~ EDITOR PROPERTIES ... AI escribir el programa (figura 10) podemos observa r como apa rece un aTbol de funciones a la izquierda de la ventana de programa; esto pennite expandir 0 contraer las fundones y dedaraciones de control para optimizar la visualizacion de los programas mas complejos (figura 11).
48
2. tompilador CCS C
" •
J f ••
.
,,• ,•
I. ,• ,•
" ""
..
" "
,m •
!Scl_, eioclt , .... no_1>
_11.
V<
_l_~r1._b
' .... nO_1> CIoIl.,__ bll _ _ t ","1.,__
,_n.o
13 ..._"1 ....,
.. U
b
p . . no_'"
no, Flgur. to. EI progrOllmill
....
• ,, ,• ,• ,• "" "
"" •
Clel., clocl<
p ... r~_b
d _.11 • .,t._trU_1)
' .... rto_b
..
.a nUl
Figura' 1. ContrOilyenda ~ ;i,bol
En el editor de texto se puede pu lsar el bot6n derecho 50bre cualquier linea (figu ra 12); en cl caso de los fiche ros ;illc1l1de permite abrirlos en una pestana adicional.
FlgUfill 1 Z. Las opc:ione. del bolon derecho
49
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC Como ayuda para escribir el programa, CCS ofrece el comando VIEW (figura 13) que permite visualizar las internlpciones (Valid Interrllpts), fusibles de configuracion (Valid Fllses), hojas de caracteristicas (Data Sheet) y una ventana completa donde se describe el PIC (Device Table Editor) mediante distintas pestaii.as (esta opdon tambien es accesible desde la opci6n TOOLS ~ DEVI CE EDI TOR (ver figura 15).
-.. - ...
.-
--.' ,-_._,,...... .. . ..•............. .. ~~~w
.,
.,.~..
••••••••••
~
~
~q_~_._._.' ~
n.~._
___ ._ • • • • _NnN""".
Flgu,,, t 3. Com.. ndo VIEW
Se puede proceder ala compilacion, que se puede hacercan el comanda COMPILE ~ COM PILE 0 directamente con 1a teda de funcion . Durante la compilacion
aparece una ventana donde se in/orma del p roceso de compilaci6n y si hay errores (figura 14). Tras la compilaci6n aparece una ventana con los mensajes de error si los hubiese 0 el porcentaje de utilizacion de la memoria RAM y ROM si la compilacion ha side correcta (figura 15). NOTA
jATENCI6N! Si se escribe un fichero Fuente y a continuaci6n se abr(' 0 se crea un segundo fiche ro fuente, al compiJar este ultimo se compilara el primero. Siempre se compila siempre el PRIMER fichero abieTto.
50
2. Compilador CCS C
ProJu r. F:L.ATUR.\.PICIpr a~c~,\CLASE\lu%Jrn_cllu%.c
C...,I". II•• nOI.
Flln: 2. SIMtI".,1IS: S. n..: 1 h" lin... ~ 0 ..... _ .... ERR HEX SYM LST (Of PJT mE STA
",
RAM:
ROM,
"
Figura 14. Ventana de c:ompllacl6n
--_ '-'- . _-
< _ _ .10<._ _ _ _"0 __'
FigurOil 1 S. MensOiIjeS" de c:ompiiOilc:i6n
Tras la compilacion se obtiene, entre otros, el fichero HEX para programar 0 simu!ar el PIC. En OPTIONS ~ PROJECT OPTIONS ~ OUPUT FlLES, se pueden configurar los ficheros de salida (figu ra 16).
-~ r _ r _
".
(' Am.(' ~ . coo
~
lJ,i -~
~~
.C(lD
-... ,
...
~
fOfCol_1Io
.-~
r »""Ia.
r, _ _ =r ~_
r _
r_
-~ (O" ,alO
(' lIalO
Gl,b>lOof;_ ~~
- ."
r .... _-." ........ __ ......
--
--~
~
~-
~
-~ r _
"r _
11',... ......... 1'_1'0'....
...
Figura 16. FlcheroS" de saUdOil
51
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC En 1a parte izquierda del fichero Fuente aparecen unas ventanas auxiliares (ldellti-
fiers, Projects, Files) en las que se pueden observar [a estructura de fichero del programa compilado (figura 17). Hacienda una puJsaci6n en cualguiera de ellos se abre una pestana con su contenido.
-
..
!-
I
- Iii: ....... -",-
"
j
-",-
O.
'"~
O~
0.-
I
0~
Om o.~
0*
"'Flgur.. 17. Ventilna auxilia, para ficheros
En 1a barra estandar -Figura 18- (para activarla: OPTIONS -? TOOLBAR ...
~
TOOLBARS, figura 19), tambien aparecen distintos comandos entre los que se encuentran la visuaHzaci6n de los ficheros de salida.
"
.x
....
ggbS
,. d 4
sa
I~
e
•
'iI""~ •
2
SOW $ !!!&!lQ2
Figura 18. Barra estandar
U
r....... _
"... ;;;;,;: ..,;.. ;:-------Dotds
II
(:II(
Figura 19. ActJvctcion barrils de herrarnlentils
52
$
2. Compilador CCS C Hay un fichero de salida especia lmente util pa ra la simuladon con el PROTEUS VSM, se IT.:l t.:l del fichero RAM SYMBOL MAP (·.SYM) donde .:lparecen todas las variables de la memoria RAM y sus correspondientes direcciones. Por ejemplo, si en un programa existe una variable FLOAT llamada TEMP, se puede consultar su dircccion a traves de este fichero (figura 20) para utiliza rla en el WATCH del PRO· TEUS (figura 21 y figura 22).
l t d_i ni t.i 133- 13_ 8ITOF.P1
Figura 20. flchero de salida SYM
.- ~;~~§~:::::~ IJ_
InN!'
..... "'1"""----301•
...
o.p.,[_
O.uo.r--
ASOIZSq
< W..a(2~1 DotJlIoWCllC!((~1
QuoOW"!8~1
(
IEEEFboII(~)
IEE£ DoobIII (8 ~J "" HMd\fIo,oI;(3b\>INJ
• -,.,fIooot[( btoIosl .; iigC_
... 11 -
Figura 21. Conflguracion del WATCH en el PROTEUS
53
Compilador CCCS VSimulador PROTEUS para Microcontroladores PIC
Figura 22. Ventillna de WATCH con 1011 variable
54
3. La gestion de los puertos
--'-
Capitulo 3 La gestio" de los puertos 3.1 Introducclon Los microcontroladoresPIC tienen termina les de entrada/salida divididos en puertos, que se encuentran nombrados alfabtHicamente A, B, C, D, etc. Cada puerto puede tener hasta 8 terminales que, de fonna basica, se comportan como una entrada/ salida digital. -Segt'm las caracteristicas del PIC, cada puerto puede tener, ademas, asignado un bloque funcional: convertidor AD, USART, 12C, etc. Por ejempJo, en Iii familia PIC16F87X (figura 1), pueden llegar hasta 5 puertos en el PIC16F877 donde se pueden encontrar bloques de TIMERS, CCP, MSSP, U5ART, P5P Y convertidores AD.
Figura'. Caracterlstlcas de 101 familia PIC' 6F87X
Considerando a los puertos como entradas/salidas digitales, los puertos se caracterizan por ser independ ientes, es decir, se puede programar cada temlinai del puerto para que se com porte como lila entrada 0 una salida d igital (figura 2). La
55
Compilador CCCS VSimulador PROTEUS para Microconlroladores PIC habilitaci6n como entrada 0 salida se reaJiza a traves del registro TRISx (TRlSA: 8Sh, TRJSB: 86h, TRISC: 87h, TRISO: 88h 0 TRISE: 89h en el BANCO 1 de la memoria RAM). NOTA
Un valor 0 en estos registros indica que el terminal correspondiente del puerto es de salida, mientras que un va lor 1 indica que sera de entrada. La gestion del bus de datos se realiza a traves de los registros PQRTx (pORTA: 05h, PORTB: 06h, poRTe: 07h, PORTO: 08h 0 PORTE: 09h en el BANCO 0 de la memoria RAM).
BUSQATOS
0
or
ESCRITURA DATOS
IESCRITURA TRIESTADO
lECTURA DATOS
0
0
1'>
"
TERMI NAL
110
or 0
?Fig"r .. 2 . Estr"ct"ra baslca de "" termi"al
Tambien existen algunos terminales que poseen unas caracteristicas especiales, por ejemplo: • En el puerto A, el tennina! RA4 tiene salida en drenador abierto 10 que obliga a utilizar una resistencia de pllll-llp en el caso de funcionar como salida. Este terminal tiene entrada en trigger-scllllliH 10 que pennite su utilizaci6n como entrada de contador de eventos externos en conju ncion con un modulo temporizador (TIMER) . • En el puerto B, los terminales tienen una resistencia de pUll-liP intema que se puede habilitar a traves del bit RBPU del registro OPTION_REG (81h, 181h). Si dicho bit es 1, todas las resistencias de pull-lip €Stanm deshabilitadas, si es un 0 estaran habilitadas sOlo en el caso de que el term inal funcione como entrada (figura 3).
56
3. La gesli6n de los puertos
-- -
- - - - - - ----=-----'---
_., _., _., _., _., _., _., _., II IIBPtJ
."
!INTEDG 110CS !lOS!! !P8.' !PII2 !1'$1
R-Blu '"' W-Blu ,"""fII. U_BIt no Im.,...,..ntado
!PSI) I
••
L-
.. ... c.orno B ............ ~ un POll ....
,
Figura 3. Registro OPTION_REG
Bit 7:
RPBU: Habilita las resistencias de pull-up. l - Las deshabilita. ()mLas habilita todas.
Las caracteristicas electricas de los puertos delimitan su utilizaci6n para manejar cargas de forma directa. Mlixima I;orriente de salida a Maxima corriente de salida II Mlix ima corriente de salida a Maxima comentc de salida a Maxima corriente de salida a Mhima corricn!c de salida a
ni vel alto por un pin 110 nivel ba·o in 110 nivcl alto po:r. 1.'1 puerto A nivel ba ·o
'""
25mA 20 rnA 80mA SOmA
ISOmA l00mA
Figura 4. Caracteristicas electricas de los puertos de .... n PIC16F84
Estos niveles de tension permiten trabajar con cargas de bajo consumo como leds, displflYs de 7 segmentos 0 LCD, pero para activar cargas de mayor consumo es necesaria la utilizaci6n de transistores.
3.2 Gestlon de puertos en C En lenguaje C se pueden gestionar los puertos de dos formas:
• Se dedaran los registros TRISX y PORTX definiendo su posicion en la memoria RAM como variables de C. • Utilizando las directivas especificas del compilador (#USE FAST_IO, ;;USE FIXED_lO, #USE STANDARDjO).
3.2.1 A traves de la RAM Se definen los registros PORTx y TRfSx como bytes y se sirnan en la posicion correspondiente de la memoria RAM. La directiva utilizada de C es #BYTE: =BYTE variable=constante; 'BYTE TIUSA - 011 85
II V
'BYTE PORTA - 01105
II VaIiilble PORTA en OSh .
'BYTE TRISB - 0:< 86
II Varillble TRISB en 86h .
57
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC /1 V" r i.tbll'!' PORTB I'!'n 06h .
IBYTE PORTB .. Ox06 IBYTe TRISC .. Ox 87
II V.triiilble T'RISC en B1h.
IBYTe PORTe - Ox 07
1/ V.trJable PORTC en 07h .
Una vez definidas estas variables se pueden eonfigurar y controlar los puertos a traves de los comandos de asignacion. II 8 termin.tles de entrada
TRISlt ... OxFF; TRISB .. Ox OO ;
II B termindles de sali da
TRISC .. OICOF;
1/ 4 terminales de mayor peso de sillida , 4 term.:inill e s de 1/ menor peso de e.nr.tda
Escritura en los puertos: PORTe -
II salidil del d.ttos 0000'1010 por el p uer t o C
Ox OA ;
Lecrura de puertos: 1/ Asiqna el da t o del pIJ9r to A a 101 v(l r iollble valor.
valor .. PORTA ;
Manejo de sentencias: TRISD-Ox OF ; ir
(POR TD ,
oxon
PORTD 1- OxltO ;
II comprueb
Existen unas funciones de C que permiten trabajar bit a bit eon los registros 0 variables definidas previamente. Estas funciones son las sigu ientes: bit_clear (var,biO;
/I Pone a 0 el bit especifieo (0 a 7) de la variable.
II Pone a 1 el bit especifieo (0 a 7) de la variable. bit_test (var , bit);
/I Muestra el bit especifieo (0 a 7) de la variable.
swap (var);
1/ lntercambia los 4 bits de mayor II menor peso de la variable
II Hsaca n un 1 por el termlnal
bit_set (PORTe , 4J : ir
peso por los 4 de
Ibl t _test(PORTB,O)--lJ bit_ clear /PORTB , l);
RC~
Iisi RHO es 1 born RBl
Se puede declarar un bit de un registro eon una variable mediante la directiva ;;8IT, 10 que permite trabajar mrectamente con el terminal: #BIT nombre = posicion. bit 'BIT RB4 - Ox 06 . 4 RB4 - 0 :
58
II PORT'A-0IC06
3. La gesti6n de los puertos Ejemplo 1; Se configuran los terminales RB1 como salida y el RBO como entrada (con resistenda de pull-up). La salida debe tener el mismo valor que la entrada. Se utiliza lm in terruptor en la entrada y un led en Ja salida (figura 5). Componentes ISIS: PIC16FB76, RES, LED-BLUE Y SW-SPST-MOM.
OSCIIClKIN
SW1 RMI"" RAlIANl
D1
""_.
""""'if ·
AA31AN~'
"""""" RA5IAN4iSS
SW-SPST-MQ.4
RCtVTl0S0/T1CKI RClfT1OSIiCCP2 RC2JCcPl
R1
".
RC"""""-
Figura S. EI esquema del ejemplo 1 'include
~16F876 . h>
'fuses XT,NOWDT 'use delay( clock -
4000000 )
II Reloj de 4 MHz
'BYTE TRISB -
Ox 86
II TRISB en 86h.
I B YTE PORTB -
Ox06
II PORTB en 06h.
IBYTE OPTION_REG" Ox8l void main ()
II OPTION_REG en Blh.
(
II Habilitacion Pull-Up II 80 como entt"ada
b1t_ cleat"(OPTION_REG, 7);
bit_ set (TRISB, O);
II B1 como s.llid" II Ap"gd el LED
bi t_ cleat" ITRIS8, IJ ;
bi t_ clear (PORTB, 1) .!>'h.Ue
II} (
1f (bit_test (portb,O)
-
1
II Si RaO es 1, ap"ga el LED
bi t_ cleat" (portb, I) ; else
bit_set (portb, I ) ;
II S1 RBO - C, enciende e1 LED
Figura 6 . EI programa del eJemplo 1
59
Compilador CCCS y Simulador PROTEUS para Microconlroladores PIC
3.2.2 A traves de las dlrectivas EI compilador ofrece funciones predefinidas para trabajar con los puertos. Estas funciones son: output_X (valorl;
// Por el puerto correspondiente saca el valor (0-255).
input_XO;
// Se obtiene el valor en el puerto correspondjente.
set_tris_X(valorli
/1 Carga eI registro TRISx can el valor (0-255).
port_h_pulJups (valorl;
// Mediante valor '* TRUE 0 valor '"' FALSE habilita II 0 deshabilita las resistencias de pull-up en PORTB.
geUrisXO
II Devuelve el valor del registro TRISx
Donde la X es la initial del puerto correspond iente (A, B, C, ... ). Qu t pu l:_A(O x FF};
/ / Sacs par el puerto A el valor 11111
Valo r -Input_BO ,.
I I Le e ",1 valor del puerto B
Se t_tri~_C(OxOF) ,.
/ / Conflgura el puerto C ; CO-CJ entradas , C4-C7 sillidliS
Existen una sene de funciones asociadas a un terminal 0 pin". EI parametro pin" se define en un fichero inclllde (par ejemplo, 16F876.h) con un formato del tipo PfN_XII, donde X es el puerto y n es el numero de pin. #define PIN_AO 40 #define PIN_A1 41 Las funciones son: output_low (pin");
II Pin a O.
output_high (pin");
II Pin a 1.
output_bit (pin" , valor);
II Pin al valor especificado.
outpuUoggle(pin");
1/ Complementa el valor del pin.
output_float (pin");
II Pin de entrada, quedando a tension flotante .. . II (simula salid a en drenador abierto)
in put _sta tee pin")i
II Lee el valor del pin sin cambial' el SE:ntido del /1 terminal.
input(pin");
II Lee el valor del pin.
Las funciones OlitPIICXO e illpllCxO dependen de la directiva tipo #US E "-",0 que este activa. Directivas: ;USE FAST_fO (PUERTO) (PUERTO: A ... J
Con la funcion 01ltpllCXO se saca el va lor al puerto y con la funcion illPllt_xO se lee el puerto. La directi va no modi fica previa mente el registro TR{S correspond iente.
60
3. La gestion de los puertos Hay que asegurarse de que los registros TRIS estan corre<:tamen te definidos. Entonces, el ejemplo 1 quedaria : lincllJdQ <16F876.h> I
~u !S es
XT , NOWDT
luse delllY ( clock - 4000000 ) lu s e
~lIs t_io (B)
void mdin ()
+-
(
part_byul1ups (T/lUS) ; set_tris_B (OxOl);
output_ low{PIN_Bl) ; ...hile (J) i f (input (PIN_ BO!
-- 1
output_low(PIN_Bl) ; else
' USE STANDARD_fO (PUERTO) [PUERTO: A ... J Can la funci6n OU~PlltJ() el compilador se asegura de que el terminal, 0 terminales correspondie ntes, sean de salida mediante la modificaci6n del TRIS correspondienteo Can la funcion inpllt_xO ocurre 10 mismo pero asegurando el terminal (terminales) como en trada. Es la directiva por defecto. Entonces, el ejemplo 1 quedaria: linclude <16F876 . h> I fuses XT , NOWDT
luse delpy( clock - 4000000 'use stllndd cd_lo/B) void main
(J
+-
{
por t_byul1ups (TRUE) ; output_low(PIN_ BlJ ; while (1) i t (input(PIN_ BO) -- 1
output_ low(PIN_Bl! ; else
=USE FlXED_IO (PUERTO_OUTPUTS=pin"", ... ) [PUERTO: A ... J El compiJador se encarga de generar el codigo para definir los puertos de acuerdo ron la informaci6n que indica la directiva (donde sOlo se indican los terminales de
61
Compilador CCCS YSimulador PROTEUS para Microconlroladores PIC salida), sin tener en cuenta si la operati6n es de entrada ejemplo 1 quedaria:
0
de salida. Entonces, el
'include <16F876 . h>
'fuses
XT,NO~DT
luse delay( clock ... 4000000 }
'use fixed_io(b_outpu/;s-pin_bl) +voidmain(}
{
poTt_byullups (TRUE),.
output_ lo.,(prN_ BIJ; .,hile (1J if (input (PIN_SO) .... 1
output_lo.,(PIN_BI) ; else output_high (PIN_SI),.
3.2.3 Con punteros En C se puede acceder a la memoria de datos mediante punteros. Los punteros se deben definir como tNT: Iderme TRISA (inc ' ) Ox85 Idefine PORTA
finc"}
0,,05
EI regis tro es manejado mediante la utilizati6n del operando .: int valor valor _ ' porta
Los terminales se pueden leer 0 escribir utilizando operadores logicos: ' porta 1- ObOOOOOOOl ,.
II RAO .. .l
' porta , - ObllllllOl ;
II M2-0
If ("porta, ObOOOaaOOl} ...
II Lee el valor de RAO
Entonces, el ejemplo 1 quedaria: linclude <16F876 . h> Iruses XT,NOWDT luse delay( clock'" 4000000
Iderme TRISB (int " ) Ox86 +'define PORTB fint · ) 0,,06 +'define OPTION (int ' ) Ox81 +-
62
_ _ _ _ _ _ _ _ _ _ _ _-= 3. La gesli6n de los puertos void mo!in () { "option &'- Ob01111111 ..
o! 0 e1 bit 7 del OPTION REG /1 (pull-up hiJbl1itadoi
II Pon.,
- tcisb· axOl;
II RBD entrada, RBl salida
~portb
II Apaqll el LEO
-
OxDD ;
while OJ
i.[
( ' porth ,
OxOl
/1 Lee el REO Y I'll
'portb-OxOD ;
es
1 ••
1/ Ap.lglJ el LED (RBl .. OJ
e1$'e
· poctb-Ox02 ;
1/ 51 es 0 enciende el LED /RBI .. l)
Ejemplo 2: Realizar un contador de 0 a 99 con un doble display de 7 segmentos de ca todo comu n. La cuenta debe ser continua y de 0 a 9 el digito de las decenas debe estar apagado. Componentes [SIS: PIC16F876, RX8 Y 7SEG-MPX2-CA-BLUE.
Figur;!l 7 . EI esquema del ejemplo Z
'include <16FB76 . h> 'USE DELAY(CLOCK .. 4000000) 'FUSES XT ,NOHDT ,NOPROTECT,NOPUT IUSE fast_ 10 (B)
luS£ fast_IO (A) byte CXJNSr DISPLAY(lOJ -
(Ox3f. OJ<06 , Ox5b, Ox4f, Ox (i6, Ox6d, Ox7d, Ox07 , Ox7! , OxEl) :
63
Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC "".,in () (
byte ud-O,dec-O ; SET_ TRI5_B (OxOO) ; 5£T_ TRIS_ A (OxOO) ; OUTPUT_B (0) .. for( ;; l f for
I I Cuenta digito decenas
(dec- 0;dec<10;dec-H-) for
(ud-O;ud
OUTPUT_A(Ox02) ;
/ / cat_ D - apagado,
OUTPUT_ B(OISPLAY{ud]};
/ / Diglto unidades
delay_ ms(50J; j f
cat_ U" encendido
/ / PlIrll evital'" parplldeos
(dec_O) output_a (Ox03);
else output_ a(OxOI);
/1 S1 decenas - 0, /1 cat_D - apagado I I Si decenas ;. 0, I I cat_ D .. encendido
OUTPUT_B(DISPLAY[dec]) ,-
I I Dlglto dec.naa
delay_IlLS (50),.
I I P ..roll .v;i tar pa.q>oIIcr.<>a
FlgUfil 8 . EI programil del ejemplo Z
Los terminales de los dos displays son comunes par 10 que el dato es comt'tn; para que aparezca el digito s610 en las unidades, 0 sOlo en las decenas, se debe apagar e! afro display mediante el terminal de cModo. Es decir, si se desea visua.lizar las unidades se pasa el c6digo "10" aJ displny y si son las decenas se pasa el "01" (con un 1 el displny esta apagado y can un 0 esta encendida) . La altemancia entre los dos ditodos debe ser tan nlpida que el ajo no se de cuenta del parpadeo. En el caso que las decenas sean cera, su display se apagara. CONST DlSPLAY!l OJ = {Ox3('Ox06,OxSb,Ox4f,Ox66,Ox6d,Ox7d,Ox07,Ox7f,Ox6f! permi~ te visualizar de 0 a 9 mediante la combinacion de digitos tipica de los displays de 7 segmentos (figura 9). Par ejemplo, en el 0 se encienden a, b , c, d, e y £, 10 que signi~ fica 111111, Ox3F en hexadecimal.
a
Figura 9. Los 7 segme"tos del dlsplil)'
64
3. La gestion de los puerlos
---
3.3 Entradas y salidas 3.3.1 LCD Se acostumbran ha util izar LCD del tipo HD44780, con un numero de lineas variable y un numero de caracteres por linea lambien variable (por ejemplo, can 2 x 16 se trabaja can dos lineas de 16 caracteres cada una) (ver figura 10) .
•
1.· 11_( _ ) 2.- lIo:;{AIImentad6n ....." !"~ ~,~YJ I J. - ..juste de conlnSta (a o ~ 5.SV) 4..' ItS (~de ft9i$lro) 5.. R/W {1ed~/eKJ'itur..} 6.- E ( .. nabI_) 1. - DO (dMo lSI ) 15.- 01 g. -Ol
lo.- O] 11 .- 0<11
l2.·05 13.- Ofi 1 • . - 01 {dato M51}
Figura 10. EI patlllaje de un LCD t ip lco
El bus de datos es de 8 bits, aunque tambien existe la posibilidad de trabajar can 4 bits (can un menor numero de caracteres). El compilador C induye un fichero (driver) que permite trabajar can un LCD. EI archivo es LCD.C y debe llamarse como un #inc/udc. Este archivo dispone de varias fundones ya definidas: Icd_in it 0; Es la primera fund6n que debe ser Hamada. Barra el LCD y 10 configura en el formato de 4 bits, ron dos Hneas yean caracteres de 5 x 8 puntas, en modo encendido, cursor apagado y sin parpadeo. Configura el LCD con un autoincremento del puntero de direcciones y sin desplazamien to del display real. 1cd....gotoxy (byte x , byte y);
Indica la posidon de acceso al Lm. Par ejemplo, (1, 1) indica la primera posicion de la primera linea y (1,2) indica la primera posicion de la segunda linea. Icd..getc Cbyte x , byte y); Lee el car,kter de la posicion (x,y).
65
Compiiador C CCS y Simuiador PROTEUS para Microconlroladores PIC lcd_pute (char s);
5 es una variable de tipo char. Esta funcion escribe la variable en la posicion corres· pondiente. Si, ademas, se indica:
\I se limpia el LCD. \n el cursor va a la posicion (1,2). \b el cursor retrocede una posici6n. EI compi lador de C ofrere una funcion mas versatil para trabajar con el LCD: p rintf (string) printf (cstring.. values ..•) p ri ntf (fname, (string, val ues ... )
String es una cadena 0 un array de caracteres, values es una lista de variables sepa· radas por comas y fiw/1/e es una funciOn. EI forma to es %nl, donde n es opcional y puede ser: 1·9: para especificar cuantos caracteres se deben especificar. 01 -09: para indicar la cantidad de ceros a la izquierda. 1.1 -9.9 para coma flotante. t puede indicar:
66
c
Caracter.
s
Cadena 0 caracter.
u
Entero sin signa.
d
Entero con signa.
Lu
Entero largo sin signa.
Ld
Entero largo can signo.
x
Entero Hexadecimal (minusculas).
X
Entero Hexadecimal (mayusculas).
Lx
Entero largo Hexadecimal (minusculas).
LX
Entero largo Hexadecimal (mayusculas).
f
Flotante con truncado.
g
Flotante con redondeo.
e
Flotante en farmata expor,encial.
w
Entero sin signa con decirnales insertados. La 11 cifra indica el total, la 21 el numero de decimales.
3. La gestio" de los puertos A continuaci6n, mostramos unos ejemplos de los distintos formatos: Formato
Valor = Ox12
Valor = OxFE
o/.:.03u
0 18
254
'You
18
254
%2u
18
•
%S
18
254
~%d
18
-2
'Yo,
12
fe
%X
12
FE
%4X
0012
OOFE
%3.1w
1.8
25.4
Ahara, mostramos una serie de ejemplos de aplicacion: by~c
x,y,1.;
print£I~HolB~);
print! I ~V/llor->'2x In Ir", gct_ rtcc () pIintf(~t2u
;
8X '4X\n\r ,K,y,Z}; W
pcintf{LCD_PUTC,
"n-tu"'.n);
EI driver LCO.C esta pensado para trabajar con el PORTO 0 el PORTB. Por defecto. utiliza el PORTO a menos que Ie indiquemos 10 contTario mediante: #define use...,portbJ cd lRUE , se mmenta 0 descomentatal como se indica en I., figurn 11. Por defecto. este driver usa siete terminaJes para la comunicaci6n entre el LCD y el PIC. En la figura 11 se observa parte del fiche ro LCO.C donde se enruentran definidas las conexiones utilizadas y la posibiJidad de cambia r de puerto. II As defined in the following structure thtt pin connection is enable /I
//
"D'
//
D2
,.,.
/1
D' D5
D' D5
D' D7
D' D7
// // //
~s
follOws:
// 1/ LCD pins DO-DJ /lre not used and PIC D3 1s not used. 1/ U!:I -COIIIIIIel1t tb e Lo~~owil1g da1ine t o u.ft port B
/1 IcI.Jjne
u .sJXJctb_ l c d TRUE
Figuril 11. Extrilcto del flchero LCO.C
67
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC Se puede trabajar con otros puertos, por ejemplo el PORTC, modificando el fichero LCD.C En la figura 12 se muestra parte del fichero LCD.C donde se definen los puertos de trabajo (el Do el B); modificando estas sentencias se puede trabajar con otro puerto (A, C, etc.) . lif defined
use_portb~lcd
II This puts the entire structure over II t he port
Iloedte led'" getenv( "sEr:PQRTB"'J
Idefjne ser_tris_ledl x J set_tris_b(x} 'else Ilocate led - getenvl"sfr : PORTD"')
1/ This puts the entire structure over II the pert
'denne set_tds_led(x) set_td.s_dlx) lendiE Figura '2. EJ(tracto del flchero LCD.C
Ejemplo 3: Realizar un menu de control mediante un pulsador. EI programa debe mostrar un menu de 3 funciones. Mediante el pulsador se debe seleccionar uno de los 3 elementos y con otro ejt:ocutar la funcion (en este caso encender un led). Disponcmos de los componentes ISIS: P1C16F876, RES, BU1TONy LM016L.
,--CAlIBR,,~R lCOI'
[
U lli"'L::: .'. ~
qO
~
•• ~
z
c
IT'
,. .. '" . • •
~
Rl
~
t
~
·.. ···
"',
,
·
.
If'
ze 01 ~4
''
1 00
••c
" I t~ i .~: : • "'. •• '",. -
Flg",a '3. £1 esquern.1 del ejemplo 3
68
ITlI····
:.
:
I
... ..
I
3. La gestion de los puertos linclude
'fuses
XT, NOWDT
I~se
delay(clock- 4000000, linclude luse stand.. rd_io(CJ hse st .. ndard_io(AJ enu~
void
[uncione", (med,cal,ini};
~dir(void'{
IF Asigna un valor .. cada elentento ,1 met:! - 0, cal - 1 e ln1 - 2 'F Funci6n de IrIfIdir
'/~lgorltmo
correspondiente output_ toggle (pin_CO, ..
,
\'old cslibrar(void) f
llFuncion de c"llbr"r
,Islgoritmo correspondiente utput_toggle(pin_Cl} ,.
id inicial1z .. r(void/ ( lalgoritmo correspondiente
,1 Funci6n de inicial1zar
tput_ toqgle (pin _ C2) ..
j
run.[unc(i.nt numfunc' (
I, A$ign..ci6n de 1" [uncl(in .. rflal!zar F viene dada POI' 1a vari.able J tem'" K
:J1f! tch (num[unc)
'aBe lIIed:
medirfJ ; brealc; c"",e c"l, calibrar (/; brealc ;
case ln1: inlcializar() ; break;
in (/ { .... r .Item;
II Vari"bles de [unci ones
69
Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC II NUmero de funeiones //
bit_sec (TRISA,O}; 1cd_ init(J;
...hile O}
f
if (input(PIN_AO)
l/
II Detecta botdn de selecci6n
I
item++:
/1 Si pulsJ Jumenta la variable
delay_1M (300);
II Para evitar rebotea
lcdyut;c('\f',: if (item> (rLmenus-I))
II Si la variSble supera e1 m.imero de .. . II tunciones la inicializa
item-OIl switch (item) case 0: lcd_gotoxy(l,lj:
pdntf(lcd_pucc, "l>'.EOIR"'j; lcd_gotoxy (1,1)
i
break; case 1 : prl11tf(lcdyutc, "CALIBRAR
N ):
lcd_gotoxy(1, 1); break;
case 2: printf (lcdyutc, "INICIALIZAR"); lcd_gotoxy(l,l) ;
break; it fJnput(PIN_Al)
l/
II 51 5e pulsa el botdn de .,elecci6n . . .
(delay_ma (200): rull_ tullC (i tem) : J
II 5e llama a 18 funcidn correspondience
Figura 14. Ef programa del eJempfo)
3.3.2 LCD grafteD Se puede utilizar un LCD grMico con una controladora KSOl08 (como el de la figura 15), por ejemplo la ASI-A-1286AS-Lj-EWSIW de la casa ALL SHORE INDUSTRIES.
70
3. La gesti6n de los p.uertos
Fiiura 15. LCD 9"Uko con controlado,a KS0108
La distribuci6n de patillas es la siguiente:
VSS: masa.
VOO: alimentaciOn. Vo: tension de contraste.
on: entrada de da tos/entrada de coo igos de illstruccion. RIW: lectura/escritura. E: enable.
080 .. 087: datos de entrada. CSl..CS2: chip select. RST: reset.
El compiladorC suministra varios drivers para estetipo de LCD graficos, el CLeD.C, CRAPHICS.C 0, el mas espedfico, HDM64GSI2.C. La conexion definida e n estos ficheros es la siguiente:
1111111111111111111111/1/11111111111/111111111111/11/11//11/11/11/11111111/111/11111111 //11 fill 1/11 LCD Pin camzeclialls: 1111 11!I (These call be c/ranged (/S /leeded ill the Jollowi/lg defines). /1// 1111 VSS;s conllected to GND I11I 1I11 VDO is cOllllected to +5V 1111 1111 VO - LCD operatillg voltage (Constrast adjustmeflt) 1I11 1/11 Oil - Data or IIIStructioll is con/lected to 82 1111 1111 R/W - Read or Write is connected to 84 /III //1/ Enable is connected to 85 /111 /11/ Data Blls 0 to 7 is amnected to port d ////
71
Compitador CCCS y Simulador PROTEUS para Microcontroladores PtC II/I Cllip Select 1 is COflllected to BO 1/1/ Chip Select 2 is COllnected to 81 /11/ Reset is COIIl/ected to CO
111/ fIll fIll
@
1/1/ fill III/ Negative vol/age is also connected to the 20k Ohm POT 1I11 Positive lIoltagefor LED back/igM is cO/mected to +5V fill Negavtive voltage for LED backlight is cOllnected to CND //// @
11//11/1/111////111111//1///111/11111/111/////////////111/////////111/111////////111 Las fundones definidas son: gcd_init(mode) Debe ser la primera fund 6n en invocarse. Enciende el LCD. glcd_pixel(x,y,color) Establece el color del pixel. Puede activarse a desactivarse. glcd_fiIIScreen(color) Rellena el LCD de un color determinado. Puede activarse a desactivarse. glcd_updateO Escribe en la RAM del LCD; s6lo es posible si esta definido FAST_CLCO. glcd_line(xl, yl, xl, y2, color) Dibuja una linea desde el primer punta al segundo asignando color, el cual, a su vez, puede activarse a desactivarse. glcdJect(xl, yl, x2, y2, 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 a no. glcd_bar(xl , yl, x2, y2, width, color) Dibuja una barra desde el primer punto al segundo; se puede d cfinir el numero del rango de pixeles y puede activarse el color 0 no. glcd_cirde(x, y, radius, fill, color) Dibuja un circuJo con centro en (x, y) y con el radio especificado; puede rellenarse o no y puede activarse el color a no. glcd_text57(x, y, textptr, size, color) Escribe el texto empezando en (x, y); los caracteres son de 5 x 7 pixeles; se puede escalar el tamano y puede activarse el color a no. Esta funcion envia los caracteres a la linea siguiente (se debe usar #defifle CLeD_WIDTH para definir el ancho de visu alizaci6n).
72
3. La gestion de IDs puertDs Ejemplo 4: VisuaJizar en un LCD el estado de las entradas del PUERTOA (ver figura 16). Disponemos de los componentes 1515: P1C16F877, RESPACKB, LGMI2641BSIR Y SW-SPST-MOM .
PlERTO A
"
~-.----
..
Figura 16. EI esquema del ejemplo 4 '1nclude <15£877.h>
Ifuses 'use
HS,NOWDT,NOPROTECT ,NOLVP
del~y
(clock-20000000)
'include linclude
'use
standard_io(~}
void main ()
CHAR A5! j .. ~A5~; CHAR A4{ j-"A4'": CHAR A31 j-#AJ" ; CHAR A21 1- #A2*; CHAR All }-"Ar; CHAR AO[ }_"AO N ; CHAR IN[ }-"PUERTO A";
glcd_inlt(ON}; glcd textS7(33, 30 , AS, 1, 1);
gled text57(49, 30,A4 , 1, 1); glcd_tex t 57(55, 30,A3, 1, 1);
qlcd_ text57(8L 30,A2, 1. 1);
73
Compilador CCCS y Simulador PROTEUS para Microcontroiadores PIC gled eextS7(97, 30,Al, 1, I),. !lled_textS7(113, 30,AO, I, 1); gled textS7 (30, S, IN, 2, 1) .. h'hlle(lJ ( i f (lnput_"t.ace(PIN_A5j .... OI
gled recc(32,40,46,60,l,l); else gled reet(32,40,46,60,l,O); !lled_ rec:t (32,40,46, 60, 0, 1) ; I~
(input_state (PIN_A4) -0)
gled_ reee (48, 40, 62,60,1,1) ; else gled reet(48,40,62,60,1,0) .. glcd_ reet (48, 40,62,60. 0,1) ; lr (inpuC_state{PIN_A3)-"0) glcd_rece (64, 40, 78, 60, 1,1); glcd_rece {64, 40, 78,60,1, O} ..
gled recc{64,40,78,60,O,l}; lr {lnpue_seate(PIN_A2}--O} g1cd recc(80,40,94,60,J,l); else glcd_rlJct (80, 40, 94, 60, 1, OJ;
glcd rect(80,40,94,60,O,l); i f (input_st"ee(E'IN_Al)--O)
!lIed reet(96,40,110,60,1,1); else gled_ reet (96, 40, 110, 60,1,0); gled_ reet (96, 40, 120, 60,0, 1) ; i f (input_state (PIN_AO)-O)
!lIed reet(112,40,126,60,l,1);
else gled_rece (112, 40,126 , 60,1,0); gled_recc (112, 40, 126, 60,0, 1) .. delay_IllS (400);
Figura' 7 . EI program.a cOrTeJpondle"te .II eje ... pto 4
74
3. La gestlon de los puertos
3.3.3 Teclado (keypad 3x41 Las entradas a traves de un pulsador son muy habituales en los sistemas con microcontroladores para trabajar con una mayor infonnadon 0 infonnacion alfanumerica. Por ejemplo, se utilizan los tedados matriciales de 1x4, 3x4 04x4 (ver figura 18).
•, 1
a •
' DSB 0 · 0 GUill
•
Bema .m.a
•
Figura 18. Dlferentes tlpos de teclados matriclales
EI compilador de C induye el driver KBD.C para manejar el teclado (3x4). Las funciones que incorporan son las siguientes: kbd_inilO lnidaliza el sistema, debe ser la primera funcion en el programa. kbd-setcO Devuelve el valor de la teda pulsada en fund6n de la tabla que tiene programada (ver figura 19). r7~~~~---------------'
II Keypad llyout: cha~
const KEYS[4][3] • {{'1','2','3'}, { '4','S','6' }, { '7 ' ,'8 ' , ' 9 '} . {'.·.·O'.· . '} } ;
Figura 19. La definIcion de teclas fl1 el archlvo KBD.C
A traves de la modificacion de esta tabla podemos adecuar el resultado del prograrna a las distintas canitu las del teclado. EI archivo KBD.C esta pensado para trabajar con el PORTB 0 el PORTD (ver figura 20). Activando 0 no la Ifnea #defitle use-portb_lcd TRUE podemos seleccionar el
PORTB (ver figura 21).
75
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
(~,
' I 1)1 to port II
" , lif lIefinpd U'iPJlortb_kbd Idpfinl' spt td s kbd e Iplsl' -Idpfinp Sl't_ tri S_kbll(
",
P ,
se t _ tri s_ b ( x ) se t _ tr is_lI exJ
lendiF Figura 20. La conflguraci6n de puertos I t
Id fln
.,.
p
,.
, P
Figura 2'. La selecci6n del PORTS
Las conexiones vienen dadas en el fichero pero se pueden modificar: 'dl'hne COLI ( 1 Idefine COl1 ( 1 IdPf{np COl 2 (1
Ide fine ROWS (1 Id('fin(' ROW1 (1 (1 Ifdefine Id('finp (1
.
,"112,'
--.,---
., I--iI • "••
~
Hir"-
« « « « « « «
5)
') 7) 1) 2) 3)
')
eo ell e21 - " " RO • 1 2 3 Rl • 4 5 6
~, R3
0
7
8
9
*
0
#
Figura 22.l.a asignaclon de patillas
76
3. La gesli6n de los puertos Se puede trabajar con el LCD y el teclado a tTaves de puertos separados 0 compartiendoel mismo puerto (con eJ ahorro de patillas que contleva) (ver figuras 23 y 24). Com partir puerto suele conllevar problemas si se quiere trabajar con el tedado y las interru pdones RB4IRB7.
2
3
4
5
•
7
•
9
*
0
•
I
Figura 23. EllCD Y el teCloldo en puertoJ dbtintoJ
1
2
3
4
5
•
7
•
9
*
0
•
Figura 24. EllCD Y el tee'ado compartlendo
'OJ
mlsmos puertos
Ej emplo 5: Introducir d atos par el teclado y visualiza rlos en el LCD. Cua ndo se pu lsa la I'ecla "." borrar eI LCD (ver figura 24). Se dispone de los sigu ientes componentes [SIS : PIC18F876, LM016L Y KEYPAD-PHONE. l i nclude
'fuses
XT , NOWDT , NOPROTECT , NOLVP
luse delsy(clock- 4000000} linclude linclude
77
Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC void main () e/llu' k;
x:
illt
lcd_lnitO ; kbd_illit ();
pcrt_ bJull ups (TRUE) : ledJutc ("lfListo . . . InN) : while
(TRUE)
(
k - kbd_qetc() : II Conversion numedea
x-k-48; if(k!-O}
/
iflk--'·') lcdJ1.lte( ' lf');
else IcdJutc (x)
II Impr i me
;
car~cter
delay_ms (!jOO);
printf(1cdyutc, Nlf car-tc",k) ,.
II Imprime carActer
delay_ms(!jOO);
prin cf (1cdJutc,Nlf Cilr_'uN,k);
II Imprimeo villar ASCII
del.Jy_ms (!jOO) .. printr(led_putc,
~Il'
Num-Ju".x) ;
I I Imprime valor numlirleo
delay_ ms(!iOO); lcdJute("\fLisco ... InN} ..
}
Figura 25. £1 programa del ejemplo 5
Debemos observar que el valor leido en el tecJado y el visualizado en el LCD es un caracter ASCII. Si deseamos convertirlo a su valor numerico correspondjente deberemos restarle el valor 48 (30 en hexadecimal); eslo se debe a que el caracter 0 en ASCII es 3Oh, ell es 31h, etc. Ejemplo 6: Oiseiiar un sistema basico para el control de accesos; a traves de un tecJado de 3x4 introducir una clave de 3 digitos que cuando sea correcta abra una puerta (con un pulsv a un rele) y 10 indique en una pantalla de LCD. Guardar la dave de acceso en 1a memoria EEPROM (figura 26). Se dispone de los siguienles componentes /5/5: P1C18F876, KEYPAD-PHONE, RES, BD135, CEUy RELAY.
78
=
3. La gestio" de los puertos
=
· .', 1
~
[""'1"" LKI. I
I
3
• ,, It ~ • • 6
t;~
i'=
-:'1
7
9
0
, ,
'C'
." r
-~~\j~~ ~~"
I
.b Figura 26. lEI esquem ... del ejemplo 6 linclude <16F876 . h> Ifuses XT,NOWDT,NOPROTECT,NOLVP luse delayfr:lor:.k- 40000(0) luse stilndilrd_io{a)
linclude linclude linclude Irem Ox2100_{'7','2','3'}
II Posicion 0,1 y 2 de la Eeprom cen los dates_ II 7,2, Y J respectivllmente
void llI8,in () chllr k;
int i;
char data{3}, clave(3];
II Matrices paca guardar clave y datos
lcd_ initlJ ; kbd_init (); port_byullups(TRUE) : while
(TRUE)
(
II posicion de 1a matriz II Plica primer dato II FiJCiJ tres diJtos 1/ Lee el teclade
pnntf(1cdyucc,'"lfpulsac tecla lIn"); whlle(i<-2j ( k-kbd_getc()J
79
Compilador CCCS y Simulador PROTEUS para Microconlroladores PIC II 51 .'Ie h(l pul5ado a1guna t eela II .'Ie gl.lardll en 1<1 posic16n correspondiente II de la marriz
i f (k! - OJ (d~u.{il-k;
1++;
printf(lcd_putc,"\fpulsar tecla tu\n" ,i+lJ; . / / S1qulente dato
/ / Pasa datos de eeprom a la matriz clave clave {1 J -read_ eeprotIJ (i I ; )
1f
((da ta [0] _clave [0] J &. (da ta {I] --clave [1} J H (d
/15.1. es igual cUI pulso
outpuc_hlgh(PIN_AO}; del .. y_ms (SOD) .. outpuC_low(PIN_AOJ .. }
else printf(1cd_ putc, "\fPuert .. Cerrad.. ");
/.
Cl
delaY_lfls (lOOO) ;
I
Figura 27.· Programa del Ejemplo 6
Ejemplo 7: Inl roducir los datos, a traves de un tedado, de velocidad de un motor y generar una senal modu lada en ancho de pulso proporcional al dato de la velocidad (figura 28). Se dispone de los siguientes componentes ISIS: PIClSFS76, KEYPAD-PHONE, RES. 2sK1058, CELL YMOTOR.
,.
....n
,--------1'
"'C' .....
Figura 28. EI esqlotema del ejemplo 7
80
1
2
3
5
6
8
9
o
#
3. La gesti6n de los puertos Se genera una selia! modulada en ancho de pulso PWM (sin utilizar el modulo eep de los PIC) donde el semiperiodo de seital a nivel alto esta fijado por el valor introducido en eJ tec1ada. Para ella, se utiliza un regislro de B bils para fijar el semiperiodo 11 nive! alto (PWMH) y el semiperiodo a nivel bajo (PWML) (ver la Figura 29). Como el valor maximo del regislTo es 255, este debe coinddir con el valor maximo del tedado, es decir 9; por 10 tanto, la relacion entre el valor del t€Clado y el semiperiodo PWMH sera:
PWMH", (255/9) x Tecla, aproximadamente PWMH=2S·Tecla. PWMII
L
255
~
Figura 29. La moc:lulilC:lon PWM
Segtin dicha ecuadon ruanda el valor de teclado sea 0 la salida sera 0 de forma continua y el motor estara parada. Cuando el valor de teclado sea 9, el semiperiodo PWMH sera de 252 (no Beg:l a 255) yel motor estara casi a tada marcha. EI semiperiodo a nivel bajo PWML Sf' obtiene de restar el PWMH a 255. linc]ude <.l6f876. h> I f uses XT, NOWDT, NOPROTECT , NOLVP IUSE DE.LAY (CLOCJ(-4000000) IINCLUDE IUSE STANDARD_ IO
(1.1)
VO I D MAINO CHAR k , kanta ' O';
II k valor de tec]ado , Jr valor anterior de t ec]"do
chltr PWMH-O , PWML-O ;
II Semi periodo alto y bdjO
kbd_ini t () ;
PORT_ B_ PULLUPS (TRUE.) ; WHIL E (IJ
{
II Bucl e infinito (siemp re consulta e l teclado) 'I Lee en ASCII el valor de 1(1 tecla pu1s(lda
Jr -kbd_ ge tc() ; i f (k- ' \O ' ,
k-k ant ;
i~
I I (k-- " ' )) k- ' O';
((k -- '"' )
1/ 5i no se p ulsa tecl .. (lO) .'Ie US" II el valor anterior II 5i se puls/J ' 0 I se dslgna // un valor cero .
81
Compilador C CCS YSimulador PROTEUS para Microconlroladores PIC kant-/c;
/1
k-k~48;
Sa
guard.. tec1a pu1sad ..
II Se cc""vierte de ASCII a valor numer.ico 1/ Proporcion entre valor tecla y semiperiodo Alto .
PWMH-k · 28; PWML-255-PWMH;
/ / Semipedodo Bajo
for (PWMH; PWMH>D; PWMH- - ) {
// Obtenci6n de 1a salida .. nivel alto
OUTPUT_ HIGH(PIN_AOJ: } for(PWML;PWML>O:PWML--) (
// Obtenci6n d£I 14
OUTPUT_LOW(PIN_AO);}
Figura 30. leI programa del ejemplo 7
Figura 31. La sena. obtenlda para el valor 9
82
salldil
a nive1 bajo
4. Las inlerrupciones y los lemporizadores
----------------~
Capitulo 4 Las interrupciones y los temporizadores 4.1 Introduccion Las intcrrupciones permiten a cu.alquier suceso interior 0 exterior interrumpir la cjccuci6n del prosrruna principal en cualquier momento. En el momenta de producirse la interrupdon, el PIC ejecuta un saito ala rutina de atenci6n a la interrupci6n, previamente definida por el programador, donde se atendera a la demanda de la interrupci6n. Cuando se termina de ejecutar dicha rutina, el PIC retoma a la ejecuci6n del programa principal en la misma posicion de la memoria de programa donde se produjo la interruption. El manejo de interrupdones permite realizar programas que no tienen que estar continuamente consultando sucesos internos 0 extemos mediante tlknicas de consulta 0 polling, las ruales provocan retardos 0 paradas en la ejecu.cion del programa principal. Los TIMER 0 temporizadores son m6dulos integrados en el PIC que permite realizar cuentas tanto de eventos internos como extemos. Cuando la cuenta es interna se habla de temporizaci6n y ruando la ruenta es extema se habla de contador. Los timers estan intimament'e Iigados al uso de las interrupciones, pera no por ello se utilizan siempre de forma conjunta.
4.2 Interrupciones Al producirse una interrupd6n, el PIC salta automaticamente a la direcdon del vector de interrupcion de 1a memoria de programa y ejeruta la pordon de p rograrna, correspondiente a la atendon de la interrupti6n, hasta encontrar la instruccion RETFIE. AI encontrar dicha instruccion, abandona la interrupd6n y retoma a la
83
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC posicion de memoria del programa principal desde la que salta al producirse la interrupci6n. Las fuentes de interrupci6n dependen del PIC utilizado. Por ejemplo, el PIC16F84 tiene 4 fuentes de interrupci6n y la familia PIC16F87X Hene entre 13 y 14. Los PIC de gama baja y media tienen un Unico vector de interrupcion situado en la direccion 04h de programa (figura 1), mientras que los de gama alta tienen dos vectores de interrupci6n de distinta prioridad, alta y baja, situados en la posicion OSh y 18h de In memoria de programa. PC<12:0> ~L~
utl'lUlEn.w Hi....11 de I. Pile
n
NI"",, 2 d. I. PU.
.... _...... _-_ ..
~
_.....
Hlvel. de III PliJI
Veclo. de Rf, ...1
..........•.._..........._.. Vecto. de 1n1al'!'\l!)CHln
Pe;;""
°
Pallll\l \
"".
-""."". --.
Q1FFh
OFFFh
,om, PlIogll\Il
11FFh 1FFFh
Pegl"" J
Figura 1. Mrmoria dr program.. lposicion drl vrctor de interrupdonJ
Al poseer un unico vector de interrupci6n (dos en 1a gama alta), el PIC posee W10S registros de control donde mediante Ia utilizaci6n de banderas, 0 flag s, el usuario puede determinar que es 10 que ha producido la interrupd6n; ademas, en estos registros, se pueden habilitar 0 no las distintas fuentes de interrupci6n (mascaras de interrupci6n) e, induso, permite una habilitaci6n general. Cuando la habilitacion generaJ esta activa y algunas, 0 todas, la particulares tambiE!I1 10 estan, los flags se activan en e1 caso de producirse algunas de las interrupdones, de tal mane-ra que el programador puede, mediante el testeo de dichosftags, actllar de la forma mas adecuada.
84
4. Las interrupciones y los temporizadores
La faniilia P/C16F87X tiene hasta 14 fuentes de interrupci6n. Posee un registro de control, INTCON (figura 2), que permite la habilitad6n de mterrupciones y el manejo de losfiags. La habilitadon general se activa medianteel bit Glf (INTCON<7», el cual es desactivado en el reset; por 10 tanto, hay que habilitarlo por programa. Existen 4 registros adiciona les para la gestion de las interwpciones; PIR1, PIR2, PI El Y PIE2. Cuando se responde a una interrupcion, el bit GIE es inhabilitado para evitar interrupdones sucesivas. La direcoon de retorno del programa principal se almacena eil ia pila y el contador de programa se carga con la direccion 0004h. Una vez en la wtina de atencion a la interrupci6n se puede determina r la Fuente de la interrupcion mediante el testeo de los diferentesjlags. Losjlags activos deben ser "borrados" antes de abandonar la rutina de interrupci6n para evitar reentradas errOneas. Registro ITCON (dlreccion RAM: OBh/8Bh/ l0Bh/18Bhl [PIC16F87x] RIW~
GIE
RIW-O I
I PEIE
I
RIW-O TOlE
RiW-O I INTE
RiW-O I R81E
RIW-O I TOIF
RiW-O I INTF
Blt7
I
RIW-'
.,to I R81F
Flgur
bit 7:
Gl f: Bit de habilitaci6n global de las interrupciones. 1 - Habilita todas las in terrupciones no enmascararbles.
0= Las deshabilita. bit 6:
PEIE: Bit de habilitacion de las interrupciones de perifericos.
1 - Habilita todas las interrupciones no enmasca rables de perifericos.
0= Las deshabilita. bit 5:
TOl E: Bit de habilitacion de la in terrupcion por desbordamiento del TMRO: 1 - Habilita la interrupci6n del TMRO.
0 - La deshabilita. bit 4:
INTE: Bi t de habilitaci6n de la interrupci6n extema RBOffNT. 1 ~ Habi lita la interrupci6n del RBOIlNT. 0"" La deshabilita.
b it 3:
RBlE: Bit de habilitad6n de la interrupci6n por cambio en el PORTB. 1" Habilita la interrupd6n del PORTB.
0 - La deshabilita.
85
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
TO lF: Bit de flag de la interrupcion del TMRO.
bit 2:
I - El registro del TMRO se ha desbordado (debe borrarse por software). 0= EI registro del TMRO no se ha desbordado.
INTF: Bit deflag de la interrupci6n del RBOIINT.
bill:
1 - Se ha producido una mterrupci6n extema por RBOIINT (debe borrarse por software). 0 '" No se ha producido la interrupci6n. RBlF: Bit de flag de la interrupti6n por cambia en PORTB.
bit 0:
1 .. Al menos uno de los tenninales RB7:RB4 ha cambiado deestado (debe borrarse por software). 0'" No se ha producido cambia en dichas pati llas. Reglstro PIE1 (dlrecclon RAM: SCh) [PIC16FS7x]
I
RJW-
RJW-
I
RJW-
I
RJW-
I
RJW-
RJW-
RJW-
RJW-
[ CCP11E [ TMR2tE [ TMR11E
BitO
Bil7 Figur.. 3. Regbtro PIE I
bit 7:
PSPIE: Bit de habili tacion de interrupcion por lecturajescritura del puerto paralelo esclavo: 1 = Habilita la interrupci6n por lectura/escritura del PSP. 0- La deshabili ta.
bit 6:
A DIE: Bit de habilitacion de interrupcion por conversion AID.
1 - Habilita la interrupcion. 0 " La deshabilita. bt 5:
R CIE: Bit de habilitaci6n de interrupci6n por recepci6n del USART.
1 = Habilila la mterrupci6n. 0- La deshabilita. bit 4:
TXlE: Bit de habilitaci6n de mterrupci6n por transmisi6n del USART.
1 .. Habilita la mterrupci6n. 0- La deshabilita.
86
4. las interrupciones y los temporizadores bit 3:
SSPIE: Bit de habilitaci6n de interrupci6n del puerto serie sincrono. 1 '"' Hahilita la interruption. 0 .. La deshabilita.
bit 2:
CCPUE: Bit de habilitati6n de interrupci6n del m6dulo CCP1. 1 '" Habilita la interrupci6n.
0'" La deshabilita. bit 1:
TMR2 1E: Bit de habilitaci6n de interrupcion por igualaci6n del TMR2 y PR2.
1'" Habilita la interrupti6n.
0'" La deshabilita. bit 0:
TMRllE: Bit de habilitation de interrupcion por desbordamiento del TMR1. 1 '" Habilita la interrupti6n. 0 - La deshabilita.
Re-glstro PIE2 ,dJreccion RAM: SDh, [PIC16FS7x] U.Q
u-o
Be LIE BltO
Blt7 Figura 4 . Regfstro PIEZ
bit 7:
No implementado. Se lee como O.
bit 6:
Reservado.
bit 5:
No implementado. Se lee como O.
bit 4:
EETE: Habilitacion de interrupcion por escritura en EEPROM. 1 '" Habilita la inlerrupcion.
0'" La deshabilita. bit 3:
BCU F: Flag de interrupcion por colision en bus 1 = Colision en el bus SSP 0 12C en modo master. 0= No hay colisi6n.
bit 2-1: No implementados. Se leen como O. bit 0:
CCP2I E: Habili taci6n de interrupcion del m6dulo CCP2. 1 - Habilita la interrupci6n. 0", La deshabilita
87
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC Los registros PIRI y PIR2 rontienen losflngs de las djstinlas inteTrupdones. EI rompilador C se encarga de generar 1'.'1 cooigo necesario para leer y borrar dichosflngs, tal y como podremos ver en el siguiente apartado.
4.2.1 Interrupclones en C En el compilador C la directiva habitual en el manejo de las internlpciones es IiTNL,;rxxx. Especifica que la funcion que Ie sigue es una funcion de interrupcion; ademas, no necesita mas parametros.
Las posibles directivas son las siguientes (en gris las posibles interrupciones en la familja PIC16F87X): Interrupciones
Oescripci6n
tINT_AD
Conversion AD complela.
'INT ADOF
Conversion AD fuera de rango de tiempo.
' INT_BUSCOL
Colision de bus.
'INT BUTTON
Por boton (14000).
;INT_CANERR
Error en 1'.'1 modulo CAN.
:INT_CANIRX
Mensaje invalido en 1'.'1 bus CAN.
~ I NT_CANRXO
Bus CAN recibe un nuevo mensaje en buffer O.
;INT CANRXI
Bus CAN recibe un nuevo mensaje en bllffer 1.
#INT_CANTXO
Bus CAN trar.smision complela en buffer O.
: INT CANTXl
Bus CAN transmision completa en bllffer 1.
;: INT_ CANTX2
Bus CAN transmision com piela en buffer 2.
; INT_CANWAKE
Bus CAN evento de activacion 0 wake-up.
#INT_CCPl
Unidad 1 de captura, comparacion y PWM.
;: INT_CCP2
Unidad 2 de captura, comparaci6n y PWM.
: INT_CCP3
Unidad 3 de captura, comparacion y PWM.
"NT_CCP4
Unidad 4 de captura, comparacion y PWM.
; INT CCPS
Unidad 5 de captura, comparaci6n y PWM.
#lNT_COMP
Comparador.
JINT_COMP1
Comparador 1.
88
4. las interrupciones Vlos temporizadores Interrupciones
Descripci6n
ITTNT_COMP2
Camparador 2.
IT INT_CR
Encriptaci6n finaJizada.
~INT_EEPROM
Escritura EEPROM finalizada.
;tINT EXT
lnterrupdon extema (RBO).
=TNT_EXTl
Interrupci6n extema it1.
ItINT EXT2
Interrupcion extema 1t2.
,ttINT_EXT3
Interrupcion extema 113.
=INT 12C
lrtterrupcion 12C (14000).
ff lNT_tCl
Entrada captura #1.
;tINT IC2
Entrada captura ;;2.
, INT 1C3
Entrada captura it3.
#INT LCD
Actividad LCD
,INT_LOWVOLT
Detectado bajo voltaje.
;:rNT_LVO
Detectado baja voltaje.
;tINT OSCJAIL
Falla en oscilador.
ItI NT_OSCF
Fallo en oscilador.
:oINT PSP
Dato de entrada en puerto paralelo.
#INT]WMTB
Base de tiempo PWM.
.ttINT RA
Cambia de estado en AD-AS .
.;' INT_RB
Cambia de estada en B4-B7 .
ii INT Re
Cambia de estado en C4-C7.
=lNT_RDA
RS232 dato recibido.
; INT_RDAO
RS232 data recibido en buffer O.
'; INT_RDAI
RS232 data redbido en buffer J.
itINT_RDA2
RS232 data recibida en buffer 2.
#INT RTCC
Desbordamiento del Timer 0 (RTCC).
ITINT_PSP
Escriturallectura del puerto paralela.
89
4. Las inlerrupciones y los lemporizadores
(nterrupciones
Descripci6n
:lNT_COM P2
Comparador 2.
#INT_CR
Encri ptaci6n finalizada.
t i NT_EEPROM
Escritura EEPROM finalizada.
, I NT_EXT
lnterru pci6n extema (RBO).
; INT_EXTl
lnterru pci6n externa:;1.
:: INT_EXT2
Interru pci6n externa : 2.
#INT_EXT3
Interrupci6n externa
:: INT 12C
lnterrupci6n llC (1 4000).
, INT _ICI
Entrado caplura #1.
/l INT_IC2
Entrada caplura #2.
' INT_1C3
Entrada captula ::3.
.; INT_lCD
AClividad LCD
: INT LOWVOLT
Detectado bajo voltaje.
:INT LVD
Detcctado bajo voltajc.
II INT_OSC FAIL
Falla en oscilador.
#INT_OSCF
Fallo en oscilador.
#INT_PSP
Da ta de en trada en puerto pa rale lo.
#INT PWMTB
Base de tiempo PWM.
::INT_RA
Cambio de estado en AD-AS.
: INT RO
Cambio de estado en S4-B7.
' INT RC
Cambio de estado en C4-C7.
#INT_RDA
RS132 dato redbido.
#INT_RDAO
RS132 data redbido en buffer O.
#INT_ROAI
RS232 dato recibido en buffer I.
::INT_RDA2
RS232 d ata recibido en buffor 2.
/l INT RTCC
Desbordamiento del Timer 0 (RTCC).
::INT_PSP
Escritura/lectu ra del puerto paralelo.
~3.
89
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
lnterrupciones
Descripcion
#lNT SSP
Actividad en SPI 0 12C.
UNT_SSP2
Actividad en SPI 0 12C Port 2.
;lNT TBE
RS232 buffer de transmision vado.
#INT_TBEO
RS232 buffer 0 de transmisi6n vado.
#INT TBEl
RS232 buffer 1 de transmisi6n vade.
#INT_TBE2
RS232 buffer 2 de transmisi6n vado.
-'INT TlMERO
Desbordamiento del Timer 0 (RTCC).
~INT_TIMERl
Desbordamiento del Timer 1.
;INT_TIMER2
Desbordamiento del Timer 2.
#INT_TIMER3
Desbordamiente del Timer 3.
#INT_TIMER4
Desbordamiento del Timer 4.
#INT_TIMERS
Desbordamiento del Timer 5.
#INT_USB
Actividad en el USB.
Existe una directiva ;INT_DEFAULT que implica que se utilizara la funcion que Ie acompafia si se activa una interrupd6n y ninguno de los f1ags est" activo. La directiva ~ INT_GLOBAL implica que la fund6n sustituye todas las acdones que inserta el compilador al aceptarse una interrupci6n. Se ejecuta .solamente 10 escrito en dicha funci6n. No se suele utilizar y si se hace debe hacerse con mucho cuidado. Si se utilizan [as directivas de interrupci6n, el compilador genera el c6digo nece· sario para ejecular la fund6n que sigue a la directiva. Ademas genera el c6digo necesario para guardar a1 principio y restituir al final el contexto; tambien borrani el flag activo por la interrupti6n.
EI compilador C induye funciones para el mejor manejo de las directivas de interropd6n: enabJe_interrupts (nivei);
nivel es una constante definida en un fichero de cabecera (16F87X.h - figufa 5-) y genera el c6digo necesario para activar las mascaras correspondientcs, afectando a los registros lTCON, PIEl Y PIE2. En el PIC16F876, los "ruwles" permitjdos son:
90
4. Las interrupciones y los temporizadores
enable_interrupts (nivel); GLOBAL
INT_RTCC
INT_TIMERO
ITCON(OBh)
PIE1(SCh)
PIE2(SDh)
11000000
COh 00100000 20h
INT_EXT
00010000 10h
INT_RB
0000 1000 08h
INT_AD
DIOOOOOO 40h
INT_RDA
00100000 20h
INT_TEE
00010000 10h
INT_SSP
00001000 OSh
INT_CCP1
00000100 04h
INT_TIMER2 INT_TIMERl
00000010 02h 00000001 01h
INT_ EEPROM
00010000 IOh
INT_BUSCOL
00001000 OSh
rNT_CCP2
00000100
04h
GLOBAL equivale a GIE '" PEIE '" 1 Y debe activarse de forma independiente. El
resto activar;in la mascara correspodiente.
disable_interrupts (nivel); Realiza la funci6n contra ria a la anterior, inhabili ta las mascaras de la interrupci6n correspondiente.
91
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
'"'
'-ro_,
,.
'-"'-'
oero
GLOUL
"
...
~- me lIlT~RD
!U
x01'.O "rr 1108
IN'T_trr
•
...
• • •
llfT_ ~ 11fT TOE ,~-
•
,~- T1I1LRI
" -
" '1,-
,~- T1I1LJU
CCPI ,~- CCN lifT_SSP ,~
,~-
'"
,~- lIiJ!1COL ,~- E[PIIOII
d,
m'_TlHRO
Figura 5. Parte d~ flc:hero include 16F87x.h
4.2.1 .1 Interrupclon exterior por RBO Es una interrupci6n basica, comun a la mayoria de los PIC. Permite generar una interrupd6n tras el cambia de nivel de alto a bajo 0 de bajo a alto en la entrada RBO. La dirediva utilizada es :INT_EXT y se debe acompaiiar de las siguientes funciones (afectan al bit 6 del registro OPTION_REG, ver Figura 6). exUnU~dge
(H_TO_U; La interrupci6n es por flanco de bajada (activa el flag INTF).
exUnt_edge (L_TO_H); La interrupci6n es por f1anco de subida (activa el flag INTF). R/W-l
1 RBPU
R/W-l
R/W-l
I INTEDG I Toes
R/W-l
I
lOSE
R/W-l
R/W-l
R/W-l
IpSA I PS2 I PSI
R/W-l
Ipso
BitO
Blt7
Figura 6. Registro OPTION_REG
bit 6:
lNTEDG: Bit de seleccion del flaneo de interrupcion de RBO. ] - La interrupci6n es por flanco de subida del pin RBO/INT.
0= La interrupci6n es por flanco de bajada del pin RBO/INT.
92
4. Las interrupciones y los lemporizadores
---
Ejemplo 1: Enccndcr y 'wagar, c0l15ccIIliuamcI1fc, 1111 LED ell la paWla RB7 wando sc produzca un cambio de nivel cilia patilla RBO (ver figura 7). COmpOIlClltes: ISIS: PIC1 6F876, RES, LED-GREEN Y SW-SPDT-MOM
"""NT .S>
OSC1JCLK,. OSC21CLKOlJT
'---.l!.f MCUWppITh'V
""
SW-SPOT-MOM
RB3IPOM
.S<
RAW"'"
"'" p'----, """"'"
RAl/ANl
RA2lAN2NRURA3lAH3NREf+ RA4/TOCKJ
RB11PGD
""",....,
01
R1
""
FlgurOl 7. Ejemplo 1 #include <16F876 . h> Iruses XT , NOWDT , P(JT,NOWRT
luse deldy(clock- 4000000) IU!fe f"st_lo(B)
inti cambiO""O ;
II Variable de cambia
lINT_EXT
II Atencion a interrupcion por cambia en RBO
ext_isrO (
II Funcion de inte r rupcion
al1cput_co ggle(pin_B1) .vold !Min"
{ set_t n: s_B(OxOl} ;
II BO como entrada , 87 como siilllida
output_low(PIN_ B7) ;
II Apaga LED
port_ byullups(TR(JEJ;
II Pull-up para RBO
enable_lnterrupts(1nt_ext) ; e x t_int_edge (L_tO_H) ;
II por flanco de subidll
enllble_interrupts (GLOBAL) ;
II Habilita into generlll
while (11 {
II Habllita int o RBO...
II Buele infini to de espera
Figura 8. programa del ejemplo I
93
Compilador CCC S y Simulador PROTEUS para Microconlroladores PIC
4.3 TIMERO EI bloque mntional TIMEROI WATCHDOG es un contador (registro) de 8 bits, incrementado por hardware y pragramable. La cuenta maxima es de 255 (el incremento es constante e independiente) . • Contador: cuenta los eventos extemos (a traves del pin RA4ffOCK1) . • Temporizador: cuenta los pulsos internos de reloj. Se puede insertar un prescaier, es door, un divisor de frecuencia programable que puede dividir por 2, 4, 8, 16,32, 64,1280256. La frecuencia de conteo es una cuarta parte de la frecuencia de reloj (fosc/4). Posteriormente, con el usn del presca/er se puede dividir la freruencia. EI bloque del T1MERO puede funcionar como WATCHDOG, 10 que permite que durante el funcionamiento normal del microcontrolador, un desbordamiento (0 timeOllt) del Watchdog provoque un reset (Watdldog Timer Reset). Para evitar el desbordamiento se debe, cada aerlo tiempo y antes de que lIegue at limite, ejecutar una instruccion CLRWDT que borra el Wardrdog y que hace comenzar un nuevo conteo desde cera. Se basa en un oscilador RC interno, independiente del oscilador del microcontrolador y que no requiere ningun componente extemo. EI Watchdog cuenta induso si e! reloj conectado a OSCVCLKI ylo OSC2/CLKO esta parada, por ejemplo, por la ejecuci6n de una instrucci6n SLEEP 0 por un defecto del cristal oscilador.
Los registros implkados en la configuraci6n del TIMEROfWDT son los siguientes: OPTION_REG: configura el "hrudware" del TIMEROfWDT. l NTCON: permite trabajar con la interrupcion del TIMEROfWDT. TRISA: habilita la patilla RA4.
Reglstro OPTION_REG Idlrecclon RAM: 81h/181hl [PIC16F87x] RIW-1 RBPU
RIW-1
RIW-1
I INTEDG I TOeS
RIW-1 I TOSE
RJW-1
RJW-1
IpSA I P52
Blt1
TOeS: Procedencia de las sei'iales: 1 = RA4ITOCK1.
0: Reloj interno. bit 4:
TOSE: Tipo de £lanco en el TOCKl I RA4: 1 = Flanco descendente.
0 - Flanco ascendente.
94
RJW-1
Ipso BltO
Figura 9 . Re gi stro OPTION_REG
bit 5:
RIW-1 I PS1
4. las Inlerrupt:lones Vlos lemporizadores
------------------------bit 3:
PSA: Asignad6n del divisor de frecuencias:
1=WOT. 0 - TMRO. bit 2:0: P52:PSl:PSO: Determina el divisor de frecuencias a actuar segun la s iguiente tabla.
Valor
RangoTMRO
RangoWDT
000
1:2
1.1
001
H
1,2
010
1:8
1:4
011
],16
],8
100
1:32
1:16
101
],64
1:32
110
1:128
1:64
111
],256
1:128
El tiempo de desbordamiento del TIMERO se caJcula segun la siguiente ecuaci6n: T .. TCM ·Prescaler·(256 - Carga TMRO)
Donde To,t es el cicio maquina que se puede caJcula r mediante la ecuadon:
4.3.1 TIMERO
en C
La funcion para configurar el TlMERO es: setup_timer_O (modo); Donde modo esta definido en el fichero de cabecera (afecta a los bits 5:0 del opTlON]EG), Setu p_Timer_O(modo); RTCC_ INTERNAL . RTCC EXT_ L_TO_lI ~
OPTION_REG(Sl h/lSl h) 00000000 GOh 00100000
lOh
95
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
Setup_Timer_O(modo);
OPTION_REG(81h/181h) 00110000
RTCC_EXT_H_TO_ L
JOh 00001000
RTCC_ DIV_ I
68h 00000000
RTCC_ DlV_ 2
OOh 00000001
RTCC_DIV_4
OIh 00000010 02h
RTCC_DlV_S
00000011
RTCC_ DIV_ 16
03h 00000100
RTCC_DIV_32
0," 00000101
RTCC_ I)IV_6-'
OSh 00000110
RTCC_DIV_ 128
06h
00000111 07h
RTCC_DIV_256
Los distintos modos se pueden agrupar mediante el empleo de simbolo I. setup_ timer_O
(RTCC_DIV_ 2 I RTCC_EXT_L_TO_H) ;
La funcion para configurar el WDT es: setup_wdt (modo); Donde madoesta definido en el Fichero de cabecera (afecta a los bits 3:0 del OPTION_ REG), Setup_wdt(modo); WDT_18MS WDT_36MS
WDTJ2MS
96
OPTION]EG(81hI181h) 0000ll)()()
OBh 00001001 09h 00001010
OAh
4. las interrupciones y los temporizadores
Setup_wdt(modo);
OPTION_REG(81h/l 81 h) 00001011
WDT_I44MS
OBh 00001100
WDT_288MS
OCh 00001101
WDT_576MS
ODh 00001110
WDT_1152MS
OEh 00001111
WDT_2304MS
OFh
Para activar el Watchdog se deben utilizar los bits de configurad6n mediante la directiva ; FUSES: ~fuses
WDT
#fuses NOWDT
Activado. Desactivado.
EI compilador C suministra una sene de funci ones para leer M£ROIWOT. Para escribir un valor en el registro :
0
escribir en el Tl-
seCtimerO (valor); wlor: entero de 8 bits. Para leer eJ valor actual del registro: valor = get_timerO 0; wlor: en tero de 8 bits. Tambien permite realizar la puesta a cero del Watchdog (como CLRW01): restarl_wdt 0; Ejemplo 2: Generar ul/a SClial Cllfldrada de 1KHz utilizmldo /a interrupcion del TIMERO (ver figura 10). COII/pollelltes ISIS: PIC16F876 e Illstrumen/os ISIS: OSCILLOSCOPE y COUNTER TIMER. Para generar una seiial de 1 Khz se necesita un semiperiodo de 500 fls. SegUn la eruacion de desbordamiento del K, utilizando un cristal de 4 MHz y un presca/er de 2: T- TCM ·Prescaler·(256 - Carga TMRO)
97
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
donde x - 6, es door, se d ebe cargar el TlMERO con el valor 6. Pero esta relacion sOlo se rumple si se trabaja en ensamblador. AI trabajar en C, el compiJador genera lineas de c6digo que aumentan el hempo de ejecuci6n del programa y, por ello, es necesario ajustar el valor final. En este caso se ha utilizado un valor de carga de 29 (OxlO).
Figura 10. Ejemplo 2 'INCLUDE <16F876 . h> luse delay (clock - 40aOOOO) Ifuses XT,NONDT ,use st"nd"rd_io(B) hllt_ TIMERO void TIMERO_isr(void} output_toggle (PIN_BO); .'!et_ timecO (OxlB); void mlJin ()
/1 Sa recargii el tlmerO
f
setup_ timec_ D(RTCC_INTERNALIRTCC_DIV_2); set_timeI'D (OxlB),.
II Coniigurdcion time,c-O II CacgiJ del timecO
enablfLinteI'rl,lpts (INT_ TIMERO);
II HiJbillta lntecrupc16n timecO
enable_interrupts (glob"l) ;
II Habl11t .. interrupci6n gener"l
",hile
(1):
1/ bucle in/mit"
J Figura
98
1,. Proglama del EJemplo 2
4. las interrupciones y los temporizadores EI compilador se encarga al entrar en la interrupci6n de inhabilitar las interrupciones y al saUr de borrar losjlags, por 10 que no es necesario hacerlo por programa. Se puede observar la senal con el osciloscopio digital y activando los cursores en el menu de Trigger (figura 12) y la medida es de 998.76 ~s.
Figu ra 12. Osc:iloscopio digital
4.4 TIMER1 Y TIMER2 EI modulo TIMER1 es otro temporizador/contador con las siguientes caracteristicas: • Trabaja con 16 bits (con dos registros de 8 bits: TMRIH y TMRlL). • Ambos registros se pueden leer y escribir. • Interrupci6n por desbordamiento de FFFFh a OOOOh.
• Reset por disparo del mOdulo CCP. • Controlado por el registro neON (ver figura 13). Con el bit TMR10N (TlCON
99
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
10- Prescaier a 1:4. 01 '" Prescaier a 1:2.
00= Prescnier a 1:1.
Flgur.. fl. Reglnro TICON
bit 3:
TlOSCEN: Bit de habilitacion deJ oscilador del TMR1: 1 .. Oscilador habilitado.
0- OsciJador parada. bit 2:
TlSYNC: Sincronizacion de la entrada de relo; externa. Si TMR1CS "" 1: 1 = No sincronizado con la entrada de reloj interno.
o- Sincronizaci6n de la entrada del reloj externo. 5i TMRICS '" 0:
Este bit es ignorado. TMRl unliza el relo; interno. bit 1:
TMR1CS: Bit de se!~cci6n de 101 fuente de reloj para el TMRO: I
=
Reloj exlerno desde el pin RCa/naSa/TICK] (flanco de subida).
0 '" Relcj interne (F osJ4).
bit 0:
TMR10N: Bit de habilitaci6n del TMR1: 1 .. TMRl habilitado.
o- TMRl parado. El TIMER1 puede operar en los siguien tes modos: • Como temporizador. • Como contador sincrono. • Como contador asincrono. El modo de operaci6n se establece mediante el bit TMRICS (TICON<1» . En modo temporizador, el TIMER1 Sf' incrementa en cada cicio de instrucd6n. En modo con tad or se incrementa por Danca de subida de la senal externa. Cuando
100
4. las interrupciones Vlos temporizadores se habilita eJ oscilador interno del TlMER1 mediante el bit TlOSCEN, las patillas RCIfr10S1 y RCoffiOsomCKI se configuran como entradas ignorando el va lor de TR1SC<1:0>. El TlMER1 tiene un reset interno que puede ser genefado par el mooulo CCP. Las interrupciones del TIMERl se controlan a traves de los registros PIE1 y PIR1. El tiempo de desbordamiento del TIMER1 sc calcula segun la siguiente ecuaci6n:
T= T CM·Prescaler·(65536 - Carga TMR1) Donde T CM es el cicio maquina que se puede calcu.lar mediante la ecuacion: T CM
- 4fF osc
EI TIMER2 es un modulo temparizador can las siguientes caracteristicas: • Temporizaci6n de 8 bits (regis/ro TMR2). • Registro de periodo de 8 bits (PR2). • Ambos registros se pueden leer 0 escribir.
• Presc(I/er programable par programa (1:1 , 1:4, 1:16). •
Postallcr
programable por programa (1:1 a 1:16).
• Internlpci6n controlada por PR2. • El mooulo SSP utiliza opcionalmente el TlMERl para generar una seiial de reloj. EI TIMER2 tiene un registro de control T2CON (figura 14). El TIMER2 puede ser habUitado mediante e l bit TMR20N (T2CON<2» para optimizar el consumo de palencia.
Reglstro T2CON Idirecclon RAM: 12h1[PIC16F87x] _
TOUTPSl
I TOUTPS2 I TOUTPSl I TOUTPSO I TMR20N I T2CKPSl IT2CKPSO
8lt7
81tO
Flg.."a t 4. Registro T2CON
bit 7:
No implementado: Se lee como O.
bit 6:3: TOUTPS3:TOUTPSO: Seleccion del valor del pas/scaler del TMRl. 0000 - Postscnler a 1:]. 0001 - Postscall'r a 1:2.
101
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC
1110"" Pastscaler a 1:15. 1111 bit 2:
:<
Postscaler a 1:16.
TMR20N: Bit de habilitad6n del TMR2: 1 .. TMRl habilitado.
0'"' TMRl parada.
biI1:0: T2CKPSl:T2CKPSO: Selecci6n del valor del prescaler del TMRl.
OO-Prescalera 1:1. 01 - Prescaler a 1:4.
Ix" Presenter a 1:16.
EI T/M£R2 se puede emplear coma base de tiempos para la modulaci6n en ancho de pulso (PWM) mediante la utilizaci6n del mOdulo CCP. EI TLM£R2 se puede leer a escribir y es borrada en eI reset. La entrada de relaj (FOSC/4) tiene un prescnler de 1:1. ] :4 a 1:16 seleccionado mediante los bits T2CKPSl:T2CKPSO (f2CON<1:O». La salida se obtiene a !raves de un postscaler (de 1:1 a 1:16) que permite generar la interrupci6n cuyo flag se encuentra en TMR2IF, (PIRl<1». Los contadores de prescnler y postscnler son borrados ruanda se escribe en el registro TlMER2, ruando se escribe en el registro T2CON a en cualquier reset. EJ TlMER2 no se barra euando se escribe en el T2CON. EI tiempo de desbordamiento del TIMER2 se caleula segun la siguiente eruaci6n: T .. T(M·rrrescaler·(Carga TMR2 + 1)·PostscalerJ
Donde TCM es el cido maquina que se puede calcular mediante la ecuad6n: Ta'l .. 4/Fosc
4.4.1 TIMER1 Y TIMER2 en C La configuraci6n del m6dulo TMR1 en el compilador de C se realiza a traves de la fundon; setup_timer_l (modo); Donde modo esta definido en el fichero de cabecera (afecta a los bits 5:0 del registro neON), TlCON(lOh)
oooooooo OOh
102
4. Las Interrupciones y los temporizadores
Selup_Timecl(modo);
T1CON(10h)
Tl_INTERNAL
lOODOIOl
Tl_EXTERNAL
10000 111
Tl_EXTERNAL_SYNC Tl_CLK_OUT
85h 87h 101XXJ011
83h 00001000
OSh
TI_DlV_BY_l
OOOOOOOO
Tl_D1V _BY_2
00010000 10h
T1_DIV _ BY_4
00100000 20h
Tl_ DIV_ BY_B
OOh
0011 0000
30h
Los distintos mOOos se pueden agrupar mediante el empleo de sfmbolo I. La lectura y escritura en el mOdulo TMRl se realiza a traves de las siguientes funclones: vaJor = get_timerl 0; set_timerl (valor); donde valor es un entero de 16 bits. La configuradon del m6dulo TMR2 en el compilador de C se rea liza con la luncion:
setup_timer_2 (modo,periodo,postscaler); donde:
• i1t!riodo es un valor entero de 8 bits (0-255) para el registro PR2;
• pastscaler es el valor del postscaler (1 a 16). Afecta a los bits 6:3 del registro T2CON;y • modo afecta a los bits 2:0 del registro T2CON.
103
Compilador e ecs y Simulador PROTEUS para Microcontroladores PIC
Setup_Timec2( modo,periodo, postscaJer);
T2CON(12h)
T2_DlSABLED
OOOOOOOO ooh
.
00000100
Tl_Orv_BY_l
04h
00000101
Tl_Orv_BY_4 n~
05h 000001 10
DIY _BY_16
06h
La lectura y escritura en el mOdulo TMR2 se reauza con la ayuda de las siguientes funciones: valor = geUimcr2 0; set_timer2 (valor); donde valor es un entero de 8 hits.
Ejemplo 3: Generar IIIla ftmcioll que permUn renliznr retnrdos de 1 segllndo empiealldo 1'1 TIMER1. Componcntes ISIS: PIC16F876.
..
01 ~
Figura 15. EJemplo 3
Se calcula un periodo parcial de 0.5 segun~os y se repite dos veces:
104
4. Las interrupciones y los temporizadores
0.5 - 4/Fosc'(65536-x)·P con F0'iC ""- 4 MHz Ypreescaler 1:8,; el TMRl ., 3036. NOTA
Para observar mejor el periodo conectar el COIlf/fer Timer a CE y ponerlo en modo TIME (segundos).
#include <16f876 . h> #fuses XT,NOWDT luse
dpl~y(clock~4000000J
luse
Stand3rd_~o
(bl
intl Lont-O; tint_ TIMERl void templs(void) i f (cont--l;
,1 Interrupci6n TIMERl "
Funci6n
output_toggle(PIN_B11;
set_timed (3036) ;
II Cada 2 interrupciones de O.S s "
reci.lrgi.t del THRl
COnt-- .. ;
mi.tln ()
set_timed (3036) ;
// recllrf}a del TMRl
eni.tble_interc upts (INT_TIMERll ; enable_in terrupts (qlobi.llJ ,.
/ hi.lbjliti.t interrupci6n tLmerl habiliti.l interrupc16n qenerlll
while(l) ,.
Figura 16. Program.. del ejemplo ~
Tambien se podria realizar sin interrupciones, esperando a que el TMRl se desbordase. ~ inc1ude
<16f876 . h>
Ifuses XT,NOWOT luse dela}' (clock-4000000) luse st .. ndard_ io (bl
105
Compilador CCCS y Simulador PROTEUS para Microconlroladores PIC templ.,() int cont-O;
output_togg1e(PJN_BlJ ..
while (cone<2i
II Par.!! cont
set_timerl
II Inic1allzlJ e1 TMRl
(3036);
while (get_timerl(»-3036) ..
II Esper.!! a que S6 de-sborde (0.5
$)
cont++;
m.!!in ()
while(l} (
templs();
II t1am"d" " 1" funci6n de
~emporizllci<'ln
Figur;t 17. Progr;trrull del ejemplo 3 sin Interrupcionel
EjempJo 4: Medir el allclro de 1111 pulso mediante el TIM£Rl y ltl interfllpci6" extema por RBO (figura 18). Compo/lentes 1515: PIC16F876!1 LM016L. Ills/mlllelltos: OSCILLOS-
COPE Y Gelleradores: PULSE.
LC02
!Pulsoc 182.8uS
Fig\lr.. 18. EJempio 4
106
4. las interrupclones y los temporizadores
Al medir el ancho de un pulso se necesita detectar su flanco de subida y despues su flanco de bajada. Eslo se puede realizar mediante la interrupci6n RBO ya que permite configurar el flanco de disparo. Al produdrse una interrupci6n, porejemplo en el flanco de subida, se puede inicializar el valor del temporizador (TIMER1) en ese momento; se cambia la activaci6n de la interrupci6n del RBO a flanco de bajada y ruanda sc vuelva a producir la sigujente interrupcion por dicho flanco se guarda el valor del temporizador. El ancho de pulso sera la diferencia entre el valor del TIMERl en el flallco de subida y el flanco de bajada. EI ancho de pulso maximo para una frecuencia de 4 MHz (cido maquina de 1 ~IS) es de 65,536 ms (un cicio del TIMER1). EI minima dependera del tiempo que tarda un programa en gestionar la interrupci6n y los calculos. En el ejemplo se puede conseguir medir anchos de pulso de entre 64,934 ms y 69 fls. Modificar el fichero LCD.C paTa que se visualice a traves del puerto C. linclude <16f876.h> Ifuses XT,NOWDT IU8e cIelay(clock-4000000j
#include Int16 TfB;
/1 Tiempo llaneo de bBjada
float AP ;
/1 ValoI final del alleho de pulsD
intl lluevopulso"O;
II ElltIa OtIO pulso
intl cambio-O ;
II Cambia de !laneo de dispaIO
lillt_ ext void fUllcion_ext_int (} ( if(cambio-O) (
(I Funci6n Intereupci6n /1 Flanco de Subida
set_ timed (0);
II
ext_int_edge(O,H_TO_L) ;
II COllfigueae paed flllllCO ba)ada
cambio-1;
II COllteol de cambio de flalleo
else ( TFB-get_ timed (J ;
1lliciali~a
TMRl
II Flanco de Bajadoil II Valoe del TIMERl paca el fianco de boiljada
ext_int_edge (0 , L_TO_H) ;
II ConfiguIae paea llaneo sUbida
cambio-a;
II Conteol de cambia de floilnco
if(nuevopulso--OJ ( Iluevopulso-l;
II Fin de pulso ... II Pulso a calculae
void main () led_illit(};
107
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC Conflguraci6n TIMERl
stJwp_timec_l (Tl_INTERNAL ext_ in t _ edge (0 , L_ TO_ H) .. cambie •
/,' Configurar para fiance subida
0;
1/ Control de cambia de flallco
enable_ interrupts (int _ ext) .. enable_ ..i nterrupt s('llebal) ;
/
Habilitac16n interrupci6n RaO Habili racion general
do I if'(nuevepulso--lj (
AP ..
TFB ~ 1.0 ;
I, ,Pulso nuevo? i l Al1che de pulse en microsegundos de TlMERl.. II ... 4MHZ e1 T .. 1ps'Timerl
princf'(lcdyucc, "lnPulso - 16 . 1Eu$ ", AP) ;
nuevopulso-O ;
J while (TRUE)
i
II Vi:rualil:a medida I en LCD
1/ Pulso medido Bucle lnfinltO
Flgur.. 19. Progr.ilm.il del Ejemplo 4
El generador PULSE se utiliza para crear ta seiial de entrada. Con el bot6n derecho se pueden editar sus caracteristicas (figura 20).
Ejemplo 5: Generar I/lla sellal ClIadrada de 1 KHz IItilizalldo la il/terrl/pda" del TlMER2 (figura 21). Compo"entes ISIS: PIC16F876 e lnsfrllmelltos 1515: OSCILLOSCOPE y COUNTER TIMER.
108
4. las interrupclones y los temporizadores
Para generar lIna senal de 1 Khz se necesita un semiperiodo de 500 ).1s, segUn la ccuacion del desbordamiento del TIMER1, utilizando un cristal de 4 MHz, un pre· eSClller de 4 y un postscaler de 1: T - TQ>i·[Prescaler·(Carga TMR2+1)·Postscaler)
500
~,~
(4/4000000H4'(X+l)'1]
donde X" 125; es dedr, se debe cargar el TIMER2 con el valor 125. Pero esta relaci6n 5010 se cumple si se trabaja en ensamblador. AI trabajar en C, el compilador genera Ilneas de c6digo que aumentan el tiempo d e ejecuci6n del programa y, por ello, es necesario ajustar el valor final. En este caso se ha utilizado un valor de carga de 11.
-.. --. ~.-,
-- - --nil
.. ~
-~
-.
-~
...
,,
~iO/I~l
_
'M
.""
....,..".,
~RI'
~_"t
..'"D
~A:lJM'J/'J!IIu.
~.T
~.
PIMINMT
RCOI1IOSOITIOCI ftCV!10M U'" RC2J<:Crl lIQIIel/lJc:~ ftC4'i",,"~" ~~~D
-~.
ftCT"'-M)l
------Figura 2' , Ejemplo 5
IINCLUDE <16F876 . h> luse Qalay(clock-4000000) #fuses XT,NOPiDT #use st .. "dard_!o(B)
#int_TIMER2 void TlMER2_isr{voia)
,
oucput_TOGGLE(PIN_BO) ;
1/ para semiperiodo alto
sec_tlmer2 (11);
II se tecarga el TlMERO
109
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC void l/IlJin (J f setup_timer_2rT2_DIV_BY_ 4, 124,l) ;
1/ configurltcion TIMER2
enltble_in t errupts (INT_TlMER2),'
// hltbilite in t errupciOn TIMERO
enable_ interrupts(globltl},'
/. hltbllitlt interrupCi6n general
while
(1);
/, bucle infinito
Figura 22. Program" del ejemplo 5
Figura ZJ. Senal de , KHz
Ejemplo 6: lntrodllcir los datos, a traves del tec/ado, de la velocidad de WI motor de corriente cOtlfimlfl y generar IIna seiia/ lIIodulada err 1111 anclw de pl//so proporciolla/ a/ data de veIocidad. Contra/ar Ia velocidad ell rpm y viSllulizaria ell 1m LCD (Figura 24). COlllpollell-
tes
ISIS; PIC18F876, KEYPAD-PHONE, RES, 2SK1058, CELL, LM016L Y MOTOR ENCODER.
Funciona igual que el ejemplo 6 del tema de los puertos, pero ahara se Ie anadc un eantadar de pulsos controlado por el TIMERO. Los pulsos pmceden de un e/lcoder que suministra el modele del MOTOR-ENCODER. Este modelo permite obtener tres tipos de salidas: Ql, Q2 e lOX. Q1 Y Q2 permiten controlar el sentido de giro y la posicion angular del motor (se configuran en la opci6n PULSES PER REVOLUTION del menu de edici6n del rna-. tor). La senal rox suministra un pulso por revolucion y es la que se usara para medir la velocidad del motor en este ejemplo; aJ suministrar un puJso por revoluci6n se pueden eon tar los pulsos por minuto mediante el TMRO y visualizarlos en el LCD.
110
4. Las interrupciones y los temporiladores
"'•
123
•
5
•
7
8
•
0
#
J~==-~ . *
Figura 24. Ejemplo 6
Se puede utilizar el puerto B conjuntamente para el LCD y el teciado, pero se ha preferido utilizar el puerto C para el LCD (esto supone modificar el fichero LCD.C para que en lugar de utilizar el puerto DoE utilice el q, figura 25.
I
1'---------'---=---=====""~.;;•• ;;;.'elecCI6N' . . t"" ~
_.,...rto
1~"_Jl ..._-P
IIOOL!:UI nabl. ~!:UI ta
I'OOl.U" n IOOI.EIJI .~ t
""""*
.~
.,
de"_
••
de .......
.' ,:
I'
",
pel!
u;.,_';t.b_ lcd
."
'.'
ie"
fIbyt. led • IlKFU
.U "ofi""d l&54I_portb_ IO'
-. . . . . . ..,..Ied.
I 7
lion to porte (.(..:Idr... 7)
,"'c"~~c:_'"::c'~--"._-".:c:,:'":""o"":--"O"'-"'''"'"'~'_1-;,.IIdefI ~._....~_~~:::~.,..~~).~Irlo;..,.<:I.'~ f., ... , _ _
~
tru led"
n t t< •• " .
'f
" Figura 25. Flchero LCD.C it modlflc:ar
111
Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC
EI programa se basa en producir tma interrupci6n del TIM ERO cada 0.5 segundos y leer el TIMERO que se utiliza como contador de pulsos extemos. La lectura se debe multiplicar por 2 (preescaler minimo del TMRO) y por 120 (puesto que a1 ser revoluclones por minuto, Sl se mide cada 0.5 segundos se necesitara multiplicar por este factor). La carga del TMRl con un preescaler de 8 es de 3036. 'include '(uses
XT,NOWDT,NOPROT~CT,NOLVP
IUSE DELAY (CLOCK-4000000) 'INCLUD~
'include IUSE STANDARD_IO (8) int16 counter-D; /
•• ~ •••••••••••• INT TIMERl .... • ••• • .. ••••••••••
lint TIMERl void TIMERl lsr(void) COil"
ter-qet_ timecO () ..
counte r -collnter '2'120;
1/ Lectura cont/ldor TMRO
r
Conversi6n a rpm
printf(lCdyUtc, ",611J rpm",colJnter!, 1cd_gotoxy(1,1} ..
set_timecD(D} ,.
'I Reinicill
set_timerl (JD36);
II Recllrg
ClJentll
II " '" •••••••••••••••.•••••••••••••••• •• ••••••• VOID MAIN(}
CHAR K,kllnt-'O'; Char PWMH-O,PWML-O,
lcd_ init II; kbd_init (); PORT_B_PULLUPS (TRUE! ,
setup timer O(rtcc ext_l_to_hlRTCC_DIV_2);
II ConfiglJr"ci6., TMRO
setlJp_timer_l (Tl_internall Tl_DIV_BY_8) ,
1/ Configucaci6n TMRl
~et_t1merO
/1 Eoccado contador
(0);
set_ timed (3036) ;
1/ Carga a 0 . 5 s
enable_interrupts (int_ timerl) ..
enable_in t errllpts(qlobal!; WHILE (11
{
k-klX1_qetc i f (k-'\O') k-kant;
11 Z
II Habilic.!ci6n de intercIJpciones
4. las inlerrupciones y los lemporizadores i!
(fk- '-' )
( k .... · "})
X- ' O';
kant-k; k~k -48 .
PM·fH- k · 28 .PWML- 255-f'WM}/ ; f or(nt'MJI ; PWMH:>O ; PWMH--) ( OUTPUT_ HIGJf(PIN_AO) i }
for(PWNL ; PWML>O ; PWML -- ) f
OU TPUT_LOW/PIN_AD} ;)
Figura 26. Progro;tma del ejemplo 6
Figurit27. Seniti moduli'! y salida del encoder
Ejemplo 7: Segl.n la dllracio" de pulsacion de WI baton obteller Ires fipos de fimeiol1es: Ima pulsacion corIa da II/gar a lI11a fimcitm (por ejemplo encellder 1m led 1"/1 eI pllfrlo A),
IIl1a primera pulsacion mayor de fres segllndos da Illgar a aIm fimcioll (por ejelflp/o elleender lin led en eI puerlo C) y IIl1a segl/nda pilisacio/llllayor de Ires seglmdos de II/gar a afm fimci611 (por ejemplo apagar died del puerto 0. Cua"do se trabaje CO" la seglmda 0 fereern f'lllcioll 110 se atenderrin las pli/saciolles cortas (figura 28). Compo"elltes ISIS: PIC18F877, BUTTON, R£S, LED-RED, LED-BLUE. En este ejemplo se uti liza una tecnica de pol/ing (comprobad6n continua) del estado del pulsador pero empleando la interrupdon del TIMERO; de esta forma no se tendnl al programa principal parado comprobando el estado del pulsador.
113
Compilador CCCS YSimulador PROTEUS para Microconlroladores PIC
-----
-
'"
~!
I
., '"_.- .---. -- ...-=, -~ .".....
M_ *--
~ ~
4~ ~i
7
•
-
_Id
." *
~
~
.
,,,,,,,, '
-"*""'"".., ~ ~
_: ~.
~. ~,
-----
":4~
~
~,-
~
,
'"
.
." ,
""'~.-
. . .*
I
-7
~ 7
Figur. 28. Ejemplo 7
Se programa el T/MERO para que p rovoque una interrupti6n cada determinado tiempo. en este caso de 20 ms. Cada vez que se produzca la interruption se comprueba si el bot6n ha sido pulsado. En el caso de que haya sido pulsado se comprucba si es una pulsacion corta 0 mayor de 3 segundos. Para este ultimo caso se comprueba si el boton esta pulsado durante 150 interrupciones del TIMERO (3s/20ms = 150), Si el bot6n no ha side pulsado se designa como FUllci611_D 6 '" 0, si ha side pulsado una vez durante mas de 3 segwldos se designa como FUllcioll_D6 = 1. si ha sido pulsado momentaneamente se designa como Frmcioll_D6 = 2 Y si ha sido p ulsado durante mas de 3 segundos por segund a vez se designa como FUllci611_D6 = 3. Para d isti ngui r si se ha pulsado durante mas de 3 segundos una a dos veces se utiIiza una variable de control (que se Ilamara CON_D6) que puede valer cera 0 uno, dependiendo de si es la primera vez 0 la segunda vez que se pulsa. Para controlar el tiempo que esti el bot6n pulsado se utiliza una variable (06) que se ira incrementando si el bat6n esta pulsado y se produce una interrupci6n del TMRO. 'INCLUDE <16F811.h> Idevice adc-lO luse delay (clock "4000000/ 'fuses XT,NOWDT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG #USE FAST_Ie (B)
'BYTE TRISA • Ox8S 'BYTE PORTA - OxOS
114
4. Las interrupciones y los temporizadores 'BYTE T1USC
0,,87
'BYT~
PORTC
0,,07
'B),T~
TEUSD - Ox88
'BYTE PORTD - 0,,08 IBYTE TIMERO .. C"OI I BIT RA5 - Ox05.5 IBIT lK2 .. Ox07 . 2 CHAR D6 , FUNCION.D6,CON_D6 ;
rNTl CNT: /, •••• • , • • • • •• • INTERRUPCION TIMERO · · · · · · · · · · · · · · · ····· ·· · 'lnt_TlMERO void TlMERO_.isclvoidJ
IF
/ ' / 5i IflIt.!! pul.,.4do
(INPUT/PIN_D6}-·0)
//Det~etll
IF (06 >- ISO } { IF (CON__ D6-·0}
"
(
81
PultJlldo I'
J
(20m.,. x 150)
8 v~z
3
$
06-0;
roNCION_D6-1: ELSE
I
06-0 :
FUHCION_D6-3 : CON. D6-0: I
ELSE /
if (06)0 U
funcJ.on_06 .... 1) 06-0 ;
' / 3 $e9 ba r ril cont.!!dor
IF (Do >
H
FUNCWN_D6 !-1 "
ruNe10N_ Oo .'-3 J /1 Si pUl$.!!do
fVNCION_06-2:
/1
06-0:/
'/ '"
vnid
.!!nt~$ .•
I Y NO 1"-1 Y NO F-3 .. entonC~$
F-2
••••••••• • • , • •• •• • • • .. · PR1NCIPAL· · • • ••• • • • ••••••••••••••••••••••••• IIIltjn()
(
di$.!!ble_int~rrupu
(GLOBAL);
.,.&tup_timec_O (RtcC_INTERNALI RTCC DIV_128J;
06-0 : FUNCION_D6-0: CON_D6_0 ;
1 Lllltpill contlldoces teelll
TRISA .. oxOO; //00000000 TRISC .. OXOO ; 1/00000000
115
Compilador CCCS YSimuJador PROTEUS para Microcontroladores PIC TRISD
~
OX40.-
11000000
BIT~CLEAR{PORTA,5)
.-
BIT~CLEAR{PORTC,2}
..
en",ble~illterrUpts
{GLOBAL} ..
, TIMERO-20ms r:ie polli.ng.- 20ms"(256-100}'1 j,ls'128
WHILE OJ{
IF (Fr,JNC!ON_D6--l} RC2 - 1;
t. Si
IF (roNcroN~Dfi--3) RC2-0;
/,
DELAY_MS(400);
CNT+~
1 enciende He2
F:spera un tiempo para no provocar una I. no desead", .
FUNCION_D6-0;} IF (FUNCION_D6--2)
~uncion
Si ~unc1dn 3 dpdga RC2 •• ".
(
;
/
Si tuncion 2, un" vez encJ.ende led .. 'I seguncM ve% 10 apaga, asi C'ontinuamente
IF ICNT-O) RA5-1;
1 Vuelve a tunclon 0
J
J Figura 29. Programa del ejemplo 7
116
2
Vuelve d funcion 0
"
ELSE RA5-0;
FUNCION_ D6-0;
~unc.i6n
5. Convertidor Analogico - Digital
Capitulo 5 Convertidor Analogico - Digital 5.1 Introduccion Los microoontroladores PIC pueden incorporar un mOdulo de conversion de senal anal6gica a senal digital. Los mOdulos AD que utiliza Microchip haecn un muestreo y retencion (sample & hold) can un condensador y despues utiliza el m6dulo de conversi6n (figura I). El m6dula de conversi6n AID es del tipo de aproximaciones sucesivas.
-f'>-rJ.--.{'-c- "" ';,~ I.__-,I I VJ1L.
;~~~g~A ,V
,"D
SALIDA DIGITAL
SiH Figura
t. FiilSes de liiI converJi6n a"iill6gicajdigitiill
EI convertidor de aproximaciones sucesivas se utiliza en aplicaciones donde se necesitan altas velocidades de conversion. Se basa en rea lizar sucesivas comparacio-
nes de forma ascendente a descendente hasla encontrar un valor digital que iguaJe la tension entregada por el conversor D/A y la tension de entrada. Durante la lase de muestro el interruptor se cierra y el condensador se carga a la tensi6n de entrada (el tiempo que el interruptor permanece cerrado es fundamental para la correcta carga del condensador). Una vez abierlo el interruptor, el condensador mantendra (te6ricamente) la tensi6n de entrada mientras el modulo AID realiza Ja conversion. El mOdulo de conversion se caracteriza por parametros como los siguientes: • Rango de entrada.
117
Compilador CCCS YSimulador PROTEUS para Microconlroladores PIC • Numero de bits. • Resolud6n. • Tension de fondo de escala. • Tiempo de conversion. • Error de conversion. EI mOdulo que utilizan los PIC de garna media tiene un numero de bi ts de 10, por 10 que su resolution es:
resolucion = ~ 2N _ I s iendo VN la tension de entrada y N el numero de bits del convertidor. Es door, para la tension maxima de e ntrada (5V) la resolution es de 0,0048 V (4,8 mV) por LSB. La resoludon sl cambia si se modifica la tension de fonda de escala, es derir, la ten· si6n de referenda. Los PICs permiten cambiar la tension de referenda en un valor absoluto (de 0 a +V ref) 0 en un margen (de -vm a +V",,). Las tensiones a convertir siempre son positivas.
5.2 Modulo Convertidor (gama medial EI modulo convertidor AID en la gama media posee hasta 8 entradas anal6gicas. Los 16F876/873 tienen 5 canales (en el puerto A) y los 16F877/874 lienen 8 canales (5 en el puerto A y 3 en el puerto E). EI convertidor (figura 2) es de 10 bits y, tal como se ha comentado, es de aproximadones sucesivas. Permite variar la tension de referenda a la maxima V00 0 a una tension positiva menor a traves de AN3NREF' Y a la minima VS5 a a una tension positiva mayor a traves de AN2N REJ'..' Yin
~Ck
'- /
Ci«::uito de
AproximacioQes Sucesivas Date digital
Moduro D/A
Figura 2 , BloqultJ boiJlcOJ de un convltrtldor AID de aproJllmaciones JucltJlv;1J
Puede seguir fundonando cuando el PIC csta en modo SLEEP ya que d ispone de un oscilador RC intemo propio.
118
_________________-=5:..-C ::.:o::.:"::.: ,,:::.:: rtidor Analoglco - Digital "~
.LJ .
.-
-
I ...............
••
'-
-
'_0
!
. ; ~)
- .... '_
...
...
r ...
." , 1-001 - " ' , .. --'!""'"'-.• ~
." ".
ClrcuJlo AID
j',.,...... .... E
..
--
D-
o "v... 0--
O~-
S:: 1IAlI_
eM
.,
--
u_
..... -".-
, .... ,OJ'.
'-
' .. _;!O J_ .. I
:--
FI9uril
~.
Arqu lle«ura del m6du'o con~rtidor AID
La fundon de transferencia del convertidor AID es el resultado de que 1a prirnera transicion ocurra cuanda la tensi6n anaJ6gica de entrada es igual a V RE/1024.
La resoluci6n vendra dada por la siguiente ecuacion: ILSB -:: V _ +
(VRf5. -vRI'P.
RLP-
1024
En e l caso de que 1a VRD4 ~ VDO Y VREF. '" VS5 entonces Ja resoluci6n es: 5 1024
lLSB=---=,4,8mV
de esta forma si 1a lectura es de 512 LSB, la tensi6n anal6gica leida es: 5
VI'" =512·---=512.4,8mV=2.4576V
1024
5.2.1 Registros FSR Hay 11 registros asociadas a este periferico: • Definici6n de pines de entrada y senales aplicadas:
TRISA - PORTA - TRISE - PORTE . • Manejo de in terrupciones: INTeON - PIEl - PLR1.
119
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC • Control del conversor AID: ADCONO - ADCONl- ADRESH - ADRESL.
Reglstro de control ADCONO tdlrecclon RAM: 1FhJ [PIC16F87x]
FlglI,,, 4. Registro "DCONO
bits 7:6 DCSl:ADCSO: Bits de seJeccion del reloj para la conversi6n AID.
00 • F""',. 01 • F"",8. 10 - F"",32.
11 - FRC (Reloj del oscilador interno RC). bits 5:3 CHS2:CHSO: Bits de seleccion del canal. 000 - Canal 0, (RAO/ANO).
am = Canal 1, (RAl/ANl ). OlD-Canal 2, (RA2/AN2). all - Canal 3, (RA3/AN3). 100 = Cana\4, (RA4/AN4). 101 = Canal 5, (RA5/AN5). 110 =- Canal 6, (RA6/AN6).
11] bit 2
=
Canal 7, (RA7/AN7).
GOI DONE: Bits de estado de la conversion.
SiADCQN .. l 1 - Conversi6n en progreso (a 1 inida una conversi6n). 0 .. La conversi6n ha finalizado (este bit es borrado par hardware al terminar la conversion) bit 1
No usado: valor o.
bit 0
ADCON: Activaci6n del conversor AID.
1 "" convertidor activo. 0" convertidor no activo.
120
5, Convertidor Anltl6gico - DiIibI
Reglstro de control ADCONl (dlre"l"n RAM: 9Fhf [PIC16F87x]
Figura S. Reglstro ADCON I
bit 7:
AOFM: Seleccion de formato del resultado (figura 6): 1 ,.. Justificaci6n a derechas, Los 6 bits mas significativos de ADRESH son leidos como '0'.
o.. Justificaci6n a izquierdas. Los 6 bits menos significativos de ADRESL son leidos como '0'. bit 6-4: No usado: valor 0 bit 3·0: PCFG3:PCFGO: Configuraci6n de las entradas al modulo AID (Figura 7). ADFM:O
,
,
2 10 7
,
ADRESH
!
ADRESL
, I """ I
076$
000000
ADRESH ADRESL ................. ,
r··············,:
: R.. .,lt~ 10 bit :
: R. ..,lta
Justlficaclon a derechas
JUlltificacl6n a Izquierda$
Figura 6. Justlficad6n mediante bit ADFM
I::g~
:;; I:;~ :;: I:::
i ,,
:::: I:::
...
I '.,. "
~
W;, ,
I :~ I ~ ,
,
, , ,
~
,
,
,
Figurill 7. Tablill de configuration de los canales
121
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC En las versiones PIC17F87xA existen unas pequei'ias variaciones en estos dos registros. En el registro AOCONO (direcci6n RAM:1Fh) [PIC16F87xA] los bits: bit 7-6: ADCSl:AOCSO: Seleccion del reloj para la conversion AID junto con ADCS2 que esta en ADCONI. AOCS2:o(} 00 '" fOSC/2 01 -=
rose/s
A.OCS2"' 1 00 "" fOSC/4 0\ " fOSClI6
10,. fOSCl32
II .. fRC
IO - IOSCl64
II - me
En el registro ADCONI (direcci6n RAM: 9Fh) [PIC16F87xAl el bit: bit 6:
ADCS2: Selecci6n de reloj para conversion AID junto con ADCSl y
ADCSO. Otros registros que afectan al mOdulo convertidor son los referentes a la interrupd6n: INTCON, PrEI Y PIR1.
5.2.2 Proceso de conversion Para realizar la conversion, el fabricante recomienda seguir los siguientes pasos: 1. Configurar el mOdulo AID: a. Configuraci6n de pines anal6gicos/tensi6n de relerencia/E/S digitales (ADCONl). b. Selecci6n de la entrada AID (ADCONO). c. Selecci6n de reloj para la conversion AID (ADCONO). d. Habilitar m6dulo AID (ADON (ADCONO
3. Esperar el tiempo de adquisici6n. 4. Comenzar la conversion poniendo a ' 1' el bit GOIDON£(ADCON0<.2». 5. Esperar a que termine la conversion. Puede ser de dos formas: a. Mediante lectura continua del bit GOIDONE hasta que sea ' 0', indicando el fin de la conversi6n. b. Esperando ala interrupcion. 6. Leer rei egistro de conversi6n ADRES y borrar enflag ADlF si es necesario.
122
5. Convertldor Analogico - Digital 7. Para la siguiente conversion se salta a los puntos 1. 2 0 3 en funcion de 10 que se necesite. EI tiempo de conversi6n par bit se define como T"o' Un minimo de 2'T"o son necesarios antes de la conversi6n (esto no es necesario para los PIC16F87xA debido a que el interruptor de muestreo se derra en coanto se obtiene el resultado). Existen dos tiempos basicos de trabajo: el tiempo de adquisici6n (T"co) y el tiempo de conversi6n TAD' • Tiempo d e adq uisici6n (T"cJ: tiempo necesario para que se cargue el condensador de retencion (~con la tension de entrada. Este proceso de carga del condensador depende de distintos fadores, entre otros, la impedancia de ILl fuente de tension de entrada (el fabricante recomienda que se situe por debajo de los 10 kohm). EI tiempo de adquisicion dentro de los margenes tipicos es de, aproximadamente, 20 1-15. La adqujsicion no comienza hasta que no acabe la conversion. Asf que se debe espera un TACQ tras una conversi6n, tras seleccionar un nuevo canal 0 tras encender el mOdulo AD . • Tiempo de conversi6n (TAD): tiempo necesario para obtener el valor digital de la tensi6n anal6gica de entrada. Este tiempo depende de Ia fuente de reloj que se seleccione para la conversion. Para una correcta conversion AID, el reloj debe seleccionarse para asegurar un tiempo minimo T"o de 1,6 fls. En la Figura 8 se muestra la tabla de seleccion de fuentes de reloj con su T AO asociado, las celdas sombreadas son las que no se recomienda su uso. }' uenle de relo Opera tio n ADCSI ;ADCSO 2T_ 00 01 8T 32T"", 10 RC II
20 Mllz lOOns\
400 nsw 1.6 2-6 J.lS
,
Frecuencl.l del dis osilivD 5 MHz 1.25 r-rnz 333.33 kHz 400n5 1.6 6 24 jlSV) 6.4 jlS 1.6 jlS 25.6 98 6.' 2-6 j.ls\I/ 2·6 ItS 2·6 IlS
,
, ,
,
,
Figura 8 . Tabla de selecdon de fuentes de retoj
Las notas de la figura B indican: (1): La fuente RC tiene un T AO tipico de 4
~s.
(2): Estos valores violan el minimo tiempo requerido de T AD' (3): Para conversiones mas riipidas se recomienda utilizar otra fuente de reloj. (4): En PICs con frecuencias superiores a 1 MHz, el modo RC 5010 es recomendable en modo SLEEP. EI T"D se configura en ADCONO (refoj de fa conversi6n). TA o--2·TOSC
TAil -S' TOSe TAl)· 32 ·TOSC
123
Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC Tambien en el PIC16F87xA.
I Top'"-4-TOSC I TAP
16· TQSC
I TAD
64·TQSC
I
Para convertir 10 hits se requiere un tiempo de 12T,\o (figura 9). ,.. - - - - .,- - - - r- - - -., - - - -,- - - - r- - - -,- - - ,
1
,
,
,
1
,
T - - - , - - - -,.. - - - T - - - - r, , , , ,
- - --
.... !..... , ' , , • , , , , , , , TH lo T~Cln.cl 'T~c2' T;=':l3' T..;.04' 1 .<1.:>5' TIo.:>6 • T.
j
r
r
b9
b8
b7
b6
b5
b.1
1>3
b2
01
:
bO
tNtCIO CONVERSI6N
El CONOEHSAOOR VA CARGAOO SE OESCOHECTA DE LA FUENTE ANAL6GICA (TlPICAMEHTE A lOS 100n.)
I GOIDONE • 1 I
..
SE CARGA AORES EL BIT GOli5ONE SE PONE A 0 SE ACTlVA El FLAG AOIF EL CONOESAOOR SE CONTECTA DE NUEVO A LA FUENTE ANAL6GICA
Figura 9. Clclos de convenl6n
Considerando los dos tiempos (de adquisici6n y de con versi6n) la secuencia completa de muestreo/ retenci6n y adquisicion en los PICs de gama media Sf" muestra en la figura 10. Exis te una di(erencia entre los PIC1 6F87X y los PIC16F87XA; en los primeros es necesario es perar un tiempo 2·TAD antes de inid ar una nueva adquisicion, cosa que no ocurre en los segundos.
r _ _
TOompo .. """....... i cH. EI (;-., ......,oneeu de .. _"."". IotIl00n. "GQoo' .
'-_"~.~'~""."M."''''''~''''"_'''''-_I-,
s.t.cciOn c..n.I (ADCOHO) HablIIIad6n mddulo AD (AtlCOtfO) Ink:k> de -.lqulalc:iOn
En I...
P'c.'&Flh
________-l _s._ · 2.f..,
Fin de>
(;on ..... iOn
GOII)()NEa9
V. ....... ADfIES.
S. .c:U•• fI-v ADlF
Figura 10. TIempo de muestro y conveul6n
5.2.3 Efecto del modo SLEEP y RESET en el modulo AD En el modo dormido (sleep), el mOdulo AD puede funcionar si se selccciona como reloj para la conversion el RC interno (ADCS1= 1 Y ADCSO = 1). En es te caso, el mOdulo espera 1 cicIo de instrucci6n antes de iniciar la conversi6n, permitiendo la ejecucion de la siguiente instruccion SLEEP, eliminando as! todo posible rujdo de
124
5. Convertldor Anal6gico - Digital conmutadon durante la conversion. Al finalizar I~ conversion, el bit GO/DONE es puesto a "0" y el resuJtado se carga en los registros ADRESH y ADRESL. En el caso de que 1a interrupcion del modulo AD este habilitada (ADIE '" 1 Y PEI E:: 1) el dispositivo se despierta, pero en el caso de no estar habilitada, el mooulo se apaga aunque el bit ADON siga a " 1". En el caso de que la fuente de reloj no es la RC interna, la ejecuci6n de una instruccion SLEEP haee que la conversion que se este realizando se pare y que el mooulo se apague aunque el bit ADON siga a "1". En el caso de produdrse un RESET, los registros del m6dulo AD se inicializan a los va[ores indicados par el fabricante. EI efeeto del RESET es el apagado del m6du lo y la parada instantanea de la conversion actual, los terminales se reinidalizan a entradas anaJ6gicas (ADCONI parte baja a 0); el valor de ADRESX no se modifiea en el caso de un Reset pero en el caso de un Power-oll Reset es desconocido.
5.3 Modulo AD en C En el compilador C las funciones para manejar el oonvertidor AD son las siguientes: setup_adc (modo);
modo: para la configuraci6n del m6dulo com'ersor AJD oorrespondientes a los bits 7:6 del ADCONO. ADCON6(IFh)
Selu p_"dr(modo);
OOOOOOOO
ADC_OFF
OOh
ADC_CLOCK_r"'TERNAL ADC_CLOCK_I>1"_2 AOC~CLOCK_DIV~8
ADC_CU>CK_D P" _J2
11000000
co. -.0000
OOh
01,.,.,. '0. 10000000
80h
setup_adc_ports (valor); Valor: definicion de las entradas analogicas correspondiente a los bits 3-0 del ADCONJ (figura 11). set_adc_channel (canal);
callal: selecci6n del canal anal6gico correspondiente a los bits 5:3 de ADCQNO.
o(ANO)
1 (ANI)
2 (AN2) J (AN3)
4 (AN4)
S (ANS)
6 (AN6)
7 (AN7)
125
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC pc.-r.J
-
~~
~,
M"
... M"
ou '"
"
'M '
0
1010
," ,
1011
". 1111
lilt
'"I
A~5
'u
0
l UX
,.
RJ:.
, , , , , , " " " " "
" ,"
till
<'.
",
,
A'\"~
A'O
.~
~
~
M'
,
,
,
,
,
, ,
.
' ,--
, ,
"10"
,
,
,
,
, , ., ,. .. , , ", , , '_. ' .... , , , ' . ,. , , " , '_. " " 0
, ,
~.
,
, ". -,. , , , " " " '_. " , " " " " ", ," ," " " ," ' •.. 'm. 0
.
M. ,'" , , ,
, , ,
,"
,
, ,
,
, '- , , ' _. '- , ,, " " , ,
...... "
selup_adc...p0rtJi (valor); ..U.-,""N"UX;
vss_\ lu:r ,
.. ~'_A~"_ A"l_A~4_A ~~_ A " . A'i?_ ....._A..'CA.~l .. >ll_"-':' ",-':0_"""
_"~l_".~_"55_'
KEr
....,,_"I>'_..-.:l
""...- '''_''li'_'-KH l'Io-,""~"1.I.I'GS
........ "1 ,s. MiS--"",_,,"'_' -MF.f_VMU'
"''''-'"",' ' _Al'1_"10-,"":o.._"-'5 "SIl_....' I_",~l-,"" ~._" '5_' SS_' ME~ ~'<'O_"M_" .~4_""-5_'
K.:t·_, MEr
"-,""NA1.OG_kAJ_1lA1_klf
.. ..-. ,,-.:, VRff,IIIEf
I
.~
"M_, 'Rt;r_ "R~r
Figura 11. Poslble valores de setup_adc...,portfvalorl
valor = read_adc 0; Lectura del resultado donde valor es un entero de 16 bits 5egUn la directiva CE AVC- empleada. Dicha directiva trabaja segun la tabla: DEVlCE
8 bit
IObil
II bi!
16 bil
ADC=8
OO-FF
OO-FF
OO-FF
OO-FF
ADC= IO
,
0-3FF
,
AOC-II
,
,
0-7FF
, ,
O--FFEO
O-FFFF
ADC"'- 16
O-FFOO O-FFCO
~DEVI
Porejemplo, _el Fichera 16f876.h incluye como primera directiva Itdevice PIC16F876. Para incluir la informacion del tipo de conversor AID se debe anadir #device adc::: to. READ_ADO) admite tres modos de funcionamiento:
ADC START ONLY ADC READ ONLY
126
Si no sc indica nada cs la opci6n por defttto. Pennilc iniciar v leer el Convertidor. S610 inicia Is convcrsi6n. SOlo lee los re iSlros del conve"ido~.
5. Convertidor Anal6gico - Digital Ejemplo 1: Lectura de IIrIa tension Q/wl6gica par e1 carlal AND (ftgllra 12). COII/PO"Clltes ISIS: PIC16F876, POT-LIN, CELL Y LMOI6L.
,..",
flgur~
12. EJemplo 1
hnclude <16FS76.h> Idevice adc-10
IFUSES XT,NOWDT IFUSES luse delay(clock-4000DODI linclude void main II int16 q; no~t
p;
setup_adc_ p
Ileanal 0 analogico
setup_adc(A1X:_CLOCK_ INTERNAL) ..
/IFuente de reloj RC
for
(;;1
(
set_lIdc_chatwel (OJ;
I/Habilitacion canal 0
del..y_us(201;
127
Compilador CCCS VSimulador PROTEUS para Microcontroladores PIC q .. read_ade(l ; p
-
5 . 0.' q /
//Le ctura canal 0
1024 . 0;
//Conversi6n
p rint f (1cdyu t c ,
" \ f ADC -
pr:i.nt f (lcdyutc ,
~ \nVolta9'e
iI
t e nsion
Uld ", ql ; . . . Ol
. 2fV~,
pi ;
Figura 13. Programa del Ejemplo 1
Ejemplo 2: Yt'1'momeiro COl! IIl1a NYC NYSAOWB203 (figura 16). Componcnles ISIS: PfC16F876, NTSAOWB203, CELL Y LM016L. Se utiliza una NTC NTSAOWB203 con una beta de 4050 y una resistencia a 25 °C de 20 kohm (figura 14); estas caracteristicas se pueden ajustar as! como la temperatura a medir en el menu de edicion del componenle (bol6n derecho, figura 15).
Fig"'''' '4. C.,.,aderistiC";u de la NTC NTSAOW8203
,-'""""O~F.... w/C
' _ConoIonl {- ! U!.O.N<>doIr*-
--- --e_
_
Pa~
edl~_ .
__
Flg .... 'a 1 S. Edldon del componente
128
5. Convertidor Analogico - Digital La NTC se linealiza mediante una resistencia R1 de 10 kohm, el valor de tension de la NTC (V T) se puede obtener segOn las siguientes eruaciones (temperaturas en grados kelvin):
Rr =
=IOOOO,Vr
Vr ·R, VBAT - VT
5-VT
1 1 -273.15= 1 R _ In(_T_) + _ __ In(_T_) + fJ Rm T" 4050 20000 298. 15
TT=I
R
1
=--:-::
273.15
LCDl
~ 2~.45C
Figwra '6. EJemplo 2 linclude "16f876.hN Idevice /ldc - 10
Ifuses ~use
XT, NOWDT
delCly(clock-4000000}
'include
/ /NecesClcia paca los c';;lculos matemJtiCOs
linclude
vOid milin ()
(
floar tv,tc,temp,y ;
I/Vadable.'l de ecuilci6n
int16 valu .. ; lcd_init();
setupyort_a( ALL_ ANALOG}; setup_oldc ( ADC_CLOCK_INTERNAL );
129
Compilador C CCS YSimulador PROTEUS para MicrocontlOladores PIC sec_iJdc_chllnneJ ( 0 );
delay_u.s(lO); do ,
value - Read_ADC(); tv _ 5.0 • value I 1024.0: tr -
tv • 10000.0 I
(5.0 - tv);
y _ logler/20DOO.O): y -
(1.0/298 . 15) + (y ' (1 . DI40SD.O}).-
temp-I. rJly: temp - temp -273.15: print£(1cdyutc,"\nT - t04 .2£C", tl!!mp): ...hile (TRUE);
Figura t7 .- Programa de
Ejemplo 3: RealiZllr
te SII seleccion por
eJ~plo
2
bar6metrolaltimetro que mida e'l Kpa, Psi, Aim 0 mfs medianpllisador (figura 20). Compommfes 1515: PIC16F876, MPX4115,
1m
IItI
NT5AOWB203, BUrrO, CAP y LMOI6L.
El sensor de presion MPX4115 de 15 a 115 kPa (2.2 to 16.7 psi) con una tensi6n de salida de 0.2 a 4.8 V. La funcion de transferencia se muestra en la figura 18, la ecuacion de la tensi6n de salida es:
Vour - Vs .. (0.009 .. P - 0.095) ± (Error Presion .. FactorTmp .. 0.009 Vs>
.... ••
I ,.'" ~
;;
TJVN~FlIClDN.
v.. .. v.·(.OI»'p...O!iI5) t: Bftw
-
...
VS_S.1Vdt TOP .. OIOeS""C
.,.
~
~
TYP
~
'-'
~,~!
u
"~
~e~2~~~~~$SS~~~i2aS§~!~~ PreIan /tit 10 -*' ..... iIIlcPa FIgura 18. MPX4t 15 (cortesia de Motorola]
EI error de Presion y el factor de temperatura vienen definidos por el fabricante (figura 19). El error de Presion se sirna en ±l.5 y el factor de temperatura varia entre
130
5. Convertidor Anal6gico - Digital 1 Y3 seglm la temperatura. Este factor hare que sea necesario medir la temperatura de trabajo y, por ello, se utilizani una NTC
--o.....,. ..
MPU t1 5A. /IIIPXMllSA SeI1e5
u-
-
,
u-
......
~~ , 1
d>O-
J
u
J
~
~
J
..
J
• • ,_ • _• c • • , ,
."'"
~
r- PI"IS$UI"I Error Band
i
,
t-~'"_
uulO-
J
S"
J ~,,-
J
• • • •
,. ,. -
_10-
-...
IhIlS.,.
-10-
I"'~ tl5j1r"
Figura 19. Error de Presion y Factor de Temperatura fcortesla de Motorola)
La ecuad6n para caJcular la presion con una Vs de SV y un error de presion de ±1.5 esde:
p=
0.475+ V OUT ±1.S.FaclorTmp 0,045
Una vez calculada la presion en Kpa se reladona con Psi y Atm: 1 Kpa ... 0.0098692 Atm.
1 Kpa - O.1450377 Psi. La altitud en metros 5e puede calcular 5egUn la ecuacion:
H
K ~ -7990.6527 .I{ 101.304 P ". J
131
Compilador C CCS y Simulador PROTEUS para Mlcrocontroladores PIC
LCD1 'W~
p; 99.87 Kp(I
IT;
t
~ ",.,e
'~
:= 1 ji"'
J1 ~""I
Jo,
'. f!
.
~".,.\
...~
R'
11 ~'t'j
7
Rn ~
R2 ~
1<1(>
,
-
• -
~-~.
- - .-
-.~
----- '.
I
8i!iSSatl:!E;
...
~
0
N,
.,~
0
, , , ,
"
""""'<=T'CK! ""11'~ ~, ~
0
I ~
.1. .. .... ..
wl"
..."'"',.
7
m
25.35C
.....,......
~
~,-
-
t-
~
- _. Figura 20. Ejemplo 3
linclude <16F876.h> Idevice ildc-10 IFUSES XT,NOWDT 'roSES
'use delay{clock-4000000} 'include 'include 'BYTE TRISA .. Ox85 'BYTE PORTA" Ox05
void mdin () int16 q; lIOilt cv, cr, cemp,y, cf,error;
float
p,presjon,pres_iltm,pres_ps~,~lt,
//Vari ... bJ.es ecuac1.one9 c6lcu10 pre;sion //y altura
/IV~ ri~ble3
int cnt-O;
bic_set (TRISA , 2); sflcup_adc.....POrts(RJlO_ RJll_RJlJ_ANALOG);
132
//RJlO y RAl ana16gica, Rli2 digital
5. Convertidor Analogico - Digital &etup_.dc (ADC_CLOCK_IN"TER.NA1.); Jcd_inH ():
for
(I;)
(
//Lectura
set_Ide_channel (0); delaY_II& (20) i
pre~lion
en v"lcio.5
q - r-ead_"dcl!; p - 5.0 • q I 2024.0; pre&io'l- (o. 475+p) /0 . 045;
,ILectur" presion en Xpa
"et_edc_ channel (l)
//Lectu ra temperatur"
;
del"y.. u.5{ZO}; q - re.d_"dc{);
cv - 5.0 • q I 1024.0; tr - tv • 10000.0 / (5.0 - tv): y .. 109' (UI20000. 0); y " (1.0/298.15) + {y '(1.0 /4050 .0)); tflm~l.O/y:
temp .. tf!ll1P -2 73. J5; lE {temp>-O "
temp<-85} "''''J . O;
else TF-3.0,. ERROR. .. TF • 1.5;
/IC61eul" del error de pre"ion eon Ie te.mperacura /Iel error puede ser :t pero .aqul u&alrlO& 0 + /1?re.51on en I-4) cnt-Q;
Switch (ent)
c.".
(
//Segun flumero veces pl/Js.a bot en s. elige _nu
0: led_9"otoxy (1,1) i printf(lcdJ'utc, ~\P- 1S.2! ](pa PREStoN); printf(lcd Pl/tc."\nT" '04 .2f CoO, cemp); brelJk; case 1: led_gocexy (I, 1) .-
printf{led_puce, MIP- 14.2f atlll
PRES_a em) ;
print!(lcdJ'utc,"\nToo 'Of .2! CoO , temp}; bre.ak; c"se 2: led_90toJrY (1,l) ; printf(lcdJ'utc, M\?- '3.21 psj
PRESysi) ;
133
Compilador CCCS YSimulador PROTEUS para Mlcroconlroladores PIC pdntf (lcdyute, *\nT .. t0 4.2f C
,
tempi:
printf(lcd_pute,*\nT" '04.2f C*,
tempi;
M
bre
"lAIc- t7 .2f m
"; altl;
break;
deldy_ms(100/: }
Flgu,.. 21 . P1'og,.. m .. del ejemplo 3
Ejemplo 4: Siml/lacioll de adqllisicio// de /e//siolle5 lIegnfivas (figilla 22). Componentes ISIS, PIC16F876, CELL Y LM016L. Como se ha comentado al iniao del capItulo, el convertidos AD del PIC 5610 puede adquirir tensiones POSlTIVAS. Tal como esta configu rada la entrada del conversor, el PIC se "QUEMARlA" en el case de introducir una senal de tension negativa por los canales AD. Pero la simulacion es "muy sufrida" y sf que permite adquirir tensiones negativas sin que al PIC Ie ocurra nada, pero 13 realidad es muffio "mas cruel"; j010 can esta diferencia entre la simulaci6n y la realidad!
Figura 22. Ejemplo 4
134
_ _ _ _~5 . Convertidor Anal6gico - Digital ' include <16F876.h> 'dev~ce
/lde-IQ
IflJSES XT.NDWDT
,roSES luse dellly(clock-4000000} linclude void lOIIin ()
inelt> q; DOllt p;
setup_"dC....,POl':tS(ANO_VREF_VREFJ;
setup_lId'c fADC_CLOCK. INTEFl.NALJ;
icd_lnltO ; for ( u l
(
set_<1dc_channel (0);
delay_us,201; q - relld adel); p -
(-2.0)
+ (4 °q /1024.0); t41d
N
pr.1ntfflcdyutc ,
"\fADC -
prJ.ntf(lcdyutc,
"\nVolt"ge _ IOl . 2fV w
,
q/o' ,
pI;
delaY_ill.! (lOO}.-
I F'tu,... 21. PTogr .. _
del ejem~o 4
La soluci6n p ractica para medir lensiones negativas es desplazar la tensi6n hasta valores positivOS y despues restar este desplazamiento por sofhvare.
135
6. MOdulo CCP - Comparador, Captura y PWM
Capitulo 6 Modulo CCP - Comparador, Captura y PWM 6 . 1 Introduccion Los mOdulos CCP permiten realizar tres funciones basicas basadas en el manejo de los temporizadores (Timer): • Comparador: com para el valor del temporizador con el valor de un registro y provoca una acci6n en el PIC. • Captura: obtiene eI valor del temporizador en un momenta dado, fijado por la accion de un terminal del PIC. • PWM: genera Wla senal modulada en amplitud de pulso.
Los PIC de la gama media pueden tener hasta 2 mOdulos ecp. Los dos mOduJos CCP se comportan practicamente igual (menos en un caso especial que se estudiara pasteriormente). Tras producirse un reset, el mOdulo cep se encuentra deshabilitado. Cada mOdulo eep posee un registro de 16 bits que puede utilizarse de las tres siguientes formas: • Registro de 16 bits para capturar el valor del temporizador al producirse un evento (CAPTURA). • Registro de 16 bits para comparar su valor con el valor del temporizador TMRI, pudiendo provocar un evento cuando se alcanza el valor contenido en este registro (COMPARADOR). • Registro de 10 bits para el cicio de trabajo de una senal PWM (PWM). Cada uno de los registros ecp tiene asociados tres registros (Ia x indica CCP1 a CCP2): • CCPxCON: Registro de control del
ecp.
137
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC • CCPRxH: Byte alto del registro de 16 bits del CCP. • CCPRxL: Byte bajo del registro de 16 bits del ecp. • CCPx: pin del
ecp.
Reglstro de control CCPxCON Idlrecclon RAM: 17h/D1hJ C16F87xj
rpI~
Figura , . Reglstro d e tontrol CCP.CON
u.o
U-O
RIW-O
_
CCPxX
RIW-O
RIW-O
RIW-O
R/W.o
I CCPxY I CCPxMJ I CCPxM2 I CCPxM1
RNI~
[ CCPlIMO
8 110
bit 7:6
No usados: valor O.
bit 5:4 CCPxX:CCPxY: bin y bitO del Duty Cycle del PWM. Modo
captura: No Be usa.
Modo comparacioll: No se usa . Modo PWM: Son los dos bits menos significativos de los 10 bits utilizados para el Duty Cycle del PWM. Los acho bits de mayor peso del Duty Cycle se encuentran en
el registro CCPRxL. bit 3:0 CCPxM3:CCPxMO: bits de selecci6n del modo CCPx. 0000
eep inhabilitado (reset del mOdulo CCPx).
0100
Modo de captura, cada flanco de bajada.
0101
Modo de captura, cada flanco de subida.
0110
Modo de captura, cada 4 flancos de subida.
01 11
Modo de captura, cada 16 flancos desubida.
1000
Modo de comparacion, pin CCP a 1 aJ igualarse (CCPxlF = 1).
1001
Modo de comparacion, pin CCP a 0 al iguatarse (CCPxIF -1).
1010
Modo de comparaci6n, genera interrupci6n al igualarse (CCPxfF = 1, CCPx no es afectado).
I-----t-----------------1011
Modo de comparaci6n, lanza acci6n especial (CCPxlF "' 1, eCPl resetea TMRl, CCP2 resetea TMRI y lama una conversi6n AID (si esta hahilitada).
11""
ModoPWM.
138
6. Modulo CCP - Comparador, Captura y PWM Debido a que los dos m6dulos CCP utilizan los temporizadores, cuando estan activos los dos m6dulos se puede dar alguna interacci6n entre eUos. La siguiente tabla muestra dichas interacciones. ModoCCPx
ModoCCPy
Interacc:ion
Captura
Captura
Misma base de tiempos en TMR1.
Capfura
Comparad6n
La comparacion debe configurarse para la acci6n especial de disparo que borra el TMR1.
Comparaci6n
Comparacion
La comparacion debe configurarse para la accion especial de disparo que borra el TMR1.
PWM
PWM
Los PWM deberan tener la misma frecuencia y tasa de actualizacion (int['fftlpcion TMRl).
PWM
Captura
Ninguna.
PWM
Comparaci6n
Ninguna.
6.2 Modo Captura En el modo de captura, CCPRxH:CCPRxL capturan el valor de los 16 bits del registro TMRJ cuando ocurre un evento en el pin CCPx. Los posibles eventos son: • Flanco de bajada. • Flanco de subida. • 4 flam::os de subida.
• 16 fiancos de subida. Estos eventos se seleccionan con los bits CCPxM3:CCPxMO (CCPxCON<3:O». En el momento de la captura, el bit CCPlIF (PIRl<2» [y/o el CCP2JF (PIR2)l se pone a 1, produciendo una interrupcion en el casa de que este habilitada. Eljlag ha de ser borrado par software. Si sucede otra captura antes de haber leido el registro CCPRx, el valor de la captura previa se habra perdido. En modo captura, el pin RC2iCCPl (yloel pin RC1!f10SIICCP2) debe configurarsecomo entrada poniendo a unoel bitTRISC<2> [y/oel nuSCJ. Si el bit RC2I CCPt [y/o RCtJCCP2] se configura como salida, una escritura en este pin pod..ria originar una captura.
Este modo trabaja can el TMRI. Ademas, es necesario que este funcione como temporizador a como contador en modo sincrono. En modo asmcrono no fundonaria. Si se produce un cambia en el modo captura, por ejemplo de flanco de bajada a cada 4 fiancos, se puede dar una falsa interrupdon. Por software se debe borrar el
139
CompHador CCCS y Simulador PROTEUS para Microconlroladores PIC bit CCPxlE para deshabilitar las interrupciones, limpiar elf/fig CCPxlF y eambiar el modo de eaptura. Mediante el preesca/cr se puede aJcanzar una resolucion mas precisa sobre las senales de entrada. Hay cuatTo configuraciones de preescaler especificadas mediante los bits CCPxM3:CCPxMO. Cuando el mOdulo CCPx esta inhabilitado no esla en modo eaptura, el eonlador del predivisor es pueslo a cero. Cualquier tipo de reset barra el preesca/er. Para cambiar el tipo de preesca/er se debe apagar antes el mOdulo CCPx (borrar el preesca/er) y posteriormente modificar dimo valor, de 10 contrario se puede producir una interrupcion. Si se utiliza el modo sleep (dormido), el TMRl (configurado en modo sincrono) no se incrementa, pero el preesca/er del CCPx si que continua incrementando el contador de eventos y, por 10 tanto, cuando aJcanza el valor prefijado, el bit CCPxF se pone a 1, 10 que provoca un despertar del PIC; asi el contenido del TMRl se guarda en los CCPRx pero su valor no es significativo dado que el TMRl estaba parada.
6.3 Modo Comparacion En el modo comparacion el valor de 16 bits del registro CCPRx se compara eontinuamente con el valor del temporizador TMR1. Cuando ambos valores se igualan, en el pin CCPx se puede producir, 0 no, un evento de los siguientes: Se pone a 1.
Se pone a O. No cambia. Estos even los se seleccionan mediante la configuracion de los bits de control CCPxM3:CCPxMO (CCPxCON<3:O»: 1000
Modo de comparacion, pin CCP alaI igualarse (CCPxlF = 1).
1001
Modo de comparaci6n, pin CCP a 0 al igualarse (CCPxlF = 1).
1010
Modo de comparacion, genera interrupci6n al igualarse (CCPxlF
=
1,
1---1··~·~:'::··~~·~··~·~~~·~~~~·~~············· 1011
Modo de comparacion, lanza accion especial (CCPxIF ::;: 1, eCPl resetea TMR1, CCP2 resetea TMRl y lanza una conversion AID (si esta habUitada).
Por otta parte, al producirse un evento en el pin. se producir<'i la interrupci6n en caso de que este habilirnda, ya que el f/ag CCPrlF (de PIR) 0 PIR2) se pone a 1.
140
6, Modulo CCP - Comparado1, Capfura y PWM El TIMER1 se debe eonfigurar en modo temporizador a modo eontador smerono para que el mOdulo CCPx fun cione correetamente en el modo eomparacion, Para trabajar en este modo, el pin CCPx debe configurarse como salida, poniendo a 0 el bit del registro TRISC correspondiente. Cuando se seiecciona uno de los modos de comparacion, el pin CCPx toma el nivel logico contrario aJ que tiene que tamar cuando se produzea la igualdad (es decir si se tiene que poner a 1 en la igualdad, se pone a 0 en estado normal) Hay un modo de trabajo (CCPxM3:CCPxMO: 1010) en el que se produce una interrupci6n al produdrse la igualdad, se activa elflag CCPxIF y se genera Ja interrupci6n, si esta habilitada, pero el pin CCPx no se ve afectado. Por ultimo, puede trabajar en mododedisparode accion especial (CCPxM3:CCPxMO: 1011 ). En este caso cuanda se produce la iguaJdad, el temporizador TIMERl se resetea, por 10 que se utiliza como marcador de la accion. En el modulo CCP2. ademas de producirse el reset del TIMER1, se inicia una nueva conversion AD si dicho mOdulo esta habilitado; esto pernlite realizar conversiones AID periOdicas, En e[ modo sleep (dormido), el TlMER1 no funciona y, por 10 tanto, [a comparacion tam poco. El pin cepx tendra el mismo valor que antes de trabajar en modo sleep. Despues de cua/quieTreset, el modu.lo ecp esta deshabilitado.
6.4 Modo PWM EI modo PWM (Pulse Width Modulatioll) 0 MODULACl6N DE ANCHO DE PUL50, permite obtener en los pines eep)." una senal periOdica en la que se puede modifica r su cido de trabajo (Dllty Cie/e). Es decir, puede variarse ei tiempo en el cualla selial esta a nivel alto (TON) frente al tiempo que esta a nivel bajo (TOfF ); ver la figura 2. De esta forma, la tension media aplicada a la carga es proporcional al TON' controlando, por ejempJo, la velocidad de motores, luminosidad de lamparas, etc. Oulplll
V
mod.
-l
n
Ton
T ------; T" V mod
t
I
I
I
IX:
V mod
T = cleo
TFigura Z. Seonaf PWM
141
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC La resoluci6n de salida E'S de hasta 10 bits_ Para que este mOdulo fundone correetamente, el pin debe estar configurado como salida, mediante la configuracion del TRIS correspondiente_
EI periodo de la senal PWM se obtiene de configurar el T1MER2 y eJ contenido del registro PR2 (direecion Ox92); ver la Figura 3_ Este registro de 8 bits contiene los 8 bits mas significaHvos de una cuenta de 10 bits_ Para calcular el periodo de la senal PWM se utiliza la siguiente ecuaci6n: PWMT - (PR2 + 1)-4-T(l'j("-(Valor del Preescaler del TMR2) Cuando el valor del TMR2 se iguala al valor de PR2, pueden ocurrir los siguientes eventos: • TMRl se borra_
• EI pin CCPx se pone a 1 (excepci6n: si el Dllty Cycle es 0%, el CCPx no se pone a 1)_ • EI valor de CCP Rxl se carga en el CCPRxH.. el cual E'S el que se com para_con el TIMER2 para fijar e1 duty cycle_ PERIOOO
•
I •
•
•
I I •
Cicio de TBbaJo : TMfUooPRZ
I
TMR2- PRZ
TMR2-CIcJo ct. Tm.jo
Figura ) . Senal de salida PWM
EI cido de trabajo (duty cycle) se define por e1 valor del registro CCPRxL y con los bits CCPICON<5:4> antE'S de comenzar un nuevo periodo_ EI registro CCPRxL contiene los 8 bit de mayor peso y el CCP1CO N<5:4> contiene los 2 bits de menor peso. Par 10 tanto, se cansigue una resolucion de 10 bits (D CxB9: DCxBO). EI ternporizador base con el que se campara el contenido de estos registros es el TMR2. La siguiente ecuadon permite calcuJar eJ valor del Duty Cycle: PWM duty cic/e - (CCPRxL:CCPxCON<5:4»-TO!lC-1MR2Itt'iCAUR Los registros CCPRIL y los bits CCPlCON<5:4> pueden escribirse en cualquier momento, perc no se cargan en CCPRI H hasta que final ice el periodo de la onda PWM actual (es door que se produce la iguaJdad entre PRl y TMRl). En este modo el CCPRIH es de sOlo lectura.
142
6. Modulo CCP - Comparador, Captura y PWM EI CCPx se pone a 0, terminando el cicio de trabajo, ruando el TMRl mas 2 bits se iguala a CCPxH mas 2 bits
Si el cicio de trabajo de 1a onda PWM es mayor que el periodo, la senal que sale por la patilla CCPx esta siempre a 1. La resoluci6n maxima en bits viene dada por la expresion:
Fose )
1g - ( resolucion ==
F I'WM
Ig2
bils
Por ejemplo, para una frecuencia de PWM de 1.22 kHz con un preescalcr de TMRl de 16 y una frecuencia de reloj de 20 MHz: 1
1
1220 ::. (PR2+1) · 4 · 20.10 6 ·16
se obtiene un valor de PR2::. 255 (OxFF), y una resoluci6n de:
\,.(20.10' ) "\. 1200 resolucion = > 10 bits Ig2 Para poner en marcha el modo PWM se deben dar los siguientes pasos: 1. Configurar el periodo PWM mediante escritura del registro PRl.
2. Configurar el Dllty Cycle escribiendo en el registro CCPR1L y los bits CCP1CON<5:4>. 3. Configurar CCPx como salida mediante el TRISC. 4. Configurar el preescaIer del TMR2 y habilitarlo mediante escritura en
neON. 5. Configurar el mOdulo CCP para la operaci6n en modo PWM.
6.S Modulo CCP en C El compUador C suministra una sene de fundones para el manejo del m6dulo CCP. Configuraci6n del mOdulo CCPx: setuP3cPX (modo); modo hace referenda a los bits CCPxM3:CCPxMO del registro CCPxCON (figura 4).
143
Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC
Figura 4 . Modo$ de SETUP_CCPxfMOOOf
Los valores para compa rar se fijan en los registros CCPRx. En el compilador C estos registros estan definidos en el fichero iI/elI/de, por ejemplo en eI16F87x.h: long CCP 1;
long CCP 2;
,;byte CCP_1 = OxIS
'byte CCP_2
#b yte CCP_1 LOW", OxIS
#byte CCP 2 lOW", OxID
#byte CCP_I _HIGH = OxI6
#byte CCP _2_HI GH '" OxIC
=OxlB
Definicion del cielo de trabajo para PWM: set_pwmx_ duty (valor);
valor: dato de 8 0 16 bits que determina el cielo de trabajo. Este valor, junto con el valor del preescaler del TMR2, determina el valor del cielo de trabajo. En la configuracion del TIMERl, el poslcaler debe valer 1.
Figura S. Ejemplo 1
144
6. MOdulo CCP - Comparador, Captura y PWM
---
Ejemplo 1: Medir eI anc/IO de 1111 pulso mediallte elmodulo eep (figura 5). Compollcntes ISIS: PIC16F876 y LNl016L. Inslrumefltos: OSCILLOSCOPE y Gellemdores: PULSE.
Se utiliza el modo captura del eep, configunlndolo para que detecte el fIanco de subida 0 de bajada del pulso a medir. Este ejemplo es similar al ejemplo 4 del tema de interrupciones, pero en ese la deteccion era por interrupcion de RBO. Cada vez que se produzca una detection de flanco, el valor del TMRl pasara al registro del modulo eep. linclude <16f876.h> Ifu~es
XT.NOWDT
lusa delay(clock - 4000000) 'include ,byte PIRZ - OxOC lntl nuevopulso"O ;
IIEntra otro pulso
int16 TFa-O , TFS-O,TF-O ;
/ITiempo nancos
float AP-O.O :
//Villor final del anche> de pulso
intl cambia-O ;
/(Cambio de nance> de disparo
#int_ ccpl void ccpl_int() (
//Funcion interrupci6n
if(cambio-O) {
//F1anco de subida
TFS-CCP_l ;
//Carga del valor del rer;istro CCPRI en !liJnco subidil
~etup_ccpl(CCP_CAPTURE_FE) ;
IIConflquriJcion modo Captura en funco b.1jada
cambi.o-l;
I/Control de cambio de flanco
else (
I/Flanco de Bajada IICargiJ del valor del
TF8-CCP_l i
reqj~tro
CCPRI en nanco bajada
~etup_ccpl
(CCP_CAPTURE_RE) .. I/ConflguriJcion modo Cilptura en Danca subidil //Control de cambio de {Janco cambio- O; if(nuevopl.llso--O} / Dl.levopulso .. j
/IFin de pulso ... //pulso a medir
:
void main (J lcd_init (} : setup_tilllltr_ l
(Tl_INTERNAL! ;
SBtUp_CCp.l /CCP_ CAPTURE_RE)
camb..!o - 0 ;
i
//Conffguracion TMRl IIConflgu r acion lIIodo CClp t ura en fJdnco subida //Control d e cambio
il
0
145
Compilador CCCS YSlmulador PROTEUS para Microcontroladores PIC enable_interrupts(int_ccpl} ; enable_interrupts (global) ..
IIHabilitacion interrupcion modulo CCP I IHabil1. tacion interrupcion global
do ( 1.[ {nuevopulso- - l)
(
Ill.Pul so nuevo? IIAncho de pulso . IIAncho de pulso en micro-se gundos (a 4 MHz : l ,,5) print[(lcdyutc, N\nPtllso *16.1tus ", liP); TF-(TFB-TFS) i
nuevopulso-D;
IIPulso ya medido , espera nuevo
J while {TRUE/ ..
Figura 6. Programa del eJemplo 1
Ejemplo 2: Ge"erar ulla seilnl Clladrada de 2 kHz medimlff el m6dljlo CCP (figura 7). Compollelltes ISIS: PIC16F876 y LM016L. lnstrumentos: OSCILLOSCOPE y COUN~
TER TIME.
--
.~ . .~ .
.-. .-._-
~ ' ::'-:'
OSCUI:I.JQII
L
_-'-'j ~lJ<'O
..... fI.../"
Ri!I$
AA21N<2NREr
R_$C
~H'
"117"'''0
~ "~,,;~~;;~I~~~-
--, 1tC2ItC~'
~C4ISWSD"
"-~
ftce/T)CICII ~C7I1Wf)T
Figura 7. Ejemplo 2
Se utiliza el modo comparacion del CCP, configurandolo en modo conmutaci6n del pin CCP por comparacion. Este ejemplo es similar a los ejemplos 1 y 5 del tema de interrupciones, pero en esos la detecdon era par interrupcion del TRMO y TMRl, respectivamente.
146
6. Modulo CCP - Comparador, Captura y PWM El modulo CCP campara continuamente el valor de TMRI con el valor prefijadoi ruando se produce la igualdad se produce el cambio de estado del pin CCP Y la activacion de la interrupci6n del mOdulo CCP. En cada conmutaci6n se debe fijar el valor a comparar para obtener una onda cua~ drada (un cicio de trabajo del 50%), es decir un semiperiodo de 250 I-1S (a 4 MHz el cicio maquina es de 11-1s), por 10 tanto, e! CCP2 se debe cargar con este valor (ajustando el valor final es de 199). linclude <16f876.h> Ifuses XT,NOHDT intI c<'lmbio-O;
IIVlJrilJbl e de control de cambio
lint_ccp2 void ccp2_int () ( if(++cambio~l)
/IFunci6n de in t errupci6n (
secup_ ccp2(CCP_ COMPllRE_ CLR_ON_MATCH) i IIModo Comparac16n, cambio a 0 else{ seCup_ccp2(CCP_COMPARE_SET_ON_MATCH}; IIModo Compardci6n, cambio a 1 set_timerl (0) :
IIBo rriJdo de TMRI
CCP_2 - 199; psra un Duty del SOl
void main (J
//Inicidlizaci6n del registro CCPR2
{
disable_in terrupcs (g1 ohal) ; setup_tlmer_l (Tl_INTERNAL I Tl_DIV_BY_l);
IIConfiguraci6n TMRI
setup_ccp2 (CCP_ COMPARE_SET_ ON_MATCH) i IIConfigu r<'lcion inicial modulo CCP CCP 2 - 199; -
IIIniciillli;r;acion del registro CCPR2 I/para un DLlty del sal
enable_interrupt II (int_ ccp2); enilble_ in Cerruptll (glob<'ll) ;
IIHabilitillci6n interrupci6n modulo CCP2 IIHabilitaci6n interrupci6n general
do ( ) while (TRUE); )
FlgtJr .. 8 . Progritm .. del ej emplo.z
Ejemplo 3: Mediante 10. collfiguracioll del mOdulo CCP lanzar ulla cOllversion AD, automatico. cada 111/s. Can cl valorobtenidose realizara zilla COfwersion DA utilizmzdo eI PWM Y lin filtro paso-bajo (figura 10). Compo/lellies ISIS: PIC16F876, CAP, CELL, LED-BAR~ GRAPH-GRN, LM3914, POT~LlN Y RES. Illstrumelltos: OSCILLOSCOPE. Se configura el mOdulo CCP2 en modo comparadon con accion especial de disparo, cuando se produce la igualdad se resetea el TMRI se y se lanza una conversion AD, si esta habilitada. Cargando el registro de CCP2 con el valor adecuado se consigue
147
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC que, ruando coincida con el va lor de TMR1, se produzca una conversion AD, en este caso cada 1 ms. Dado que la fre<:uencia de trabajo es 4 MHz (1 ms!1 fls=l(00), el registro CCP2 se carga a 1000.
Figura 9 . Selial de 2 KHz lejemplo 2)
Con el valor obtenido de la conversion se puede obtener una senal PWM propordonal a este valor. Para ella se utiliza e l mooulo CCPl, dado q ue el valo r de la conversion es de 10 bits y el registro del moouJo PWM tambien es de 10 bits, el va lor puede ser transferido directamente.
EI periodo de la senal PWM viene fija do por e l TMR2, con un presca/er y un pastcaler de valor 1 y un valor de registro PR2 de 224, 10 que implica un periodo de 225 f1s (4444 Hz). Si dicha senal es filtrada can un filtro de paso bajo se obtiene una corriente continua proporcional al valor de la conversion. Como apJicacion se puede aplicar esta senal a una barra de leds y obtener una senalluminosa proporcional a la senal adquirida (voltmeter). Para e llo se utiliza el circuito integrado LM3914 (figura 11). En la figura 10 se observa el funcionamiento del circuito; con una pila y un potenciometro se varia la tensi6n de entrada, la cual es muestreada cada 1 ms. Can este valor se genera una senal PWM (ver canal A del osciloscop io) y mediante el filtro de paso bajo se obtiene la tension media p ro porcional (ver canal 8 del osciloscopio). Dicha tension se inyecta a la entrada del LM3914 que proporciona 1a senaJ a los leds.
148
6. Modulo CCP - Comparador, Captura y PWM
•~"
Flgu,a to. Ejemplo 3
r
~lFQ
,.
I I I
". ,.
I LtO I NO.1
"
I I
IJ "
"
"
-'"'T'
.-I
"
"
,
'.
,I
"
"
"
LMJ9 14
I
,-
I "
I
-
L
JI
- - ----
l
" ••I' '" ".,II l
"n
_~ I
'"1 l'
V' f.llV-11V ~~",~==:t--i-----1:;:::-'I-+M
~r'----'--,'- :~
"." l """"-
SlGMAI JOUIICI
Flgu,a 11. Apllcacl6n t'plca del LM3914 {cortesi" N"tlon,,' SMq ~include
<16f876 . h>
Idevice adc-10 Ifuses XT,NOWDT
int16 valor; lint_ad
149
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC void "d_int(J{ valor- read_adc(J ,.
IiFUnci6n interrllpcion AD
set_pwml_dllty {valor};
II" Ollty de PNM
void main ()
IIValor de fllente analoqica ..
(
disable_ interrllpts (global) ,. IIHabilitac:ion RAD analogico
setllp_ adcJorts (AND),. setllp_adc (ADC_CLOCK_INTERNAL),.
IIReloj interno RC
set_ildc_channel (0);
IICana1 ()
setup_ timer_2(T2_DIV_SY_l,224, 1); setup_ccpl (CCP_ PWM); setup_ccp2 (CCP_COMPARE_RESET_T.IMER);
IlpR2~224,
Tpwm~225
liS
IICCPl en modo FWM IICCP2 modo COMPARACION... II y di:;paro e.'Jpecjltl
setup_ timer_l (Tl_INTERNAL
Tl_DIV_BY_l};
IIConJiqurac16n TMRl
set_timerl (O) ;
IIPuesta " 0
ccp_2-1000; enable_interrupts lINT_AD);
//Muestreo cada 1 ms a 4 MHz IIHabl11taci6n Interrupcion AD
enable_ interrupts {globalJ ..
//Habllitacion Interrupeion global
do ( j
...hile
(TRUE);
Figura 12. Programa del ejemplo:t
Flgl.lra 1:t. Senal modulad.. '1 senal fIItr ..da
150
_ _ _ _ _ _ _ _ _ _ _6_ .M _6cd ._uIO CCP - Comparador, Captura y PWM
NOTA
Puede detecta rse un error en el m6du lo (ver el llltimo ejemplo de este capitulo).
ecp en modo PWM con valores altos
EjempJo 4: Mediallte la cOlljigllracion del modulo ecp iallUlr 1I11a collversion AD allfoma/ica. COli eI il(l/or obtellido represel1lar la tel/sioll de mirada ell 1111 display grajieo (figura 14). CompOllclltes ISIS: PlC16F877, CELL, VSIN, LGM12641BS1R.llls/rumell/os: OSCILLOSCOPE.
En este ejercicio hay que tener en cuenta dos factores. Par un lado que la frecuencia de muestreo debe ser, par 10 menos, dos veces mayor que la frecuencia a muestrear; en este caso si la frecuencia de muestreo es de 5 kHz (200 ).1s), la frecuencia de la serial a mucstrear debe ser inferior a 2 KHz. POr otro tado, hay que ajusta r el rango de tensi6n de entrada a valores positivos. St:utiliza una fuente de continua de 2.5 V para elevar una fuente senoidal de 5 V de pico a pico con una freruencia de 10 Hz (tambien se puede desplaza r la tensi6n con el offset de la Fuente VSINE). Para representar esta tension se ajusta el tamal'io de la pan talla: en el eje de las X e1 tiempo (de 1 a 128 pixeles), en el eje de las Y la tensi6n
(de 1 a 64 pixeles).
Flgu'iI 14. Ejemplo 4
'include <16£877.h> 'device adc-lO
151
Compllador CCCS y Simulador PROTEUS para Microconlroladores PIC 'use delay (clock-200DOOOO) 'fuses HS,NOWDT
'include <'HDM64GS12 . c> 'include !ntl6 valor; fioilt tension;
lint_ad void ad_int(} {
I/Funci6n interrupcion AD
valor-read_ ,sdc (ADe_ READ_ ONLY);
/ /Valor de f!lence anlllOgica . ..
ccp_2-1DOO;
//reinic1d C!lentll
}
void mllln II 1nc8 xa -128 ,Yi:l-D; glcd_ init (ON),d1 sable_interrupts (globalJ ; secup_lldc-POrts(ANO) ..
I/Hllbilitllcion RAO IInll16gico
setup_adc (ADC_CWCK_INTERNAL)'-
I/Reloj interno RC
set_adc_channel (0);
Ileanal 0 IICCP2 modo COMPARACION._
setup_ccp2 (CCP_COMPARE_ RESET_TIMER) ..
II y disparo especial setup_timer_l fTl_INTERNAL
/ICcmfigurilcion TMRI
sec_timerl (0),-
1,'PlJesta a 0
eep_2"1000 ..
/IMuestreo c,sda 200
~s
a 20 MHz
enable_interrupts (INT_AD);
//Habi1itacion Interrupcion AD
ena.ble_ interrupts (globi:ll) ; gled fl11screen (0),-
'/Habilicacion Interrupcion global '/Borrado de panta)la
gled line/l,64,1,1,1);
//lineas de x e y
gled I1ne(1,31,128,31,1); do tension-(valor~5.0)/1024.0; ya-l . 0~12 . 6~tension
glcd~ixel
..
//Vin en voltios (de 0 a 5V)
/IEsclilado de Vin, y de 1
(y_l+64/S'Vin)
Ii
64
(x
de 1 B 128)
(xll,ya,l);
xa--; if (xa<2) (xa-128;
I/Eje de ciempos
glcd_ fil1screen glcd
(O) ;
1~ne(1,64,1,1,lJ;
//l ineas de x e y
glcd line(l,31 , 128,31,1); while (TRUE) ..
Figura 15. Program" clel eJemplo 4
152
6. Modulo CCP - Comparador, Captura y PWM Ejemplo 5: RealiZllr lin colltrol PID pam regular la tellll1eratura de III/ homo (figura 16). Compollt!l1tes ISIS: PIC16F877, IRLl004, OVEN, RES Y CELL. llls/rume,,/os: OSCILLOSCOPE.
-"
Figura 16. Ejemplo 5
Uno de los controladores mas comunes que se utilizan en el control de temperatura es el PiD (Proporcional-Integral-Derivada). Sin entrar en teoria de contro\' se puede indicar que un controlador PID responde a la siguiente l'CUacion:
donde e(t) es el error de la sena[ y u(t) es [a entrada de control del proceso. Kp es la gananda proporcionaJ, TI es [a constante de tiempo integral y Td es la constante de tiempo derivativa. En el dominic s, el controlador PID se puede escribir como:
U(S)~KI'[l +_ l + TdS] E(S) T,S Un controlador PID tiene tres parametros (Kp' Ty Td ) los cuales interacttian uno con e[ otro y su ajuste para obtener el mejor control puede ser muy comp[kado.
153
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
--
Ziegler/Nichols sugirieron valores para los parametros del control PID basados en analisis de lazo abierto y lazo cerrado del p roceso a controlar. En lazo abierto, muchos procesos plleden definirse segun la siguiente funcion de transferencia:
donde los roeficientes "0- '[0 Y Y(I se obtienen de la respuesta del sistema en lazo abierto a una entrada escalon. Se parte del sistema estabilizado en y(t) .. Yn para u(t) - ulY se aplica lm:l entrada escalon de llu a u 1 (el salta debe estar entre un 10 Y un 20% del valor nominal) y se registra la respuesta de la salida hasta que se estabilice en el nuevo punto de operati6n. y(l)
/
y, .-.----.----.- +,---::-=~--- Ftt«o ~ .." ' _ pond-'t.
I
i
I
h
y.
.... - .............,,.... - ............................;
I--,--~
r
"
II
j
I I(S)
Figura 17. Respuesta de sa lida a una entra da escalon
Los panimetros se pueden obtener de esta respuesta: TO =
/!- / O
YO=12- / 1 K0 -
y, - Yo U! - uO
Seg{In Ziegler/Nochols, las reladones de estos coeficientes can los para metros del controlador son:
154
6. ModiJlo CCP - Comparador, Caplura y PWM
---
La realizaci6n de un controlador PID discreto viene dado por la transfonnada z:
U(Z)=E(Z)K,[I+
T , +T, (J-Z-')] 7;(I -z·) T
tambicn:
U(z) b - - = o+ - - + c(l-z- l ) E(z) I -z-' donde:
a=K
,
K oT
b=-'7;
c = CC KL'",0T,,-, T
Existen distintas posibilidades de la realizaci6n pr.ktica de un controlador PID; una de las mas habituales es la realizad6n en paralelo (figura IS).
proporcional + e(kT) -~-
u(kT)
+ derivativa + '---+{ c ) , - - - - +(
Figura 18. Diseno paralefo del controlador PID
EI algoritmo utilizado para programar el PIC se muestra en la figura 19 de la pagina siguiente. EI muestreo debe ser mucho menor que el hempo de establecimiento del sistema en Iazo abierto. En el modelo Ziegler/Nichols se lorna un valor T < Tr/4 (tambien puede utilizarse T < yJlO). Un problema asociado a este tipo de disefio es eil lamado "integral windllp", el cual puede provocar largos periodos de sobreimpulsos (overshoot), motivados por los valores excesivos que a!canza la senal de control debido a la acumulaci6n en el integrador. Para evita r este problema se suele limitar la senal de control entre un valor maximo y otro minimo, impidiendo que el integrador actiie cuando se superan esos Hmites.
155
Compilador CCCS YSimulador PROTEUS para Microconlroladores PIC
(
AD
)
[
I
SET _POINT
,on
I
! MUESTREOOE
seNAl.. O~)Si.PLJOA
,OJ
CALCULO oa ERROR e~T)=r(kT)-y(kT)
ch.cuLooa TERMINO INTEGRAL i(kT)=b· e(kT) ... I,kT a)
ch.cuLOoa TERMINO CJERIVATIV'O d(kTt)"C·e(kT)-c·e(kT 0)
~
CALCULO DE LA ~OA
AD u(kT}"I(kT )-te·I~T) +d(kT)
~ TRH-ISFERENCIAOE l{Kl) AL)CTU..aDOO
L i(kTrJ=(kT)
e(kT o)"8(\<.T)
[
Figur;!l 19. AJgoritmo de progr;!lm;!lcion del PIO
En el ejemplo. el control se realiza sabre un homo can una resistencia calefactora. Se actua sabre dicha resistencia median te una se.nal PWM generada en funcion del control prD. Para faci li tar la sirnu laci6n se alimenta la resistencia con una fuente
156
6. MOdulo CCP - Comparador, Captura y PWM de corriente continua de 12 V Yse modifica su potencia de calentamiento (edita r el componente con el boton derecho) a 120 W (figura 20). ~----g
-"-
.rfM "" N
--,...
c--.t floloron
usa. ~ odoI r ill:
...
'Hid.".
--,
-
A6i"""odPl_ _jll 20
· ·
I '" I I <- I
· ·
MJd>1'oor..... mocUo·
t >ddo _!i~
[>d.do _PC81.,.,-
E.. " , - - . .. _
Figura 20. Caracte ristJC;lS d e l OVEN
Dado que la corriente maxima es de 10 A se ha utilizado un MOSFET de potencia,
elIRLlOO4. Como sensor de temperatura se puede utilizar rualquier dispositivo NTC, RID, termopares, etc.; pero el OVEN tiene un terminal que indica la temperatura del homo en grados Celsius. Sera este terminal el que se utilice para introducir al PIC la temperatura del horno; dado que la temperatura esta medida directamente en grados Celsius es conveniente utilizar (para este ejemplo) un divisor por 100 que permita obtener el valor en milivoltios de la temperatura (25 °C seran 250 mY) . • jlll,C""'II,,,,"h' -
r",,- D_
~
~,-
--. !AI_FIa
-" . ·6 -
1II'Iooe.--
t[ __ -~ l'D l._ (,11 _ _
.. _
_..._-
- - ,-
--.= -
-_.~.
-l1li
" '""'
. •
Figura 21. Ca racte rlsticas del OVEN
157
Compilador Cecs y Simulador PROTEUS para Microcontroladores PIC La temperatura a alcanzar (0 set point) se podria intraducir por teclado (y LCD) pera, para simplificar, se establece directamente en el pragrama (se deja allector modificar dicho programa para poder variar la temperatura de set poil/t). La temperatura inidal se puede modificar en el menu de edici6n del com panen te OVEN. EI resta de caracteristicas a modificar en el componente OVEN son (figura 22):
• Temperature coefficient (Vl°C): da una idea de 1a temperatura que alcanzani eJ homo segtin la tension aplicada. Valor: 1 V/°e. • Oven time COllstant (sec): es la canstante de tiempo del homo. Para evitar una
larga simuladon se ajusta a 10 segundos.
• Heater lillie Constant (sec): es la canstante de tiempo del calefaetor. Para evitar una larga simulacion se ajusta a 1 segundo. • Thermal resistance to ambient ("CIW): resistencia tI~rmica homo-ambiente. Se ajusta al mismo valor que el dado par defecto, 0.7.
- ----------
-- '
'r;;;
" "-C-""''l....
M'
_.-.
~_f..
."
_1_i'C}
~!"C:i;..,...1V
-
~T_CmototoI
,
__ 1
~--------I I I I '""'
_.--
_. ··
'-
1 _.... ~"'f'Cl
E_""":;.o.-. E_ _ Pal...... E60~
___
~
"""'_-..JIIlIlIo
i,
·
Flguril 22. CilritCtflfstlcas del OVEN
Para determinar los par;imetros (~'[o y yJ del control PlD basados en el anal isis de lazo abierto segun Ziegler/Nichols, se realiza un amilisis transitorio del homo can una entrada escalon de 0 a 2 V (10% a 20% del valor nominal); vcr Figura 23. Para trazar la gr.ifica se utiliza la SimulatiOIl graphs en el ISIS (Figura 24); el tipo illteractive. En el comando GRAPH/ADD TRACE (figura 25) se afiade la traza de
la sonda de tension colocada en la salida de temperatura del hoeno. Al realizar la simulaci6n temporal de la forma habitual (0 can la barra espaciadora) se lanza tambien la simulacion grafica y durante el tiempo fijado en la gnifica (editando sus caracteristicas -Figura 26-), el va lor de la sonda se reflejara en dicha g rMka (se deja abierto el interruptor un tiempo y despues se eierra para provocar el escal6n
158
6. Modulo CCP - Comparador, Captura y PWM de entrada). Realizando una pulsacion en la barra de titulo de la gnlfica se puede ampliar y utilizar un cursor para realizar las medidas; tam bien se puede exportar la grMica a un fichero. ~
:- BAT1
•
SW,
••
SW$'ST
3IilIIl QUlin
()toI'!T1~
+
,~
.~
,-
••
.. .... ~
ov,
~
~
~
~.'
~.'
~
Figura 24. Simulation Graphs
--
--.
Figura 25. Menu Graph
159
Compilador CCCS y Simulador PROTEUS para Microconlroiadores PIC
--..... PC_
,;
"'-,
,
f
SPlCtO_
I
s.l:~
II Figura 26. C
De la recta de maxima pendiente se deducen los parametros para eJ amllisis en lazo abierto de ZieglerlNichols (Figura 27).
_. ." .... .....
,
" 0'
TO
Y Yo definidos
... . ........................ . ... ..... . ....
~.~
~-
,; "" " /1
/'
:/ i , /
, ,:
/ ', ,,i/ !,, :,,, ,,' ,!j ,, ,,
•
=5.5- 4.5 = I
ro= 1, -I, = 18.5-5.5 = 13 "0=y , - Yo = 276 - 25 = 125.5
,,
,,
• • •
TO = 11 ~tr)
U1 -Ur)
..~ T...J/
2- 0
k
· '•. M
,.
~..
" ..
•
.. .
..
..
...
Figura 27. Determinacion de loS" parametros ICO' T.Y Y.
Los parametros Kr' T Y TJ se calculan en base a estos: j
K
= p
1. 2 10 = 1.2·13 =0.1243 Ko ·ro 125.5·1
T, = 2·'o= 2·1 = 2 T" = 0.5·To = 0.5 · 1=0.5
160
.... ....
6. MOdulo CCP - Comparador, Caplura y PWM Los pafi1metros del controlador discreto se ca lculan en base al tiempo T que segun Ziegler/NidlOls es de 0.1 s po r ser menor de T < '[0 /4. (I
= K , = 0. 1243
b = K {I· T = 0.1143·0.1 = 0.0062
r,
2
c = K p ' T" = 0.1243·0.5 T
=
0.6215
0.1
IINCLUDE <16F877.h>
Idavice
adc~lO
luse delay(c1ock-4000000) Ifuses XT,NOWDT IByn; TRISe -
OxS 7
void main () { inC16 valor; int16 control; noat a,b,c ; float temp_limit ;
//1ectura de temperatura
//va10r del PWM //conSCl!Jntes del PID //tempe rl!Jtura a alcanzar
noat rT, eT , iT , dT ,yT, uT, iTO , eTO, 1T_1 ,eT_l:
float max,min: min-O . O; max-IODO. D:
//variables de eeuaeiones //limices mJxirno y minimo de control
//lnielalizaeion variables
iT_I-0.0 ; eT_ l - O. O; CI-0.1243;
//cons tantes del PID
b -O . 0062 ; e-0 . 6215; temp_1 Jm! t - 500. 0;
//Temperacu!'"a " alcanzile
TRISC"O;
setup_timer_2 (c2_div_by_ 4 , 249, Ij .. setup.eepl (cep.pwm); setup_ ade_ports (a11_ analo~J .. setup_ade(ADC_CLOCK_INTERNAL);
set_adc_channe1 (O); while (lj ( valor-read_adc() ,. yT-valor' 5000. 0/1024.0; rT- temp_llmlt; eT-rT- yT; iT-b ~eTdTO:
//periodo de 1" sella! PWM a 1m,. //M6du!o CCP a modo ~ //Puerw A "na16gico //reloj convertldoe AD inteeno //Lec tu!'"a por el eanal 0 //Lectu!'"a de 1a temperatu!'".3 //conveesion a mV (O.25Va 250mV) //CalCulo erroe //e.Heu!o del teemino integral
161
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC dT-c' feT-eTG);
I/Calculo del
uT"i T+IJ *eT+dT; if (uT>ma,,) '{
//CAlcul0 de la SIJlid/l PID
~ermino
dedvIJtivo
I/SalidiJ PID 5i es mayor que el MAX
uT"mIJx;} else ( if (uT
I/Si.lljda PID 51 es menor que e1 MIN
uT"min ; I //Transterencia de si.llida PID a 5eilal PWM
control-uT ; set_p"'ml_du~y(control)
; //Guardiir v.!rl.!ble5
iTO-iT: eTO-eT; delay_m$(lOO):
I/Tiempo de muestreo
i Figuril 28. Programil del ejemplo 5
La respuesta del sistema se mueslra en Ja figura 29; si se redu ce el tiempo de muestreo alms se reduce el sobreimpu lso (£igura 30).
• • •
/
I
"-
""-
/
• •
· ·• • •
.000.120
•.
·•
•.
I I I
-0.62 5 T_ t QOm
Min - 0
/
• / • II "
Iii Figura 29. Respuesta con T - 100 ms
162
~I
6. Modulo CCP - Comparador, CaplUra y PWM
•
· · • · · · · · ·•.
~
/'
/
•
1"-0:12.3
!/
-- r-
.
/
c:>'62.151 MU~OO
Ii!II •
f--
/
w
•
.......,,,
/
/
,
/
"::'Iiij
' - " !=::illI Figura 30. Respuesta con T . 1 ms
Ejemp lo 6: Problemas Cilia simI/Indo!! del mOdzdo CCP ell modo PWM.coll el1515 (figura 16). CompOllclltes ISIS: PIC16F876. IlIstrmnclltos: OSCILLOSCOPE.
5e ha detecfado un problema, que pronto sera resuelto por LabCenter, en el m6du10 eep trabajando en modo PWM. Los valores del dutty pueden ir de 0 a 1023 dando una selial modulada desde 0 V con el valor 0 a 5 V con el valor 1023; pero en el ISIS, a partir del valor 900 1a senal se convierte en una selia! cuadrada con u n cicio del 50% y un periodo doble del ,que tenia. En eI ejemplo se observa este defecto. ""~
~ ~~
AA'iAH'
'""--
....
~ ~.
~
--
,
~,
,•
~
,
"""'" 1aJ1.'I'GO
FtCWT10S01llClO RC11T1~
"""'" """""" """"' ,"
"""""'~
~~.
""''''''
Figura
~1.
EJernpla 6
163
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
Flgu,a 32. PWM con valor "'enor de 900
Figura 33. PWM con valor mayor de 900
164
6. Modulo CCP - Comparador, Captura y PWM linclude <16f876.h> Ifusetl XT,NOWDT IUtl& d&1.y(~lo~k-4000000J
int16 i; void
lII~ln
()
/
tletup_ti,..r_2{T2_DIV_SY.1.224,11;
//PR2-224 . Tpwm-225jJs
senlp_ccpl (CCP_PtfMJ;
l/eePl en modo PWH
for fi. .. O.. i<1024;~HJ (
set_pwml_dutyfiJ;
//IJ Duty de PWM
delay_ms (25) ..
Figura 34. PrOiilrama del eJemplo 6
165
7. Transmlsi6n serie
Capitulo 7 Transmision serie 7.1 'ntroduccion Los PIC uHlizan, entre otros, dos modos de transmision en sene: • El puerto serie smcrona (SSP). • La interfa z de comunicacion serle (SCI) asincrono universal (USAR1).
0
receptor transmisor serie smcrono-
El SSP se suele utilizar en la comunicaci6n con otros microcontroladores 0 con perifericos. Las dos interfaces de trabajo son: • lnterfaz serie de perifericos (SPI): desarrollada por Motorota para la comunicacion entre microcontroladores de la misma, 0 diferente, fa milia en modo maestro-esc1avo; Full-duplex. • lnterfaz Inter-Circuitos (f2C): lnterfaz desarrollado por Philips, con tu1a gran capacidad para comunicar microcontroladores y perifericos; Half-duplex. La configuraci6n USART (transmisor-receptor serie smCTono-asincrono universal), tambien conocirlo como SCI (interfaz de COmunicaci6n serie), permite la comunicacion can un ordenador trabajando en modo full-dllplex asincrono 0 con perife.ricos trabajando en modo Ilaif--duplex. En general, puede trabajar de dos formas:
• Asincrono (jull-duplex). • Sincrono (lralf-duplex). Otros tipos de comunicacion soportados par los PIC son: 1-Wire bus, LIN (Local IlltercD/mect Network), USB (Ulliversal Serial Bus), el CAN (COli troller Area Network) y Ethernet.
167
Compilador CCCS VSimulador PROTEUS para Microcontroladores PIC
---
7.2 EI modulo USART/SCI 7.2.1 Introducclon Algunos PIC disponen del m6dulo de comunicaci6n serie USARTISCI, tal vez el mas utilizado entre los mOdulos de inlerfaz serie. La principal funcion del USART es la de transmitir 0 recibir datos en serie. Esta operaci6n puede dividirse en dos categorias: sincrona 0 asincrona. La transmisi6n sincrona utiliza una seiial de reloj y una linea de datos, mientras que en la transmision asincrona no se envia la senal de reloj, por 10 que el emisor y el receptor deben tener relojes con la misma frecuencia y fase. Cuando 1a distancia entre el emisor y el receptor es pequena se suele utilizar la transmision sincrona, mientras que para distancias mayores se utiliza la transmision aslncrona.
El USART puede transmitir 0 recibir datos serie. Puede transferir Iramas de datos de 8 0 9 bits por transmisi6n y detectar errores de transmisi6n. Tambien puede generar interrupciones cuando se produce una recepci6n de datos 0 cuando la transmision ha sido completada. Algunos PIC tienen un USART direccionable 0 AUSART (Addresab/e USARD que utiliza el novena bit de datos para distinguir entre la recepd6n de datos 0 de direccion. En algunos PIC se ha mejorado el mOdulo USART dando lugar al EUSART 0 USART mejorado, el cual pennite la detecci6n automatica de baudios, el despertar automatico al recibir la senaJ de sincronismo a la transmision del canicler Break de 12 bits, permitiendo su utilizacion en sistemas de redes de interconexion local (bus LIN). Basicamente, la transmision serie consiste en enviar los datos bit a bit a traves de una linea cornun en periodos de tiempo fijos, dando lugar a la llamada velocidad de transmision 0 numero de bits enviados por segundo (baudios). Tanto el emisor como eJ receptor poseen registros de desplazamientc para realizar la comtmicacion. Los bits estan codificados en NRZ (niveJ alto; 1, nivel bajo: 0), NRZI (cambio de myel: 1, sin cambio de nive!: 0), etc.
En el modo Slncrona se permite la transmisi6n continua de datos y no existe un limite de tamano, es un modo semi-du plex (Ia comunicaci6n serie se establece a trayeS de una Unica linea, en ambos sentidos, pero no se puede Iransferir informacion en ambos sentidos de forma simultanea). En este modo de transmisi6n se puede trabajar de dos formas: • En modo Maestro, donde el microcontrolador maestro genera la senal de relaj e inicia a finaliza la comunicaci6n . • En modo Esdavo, donde el microcontrolador esdavo recibe la senal de relaj y depende del microcontrolador maestro para recibir 0 envia r informaci6n.
168
7. Transmision serle
byte
Datos Reloj Figura I . Transmlsl6n sincrona
En el modo asincrono SE' em plean relojes tanto en el emisor como en el receptor. Ambos relojes deben ser de igual frecuencia y deben estar en fase a sincronizados. La frecuencia de [eloj se acuerda antes de la transmision configurando 1a velocidad mientras que 1a sincronizacion se rea liza durante la transmision. Cada trama de datos tiene un tamano fijo y poseen un bit iniciaJ 0 de arranque (starf) y un bit Final o de parada (stop) que permiten realizar dicha sincronizaciOn. La transmisi6n es en modo filII-duplex (se utiHzan dos lineas, una transmisora -TX- yotra receptora -RX-, transfiriendo informaci6n en ambos sentidos; SE' puede transmitir y recibir informaci6n de forma simultanea).
1 101111 111 11 1,--1 Bit start
Bit stop
Figura Z. Transmlsl6n asincrona
EI modo mas habitual de transmision por el USART es el modo asincrono, puesto que permite comunicaciones en largas distancias. Existen distintas normas de transmisi6n serie asmcrona, como 1a RS232, la RS48S, etc. Los niveles de tension empleados en estas normas son diferentes al empleado par el PIC. Par ella, suele ser necesaria la utilizaci6n de cirruitos extemos de adaptacion Los terminales utiliz.1dos en el modulo USART son el RC6/TX/CK y el RC7/RXIDT: • En el modo sincrono maestro, el pin RC6!TXlCK se utiliza como senal de reloj (de salida) y el RC7/RXIOT como linea de datos a envia r 0 recibir. • En el modo sincrono esclavo, e[ pin RC6ffX/CK SE' utiliza como senal de reloj (de entrada) y el RC7/RX/DT como linea de datos a enviar 0 recibir. • En el modo asincrono, e[ pin RC6/TX/CK SE' utiliza como terminal de transmisian de datos y el RC7/RXIDT como terminal de recepci6n de datos. Los registros asociadas al modulo USART/SCI son: • SPBRG: Generador del ratio de baudios. • TXSTA: Estado de transmision y control.
169
CompUador CCCS VSimulador PROTEUS para Microcontroladores PIC • RCSTA: Estado de recepcion y control. • TXREG: Registro de datos de transmisi6n. • RCREG : Registro de datos de recepci6n. • PlRl : Flag de interrupcion. prE1 : Habilitacion de la interrupcion.
Reglstro TXSTA (dlrecclon RAM: 98hl [PICI6F87x] Rm-O
Rm-O
RiW-O
RfW-O
U-O
Rm-O
RIW-O
R/W-O
rlc~s~.~c--rIT~X~,~-r.IT~X~E"~-r.ls~y~"c~'lIIIIIr.~'~G~H--lrT~'~~~-lrT~X~'D~' 8117
SilO
Figura 3. El reglstro TXSTA
bit 7:
CSRC: Bit de seleccion de la fuente de reloj. E.n modo asincrono no interviene.
En modo sincrono: 1 = Modo maestro (genera seRal de reloj mediante BRG). 0= Modo esdavo (fuente de reloj exterior).
bit 6:
TX9: Bit de habilitacion de 1a transmision de 9 bits: 1 = Transmision de 9 bits.
0- Transmision de S bits. bit 5:
TXEN: Bit de habilitaci6n de 1a tr.. nsmisiOn: 1 - Transmision habilitada. 0"" Transmisi6n deshabilitada.
bit 4:
SYNC: Bit de seleccion del modo del U5ART: 1 - Transmisi6n sincrona.
0 - Transmision asincrona. bit 3:
No implementado. Se lee como O.
bit 2:
BRGH: Bit de seleccion del valor de baudios. Modo asincrono: 1 - AHa velocidad. 0 - Baja veloodad. No se utiliza en el modo sincrono.
170
7. TransmisiOn serie TRMT: Bit de estado del registro TSR :
bit 1:
1 - TSR vado.
0= TSR lleno. TX9D: 9 bit de datos transmitidos. Puede ser el bit de paridad.
bit 0:
TXREG TX9=1
~.--
i
1 bit
.. -.. -.... - -..
1 6 bit
IREGISTRO DE DESPlAZAM!ENTO DE
SALID~
Figura 4. Esquema de' proceso de trilnsm'sion
El USART puede configurarse para transmitir 8 0 9 bit de datos configurando el bit TX9 del registro TXSTA . Si se utiliza el fonnato de 9 bits, el noveno bit debe colocarse en el bit TX9D del registro TXSTA antes de escribir los 8 bit en el registro TXREG. Una vez estan todos los bits en dicho registro, son transferidos al registro de desplazamiento de transmision (TSR). Desde alli son transmitidos al cicio de reloj por el pin TX comenzando par el bit de start y terminando por el bit de stop.
BII stan
Bil slop
Figura S. EI envio de 'illS tramils
Reglstro RCSTA fdlrecclon RAM: 18hl [PIC16F87xj RlW< SPEN
RlW< I RX9
RlW< I SREN
I
RlW< CREN
u< _
.< FERR
B",
.<
.<
I OERR
I RX90 6110
I
Figura 6 . EI registro RCSTA
bit 7:
SPEN: Bit de habilitacion del puerto serie. 1 = H abilitado (RXIDT y TX/CK como puerto serie).
0" Deshabilitado.
171
Compilador CCCS YSimulador PROTEUS para Mlcrocontroladores PIC bit 6:
RX9: Bit de habilitaci6n de la recepcion de 9 bits. 1 '" Recepcion de 9 bits. 0", Recepcion de 8 bi ts.
bitS:
S REN: Bit de habilitacion de recepci6n sincrona.
No utilizado en modo asincrono. Modo sincrono: 1 '" Recepdon {mica habilitada. 0'" Deshabilitada. (Se pone a 0 despues de una recepcion
completa). bit4:
CRE N: Bit de habilitacion de recepcion continua.
Modo asincrono: 1 = Habi litada. 0", DeshabiJitada.
Modo sincrono: 1 '" Habilitada hasta que el bit C REN es puesto a O.
0 - Deshabilitada. bit 3:
No implementado. Se lee como O.
bit 2:
FERR : Bit de error de trama.
1 '" Error (Se actualiza alleer RCREG).
0 " No error. bit 1:
OERR: Bit de error de ovcrmll/.
1 = Error (Se pone a 0 si CREN es 0). 0= No error. bilO:
RX9D : 9 bit de datos transmitido
~EGISTRO DE DESPlAZAMIENTO DE ENTRADA I
,.,
,.,
~
.........
... ... . Buffer
RX9=1
I
RX9D
.............. .
I
RCREG
0
••
Figura 1. EI esquema del proceso de lit rlKepc:lon de datos
172
1. Transmisi6n serie EI U5ART puede oonfigurarse para recibir 8 0 9 bit configurando el bit RX9 del registro RCSTA. Despues de 1a detecdon del bit de start, los 8 0 9 bits entrantes por el pin RX son desplazados par el registro de desplazamiento de entrada (RSR) uno a uno. Oespues de que el ultimo bit ha side desplazado dentro, el bit de stop es testeado y el dato (el paquete de bits) es transferido a un bllffer el coal. a su vez, 10 transfiere al rcgistro RCREG si esta vado. E\ bllffer y e\ registro RCREG forman una FIFO de dos elementos (el primer dato que entra esel primer dato que sale). En el caso de transmision de 9 bit, el noveno bit pasa la bit RX9D del registro RCSTA del mismo modo que los olros 8 pasan al registro RCEG. Algunos dispositivos tienen un USART modificada, Hamado AUSART 0 USART direcciOllable, que permite filtrar automaticamente dertas transmisiones. Los datos recibidos son separados en dos categorias, direcci6n y datos, que se indican por el noveno bit. 5610 los bytes de direcci6n son procesados por el U5ART, los datos son ignorados. Este echo se utiJiza normaJmente ruanda hay varios dispositi vos en un bus y las transmisiones se direccionan a uno en concreto. Los dispositivos que reciben la transmision ignoran todos los bytes de datos can el novena bit a 0 y sOlo reciben los bytes de direccion can el noveno bit a 1. Cuando se recibe el byte de direccion y coincide, el dispositivo puede pasar a recepcion normal y recibir el resto de los datos. En este tipo de dispositivos el bit 2 del RCSTA es: bil3:
ADDEN: Bit de habililaci6n de deteccion de direcdon
l=Habilitada (5610 si RX9=l) (F.Deshabilitada
~REGISTRO DE DESPlAZAMIENTO DE ENTRADAJ ADDEN=l RX9=1
.Carya solo si 1
TEST \
.\ .'
00 0
... ,. 0
0 0'0 0
8 bit
0 0
, 0 0 0 0
•
Buffer
RX9D
RCREG
0
~
~
Figura 8. Esquema del proceso de rec=epclon e n los AUSART
Reglstro SPBRG (Ox991 [PIC16F87x] La velocidad de comunicacion se controla por el valor cargado en este registro. Genera el reloj que pennite Ja comunicacion. La velocidad se expresa en baudios (bit/s).
173
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
-------
En modo asincrono: BRGH=O (baja velocidad)
BAUDIOS =
lose 64· (SPBRG + I)
BRCH..l(alta velocidad)
BAUD/OS =
lose 16· (SPBRG+ I)
En modo sincrono:
BA UDIOS ==
Jose
4· (SPBRG + 1)
Siempre hay que considerar un margen de error.
7.2.2 EI modulo USART en C Configuraci6n generica del USART: #USE RS232 (opdones) Esta directiva permite configurar varios panlmetros del U5ART: velocidad de transmision, pins utilizados, etc. Se puede modificar en cualquier parte del programa pero siempre despues de haber definido la di rectiva ;US£ DELAY. Esta directiva habil ita el usa de tunciones tales como GETCH, PUTCHAR Y PRINTF. Permite su usa en dispositivos que no poseen m6dulo USART mediante software USART. Cuando se utilizan dispositivos can U5ART, si no se puede alcanzar una tasa de baudios dentro del ~% del valor deseado utilizando la frecuencia de reloj actual, se generara un error. 8AUD=X
Velocidad en Baudios.
XMIT=pin
Pin de transmisi6n.
RCV=pin
Pin de recepcion.
FORCE_SW
Usa un software UART software en lugar del hardware aun cuando se especifican los pines del hardware.
RESTART_WDT
Hace que la fundan GETC() ponga a cero el WDT mientras espera u!1 caracter.
BRGHlOK
Permite velocidades de transmisi6n bajas en chips que tienen problemas de transmisi6n.
174
7. Transmision serie
ENABLE=pin
EI pin especificado esta ra a nivel alto durante la transmisi6n. Utilizado en transmisi6n 485.
DEBUGGER
Permite depuracion a traves del/CD. El pin por de+ fecto es el 83; usar XMIT y Re V para cambiar el pin (debe serel misma en ambos).
RESTART_WDT
Provoca que la fundon GETC() barre el WOT si es+ pera un caracter.
INVERT
mvierte la polaridad de los pines serie (normalmente no es necesario con el convertidor de nivei, como el MAX232). No puede usarse con el USART interno.
PARITY=X
Donde X e5 N, E, u O.
BITS =X
Donde X es 5-9 (no puede usarse 5+7 can el USART interno).
FLOAT_ HIGH
Se utiliza para las salidas de colector abierto.
ERRORS
lndica a1 compilador que guarde los errores recibidos en la variable RS232_ERRORS para rcstablecerlos ruanda se producen.
SAMPLE_EARLY
No se puede utilizar con USART interno. Provoca que el nluestreo del data a traves de la fundon GETC() se realice al p rincipio de un bit de tiempo.
RETURN:pin
Para FLOAT_HIGH y MULTCMASTER, este pin se usa para leer la senal de retorno. Par defecto, para FLOAT_HIGH es XMIT y para MULTCMASTER es Re V .
MULTCMASTER
Usa el pin de RETURN para determinar si otro master en el bus esta transmitiendo al mismo tiempo. Si se detecta una colision, el bit 6 se pone a 1 en RS232_ ERRORS Y todos los posibles PUTCO son ignorados hasta que el bit 6 este a O. La senal es comprobada a1 final y al principia de cada bit de tiempo. No se puede utilizar con USART interno.
LONG_DATA
Permite manejar INTI6 a las funciones GETCO y pureo. En formatos de datos de 9 bits.
D1SABLE_INTS
Provoca la deshabilitacion de interrupciones cuando se ejecuta GETC() y PUTC() evitando distorsio-nes en los datos.
175
Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC
STOP=x
Numero de bits de stop (por defecto 1)
TI:MEOUT",x
Para establecer el tiempo que GETCO espera un caracter (en o1s). Si no se recibe caracter en este tiempo, el RS232 ERRORS se pone a O.
SYNC_SLAVE
Provoca una linea RS232 en modo esclavo sincrono, hacienda la patilla de recepcian como entrada de reloj y la de transmisi6n como entrada/salida de datos.
SYNC_MASTER
F'rovoca una linea RS232 en modo maestro sincrono, hacienda la patilla de recepdon como salida de reloj y la de transmisi6n como entrada/salida de datos.
SYNC_MATER_CONT
Provoca una linea RS232 en modo maestro smcrono en modo continuo, hacienda la paliUa de recepdon como salida de reloj y la de transmision como entrada/salida de datos.
UART]
Configurar 1"1XMIT Y RCV para el USART1.
UART2
Configurar el XMIT y RCV para 1"1 USART2.
Ejemplos: #use delay (clClCk-20aaOOO) ;
#use rs232 (BAUo-9600 luse rs232 (BAUD-9500
XMIT-PIN c6 XMIT_PIN_A2
RCV-PIN_ C7 , BITS-B) RCV"'PIN_A3)
setup_ ua.rl{baudJ baud es una constante que define la velocidad . Un 1 enciende el USART y lm 0 10 apaga. Can cualquier valor de velocidad, el USART se enciende. En dispositivos que utilizan AUSART se admiten los sigu ientes parametros; UART_ADDRESS UART: 5010 acepta datos can 1"1novena bit a 1. UART_ DATA UART: acepta todos los datos.
set_uart_speed (baud) Identica a la funcion anterior. II 5e estJblece
1~
,
velocid~d medi~nte l~ combin~ci6n
•
s ...itCh ( .l.nput_ b() 3 ) set_uart_ speed(2400) ; cllse 0
bceak;
Cllse 1
"et_uart_"peed(4800) ,.
break,.
2
set_ uact_ speed {9600J ;
bceak ;
set_uart_speed{l9200J ;
bre .. k;
c~"e
case 3
176
de las pat111as 80 y 81
7. Transmisi6n serie Transmision de datos: pute (edata) putehar (edata) cdala es un carader de 8 bits. Esta fu ndon envia un cank ter mediante la patilla XMlT. La direcliva #USE RS232 debe situarse siempre antes de utilizar esta fun-
cion. puiS (string)
siring: cadena de caracleres constante 0 matriz de caracieres terminada con un O. La funcion pI/IsO manda los caracteres de la cadena, uno a uno, a traves del bus RS-232 utilizando la funcion PUTC(); detnis de la cadena envia un RETURN (13) Y un retorno de carro (10). printf (fnarne, cstring, values...)
cstring: es una cadena de caracteres (constante) con un O.
0
matriz de caracieres term inada
!Jlame: las funciones a utilizar para escribir la cadena indicada; par defecto se utiHza la funcion PUTC(), que permile escribir en el bus RS-232.
va/lies: valores a indulr en 1a cadena separados por comas; se debe indicar %nt. EI Formato es %nl, donde n es opcional y puede ser: 1-9
para especificar ruantos caracleres deben ser es pecificados;
01-09
para indicar la cantidad de ceros ala izquierda;
1.1 - 9.9 para coma flolanle. t puede indkar:
,
Car.icier.
5
Cadena 0 canicler.
u
Entero sin signo.
d
Entero con signa.
Lu
Entero largo sin signa.
Ld
Entero largo con signo.
x
Enlero hexadecimal (minlisculas).
X
Entero hexadecimal (mayusculas).
177
Compilador C CCS YSimulador PROTEUS para Mlcroconlroladores PIC
Lx
Entero largo hexadecimal (minusculas).
LX
Entero largo hexadecimal (mayusculas).
f
Flotante con truncado.
g
Flotante con redondeo.
•
Flotante en formato exponencial.
w
Entero sin signo con decimales insertados. La 11 cifra indica el total, 1a 2el numero de decimales.
Recepci6n de datos: value=getcO value=getch O value=getcharO
va/lie es un caracter de 8 bits. Espera recibir un caracter por la linea RS-232 y devuelve su valor. En los dispositivos con USARTinterno, se pueden almacenar hasta tres caracteres; para evitar esperas se puede usarla fundon KBHIT(). valor = kbhitO
valor es 0 (FALSE) si GETC() debe esperar a que Begue un caracter; 1 (TRUE) si ya hay un caracter listo pard ser leido por la funci6n CETC(). Ejemplo 1 : Elluiar los datos del 0 a/l0, ell modo as/llerono, entre dos PIC. VisualiUlr COli LCD los datos enuiados y los datos recibidos: In recepcioll del dnto deberti ser por illterrtlpcioll dd USART. (ver figura 10). COif/poI/elites ISIS: PIC16F876 y LM016L. illstmlIIentos: VIRTUAL TERMINAL.
1111
'include
,roSES XT,NOWDT 'use delily(clodc-4000000) 'use rs232(bilud-9fiOO , xmit"'Pln_C Il, rc_pln~c7J 'include
void main {J
{
int Villar;
while (lJ { for (valcr"O;valor<_10;valor..o-+) PU'1'C(val0r } ,
178
7. Transmision serie print! (lcdJutc , M\fenviando-tlD ", VALOR) ;
delJ y_ma(SOO) ..
Figura 9. Programa PIC_ 1 del eJemp!o 1
--- ···..· 1;;= -- -
tf'
~,
~
:S"~":::~ ..c1lT'0ISIa':r'! . ~:i ~ : ~
~-
~,-
Alphanumeric LCD
I
enviando=9
m l' .
..
Ii ... Bofl81l1!i!!i . .' . .
.. .
I
C
It
~=
I.~
r---' f-'f-'-
·· -· := -_.... _.......-
tl:u!,,_ £::::::
q,
q,-
~-. ~
,"'" .,
~~~ ~ ~
~~ ~
,•
~-
,
I
Alphanumeric LCD
recibiendo=9
Bofl8!!!S m II. ..... . .. I, ... . . 'I'
I
CC02 ~~
It
~=
-~
.
-.~~.~
Figura 10. EI ejemplo 1 linclude <16F876 . h>
IFUSES XT , NOWDT
luae delay(clock-4000000} luse r s232 (baud-9600 , xmi t -pin_ c6 , rcv-pin_c7 , bi t s-B} linclude IBYTE TRIS A-Ox85
179
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC 'BYTE PORTA - OXOS int valor ; lint_RDA RDA_ isrO v"lo~ -GETC(}
..
void /lliJin (J bi t_clellr (tRISA , OJ; lco:"'init () ,enable_interrupts (HIT_RDM ; enable_ interrupts (GLOBAL) I for ( ;1 )
I
1cd_ 90toxy (1,1) ;
print f (l cd_pute,
~recJ.biendo-'l
D
N ,
v.1)or) ;
Figura II . Program.. PIC_2 del ejemplo ,
Can el programa VIRTUAL TERMINAL (baton derecho: Hex display mode) se pueden visualizar los datos del bus serie (figura 12).
Figura 12. VIrtual
Termln~1
7.2.3 La norma RS232 La norma RS232 es la mas habitual en la comunicacion serie. Basicamente comunica un equipo terminal de datos (DTE 0 Data Termillal Equipmellt) y e1 equipo de comunicacion de datos (DCE 0 Data Commllllications Equipment). Las caracterislicas eh~ctrica s de la senal en esla norma establecen que la longitud maxima entre el DTE y el DCE no debe ser su perior a los 15 metros y la velocidad maxima de transmision es d e 20.000 bps. Los niveles J6gicos no son compatibles
180
7. Transmisi6n serie TTL, deben situarse dentro de los siguientes rangos: 1 logico entre -3V y -15V Y 0 logico entre +3V y +15V. Se utili zan conectores de 25 patillas (DB 25) 0 de 9 patillas (DB 9) siendo asignado el conector macho al DTE y el conedor hem bra al DeE. Para una comunicao6n fill! duplex desde el USART del PIC, se debe conectar un minima numero de seflales, TXD y RXD asi como 1a masa (GND ). Los PIC utiJizan senal ITL en el modulo USART por 10 que se debe utilizar un conversor de nivel a RS232, como el A1AX232.
RX
NlVElESTn.
NIVEl.ES RS232
Figura 13. Conexion baslca full duple x entre PIC y PC
En la mayana de los PC actuales, sabre todo ellos portatiles, estan desaparedendo los puertas serie. Como solud6n se pueden utilizar cables de conversion SERIEUSB que utilizan el Ulliversal Serial Port (USB), no se debe confundir con 1a utilizadon del m6dulo USB integrado en el PIC con gestion de comunicacion USB (ver la figura 14).
BUS USB DISPOSITIVO INTERFAZ SERIE·USB
BUS USB
1----'" BUS SERlE
PIC
PIC
Figura 14. Dlferencla e ntre un convertidor serle-usb y un m6dulo USB integrado
Estos cables (ver la figura 15) se hasan en integrados como el F7232BM de FrDJ chip (figura 16) (llffp:llwwwjtdichip.comIPradlictsIFT232BM.htm). En la propia Web del fahricante se pueden e ncontrar los drivers para la configuraci6n de Windows (figura 17) y los d iseiios de un sistema de conversion SERlE-USB.
181
Compilador CCCS y Simulador PROTEUS para Microcontrotadores PIC
Flgu,;, 1 S. Cable SERIE-USB
• •
Figura 16. FT231BM
' ll_
• ~-" • .-M • . . - . . ... ,001
I ·v--.........,..., , ,
_ _ /'04a.O
:~~. . . tuo .." .........
...... ·Id-· _._,"'. . . .*,.'r_ ...-.. ......... ,
.,j~.a'l""1W'I
,.~~
,5~do-
. ..r
'~f_
, ..
IIM~Sq>oI_
.~,
)-,-.--,..,..
_ .I ........ !«O
.1-'-"'_«""') .I~9~!JtP1L) ::£w _ _ (cOM!l
'4J~ · ..J
t..-do · ""....,.,..do_. <110>
Figu,;, 17. Unlversitl Seriitl Port
EI/ SIS del PROTE US proporciona un potente componente que permite la simulaci6n a traves del puerto serie: COMPIM (figura 18).
182
7. Transmislon serie
P3
_.
O ~O
Figura 18. EI componente COMPIM
Utilizando este componente no es necesario anadir al esquema del PIC un MAX232, ya que el propio componente gestiona la comunicaci6n can el puerto del Pc. Utilizando este componente podemos comunicamos con el propio PC (si tiene 2 puertos serie a 1 puerto sene y un puerto USB -utilizando el convertidor- como podemas ver en la figura 19) y manejar los datos que proceden del PIC can rualquier programa de aplicacion (Vis/lal BASIC, Visual C, etc.).
COM1 COM2
CABLE SERlE HEMBRA-HEMBRA
CABLE HEMBRA.HEMBRA + USB-SERIE
Figura 19. Lits conexlones serle-serie
° serie-c..sb 183
Compilador CCCS YSimulador PROTEUS para Mlcrocontroladores PIC La conFiguraci6n del puerto se realiza como en cualquier componente y se pueden cambiar practicamente todas las propiedades de un puerto serie: numero de puerto, velocidad, paridad, nu.mero de bits, etc. (ver la Figura 20).
,~.
VSM Mcdol
roM' ',i.oo
"""'""
PIpc.tIs-lAft" ~OotaB..:
:f-t>:joAi
"~..oo-
:Ho;loAi
•
V_OotaBb
'"'"
VIIWI P.,q
""'.
•
~,
~P"'" V_B-..dR...
~~ ~-M
'mM :H.-AI ,Ho;loAi
E..,.,..""'"i...........
E!d.do_ _ __ EdI,,
PCB~."...
Figura 20. ConRgurac:l6n COMPIM
Ejemplo 2: Ellviar los dntos de lI/1a COllversion AD al puerto serie de 1111 PC (Figu ra 21). Compol/elltes ISIS: PIC16F876, COMPJM, POTLIN Y LM016L. lllstrumell/os: DC VOLTMETERy VIRTUAL TERMiNAL. Para probar este ejemplo se pueden utilizar dos PC a un PC con das puertos serie 0 un PC can un puerto serie y un puerto USB (utilizando un cable SERlE-USB). Para observar los datos que envla el PIC se utiliza un COMPIM y tambien se puede utilizar un COMPIM para leer los datos que entran por el PC 0, en este casa, utilizar el HyperTermillal de Windows 0 cuaJquier otro programa emulador del puerto serie. Por el Virtual Termillal se put"den comprobar los datos de salida y entrada. En este casa se han conectado los dos puertos serie del PC (COMl y COM2 con un cable). Se puede utilizar el HyperTerminnl de Windows (Accesorios/Comlllliraciollt'sIHyperTerminal), configunindolo segun las siguientes figu ras: Figura 23, Figura 24, figura 25, Figura 26 y la Figura 27. En este caso se han conectado el puerto COM1 del PC y un USB configu rado en COM6.
184
,~,
L
Figura 21 . EI ejemplo 2
Figura 22. VI"u;)1 Terminal de salida ,COM I J Y entrada ICOMZI: las panuUi'ls son Idenlials
185
Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC
---
-~
...
Ii.-odo ~
CoNcUr_ CIlNl _ _ _ _ _ _ _":.,
Figura 24. La seleccion d e l pLlerto (COM I en e l PROTEUS y COM6 en el HyperTermlnal)
ell"", _ _ " " '• • • • •
• ...... 1*-
•
FigLlra 25. La configLlracion dt!'! puerto
---.-
-
.,"
,
FlgurOil 26. EI tomando An:hivofPropiedades parOil modlflear la vfsLlaliziJdon
186
1. Transmisi6n serie -------------------------------
- ....-. --
C-.'-_
.. !."'....... ~
!"""" .....-
--. .. -........--..... ---.- . -
r .[..... _ _ _ _
•
.-~ l ..... ..,......
iDI
1_. -.:,. .; ;. ,
r:
~_._ . _
' ____ ~-_ _ I&01 ..
"-"-
,1oft
...
~,
F'guril 27. Activar ~Agregar aViln(e de lineil... -
•• •
Figura 28. La simulildon entre PROTEUS y el PC utUlz;lndo el HyperTermln;l1
187
Compilador CCCS YSimutador PROTEUS para Microcontrotadores PIC
-----
'include <16F871 h> 'device adc-lO IFUSES XT,NOWDT luse delay(clock-4000000} fuse cs232(baud-9600 , xmit-pin_c6, ccv-pin_c7, bits-8, pilcity-N} bnclude void main () int16 q; noat p; setup adc_pocts (AND); setup_ildc IADe_CLOCK_INTERNAL}; lcd_ init
(J:
for (:;) { set_oldc_channel (0) i delay_ us(lO};
q .. read adc(}. p"
5.0 · q I 1024.0;
print£{lcdyutc, "\£ADC - ~41d", q}; printf(lc~Jutc, "\nVolt"ge .. tOl .2EV", p); pc1nt£("ADe - i41d ", q); printf("Voltage" IOl . 2£Vlr", p};
II Ir permite cilmbiar de 11nea.
delay_ms(lOO} ;
Figlolr.. 29. EI program.. del ejempto 2
Ejemplo 3: Elluiar 1111 data desde el PC al PIC por e/ pl/erto serie. CUQndo 10 reciba debe visualiwrfo ell 1m LCD y ellviar la palabra "recibido" af PC Emplear illterrllpcio'les (figura 31). CompollelltesISfS: PIC16F876, COMPIM Y LMD16L. 'include <16F876.h> 'FUSES XT,NOWDT 'use delay(clock-4000000) 'use rs232(baud-960Q, ~~it-pin_c6, rcv=pln_c7, bits-8, parlty=N) linclude chiJC ch; lint_cd" void serial isrll
{
ch-getch"r{J i PUts (HRecibido
188
H );
7. Transmision serie void tn
en"ble_inteccupt3 (glob"l) .. enlwle_!ntercupts (int_cd,,) ; while (1)
printElled puCe ,
~ \n\r
V"loc lc .... ,ch);
Figura 30. EI programa del ejemplo 3
n.= --- ·· ----- ---···· ':.,.~.
.
~
·
Alphanumeric LCD
_. ---
Ing ...
Uil ler
0'-
~
"I, ., . ........
'IC''''~
~
~ ~
~.-
8
"", I
.,!
-= " :::
'-.~ .
.~
•
OM
•
0.""",,0
--_.
-.-~-
Flguriil 31. Elejemplo 3
.-..
~
o E_Ifl,._"""I;.o...,..,.. .. _
!2lE«>,. ... cor _ _ ........
"---
R......... _
0
,
!II_~'OI
EJ ..ro-......,. do
_.fNI
dO __ IInN>ed>
Cl ......... <·_~"-...sOI .. 7t.t. 0~1-
____ . _.. --.I
I~II~J
Figura 32. Configuraclon del HyperTermln;!l1 para Envll'lr/Recibir
189
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
-----
•• •
•••
I~
-" =
Figura 33. Comuni(ad6n full duplex (on el PC
7.3 Puerto serie sincrono (SSP) Los dos modos de trabajo son: • Interfaz serie de perifericos (SPl): Des.'lrrollada por Motorota para la comunicacion entre microcontroladores de la misma 0 diferente familia en modo maestro-esclavo. Full-duplex . • lnterfaz Inter-Circuitos (PC): Interfazdesarrollado por Philips, con gran capacidad para comunicar microcontroladores y perifericos. Half-dllplex.
7.3.1 Interfaz Inter·Clrcuitos
WCJ
EI bus FC se basa en la comunicacion a traves de 2 hilos. Cada dispositivo conectado al bus tiene una direccion. Puede configurarse como comunicad6n de un maestro y varios esdavos 0 una configuration MlIltimaestro. En ambas configuraciones, el dispositiv~ maestro es el que tiene la iniciativa en la transferencia, decide con quien se realiza, el sentido de la misma (envio 0 recepc:i6n desde el punta de vista del maestro) y cuiindo finaliza. Cuando el maestro inicia una comunicacion, primero transmite la direcci6n del dispositivo con el wal se quiere comunicar y los escJavos comprueban si la -direction concuerda con la suya. La transmision puede
190
7. Transmision serie ser de lectma 0 escritura, el ultimo bit de la direccion 10 indica; asi el maestro estara en transmisibn y el esclavo en recepcion 0 viceversa. En cualquier caso la selial de reloj la genera el maestro.
Los dos hilos del bus Fe son dos Iineas de colector abierto: la senal de reloj SCL o pin RC3 y la Imea de datos SDA 0 pin RC4. Se deben utilizar unas resistencias extemas 0 de pull-up para asegurar un nivel alto cuando no hay dispositivos coneetados al bus. EI numero de dispositivos conectados y la longitud de conexion estan limitados par la capaddad de direccionamicnto (de 7 a 10 bits) y par la maxima carga del bus (400 pF). La velocidad maxima estandar es de hasta 100 Kbps, la rapida hasta 400 Kbps y la Alta hasta los 3.4 Mbps
-
\
,
1\
J.,[ "I" == T
~.
!•
~
1-
)'!~STE"
~ .\(l(IoJ-:
t
OC,
« • .oOC>.)':
,I
-
I
""
"
C8.!S
Figura 34. Calc:ulo del valor de R. en funcf6n de la capllcfdad y velocldad del bus ,cortesill de
Sn
La transmisi6n se inida con un bit de inicio 0 START Y termina con el bit de nllaHzacion a STOP. STARTse establece can una transici6n de alto a bajo en la linea SDA (normalmente a nivel alto) cuando la linea SCL esta a nivel alto. STOP se establece cuanda se produce una transici6n de bajo a alto en la linea SDA cuando SeL esta a nivel 31toi de esta forma los datos en la linea SDA s610 cambian en el estado bajo de la linea SeL (figura 35). START
STOP
50A
5e, 5
p CAMBia DE DATOS
Figura 35. Condiciones de III transmisl6n
191
eompilador e ees y Simulador PROTEUS para Microcontroladores PIC Al inidar la transmisi6n, el master envia la direccion del esc1avo con el que desea establecer la comunicacion. La direcci6n pllede ser de 7 0 10 bits con fonnato de byte (uno 0 dos bytes respectivamente). Tras la direecion se adjunta un bit de lectura/escritura (figura 36). DIRECCION DE 1 BITS
DlfKCl6ro de t bit, de! Esd."o
OIRECCION DE 10 BITS
FigurOi'l 36. Los formatos de direc:ci6n
Una vez el master envia la direccion (0 datos), el esdavo genera un bit de reconocimiento (ACK), si el master no reeibe este bit la comunicaci6n se interrumpe, generando la sena] de STOP. EI maestro tambien puede recibir datos, en este caso es el quien genera la senal de reconocimiento para cada byte recibido menos para el ultimo, en este caso el esclavo libera la Ifnea SDA y el master genera un STOP. Existe la posibilidad de que el master, tras una transmisi6n/recepcion, no abandone el bus y siga en comunicaci6n con el esc1avo; en esta ocasi6n genera una nueva condici6n de START, Hamada START REPETlDA (Sr), identica a la anterior pero desput's de un pulso de reeonocimiento. En los PIC de Ia garna media existen dos mOdulos que permitcn realizar una comunkad6n PC, el BSSP (Basic Sy"cilrollolls Serial Port) y el MMSP (Master Sync/ITo/lOlls Serial Port), y se diferencian en modo de trabajo maestro. EI m6dulo MSSP permile detectar condiciones de START y STOP por interrupcion. Este m6dulo puede trabajar en tres modos: • Maestro. • Esclavo con direcci6n de 7 bits. • Esc1avo con direcci6n de 10 bits. Los registros asociadas a este mOdulo son seis: SSPCON, SSPCON2, SSPADD, SSPBUF, SSPSTAT Y eI SSPSR.
192
7. Transmisi6n serie
-------------------------
Reglstro SSPSTAT (direccion RAM: 94hJ [PIC16F87x]
_-0 1SMP
-<
! eKE
.<
'-0
! DIA
.<
[s
[P
.< [RIW
.< [ UA
BII1
[
SltO
Figura
bit 7:
.<
[.F
~7.
EI reglrtro SSPSTAT
SMP: Bit de muestreo. SPI en modo maestro: I - EI data se muestrea al final de cicio. 0", El data se muestrea en el media del cicio. SPI en modo esclavo: SMP debe ponerse a '0' ruanda se trabaje en modo esclavo.
PC en modo master a esdava: 1 "" Deshabilitacion del control Slew mte para una velocidad estandar (100 kHz i 1 MHz) 0: Habilitacion del control Slew rate para alta velocidad (400 kHz)
bit 6:
eKE: Selecdon de f1anco de relaj en modo SPI. CPK - O 1 - El data se transmite en el f1anca de subida de CKS. 0 .. El data se transmite en el flanco de bajada de CKS. CKP'" 1 1 "" EI dato se transmite en el flanco de bajada de CKS. 0 .. El dato se transmite en el flanco de subida de CKS.
PC en modo master 0 esclavo: 1 = Niveles de entrada conforme espedficadones 5MBUS. 0= Niveles de entrada conforme especificaciones p.c. bit 5:
D/A : Bit de datosl direccion (solo en el modo rq. 1 "" Indica que el ultimo byte redbido 0 transmitido era un data.
a = Indica que el ultimo byte recibido 0 transmitido era lIna direction. bit 4:
P: Bit de Stop (sOlo en el modo rq. 1 - Indica que ha side detectada una condid6n de Slop. a - No se ha detectado la condicion de Slop.
193
Compitador CCCS YSimulador PROTEUS para Microcontroladores PIC
-----
bit 3:
5: Bit de Start (s610 en el modo FC). 1 - Indica que ha sido detectada una condid6n de Start.
0 - No se ha detectado 1a condid6n de Start. bit 2:
RIW: Bit de Leetural Escritura (sOlo en el modo FC). Este bit retiene 1a informacion de lectura 0 escritura despues de la ultima deteccion de direecion correcta. 5610 es valida desde la confirmacion de direccion hasta el siguiente bit de Start, Stop 0 no ACK. En PC modo esclavo: 1 "" Lectura.
0'" Escritura. En PC modo master: 1 = Transmision en progreso.
0 - Transmisi6n en no progreso. bit 1:
UA: Actualizacion de directi6n (solo en el modo FC de 10 bits). 1 '" Se necesita una actualizaci6n de direcdon en el registro SSPADD.
,
0- La direcci6n no necesita una actualizaci6n. bit 0;
BF: Bit de bllffer lIeno. Recepcion (modos SPI e r-C): 1'" Recepci6n completada, SS PBUF esta Ueno. 0'" La tecepci6n no ha finalizado, SSPBUF esta vado.
Transmisi6n: 1 .. Transmisi6n en proceso, SSPBUF IIcno.
0- Transmisi6n completa, SSPBUF vado.
Reglstro SSPCON (dlreccion RAM: 14hJ [PICI6F87xj ""'~
weol
""'~
""'~
I S$POV I sspeN I
""'~ CKP
""'~
RIW~
""'~
RIW~
I S$PMl I SS PM l I SS PM1 I SPMO
""
.
"
Fig"r .. 38. el registro SSPCON
bit 7:
weOL: Bit de detecci6n de colisi6n.
Modo master:
l - Se ha produrido una escritura en SSPBUF sin que las condidones del PC sean validas.
194
7. Transmisi6n serie 0", No hay colision. Modo Esdavo:
1 = EI registro SSPBUF ha sido escrito mientras se realizaba una transmision previa. 0- No hay colision. bit 6:
SSPOV: Bit de overflow (debe ser borrado por software).
En modo SPI: 1 - Un nuevo data se ha redbido cuando aim no se ha leido e) dato anterior almacenado en SSPBUF. EI dato del registro SSPSR se pierde y Sf' mantiene el anterior. 5610 se produce overflow en modo esclavo.
o= No hay auerj1ow. En modo PC: I '" Un nuevo byte es recibido ruando aun no se ha leido el registro SSPBUF donde se encuentra el byte anteriormente recibido.
0 - No hay overflow. bit 5:
SSPEN: Bit de habilitadon del puerto serie smCTono. En ambos modos, los pines han de ser correctamente configurados como entradas a salidas. En modo SPI: 1 - Habilitaci6n del puerto serie y configuracion de los pines SCK, SOD, SDI Y S5 como fuente del puerto.
0= Puerto serie deshabilitado y pines configurados como ElS. En modo PC: 1 = Habilitaci6n del puerto serie y configuraci6n de los pines SOA y SCL como Fuente del puerto. 0'" Puerto serie deshabilitado y pines canfigurados como E/5. bit 4:
CKP: Bit de selecd6n de la polaridad del relaj. En modo SPI: 1 - EI estado de reposo para el reloj es el nivel alto.
0 - EI estado de reposo para el relaj es el nivel bajo. En modo PC esclavo: (control de liberation de 5CK). 1 - Habilitacion del reloj.
0 - Mantiene el reloj en estado bajo.
195
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC bits 3:0
S5PM3:SSPMO: 5elecci6n del modo del modulo SSP. 0000 '" SPI, modo maestro, reloj = Fa;d4. 0001
=
SPI, modo maestro, reloj = FoscI16.
DOlO .. SPI, modo maestro, reloj = F051:/64. 0011
=
SPI, modo maestro, reloj = Salida del TMR2/2.
0100 ~ SPI, modo esclavo, reloj .. pin SCK, pin 55 habilitado. 0101 = SPI, mado esclavo, reloj = pin 5CK, pir.. 55 deshabilitado. ruede usarse como pin de E/5. 0110 " PC, modo esclavo, direcdon de 7 bits.
0111
=-
FC, modo esclavo, direcdon de 10 bits.
1000 " PC modo master, reloj"F .,.j14·(SSPADD+l)).
1011 = FC en modo maestro control ado por fimmure (esdavo inactivo). 1110 = PC en modo maestro controlado por firmware (direcci6n 7 bit con interrupcion de bit START Y STOP). 1111 = PC en modo maestro controlado par firmware (direcci6n ]0 bit can interrupci6n de bit START Y STOP). 1001, 1010, 1100, 1101 .. Reservado.
Registro SSPCON2 IdJreccion RAM: 91 hI [PIC16F87x). RIW~
GCEN
I
RIW~
ACKSTAT
I
RIW~
ACKOT
I
RIW~
ACKEN
I
RIW~
RCEN
I
RIW~
PEN
Blt7
I
R/W~
RSEN
I
RIW-O SEN
BltO
Figura 39. EI registro SSPCON2
bit 7:
GCEN: Bit de habilitacion Hamada general (salo en modo PC esclavo). I .. Habilita la interruption ruanda se redbe una lIamada general (direccion OOOOh) en el 55P5R.
o- Deshahilitado. bit 6:
ACKSTAT: Bit de estado de reconocimiento (5610 en modo PC master). En modo master transmision: 1 =No recibido ACK del esclavo. 0 .. ACK recibido del esclavo.
bilS:
196
ACKDT: Bit de data de reconocimiento (5010 en modo PC master).
7. Transmisi6n serie En modo master reeepeion: Valor que sera transmitido euando el usuario inide una secuencia de reconocimiento al final de una recepcion: I -No ACK. 0= ACK. bit 4:
ACKEN: Habilitacion secuencia de ACK (5010 en modo PC master). En modo master reeepei6n: 1 = Inicia secuencia de reconocimiento de SDA y un ACKDT. Borrado por hardware.
sa, y transmite
0= Desactivado. bit 3:
RCEN: Bit de habilitad6n de reeepdon (s610 en modo I'C master). 1-
I~eeepei on
habilitada.
0= Deshabilitada. bit 2:
PEN: Habilitati6n de la secuencia de STOP (s610 en modo PC master). I - Waa condidon de Stop en SDA y SCL Borrado por hardware.
0 - Deshabilitada. bit 1:
RSEN: Habilitacion del START repetido (solo en modo FC master).
1 = Wda la condidon de SR en SDA y SCL Borrado por hardware. 0= Deshabilitada. bit 0:
SEN; Habilitati6n del START (s610 en modo Fe master). 1 - lni
0" Deshabilitada.
EI resto de registros son: • EI registro SSPB UF (direccion Ram: 13h) es un bllffer de transmisi6n/recepci6n serie: es el registro desde el cual se leen 0 escriben los datos a transmitir. • EI registro SSP5R es un registro de desplazamiento SSP (no accesible directamente). Desplaza el dato para transmitirlo 0 recibirlo. En una transmisi6n, el dato se escribe desde el registro 5SPB UF, mientras que en una recepd6n, se carga el dato de SSPSR a SSPB UF. • EI registro SSPADD (direccion Ram: 93h) define la direcd6n del esdavo 0 los baudios de la comunicadon del master. En este registro se almacena la direction del esdavo; en el modo de 10 bits primero se debe cargar el byte alto (1111 0 A9 A80) Y despues el byte bajo (A7:AO). Otros registros relacionados can el modulo MSSP son el T RISC (direcd6n Ram: 87h) para definir RC3 y RC4 como entradas. EI PIRl/PIEl (direcciones Ram:
197
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC OCh/BCh) para la gestion de interrupciones (SSPlF/SSPIE). El PIR2IPIE2 (dire<:ciones Ram: DOh/SOh) para la gestion de la interrupcion por colisi6n del bus (BCLIFI BCLIE) Y eilNTCON (direcciones Ram: DBh/SBh/l0Bh/1SBh) para la habilitacion de las interrupciones de perifericos.
7.3.1.1 12C en C Configuracion generica del PC: /tuse 12C (opciones) Opciol!es: separadas par comas, pueden ser las siguientes: MULTCMASTER
Establece modo Multimaesrro.
MASTER
Establece modo maestro.
SLAVE
Establece modo esdavo.
SCL--pin
Especifica el pin
SOA:=pin
Espedfica el pin SOA.
AODRESS-=nn
Especifica la direcci6n en modo esclavo.
FAST
Utiliza velocidad alta.
SLOW
UtHiza velocidad baja.
RESTART_WDT
Barra el WDT mientras espera una lectura.
FORCE HW
Utiliza las funciones PC hardware.
NOFLOAT_HlGH
No permite senales flotantes.
5MBUS
Utiliza el bus en formato SM8US.
STREAM=id
Asocia un identificar slream .
seL.
Esta directiva (pUSE 12C) tiene efecto sabre las funciones 12C_START, I2C_STOP, 12C_READ, 12C_WRITE e 12C_POLL. Se utilizan runciones software a menos que se especifique FORCE_HW. EI modo esclavo 5610 puede seT usado con el mOdulo ffsico SSP. luse
l2C(rtJ~ster,
Sdii-PIN_BO, scl .. PIN_Bl}
luse I2C(sliive, sda_PlN_C4, scl-PIN_<=3, address-OxiiO, FORCE_HW) 'use l2C(m8stec, scl-PlN_BO, sda-PIN_Bl,
Las runciones asociadas son • 12C_ WRITE(). I2C_STARTO.
198
£ast-4~ODOO)
7. Transmisi6n serie 12C_READ().
12C_STOPO. 12C-,OLl() . • 12C_ISR_STATE().
12C_S laveAddr(). 12C_START(); En modo master, esta funcion inidaliza la transmision. Despues de la condidon de Start, el reloj es puesta a nivel bajo hasta que sc escribe con la fundon 12C_WRITE(). Si se Uama a otra funcion 12C_START antes de un 12C_STOP se esta utilizando un START repctido (Sr). Esta mndon dependera de la respuesta del esdavo. i2c_suct () ..
IIInicializacian de ia
12,,_ ",d te (Gx",O) ..
/IDireccion del esclavo
i2c_ ",ri te (address) ,-
//Datos a esclsvo
i2c_st<1rt () ..
//Restllfct
j
2c_",d te (Oxllfl J ..
dilta-12c_rellfd(O) .. 12r;_stop() ..
transml$l~n
//C",mbio a lectura
/IDaeos del esc1l!fvo a-1 master. //FinIlf1izllfcion de la- trllfnsmision
12C_STOP 0;
FinaJiza la transmisiOn. 12C_WRlTE(dato); Data es un entero de 8 bits que envia por el bus. En modo master, esta funcion genera la senal de reloj que marca la velocidad de transmisi6n del data; en modo esdavo espera la senal de reloj que genere el maestro. Devuelve el bit de reconocimiento ACK que envia el receptor ruanda la transmisian ha terminado: 0 indica ACK 1 indica un NO ACK Y un 2 indica una colision en modo multimaster. El bit de menor pesor (Isb) del primer data transmitido tras un START indica el sentido de la comunicadon (si el bit es "0", la informacion se transmitira de maestro a esclavo).
date = 12C_READ([ACKl); Data es un entero de 8 bits lefdo del bus. En modo master, esta fu ncion genera la scnal de reloj; en modo esclavo espera la senal de reloj. No hay timeout por 10 que se utiliza junto can 12C_POLL para prevenir bloqueos. Opcionalmente se puede incluir un ACK donde 1 indica un ACK y un 0 indica un NO ACK. Se puede borrar el Watchdog mientTas se espera a leer el dato, para eUo se debe incluir la opd6n RESTART_WDT en la directiva #use i2cO.
199
Compilador CCCS y Simulador PROTEUS para Microconlroladores PIC valor = 12C_POLL(); Se utiliza sOia si el PIC tiene m6dulo SSP. Devuelve un TRUE (1) si se ha recibido el data en el buffer y un FALSE (0) si no se ha recibido. Cuando devuelve un TRUE, la funci6n I1C_READO guarda el data leido. 12C_SlaveAddr(intB adr); Se especifica la direcci6n del dispositivo en modo esclavo. estado= 12C_ISR_STATEO; Se utiliza sOlo si el PIC bene mOdulo SSP. Devuelve el estado del bus en modo esclava despues de una interrupci6n. Estado es un entero de 8 bits: 0>= Indica direcci6n coincidente con un R/W a ce ra.
1-Ox7F - EI master ha escrito lm data, se debe utilizar J2C_READ(J. OxBO = Indica direccion coincidente can un WRITE().
R/W a uno, responder con 12C_
Ox81-OxFF .. Transmisi6n termimda y reconocida, se responde con 12CWRlTE(). Ejemplo 4: Guardar y leer datos en las 10 prill/eras posiciolles de memoria de JIlin EE-
PROM Pc. Represelltar los va/ores escritos y leidos CI1 UII display LCD (figura 40). COI/Ipo"et/les {SIS: PIC16F877, M24512, RES Y LM016L.ll1strumellfos: 12C DEBUGGER.
12C
-
-
.n v i~ndo'"8
rtGibil'ndo=6
Figur~
200
40. EI ejemplo 4
7. TransmiSion serie La EEPROM PC 24512 tiene un byte de control (figura 41) donde la parte alta tiene un valor fijo (Ah) y la parte haja consta de la direcdon impuesta en sus patillas ( E2:EO) y ei bit de iectura/escritura, de tal forma que si se fijan las entradas de direcd6n amasa, el byte de control puede tener los vaiores AOh para escrihlra y All;, pa ra lectura. D.... 'U Typo ,a.nI" ...
00!0
,
~
'",
Clllp !Mblt ",ad, •••
,
"',
'" "
M
~
"'
"
"
.. "'
~,
FlgUfil 41. Byte de control del 24512 [cortesia de STJ
EI formato de escritura es el mostrado en la figura 42, donde !ras un START se escribe la palabra de control para selecdonar el dispositivo y el modo de trabajo, dos bytes para ta dirccd6n de escritura en ei dispositiv~ y el dato a escribir.
,\0
lL___________ O\CK
BYTE"'TE
[[
.
"Ci<
""CK
"CK
.D~; HL: [1.I[i~~~II[i~H?~II[ : ?":-:;: 1 0
I< ~
~~
. "~
Flgur.ll42. EI formato de escrltura (cortesla de STI
A continuacion se describe una fundon para la escritura en la EEPROM, que debe ser Hamada desde el programa principal donde se Ie pasa 1a direccion a escribir y el data.
sbort int status;
12c_stact() ;
//Inlclaliza ls transmisi6n
i 2c_ "'cite (OxAO) ;
//Escribe la palaora de control (direcci6n IIOb ~ 0 para escritura)
12c_ wei te (sddress»8) ;
//Parte alta de la dlrecci6n a escrlbic en ls
/IEEPROM
12c_"'rlte (d
sts tus-i2c_ write (Oxi'JOI ;
//Pacte bajs de 1<1 direcc10n a e!!cdbir en llf IIEEPII.DM //Dato a escribic //Finaliz
201
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC while(status*-l)
Ilsi es 1
e!f~rar I!
que responda el esclilvo
i2c_ !ftart () ; status-i2c_ ....Ii te (Ol<" 0) ,.
Figur. 41. Fund6n de eserftur. en I. EEPROM
EI formate> de le<::tura puede ser de cuatro formas: le<::tura de la direcci6n actual en el bus, lectura de una direcci6n cuaiquiera, lectura secuencial a partir de la direcci6n actual y lectura secuencial a partir de una direccion cualquiera. La forma mas normal es la de leer una direccion cualquiera (6gura 44), donde el proceso es muy similar al de escritura y tras una reinicializaci6n hay dos cidos donde se indica el modo de lectura y se envia el dato. En este caso, el master debe devolver 1;'n NO ACK. At..:
-'CI(
"CK
..,CK
NO,I..CI{
rr-11~~:"i'''''''~:111I i~:'~ III i~~:,~;"dll i+>~ :'1 111 ?:·~~T: 110
RA)';OQM ADQRESS
.
"'0
~
~
R'N
~
RfJ.l
"
Figura 44. Leetura de una dln:ecl6n eualqulera (eortesia de STI
A continuaci6n se describe una funci6n para la lectura de la EEPROM, que debe ser Hamada desde el programa principal donde se Ie pasa la d ireccion a leer. BYTE reiJd_el
i2c_wri te (address»B);
//Inicializl! 1a tr.JnsmisiOn I/Escri.be 1a pa1abra de cont1:o1 (dlreccidn Oh //+ 0 para escrltura) //Parte alta de Ia direccidn a escribfr en II! //EEPROM
I/Partfill baja de Ia dlrecc1dn .. escrlbir ..n 1" //EEPROM
i2c_!ftaIt
/IReini.cio /IEscribe 1a pa1abra de control /1+ 1 para lectu~a)
(J;
i2c_ wd te (Ol
I/lectu~a
del data
// Fina1izaci6n'de 1a tUlnsmfsi.6n.
return (data);
Flgur.,. 45. Funcl6n de Iect:ura de la EEPROM
202
(di~eccidn
Oh
------------------------
7. TransmlslOn serie
Para la aplicacion del ejemplo se utilizan estas funciones en el programa principal. #include <16F877 . h> #fuaes X'l' ,NOWDT, NOPROT£CT, NDLVP lus~
deley(clack-4000000}
luse 12c (Master, sda-PH'_ C4, scl=PIN_ C3)
//Confiqucac16n J2C
'include
Idefine £EPROM_ADDRESS long inc
void vrite_ext_eepnm(long int addcess, BYTE data) f//ineluir 1.1 funeion explicada anteciocmente} ~
BYTE cead_ eKt_eep r omflong .tnt address} (Ilincluir 111 funci6n expliCllda IInteriormente) (vold trl6ln()
inca
{
valor-O, data;
EEPROM_ADDRESS address;; lcd_ini t (};
foc
(addcess-O ; .. ddresa<-9;addresa++)
WRJTE_EXT_EEPROMflJddr~.!Js,
valor);
led_gotoxy (l, 1) : print!llcdyutc,
Henviando·%lD" , valor};
delay_ rns (S OD) ; valoc+-+ ;
foe (addcess-O ;address<-9 ;address++) dato-READ_EXT_EEPROM( address); lcd_ gotoxy (l , 2} .printf(lcd""putc , "recibienda-IID" ,data); delay_rns (SOO};
FJgur. 46. EI pr09r._ deJ ejemplo.
En el 12C debugger se pueden seguir las transicianes del bus. En la figura 47 se muestra una operacion de lectura tal como se ha explicado anteriormente. La S significa START, la A es recanocimiento (ACK), la Sr es START repetido, la N es NO ACK Y la P indica STOP (campara ria con la figura 44, en este caso Ia direcci6n es Olh y eI data es Olh).
203
Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC
·• · ••• ·• ·•
·· '_12' · · • ·· .." , ' _12' ·· •'_12''"'" ·· .ll,.. • .....• ·· C_'H
' _In
• . u.
C.l"
•. u.
00'
c. l~' Sou.
-•
~,
'_l.n
•
C_02 •
J
Fig ura 47. La operaclon de led",a con el 12C debugger
Ejemplo 5: Leer la temperatura y lIora de lectura y guardar los datos ell ulla EEPROM; lIti/aar IIIl sensor de temperatllra 12C (D51621), /lTI reloj ell liempo real12e (051307) y /Ilia EEPROM serie 12C (M24512). La lectlira 51' realizara ell jUl/cioll de IHla ardell dada por 1'1 puerto serie; call otm ardell Sf viSllaliznrall los primeros datos de la EEPROM ell 1111 lIIollitor del pllerto serie (figura 48). COli/poI/elites ISIS: P1C16F877, M24SI2, RES, COMPIM, D51621, D51307 Y LM016L.IlIstrumel//os: 12C DEBUGGER.
oc me
-
-n0::
.'J'l1~ .' '~ ~
I2C
E~rom
w
' ''-
..-
I2C SENSORTEM
.
,"::""
Fig",a 48, EI ejemplo 5
Para facilitar el desarrollo del programa se van ha crear 3 ficheros driver para cada uno de los perifericos. Para la EEPROM serie 12C M24512 se util izaran los algorit-
204
7. Transmisi6n serie mos descritos en el ejemplo anterior (figura 49). La direcci6n asignada en el esquema es 1a OxOO.
short int sratus : i2c_start () ,. i2c_ "ri te (OxaO) ; 12c_ ",rite (address»8);
i2c_ "'rite (address) : i2c_wnte (data); i2c_4tOP() ;
12c_start():
st"tus- i2c_",rltt;> (OxaO); while/status-l} 12c_ starr (!; stll tus - 12c_ wri te (Ox"O) :
BYTE read_ext_eeprO/Illlong int "ddress)
I
BYTE dilta :
i2c_st"rt () ; i2c_wei te (OxaO) :
i2c_",rite (lIddress»8) : 12c_ ",rite (address);
1Zc_ start(); i2c_ wei te (Oxa1) ; dat,,-i2c_read(0) ,.
:i2c_stap();
return (d"til);
Figura 49. Flche ro EEPROM_24512.C
Para el reloj en tiempo real 051307 se necesitan conacer sus caracterfsticas y escribir el driver. EI 051307 suministra segundos, minutos, horas, dia, mes y aiio en tiempo real (mediante una bateria y un cristal de cuarzo exterior permite un funcionamiento independiente del sistema). Posee una serie de registTos donde aparecen los datos necesarios (figura 50), los cuales se suministran en c6digo BCD con el formato indicado en la parte derecha de la figura. En este ejemplo 5010 se leeran los segundos, mmutos y horas. Para la escritura y lectura del integrado, el fabricante recomienda los ciclos mdicados en 1a figura 51. Podemos observar que el cicio de escritura se mica can la
205
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC palabra OxDO y la de lectura con OxDl. En el ddo de escritura, el segundo byte es puntero que debe indicar la direcci6n de inicio (en este caso 0). En el cielo de lectura se realizara la lectura de los tres primeras direcciones de la memoria del 051307 (los segundos, minutos y horas), el ultimo byte debe indicar un NACK al master. Tan s610 queda convertir 105 bytes en BCD a binario. EI fichero se muestra en la figura 52. lm
- ,,- .-.,,-: . -.._.
I ~
~
•
I~ ~,.",
•
"H
"'" ""
DS1307 ADDRESS MAP
••
.~
--
..I-'
:,;g
,
.' "
, 10&.
-
••
• I . 1··1.
DS1 307 TIMEKEEPER REGISTERS
Figura SO. Reglstros con dlrecdones '1 formatOI fcorteslil de Oa"..s $1114:.1
. ~ ~
_1.-
~,
1QO;()ooOI.~
_ "01'
~ _ fIf"-'"
000 OIM.CTIOIO lit.
J
- - - 'f
1s t 1101000 ! 1
._....
I
A
_ ..·00
.~I'>,..
<-.. .
~ !>
1 A IxxxxlOln I A IXXXXXKlOC I A Ixx:ooocxx I A I p I
J)(lO(XXXJI;
I
,••
Ii .. . 1IO..CMt:o , ."''' • ~;::r~t'fPIASI.lIO, • • ~tt IS .... _~ .. , , - ;
•
_.D'~
Figur.. 5 t. Cicio de escrlturil '1 fedu, .. (cortes'" de O,,".s $mc.1 int BCDaBIN(int bedJ int
r
//Conve ;csi6t1 de BCD a Bin .. do
v~rill;
varia - bed; varia :>:>- 1;
varia , .. Ox78; return(varia + (vari".»
206
2J + (bed, OxO!));
I
7. Transmisi6n serie vold
tlempo(byte ..hor, byte ulin, byte .. sec) (
i2c_start(J; i2c_"'rite (OxDO) ..
IIEscrltura IICOdiqo de eacritura
i2c_ wdte (0;0,(10) :
IIPuntero a 1a pr1mera direccidn
12c_stilrt II:
IILectura
i2c_"dte{OxDIJ ..
I/C6digo de 1ectura
s .. c - BCD4BIN(12c_read() .. Ox7f);
/ILeetura de loa 7 bit de los sequnt;los
min - BCDaBIN(i2c_ read(} .. Ox7t):
//Lectura de los 7 bit de los minutos
hor
IILectur
- BCDaBIN(12c_read(0}.Ox3f);
i2c_stop() ..
Figura 52. FlcMto RTC_DStJ07.C
EI termometro digital y termostato 12C 051621 perrnite medir temperaturas entre -55 "C Y 125 "c. El valor de temperatu.ra se suministra en dos bytes, el byte alto es el valor entero can resolucion de 1 "C Y el segundo byte es el valor decimal can resolucion de 0.5 "C (figura 53).
FigilriR SJ. Form.lo de loll lemp8atura Icortesl. de Dalla.. Smc.,
La direccion asignada en el esquema es la OxOl. Tiene un registro de control para el funcionamiento como termostato queen esta aplicacion no se utiliza. La palabra de control para la lectura a escritura es l001A3A2A1-R/W (figu.ra 55). Los comandos de control pueden ser, entres otros, OxAA para lectura de la temperatura, OxEE para el inicio de la conversion. Con estos datos se puede escribir el fichero para el control del 051621 (figura 54) . void inlt_temp{int address}
(
i2c_start () ..
12c_"'rlt6(Ox901 (address«l)}; IIGenera primer byte (lOOlA2AIAOW) i2c_write(Oxee) .. /Ilnici.a conversion
i2c_stop() " noat r ..ad_full_templint addressl (
signed int datah; Int d"tal; noat tur,,:
207
Compilador CCCS y Simulador PROTEUS para Microconlroladores PIC i2c_start (J; 12c_ ",rite(Ox90 I (address«l)) ; /IGenera primer byte (1001A2AIAO-W) 12c_ ",Ii te (Oxaa) ;
/ILeer temperatura
i2c_start();
I (address«l)); /IGenera prlmf!cr byte (lOOlA2AIAO-R) datah-i2c_cead(!; I/Lectura parte dlta
i2c_ "'rl ce (Ox9l
datal-i2c_ cead(DI ;
I/Lectura parte bdj .. y HACK
12c_stopO ;
tura"'datah ;
/IConversion a flotante
i f (d
return (turd) ;
Figura 54. Flchero TEMP_DS16Z1.C
_. ..--. _..._-
~~i-f*
-
I '
.....
" '
...-.- ":If'
_
.."
'I
I
III.:!' . .
JU1.J'1.I1JU1fl:u1.f'
~ _ I '
.-
,I
oo
_ --.--.. .-.. . . -., .... .-..mt_""
, ...,
-..gr
.....
• r-, ,
-
'!:l!'
\ 1
lfU1J1Jl.nJ1JU1nnnnIUln..'lJ1.."11UU1.J1IlJl.V1IULI"lJ"U
......:
__
-
OIl. .' ~
~,~-~_~.--_I...,
........,..
-
'!:l!'
....- •.n..n.n n n.nnnn..nnIlIUl.fUVU1f1.J1JUUUUUUUUlJVU1...~
-
t
" I
--
,t,
,t I '
"
,t
_.-._-"" ......,t .-...
~---uu1.I1
,
~
1
1
!ICl '" J1.I1"rtn..IlrUl..~ ~ , if t
I
"
. 1
L---..,-
, I•
-
't1:'
',V;;_1 "
I
.- '=" ."""
Figura 55. Prolocolo de lectura,lescrilura Icortesia de Dallas Smc.1
Puesto que la temperatura es un FLOAT no se puede guardar este data directamente en la EEPROM segUn las funciones dadasen el Fichera EEPROM_24512.C; por 10 tanto, se
208
7. Transmisi6n serie pllede utilizar el fichero surninistrado por CCS C Ilamado FLOATEE.C para guardar y leer datos tipo FLOAT en una EEPROM. EI fichero se muestra en la figura 56. int
i;
nOgt R£AD_FLOAT_EXT_EEPROM(long inc nl
(
int i; flog t datil ;
0 ; 1 < 4 ; i++1 >((intS oJ ('ddta) + i)
for (1 -
return(data);
Figura 56. Fichero FLOATEE.C
Una vez definidos los ficheros para el manejo de los perilericos se pllede escribir el programa principal. EI programa se comunica con un terminal del puerto serie de tal forma que mediante un menu se pueden elegiT dos opdones: Con 1 se (nida la lectura de temperatura y tiempo para almacenarlo en la EEPROM y can 2 se visualiza, a tTaves del puerto serie, los prirneros datos de la EEPROM (los 4 bytes del FLOAT de la temperatura y los 3 bytes del tiempo -seg., min. y horas-). La comunicadon serie se realiza por interrupcion. #include Ifuses XT , NOW;)T , NOPROT£C'I' ,NOLVP
'lJse delay(clock-4000000) luse rs232 fbaud-9600 , xml t-pln_eli ,
rev-pin _ e7 , bi ts-8 , pari ty-NJ
luse i2e (Master, sda-PIN_ C4, sel-PIN_ C3)
lincIucM linelude
//Ficheros driver de los perifericos
linclude ILnclude linclude
int aat_in , ent , hr , min , see ; intI ti address-a .int dat_serie(7];
noat date ; //Inter r llpeion para e1 puerto se r ie
209
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
IILee el puerto ;'Iecle
dllt_in-getc(J ;
printt(-\r-, ; '51 es "2-;'Ie vi.;'IulllizlIn 10;'1 prJ._ro;'l dlitOB de JIll EEPROM
if (d4t_i.n--'2"
for(cnt-O;cnt<-6;cnt++}
foc(cnt-O;cnt<-6;cnt+*}
IILectucli de los 7 pcimecos bytes de III EEPROtf
IlvisulIlizlJ los 1 prJ_mecos bytes de III EEPROM
void III/Iin {J lCd_lnit (); enllble_intercupt;'l {in t_ rdll} ; enllble_inteccupts (globlll}; lIddcess-O; 1 PIUli leer datos\c·';
printf(~PulsllC
IIHenu PlIrli el terminal serie
pc1ntf("PulllllC 2 PlICli VillUlllizlIc dlltos\c·); ",hile(l) ( 1/51 es -1· lie lnlcill 1" lectuc" y gCllblldo en III EEPROM
it(d4t_ln--'l'l lnlt_telllp(OxOl};
IllniciltlizlI el D51621
de111y_1IIIf (l00, ;
tiempo (he, lllin, secl ;
IILee tit!mpO del D51301
d"to - re"d_lull_telllp(OxOl/;
IILee temperatura del 05162J
WRITE_FLCA'I'_EXT_EEPROHI"ddcesS,d8to);
I/Guarda f byuB del FLOAT
lIddnus-liddress+f; WRITE_EXT_EEPROH(lIddreS!lH, hcl;
IIGuaeda byt. de hoc"
WRITE_EXT_EEPROM (lIddrellll H ,min) ;
IIGuarda byte de minuto
WRITE_ EXT_EEPRC»I (.ddrell;'l++, sec) ;
IIGultrdll byte de segundo
lcd_gotoxy (l,
1) ;
printltlcd_putC,"Temp-t4.1f C\n",ddtO}; pr intf (1cd.JJutc, "'Zu: t2u:
210
~2u",
/IVlsullliz" JIll tempec"tur"
he ,.,In, sec) ;
I/VJ.SU811zlJ 1" hoe"
7. Transmision serie i t (address-Oxl l l l ) address-O ;
IICuanda se tecmina 1a EEFROM vue1ve l/a1 princip ia .
I
I )
Figura 57. Programa principal del eJemplo 5
Se puede utiliza el HyperTerminal para comunicarse con el PIC. La configuraci6n se muestra en la figura 58; £01 resultado se muestra en la figura 59.
j_~OI
~
ErMaI In de Ii~ eon lot a~~ de linea
o Eco de lot .,..adel"e#O"j", ~ Releodo de liroe« 0
o AI_ASCII
El
A!II~ SYfIrICfI de
linea .. INI de CIda li nea ,eo;:bd,o
o lrierp"el. caract_ rer:::Odos comoASOI de 7 til qj iW_ nneM
I "- II ""'"'" I Figura 58. Conngur"cion del HyperYermlnal
,.,. ~ ~
..
, . 18
~ " ~ ~
Figura 59. Pantalla de coml.lnicacion
211
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC En el comanda DEBUG del PROTEUS se pued e visualizar la EE PROM serie med iante el camanda I2C MEMOR Y INTERNAL M EM ORY (figura 60).
. . . . .. . . .. . .. . .. ... .. ... .. . .. . . .. . .. . .. . . . .. .. .. .. . . . .. .. .. .. .. . ..... ...... ... ... ... .. ...... ...... . ...... ...... ...... ... ... ... ... ..
. ..... . .. ,, ,, , no, " ",, ,, ,, ,, , no, no", , ,, ,, ....•......•.... · .•......•.. . " " " " • , , , , • ......... .... no no no "",• ", ", no ", "",• ", ", " no" " no", "",• ", · .. s ...... s ..... no " " " , , , , ., ........... ..... no "• " '""u, ",• " " " no", "• no"u• ",• " no" "" no", "• ................ no ", ",• '"• • u no", ",• no", ",• , ,• " no", . ............... no ........... ... " " " • , , .oc, ",• no" "" '"", "", no", ", " " " no", "•, no", ", " ................ ............. no " ",• , , " no" "" no" • '"• • " no" "" no", " ................ • , , ................ no, " " " " " • , ... ........... ... ........... ""• uo ", " no", "", no" "",• '" "• u no, "u,• '", "" no, ............ DUO , "",• '" "• u no " no", "" uo, ",• no " no", "" ................ ............ ", , " , ",• ................ no, ................ DUD ""• no, "",• no, , " no ""• no", "",• no, , " " , , ................ " no ", '", ",• '" • ", " ................ · ... . ... . ... .. . . no, " no, ", , ,• " " ................ no no no, ", " " , ",• • , ", u" no ", u",• no ", " " "u• no, "u, no", "• " " ........... u" ........... ,• '" no " no", "",• '"", ", '", , " ", "", no", ", '", ............... ........... " ", ",• '" ............ no " m "• m m m" m" m" " "" ... '" .. .. . ... ... ... ........ m " m " ................. ............. m ...'" m '" ...mm '"mm ... m m '"... . ... ........... ........... .... '" ... ... ... m ... '" '" '" :H '" '" '" '" :H '" '" ... '" '" '" . ......•....•••• '" '" ... m m ·.. . . ......... .. ... :H as :n m '" m m ................ m '" '" m :H m '" '" '" '" '" '" ................ .. .............. '" '" '" '" ................ ... m '" '" '" '" '" '" '" '" '" '" '" " . ............. ... '" '" '" ............ ... '" :" "'" '"... '" '" '" :ss'" m'" '"'" ... mm ...................... • 0000 0010 0020
OOo)O
00·0 ,~,
00'0 OOolO
00&0 gOo'O
00 ... 0 DOBO
0
0
0
0
0
0
0
0
0
0
0
0
0
0000
ODED .~.
01 00
0110
OliO
0
0
0
0
0150
OliO
DLTD 01~0
0 0
0
0
0
0 0
0
0
0
0
0
0
01'0
0
0
0
0
0 0
0
H
0 0
0
0
0 0
0
0
0
H
0
0
0
0
0
0
0
0
0
0
0 0
0
0
0
H
H
0
...... ... ... ... ...... ... ... ...... ... ... ... ...... ...... ......... ...... ... ......... ...... ......... ...... ...... ...... ...... ......... ......... ......... ...... ......... ...... ...... ...... ....... ......... ... ... ...... ...... ...... ... ...... ...... ... ......... ... ... ... ... ... ....... ... ... ... ... ...... : S5
1$S
l~S
BS
Figura 60. Memoria intern.. de la EEPROM 12C
212
..... $ . . . . . . , •••
8. Gama Alia - PIC18
Capitulo 8 Gama Alta - PIC18 8.1 Introduccion En los uitirnos anos, Microchip ha Ianzado varias garnas d e PIC con elevadas prestaeones, los PIC1S, los PIC24 Y los dsPIC Con la gama alta (PICI 8), Microchip mantiene la arquitectura basica que tan buenos resultados ha obtenido con 1a garna baja y media y, ademas, ~uce las limitaciones de estas dos ultimas. Los PICIS tienen una arquitectura RiSe avanzada Harvard con 16 bits de bus de programa y 8 bits de bus de datos (figura 1). 16 ~~,
,
'A~
8
PIC18
R, .
f
Rise CPU
f
'!A,iu:-:;
,H'.TA 4KS)
Figl.lrit 1. Arqllitectl.lra PICla
La memoria de programa aumenta hasta 1 MWord (en realidad se manejan hasta 64 Kbytes pero Hegan hasta los 2 Mbytes can memoria external y desaparece la paginaci6n. La memoria de datos RAM puede !legar hasta 16 x 256 (4 KBytes) y hasta tos 1 Kbytes de EEPROM.
La pita aumenta hasta 31 nivetes. Lnduyen tres punteros FSR que permiten direccionar la memoria de datos de forma indirecta y sin bancos. EI juego de instrucciones aumenta hasta las 75 instmcciones. Lntroduce un multiplkador hardware 8x8. La frecuencia maxima de reloj es de 40 MHZ Y la veloddad de procesador Hega a los 10 MfPS con oscilador de 10 MHz. Induye perifericos de comunicacion avanzados (CAN y USB). Can la filosoHa tradicional de Microchip, los PICl8 son compatibles con los PIC16CXX y PIC17CXX. Ademas ha desarrollado un compilador C espedfico para esta gama alta, el C1S.
213
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
, 1'-"-'"
1~"r...dOa "W.IIt~ .. ~d ...
., w••• 1It
ru. ('\HtT.O!>'l). ~1""'ion.l)'
,
,
OoIIord .... I<1o •• lit pu. (PlI IIT.OST).
.. 010 I...... Ihtbordon>IrB' . lit Plio ( ,lIIIT.OST).
..1101 ...... DftbordO",IrB' Bd. Plio (PWIIT.OS'r).
l ~~~R C.prioBo l).
I"'N
,
~
1....... rri6a RES!'.T.
. n._.
Itf..slT.
I""
1'"'' 1 1 ,~
1'"
,~
I~
.,
l ~.~~It (.,..,IoDol).
l ~~TRI.,..,iMO').
I'~
I"'N
1.,,'
I'~
1'"
I '~
1
,~
I~
it
,
~-i".'"~" 1'" .
I 7S(1U UI.,
,
I" I"
,, ,,
, .
.....,
,
....
,,,
", "
"
"
"
"
,
. "".,
,,, " "
,
Figura 2. Caraderfrtlcasde PIC18F2420, PIC18F2520, PICI8F4420 '1 PICI8F4520
8.2 Organizacion de la memoria El rIC18F4520 dispone de las siguientes memorias: • Memoria de programa: memoria FLASH intema de 32.768 bytes: Almacena inSITucciones y constantes/datos. Puede ser escrila/lefda mediante un programador extemo 0 durante la ejecucion del programa mediante unos punteros . • Memoria RAM de datos: memoria SRAM intema de 1.536 bytes en la que estan incluidos los registros de funcion especial: Almacena datos de forma temporal durante la ejecud6n del programa. Puede ser escrita/leida en tiempo de ejecucion mediante diversas instrucciones.
214
---
8. Garna Alta - PIC18
Memoria EEPROM d e da los: memoria no voJatil de 256 bytes. Almacena datos que se deben canservar aun en ausencia de tension de alimentation. Puede ser escrita/lefda en tiempo de ejecution a traves de registros. Pila: bloque de 31 palabras de 21 bits. • Almacena la direccion de 1a instruccion que debe serejecutada despues de una interrupci6n 0 subrutina. Mem oria d e configuracion: memoria en la que se induyen los bits de configuraci6n (12 bytes de memoria flnsh) y los registros de identificaci6n (2 bytes de memoria de sOIa lectura).
8.2.1 Arqultectura HARDVARD EI PIC18F4520 dispone de buses diferentes para el acceso a la memoria de prograrna y a la memoria de datos (arquitectura Harvard}: • Bus de la memoria de programa: 21lineas de direction. 16/81meas de datos (16lineas para instrucdones/B lineas para datos). • Bus de la memoria de datos: 12 !ineas de direcci6n. 8 lineas de datos. Esto permite acceder simultaneamente a la memoria de programa y a la memoria de datos. Es decir, se puede ejecutar una instruccion (10 que por 10 general requiere acceso a la memoria de datos) mientras se lee de la memoria de programa la siguiente instruccion (proceso pipeline).
8.2.2 Memoria de Programa EI PIC18F4520 dispone de una memoria de programa de 32.768 bytes (OOOOH-7FFFH) (figura 3). Las instrucciones ocupan 2 bytes (excepto las instrucciones CALL, MOVFF, GOTO Y LSFR que ocupan 4). Por 10 tanto, la memoria de programa puede almacenar hasta 16.384 instrucaones. Primero se almacena la parte baja de la instruccion y luego la parte alta (para las instrucciones de 4 bytes primero los bytes menos significativos y luego los mas significativos). Las instrucciones siempre empiezan en direcciones pares. La operaci6n de lectura en la posicion de memoria por encima de 7FFF H da '0' como resultado (equiva lente a 1a instrucci6n NOP).
215
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC Direcciones especiales de la memoria de programa: • Vectorizaci6n del R.eset es OOOOH. • Vectorizaci6n de las interrupciones de alta prioridad es la OOOSH. • Vectorizacion de las interrupciones de baja prioridad es la 0018H.
[
PC<2D:O:>
J}
L
.... 21,,
II
Niftll6t1l1ll!
NiYel31 dill pill
....'"" •
L~tomo'O·
1
Figura 3 , Memoria de Program"
La memoria de programa puede ser leida, borrada y escrita durante la ejecuci6n del pragrama. La operaci6n que se utiliza normalmente en tiempo de ejecuci6n es la de lectura de tablas 0 datos almacenados en memoria de programa.
8.2.3 Contador de Programa EI PC (contador de programa) tiene 21 bits (PCU, PCH y PCL). EI bitmenos significativo del PC apunta a BYTEs, no a WORDs, por 10 que es "0". EI PC se incrementa de dos en dos. Se dispone de los correspondientes registros auxiliares PCLATU y PCLATH para actuar de forma combinada can e1 PC cuanda este se escribe 0 se lee.
216
8. Gama Alia - PIC18
--
• pev: parte superior del PC, registro no directamente accesible; las operaciones de lectura/escritura sobre este registro se hacen a traves del registro PCLATU. peR parte alta del PC, registro no directamente accesible; las operaciones de lectura/escritura sabre este registro se haeen a traves del registro PCLATH. peL: parte baja del PC, registro directamente accesible. Una operadon de lecrur;] sabre peL provoca que los valores de peu y PCH pasen a los registros PCLATU y PCLATH, respectivamente. Y una operaci6n de escritura sabre peL provoca que los valores de PCLATU y PCLATH pasen a peu y PCH, respectivamente. El peL siempre tiene el bit menos significa ti v~ a '0' debido a que las instrucciones siempre empiezan en direcciones pares.
8.2.4 Memoria de Conflguraclon Se trata de un bloque de memoria situado a partir de la posicion 30000H de la memoria de programa (mas alla de la zona de memoria de programa de usuario). En esta memoria de configurad6n se induyen: Bils de configuracion: contenidos en 12 bytes de memoria fiash permiten la configurad6n de algunas opdones del PIC como: Opdones del oscilador. Opdones de reset. Opciones del watchdog. Opciones de la drcuiteria de depuraci6n y programaci6n. Opciones de protecd6n contra escritura de la memoria de programa y de la memoria EEPROM de datos. Estos bits se configuran generalmen te d\lrante la programaci6n C, a\mque tambien pueden ser leidos y modificados durante la ejecuci6n del programa . • Registros de identificaci6n: se trata de dos registros situados en las direcciones 3FFFFEH y 3FFFFFH que contienen informaci6n del modelo y revision del dispositivo. Son registros de 5610 ledura y no pueden ser modificados por el usuario.
8.2.5 Pila La Pila es un bloque de memoria RAM independiente. de 31 palabras de 21 bits y un puntero de 5 bits, que sirve para almacenar temporalmente e] valor del PC ruando se produce una lIamada a una subrutina 0 interrupci6n. EI "Top O/Stack" es accesible. se pued.e leer y escribir (sera conveniente quitar previamente las interrupdones). El punteTo de pila (contenido en el regisITo STKPTR) es un contador de 5 bits que indica la posicion actual del final de pila. El contenido del final de pHa es accesible mediante los registros TOSU, TOSH, TOSL.
217
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
------
Cuando se procesa una interrupci6n 0 se ejecutan las instrucciones CALL 0 RCALL (el PC esta apuntando a la siguiente instrucci6n) se incrementa el STKPTR y se almacena el \'alor del PC en el final de pila. Cuando se ejecutan las instrucciones RETURN, RETLW 0 RETF1E se copia en el PC el valor almacenado en la cima de pila y se decrementa el STKPTR.
8.2.6 Memoria de Datos Los PIClS tienen hasta un total de 4 KBytes agrupados en 16 bancos, con 256 bytes cada uno. Como en eI resto de las gamas, existen los registros de prop6sito general GPR y los registros especiales SFR; estos ultimos se sirnan en la zona mas alta (desde FOOh hasta FFFh). EI PIC18F4520 dispone una memoria RAM de datos 1.536 bytes (6 bancos de 256 bytes). Ademas dispone de 126 bytes dedicados a los registros de funcion especial (SFRs) situados en la parte alta del banco 15 (figura 4).
8. Gama AHa - PIC18 Para acceder a un byte de la memoria RAM de datos primero se debe seleccionar el banco al que pertenece el byte mecHante el registro de selecci6n de banco (8SR) y, a continuaci6n, direccionar el byte dentro del banco. Ademas existe una modalidad de acceso rapido a las 126 posiciones de la parte baja del banco 0 y a los 126 bytes de SFR (banco de acceso rapido).
La memoria RAM de datos se com pone de registros de prop6sito general (GPRs) y de registros de fund6n especial (SFRs). Los SFRs son los registros mediante los cuales se puede monitorizar/controlar el funcionamiento de la CPU y de las unidades funcionales del PIC. En el PIC18F4520 se sirna en el bloque de memoria de OxFBO a OxFFF (figura 5). Se distinguen dos conjuntos de SFRs: SFRs asociados con el nudeo del PIC:
CPU: WREG, STATUS, BSR, etc. lnterrupciones: INTCON, PIE1, PIRl, IPR1, etc. Reset: RCON. SFRs asociados con las mlidades funcionales:
Timers: TOCON, TMRIH, TMRIL, TlCON, etc. Convertidor AID: ADRESH, ADRESL, ADCONO, ADCONl, etc. EUSART: TXREG, TXSTA, RCSTA, etc. CCP: CCPRIH, CCPRIL, CCPICON, etc. MSSP: SSPSTAT, SSPDATA, SSPCFG, etc. Puertos de ElS: TRISA, PORTA, TRISB, PORTS, etc.
PORTA PORTB PORTC PORTD PORTE
-----
TRlSA TRISB TRISC TRlSD TRlS E
OxF80 SPBRG OxFAF OxF8l - OxF82 T1MERlL OxFC OxF83 TlMER lH OxFC OxF84 --TlMEOL OxFD OxF92 TlMEROII OxFD OxF93 OxF94 WERG OxFE8 OxF95 OxF96 STKPTR OxFFC
---------
Figur.. S. Regl,tra, SFR
8.2.7 Memoria EEPROM El PIC18F4520 dispone una memoria EEPROM de datos de 256 bytes. Al ser una memoria no volatil, los datos almacenados en ella se mantienen en ausencia de
219
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC tension de alimentacion. EI acceso a esta memoria se realiza mediante los SFRs: EECONI, EECON2, EEDATA Y EEADR. Esta memoria permite hasta 1.000.000 de cidos de borrado/escritura. Se puede leer/escribir de forma individual en cada una de las 256 posiciones de memoria. Cuando se realiza una operacion de escritura, la circuiteria intema del PIC se en· carga de borrar previamente la posici6n en la que se desea escribir. La duracion de un cido completo de borrado/escritura de un byte en la memoria EEPROM suele ser de unos 4 ms.
8.2.8 Modos de Dlrecclonamiento EI modo de direccionamiento es la forma en la que se obtienen los datos que van a ser utilizados en la instruccion. Existen 4 modos de direccionamiento: INHEREN· TE, LITERAL, DLRECfO e INDIRECTO. • Modo de direccionamiento inherente: en este modo, 0 bien la instnlccion no tiene operando 0 bien e1 operando viene especificado en el propio c6digo de operacion de la instrucciOn. • Modo de direccionamiento literal: en este modo, el valor del operando viene indicado de forma explicita en la instruccion. • Modo de direccionamienlo directo: en este modo, 1a direccion en la que se encuentra el va lor del operando viene indicada de forma explicita en la ins· truccion. • Modo de direccionamiento indirecto: en este modo, la direcci6n de memoria en la que se encuentl"a el dato viene especificado en uno de los registros FSRO, FSRI
Y FSR2.
8.2.9 Interrupciones Se dispone de dos niveles de prioridad: • Nivel alto veclorizado en la direccion OOOBH. • Nivel bajo, vectorizado en la direccion 0018H. Todas las interrupciones pueden ser programadas con cua lquiera de las dos priori· dades, salvo la interrupcion extema 0 (que siempre tiene alta prioridad). Se puede forzar el modo compatible "solo alta prioridad". mediante el bit IPEN = o. GIEIGIEH & PETEiGIEl controlan los respectivos permisos globales. Cuando se sirve una interrupcion,
220
6. Gama Alta - PIC18 Todas las interrupciones disponen de 3 bits de configuraci6n (excepto Iainterrup· don extema 0 que tiene dos): Bit de habilitacion de inlerrupci6n: permite habiJitar a rovel individual la interrupci6n.
• Flag de interrupci6n: se pone a '1' ruanda se produce la candidon de interfupd6n independientemente de si la interrupd6n esta habilitada 0 no. Este flag debe ponerse '0' por software cuando se procesa 1a interntpci6n. Bit de prioridad d e interrupci6n: establece si la interrupci6n es de alta 0 de baja prioridad (este bit no esta disponible para la interrupci6n extema 0).
EI PIC18F4520 dispone de 20 fuentes de interrupciones. Se distinguen dos grupos de interrupciones: • Grupo general de interrupciones: Jlltl"rru Ion de Tem Qrizador 0 lnterru i6n or ta mbio en PORTO Interru d on externa 0 Interru don extcrn a I Interru cion edem a Z
• Grupo de interrupciones de perifericos: "
En el compilador C se modifica la directiva : INT_XXXX de tal forma que se den induh las palabras dave HIGH y FAST.
pue~
Una priori dad HIGH puede interrumpir a otra interrupcion. Una prioridad FAST se realiza sin salvar 0 restaurar registros (ver el siguiente apartado). Asi, en los PICIS se pueden dar las siguientes interrupciones en C: restauro 105 rcgistros clave.
puede interrumpir a
clave. Esta interrupci6n puede interrumpir a olms en
221
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC • ltINT_xxxx: Prioridad normal (baja) de interrupci6n. EI compiJador guarda y restaura los registros clave. Esla inlerrupcion no interrumpe a otras en progreso. ; l NT_xxxx FAST: Interruption de alta prioridad. En compilador NO guarda y restaura los registros clave. Esla interrupci6n puede interrumpir a otras en progreso. 5610 se permite una en el programa. !l' INT_xxxx HIGH: Interrupci6n de alta prioridad. EI compilador guards y restaura los registros clave. Esta interrupcion puede interrumpir a olras en progreso. EI PIC18F4550 tiene las fuenles de inlerrupci6n mostradas en la figura 6.
~';:"O~(lalgFHa:_) rT ..... O~("""IITIMERO....,..J rT ..... '~ rT ..... 2......&w
r
T... 3 owrftooo
r"",,,_ rE ........ ~.'
rE ....... ~1I2 rPM 8 "'" cII.orws 01\ 8.-87
r" ..* s....... Port "-- .. r MoIog '" doj;" _
.,.,.,.. rRS232 ....... cIotI ...oMIlIo
Figuril 6 . Fuentes de interrupcl6n del PIC 18F45Z0 desde el Wizard del CCS
8.2.9.1 Reglstros de salvaguarda Las interrupciones se disparan durante la ejecucion de c6digo del programa principal a de otra interrupci6n. Esto hace que durante la ejecuci6n de la rutina de tratamiento de la interrupcion se pueda modificar el valor de los registros que estan siendo utilizados por olras partes del c&liga. Para evitar que estas modificaciones alteren el carrecto funcionamiento del sistema conviene almacenar los valorl'S de estos registros al inicio de la interrupcion para recuperarlos al final.
Se puede sa lvar y restaurar el contenido de las variables de entomo (WREC, STATUS y BSR) en sus respectivos registros sombra, 10 que equivaJe a una pila de un sOlo nivel.
222
8. Gama Alta - Ple18
8.2.10 Reg/stro W El registro WREG pasa a ser un registro direcdonable (OxFE8), por 10 que se puede utilizar de forma explicita.
8.2.11 Oscl/ador El PICl8F4520 permite mUltiples configuraciones:
' 4.\1""
I-XJ
, '.0
~
. I.
,d, PLL (.. ",
) '" RA6 1m", 4MH" ;
no
" ~O
RA:' "A;
, "0," "'6(m .. , La disponibilidad de oscilador interno permite multiples configuraciones (figura 7). t _ _ O_
n25IJo;z~ad:
_ _ 1JoIHi!7
31 Kho-J-.. _ _ ..... - . O -
-
"""
Fig .... ," 7. Conflguradon del oScilador interno
8.2.12 Un Ida des Funcionales EI PIC18F4520 dispone de una serie de Ullidades F'lIlciollules que Ie permiten:
• Realizar tareas especificas especializadas (conversion AID, transmisi6n/recepdan de datos, generaci6n de S€nales digitaJes con temporizaciones programables, etc.).
223
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC • Optimizar el rendimiento del PIC, ya que estas unidades trabajan en paralelo a la CPU permitiendo que esta se centre en otras tareas como el procesado de datos, c;ilculos, movimiento de datos, etc. Las Ullidades Fllliciol/aies mas importantes del PIC18F4520 son: Puerto de £JS Tern ori~ador 0 Te rn orizldor I Tr ill orlZMdor 2 Tem oril.lldor J Con\'erridor AID
Unidad d"Com aracio nfCa lurall'WM me'onda Canal de co mun iucio n se rie EUSART Canal de comu nitaciti u Inw MSSP MOd ulo MnllO ieo de Will STlcM!! CM nal de Irao51l1isltio de datos en Mrs ielo SPP AcCf:SO a memoria e:ne rna Ei\lA Unldlld de Com anl(:i6n/CII luralPWM CCP
recl'
8.2.12.1 Puertos de entrada/salida EI PIC18F4520 dispone de 5 puertos de E/S que incluyen un total de 36 lineas digitales de E/S:
Todas las lineas digitales de E/S dispone", como minimo, de una funci6n alternativa asociada a alguna drcuiteria espedfica del PIC. Cuando una linea trabaja en el modo alternativo no puede ser utilizada como linea digital de E/S estindar, <
ow
,..
-.- ,._0- . -. . MO
~w
. • • I ,..,...
~"
L
-
_.-
--'
Figura 8. Esquerna de un terrnln;ll
224
8. Gama Alta - PIC18 Cada puerto de E/S tiene asociado 3 registros: • Registro T RI S: mediante este registro se configuran cada una de las lineas de E!S del puerto como ENTRADA (bit correspondiente a '1') 0 como SALIDA (bit correspondienle a '0'). • Registro PO RT: mediante este registro se puede leer el nivel de pin de E/S y se puede estableccr eJ valor del/atell de salida. • Registro LAT: mediante este registro se puede leer latch de salida.
0
establecer el valor del
8.2.12.2 Temporizadores TEMI'ORIZADOR 0, • Configurable como temporizador/contador de 8 bits/16 bits.
• Pre-escaJar de 8 bits programable. • lnterrupcion por desbordamiento. TEMPORJZADOR 1: • Configurable como temporizador/contador de 16 bits. • Dispone de un QsciJador propio que puede funcionar como: • Sena! de reloj
d~1
temporizador 1.
• Serial de rcloj del PIC en modos de bajo consumo. • Pre-escalar de 3 bits programable. • Interrupci6n por desbordamiento. TEMPORIZADOR 2, • Temporizador de 8 bits (registro TMR2). • RegisITo de periodo PR2. • Pre-escalar d~ 2 bits programable (1:1, 1:4, 1:16). • Post-escalar de 4 bits (1 :1...1 :16). • [nterrupci6n par igualdad entre TMR2 y PR2.
• Se puede utilizar junto con los mOdulos CCP y ECCP.
• Se puede utilizar como selial de reloj del mOdulo MSSP en modo SPI. TEMPORIZADOR 3, • Configurable como temporizadorlcontador de 16 bits. • Dispone de varias opciones de sefial de reloj en e[ modo temporizador: Oscilador principal can 0 sin pre-escalar. Oscilador del temporizador 1 con 0 sin pre-escalar.
225
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC • Pre-escalar de 3 bits programable. • Interrupdon por desbordamiento. r~.N"'used "fITfI..
-' 2",
•• •• ,,n.
,,~
~
OR ,. ~
,....
--
~
11~ ..
[. "'IOI:.-,-B.
....... ,.
......,-
••
•• ". D CIod
••
:32",
") s,..c( .. DldIoO",,
5J.ltI1lDJ
Flgu,.. 9 . WDTyTMRO, TMRI yTMR2
2..
111 ...
( ....
262 ...
8ur
52.( ....
IS....
1o.c ,..
Figu,.. 10, TMR3
8.2. 12.3 Convertldor Analoglco-Digltal • 10 bits de resaludon. • 13 canales multiplexados.
226
....
.,1 ~8 ...
"""'-
1)1 ...
0-.
~,
8. Gama AJtI - PlC18 • Seiial de reloj de conversion configurable. • Tiempo de adquisidon p rograrnable (O a 20 TAD). • Posibilidad de establecer el rango de tensiones de conversion mediante tensiones de referenda extemas.
..
,,,,,,,,~
"''*'PF'~,
emm
,~
AD41J,2JoJA5EO£1 f2B2 8)Bl BI BO
AdAI A2A3A~EOEI E2B2B181 ADA1AlAlA5EO£1£lBl9JBI ' MAl A2A3AHOEI HUl) ADAIA2A3MEO£l (282 o\OAlA2~A5EOEl
B~
•
El
~_12U1
AOAlA2AlMEOEl
ADAl A2A3A5EO
AOAlA2A3A5 AOAlA2Al
AOA1A2
"'''
'"
Figl.lra 11. Modulo AD
8.2.12.4 Canal de Comunlcaclon Serle (EUSARTI Caracteristicas fundamentales: • Modos de trabajo: Modo asincrono de 8 bits. Modo asincrono de 9 bits. Modo sincrona Maestro. Modo sinClana Esc/avo. • Auto-activaci6n por deteccion de data recibido. • Detecdon autamatica de veloddad de camunicacion (balldrate). • Transmisi6n y detecd6n de caracter de BREAK (bus UN).
'"
A~2J2IIl
.!i U.. RS·712
....
.,-
..,
...,.."""
'] .....'--.d
eo." ,,-
'
~
"'-
R..,....., C1
BRGHUJ(
---
._-
--~~.-
...
,.....
•
~
,,----_.
----
Figura 12. Comunicacl6n Sene
227
Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC 8.2.12.5 Modulo Master SSP fMSSPI
El modulo MSSP es un interfaz serie capaz de comunicarse con perifericos U otro microcontrolador. Puede operar en dos modos:
• Serial Peripheral liller/ace (SPI). • lIller-llllegrated Circllit ([2e).
La interfaz 12C admite los siguienles modos: • Master mode. • Multi-Master mode. • Slave mode.
• ~"- SPl ll
,,-... CXPoIlOOoll
CXP..c.ru· l DJ'-un:oIl CKP_l.o;r_l
..
D_II1'~
Df'IoIdol'!l16
"""'
U.. I_2
eU .. I2[
" "0
'"
.,-- -,.
r: fIotI.w\...:I ,~
S~OIE.-.:I
Figura 13. Modo SPI
Fi gura 14. Modo 12C
8.2.12 .6 Modulo de Compraclon/Captura/PWM (CCPJ
Dispone de tres modos de fWlcionamiento: • Modo de Captura: se utiliza para medir eventos externos como 1a duraci6n de pulsos digitales. Modo de Comparacion: se utiliza para generar seiiales digitales con temporizaciones programables. Este tipo de seiiales son muy utiles para e1 control de etapas de potencia (convertidores DCIDC, DC/AC AC/DC, AC/DC). • Modo PWM: se utiliza para generar senales de modulaci6n de ancho de pulso (PWM).
Tambien existe un modulo de comparacion/captura/PWM mejorado (ECCP).
228
8. Gama AHa - Ple18
-Dispone de cuatro modos de fundonamiento:
• Modo de Captura: se utiJiza para med ireven tosextemos como la duradon de pulsos digitales. Modo de Comparaci6n: se utiliza para generar senales digitales can temporizaciones programables. Este tipo de seiiales son muy utiles para el control de etapas de patencia (convertidores DefOe. DQAC, AC/DC, AC/DC) . • Modo PWM: se utiliza para generar senales de modulaci6n de anrna de pulso (PWM).
Modo PWM mejorado: se u tiliza para generar senales PWM complementarias para el control de semi puentes de transistores.
5(Ol1lX! Khz. D~ Ia 4
1250.In)!:I>l.DtIj.ooOlu ' n2.SOOKhl. O~Io '
"
~"G<1a.MW ~"G<2"""
PmAntSludown5t"e DIMPNAnCto'o'
£,II.... Co-nrw""""
'"
RBOor~oICorl
PmBnOS~StaI.
ABOoreo.r--dor2
D
ABO .. E.o!heo~""'"
Figura IS. Mooulas CCP y ECCP
NOTA
El m6du.lo ECCP no funciona correctamente en la ultima version del Proteus. Es de esperar que LabCenter 10 solucia ne en breve.
229
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC 8.2.12.7 Modulo Comparador El mOdulo de comparadores analOgicos contiene dos comparadores que pueden ser configurados de distintas fonnas. Las entradas pueden seleccionarse entre las entradas anal6gicas de los pins RAO a RA5. Las salidas digitales (normal 0 invertida) son accesibles exterionnente y pueden ser leidas a traves de un registro de control.
"'"'"'".
va ''''' t>a ''''' ''''' '''''
,., t!1
hns'Sou'-fl
Fi gura 16. M6chdo Comparador
8.2.12.8 Modulo de referenda EI mOdulo de referenda esta formado por una red de resistencias y permite selecdonar una tensi6n de referenda.
,.
!_" OK
L97
,n
,".
,., ,,,
HI' ,,,
,~
_ , 25
113
.
(
1 . ~G
1.67
,,. ,,,
. , ,."'''''".
D VraI-> F5
o Camp - ) V,e!
"" ' .113
2,19
' .50
""
r
a.
200
• 00 .~
W
063
.83
3.13
Figura 17. Refe-renc:ia
8.2.12.9 Modulo detector de Alto/Bajo Voltaje Este m6dulo program able permite, al usuario, definir un punta umbra] de tensi6n y la direccion de cambia. Si el dispositivo experimenta u n cambia en la tensi6n y en la direcci6n indicada sabre e1 punta umbra! se produce una interrupcion.
230
8. Gama Alia - PIC18
--
,.~
_.'_L..,
Flgur.. 18. HLVD Y LVD
Ejemplo 1: Diseiiar 1m Reloj ell Tiempo Real (RTe) IIti/iZlIlldo la interrupcion del TMRI COli osci/ador exterior; II l ilizar pam In Visuillizacioll un display de 7 segmentos (figura 19).
COmpOllelltes [SIS: P1C18F4520, RES, 7SEG-BCD Y Generador ISIS: Pulse.
Figur .. 19. Ejemplo I
E1 Proteus tiene un componente 7SEG-BCD que es un display 7 de segmentos con el derodificador 7 SEC-BCD integrado, 10 que fadlita la simulaci6n. El empleo del TIMER1 con oscilador exterior permite trabajar a dicho TIMER1 induso ruanda el PIC esta en modo sleep. El Proteus no simula el oscilador extemo del TMRI con cristal de ruaTZO (figu ra 20), por 10 que hay que sustitui rlo por un
231
Compilador CCCS YSimulador PROTEUS para Microconlroladores PIC generador de pulsos con la frecuencia adecuada e introdudrlo por el pin RCO/TlOSO (figura 21). Al editar las caracteristicas del generador de pulso hay que cambiar el Pulse (HigM voltaj,- a 5 V Y la freqllency a 32.768 Hz. Para conseguir una internJpci6n cada 1 seg con d icha fr€CUenca hace {alta precargar el TMRl a OxSOOO segUn los c.i\cuJos de la siguiente ecuad6n. C1
""
D
.X1
~
C2
,,,. Figura 20. TMRI con oJ"Cllador de cuarzo eMterno
np "" ..W""""',,,,,,
I
ss Figura 2' . TMRI con osdl;Idor eMterno slmuhdo ton un generador
-.-
_
..... VdO_
•,
"*""..:N .........
-,....
,
"-'_('<0<01
:'u
r.. •... !SoaI
:,~
.--,, ,---.--'" "". - .- , '-...""'~
••
-.~
•
~,
~_t
'
~
. ~">t _~oe
--~
-~,
1--' !!_fdh?
"' II.""-*"
Figura 22. Caracteristicas del generador Pulse
232
.
_---
La internlpci6n del TMR1 debera ser de alta prioridad. ll'lS datos ~ ti:rwio segundos, minutos y horas) se deben pasar a dos digitos en BCD. NOTA
Se han utilizado los puertosA, By D (ya queel C es necesario para el oscilador). En cl puerto A de los PlelS, la patiUa RA4 ya NOes un Drellador Abierlo peroel PROTEUS sigue lratandola como tal, por 10 que haee falta una resistenda de pllll-lip a la salida. En realidad esto no sena necesario. Por otra parte, la simulaci6n no es en tiempo real por 10 que 1 segundo de simulaci6n puede tardar varios segundos de procesador del ordenador; se puede comprobar la reladon en 1.1 barra inferior del Prateljs dande nos indica el tiempo de procesado (figura 23).
Figuri'l 23. Tlempo de procesado 'include
~18F4520 . h>
Id
/IP
luse delay(clock-lOOOOOOOJ int horas-O, mi.nutos"O, segundos_O; int LSdigito , MSdiglto , 1JCD ; ITNT_TTMERl high
//TnterrupcJ6n de 1l1ta prloridad del TMRl
VOID int_ tmrl (void)
segundoS-H· ; i f (segundos·"60) {minutos+~ ;
//Cuenta los segundo$ //Cuenta los minutos
233
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC segundos-O;
I
i f (minutos--60) //Cuen ta l~s horas
(hOCilS ++; minutos-O;I
i.e (horils_24) horil.!l-O; set_timed (OX8000);
I/Precilrgil el TNMRl antes de Sillir
void BINaBCD(int valor) (
//Funci~n
de convecsi~n de Bindrio d BCD
M$digi to " O;
i f (villor>-lO) (
dol valoc-vdlor-l 0 .. MSdigito++ ; }while (villor>-lO):
L$digito-villor;
//Unidades en BCD
MSdigi to-Msdigi to«4;
//Decenil.!l en BCD (.!Ie desplilzan a 1" parte /Idlta del int)
BCD-HSdigito I LSdigito;
IIOR entre los dos m.imeros para obtener un I/en tero que se pued" sacar directamente poe /Iel puerto
void main () setup_ildcJ>Occs (NO_ ANALOGS I VSS_ VDD);
.!Ietup_",dt (WDT_OFF}; setup_timer_l (Tl_EXTERNALI Tl_ DIV_BY_11;
//TMIl.l con oscilador externo //modo asincrono y
presc~ler-l
setup_comparator (NC_NC_NC_NCJ; setup_veet(FALSE);
setup_ osc1l1~tor (Fa lse) ; en~ble_ int.ercilpts
(INT_TIMER1) ;
enable_interrupts (GLOBAL) .. set_timer1 (OXSOOO); I/TMRl-655J6- (l/TQSel) -65536 -J276S-J276S"'OxSOOO while(true) I/Crml"ier te los segundo" de bin~rio ~ BCD_.
BINaBCD(segundos); OUTPUT_ D(BCD);
/Ilos
s~ca
por el puerto D.
BIN/lBCD(minuto.!l} ; OUTPUT_B(BCD); BINaBCD(horas) ; OUTPUT_A (BCD) ;
Figura 24. Programa del Ejemplo 1
234
8. Gama AHa - Ple18
Es necesario deshabilitar el watclldog en el PIC (6gu ra 25) .
--..
.,
--
-1.,,.£' ....
lofj,c.m ... _",
"'-, ""'r...
;f1t'".,,,m
;"""
....
PI<9..
_Cb:I
....
-,
-
~
,, _.
,- II -I
_._. ---
- -.,jIlGoM
..
.,.. ...
[ "'-tN
- I -
""'
I
I I
I I
• •
£[--~ _ _ I'CI!.--' [dI~
-"_u. .....
___
Flgu,.. 25. Dtlrha billUd6n def Wiltchdog
Ejemplo 2: Efeoodor de tel/sio/l (voltaje-boost cOIwerto) am realimelltaci6/1 de con trol (6gura 26). Componentes ISIS: PIC18F4520, RES, IRF130, INDUCTOR, 1OBQ015 Y CAP .
• •
-,"'"" "
"'
-
••
Figur. 26. Elevador de tensl6n
NOTA En PROTEUS, el m6du lo comparador en el modelo del PIC1S no fundona correctamente en la simulaci6n, as! tambien el m6dulo fCCP tiene algunos problemas. Esperemos que LabCenler 10 solucione en breve.
235
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
Se configura el m6dulo CCP para trabajar en modo PWM y el comparador para que compare la senal de salida (dividida por un coeficiente) y la tensi6n de referenda intema (en este caso se fija a 3.59 V . El modu lo de referenda se configura para obtener un valor de 3.59 V mediante 1a programaci6n del registro CVRCQN=ObnOOll11 0 en compilador C de CCS: setup_vref(VREF_HIGH 115 1VREF _F5). EI mOdulo comparador se configura para introducir la senal extema por RAO y utilizar la referenda intema (figura 27) mediante la programaci6n del registro CMCON= ObOOOOOll0, en C deberia ser setup_comparalor(AO_VR_Al_VR) pero se ha detectado un error en la asignacion #define del fichero de cabecera (se puede modificar 0 utilizar directamente el valor de CMCON ). La frecuencia de la senal PWM se ha fijado en 4 KHz. CM2..CMD _ 110
A
RAO -CIS.~ RA3 ~. ~- .
C1
ClOUT
C2
C20UT
+
RAl...L RA2
-A.
-.-.
+
VAEf Figura 27. Modo del com~rador
EI sistema hll1ciona en un equ ilibrio dimimico, mientras la tension de salida (dividid a) sea menor que la VREF la senal PWM actUa, si es mayor la selial PWM es O. De esta forma se consigue una tensi6n continua en la salida del convertidor. De esta forma se consigue una V"",- 20 ± 0.27 V. Es importante inicializar la salida (can un label tc=5 sobre el cable) para evitar errores de convergenda en la simulacion. linclude
<18f~520.h>
I f uses XT , NOWDT luse delAy (c1ock - 4000000J Ibyte CMCON-OxFB4 Iby t e TRISA-Oxf"92
236
8. Gama Alta - PIC18 void main () int16
(
dutty ..
TIUSA- Obll101011 .. CMCON- ObOOOOOl10 ..
/lsetup_ r;Omp
setup_vref{VREF_HIGHI151 VREF_ FS) ..
/ /CVRCON-Ob11001111 :
setup_t1meI_2 (T'2_DIV_BY_ 4,62,1) ;
//4XH7:
setup_ cr;pl (CCP_PWM) ..
//CCPl
~n
modo PWM
set_plfflll_ duty(714) .. ",hlle(ll
(
< \IRE£'
If'(ClOUT) dutty-714;
//Si VCut/Coef
else dutty ..O;
//Sj Vout/Coer > \IREI'"
setYh1ll1_duty(dutty) .. }
Figura 28.Programa del ejemplo 2
Si se quiere utilizar una VR£Fdistinta a la intema para ajustar mas finamente la tensi6n de salida, se puede utilizar el m6clulo comparador segun la figura 29, introduciendo la senal por RAO y una referenda extema pOT RA3, CM2,.CMO>o; 100
RAO A
RA3
,
+
C1
ClOUT
RA1 A ClOUT
RA2~
Figura 29, Modo del Comparador
,. ~T~
I ~
~
';1
':
F i
.
.
ti
I~
:r~
•
.-'
~.
,
" -- . "- .:I -"".:::~ ~
~
.rrn;
0'
Figura 30. Clrculto con referenda ektern;!l
237
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
------
'include <18t4520.h> ,tu5es XT,NOWOT 'use
del~y(clock·4000000)
'byte CHCON-OxFB4 Ibyte TRISA-OxF92 void m/JJn (J ( intI6 dutty; TRISA .. Obll1010ll; CMCON .. ObOOOOOlOO;
setup_timer_2(T2_DIV_BY_ 4,62,1); -,etup_ ccpl (CCP_ f>tiHJ ; setywml_duty(714) ;
t.hile (1)
(
IF(ClQUT) dutty .. 714;
else dutty-V; set_pwml_ duty (duccy);
238
9. Real Time Operating System - RTOS
Capitulo 9 RTOS - Real Time Operating System 9.1 Introduccion EI Sistema Operativa ell Tiempo Real simplifica el desarrollo de una aplicacion y, mediante el uso de tareas, reduce los errores de programaci6n. En general, se puede definir un RYOS como un programa que trabaja en segundo plano, controla la ejecuci6n de variai'; tareas y facilita la comunkaci6n entre eUas. En el caso de que se este ejecutando mas de una tarea aJ mismo tiempo, el sistema se denomina multitarea; cada tarea tiene asignado un tiempo de proeesador. El RTOS no es exactamente un so (sistema operativo) a pesar de que los dos se basan en un nudeo (kernel) que se encarga de c:ontrolar la de ejecuci6n de las tareas. La diferencia estriba en la carga inicial, si es sOlo el nudeo (RTOS) 0 si ademas se cargan otros procesos (SO). EI RTOS esta pensado para trabajar con los microcontroladores. Puede utilizarse en los PIC de garna media pero donde mayor rendimiento se obtiene es en los PIC de garna alta. EI RTOS que utiliza CCS permite el PIC ejecute regularmente las tareas programadas sin necesidad de interrupciones. Este se logra a traves de la funcion RTOS_ RUNO que actUa como planificador de tareas (dispatcher). La fundon del planificador consiste en dar el control del procesador a la tarea que debe ejecuta rse en un momento dado. Cuando la tarea ha terminado de ejecutarse 0 ya no necesita del procesador, el control de dicho proeesador es devuelto al planificador el cual dara el control del procesador a la siguiente tarea que este Lista para ejecutarse en ese momento. Este p rocesa se conoee como cooperativo multitarea (cooperative multi-tasking) Un buen ejemplo de la optimizacion del usa del PIC con el RTOS es el PID utilizado en el tema sobre el m6dulo CCP para regular la temperatura de un homo (ejemplo
239
Compllador CCCS VSimulador PROTEUS para Microconlroladores PIC 5). Estudiando el programa realizado en esa ocasion se observa como el rrc esta totalmente ocupado en realizar el proceso PID; si se necesitase utilizar dicho microcontrolador para realizar mas funciones se deberia realizar una programaci6n bastante compleja, intentando siempre respetar el tiempo de muestreo del PID. Utilizando el RTOS en dicho ejemplo, no sOlo se simplifica el programa sino que adenlils se consigue mejorar Ia respuesta en el sistema ya que se optimizan los recursos del micro. De los dos casas estudiados (tiempos de muestreo de 100 ms y 1 ms), en el primer caso se reduce el sobreimpulso y las oscilaciones y en el segundo caso se alcanza antes la temperatura fijada (Figura 1). Pero ademas, la utilizacion de RTOS va ha permitir aiiadir fadlmente mas tareas al PIC como veremos en los pr6ximos ejemplos.
.~..-
Sin RTOS
-=trt:=t=r==C~"ii~~T~•O:j::===::j:=:I:1
. ....j
f-!--+---j_--'1001~+--+--+-1
t
--
T
... I~ --r--+--t
.,
,.
,
Sin RTOS
m
.1---- -I--
-
f- .,.
CO"
" t
....
TOI
1m.
--t
-"
Figura 1. Respuesta del PID con y sin prograrnacl6n RTOS
9.2 RTOS en C Las funciones que incorpora CCS para la gestion del RTOS san las que aparecen en la siguiente tabla:
240
9. Real Time Operating System - RTOS Inicia la operaci6n del RTOS. Todns las {areas sc ejecuta" a traves de esta funcion. Finaliza la opcracion del RTOS y devuclve e! control al rtos_lermi nate() programa principal, a la linea siguicnle de la funci6n nos runO."Es como una fuoci6n RETURN. Habilita una de las tareas RTOS. Una vez la tarea es rlos_cnable(lask) habilitada, ], funcion rrosJunQ IillmarA a esla tarea cuando Ie toque por liempo. EI parnmetro de esla funci611 cs el nombre de la tarea. Deshabilita una de las tareas RTOS. Una vez 18 tarea es rtos_ disablf.'(t8Sk) deshabililada, la funci6n rlos_nmO no lIaman\. a esta tarea ha~ta que vuclva a ser habilitada mediante la funci6n rlos_ellableO.EI parametro de esta funeion es el nombre de la taIea. Devuelve un TRUE si hay un dalO en la cola de mensajes rtos_msuoliO de tarcas. Devuelve c[ siguicnte byte del dato cuntenido en la cola de rtos_ms~rca dO mensa'es de [areas. rtns_RlslL,send(task,b)1e) Envia un byte de datos para una tarea conereta. EI dato es situado en la cola de mensa'es de !.areas. Se llama desde una de las tareas y devuelve el control del r tos.....vieidO programa a la funci6n rIDS_nmO. Todas las tareas dcben tener una Hamada a esta funci6n aJ finaJ de su e6digo. Incrementa un SEMAFORO quc sc utiliza para difundir 1a rtos_sigllltl(s('OI) disponibilidad de un rccurso limitado. Espcra a que el rccurso asocilido con el semaforo eSle rtos_wait(sem) disponible y emonces decrementa ,] semaforo p"a reclamar el rceurso. rtos~await (expre) Espera a que la EXPRESION sea TRUE antes de pemlitir Que la larea continue. rtos_ overrun(task) Retorna un TRUE 5i la tarea ha sobrepasado el liempo permitido de eiecuci6n. rlos_ slals(lnk,stat) Relorna una EST ADiSTICA de una larea concreta. La estadistica incluye , ] ticmpo minimo y maximo d, ejecuci6n de la tarea y el tiempo total que 18 tarea ha sobrenasado su eiccuci6n. rlOSJunO
Las directivas asociadas son dos: luse rtos (options) Las OptiOIlS pueden ser las sigujentes (separadas par comas): timer-X: donde X (0 a 4) indica el TIMER que se utilizani pa ra la ejecud6n de las tareas. EI TIMER seleccionado debe utilizarse para el RTOS. minor_cycle=time: donde TIME es un numero seguido de s, ffiS, I1S 0 ns. Indica el tiempo que debera tardar e n ejecutarse una tarea. Los tiempos de ejeClI-
241
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC cion de cada tarea deben ser mUJtiplos de esta cantidad. Si no se especifica, el compilador se encaTgani 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 sigue es una tarea de RTOS. Las options pueden seT las siguientes (separadas por comas): rate:time: donde TIME es un numero seguido de s, ms, ps, 0 ns. Especifica la frecuenoa can se ejecutani la tarea. Debe ser iguaJ 0 multipla del valor miliar_cycle. mar-time: donde TIME es un numero seguido de s, ms, ps, 0 ns. Especifica el tiempo de ejecuci6n de la tarea. Este tiempo debe seT menor 0 igual que el valor millor_cycle. EI compilador no puede hacer cumplir este tiempo por 10 que el pragramador debe tener cuidado en asignar el tiempo de ejecuci6n. Ademas, este tiempo activa la funcion rfos_ovcrrun(fask). queue=bytes: especifica cuantos bytes son colocados en la cola de mensajes. EI valor por defecto es O. Como primer ejemplo se puede utilizar el controlador PID (ejemplo 5) del tema sobre el modulo CCP. Comparando el p rograrna escrito en aqueUa ocasi6n y el que se presenta ahara con RTOS (Figura 2), se observa que el bloque del PID que estaba en el programa principal es ahara una tarea . El tiempo de muestreo estaba espccificado can un de/ay_msO y ahara se utiliza el tiempo de ejecuci6n de la tarea como tiempo de muestreo. Tal como se ha comentado en c1 punto anterior, se ha obtenido una mejora en el fundonamiento del sistema (Figura 1). #INCLUDE <16F877 . b> Idevice adc-10 #use delay(clock-4000000)
Ituses XT , MOWDT IByte TRISC .. Ox 87 //Di r eceiva del RTOS int16 valor ;
/Ilectura de t emperatura
int16 control;
//valor del PWM
float a-O . 1243;
Ilcon,tante" del PID para lOOms
float b-O.00006; float c"62.l514; float terop_limit ..SOO.O,.
II temperatura a alcanzar
float rT,eT,pT, qT,yT , uT;
//variable" de ecuaciones
floa t pT_l-O.O; float eT_l-O . O;
242
9. Real lime Operating System - RlOS float
//limices mJximo y minimo de control
max~lOOO.O;
float min-O . D,. 'task (ra te - lms, m.!Ix"lms) void pid ( ) ;
IIIndica que la $iguiente funci6n es una Tarea //que se ejecutara cada lOOms .
void lIJilin{) ( TRISC-O; setup_timer_ 2 ft2_div_by_ 4,249, I) ; s .. tup_ccpl (ccPJOI1IJ) ;
setup_"dcyorts /iJll_analog) ; Siltup_ .. dc (AOC_ CLOCK_INTERNAL),. "et_"dc_ channel (D) ;
/IPeriodo de 18 se~a1 PWM alms I/MOdu10 CCP a modo PWM IIPuer to A analdgico /Ireloj conVl!rtidor AD interno IILec tura por e1 canal 0 IIInicia 113
void pid (
o~raci6n
de RTOS
IITiJrea PID
output_ hitr PIN_CD, OJ; valor_read adc(); yT"v021or" 5000. 0/102.4.0 ; rT-temp_limit; eT ..rT-yT,. pT-b · eT+pT_l,. qT-c ' (eT-eT_I) ;
uT=pT+a 'eT+qT; (uT>max)
if
uT-max; } else ( if luT
En el ejemplo se puede anadir una tarea que permita visualizar en un display LCD la temperatura que tiene en homo (figura 3). AI manejar varias tareas es conveniente utilizar la funcion rtos-yieldO para devolver el control aJ planificador de tareas
243
Compilador CCCS y SimuladoT PROTEUS para Microcontroladores PIC
y coordinar las tareas mediante las fundones rtos_waitO y rtos_signaIO; para utilizar estas dos fundones se debe utilizar un "semaforo", el cuaJ permite a una tarea utilizar un rectlrso com partido 0 esperar en el caso de que este en lI SO•
..
-"
IT~~ .. •
Fig~ril
35 . 64
3. Dos tareils: PID y DISPLAY
En este ejemplo no se utiliza ningtin recurso com partido, por 10 que no 5e u tilizan las fundones rtos_waitO y rtos_signaIO . JINCLUDE <16F811 . h.> Idevice adc - lO
luse delay(clock - 4000000) Ifuses XT,NOWDT Jinclude luse rtos (timer-O , minor_cycle-lms) IByte TRISC - ox87
int!6 valor , conteol; float a-o.1243. flOlft b-O . 00006 ;
244
9. Real Time Operating System - RTOS flOiH
c-62.1S14,.
flo"t temp_ lrmrt-SOO.O; nm rT,eT,pT,qT,yT,uT ,. flo"C pT l-C.'; 1-0.0;
",'" "tlo.:Jt 1ILII,,-1000.0; flo.Jt Iftin-C . O; no"c temper,,; 'Cask(rat8~lns,ma"·lms)
tTacea del pro
void rId ( ) .. It .. ,.", (r" roO-lOrn,., /11",,-1 /II.~)
//rIJrea del DISPLAY
void display( ); void
~ln
() (
lcd_Jnlt(): TRISC-O; .!letup_ t i.mer.. 2 (t2_ di v_by. 4,249,1) .. ~etup_ccpl
(ccp.PIl1ll),.
setup_adc-porcs r.Jll_"n.Jloq) ,. .!Iet"p ."dc(AOC .CLOCK. INTERNAL); sec_.rdc_ch.lnnel fO),.
void pid ( )
//T"cea del prD
valoc-reiJd_"dc(} ,yT-v"loc'SOOO. 0/1024.0; rT-temp_limi t: eT-rT-yT ; pT-b'eT+pT_l,. qT-c ' (eT-eT_l); uT-pTt-a ' eTt-qT ; i t (uT>m.. ,,)
uT-ma,,; J else { ;j
t (uT
control-uT;
245
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC setywrnl_duty (control):
pT_1 - pT; eT_ l-eT; nosyie1d(J ;
liSe devue1ve e1 control a1 planiflcador
}
void display ()
IITareiJ del DISPLAY
lcd_90tOJfY (1,1) ; temperiJ-yT/10; printf(lcdyutc,
~Temp-
If"·, tempera):
liSe devuelve e1 control al planjfjcador
Figura 4 . EI programa
Las variables se pueden definir de forma global 0 particular como en cualquier funci6n . En el caso de variables globales, todas las tareas pueden utilizarlas, pem en el caso de funciones particulares se pueden utiliza r las funciones de rorreo: rtos_fisS-pollO, rtos_fi ss-rea dO y rlos_mss-send(task,byte) para transferir informacion. En el ejemplo anterior la variable utilizada es global, por 10 que puede ser utilizada por las dos tareas, pero en el caso de ser local se podrian ulilizar las funciones de correa (aunque la variable sea global tambien se pueden u tilizar). En el caso de variables globales puede seT interesante el usa de e stas funcion es en aquellos casos en los que una de las tareas este esperando que la variable modifique su valor a traves de olTa tarea . Para utilizar estas funcianes en el ejemplo se modifica la lIamada a la tarea DISPLAY Yse aitade una variable para el correa (figura 5).
Icask(riJte - 10ms,milx-lms,queue-2)
/ /Cola dc 2 bytes .
void display( }; Figura S. MocUficaciones clel programa 11/
Se realiza el envlo de la variable valor desde la tarea PID y se recibe en la tarea DISPLAY para su posteriOT usa (figura 6). EI resultado es similar al del ejemplo anterior. void pid ( ) valor- read_adc() ; yT-valor~5000.0/1024.0;
rT-temp_1lmit:
246
9. Real lime Operating System - RlOS I/El resto de cOdigo como slempre nos_lIlsg send(d.lsplay, valor) ;
/IEnvla los 2 bytes de Valor a DISPL.AY
rtosyieldl! ;
void display()
valor_l-rtos_ msg_reild () ,.
/IRecibe los 2 bytes de Valor
temper.. -valor"': 1 ·500 . 0/1024.0 ; lcd_gotox y (1 , 1) ,. printf(lcdJutc,
~Temp.
if'" , tempera);
Flguril 6. ModlRcilciones del programa 1"1
Para terminar can este ejemplo se ha aiiadido una tercera tarea que permita modificar la temperatura limite en cualquier momenta mediante un bot6n en la patilla RBO. Para esta tercera opcion se ha cambiado a un PIC18F4520. Como ya se ha comentado, el RTOS adquiere toda su eficiencia en los PIC de gama alta (figura 7). ,
j
"
.•
1" _ _ ,,.
~"
•
"
-,'.'7 ~,
~'
T.~.' Lt~'h' 51
Figura 7. Tres tareas: PIO, DlSPLAYy TECLA
247
Compilador CCCS YSimulador PROTEUS para Microconlroladores PIC Dado que en este caso se modifica una variable en dos de las tareas es conveniente utilizar las funciones rtos_waitO y rtos_signalO (figura 8). IINCLUDE <18F4520 . h> Idevice adc-l0 luse delay(clock-4000000) IEuses XT,NOWDT linclude luse rtos (timer-O , minor_cycle-lms} luse standard_ io{B) luse standard_io{c) Idefine BO PIN_ BO int16 valor;
//lectl1ra de temperatl1ra
int16 control;
//va10r del PWM
float a-0.1243 ; float 1>-0 . 00006; float c-62 . 1514 ;
//constantes del PID
float temp_limit-SOO.O;
//temperatura a .. lcan:;!ar
flollt rT,eT , pT,qT,yT,I1T ; float pT_ I-O . 0 ;
flollt eT_1-0.0 ;
//variables de ecuaciones
float max-lDDO . O;
float min-O . O;
//limi t es maximo y minima de contrOl .
float tempera ;
//Para visualiur Ia temperatu r a de l .'lorna .
int16 t_l ; intS sem ;
//PlIrll visI11l1izIlr III temperatura limite . //Variable de semA f oro .
Itask(rate-lms , max-lms) void pid (); Itask (rate-lOms,max-lms,queue-2) void display ( ); Itask(rate-lDms , mllx-lms) void teclado ( );
void main {J {
248
9. Real Time Operating System - RTOS setup_cimer_2(t2_div_by_4,249,1);
//pedodo de 1" sefld1 PWM" 1ms
setup_ccpl (ccpylffll);
//Modu10 CCp" modo PWM
setup_ adc_ports ("11_"nalogl ;
//Puerco A ana16gico
SE>tu.o_ ade (ADC_ C.LOCK_ INTERNAL);
//reloj convercidor AD lnterno
set_"dc_ch"nnel (0);
selll- 1 ; ..-tos_run
( );
void pia ( )
//Lectura de 1" temperatura
valor-raild_ddc {I; yT~valor · 5000.
0/1024.0;
//converSl0n .. mV (0.25V a 250mVI
rT- temp_limit; eT ....-T-yT;
//C4lclIlo error
pT_b"OT+pT_l;
//C~lculo
qT- c· (eT-eT_l);
//Calculo del
uTwpT+-" "eTtqT i
//Calcul0 de 1a slflidlf PID
i f (IIT>mllx)
//Slflid,a PID sl es mlfyor que e1 MAX
del termino inteqral terllllno derivativo
liT-max; J else
r
i f (uT
//SalidiJ PIO si es /!fenOr que el MIN
uT-min;}
control-uT;
//TCI:msferencia de sillidlf PID
pT_l ..pT;
/!Gullrdar variables
If
se"lIl PWM
eT_1-eT; reos_siqnlll (sem);
rt os_yleldlJ ;
voId displ .. y()
rtos "'lflt (sem);
249
•
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC temperil-yT/IO: lcd_gocOKY (1,1) ; princf (lcdyutc, «Temp-
tF\n», tempera):
t_l - temp_limit/lO; princf(lcdYlJcc,
"Limite- t LI,IN,
t_l):
reos_signal (sem); rtosyield() :
void teclado(}
rtos_ wai t (sem) ; if (input (PIN_ C.f) --0) cemp_limi c- temp_lim.! t +l 0.0; i f (temp_limit;;. 1000.0) temp_limlt - 500.0;
rtos_signal (semI; rtosyield() ; J
Figura 8 , Programa con PICt8F4S20
250
•
10. USB - Universal Serial Bus
Capitulo 10 USB - Universal Serial Bus NOTA DEL AUTOR Cuando este libro eslaba pnkticamente en imprenta, LabCenter realiz6 una actualizacion de la version 7 can un nuevo (y esperada) madelo: el USB (USBCONN). CCS C ya proponia ejemplas y suministraba librerias para utiJizar USB que no se podian simuJar en ISIS. Con este nuevo modelo se puede abandonar ya la simu lacion por puerto serie RS-232 (la mayoria de los PC ya no disponen de este puerto) y afrontar el USB. Al estar ellibro en imprenta, s610 he podido inc1uir alga de teoda basica de USB y algUn ejemplo sendllo sabre I"ffiulad6n RS-232 con USB; espero que si hay masedidones de este libra pueda completa r y aumentar este capitulo.
10.1 'ntroduccion EI Hils 5erie Utziversal fue creado en los anos 90 por una asociacion de empresas con la idea, entre otras, de mejorar las tecrucas pIlIg-mld-play, es decir, permitir a los dispositivos conectarse y desconectarse sin necesidad de reinitiation, configurandose automaticamente al ser conectados; ademas se Ie dat6 de transmisi6n de energia electrica para los dispositivos conectados. Este bus tiene una estructura de afbol y se pueden ir conectado dispositivos en cadena, pudiendose conectar hasta 127 dispositivos permitiendo la transferencia sincrona yasincrona.
Se puede c1asificar segUn
Sll velocidad de transferencia de datos (desde kilobits hasta megabits): Baja Velocidad (1.0) utiJizado para los Dispositivos de lnterfaz Humana (HlD) como ratones, etc.; Velocidad Completa (] .1) Y AJta Velocidad (2.0) para conexiones a lnternet, etc.
251
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC
-----
Fisicamente, los datos del USB se transmiten por un par trenzado (0+ y D-) ademiis de la masa y alimentacion (+5V). Los conectores estan sujetos al estandar (tipo A, tipo B). USB es un bus punta a punto, can inicia en el HOST y destino en un dispositivo o ~n un HUB; 5610 puede existir un tmico HOST en la arquitectura USB. HOST se define como el dispositivo maestro que inidaliza la comunicacion y HUB es el dispositivo que contiene uno 0 mas conectores 0 conexiones hacia olros dispositivos USB; cada conector es un puerto USB. EI protocolo de comunicaci6n se basa en el paso de testigo (token), donde el HOST proporciona el testigo al dispositivo seleccionado y este Ie devuelve el testigo como respuesta.
10.1.1 Migracion de RS232 a USB La interfaz serie Rs-.232 esta desaparecienda priiclicamente de los ordenadores personales y esto supone un problema, ya que muchas de las aplicaciones con microC'ontroladores utilizan este bus para su comunicacion con el Pc. La soludan ideal es migrar a una interfaz USB y existen distintas formas de hacerlo. EI metodo mas sendUo es emular RS-232 con el USB, con la ventaja de que el PC vera la conexi6n USB como una conexion COM RS-232 Y no requerira cambios en el software existente. Otra ventaja es que se utilizan drivers suministrados por WindoUlS, por 10 que no es necesario desarrollar uno nd 11O{; estos drivers son el usbser.sys y el ccp ort. sys. Ademas, puesto que el protocolo USB maneja comunicaciones de bajo nivel, los conceptos bnlld rate, bit de paridad y control de fluio para el RS-232 ya no importan. 10.1 . 1.1 USB CDC ICommunicatlon De-vice- Class' Una clase USB es una agrupacion de dispositivos de caracteristicas comunes, es decir, utilizan una misma forma de C'omunicarse con el entomo. La dase de dispositivo permite conocer la forma en que la interfaz se comunica con el sistema, el cual puede localizar eI driver que puede controlar la coneclividad entre la interfaz y el sistema. USB 5610 permite a1 driver comunicarse con el periferico a traves de las tuberias (Pipes) establecidas entre el sistema USB y los endpoints del periferico. Los tipos de transferencia a traves de las pipes dependen del endpoillt y pueden ser: Bulk, COltlrol, Interrupt e Isochronous. Una tuberia es un enlace virtual entre el HaSTy el dispositivo USB, dandese configura el ancho de banda, el tipo de transferencia, la direcd6n del flujo de datos y el tamano del paquete de datos.
Estos enlaces se definen y crean durante 1a inidalizacion del USB. Un elldpoi"t es un bl/ffer dentro del dispositivo a periferico donde se aimacenan paquetes de informaci6n; todos los dispositivos deben admitir el clldpoi"t 0, el cuat recibe el control y las petidones de estado durante la enumeracion del dispositivo. Cuando se conecta un disposi tiv~ al HOST se produce la enumeraci6n en la cual el HOST interroga a1
252
10. USB - Universal Serial Bus dispositivo sobre sus caracteristicas principales, asigmindole una direcdon y permitiendo la transferenda de datos. La espedficaci6n Clase de Oispositivo de Comullicaci611 (CDC) define algunos modelos de comunicacion, incluyendo la comunicacion serie. Windows suministra el driver usber.sys para esta especificacion. Para la especificacion CDC se necesitan dos interfaces USB, primero la interfaz COlllmunication Class usando un IN interrupt endpoint de interrupd6n y el segundo es la intefaz Data Class usando un OUT blllk clldpohlf y un [N bulk endpoint. Esta interfaz es utilizada para transferir los datos que normalmente deherian ser transferidos a traves de la interfaz RS-232. Desde el punta de vista de sistema USB, el dispositivo puede tener distintas configuraciones, para cada una de las cuales puede funcionar de forma distinta. Los dispositivos suministran la informaci6n necesaria al sistema USB a traves de los descriptores; estos contienen unos campos que permiten al sistema clasificar al dispositivo y asignarle un driver. La primera informacion que necesita es 1a del fabricante y producto (USB vendor ID - VIP Y el Prodllet ID - PID). EI VIP es un numero de 16 bits asignado porel USB implel/lmters FOfllm (USB-IF) y debe ser obtenido por el fabricante del dispositivo USB; cada V/D puede contener 65.536 PID diferentes ill ser tambien un numero de 16 bits. Microchip suministra su vcr y los pro para cada familia de PIC can USB.
Microsoft Willdmvs (2000 0 XP) no tiene un fichero ".infestandar para el driver CDC, as! que es necesario suministrar este fichero ruanda se coneda un dispositivo USB par primera vez al sistema. Microchip suministra el fichero mchpcdc.inf necesario para sus dispositivos PIC.
10.2 USB con ISIS y CCS C 10.2.1 USB en ISIS LabCenter ha incorporado, en su version 7, dos herramientas para la simulad6n de circuitos can USB: el conector USB [[amado USBCONN (figura 1), el rual permite conectar y desconectar el bus y el visualizador de USB Hamada Analizador de Transiciones USB (figura 2); este ultimo se debe adquirir como un mOdulo aparte.
Figura 1. USBCONN
Ademas, el software de LABCENTER incorpora los drivers necesarios para la simuladon con USB. Para instaJarlos hay que iT a la opcion INICIO > PROGRAMAS >
253
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC PROTEUS 7 PROFESSIONAL> VIRTUAL USB> INSTALL USB DRIVERS. Tras este proceso ya se puede trabaja r con el USBCONN.
Figura 2 . An"IIzador de Translclones USB
10.2.2 USB en CCS C CCS suministra librerfas para comunicar PIC con el PC utilizando el bus USB, mediante perifericos internos (familia PIC18F4550 0 el PIC16C765) 0 mediante dispositivos externos al PIC (del ripo USBN9603). Las librerias suministradas son: • p ic_usb.h : driver de capa hardware de la familia PIC16C765. • pic_18u sb.h: driver de G;lpa hardware de 1.1 familia PIC18F4550. • usbn960x.h : driver de capa hardware para el dispos i tiv~ externo USBN9603/ USBN9604. De esta forma, se puede utiliza el bus USB en cualquier PIC. • usb .h: definiciones y protatipos utilizadas en el driver USB. usb.c: El USB stack, que maneja las interrupciones USB y el USB Setup Requesfs en Endpoint O. • us b_cdc.h : driver que permite utilizaruna dase de dispositi v~ CDC USB, emulando un dispositivo RS232 y 10 muestra como un puerto COM en Windows. Las funciones mas importantes, entre atras muchas, son: • usb_inHO: lnicializa el hardware USB. Espera en un bude infinito hasta que el periferico USB es conectada a1 bus (aunque esa no significa que ha sido enumerado por el PC). Habilita y utiliza 1.1 interrupci6n USB. • usb_taskO: Si se utiliza una deteccion de canexion para 1.1 inicializacion, entances se debe Uamar peri6dicamente a esta func ion pam controlar el pin de deteccion de conexi6n. Cuanda el PIC es canectada a desconedado del bus, es!a funcion inicializa el periferico USB 0 resetea el USB stack y el periferica.
254
10. USB - Universal Serial Bus usb_enumeratedO: Devuelve un TRUE si el dispositiv~ ha sido enumerado por el PC y, en este caso, el dispositivo entra en modo de operad6n normal y puede enviar y redbir paquetes de datos. Existen fundones espedficas para CDC, entre elias: ush_cdc_putc(c): Es identiea a Pllt(C) y envia un cankter. Coloca un cankter en el bllffer de transmisi6n; en el easo de que este Ileno esperaril hasta que pueda enviarlo. usb_edc-sete(c): Es identica a get(c) y lee un eankter. Recibe un cankter del buffer de transmisi6n; en el easo de estar vado esperara hasta que se reciba. CCS aporta varios ejemplos de aplicad6n de USB segiln las dases de dispositivos, por ejemplo para el CDC encontramos el EX_USB_SERIAL.C y el EX_USB_ SERIAL2.C Ejemplo 1: Ellviar los datos de IIl1a conversi6n AD al puerto USB como Virillal Comm. Componellirs ISfS: PIC18F4550, USBCONN, POTLlN, CELL, RES Y LED-BLUE. EI ejemplo se basa en la aplicaci6n para CDC, EX_VSB_SERIAL2.C, donde el USB emula un puerto serie COM. De todas las posibles dases de dispositivos, la CDC es la mas sendlla de apliear y entender (dada su similitud can el fundonamiento de un puerto serie). EI ejemplo EX_USB_SERIAL2.C permite la visualizacion de una parte de la memoria EEPROM del PIC La estructura de librerias de CCS se muestra en la figura 3. EX_USB_SERIAL2.C
I
#include "l8F4S50.h" #include "usb_ooc.h"
I
IUSB_CDC.H I #Include "piela_usb h" #irlCluda "usb_desc_cdc.h" _ IJirlClude "i.b.C:>
!
US8.C
I USB OESC COC.H #ll'lcluda "usb.h"
J
#include "usb.h>
Figura 3. Ubrerias en ElLCDC_SERlAL2.C
Se va ha modificar este ejemplo para adaptarlo a los ejemplos del tema 7 sabre los puertos serie. Ademas de modificar el programa principal, hay que realizar una modifieadon importante en la librena de deseriptores USB_DESC_CDCH, donde se indica, al final de la libreria, el fabricante y el producto (VlP/PID); en este easo aparece:
255
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC Ox61,Ox04, //vendor id (Ox04D8 is Microchip, or is it Ox0461 ??) ..... 8,9 Ox33,OxOO, Ilproduct id
=
10,11
Para trabajar can Microchip hay que indicar en el identificador de fabricante el
VENDOR ID Ox04DB y en el identificador de productor el PRODUCT ID OxOA para la familia de los PIC1S. Es decir, esas dos lineas deben de quedar asi (es aconsejable hacer una copia de la libreria original antes de proceder al cambia):
OxD8,Ox04, Ilvendor id - 8,9 OxOA,OXOQ, Ilproduct id -= 10,11 Estos dos identificadores permiten la conexion can el driver de WilJdows; al iniciarse la conexion, Willdows recibe los dos identificadores y local iza el driver necesario para la conexi6n. En el caso de no localizarlo, permite la instalacion de los recursos necesados para la conexi6n; en este caso a traves del fichero mchpcdc.inf suministrado por Microchip. Por otra parte, al final de la libreria se encuentra la descripdon textual del dispositivo que sera detectado par Windows; para ella utiliza USB_STRING_DESC. Se pucde modificar a gusto del usuario, teniendo cu idado con la definici6n de la posici6n de s~rjllgs y sus tamai'ios. ch" USB_STRING_DESC_OFFSET[[-[O,4,12[; char const USB_STRING_DESc[]-1 Ilstring 0
4, //length of string index USB_DESC_STRlNG_TYPE, Iidescriptor type Ox03 (STRING) Ox09,Ox04, I/Microsoft Defined for US-English Ilstring 1 8, l/length of string index USB_DESC_STRING_TYPE, Ildescriptor type Ox03 (STRING) 'C',O, 'C',O, '5',0,
Ilstring 2 30, l/length of string index USB_DESC_STRING_TYPE, I/descriptor type Ox03 (STRfNG) 'C',O, 'C',O,
256
10. USB - Universal Serial Bus '5',0, , ',0,
'R',O, '5',0,
'2',0, '3',0, '2',0, , ',0,
'0',0,
'e',O, 'm',O,
'0',0
I; EI ejemplo (flgura 4) realiza la lectura de una senal analogica par el canal AND y envia el dato por el USB elT\ulando RS-232, de forma similar al ejemplo 2 del lema 7; cl dato sc enviani solo en eI casa de que vade la tension.
,-,'" •
Figura 4. Ejemplo I
AI iguaJ que en el tema 7 se puede utilizar el Hypertermillul de Windows (0 cualquier otro visor del puerto serie) para visualizar los datos. En este casa, hay que esperar a conectar e l US B para que aparezca el puerto en las posibles conexiones del Hyperfermillili.
257
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
......
,
is
-,.~-
.o~
(I
V"lt_- ' 99V V,,"_1 .4')Y V"lt_2.4 W V"lt_2 . 9911 V"II_-3.49Y V"II_- 2 9911 ~,,]t_-8
oov
Figura 5 . Hypertermlnal conectado ill puerto VJr1uai
#include <18F4550.h> 'device "dc- lO IEu5e5 HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,QSBDIV,PLL5 , CPQOIV1 , VREGEN luse delay(clock - 48000000)
linclude
void maln ()
(
BYTE 1 , j , addres5, vallle;
int16 q,ql; noat p; ql-0; setup~ddc""porcs setllp~ ... dc
(ANOI VSS_ VOO),.
(ADe_CLOCK_INTERNAL);
.set_ adc_ Channel (O),.
usb_cdc~init
I} ,.
u5b_ inlt () ..
do usb~task() ;
i f (usb_enumerated(})
q " read iiJdc(); i f (q! - ql)
f
p o. 5.0 • q /
1024 . 0;
printf(usb~cdcJutc,
258
" \n\c Volt"ge - tOl . 2fVN, pi ;
10. USB - Universal Serial Bus
----------------------~ ql-q : delay_ms (500);
} loIhJ.le
(TRUE)
J
Fig"r.. 6 . Programa del ejemplo 1
La configuraci6n de PIC18F4550 es la habitual, tan sOlo debemos tener en cuenta que la frecuencia debe ser de 48 M1-Iz pero que utilizando el bit de configuraci6n PUS se puede emplear un cristal de cuarzo exterior de 20 MHz. Es importante cantigurar el pin de detection del sentido de transmision (USB_CON_SENSE_PIN) para podercan trolar la conexi6n 0 desconexi6n del PIC al USB; 1a conexi6n fisica se mueslra en la Figura 4. Antes de utilizar el puerto en el programa hay que initializarlo (usb3dc_initO y IIsb_initO) y, "muy importante", comprobar que ha sido enumerado par el HOST (usb_enumeratedO). Con el fin de inicializar 0 resetear la coflexion con el USB se debe reaJizar una Hamada peri6dica a la funcion II sb_tuskO. Al iniciar la Simulaci6n con el PLAY del ISIS, el sistema permanecera inactivo hasta que se conecte el USBCONN (con las flechas rajas correspondientes). Tras confftar, por primera vez el USB, Windows solicita la instalaci6n del driver (se debe indicar el directorio donde se guarde el fichero mchpcdc.inf) (figura 7 y figura 8). , -~
_-------_._.-
__ __
.---------------...
-
--_._-_......_-,__
~
..... __. ._. . ----,-..-.--.. -,_._... --.. ----.-. ----_ . _-------.---.... -.---~-_____ J
~-
--~-.
c..;..
----.---.... -
...................
"
, --~-
.1...I
-
•
-
_ _.._. - D _ _ ... -
... _ -
-~ ...... ... _ _ .. _ . .... _'*'c"" ..._
_~
11 -
.-
1
Flg"r.. 7 . Pasos e n la Instalad6n del driver
259
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
-------
Tras esta instalaci6n y cada vez que se coneete el USBCONN apareccra el puerto COM virtual en el administrador de dispositivos de Windows (figura 9). Tambien desapareeeni el COM virtual cada vez que se desconeete.
'--"--".1--
-*---_.-
-.
-
..
Flguri'l 8 . Pasos en 1.1 'nstaladon Icontlnuadonl
--'"'..-.1---... -_...-..--._--.. . .-> ...__ - ..-. ._,--..--- .oa..,,, ---..-.'--"-
-.11'-_
·
-~--
,..
·010 _ _ _ . " _ _
"'~ ,,_
··
- .J---~.'"" J _ _ _ -=-l .JW .. 'H , , ' .J _ _ _
.. .11.-"·
Figura 9 . Puerto COM virtui'll en el administ,ador de disp ,uitivos
En este instan te el PIC queda conectado ill PC Yse puede abrir un visor del puerto serie para comprobar la transmisi6n (Figura 5). En los ejemplos de CCS tambien se pueden encontrar aplicadones para Mass Storage Device Class (MSO) y HIIII/all lllterface Device Class (HJO). Ejemplo 2: Enviar los datos de Ulla conversion AD a/ puerto USB como Virtual Comm para de/ermillar /a respllesta ell Iazo abierto de WI homo (figura 10). Compollelltes ISIS: PIC18F4550, USBCONN, CELL, RES, LED-BWE, SW-SPDT Y OVEN.
El ejemplo es similar al anterior, en este caso se utiliza EXCEL con Visual Basic, de tal forma que se pueden guard ar los datos de tiempo y temperatura en una hoja de calculo y representarlos grMicamente.
260
10. USB - Universal Serial Bus
Figura 10. Eje mplo 2
Pa ra utilizar el fiche ro en Excel, HORNO.XlS, se debe configurar el puerto serie virtual: en el fichero esta definido como el puerto 9 y ademas habilitar las macros en el caso de tener Excel p rotegido (Herrt/mientas > Macro> Segllridad > Media/Baja). Para cambiarlo a la medida del usuario hay que abrir el editor de Visual Basic (He~ rramientas > Macro > Editor de Visual Basic), buscar Commport = 9 Ysustituirlo por el numero adecuado de puerto serie virtual (figura 11) . ... """~ ~"" (_&"ttO~1 (Uo k!!
C_luuoal ..... l
("b) _' ", .Col-..I"!·' .1I_
H . ... no·O ...... A ._etO · ' ."I>~ .~<
.C,*"",Qn·i ;11 .In·~J'".''''lo
.•
" I
.lft ••, _• • c~"'''C '''' ''d'a.r. ....... , ... " • 0
.. ,
.1'0«." •
.... '
.
n: ...
.- .
h
Onvo". & .... C _ ' t o o l CUokU C-....."''''''I.lla<'kColo< • POliO, zs~, 0) C_I>lor • tGBllOC, !!IO, ZOO)
Figura 11 . ModifiC:iIIc1on del puerto Jerle
Ilnclude Idevice 4dc-10 Ifuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODE8UG,USBDIV,PLL5,CPUDIVl,VREGEN luse delay(clock-48000000/
Ideflne USB_CON_SENSE PIN PIN 82
261
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC 'include void main ()
(
inc16 q , n; float p; inc qL; int qH; int nL,nH; setup_lIdc_pocts (ANO); setup_a dc (ADe_ CLOCK_INTERNAL) ..
n-O; usb cdc init (} ; usb_initO ; delay_ ms(JOOO); /IRetardo para poder abrir el pue r to con el excel do
I usb_task (I; i f (usb_enumerated())
sec_adc_chiHlnel (0); delay_us(10); q -
cead_adc();
p - 5 . 0 ' q I 1024 . 0; nL- llJiIkeR(n, 0) .. nH-makeR (n, 1); i f (usb_cdc_putreiJdy())
usb_ cdcyutc(nL);
i f (usb_cdcyutready())
usb_cdc_puCc(nH);
qL-~keR(q,O};
qH-make8(q,1); it
(usb_cdcJ1ucready()
it
(usb_cdcyutready(}) usD_cdc_putC(qH) ..
del"y_ms(SOO);
usb_cdcJutc{qL};
lISe envian datolf cada 0.5 s
n++;
J while (TRUE) ; FigurOil 12. Program.. del ejemplo 2
Para la simulacion se debe abrir el fichero de Excel (figura 13); en este fiche ro existen dos botones para abrir el puerto y cerrarlo (tambien hay un boton para borrar los d atos adquiridos). Antes de abrir el puerto se debe arrancar el ISIS e iniciar la simulaci6n del programa, a continuation se pllede conectar el USBCO NN y, una
262
10. USB - Universal Serial Bus
vez conectado, se puede abrir el puerto con el boton de Excel para iniciar la adqu isiciOn.
., . .. "- -- ... ....... ... .. . , . • , ... . , " ',. •
.
u
•
I:
~"
.
-
•
•
••
'
,-
.
•••
•
'
.
"
.
.
r
,
T
-
·-
·.t-' -···
-. _.
.. ·\_'/....,'_1
.
-
....
• •
.•
,
.
•
1-'
"""" ..
. . .
.
.
,.
.._. .,. ... •
.,
Figura 11. Fichero de Exce l
Para ver la curva de calentamiento se puede cerrar el interruptor del homo de tal fo rma que comience a calentarse (figura 14).
"-
- -•
,
9
~-
,.......,
, ..
• , • :: • •• ••
·• ·•. ··•. -•• ·"• "
"
· ·_. _,J_,_, • •• •.•
-.
-.- , • .._. .... •• ...-••.--.••
.. ,
•
........
..
r
-
-
.-..
--
,
.
-- ,-,J
-.
'-''''''''
"
I
•
-
.i
Figura 14. Datos adquirldos y su representacion
263
Esta cdiciOn 5e tennin6 de imprimir en junio de 2008. Publicada por AlFAOMEGA GRUPO EDITOR, S.A. de C.V. Apal1ado Postal 73-267,03311 , Mexico, D. F. La impresi6n y encuadc:maci6n se realizaron en FUEI'ITES [MPRESORES, S.A, Centeno No. [09. Col. Granjas Esmeralda. IZlapalopa. 09810, Mexico, D.F.
Los microcontroladores PICmicro de Microcrup ban experimentado un importanle aumento de presencia en el sector industrial, esto se debe, entre otros mucbos faetores, a la politica de apertura que tiene Microcrup, ya que facilita y patencia el desarrollo de herramienras por parte de atras compaiHas. En lenguajes de programacion destacanlos compiladores C para PIC de companias como CCS Inc. EI desarrollo de un lenguaje C especifico para un microcontrolador pennite obtener el maximo reodimiento del micro. Los programas de simulaci6n permiten depurar hasta casi la perfecci6n el disei'io antes de ser montado en una placa. No haec falta explicar el ahorro de tiempo y coste que ella supone. Tal vez uno de los mejores simuladores para microcontroladores es ellSIS de PROTEUS. En el capitulo I de este libro se hace una breve, pero intensa, descripci6n del ISIS de PROTEUS, de forma que ellector pueda afrontar la simulaci6n de disei'ios sin ningun problema. En el capitulo 2 tambien se realiza un repaso del compilador C para PIC de ecs; obviamente no puede explicarse este lenguaje en un solo capitulo, pero tras su lectura cualquier lector podci afrontar los pequenos programas de diseiio que se exponen en los siguientes capitulos. Del capitulo 3 al 7 se desarroUan los distintos m6dulos que integran un PIC (ADC, USART.CCP, etc.) a nivel hardware, enlazandolos con las correspondientes directivas y funciones del C. En cada capitulo se plantean y desarrolJan sencillos ejemplos de aplicaci6n que ellector podnl. estudiar y, como no, modificar para completar sus conocimientos. En el capitulo 8 se expone la gama alta (PIC18) y en el capitulo 9 una aplicacion
mas compJeja, el RTOS (Real Time Operating System). Tambien en estos capftulos se incorporan dislintos ejemplos de aplicaci6n. Por ultimo, en el capitulo desarrolla el USB de reciente incorporaci6n aIISIS.
to
se
Este libra esta enfocado a (odos aqueUos lectores movidos por el interes aeerea de los microcontroladores PIC sin necesidad de tener conocimientos muy profundos en la materia. Los ejemplos desarrollados no tienen una excesiva eompJej idad. son breves y permiten ir afianzando los conocimientos capitulo a capitulo.