Beruflich Dokumente
Kultur Dokumente
Y SIMoLADOR PROTEUS
PARA
MICROCONTROLADORES PIC
Eduardo Garcia Breiio
S.MULADOR PROTEUS
PARA
MICROCONTROLADORES PIC
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
(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.
Buenos Aires. C.P. 1057 - Tel.: (54-11) 481 1-7183 f 8352, E-mail: info@alfaomegaeditor.com.ar
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 Ariunecicos ..................................................................................................................... _....... 27
2.6.3Rclaciona1es .......................... .......................................................... ........................................ 28
2.6.4LOgicos ..................................................................................................................................... 28
2.6.5Dc biLS •.•.•.•.•.•..............................................•..•.•.•..•.•.•.•.......................................................... 28
2.6.6Puntcros ................................................................................................................................... 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 c. .... ................................................. ....................................
.57
3.2.1 A travcsdc la RA.L\I ................................................................................................................ 57
v
3.2.2 A traves de !:Is dircccivas ........................................................................ ........................ 60
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............. ............................ ........................................................... .... 95
4.4 Tl j\ l£Rl r Tli\-lER2 .................... ................... ..............................................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
8.2.7 l\lemoria EEPRO,\] ............................................................................................... 219
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
8.2.12.9 Modulo detct:tor de Alto/Baio Voltaie ..................... .. ................................ 230
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 arquitec-
tura 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® desta-
can, por su potencia, el PROTEUS VSM de ©Labcenter Electronics y el compilador
C de ©Custom Computer Services incorporated (CCS).
Por otra parte, tenemos el compilador C de CCS, ya que despues de conocer y "do-
minar" ellenguaje ensamblador es muy titiJ aprender a programar con un lenguaje
de alto nivel como el C. EI compilador CCS C permite desarrollar programas en C
enfacado a PIC con las ventajas que supone tener un lenguaje desarroUado espe-
cificamente para un microcontrolador concreto. Su facilidad de uso, su cuidado
entomo de trabajo y la posibilidad de compilar en las tres familias de gamas baja,
media yalta, Ie confieren una versatilidad y potencia muy elevadas.
Al escribir este libro se plantean muchas dudas, sobre todo a la hera de concretar
el temario. Escribir profusarnente sobre los PIC 0 sobre el PROTEUS 0 sobre el CCS
C supone, casi segura, escribir un libro para cada uno de estos temas. Por ello, el
planteamiento ha sido diferente, desarrollar los conocimientos basicos necesarios
para manejar cada programa, apoyarlo con el mayor numero de ejercicios y dejar
al lector la posterior ampliacion de conocimientos. Asi 10 he decido en base a la
., experiencia que me da estar impartiendo clases sabre PIC en la carrera de lngenie-
ros Tecnicos Industriales, especiaJidad de Electr6nica Industrial, de la Universidad
Politernica de Valencia.
Can estas premisas espero que ellibro sirva a lector para aumentar sus conocimien-
tos sobre el PIC 0 para iniciarlos en el casa de los que desconozcan este mundo.
ix
1. ISIS de PROTEUS VSM
Capitulo 1
-
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.
1
Compilador CCCS y Simulador PROTEUS para Mlcrocontroladores PIC
.......
--~
•
Ventana de TrabaIo
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 contex-
tual 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
,,~
~
~
=0
= ..
...-. .
.,,~
A'" ""'"
"""
~""
OI''''TT~
2
Flgur.. 4. Modo componentes 1lgl.lr.. 5 . Boton ~plck~
3
Compilador CCCS V Simulador PROTEUS para Microconlroladores PIC
y modelo
Encapsulado
para plllce
=C::,~.,- . " ••
Peque/lo &dilor de Jaa caract.,ristlcaa
de un componente (sltullr.,1 ralon aobr. "I
4
1. ISIS de PROTEUS VSM
\O!'
"'
ci~~:jl
..
Ie oro--
_s::: e
Figura 8 . Se 'ecc:lon y orienta tion 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<ipiz blanco (figura 10). Se
pueden colocar varias componentes del mismo tipo simplemente realizando varias
pulsaciones. Para termmar de colocar un componente se debe selecdonar otro com~
ponente de la lista 0 pasar a OITO modo de trabaja.
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 rea-
lizar 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 orienta-
cion 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).
5
CompUador CCCS y Simulador PROTEUS para Microconlroladores PIC
--
+ OragObioct
f"Pt<JI'I'I'!iM
0C ....
_ _
'"""""
"""
TKIH)&.~acciIn
-
,~
C_llIOdov_
·•
~-.
t Y-Mr,,,,
•
o DIsJJIay /IIodoI tWI>
~- ......... ""'"
""'"
•
-
,1J'-"Des¢~.,
"....
J: p..o:.gn; 1001
f--J'- _C
FlgLlr~ 12. Men';' contextual de un componente ~ctlvado por el boton derecho del r~ton
-
UI
.-.
~~
_..... ,--
t--
t:=-. -
R.UtANlMIEl'·
~.
~
M'
RllllP<lD
+01 ,,~ ---
" !Nil
To
- "
1ICW'T1000000'OO
~RI,.
'tC111101.1CC1'7
~
•
~
~
~.-
PIC'6f~nI
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
- ,"
-
-"
-----',
- '
'
-,---
-•
••
Para unir los componentes con cables hay que situarse en los extremos de los termi¥
nales, el cursor se convierte en un i<ipiz verde (figura 16). Ahora se pueden ejecutar
dos actiones 0 if marcando el camino hasta el destino con distintas pulsaciones
(figura ] 7) 0 reaiizar, directamente, una pulsaci6n en el destino y dejar que 1$1$
realice el camino. Para ella, debe estar activada la herramienta TOOLS -7 Wire
.,.; :
Alltor ollter.
,,
"
R ,
.1k·
7
Compilador CCCS YSimulador PROTEUS para Microconlroladores PIC
Las uniones entre cables se pueden realizar de forma automatica. Para ella, mien-
tras 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 pulsacio-
nes sobre los puntas donde deseamos realizar la union.
~ 21
T
1 22
2H;
t-'
24
25
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 so-
bre 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.
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
8
1. ISIS de PROTEUS VSM
El etiquetado tamhiEm permite unir cables virtualmente. Para ella, tan sOia es nece-
sario 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 in-
troducir la etiqueta, ademas de seleccionar posicion, orientaci6n y estilo (figura 24).
• ••
''''
-..- .-
r-.. ~
figura 23. Modo label Figura 24. Vent"nill de edldon de etlq ... t!'tas
9
Compilador CCCS y Slmulador PROTEUS para Mlcrocontroladores PIC
""""""
"""'00
~~l::::8~g ~oo----I~o
""""'"
RD1~1
"""""
""""'"
'''''''''''
''''''''''
""""'"
RD71PSP7
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."'""", '"
'" SWl
"'0"'" """'"
IVol/ANl
""'''''''''''-
R,A3.lAN3/YREF.
~~""15W~'"''''
""""",
""'''"''' R1
''''
Tan solo queda modificar las caracteristicas de los componentes que 10 requieran,
por ejemplo modificando el valor de los componentes pasivos. Para ello, se seleccio-
na 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
- - - - . - -
- I'll!)
- fdJl Compon.m
-
.......
c--.~' JIII ......
...... I I
IH"\
I '" I
-'-
H~
--
I~
I I
~,- lRESIO .111 :.... '" Oil '""'
I
r_ _ i _
[ _ _ POI.-' -''-''''''jIOCUII.
[dill _ _ lOW.
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 carac-
teristicas del mismo microcontrolador.
U1
......,
*
OSCI/CLKIN
<>=CU<<M
.cuw""", '"
""
j ~-
'''''OM'" •
~~,t sw.".,,..,
SW1
RIll/ANI
"""',...,. '"
''''''''''
Ro\3IAN~'
j ~''''''
- """""-
""'''"''' RCIJ(l'1050{T1CKI
RC1If1OS!iCCP2
RC2i'CCPl
,.,
R1 --
'''''''KOO.
'c",,,•..,.
"""'00 ,
"""""'"
RC71RXJOT
".~
11
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC
-
Proo"""'~""""Wm! :ikHa ' Hido M
-"
IUP~'
""""" - -,.....,..,...-
1 :"';" AI
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
------'-
......
Setup ExterMi Text ~di1:or ...
1. bot"ra,asm
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 ha-
bilitar 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 fun-
dona 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).
13
Compilador C CCS y Simulador PROTEUS para Mlcrocontroladores PIC
La opcion STOP para totalmente la simulati6n mientras que PAUSE la para de for-
ma momentanea permitiendo haeer usa de las herramientas de depuration.
La opcion PASO a PASO permite trabajar en tramos de tiempo predefinidos y, ade-
mas, permite utiliza r las herramientas de depuracion. Esta opcion esta ligada a
la configuraci6n de la animation (figura 36): SYSTEM ~ SET ANIMATION OP-
TIONS ~ 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 r.-- Show\l"'-'~""Ptobet? ,;
''''''''''I*F,.., ~ S'-lo\Jir:StaIoolPn7 ';;
S.-.gltSt.,> T_ P;-- S'-W..... oII • ..,Cdo..?
IoI ... SPIC£T__ Ps;- s,-"",..c......."",,_?
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
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 pue-
de 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_
, 15
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
Desde esta ventana tambien se puede reinicializar la memoria EEPROM del mi-
crocontrolador 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
16
1. ISIS de PROTEUS VSM
............
.. ........
...........
.. ,e " ,. " ...
............
"'
...... ,., ...
...........
............ ."
............
.. "' ...... co
.. .. .,.,... . ...
, ......
"'
CPU DATA MEMORY
• """"'''''"''"''' " ,
=-•._. .......... ........ .. .
............ . ............
0(" . . . . . . . . . . . . . . , . . . . . . .
.,.:."';-.... ..........
- . ........ ,... ". ,................
" ,
, ......
• • j . .. . . . . " .......... "
" .. "
::... ,.:: !:....ijQilij;t.ldiM*i@I;I'
-•._.. ............ ... ,,".........
. ...... .
- ........
......
..
".
",... ,.""
....
" ........
:r; " .... ,. .. " ........ " . ..
•r .................... "
" ,.""
,
",... "" ... ""
..... ""J'
.. ,' ...... ,,
.............
Fi gura 40. VentitnillJ de depuraci6n
- --, x
..- "
data y el fonnato tam bien se pue-
de 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
_ _ ............. h _ _ l
.'"
O"'W-
t' ASOt;S-.g
-,-
""''.....
'''
• ~""'
1iIotMiI8'..... ~
(' T""'lAj.....I ..... _
A ~1Ioo~'J,JN_.. _ . - .
___ ont_AU_ ... _
(' W<IOd(2b,mJ
<' ocatlltwaodf4¥eof
<' o-ll,o,'otd J8 b,<eo)
<" 1£[[ FN fll¥_)
<:- I££E DIdIIa 18 t.,teoJ
<' ttj .... fIooI13~1
0 ~FkooII'bJo'e.Il
<' --
<' , ......
,, ~',.
tI__
IFOATA
J..-ND
c--IGnC!wn;lo
3~
:£)
3
1 .. 11,... I
18
1. ISIS de PROTEUS VSM
H7 le'L1nltCj'
llt9 kbcLtnit( \'
,U~ pc~Lb..JI" ups (mUE);
188 lccLputcC"\ft.t. t o ... \n") ,
.~ entra en ella.
.~
Trabaja en modo continuo hasta que encuentra un retorno de cual-
quier subrutina.
Trabaja en modo continuo has ta que se encuentra con un punta de
'[l] ruptura.
19
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
Hay tina ventana de diagnostico que facilita la depuracion, almacenando los erro-
res, 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.
Se pueden configurar las opdones de esta herramienta desde la opeian DEB UG~
CONFIG URE DISGNOSTIC (figura 49). En la ventana se muestran los componen-
les 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 ....... &_".,.... ~ ... \2
~.""5po<II""-
--_
--...-.
.....
20
1. ISIS de PROTEUS VSM
I'oeo~
• ID-SYSTl ~ IISISIPRDSPlC[]
• ~ WllfDRD..()QO.B~P IU!§)
• DS2405 IUl1
• DSl40'S 1U21
• DSZ405 lUll
I 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
Tras la simulacion aparecen los diIerentes resultados del analisis; en e1 item SO UR-
CE 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 EX-
P LOR ER (a esta opci6n podemos acceder a traves de distinlas apdones: caman-
do 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
.. -_
"....
~-
r..~.-- . ,
.......
~--
---
.--- -
~ ......
. ~-
~-
___ hot _
11---
£I~""'" ....
__..• • • • .--
..- _. .- -_.
------
!:..
y
.- ~
--
.-
.-.-
.-.-H5
.-'-'-
Figu,OiI 52. u ventanOil Design Explore,
22
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, ob-
teniendo 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 ca-
racteristicas 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 ma-
quina; un cross-compiler es un compilador que funciona en un procesador (normal-
mente en un PC) diferente al procesador objeto. EI compitador CCS C es un cross-
compiler. 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.), sumi-
nistra unas directivas especificas para PIC (tldevice, etc.); ademas induye funciones
espedficas (bil_sctO, etc.). Se suministra can un editor que permite controlar la sin-
taxis del programa.
NOTA
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.
_4_ ."-
-- ----
\1'_ ... _,_,
t··~ .;.,.._- ":::..._
-.~ ...
....- -=- "iil'-T"-
•
Pll' ..
,,- •
dooloy .1ocl<
.~,,'_a ~ Directivas
.-______ Funcion
U)(n.~.u. •
..
• nrO
ve.O .u.pu••b1t Pl".,O
' ••
..
OU'P'J'_bU'III.IO
_.. ..
.n_~ OTO
• _ - - - - - Funcion principal
•• '''P.t1. ."_o J.T<;(:_IJITlAAo\l, J.t<:C_DN."
.
...
•• , 11••• 0
• ...bI. .".... ~. IX. nXlJlll
.""'".::""0",.," qlobal ~
.... - - - Instrucciones
....
~ Comentarios
24
2. Compilador CCS C
Int8 I27U
Long 80UL
Signed INTI6 BOL
Float 3.14F
Ch", Con comillas simples 'e'
\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 decla-
rar, 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:
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,,().
void Mllin ( )
26
2. Compilador CCS C
• STATIC: Una variable local se activa como global, se iniciaJiza a cera y man-
tiene 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
-
~
Asignaci6n de suma (x+=y es 10 mismo que x-x+Y)
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)
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
27
Compllador CCCS y Simulador PROTEUS para Microcontroladores PIC
,-,
b-4°++3;
2.6.3 Relaclonales
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
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
(sentencias) ;
return (expresionj ..
return e x presion;
Donde expresion debe manejar el mismo tipo de dato que el indicado en la de-
finicion 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 <fidlero.h>, que se pueden
utilizar mediante la directiva tinell/de <fichero.II>.
• 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
i f (expresion_1J
sentencia 1 ;
{else i f (exp:;esi6n_ 2J
sentflncia_2 ; )
[else
31
Compilador CCCS VSimulador PROTEUS para Microcontroladores PIC
if (exp:;esionj
{
setltencis_l;
selltellcid n;
(else
11
Ejemplos:
IF (A==O) 6= 10;
ELSE C=5;
IF (AI=1) 8=10;
r 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
C4se constante 1 :
lJentencias :
bre4k :
~4se cons t ante 2 :
sentenciaS ;
bre4k ;
~tault :
entencias ; 1
NOTA
33
Compilador CCCS YSimulador PROTEUS para Microconfroladores PIC
Ejemplo:
,-----------------------~
<2> -0
""
Switch (A) (
case 0:
<2>--1 ~2 ~, 8=1 ;
break;
case 2:
8=2;
"" break;
2.8.3 FOR
Se usa para repehr sentencias.
sentencias :
NOTA
34
2. Compilador CCS C
For( ; }
sentencias;
Ejemplo:
For (N=1;N<=10;N++)
(
Printf("%u",N);
}
'-
while (expre~!on)
s ...ntencias ;
35
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
Do
.sentencia.s ;
while (expre.sionJ;
While (1)
sentencias ;
Do
I
sentencias :
While (1)
Ejemplos:
•
~ While (N)S && M<10)
(
~I
. "" )
[ ] I. '-
36
2. Compilador CCS C
- Do
(
[. ,] •
)
A=1 :
6=2:
¢ 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 programa-
dar quiera. Se pueden colocar en cualquier parte del programa y con dos forma-
tos:
31
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
A 10 largo del presente libro se iran viendo varias directivas en su ambito de apli-
cadon particular.
38
2. Compilador CCS C
'davic" PIC16F84
LP, XT, HS, Re, NOWDT, WDT, NOPUT, PUT, PROTECT, NQPRQTECT.
Idevice PIC16F84
#{uses XT, NOWDT, PUT, NOPROTECT
#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.
#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 ni-
vel de los registros especiales. Las funciones se dasifican por bloques funcionales.
40
2. Compilador CCS C
ENABLE_IN-
JUMP_TO_ISR SETUP_OSCILLATOR( )
TERRUPTS( )
CONTROL
EXT_INT_ LABEL -
PROCESOS SLEEP()
EDCE( ) ADDRESS( )
Gr.TENV( ) READ BANK() WRITE BANK()
BIT CLEAR() MAKES( ) MUL() SH1FT LEFT()
ROTATE - SHIFT_
MANEJO BIT~ BIT_SETe) MAKE16( )
LEIT( ) RIGHT()
BYTE
ROTATE_
BIT_TEST( ) MAKE32() SWAP( )
RlGHT( )
AIlS{) COSH( ) LABS{ ) SIN()
OPERADORES
ACOS( ) DIV() LDEXP( ) SINHII
MAT.
ASIN() EXP() LDlV( ) SQRT()
ATAN() FABS( ) LOG() TAN()
ATAN2( ) FLooR( ) LOGlO( ) TANH()
CESrA..NDAR
CEIL( ) FMOD() MOD'I)
COS{) FREXP() POW()
TENSI6N DE
SETUP_VREF( ) SETUP_LOW_VOLT_DETECT()
REF ERENOA
NDCONVER· SET AOC CHANNEL() SETUP AOC PORTS()
SI6N SETUP ADC() READ_AOC()
ATOF( ) ISLOWER(char) STRCMP() STRRCHR()
ATOi( ) ISPRlNT(x) STReOLL( ) STRSPN()
AT0132() ISPUNCT(x) SfRCPY( ) STRSTR( )
ATOL( ) ISSPACE{char) STRCSPN( ) STRTOD( )
CARACfERES ISALNUM() ISUPPER(cllar) STRLEN() STRTOK{)
C EsrANDAR 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 ()
TIMERS
GET TlMER2() SET TIMER1() SETUP TIMER 2 ( )
GET TIM£R3() SET TIMER2() SETUP TIMER 3 ( )
41
CompiJador C CCS YSimuJador PROTEUS para MicrocontroJadores PJC
42
Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC
I Comando de maneJo
. de flcheros .
I < ISarra de. Comandos ~
"''I! ' )1 bX
, • I
Pesla!'!a
..,
1 __.....
r
, .. .- ------------ Barra de
- j SubComandosr
--.....
Barr. de
/: ...... . ..
........
.......
.M"'_"
g§[::~:.
" .. "._.
..
IZONA DE C6DIGO I
Ventana!> _ ....
aUlliliares .... -
:::--:::::':'';;..'"-'''
---.-
. . ,. . _
-. - - ~ - --
....... M . . . . . . .
. ,.... , -
_--_..
, -~ -
44
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."
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 ro-
yecto 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•. _ _ ..... _ ...
---
--
~-
--=-
~-
1_ .... ' -
',~ ... ---
'''''''''_1loo'_.. _ruW'!
,_~q
-'--
=-...
~M
46
_ _---=2", C
"o:..
mpilador CCS C
,,,
Me:', cea\ IIruoeb"'_I. h"
Lee c
_t.h h
,
,6 vo~d .... in
•
9 atl:cup_...:Ic_p.orta lHO
10 •• t-lIp_ad<: .lJ)C_CLOCK_ INTERN.lL
11 " .. CUll_Sill r.u.S!
12 8e""p_t.1-= .. _0 RTCC_lNTEIltUL RTCC_DIV_l
13 !I .. t."p_t.~r_l Tl_D I$l..8U:O
1'1 !lct.up_t.UD!:r_2 T2_DlSlEILED
15 le<l_1nit.
""
""
.,..
·· - a~
--
,
·
1
'0
"
12
~
..a.aQftCT
-
~~
ItOCPo
1I'DD1IW
H"
""
Figura 8. EI "(hero de cabecera con la con"guracl6n del PIC
Asi pues abrimos un fichero fuente nuevo donde se escribira un programa para en-
cendef 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.
47
CompiJador C CCS YSimulador PROTEUS para Microcontroladores PIC
linclude <l6F876.h>
......
- - -. -- - -- ..........
---.. ---.
-- '- .
1.i:E!"-..6:<.--
.' • ......
_.-
• •• 0
-'~'--
... . •. . "".
l!l1ioowt FJo s-...a....
! .. : t!?J!!!'t'~ t "'!'~
+-'".
, ..
,----;;;;;;-:;-,
I
-
~
--_.._. _- • .--
-'-
.~-
.....
_
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 con-
traer las fundones y dedaraciones de control para optimizar la visualizacion de los
programas mas complejos (figura 11).
48
2. tompilador CCS C
.
•
"
- ,,• ,m •
I.
!Scl_, eioclt
J ,• , .... no_1>
_11.
,• V<
f ,• _l_~r1._b
" CIoIl.,__
•• ..
"" bll _ _ t
","1.,__ ,_n.o b
..
U
"
no,
....
•
,, Clel., clocl< "" •
,• p ... r~_b
,• d _.11
,• • .,t._trU_1)
' .... rto_b
..
""
"
.a nUl
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 configura-
cion (Valid Fllses), hojas de caracteristicas (Data Sheet) y una ventana completa don-
de 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""".
~
NOTA
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 __'
'-'- . _-
Tras la compilacion se obtiene, entre otros, el fichero HEX para programar 0 si-
mu!ar el PIC. En OPTIONS ~ PROJECT OPTIONS ~ OUPUT FlLES, se pueden
configurar los ficheros de salida (figu ra 16).
".
~
-~
r _
r _
(' Am.-
(' ~ . coo
.C(lD
~~
r, _
=-
r ~_
_
--
--~
~-
~
~
-...
r _
lJ,i
, ~
...
-~
fOfCol_1Io
r_
-~
(O" ,alO -~
r _
"-
.-~ (' lIalO r _
r »""Ia.
Gl,b>lOof;_
11',... .........
~~ 1'_1'0'....
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 pro-
grama compilado (figura 17). Hacienda una puJsaci6n en cualguiera de ellos se
abre una pestana con su contenido.
!- - ..
I - Iii: .......
-",-
" O.
j -",-
'"~
-
O~
0.-
I 0-
~
Om
o.~
0*
"'-
Flgur.. 17. Ventilna auxilia, para ficheros
Dotds II (:II(
52
2. Compilador CCS C
l t d_i ni t.i
133- 13_ 8ITOF.P1
.- ~;~~§~:::::~
IJ_ InN!'
..... "'1"""----301•
O.uo.r-- o.p.,[_
...
ASOIZSq
< W..a(2~1
DotJlIoWCllC!((~1
QuoOW"!8~1 (
IEEEFboII(~)
IEE£ DoobIII (8 ~J
"" HMd\fIo,oI;(3b\>INJ
• -,.,fIooot[( btoIosl
.; iigC_
... 11 -
53
Compilador CCCS VSimulador PROTEUS para Microcontroladores PIC
54
3. La gestion de los puertos
--'-
Capitulo 3
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 memo-
ria RAM).
NOTA
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).
ESCRITURA or "
DATOS
I- 0 or
ESCRITURA 0
TRIESTADO
lECTURA
DATOS
?-
Fig"r .. 2 . Estr"ct"ra baslca de "" termi"al
Tambien existen algunos terminales que poseen unas caracteristicas especiales, por
ejemplo:
56
3. La gesli6n de los puertos
-- - - - - - - - ----=-----'---
_., _., _., _., _., _., _., _., R-Blu '"'
II IIBPtJ !INTEDG 110CS !lOS!! !P8.' !PII2 !1'$1 !PSI) I W-Blu ,"""fII.
." ••
U_BIt no Im.,...,..ntado
.. ... c.orno B
............ ~ un POll ....
L- ,
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 ne-
cesaria la utilizaci6n de transistores.
=BYTE variable=constante;
'BYTE TIUSA - 011 85 II V<!Iriable TRISA en a5h.
'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
Una vez definidas estas variables se pueden eonfigurar y controlar los puertos a
traves de los comandos de asignacion.
TRISlt ... OxFF; II 8 termin.tles de entrada
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
Manejo de sentencias:
TRISD-Ox OF ;
ir (POR TD , oxon PORTD 1- OxltO ; II comprueb<ll los 4 terminales de
II meno./:" peso del plJert o D y si son
II 1111 saeo!! por los 4 termi.ndles de
II m<lyor peso el data 1010 .
Existen unas funciones de C que permiten trabajar bit a bit eon los registros 0 varia-
bles definidas previamente. Estas funciones son las sigu ientes:
ir Ibl t _test(PORTB,O)--lJ bit_ clear /PORTB , l); 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:
58
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"" SW-SPST-MQ.4
RAlIANl D1
""_.
AA31AN~'
""""'if ·
""""""
RA5IAN4iSS RCtVTl0S0/T1CKI
RClfT1OSIiCCP2
RC2JCcPl R1
RC"""""- ".
'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 II OPTION_REG en Blh.
void main () (
b1t_ cleat"(OPTION_REG, 7); II Habilitacion Pull-Up
bit_ set (TRISB, O); II 80 como entt"ada
bi t_ cleat" ITRIS8, IJ ; II B1 como s.llid"
bi t_ clear (PORTB, 1) .- II Ap"gd el LED
!>'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
59
Compilador CCCS y Simulador PROTEUS para Microconlroladores PIC
#define PIN_AO 40
#define PIN_A1 41
60
3. La gestion de los puertos
Hay que asegurarse de que los registros TRIS estan corre<:tamen te definidos. En-
tonces, 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 t (input(PIN_ BO) -- 1
output_ low(PIN_Bl! ;
else
61
Compilador CCCS YSimulador PROTEUS para Microconlroladores PIC
'use fixed_io(b_outpu/;s-pin_bl) +-
voidmain(} {
poTt_byullups (TRUE),.
output_ lo.,(prN_ BIJ;
.,hile (1J
62
_ _ _ _ _ _ _ _ _ _ _ _-=
3. La gesli6n de los puertos
void mo!in () {
"option &'- Ob01111111 .. II Pon.,o! 0 e1 bit 7 del OPTION REG
/1 (pull-up hiJbl1itadoi
- tcisb· axOl; II RBD entrada, RBl salida
~portb - OxDD ; II Apaqll el LEO
while OJ
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 (dec- 0;dec<10;dec-H-) I I Cuenta digito decenas
for (ud-O;ud<lO;ud-O)
OUTPUT_A(Ox02) ; / / cat_ D - apagado, cat_ U" encendido
OUTPUT_ B(OISPLAY{ud]}; / / Diglto unidades
delay_ ms(50J; / / PlIrll evital'" parplldeos
j f (dec_O) output_a (Ox03); /1 S1 decenas - 0,
/1 cat_D - apagado
else output_ a(OxOI); 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
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.
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 varia-
ble 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}
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.
65
Compiiador C CCS y Simuiador PROTEUS para Microconlroladores PIC
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:
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.
66
3. La gestio" de los puertos
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 defini-
das las conexiones utilizadas y la posibiJidad de cambia r de puerto.
II As defined in the following structure thtt pin connection is ~s follOws:
,.,.
enable
/I
// "D'
// D2
/1 D' D'
// D5 D5
// D' D'
// D7 D7
//
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
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
Iloedte led'" getenv( "sEr:PQRTB"'J II This puts the entire structure over
II t he port
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
,--CAlIBR,,~R
lCOI'
[
I
t ... .. ITlI····
U lli"'L::: .'.
~ qO •• ~
z
"',
,
:.
·..
···
~
IT'
c
~
.. ,.
•
'" Rl :
·
• .
If' ze 01 ~4 1 00
''
.
~ ~ I ••c
" I t~
i .~: : • "'. •• '",.
-
68
3. La gestion de los puertos
linclude <J6F876.h>
'fuses XT, NOWDT
I~se delay(clock- 4000000,
linclude <lcd.c>
luse stand.. rd_io(CJ
hse st .. ndard_io(AJ
'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/ I II Detecta botdn de selecci6n
item++: /1 Si pulsJ Jumenta la variable
delay_1M (300); II Para evitar rebotea
lcdyut;c('\f',:
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;
70
3. La gesti6n de los p.uertos
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.
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
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 figu-
ra 16). Disponemos de los componentes 1515: P1C16F877, RESPACKB, LGMI2641-
BSIR Y SW-SPST-MOM .
PlERTO A
"
~-.---- ..
Figura 16. EI esquema del ejemplo 4
'1nclude <15£877.h>
Ifuses HS,NOWDT,NOPROTECT ,NOLVP
'use del~y (clock-20000000)
'include <HDM54GS12.c>
linclude <graphics.c>
'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
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) ;
lr (inpuC_state{PIN_A3)-"0)
glcd_rece (64, 40, 78, 60, 1,1);
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);
74
3. La gestlon de los puertos
•,
' DSB 0
· 0 GUill
a •
1
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 fun-
ciones 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'.· . '} } ;
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
" , P , ",
lif lIefinpd U'iPJlortb_kbd
Idpfinl' spt td s kbd e se t _ tri s_ b ( x )
Iplsl' --
Idpfinp Sl't_ tri S_kbll( se t _ tr is_lI exJ
lendiF
t
Id fln p
,.
.,. , P
'dl'hne COLI ( 1 « 5)
Idefine COl1 ( 1 « ')
IdPf{np COl 2 (1 « 7)
eo ell e21
- " "
RO
• 1 2 3
Rl
• 4 5 6
--- ., I--iI
• ~, 7 8 9
.,---
"•• R3
0 #
*
0
~
Hi-
r"-
76
3. La gesli6n de los puertos
2 3
4 5 •
7 • 9
* 0 •
1 2 3
4 5 •
7 • 9
* 0 •
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 compo-
nentes [SIS : PIC18F876, LM016L Y KEYPAD-PHONE.
l i nclude <l6F876 . h>
'fuses XT , NOWDT , NOPROTECT , NOLVP
luse delsy(clock- 4000000}
linclude <lcd . c>
linclude <kbd. c>
77
Compilador C CCS Y Simulador PROTEUS para Microcontroladores PIC
void main ()
e/llu' k;
illt x:
lcd_lnitO ;
kbd_illit ();
pcrt_ bJull ups (TRUE) :
ledJutc ("lfListo . . . InN) :
while (TRUE) (
k - kbd_qetc() :
x-k-48; II Conversion numedea
if(k!-O} /
iflk--'·')
lcdJ1.lte( ' lf');
else
IcdJutc (x) ; II Impr i me car~cter
delay_ms (!jOO);
78
=
3. La gestio" de los puertos
=
[""'1"" LKI. I I
· .', ~
1 3
t;~ • ,, It ~6
i'= 7 - 9
-:'1
,
,
• • 0
'C'
." r
I -~~\j~~ ~~"
.b
linclude <lcd.c>
linclude <kbd.c>
linclude <stdlib . h>
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
pnntf(1cdyucc,'"lfpulsac tecla lIn"); II Plica primer dato
whlle(i<-2j ( II FiJCiJ tres diJtos
k-kbd_getc()J 1/ Lee el teclade
79
Compilador CCCS y Simulador PROTEUS para Microconlroladores PIC
,.
....n
,--------1' 1 2 3
5 6
8 9
o #
"'C' .....
80
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 semi-
periodo 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:
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 semipe-
riodo 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 <kbd. c>
IUSE STANDARD_ IO (1.1)
VO I D MAINO
81
Compilador C CCS YSimulador PROTEUS para Microconlroladores PIC
82
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 pro-
ducirse la interrupdon, el PIC ejecuta un saito ala rutina de atenci6n a la interrup-
ci6n, 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 con-
sulta 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 reali-
zar 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 rogra-
rna, 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
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
NI"",, 2 d. I. PU. n
~
"".
-""."".
Veclo. de Rf, ...1
..........•.._..........._..
Vecto. de 1n1al'!'\l!)CHln
°
--.
Pe;;""
Q1FFh
Pallll\l \
OFFFh
,om,
PlIogll\Il
11FFh
1FFFh
Pegl"" J
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 tam-
biE!I1 10 estan, los flags se activan en e1 caso de producirse algunas de las interrup-
dones, 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
Cuando se responde a una interrupcion, el bit GIE es inhabilitado para evitar inte-
rrupdones 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 interrup-
cion mediante el testeo de los diferentesjlags. Losjlags activos deben ser "borrados"
antes de abandonar la rutina de interrupci6n para evitar reentradas errOneas.
85
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
Bil7 BitO
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.
86
4. las interrupciones y los temporizadores
87
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
Los registros PIRI y PIR2 rontienen losflngs de las djstinlas inteTrupdones. EI rom-
pilador 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 ~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.
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.
90
4. Las interrupciones y los temporizadores
enable_interrupts
ITCON(OBh) PIE1(SCh) PIE2(SDh)
(nivel);
GLOBAL
11000000
COh
INT_RTCC
00100000
INT_TIMERO 20h
00010000
INT_EXT
10h
0000 1000
INT_RB
08h
INT_AD
DIOOOOOO
40h
00100000
INT_RDA
20h
00010000
INT_TEE
10h
00001000
INT_SSP
OSh
00000100
INT_CCP1
04h
00000010
INT_TIMER2
02h
00000001
INT_TIMERl
01h
00010000
INT_ EEPROM
IOh
00001000
INT_BUSCOL
OSh
00000100
rNT_CCP2
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_, ,.
'"' '-"'-'
GLOUL oero
!U
"
~- me
lIlT~RD
IN'T_trr ...
x01'.O
"rr 1108
• ...
llfT_ ~
11fT TOE
,~-
,~- T1I1LRI
,~- T1I1LJU
•
•
•
•
" - ,~ CCPI
'1,-
" ,~- CCN
lifT_SSP
,~-
'"
,~- lIiJ!1COL
,~- E[PIIOII
d, m'_TlHRO
Figura 5. Parte d~ flc:hero include 16F87x.h
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).
92
4. Las interrupciones y los lemporizadores
---
Ejemplo 1: Enccndcr y 'wagar, c0l15ccIIliuamcI1fc, 1111 LED ell la paWla RB7 wando sc pro-
duzca un cambio de nivel cilia patilla RBO (ver figura 7). COmpOIlClltes: ISIS: PIC1 6F876,
RES, LED-GREEN Y SW-SPDT-MOM
OSC1JCLK,.
OSC21CLKOlJT """NT
.S>
'---.l!.f MCUWppITh'V ""
RB3IPOM SW-SPOT-MOM
RAW"'" .S<
RAl/ANl
RA2lAN2NRU-
RA3lAH3NREf+
"'" p'----,
""""'"
RB11PGD
RA4/TOCKJ
""",....,
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) ; II Habllita int o RBO...
e x t_int_edge (L_tO_H) ; II por flanco de subidll
enllble_interrupts (GLOBAL) ; II Habilita into generlll
while (11 { II Buele infini to de espera
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, incre-
mentado por hardware y pragramable. La cuenta maxima es de 255 (el incremento
es constante e independiente) .
EI bloque del T1MERO puede funcionar como WATCHDOG, 10 que permite que du-
rante el funcionamiento normal del microcontrolador, un desbordamiento (0 time-
Ollt) del Watchdog provoque un reset (Watdldog Timer Reset). Para evitar el desbor-
damiento 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 mi-
crocontrolador y que no requiere ningun componente extemo. EI Watchdog cuenta in-
duso 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.
94
4. las Inlerrupt:lones Vlos lemporizadores
-------------------------
bit 3: PSA: Asignad6n del divisor de frecuencias:
1=WOT.
0 - TMRO.
001 H 1,2
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 op-
TlON]EG),
00000000
RTCC_ INTERNAL .
GOh
00100000
RTCC EXT_ L_TO_lI
~ 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
RTCC_DlV_S
02h
00000011
RTCC_ DIV_ 16
03h
00000100
RTCC_DIV_32
0,"
00000101
RTCC_ I)IV_6-'
OSh
00000110
RTCC_DIV_ 128
06h
RTCC_DIV_256
00000111
07h
Setup_wdt(modo); OPTION]EG(81hI181h)
0000ll)()()
WDT_18MS
OBh
00001001
WDT_36MS
09h
00001010
WDTJ2MS
OAh
96
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
EI compilador C suministra una sene de funci ones para leer 0 escribir en el Tl-
M£ROIWOT. Para escribir un valor en el registro :
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:
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).
98
4. las interrupciones y los temporizadores
99
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
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- 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.
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.
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
Ta'l .. 4/Fosc
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)
lOODOIOl
Tl_INTERNAL
85h
10000 111
Tl_EXTERNAL
87h
101XXJ011
Tl_EXTERNAL_SYNC
83h
00001000
Tl_CLK_OUT
OSh
OOOOOOOO
TI_DlV_BY_l
OOh
00010000
Tl_D1V _BY_2
10h
00100000
T1_DIV _ BY_4
20h
0011 0000
Tl_ DIV_ BY_B
30h
set_timerl (valor);
donde valor es un entero de 16 bits.
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
T2_DlSABLED OOOOOOOO
ooh
00000100
. Tl_Orv_BY_l
04h
00000101
Tl_Orv_BY_4
05h
000001 10
n~ DIY _BY_16
06h
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
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
intl Lont-O;
mi.tln ()
while(l) ,.
105
Compilador CCCS y Simulador PROTEUS para Microconlroladores PIC
templ.,()
int cont-O;
output_togg1e(PJN_BlJ ..
while (cone<2i II Par.!! cont<lfr 2 V6t;"e" 0 . .5 "eg
cont++;
m.!!in ()
while(l} (
templs(); II t1am"d" " 1" funci6n de ~emporizllci<'ln
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
106
4. las interrupclones y los temporizadores
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 (ci-
do 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.
lillt_ ext
void fUllcion_ext_int (} ( (I Funci6n Intereupci6n
if(cambio-O) ( /1 Flanco de Subida
set_ timed (0); II 1lliciali~a TMRl
ext_int_edge(O,H_TO_L) ; II COllfigueae paed flllllCO ba)ada
cambio-1; II COllteol de cambio de flalleo
else ( II Flanco de Bajadoil
TFB-get_ timed (J ; 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 ( II Fin de pulso ...
Iluevopulso-l; II Pulso a calculae
void main ()
led_illit(};
107
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC
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)
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
.""
~A:lJM'J/'J!IIu. ..'"D
~.T
~.
PIMINMT RCOI1IOSOITIOCI
ftCV!10M U'"
RC2J<:Crl
lIQIIel/lJc:~
ftC4'i",,"~"
~~~D
-~.
ftCT"'-M)l
-------
Figura 2' , Ejemplo 5
#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
Ejemplo 6: lntrodllcir los datos, a traves del tec/ado, de la velocidad de WI motor de co-
rriente 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.
110
4. Las interrupciones y los temporiladores
"'• 123
• 5 •
7 8 •
J~==-~ . * 0 #
1'---------'---=---=====""~.;;••
;;;.'elecCI6N'
I _.,...rto
. . t"" ~ 1~"_Jl ..._-P
IIOOL!:UI nabl.
~!:UI ta
I'OOl.U" n
IOOI.EIJI
.~ t
""""*<I
<Ioou
.~
., de"_ pel!
•• de ....... u;.,_';t.b_ lcd
." '.'
.' ,:
I' ", ie"
fIbyt. led • IlKFU
.U "ofi""d l&54I_portb_ IO'<!
<by led
I
-. . . . . . ..,..Ied. 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 revolu-
clones 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 <lpr876.h>
'(uses XT,NOWDT,NOPROT~CT,NOLVP
CHAR K,kllnt-'O';
Char PWMH-O,PWML-O,
lcd_ init II;
kbd_init ();
PORT_B_PULLUPS (TRUE! ,
WHILE (11 {
k-klX1_qetc
i f (k-'\O') k-kant;
11 Z
4. las inlerrupciones y los lemporizadores
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} ;)
113
Compilador CCCS YSimulador PROTEUS para Microconlroladores PIC
-----
-
'" ., '"_.- .---.
I -- ...-=,
-~
.".....
~
*--
~
.
~! 4~ ~i M_~
-
_Id
,,,,,,,, '
-"*""'""..,
""'~.-
~
~
_: ."
.
,
7
~.
~.
":4~
." . . .-
~,
•
-
*
,
-----
~
~,-
~
I
*
-7
~
'" 7
114
4. Las interrupciones y los temporizadores
CHAR D6 , FUNCION.D6,CON_D6 ;
rNTl CNT:
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 .!!nt~$ .•
vnid 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
WHILE OJ{
IF (Fr,JNC!ON_D6--l} RC2 - 1; t. Si ~uncion 1 enciende He2
IF (roNcroN~Dfi--3) Si ~unc1dn 3 dpdga RC2 •• ".
RC2-0; /, F:spera un tiempo para no provocar una ~unc.i6n 2
DELAY_MS(400); I. no desead", .
FUNCION_D6-0;} / Vuelve d funcion 0
IF (FUNCION_D6--2) ( " Si tuncion 2, un" vez encJ.ende led ..
CNT+~ ; 'I seguncM ve% 10 apaga, asi C'ontinuamente
IF ICNT-O) RA5-1;
ELSE RA5-0;
FUNCION_ D6-0; 1 Vuelve a tunclon 0
J
J
Figura 29. Programa del ejemplo 7
116
5. Convertidor Analogico - Digital
Capitulo 5
;~~~g~A ,V
-f'>-rJ.--.{'-c- "" ';,~ I.__-,I
VJ1L. I ,"D SALIDA
DIGITAL
SiH
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
Date digital
Moduro D/A
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 .
."
--
D-
.- ".
... o "v...
••
I ...............
- ...
0--
O-
r ... ~-
S:: 1IAlI_
..
.... E --
u_
eM
j',.,......
." , '- .,
1-001 !
- " ' , .. --'!""'"'-.• ~
ClrcuJlo
-
'_0
..... -".-
. ; ~) AID
'-
, .... ,OJ'.
- ....
'_
' .. _;!O J_ .. I
:--
5
lLSB=---=,4,8mV
1024
119
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC
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] = Canal 7, (RA7/AN7).
bit 2 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
ADFM:O
, 2 10 7 , , 076$ ,
000000
W;, ~
,
,
, ,
, ,
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 re-
gistros.
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.
122
5. Convertldor Analogico - Digital
• Tiempo d e adq uisici6n (T"cJ: tiempo necesario para que se cargue el con-
densador 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 de-
bajo de los 10 kohm).
EI tiempo de adquisicion dentro de los margenes tipicos es de, aproximada-
mente, 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 en-
cender 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 Frecuencl.l del dis osilivD
Opera tio n ADCSI ;ADCSO 20 Mllz 5 MHz 1.25 r-rnz 333.33 kHz
2T_ 00 lOOns\ 400n5 1.6, 6 ,
400 nsw 1.6 jlS 6.4 jlS 24 jlSV)
8T
32T"",
01
10 1.6, 6.' , 25.6 , 98 ,
RC II 2-6 J.lS 2·6 ItS 2·6 IlS 2-6 j.ls\I/
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 tNtCIO CONVERSI6N
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
Considerando los dos tiempos (de adquisici6n y de con versi6n) la secuencia com-
pleta 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 adquisi-
cion, cosa que no ocurre en los segundos.
124
5. Convertldor Anal6gico - Digital
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.
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)
125
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
pc.-r.J
'"
ou
<'.
RJ:.
A~5
'u
A'\"~ A'O .~ "10"
M.
. ~.
selup_adc...p0rtJi (valor);
-
~~ ~ ~ M'
, , , , , , ,'" , ..U.-,""N"UX;
~, , , , , .
' ,-- , , , .. ~'_A~"_ A"l_A~4_A ~~_ A " . A'i?_ vss_\ lu:r ,
, , , , , ....._A..'CA.~l .. >ll_"-':'
M"
" " 0
, ". -,. , ,
...
M" " " "
"
,
" " " '_. " ,
,
,
,
,
",-':0_""" _"~l_".~_"55_'
....,,_"I>'_..-.:l
""...- '''_''li'_'-KH
KEr
till
l UX
" " " " " l'Io-,""~"1.I.I'GS
, " , '_.
0
" " ,
'"I " " ...... " "M_, 'Rt;r_ "R~r
valor = read_adc 0;
Lectura del resultado donde valor es un entero de 16 bits 5egUn la directiva ~DEVI
CE AVC- empleada. Dicha directiva trabaja segun la tabla:
ADC= IO , 0-3FF , ,
AOC-II , , 0-7FF ,
ADC"'- 16 O-FFOO O-FFCO O--FFEO O-FFFF
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.
126
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.
,..",
IFUSES XT,NOWDT
IFUSES
luse delay(clock-4000DODI
linclude <LCD.C>
void main II
int16 q;
no~t p;
for (;;1 (
set_lIdc_chatwel (OJ; I/Habilitacion canal 0
del..y_us(201;
127
Compilador CCCS VSimulador PROTEUS para Microcontroladores PIC
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).
,-'""""-
O~F.... w/C
' _ConoIonl {- !
U!.O.N<>doIr*-
--- ---
e_
edl~_ .
_ Pa~
__
128
5. Convertidor Analogico - Digital
~ 2~.45C
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);
Ejemplo 3: RealiZllr 1m bar6metrolaltimetro que mida e'l Kpa, Psi, Aim 0 mfs median-
te SII seleccion por IItI pllisador (figura 20). Compommfes 1515: PIC16F876, MPX4115,
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 ecua-
cion de la tensi6n de salida es:
Vour - Vs .. (0.009 .. P - 0.095) ± (Error Presion .. FactorTmp .. 0.009 Vs>
.... ... ~
TJVN~FlIClDN. -
v.. .. v.·(.OI»'p...O!iI5) t: Bftw
•• VS_S.1Vdt
TOP .. OIOeS""C TYP
I ,.'" ~
~
;; .,.
'-'
u ~,~!
~
"~
~e~2~~~~~$SS~~~i2aS§~!~~
PreIan /tit 10 -*' ..... iIIlcPa
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
u-
--o.....,. ..
MPU t1 5A. /IIIPXMllSA SeI1e5
,
- ......
u-
d-
~~ ,
1
..
>O-
J J J J
• _• c • • , ,
u
~ ~
• • ,_
~
u-
i
S"
lO-
J ~,,- • • • •
J J
,. ,. -...
_10-
-10-
-
IhIlS.,. I"'~
tl5j1r"
131
Compilador C CCS y Simulador PROTEUS para Mlcrocontroladores PIC
LCD1
'W~
p; 99.87 Kp(I
IT; 25.35C I
t m .1. .. .... ..
8i!iSSatl:!E;
...
..."'"',. wl"
~ ~
'~
",.,e
:=
ji"'
-
--- 0
--
N,
-
0
,
J1 ~""I
. ,
,
Jo, ~".,.\
'. f!
"
R'
7
1 ...-
~
.,~
""""'<=T'CK!
,
-- '.
""11'~
~,
11 ~'t'j 7 ~
I ~ -
~
Rn R2
~ 1<1(>
~
.....,...... ~,-
- t-
•
- ~-~. - - .- -.~
~-
- _.
Figura 20. Ejemplo 3
linclude <16F876.h>
Idevice ildc-10
IFUSES XT,NOWDT
'roSES
'use delay{clock-4000000}
'include <math.h>
'include <LCD . C>
'BYTE TRISA .. Ox85
'BYTE PORTA" Ox05
void mdin ()
int16 q;
lIOilt cv, cr, cemp,y, cf,error; //Vari ... bJ.es ecuac1.one9
float p,presjon,pres_iltm,pres_ps~,~lt, /IV~ ri~ble3 c6lcu10 pre;sion
//y altura
int cnt-O;
bic_set (TRISA , 2);
sflcup_adc.....POrts(RJlO_ RJll_RJlJ_ANALOG); //RJlO y RAl ana16gica, Rli2 digital
132
5. Convertidor Analogico - Digital
&etup_.dc (ADC_CLOCK_IN"TER.NA1.);
Jcd_inH ():
for (I;) (
133
Compilador CCCS YSimulador PROTEUS para Mlcroconlroladores PIC
deldy_ms(100/:
}
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!
134
_ _ _ _~5 . Convertidor Anal6gico - Digital
for ( u l (
set_<1dc_channel (0);
delay_us,201;
q - relld adel);
p - (-2.0) + (4 °q /1024.0);
N
pr.1ntfflcdyutc , "\fADC - t41d , q/o'
prJ.ntf(lcdyutc, "\nVolt"ge _ IOl . 2fV w , pI;
delaY_ill.! (lOO}.-
I
135
6. MOdulo CCP - Comparador, Captura y PWM
Capitulo 6
Cada mOdulo eep posee un registro de 16 bits que puede utilizarse de las tres
siguientes formas:
137
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC
11"" ModoPWM.
138
6. Modulo CCP - Comparador, Captura y PWM
Debido a que los dos m6dulos CCP utilizan los temporizadores, cuando estan acti-
vos los dos m6dulos se puede dar alguna interacci6n entre eUos. La siguiente tabla
muestra dichas interacciones.
• 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<O>)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 configurar-
secomo entrada poniendo a unoel bitTRISC<2> [y/oel nuSC<l>J. 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 tem-
porizador 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 se-
nales 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 produ-
cir 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 conta-
dor 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.
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»:
1---1··~·~:'::··~~·~··~·~~~·~~~~·~~·············
Modo de comparacion, lanza accion especial (CCPxIF ::;: 1, eCPl re-
1011 setea TMR1, CCP2 resetea TMRl y lanza una conversion AID (si esta
habUitada).
140
6, Modulo CCP - Comparado1, Capfura y PWM
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)
Oulplll
V mod t
T" I I I
T-
141
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
La resoluci6n de salida E'S de hasta 10 bits_ Para que este mOdulo fundone corree-
tamente, 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:
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 I
• • •
Cicio de TBbaJo : TMR2- PRZ
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 tern-
porizador base con el que se campara el contenido de estos registros es el TMR2.
La siguiente ecuadon permite calcuJar eJ valor del Duty Cycle:
142
6. Modulo CCP - Comparador, Captura y PWM
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.
Fose )
1g - -
(
resolucion == F I'WM bils
Ig2
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
\,.(20.10' )
"\. 1200
resolucion = > 10 bits
Ig2
Para poner en marcha el modo PWM se deben dar los siguientes pasos:
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
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:
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 <lcd . c>
,byte PIRZ - OxOC
#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
TF8-CCP_l i IICargiJ del valor del reqj~tro CCPRI en nanco bajada
~etup_ccpl (CCP_CAPTURE_RE) .. I/ConflguriJcion modo Cilptura en Danca subidil
cambio- O; //Control de cambio de {Janco
void main (J
lcd_init (} :
setup_tilllltr_ l (Tl_INTERNAL! ; //Conffguracion TMRl
SBtUp_CCp.l /CCP_ CAPTURE_RE) i IIConflgu r acion lIIodo CClp t ura en fJdnco subida
camb..!o - 0 ; //Control d e cambio il 0
145
Compilador CCCS YSlmulador PROTEUS para Microcontroladores PIC
J while {TRUE/ ..
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<Jl
WCUW'opITHV
-~
..... fI.../" Ri!I$
AA21N<2NREr R_$C
~H' "117"'''0
~ "~,,;~~;;~I~~~-
--,
1tC2ItC~'
~C4ISWSD"
"-~
ftce/T)CICII
~C7I1Wf)T
Figura 7. Ejemplo 2
146
6. Modulo CCP - Comparador, Captura y PWM
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 (ajus-
tando 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 () ( /IFunci6n de in t errupci6n
if(++cambio~l) (
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
void main (J {
Ejemplo 3: Mediante 10. collfiguracioll del mOdulo CCP lanzar ulla cOllversion AD, auto-
matico. 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.
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.
Con el valor obtenido de la conversion se puede obtener una senal PWM propor-
donal a este valor. Para ella se utiliza e l mooulo CCPl, dado q ue el valo r de la con-
version 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).
148
6. Modulo CCP - Comparador, Captura y PWM
•~"
r ~lFQ
I
I
I
I LtO
,. ". ,. .-I , ,I
'.
I NO.1
I
I
" " " " " " " "
IJ "
-'-
"'T'
LMJ9 14
I
,- "n
I
" I JI " ••I' '" ".,II _~ I '"1 l'
-
l l
L ~~",~==:t--i-----1:;:::-'I-+-
M
V' f.llV-11V
- - ---- ~r'----'--,'- :~
"." l """"-
SlGMAI
JOUIICI
149
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
void main () (
disable_ interrllpts (global) ,.
150
_ _ _ _ _ _ _ _ _ _ _6_
.M ._uIO CCP - Comparador, Captura y PWM
_6cd
NOTA
Puede detecta rse un error en el m6du lo ecp en modo PWM con valores altos
(ver el llltimo ejemplo de este capitulo).
EjempJo 4: Mediallte la cOlljigllracion del modulo ecp iallUlr 1I11a collversion AD allfo-
ma/ica. COli eI il(l/or obtellido represel1lar la tel/sioll de mirada ell 1111 display grajieo (fi-
gura 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 mues-
trear; 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).
151
Compllador CCCS y Simulador PROTEUS para Microconlroladores PIC
while (TRUE) ..
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: OS-
CILLOSCOPE.
-"
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, mu-
chos 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 abier-
to 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 nue-
vo punto de operati6n.
y(l) /
y, .-.----.----.- +,---::-=~---
Ftt«o ~ .." ' _ pond-'t. I i
I
h
r II j
" I
I(S)
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:
proporcional +
e(kT) -~-<a ~......:.---+( u(kT)
+
derivativa +
'---+{ c ) , - - - - +(
155
Compilador CCCS YSimulador PROTEUS para Microconlroladores PIC
( AD )
[
I
SET _POINT
I ,on
!
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)
156
6. MOdulo CCP - Comparador, Captura y PWM
~----g
--,...
c--.t floloron<o
.rfM
"" N -"- ·
I '" I
I <- I
...
usa. ~ odoI r ill: 'Hid.".
--, -
A6i"""odPl_
_jll 20
·
·
-_.-
• jlll,C""'II,,,,"h' - - - - ,-
r",,- D_ ~
~,-
-" "
--.
!AI_FIa
. ·6 -
~. '""'
1II'Iooe.--
.
t[ -
__-~
l'D l._
(,11 _ _ .. _
_..._- •
157
Compilador Cecs y Simulador PROTEUS para Microcontroladores PIC
- ----------
~---------
_.--
-- '<Ill C..,ponenl
'r;;;
" "--
C-""''l.... M'
I I ~
I '""' I
_.-.
~_f..
_1_i'C} ."
_. ··
~!"C:i;..,...1V<Il
-
~T_CmototoI
,
1 _.... ~"'f'Cl
__ 1 '- i,
·
E_""":;.o.-.
E_ _ Pal......
E60~ ___
"""'_-..JIIlIlIo
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
~
:- BAT1
•
SW,
SW$'ST
•• 3IilIIl QUlin
-
()toI'!T1~ ,~
+ ,-
.~
••
~ .. ....
~
~
~
~.' ~.'
ov,
~
--.
--
Figura 25. Menu Graph
159
Compilador CCCS y Simulador PROTEUS para Microconlroiadores PIC
---
..... PC_
"'-,
f
I
SPlCtO_
s.l:~
,;
II
Figura 26. C<lracteriS"tlcaS" del graflco
,;
""
~-
"
/1 /'
:/ i
, , /
/ ',
,:
• ,,i/ !,, TO = 11 ~tr) =5.5- 4.5 = I
,,' :,,,
,!j ,, ro= 1, -I, = 18.5-5.5 = 13
,, ,,
• ,,
• "0=y , - Yo = 276 - 25 = 125.5
U1 -Ur) 2- 0
•
..~ T...J/
k
K = 1. 2 10 = 1.2·13 =0.1243
p 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
IINCLUDE <16F877.h>
Idavice adc~lO
luse delay(c1ock-4000000)
Ifuses XT,NOWDT
IByn; TRISe - OxS 7
void main () {
inC16 valor; //1ectura de temperatura
int16 control; //va10r del PWM
noat a,b,c ; //conSCl!Jntes del PID
float temp_limit ; //tempe rl!Jtura a alcanzar
noat rT, eT , iT , dT ,yT, uT, iTO , eTO, 1T_1 ,eT_l: //variables de eeuaeiones
float max,min: //limices mJxirno y minimo de control
min-O . O; //lnielalizaeion variables
max-IODO. D:
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 .. //periodo de 1" sella! PWM a 1m,.
setup.eepl (cep.pwm); //M6du!o CCP a modo ~
setup_ ade_ports (a11_ analo~J .. //Puerw A "na16gico
setup_ade(ADC_CLOCK_INTERNAL); //reloj convertldoe AD inteeno
set_adc_channe1 (O); //Lec tu!'"a por el eanal 0
while (lj (
valor-read_adc() ,. //Lectu!'"a de 1a temperatu!'".3
yT-valor' 5000. 0/1024.0; //conveesion a mV (O.25Va 250mV)
rT- temp_llmlt;
eT-rT- yT; //CalCulo erroe
iT-b ~eTdTO: //e.Heu!o del teemino integral
161
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
•
•
/ "-
• "-
I
•
/ "-
•
·
·•
•
.000.120
•.
•
I
I -0.62 5
T_ t QOm
·• I Min - 0
•. /
• /
• II
" ~I
Iii
Figura 29. Respuesta con T - 100 ms
162
6. Modulo CCP - Comparador, CaplUra y PWM
•
·
·
•
~
· /
/'
·
· / .......,,,
1"-0:12.3
· / .
c:>'62.151
-- r-
· !/ MU~OO
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 (figu-
ra 16). CompOllclltes ISIS: PIC16F876. IlIstrmnclltos: OSCILLOSCOPE.
""~
-- ,
~
-
~,
,•
~
~~
AA'iAH'
'""-- ,
~
~.
~ .... """'"
1aJ1.'I'GO
FtCWT10S01llClO
RC11T1~
"""'"
"""""'-
""""""
""""' ,"
~
~~.
""''''''
Figura ~1. EJernpla 6
163
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
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) ..
165
7. Transmlsi6n serie
Capitulo 7
Transmision serie
7.1 'ntroduccion
Los PIC uHlizan, entre otros, dos modos de transmision en sene:
• 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 transmi-
sion 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 ge-
nerar interrupciones cuando se produce una recepci6n de datos 0 cuando la trans-
mision 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 direc-
cion. 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 comtmica-
cion. 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 tra-
yeS 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
169
CompUador CCCS VSimulador PROTEUS para Microcontroladores PIC
170
7. TransmisiOn serie
TXREG
TX9=1 1 bit i
~.-- .. -.. -.... - -.. 1 6 bit
IREGISTRO DE DESPlAZAM!ENTO DE SALID~
171
Compilador CCCS YSimulador PROTEUS para Mlcrocontroladores PIC
,., ,.,
......... ... ... .
Buffer 0
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.
ADDEN=l
RX9=1 TEST .Carya solo si 1
00
.\ .'
0
0
...
0'0
0
0 0
0 , 8 bit
,.
\ 0
0
0
0
•
Buffer 0
~
~
RX9D RCREG
173
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
-------
En modo asincrono:
174
7. Transmision serie
175
Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC
Ejemplos:
#use delay (clClCk-20aaOOO) ;
#use rs232 (BAUo-9600 XMIT-PIN c6 RCV-PIN_ C7 , BITS-B)
luse rs232 (BAUD-9500 XMIT_PIN_A2 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~
176
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).
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:
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
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 de-
vuelve 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
1111LCD los datos enuiados y los datos recibidos: In recepcioll del dnto deberti ser por illter-
rtlpcioll dd USART. (ver figura 10). COif/poI/elites ISIS: PIC16F876 y LM016L. illstm-
lIIentos: VIRTUAL TERMINAL.
'include <lfiF876.h>
,roSES XT,NOWDT
'use delily(clodc-4000000)
'use rs232(bilud-9fiOO , xmit"'Pln_C Il, rc_pln~c7J
'include <LCD.C>
void main {J {
int Villar;
while (lJ {
for (valcr"O;valor<_10;valor..o-+)
PU'1'C(val0r } ,
178
7. Transmision serie
1;;=
Alphanumeric LCD
~
Ienviando=9
I
C
:S"~":::~ m
..c1lT'0ISIa':r'! .
~,-
~
~- It~=
I.~
r---'
f-'-
f-'-
tl:u!,,_
£::::::
-- ··
-·
-
q,
:=
-_.... _.......- I
Alphanumeric LCD
CC02
I
~~
recibiendo=9
~-. q,-
~
,"'" .,
~~~
m II. .....
Bofl8!!!S
~
~
~-
~
, 'I' I, ... . .
. ..
~
,• ~-
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 <LCD . C>
IBYTE TRIS A-Ox85
179
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
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 v.1)or) ;
N
,
Can el programa VIRTUAL TERMINAL (baton derecho: Hex display mode) se pue-
den visualizar los datos del bus serie (figura 12).
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
DISPOSITIVO
INTERFAZ
SERIE·USB
1----'"
BUS
SERlE PIC PIC
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
•
•
' ll_
• ~-" • .-M
• . . - . . ... ,001
I ·v--.........,...,
, , _ _ /'04a.O
,5~do-
. ..r
...-.. .........
'~f_
, ..
.~-
,
IIM~Sq>oI_
)-,-.--,..,..
_ .I ........ !«O<Illl'T)
.1-'-"'_«""')
.I~9~!JtP1L)
::£w _ _ (cOM!l
'4J~
· ..Jt..-do <110>
· ""....,.,..do_.
EI/ SIS del PROTE US proporciona un potente componente que permite la simula-
ci6n a traves del puerto serie: COMPIM (figura 18).
182
7. Transmislon serie
P3
_.
O ~O
CABLE
HEMBRA.HEMBRA
+ USB-SERIE
183
Compilador CCCS YSimulador PROTEUS para Mlcrocontroladores PIC
,~.
VSM Mcdol
~~ ~-M
roM'
"""'""
PIpc.tIs-lAft" ',i.oo
""'.
~OotaB..:
•
~,
:f-t>:joAi
'mM
~P"'"
V_B-..dR... "~..oo- :Ho;loAi
V_OotaBb
• :H.-AI
,Ho;loAi
VIIWI P.,q
'"'"
E..,.,..""'"i...........
E!d.do_
EdI,, _ __ PCB~."...
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 VOL-
TMETERy 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).
184
,~,
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 _ _ _ _ _ _ _":.,
•
...... 1*- •
-
---
--.- .," ,
186
1. Transmisi6n serie
-------------------------------
C-.'-_
- ....-. --
.. !."'....... -
~
!"""" .....-
--. .. -........---
r .[..... _ _ _ _
•
.-~
..... ---.- . -
l ..... ..,...... iDI
~-_ _ I&01 ..
"-"-
' ____ ,1oft
1_. -.:,. .; ;. ,
r: ~_._ . _
~, ...
•• •
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 <LCD.C>
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);
Ejemplo 3: Elluiar 1111 data desde el PC al PIC por e/ pl/erto serie. CUQndo 10 reciba debe vi-
sualiwrfo 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 <LCD.C>
chiJC ch;
lint_cd"
void serial isrll {
ch-getch"r{J i
PUts (HRecibido H
);
188
7. Transmision serie
void tn<Iin()
lcd_init () ..
en"ble_inteccupt3 (glob"l) ..
enlwle_!ntercupts (int_cd,,) ;
while (1)
printElled puCe , ~ \n\r V"loc lc .... ,ch);
-- ---····
---- Alphanumeric LCD
-
"",
. ~
"I, ., . ........
'IC''''~
8<i811~1!!!15
~
~
.,!
~.-
-=
"
'-.~
.
.~
•
-
:::
OM
•
0.""",,0
--_. -.-~-
.-.. ~
o E_Ifl,._"""I;.o...,..,.. .. _
!2lE«>,. ... cor _ _ ........
--
"--
R......... _ 0
,
!II_~'OI
189
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
-----
•• • •••
I~
-" =
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 conee-
tados 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-
1\
, ~.
J.,[
!•
~
t ~ .\(l(IoJ-:
« • .oOC>.)':
)'!~STE"
OC,
T
==
"I"
,I
"
I
"" - C8.!S
START STOP
50A
5e,
5 p
CAMBia DE DATOS
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 lec-
tura/escritura (figura 36).
DIRECCION DE 1 BITS
Una vez el master envia la direccion (0 datos), el esdavo genera un bit de reco-
nocimiento (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.
En los PIC de Ia garna media existen dos mOdulos que permitcn realizar una comu-
nkad6n 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 tra-
bajar 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 -< '-0 .< .< .< .< .<
1SMP ! eKE ! DIA [P [s [RIW [ UA [.F [
BII1 SltO
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 di-
reecion 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.
" .
Fig"r .. 38. el registro SSPCON
194
7. Transmisi6n serie
195
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
196
7. Transmisi6n serie
197
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
7.3.1.1 12C en C
Configuracion generica del PC:
/tuse 12C (opciones)
Opciol!es: separadas par comas, pueden ser las siguientes:
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, £ast-4~ODOO)
198
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 transml$l~n
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 transmi-
sian 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 sen-
tido 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 es-
clava 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 R/W a uno, responder con 12C_
WRITE().
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/I-
po"et/les {SIS: PIC16F877, M24512, RES Y LM016L.ll1strumellfos: 12C DEBUGGER.
12C
-.n v i~ndo'"8
-
rtGibil'ndo=6
200
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 di-
recd6n amasa, el byte de control puede tener los vaiores AOh para escrihlra y All;,
pa ra lectura.
,
~
"', ,
M
Clllp !Mblt ",ad, •••
'" ~
"'
..
"'
~,
,\0 lL___________
O\CK "Ci< ""CK "CK
201
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
i2c_ !ftart () ;
status-i2c_ ....Ii te (Ol<" 0) ,.
.
ADQRESS
"'0
~ R'N ~ RfJ.l ~
"
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<t_eep.om(1ong int addIess) (
BYTE dat,,;
i2c_sta.t(j; //Inicializl! 1a tr.JnsmisiOn
I/Escri.be 1a pa1abra de cont1:o1 (dlreccidn Oh
//+ 0 para escrltura)
i2c_wri te (address»B); //Parte alta de Ia direccidn a escribfr en II!
//EEPROM
I/Partfill baja de Ia dlrecc1dn .. escrlbir ..n 1"
//EEPROM
i2c_!ftaIt (J; /IReini.cio
i2c_ wd te (Ol<al) ; /IEscribe 1a pa1abra de control (di~eccidn Oh
/1+ 1 para lectu~a)
data-i2c_read/O) ,. I/lectu~a del data
i2c_ stop(J ; // Fina1izaci6n'de 1a tUlnsmfsi.6n.
return (data);
202
7. TransmlslOn serie
------------------------
Para la aplicacion del ejemplo se utilizan estas funciones en el programa princi-
pal.
#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 <lcd . c>
vold trl6ln() {
203
Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC
·•
C_'H
' _In ·· '_12' · ~,
· •••
'_l.n
• . u. · • ·· .." ,
C.l"
•. u.
00'
·•
' _12'
c. l~' ·· •'_12''"'" ·· .ll,..
·• .....• ··
Sou. •
-- • •
C_02 •
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:: ..-
I2C SENSORTEM
-
I2C E~rom
~ w
.
.'J'l1~ .'
'~
' ''-
,"::-
""
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
Para el reloj en tiempo real 051307 se necesitan conacer sus caracterfsticas y es-
cribir 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 fun-
cionamiento independiente del sistema). Posee una serie de registTos donde apa-
recen 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 mdi-
cados en 1a figura 51. Podemos observar que el cicio de escritura se mica can la
205
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC
- ,,- .--
I ~
• ••
.,,-: . -..-
.~
I~ ~,.", :,;g
,
• _.
..I-' .' "
, 10&.
"H
"'"
""
DS1307 ADDRESS MAP
-- -
DS1 307 TIMEKEEPER REGISTERS
••
• I . 1··1.
Figura SO. Reglstros con dlrecdones '1 formatOI fcorteslil de Oa"..s $1114:.1
.
_1.-
~,
~ - 1QO;()ooOI.~
~ _ "01'
~ _ fIf"-'" 000 OIM.CTIOIO lit.
- - - 'f
1s t 1101000 ! 1
J
A I
._....
J)(lO(XXXJI;
.~I'>,.. _ ..·00 <-.. .
1 A IxxxxlOln I A IXXXXXKlOC I A Ixx:ooocxx I A I p I
~ !>
I Ii I
,•• , ."''' • ~;::r~t'fPIASI.lIO,
.. . 1IO..CMt:o .... _~ .. , , - ;
• • ~tt IS
•
_.D'~
varia - bed;
varia :>:>- 1;
varia , .. Ox78;
return(varia + (vari".» 2J + (bed, OxO!));
206
7. Transmisi6n serie
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)
i2c_ "'rl ce (Ox9l
datah-i2c_cead(!; I/Lectura parte dlta
datal-i2c_ cead(DI ; I/Lectura parte bdj .. y HACK
12c_stopO ;
tura"'datah ; /IConversion a flotante
i f (d<iC.,1--128) turcp*tura+D.5;
return (turd) ;
_. ..--. _..._-
~~i-f*
- I ' " ' 'I I
..... ...-.- ":If' _ .." III.:!' . .
JU1.J'1.I1JU1fl:u1.f'
~ , • r-,
_
.-
I '
,I oo
..., ..... ,
-
_
-..gr '!:l!'
-., .... .-..mt_"" \ 1
lfU1J1Jl.nJ1JU1nnnnIUln..'lJ1.."11UU1.J1IlJl.V1IULI"lJ"U
~,~-~_~.--_I...,
OIl. .'
--
_.-._-"" ......-
,t
~---uu1.I1
,
,t, ,t I ' "
. 1 L---..,-
',V;;-
_1 " I
, I•
~
.-
-...
1 "
't1:' -
, if t
.- '=" ."""
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;
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 co-
municadon serie se realiza por interrupcion.
#include <ltiF876 . h>
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)
209
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
void III/Iin {J
lCd_lnit ();
enllble_intercupt;'l {in t_ rdll} ;
enllble_inteccupts (globlll};
lIddcess-O;
",hile(l) (
it(d4t_ln--'l'l 1/51 es -1· lie lnlcill 1" lectuc" y gCllblldo en III EEPROM
210
7. Transmision serie
j_~OI
I "- II ""'"'" I
Figura 58. Conngur"cion del HyperYermlnal
,.,.
~
~
, . 18
..
~ "
~ ~
211
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
.. . . . .
,, ,, , no, " ",, ,, ,, ,, , no, no", , ,, ,, ....•......•.... . ..... . ..
-
.. . . .. . ..
0000
0010
0020
OOo)O
00·0 "",• ", ",
no ", ",•
0
no
no ", "•
, no
· .•......•..
.........
", "",• ", ", " no" " no", "",• ", · .. s ...... s .....
0 ....
. 0
..... $ . . . . . . , •••
,~,
" "
no, ", , , ., ........... .....
"• " '""u, ",• " " " no", "• no"u• ",• " no" "" no", "• ................
0 0
00'0
OOolO
00&0
gOo'O
no
", ",• '"• • u no", ",• no", ",• , ,• " no", . ...............
.. ........... ...
0
00 ... 0
0000
no
no •
... .. ... ..
.oc, ",• no" "" '"", "", no", ", " " " no", "•, no", ", " ................
DOBO
" ",• , , " no" "" no" • '"• • " no" "" no", " ................
0
0
0
.............. 0
0
..
ODED 0
, •
.~.
01 00
0110
OliO
DUO
0
"
0
,",
. .. . .. . .. . .
" •
0 0
" no, "
0
.0
, "",• '" "• u no " no", "" uo, ",• no " no", "" ................
0 0 0
0
""• uo ", " no", "", no" "",• '" "• u no, "u,• '", "" no, ............
................
0
... ...........
0
0
...........
... 0
0
0 0
0
0
0
01'0
0150
OliO
. .. .. .. " , ",•
0 0
""• no, "",• no, , " no ""• no", "",• no, , "
0 ", ,
. . ..
0
0 ............
................
H
0
0
0
. .. .. .. no, ................
DLTD 0
" 0
..
DUD
, , ", '", ",• '" • ", " ................
..
01~0 H 0
" " no
no, ", , ,• " no, "
0
· ... . ... . ... .. . .
................
no, ", •
.
u" no
" 0
no, ", " , ",•
no ................
", u",• no ", " " "u• no, "u, no", "• " " ...........
0
0
0
..... ...... ... ... ... .. ...... ...... . ...... ...... ...... ... ...
0 0
u"
0
,• '" no " no", "",• '"", ", '", , " ", "", no", ", '", ............... ...........
0
0 0 0 0
H
m "• m m m" m" m"
" ", ",• " "" ... '" ........... 0
no "
m
0
m " m "
'"
... ... ...
H
...
...
...... ... ... ... ...... ... ... ...... ... ... ... ...... ......
...'" m '" ...mm '"mm ... m m '"...
............
........
.................
.............
.. .. .
......... ...... ... ......... ...... ......... ...... ...... ...... ...... ......... ......... ......... ...... ......... ......
... ... ... ... . ... ...........
'" .... ...........
'" '" ... '" '" ...
: S5
'" :H '"
'" '" '" '" :H '" '" '" '"
m
... m m
m '"
·.. . . ......... ..
. ......•....••••
...... ...... ....... ......... ... ... ...... ...... ...... ... ...... ...... ... ......... ...
:H as :n
'"
m m
'" '" '" '" m ................
'" '" '" ................1$S
m :H
'" m
'" '" '" ... ... .. ..............
................
... ... ... ... ....... ... ... ... '"
... ......
'" '" '" '" '" '" '" '" '" '"
... '" :" "'" '"... '" '" '" :ss'" m'" '"'" ... mm ......................
'" " '" m
'" l~S
. .............
............
BS
•
Figura 60. Memoria intern.. de la EEPROM 12C
212
8. Gama Alia - PIC18
Capitulo 8
8.1 Introduccion
En los uitirnos anos, Microchip ha Ianzado varias garnas d e PIC con elevadas pres-
taeones, 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 8
R, PIC18
~~,
Rise '!A,iu:-:;
f CPU f ,H'.TA 4KS)
, 'A~ .
La pita aumenta hasta 31 nivetes. Lnduyen tres punteros FSR que permiten direc-
cionar la memoria de datos de forma indirecta y sin bancos. EI juego de instruccio-
nes 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 avan-
zados (CAN y USB). Can la filosoHa tradicional de Microchip, los PICl8 son com-
patibles 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~ ..
Itf..slT.
. n._.
1....... rri6a RES!'.T. ,
.. 010 I......
,
..1101 ......
~d ... w••• 1It OoIIord .... I<1o •• lit Ihtbordon>IrB' . lit DftbordO",IrB' Bd.
ru. ('\HtT.O!>'l). pu. (PlI IIT.OST). Plio ( ,lIIIT.OST). Plio (PWIIT.OS'r).
~1""'ion.l)' l ~~~R C.prioBo l). l ~.~~It (.,..,IoDol). l ~~TRI.,..,iMO').
, I"'N I'~ I"'N
I"" 1.,,'
~
1'"'' I'~
1'" 1 ,~
1'" I '~
I~ 1 ,~ I~ 1,~
it
~-
,
, , ,
-i".'"~" 1'" .
I 7S(1U UI., . ,,, ....., ", ".... ,,, . "".,
, I" " " "
I" " " "
,, ,,
,
Figura 2. Caraderfrtlcasde PIC18F2420, PIC18F2520, PICI8F4420 '1 PICI8F4520
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 confi-
guraci6n (12 bytes de memoria flnsh) y los registros de identificaci6n (2 bytes
de memoria de sOIa lectura).
215
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
[ PC<2D:O:>
.... 21,,
J}
II
L
Niftll6t1l1ll!
....'""
•
L~tomo'O·
1
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 lec-
rur;] 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, respecti-
vamente. El peL siempre tiene el bit menos significa ti v~ a '0' debido a que las
instrucciones siempre empiezan en direcciones pares.
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.
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
219
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
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.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.
220
6. Gama Alta - PIC18
Una priori dad HIGH puede interrumpir a otra interrupcion. Una prioridad FAST
se realiza sin salvar 0 restaurar registros (ver el siguiente apartado).
puede interrumpir a
221
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
~';:"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
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.
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:
t _ _ O_
n25IJo;z~ad: _ _ 1JoIHi!7
31 Kho-J-.. _ _ ..... - . O -
-
"""
223
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
Todas las lineas digitales de E/S dispone", como minimo, de una funci6n alterna-
tiva 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
_.-
- --'
224
8. Gama Alta - PIC18
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
r~.N"'used
"fITfI.. -' 2",
••
••
....
,,~
~ ,,-
n.
.,-
OR
,. ~
1 ~8 ...
""- 0-.
,....
1)1 ... ~,
--
"'-
11~ ..
.......
~
[. "'IOI:.-,-B.
,. ......-
••
•• ,-
". ••
:32",
226
8. Gama AJtI - PlC18
"''*'PF'~,
,~
• 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
.... ..,
.,-
eo." ,,-
~
' ...,.."""
'] .....'--.d
...
,..... ~
•
R..,....., C1 "'- BRGHUJ( ,,- Figura 12.
Comunicacl6n Sene
--- ._- --~~.- ----_. ----
227
Compilador C CCS y Simulador PROTEUS para Microconlroladores PIC
• Master mode.
• Multi-Master mode.
• Slave mode.
•
~"- SPl ll
,,-...
CXPoIlOOoll
CXP..c.ru· l
DJ'-un:oIl
CKP_l.o;r_l
D_II1'~
U.. I_2
..
Df'IoIdol'!l16
"""'
-
eU .. I2[
" "0
'"
.,-- -,.
r: fIotI.w\...:I
,~
S~OIE.-.:I
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 tempori-
zaciones 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 complementa-
rias 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"""
NOTA
229
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
"'"'"'".
'''''
''''' va ,.,
''''' t>a
t!1
'''''
hns'Sou'-fl
,., L97
,,, 113 ( 1 . ~G
.
,". 1.67
. , ,."'''''".
,n a.
r 200
""
' .113 ""
• 00
,,.
2,19 .~
W
,,,
' .50 063
.83 3.13
230
8. Gama Alia - PIC18
--
,.~
_.'_L..,
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.
El empleo del TIMER1 con oscilador exterior permite trabajar a dicho TIMER1 in-
duso 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
Para conseguir una internJpci6n cada 1 seg con d icha fr€CUenca hace {alta precar-
gar 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
.---
""'-
~
"-'_('<0<01 :'u
---
:,~
r.. •... !SoaI
,--
•• ,, -.~
.--'"
~,
'--
""-.
...-
~_t
- .- ,
. ~">t
•
-
'
~
-~,
1--'
!!_fdh?
"' II.""-*"
_~oe<J
--~
232
. _---
La internlpci6n del TMR1 debera ser de alta prioridad. ll'lS datos ~ ti:rwio se-
gundos, minutos y horas) se deben pasar a dos digitos en BCD.
NOTA
233
Compilador CCCS YSimulador PROTEUS para Microcontroladores PIC
segundos-O; I
i f (minutos--60)
(hOCilS ++; //Cuen ta l~s horas
minutos-O;I
i.e (horils_24) horil.!l-O;
set_timed (OX8000); I/Precilrgil el TNMRl antes de Sillir
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)
234
8. Gama AHa - Ple18
--..
lofj,c.m ... _",
"'-,
.,
;f1t'".,,,m
,-
, _.
,- II
..
.,.. I
""'- ;""" -
_._. --I ... I
I
....
--
- -.,jIlGoM
r...
PI<9.. -1.,,.£' ....
[ "'-tN I
_Cb:I<f_ - I
-
I
-, - ~
--- - ""'
.... •
•
£[--~
_ _ I'CI!.--' -"_u. .....
[dI~ ___
•
•
-,"'"" "
-
"'
-
••
NOTA
En PROTEUS, el m6du lo comparador en el modelo del PIC1S no fundona co-
rrectamente en la simulaci6n, as! tambien el m6dulo fCCP tiene algunos pro-
blemas. Esperemos que LabCenler 10 solucione en breve.
235
Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC
A CM2..CMD _ 110
RAO -CIS.~
RA3 ~. ~- . C1 ClOUT
+
RAl...L
RA2 -A.
-.-. C2 C20UT
+
VAEf
Figura 27. Modo del com~rador
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<lIator(AO_ VR_A1_VR):
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 (
If'(ClOUT) dutty-714; //Si VCut/Coef < \IRE£'
else dutty ..O; //Sj Vout/Coer > \IREI'"
setYh1ll1_duty(dutty) ..
}
Si se quiere utilizar una VR£Fdistinta a la intema para ajustar mas finamente la ten-
si6n de salida, se puede utilizar el m6clulo comparador segun la figura 29, introdu-
ciendo la senal por RAO y una referenda extema pOT RA3,
CM2,.CMO>o; 100
RAO A
RA3
, +
C1 ClOUT
RA1 A
ClOUT
RA2~
,. ~
~T~
I
~
F
i
':
.
';1
ti
I~ :r~
"
• .-'
~
~. ,
. .rrn; 0'-
-- . "- .:I -"".:::-
~
~
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
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 mi-
crocontrolador 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 re-
cursos del micro.
.~..- --
Sin RTOS
f-!--+---j_--'1001~+--+--+-1
t
-=trt:=t=r==C~"ii~~T~•O:j::===::j:=:I:1
. ....j T
... I~ --r--+--t
.,
f- -
t
--t
.1---- -I-- -
.,.
....
-"
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
241
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
242
9. Real lime Operating System - RlOS
'task (ra te - lms, m.!Ix"lms) IIIndica que la $iguiente funci6n es una Tarea
void pid ( ) ; //que se ejecutara cada lOOms .
void lIJilin{) (
TRISC-O;
setup_timer_ 2 ft2_div_by_ 4,249, I) ; /IPeriodo de 18 se~a1 PWM alms
s .. tup_ccpl (ccPJOI1IJ) ; I/MOdu10 CCP a modo PWM
setup_"dcyorts /iJll_analog) ; IIPuer to A analdgico
Siltup_ .. dc (AOC_ CLOCK_INTERNAL),. /Ireloj conVl!rtidor AD interno
"et_"dc_ channel (D) ; IILec tura por e1 canal 0
control-uTI
setYIilnI_ duty (control) ;
pT_l-pT;
eT_I-eT;
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 convenien-
te 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 utili-
zar 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~~ .. • 35 . 64
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 <lcd.c'>
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,,;
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),.
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<lllin) r
uT-min: J
control-uT;
245
Compilador CCCS y Simulador PROTEUS para Microcontroladores PIC
setywrnl_duty (control):
pT_1 - pT;
eT_ l-eT;
lcd_90tOJfY (1,1) ;
temperiJ-yT/10;
printf(lcdyutc, ~Temp- If"·, tempera):
Figura 4 . EI programa
valor- read_adc() ;
yT-valor~5000.0/1024.0;
rT-temp_1lmit:
246
9. Real lime Operating System - RlOS
void display()
Para terminar can este ejemplo se ha aiiadido una tercera tarea que permita modi-
ficar 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).
" 1" _ _ ,,.
,
j
.• ~"
•
"
~' -,'.'7
T.~.'
~,
Lt~'h' 51
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 <lcd.c>
luse rtos (timer-O , minor_cycle-lms}
luse standard_ io{B)
luse standard_io{c)
Idefine BO PIN_ BO
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
selll- 1 ;
..-tos_run ( );
void pia ( )
reos_siqnlll (sem);
rt os_yleldlJ ;
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_signal (semI;
rtosyield() ;
J
Figura 8 , Programa con PICt8F4S20
250
•
10. USB - Universal Serial Bus
Capitulo 10
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 dis-
positivos 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 dis-
positivo 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 selec-
cionado y este Ie devuelve el testigo como respuesta.
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 dispositi-
vo 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 infor-
maci6n; 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
Figura 1. USBCONN
253
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC
254
10. USB - Universal Serial Bus
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" _ I USB OESC COC.H
IJirlClude "i.b.C:> #ll'lcluda "usb.h"
! US8.C J
#include "usb.h>
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
Por otra parte, al final de la libreria se encuentra la descripdon textual del disposi-
tivo que sera detectado par Windows; para ella utiliza USB_STRING_DESC. Se puc-
de 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
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
#include <18F4550.h>
'device "dc- lO
IEu5e5 HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,QSBDIV,PLL5 , CPQOIV1 , VREGEN
luse delay(clock - 48000000)
void maln () (
BYTE 1 , j , addres5, vallle;
int16 q,ql;
noat p;
ql-0;
setup~ddc""porcs (ANOI VSS_ VOO),.
setllp~ ... dc (ADe_CLOCK_INTERNAL);
.set_ adc_ Channel (O),.
usb_cdc~init I} ,.
u5b_ inlt () ..
do
usb~task() ;
i f (usb_enumerated(})
258
10. USB - Universal Serial Bus
----------------------~
ql-q :
delay_ms (500);
} loIhJ.le (TRUE) J
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 conff-
tar, por primera vez el USB, Windows solicita la instalaci6n del driver (se debe indi-
car el directorio donde se guarde el fichero mchpcdc.inf) (figura 7 y figura 8).
_-------
-_._.-
.----------------
...
..... __.
----,--
- -
__ __
-~
,
._. .
..-.--..
-
-.---~--
_____ J
~-
-,_._-
... --.-
--_._-
-_......_-,- ----_
. ----.-.
---.---- -
. _-----
.... --~-.
~ __ c..;..
----.----
.... -
"...................
, --~- .1...I
_
-~
_.._. - -
D _ _ ... - ... _ -
... _
_ .. _ . .... _'*'c"" ..._
-
-
......
- _~ 11 - .- 1
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--
-*---_.-
-.
..
--'"'--_...-..--._--.. . .->
..-.1---...
-.11'-_
· ,..
-~--
.-. ...__ - .-
·010 _ _ _ . " _ _
"'~
..--- .oa..,,,
,,_
._,---
··
- .J---~.'""
---..-.-
J _ _ _ -=-l
.JW .. 'H , , '
.J _ _ _
..
'--"-
.11.-"-
·
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 Stora-
ge 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
261
Compilador C CCS YSimulador PROTEUS para Microcontroladores PIC
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() usb_cdcJutc{qL};
it (usb_cdcyutready(}) usD_cdc_putC(qH) ..
del"y_ms(SOO); lISe envian datolf cada 0.5 s
n++;
J while (TRUE) ;
Para la simulacion se debe abrir el fichero de Excel (figura 13); en este fiche ro exis-
ten 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 i-
siciOn.
., . .. . .
"- -- ...
u
.
-
, .
- -
" ',.
•-
• , ... . ,
•
~"
.- ...
•••
.......
.. ••
. •
•
.
•
r
" .
'
,
•
• .• , •
....
.
-
'
T
I: ,- - - - 1-'
·-
·.t-'
-
-- """"
- ..
··· . . . . .
-. _.
.. ·\_'/....,'_1 . - .._. .,. ... • ,. .,
"- - --• ~-
-.- , • .. ........ " ..
, , •
,.......,
, ..
• , r
9 • ::
-
• ••
•• .._.
"
·•
·•. ....
-
- .-..
-- ,
··•.
.
-••
"
...-••.--
••
-- ,-,J
·
•
••
•.• ·"• -.•• -. I
·_. _,J_,_,
-. '-'''''''' •
-
.i
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 fae-
tores, a la politica de apertura que tiene Microcrup, ya que facilita y patencia el de-
sarrollo 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 microcontro-
ladores 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 capi-
tulo, 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 direc-
tivas y funciones del C. En cada capitulo se plantean y desarrolJan sencillos ejem-
plos 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 to se
desarrolla el USB de reciente incorporaci6n aIISIS.
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.