372
BASIC PARA BASIC PARA BASIC PARA BASIC PARA MICROCONTROLADORES PIC MICROCONTROLADORES PIC MICROCONTROLADORES PIC MICROCONTROLADORES PIC Christian Bodington Esteva Ingeniero en Electrónica

PBP Basic Pro Microcontroladores PIC

Embed Size (px)

Citation preview

  • BASIC PARA BASIC PARA BASIC PARA BASIC PARA

    MICROCONTROLADORES PICMICROCONTROLADORES PICMICROCONTROLADORES PICMICROCONTROLADORES PIC

    Christian Bodington Esteva

    Ingeniero en Electrnica

  • i

    CONTENIDO

    Prlogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1

    Captulo I. Herramientas de Diseo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

    Captulo II. MicroCode Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8

    Capitulo III. Microcontroladores PIC.

    3.1.- Que es un PIC? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21

    3.2.- El Oscilador Externo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25

    3.3.- El Circuito de Reset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    3.4.- Consideraciones tcnicas de diseo. . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    3.4.1.- Estado Lgico de un pin I/O. . . . . . . . . . . . . . . . . . . . . . . . . . 31

    3.4.2. Lectura de un estado lgico en un pin I/O. . . . . . . . . . . . . . . 33

    3.4.3. El Opto-acoplador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.4.4. Fuente de poder, 5Vdc / 3.3Vdc. . . . . . . . . . . . . . . . . . . . . . . 37

    Captulo IV. Estructura de un programa. Componentes y operadores en PicBasic.

    4.1.- Estructura de un programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    4.2.- Subrutinas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    4.3.- Componentes y operadores en PicBasic. . . . . . . . . . . . . . . . . . . . . . . .41

  • ii

    4.3.1.- Define. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    4.3.2.- Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42

    4.3.3.- Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    4.3.4.- Constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    4.3.5.- Smbolos o Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    4.3.6.- Operadores Aritmticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . .45

    4.3.7.- Operadores Binarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45

    4.3.8.- Operadores de Comparacin. . . . . . . . . . . . . . . . . . . . . . . . 46

    4.3.9.- Operadores Lgicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

    Capitulo V. Primeros Programas con el PIC16F84.

    5.1.- Proyecto #1. Implementacin de las instrucciones de programa High, Low Goto y Pause. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47

    5.2.- Proyecto #2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

    5.3.- Proyecto #3. Implementacin de la instruccin If-Them-Else. . . . . . . .60

    5.4.- Proyecto #4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    5.5.- Proyecto #5. Implementacin de la instruccin For-Next. . . . . . . . . . . 65

    5.6.- Proyecto #6. Implementacin de la instruccin Frecout. . . . . . . . . . . . 68

    5.7.- Proyecto #7. Implementacin de la instruccin Button . . . . . . . . . . . . .76

    5.7.1.- Proyecto #7.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

    5.7.2.- Proyecto #7.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

    5.7.3.- Proyecto #7.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

  • iii

    5.8.- Proyecto #8. Implementacin de la instruccin Branch . . . . . . . . . . . . 91

    5.9.- Proyecto #9. Implementacin de la instruccin PWM . . . . . . . . . . . . . 94

    Capitulo VI. Mdulos LCD.

    6.1.- Pantallas LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

    6.2.- Identificacin de los pines de una pantalla LCD . . . . . . . . . . . . . . . . . 98

    6.3.- Conexin de una pantalla LCD en Pic Basic. . . . . . . . . . . . . . . . . . . . 99

    6.4.- Proyecto #10. Implementacin de la instruccin Lcdout . . . . . . . . . . 103

    6.5.- Proyecto #11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

    6.6.- Proyecto #12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109

    6.7.- Proyecto #13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111

    6.8.- Proyecto #14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114

    6.9.- Proyecto #15. Implementacin de la instruccin Count. . . . . . . . . . . 115

    6.10.- Proyecto #16. Implementacin de la instruccin Pulsin. . . . . . . . . . 122

    6.11.- Proyecto #17. Implementacin de la instruccin Pot. . . . . . . . . . . . 124

    6.12.- Memoria CGRAM en la Pantalla LCD. . . . . . . . . . . . . . . . . . . . . . . .127

    6.13.- Proyecto #18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130

    6.14.- Proyecto #19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137

    Capitulo VII. Teclado Matricial.

    7.1.- Teclado Matricial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149

    7.2.- Proyecto #20. Aplicacin de un teclado 3x4. . . . . . . . . . . . . . . . . . . .154

  • iv

    Capitulo VIII. Memoria de Datos.

    8.1.- Memoria de Datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157

    8.2.- Proyecto #21. Implementacin de la instruccin Read. . . . . . . . . . . .161

    8.3.- Proyecto #22. Implementacin de la instruccin Write. . . . . . . . . . . .163

    8.4.- Proyecto #23. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165

    8.5.- Proyecto #24. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168

    Capitulo IX. Interrupciones.

    9.1.- Qu son las Interrupciones?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175

    9.2.- Fuentes de Interrupciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175

    9.3.- Registro INTCON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175

    9.4.- Activacin de interrupcin a travs del pin RB0/INT. . . . . . . . . . . . . . 177

    9.5.- Proyecto #25. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

    9.6.- Interrupcin TMR0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180

    9.7.- Registro OPTION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181

    9.8.- Proyecto #26. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

    9.9.- Interrupcin por cambio de estado de uno de los pines ms significativos del puerto B (RB4-RB7). . . . . . . . . . . . . . . . . . . . . . . . . . . . .186

    9.10.- Proyecto #27. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187

    Capitulo X. Memoria Serial I2C.

    10.1.- Qu es el bus I2C?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190

    10.2.- Proyecto #28. Implementacin de las instrucciones I2Cwrite, I2Cread . . 192

  • v

    10.3.- Proyecto #29. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196

    10.4.- Proyecto #30. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198

    Capitulo XI. Conversor A/D en el PIC16F877.

    11.1.- Conversor A/D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202

    11.2.- El registro ADCON0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209

    11.3.- El registro ADCON1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210

    11.4.- Proyecto #31. Implementacin de la instruccin ADCin. . . . . . . . . . 214

    Capitulo XII. Comunicacin Serial. Transmisin y Recepcin de Datos.

    12.1.- Comunicacin Serial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

    12.2.- Instruccin SerIn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

    12.3.- Proyecto #32. Implementacin de la instruccin SerIn. . . . . . . . . . . 221

    12.4.- Instruccin SerOut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233

    12.5.- Proyecto #33. Implementacin de la instruccin SerOut. . . . . . . . . .233

    12.6.- Proyecto #34 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .240

    Capitulo XIII. Servomotor.

    13.1.- Qu es un Servomotor?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268

    13.2.- Proyecto #35. Implementacin de la instruccin PauseUs. . . . . . . . .272

    13.3.- Proyecto #36. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .276

    13.4.- Proyecto #37. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280

    13.5.- Proyecto #38. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .283

  • vi

    Capitulo XIV. Mdulos RF para comunicaciones.

    14.1.- Mdulos RF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .293

    14.2.- Proyecto #39. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296

    14.3.- Proyecto #40. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .300

    14.4.- Proyecto #41. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .305

    Capitulo XV. Instrucciones de programa de PicBasic.

    @. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

    ADCin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

    Asm EndAsm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .311

    Branch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312

    Button. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

    Call. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

    Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315

    ClearWDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316

    Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

    Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

    DTMFout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

    EEPROM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321

    End. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

    FreqOut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321

    For Next. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .323

    Gosub. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

  • vii

    Goto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324

    High. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324

    I2Cread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

    I2Cwrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .326

    IF-Then-Else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

    Input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .328

    LCDin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .329

    LCDout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330

    Low. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331

    NAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

    Output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

    Pause. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333

    PauseUs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333

    Pot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

    PulsIn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

    PulsOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

    PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

    Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337

    Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

    Return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339

    Reverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .340

    Select Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .340

    SerIn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342

  • viii

    SerOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343

    Sleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344

    Swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344

    Toggle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .345

    While-Wend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

    Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .347

    Apndice A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348

    Apndice B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .358

    Apndice C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .360

    Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .362

  • Prlogo

    Emprender el estudio de microcontroladores para el desarrollo de proyectos electrnicos que sean la base para nuevas ideas es el objetivo primordial de esta primera edicin, en la cual nos hemos concentrado en dar al lector algunas herramientas fundamentales con las cuales esperamos abrir un campo de conocimiento en la electrnica de control, a travs de un sin numero de posibilidades de diseo a partir de una serie de ejemplos prcticos desarrollados en lenguaje Basic para Microcontroladores PIC.

    De toda la gama de posibilidades entre las familias de microcontroladores PIC que ofrece Microchip Inc., hemos elegido para empezar el microcontrolador ms popular de toda la serie, el PIC16F84, que ser utilizado en este libro para estudiar algunas de sus caractersticas a travs del desarrollo de actividades que en principio no requieren un nivel de conocimiento elevado y a travs del cual daremos los pasos necesarios para adentrarnos en las gamas mas altas, de las que se ha seleccionado el microcontrolador PIC16F877 para la realizacin de proyectos electrnicos de nivel medio y avanzado, y en los que podremos manejar dispositivos perifricos que le dan un gran valor agregado a cada uno de nuestros proyectos y abren posibilidades de desarrollo muy interesantes al lector.

    Adems, hemos considerado proporcionar la informacin adecuada referente a las herramientas de desarrollo ms importantes en la actualidad, para programacin en lenguaje Basic para microcontroladores PIC. En esta ocasin iniciamos con el estudio del compilador PicBasic Pro, de la empresa microEngineering Labs, Inc., la cual ofrece una de las herramientas mas populares en el rea, debido a que cuenta con una gran variedad de instrucciones que hacen de la programacin de microcontroladores una tarea fcil y muy productiva a la hora de desarrollar proyectos que involucren perifricos como pantallas LCD, teclados matriciales, sensores de temperatura, presin, gas, humedad, memorias de datos entre otros, y donde una de las caractersticas ms relevantes es el considerable ahorro de tiempo, lo que se traduce en efectividad y menos lneas de programa, de tal

  • 2

    manera que el diseador puede prestar mayor atencin a los detalles, logrando as perfeccionar su desempeo en cualquiera de las funciones que desee programar.

    Otra de las herramientas que hemos decidido incorporar a la obra, es el programador de microcontroladores PIC P16Pro/PicAll, de la pgina oficial de PicallW, de Boban Dobaj, Diseador. Este programador soporta una gran cantidad de modelos de las series 12, 16 y 18 de Microchip. Su construccin es sumamente sencilla y de muy bajo costo, adems de una serie de ventajas entre las cuales podemos mencionar la alta velocidad de transferencia de datos hacia el dispositivo al momento de ser grabado.

    Cada captulo contiene teora sobre la cual se pretende estudiar el funcionamiento de los microcontroladores y perifricos conectados a l. Para ello hemos desarrollado una serie de prcticas en las que el lector deber hacer montajes de circuitos en base a los diagramas esquemticos siguiendo las instrucciones y leyendo detenidamente los comentarios de cada lnea de programa.

    Esperamos con esto proporcionar al lector una base slida de conocimientos para el desarrollo de proyectos electrnicos, proyectos de robtica y todo aquello que represente una innovacin cientfica en este campo.

    Finalmente, el agradecimiento para todos nuestros colaboradores en la edicin de esta publicacin, quienes se han encargado de revisar cada detalle, proyectos e ideas plasmadas en cada capitulo.

    Ingeniero en Informacin, Maria del Carmen Lara T. Ingeniero en Electrnica, Jess Frank Phorlakis. Tcnico Superior en Electricidad, Ral Mastropasqua.

  • 3

    Herramientas de Diseo Capitulo I

    En la elaboracin de proyectos electrnicos con microcontroladores PIC, resulta muy importante considerar una serie de herramientas, las cuales vamos a describir a continuacin:

    Software: para la programacin en Lenguaje Basic, contamos con una gran variedad de posibilidades en el mercado, y entre las cuales hemos elegido para esta primera edicin, el Ambiente Integrado de Desarrollo Microcode Studio (IDE) de microEngineering Labs, Inc., adems del compilador Basic, PICBasic Compiler, o PICBasic Pro Compiler. Con estas dos herramientas estaremos realizando la programacin en cada uno de los proyectos propuestos a partir del captulo V.

    Figura 1.1.

    (Fuente: http://www.microengineeringlabs.com)

  • 4

    Programador de Microcontroladores PIC: es una herramienta indispensable con la cual podemos grabar el cdigo generado por el compilador PicBasic para poner en funcionamiento cada uno de los proyectos propuestos en cada captulo. Existen en internet una gran cantidad de modelos de programadores para microcontroladores PIC, de muy bajo costo y fcil construccin. Consideramos una buena experiencia realizar el montaje de cualquiera de estos diseos, aunque en esta oportunidad nuestra recomendacin es el programador P16Pro/Picallw. Los detalles para la construccin de este programador estn contenidos en el apndice A.

    Figura 1.2.

  • 5

    Placa de prototipos: proporciona al diseador conexiones sin soldaduras, con lo cual se hace ms prctico el desarrollo de los proyectos electrnicos propuestos a lo largo de cada captulo.

    Figura 1.3.

    Multmetro digital: este instrumento de medicin ser muy til durante la elaboracin de los circuitos propuetos en cada captulo.

    Figura 1.4.

  • 6

    Fuente de poder regulada con salida de voltaje variable. En el captulo III se propone la construccin de una fuente de poder regulada a 5 Vdc y 3.3 Vdc.

    Figura 1.5.

    Herramientas de corte, extractor de circuitos integrados, cable rgido para conexiones en la placa de prototipos.

    Figura 1.6.

  • 7

    Osciloscopio: este instrumento se requiere para el desarrollo de algunas prcticas en las cuales se hace necesario medir las seales generadas desde el microcontrolador.

    Figura 1.7.

    Componentes electrnicos: microcontroladores PIC en los modelos definidos en cada ejemplo prctico, resistencias, diodos, servomotores, condensadores, cristales y otros componentes de fcil adquisicin. Cada proyecto cuenta con una tabla en la cual se decriben los componentes electrnicos que debern ser utilizados en el cada montaje.

    Figura 1.7.

  • 8

    Microcode Studio Capitulo II

    Microcode Studio (IDE), es un Ambiente Integrado de Desarrollo de MECANIQUE, diseado especialmente para microEngineering Labs, Inc., de libre adquisicin a travs de la pgina Web http://www.microengineeringlabs.com

    Figura 2.1.

    (Fuente: http://www.microengineeringlabs.com)

    Descargar este programa es muy sencillo y esto lo podemos hacer ingresando a la siguiente direccin:

    http://www.microengineeringlabs.com/resources/win_ide.htm

    En esta pgina se puede encontrar una seccin destinada para la descarga del archivo instalador, como se observa en la figura 2.2:

  • 9

    Figura 2.2.

    (Fuente: http://www.microengineeringlabs.com)

    Adems de esta herramienta, es necesario adquirir el compilador PicBasic, (Figura 2.3). Se puede acceder directamente a la pgina de productos de microEngineering Labs a travs de la direccin:

    http://www.melabs.com/products/index.htm

    Figura 2.3.

    (Fuente: http://www.microengineeringlabs.com)

    Es posible descargar una versin DEMO del compilador PIC Basic, con la cual se pueden compilar programas con un mximo de 31 lneas de cdigo, a travs de la direccin: http://www.melabs.com/pbpdemo.htm

  • 10

    Figura 2.4. (Fuente: http://www.melabs.com)

    Para empezar la descarga del archivo de instalacin del compilador, solo hay que hacer clic en el link sealado en la figura 2.4, e indicar la ruta en la cual se desea que el archivo de instalacin sea almacenado.

    Nota Importante: Es necesario adquirir una de las versiones completas del compilador Basic, para no tener lmites en la cantidad de lneas del programa a compilar.

    En la figura 2.5 se puede observar el archivo descargado para la versin disponible del software Microcode Studio, y en la figura 2.6 se puede observar el archivo del compilador PicBasic Pro en su versin de prueba.

    Figura 2.5. Figura 2.6.

    Haga clic en el Link aqu sealado, para descargar la versin Demo de PicBasic. Pro

  • 11

    El proceso de instalacin es muy sencillo. El primer paso ser ejecutar el archivo mcsinstall.exe, el cual es el responsable de iniciar el proceso de instalacin de Microcode Studio:

    Figura 2.7.

    Seguidamente Microcode Studio le da la bienvenida en la ventana que se muestra a continuacin:

    Figura 2.8.

  • 12

    Haga clic en el botn Next y podr ver en la siguiente ventana el acuerdo de licencia para Microcode Studio:

    Figura 2.9.

    La ruta por defecto para la instalacin de Microcode Studio es C:\Archivos de programa\Mecanique\MCS. Esta ruta puede ser cambiada haciendo clic en el botn Browse, a travs del cual se podr ubicar la nueva carpeta en la cual deber ser instalado el software:

    Figura 2.10.

    Nombre de la carpeta en la cual se encontrar el archivo ejecutable de Microcode Studio.

  • 13

    Pulse Next para iniciar la copia de archivos (figura 2.11), y finalmente espere que se complete la instalacin (figura 2.12).

    Figura 2.11.

    Figura 2.12.

  • 14

    Una vez instalado Microcode Studio, es importante tomar en cuenta que antes de iniciar este software, es necesario instalar el compilador Basic, el cual es indispensable para la generacin del cdigo que ser cargado en el microcontrolador PIC.

    Instalacin del compilador PicBasic Pro:

    Para dar inicio a la instalacin del compilador Pic Basic, ser necesario ejecutar el archivo denominado pbpdemo.exe para el caso de la versin de demostracin. La figura 2.13 muestra la ventana de inicio del proceso de instalacin, en la cual se da la bienvenida al usuario y le invita a cerrar cualquier otra aplicacin que se encuentre en uso en ese momento.

    Figura 2.13.

    En la siguiente ventana se debe especificar la unidad de disco duro en la cual se instalar el compilador y el nombre de la carpeta que va a contener los archivos a ser instalados. El software de instalacin del compilador establece por defecto la ruta indicada en la figura 2.14.

  • 15

    Figura 2.14.

    Seguidamente se debe especificar el nombre de la carpeta que va a contener los accesos directos a los archivos que ofrecen informacin adicional acerca del compilador PicBasic. Este paso puede ser omitido seleccionando la opcin Dont create a Start Menu Folder:

    Figura 2.15.

  • 16

    Una vez seleccionadas las rutas de instalacin del compilador, se debe hacer clic en el botn Install (figura 2.16), para dar inicio a la copia de archivos.

    Figura 2.16.

    Figura 2.17.

  • 17

    Figura 2.18.

    Finalmente se puede ver en la ventana de la figura 2.18, un mensaje en el cual se confirma que el compilador PICBasic Pro ha sido instalado satisfactoriamente. Deshabilite la opcin Install Microcode Studio IDE y seguidamente haga clic en el botn Finish.

    Nota: Puede descargar la documentacin completa del compilador PicBasic a travs de la direccin: http://www.melabs.com/support/index.htm

  • 18

    Integracin de Microcode Studio y Pic Basic Pro:

    Es importante integrar Microcode Studio con el compilador PicBasic Pro, indicando la ruta en la cual se encuentra instalado. Para esto debemos iniciar el software y seguir las siguientes instrucciones:

    1. Desde el men de Inicio de Windows ejecute Microcode Studio.

    Figura 2.19.

    2. Haga clic en el men View y seleccione la opcin Compile and Program Options.

    Figura 2.20.

  • 19

    3. En la pestaa Compiler haga clic en el botn Find Automatically para una ubicacin automtica del compilador, o si lo prefiere haga clic en Find Manually para ubicar el compilador manualmente.

    Figura 2.21.

    4. En la pestaa Programmer se pide la ubicacin del software del programador que estaremos utilizando para grabar los microcontroladores.

    Figura 2.22.

  • 20

    Se debe ubicar en la lista el programador PICALL Programmer, haciendo clic en el botn denominado Add New Programmer (Figura 2.22), y seguidamente se debe seleccionar de la lista de opciones, como se puede observar en la figura 2.23:

    Figura 2.23.

    Por ltimo, al hacer clic en el botn Next, el software realizar la bsqueda automtica de la carpeta que contiene el archivo ejecutable del programador Picall, el cual ha debido ser instalado segn el procedimiento descrito en el Apndice A.

  • 21

    Microcontroladores PIC Capitulo III

    3.1. Que es un PIC?

    Los PIC son una familia de microcontroladores desarrollados y fabricados por la empresa Microchip Technologies Inc., los cuales cuentan con una tecnologa tipo RISC (Reduced Instruction Set Computer) y poseen en su arquitectura interna caractersticas especiales que varan segn el modelo de PIC que deseamos utilizar.

    Podramos decir que estos dispositivos se asemejan a una computadora pero de tamao muy reducido, ya que cuentan con casi los mismos recursos que stas, es decir, poseen memoria de programa, memoria RAM, memoria de datos, puertos de entrada o salida, temporizadores y en algunos casos cuentan con recursos adicionales como convertidores A/D, comparadores, USART (Universal Synchronous/Asynchronous Receiver/Transmitter), comunicacin serie I2C, entre otros.

    Con todas estas caractersticas es lgico pensar que este dispositivo pasa a ser el corazn del circuito a ser controlado. Esto significa que el microcontrolador es el encargado de dirigir todos los procesos de un circuito electrnico, en base a las instrucciones de programa o rutinas que definen funciones especficas de control, donde las mismas sern realizadas en lenguaje Basic para microcontroladores PIC. Es por esta razn que consideramos muy importante estudiar la arquitectura interna del microcontrolador que se desea programar y aunque esta tarea pueda parecer difcil, el Lenguaje Basic para microcontroladores PIC la hace sumamente sencilla.

    El diseo de programas para microcontroladores PIC va acompaado normalmente con un previo estudio del diseo del hardware que har que nuestros proyectos se pongan en marcha. Es decir, resulta absolutamente necesario saber cual ser la funcin especfica de cada pin; por ejemplo, en el caso de los puertos I/O (IN/OUT) a ser utilizados en el microcontrolador, es importante definir sus funciones antes de empezar a programar, ya que stos pueden ser configurados a conveniencia como entrada o como salida de datos de forma independiente. Tambin podemos destinar un puerto completo

  • 22

    del microcontrolador para el control de dispositivos perifricos como pantallas LCD, teclados, motores paso a paso, leds, servomotores entre otros. De ah la importancia de establecer cual ser la funcin de cada puerto del microcontrolador PIC elegido para nuestros proyectos.

    Otra decisin importante ser elegir convenientemente el modelo de microcontrolador a ser utilizado, ya que hay una gran gama de modelos que pueden ser adaptados a necesidades especficas de diseo.

    Figura 3.1.

    Los microcontroladores PIC comnmente ms utilizados son los siguientes:

    PIC12C508 y PIC12C509, tienen memoria de programa EPROM, oscilador interno, y son muy utilizados en diseos de pequeos circuitos.

    PIC16F84A, tiene memoria de programa tipo FLASH, oscilador externo, 13 pines I/O entre otras caractersticas que estaremos estudiando a lo largo del contenido de esta obra. Este PIC ha resultado ser uno de los ms populares de toda la serie.

    PIC16F87X, incluyen un gran nmero de mejoras en comparacin con el PIC16F84, debido principalmente a que cuentan con un numero de pines I/O superior a ste, adems de otras caractersticas relevantes. Por ejemplo, con esta serie de microcontroladores contamos con una mayor capacidad en cuanto a memoria de programa y memoria de datos.

  • 23

    PIC18F4XX, estos microcontroladores resultan muy tiles cuando deseamos disear proyectos ms avanzados.

    Cada uno de estos microcontroladores cuenta con una completa hoja de datos que puede ser descargada de la pgina oficial de Microchip:

    http://www.microchip.com

    Estas caractersticas influyen directamente al momento de decidir que modelo de microcontrolador PIC deseamos utilizar en nuestros proyectos, segn sea el objetivo de diseo del circuito que deseamos realizar.

    El microcontrolador PIC16F84 es uno de los microcontroladores ms populares y en algunos casos, el preferido por estudiantes para dar inicio al estudio de la programacin de microcontroladores, seguido del PIC16F877 el cual posee ms recursos importantes que estaremos estudiando a continuacin.

    Antes de empezar a revisar todo lo referente a la programacin de microcontroladores PIC, consideramos importante recordar algunas de las caractersticas de stos dispositivos, para tener una base de conocimientos bsicos para poder realizar un programa de control de un diseo completamente personalizado.

    Para empezar, veamos algunas caractersticas del microcontrolador PIC16F84:

    Microcontrolador de 8 Bits. Memoria de programa tipo Flash de 1024 palabras de 14 bits. Memoria RAM de 68 bytes. Memoria EEPROM de datos de 64 bytes. Velocidad de operacin de hasta 20 Mhz. Cuatro fuentes de interrupcin. Posee 13 pines I/O (pines de entrada o salida).

  • 24

    Diagrama de pines del PIC16F84:

    Figura 3.2.

    PIN Identificacin Descripcin del Pin1 RA2 Pin de Entrada/Salida (I/O) del puerto A2 RA3 Pin de Entrada/Salida (I/O) del puerto A3 RA4/TOCKI Pin de Entrada/Salida (I/O) del puerto A4 MCLR Reset y entrada de voltaje de programacin.5 Vss Pin de Alimentacin a Tierra (GND)6 RB0/INT Pin de Entrada/Salida (I/O) del puerto B7 RB1 Pin de Entrada/Salida (I/O) del puerto B8 RB2 Pin de Entrada/Salida (I/O) del puerto B9 RB3 Pin de Entrada/Salida (I/O) del puerto B10 RB4 Pin de Entrada/Salida (I/O) del puerto B11 RB5 Pin de Entrada/Salida (I/O) del puerto B12 RB6 Pin de Entrada/Salida (I/O) del puerto B13 RB7 Pin de Entrada/Salida (I/O) del puerto B14 Vdd Pin de Alimentacin de 5Vdc15 OCS2/CLKOUT Salida del oscilador a cristal. 16 OSC1/CLKIN Entrada del oscilador a cristal o fuente externa de reloj.17 RA0 Pin de Entrada/Salida (I/O) del puerto A18 RA1 Pin de Entrada/Salida (I/O) del puerto A

    Tabla 3.1

  • 25

    El microcontrolador PIC16F84 cuenta con dos puertos I/O, el puerto A, el cual consta de cinco pines I/O y el puerto B, el cual consta de ocho pines I/O como se puede observar en la figura 3.3:

    Figura 3.3.

    En total se cuenta con trece pines I/O, los cuales pueden ser programados como entrada o salida segn convenga al momento de disear un circuito de control.

    Los pines correspondientes al oscilador (OSC1 y OSC2) y al reset (MCLR) deben ser siempre tomados en cuenta en el diseo de nuestros proyectos. Es por este motivo que damos inicio al estudio de algunos circuitos indispensables para el correcto funcionamiento del microcontrolador PIC.

    3.2. El Oscilador Externo.

    Es un circuito indispensable para el funcionamiento del microcontrolador y el cual adems, define la velocidad a la cual va a trabajar. Para hacer funcionar nuestro diseo podemos elegir entre las siguientes cuatro opciones:

    Oscilador LP: Oscilador de bajo consumo (Low Power). Oscilador XT: Cristal / Resonador.

  • 26

    Oscilador HS: Oscilador de alta velocidad (High Speed). Oscilador RC: Resistencia / Condensador.

    En los modos de oscilador LP, XT y HS el cristal debe ser conectado a los pines 15 y 16, Osc2/CLKout y Osc1/CLKin respectivamente, como se muestra en la figura 3.4.

    Figura 3.4.

    Los valores de los condensadores cermicos vienen dados segn la tabla que se muestra a continuacin:

    Modo Frecuencia Osc1/CLKin Osc2/CLKoutLP 32 kHz 200 kHz

    68 - 100 pF 15 - 33 pF

    68 - 100 pF 15 - 33 pF

    XT 2 MHz 4 MHz15 - 33 pF 15 - 33 pF

    15 - 33 pF 15 - 33 pF

    HS 4 MHz 10 MHz15 - 33 pF 15 - 33 pF

    15 - 33 pF 15 - 33 pF

    Tabla 3.2

  • 27

    Por ejemplo, para un oscilador tipo XT, podemos utilizar un cristal de cuarzo como el de la figura 3.5.

    Figura 3.5.

    Al conectar el microcontrolador a la fuente de alimentacin de 5 Vdc y medir la seal de salida del oscilador XT con un osciloscopio, en el pin 15 (Osc2/CLKout) del microcontrolador, podremos ver la onda generada bajo los siguientes parmetros de medicin seleccionados en el equipo:

    Voltios/Div: 200mV Time/Div: 100ns

    Figura 3.6.

  • 28

    La lectura de la frecuencia y perodo en este caso sera la siguiente:

    Frecuencia: 3,972 Mhz Perodo: 251,71 ns

    Cristal de cuarzo TTL: Este tipo de cristal consta de cuatro pines, de los cuales solo tres estn implementados de la siguiente manera:

    Figura 3.7.

    Pin 1: NC (Este pin no se encuentra conectado internamente) Pin 7: GND Pin 8: Salida TTL Pin 14: +5Vdc

    En su salida se obtiene un tren de pulsos como se puede observar en la figura 3.8, bajo los siguientes parmetros de medicin seleccionados en un osciloscopio:

    Voltios/Div: 2V Time/Div: 100ns

  • 29

    Figura 3.8.

    La lectura de la frecuencia y perodo en este caso sera la siguiente:

    Frecuencia: 3,999 Mhz Perodo: 250,013 ns

    El oscilador externo en modo RC resulta ser el ms sencillo de todos y por ende el ms econmico. Su configuracin lo hace menos preciso debido a que existe una tolerancia de error en sus componentes, sin olvidar tambin que la temperatura puede afectar la operacin de este tipo de oscilador.

    Los valores recomendados para este oscilador son los siguientes:

    5 Kohm R1 100 Kohm C1 > 20 pF

  • 30

    Figura 3.9.

    3.3. Circuito de Reset: El Pin denominado MCLR (Master Clear), siempre debe ser tomado en cuenta cuando se disea un circuito con microcontroladores PIC. A travs de este Pin se podr reiniciar el dispositivo, si a ste se le aplica un nivel lgico bajo (0V), por lo tanto resulta importante destacar que para que un programa cargado en un microcontrolador se mantenga en ejecucin, el Pin MCLR debe estar siempre en un nivel lgico alto (5V).

    Si deseamos tener control externo del reset de un microcontrolador PIC, debemos considerar el circuito de la figura 3.10:

  • 31

    Figura 3.10.

    Este circuito permite reiniciar el microcontrolador cada vez que el pulsador P1 es presionado.

    3.4. Consideraciones tcnicas de diseo:

    A continuacin veremos algunos circuitos bsicos que deben ser tomados en cuenta para el desarrollo de prcticas con microcontroladores PIC. Estos circuitos son muy tiles cuando deseamos visualizar el resultado de una accin programada en el microcontrolador.

    3.4.1. Estado Lgico de un pin I/O:

    Una manera muy sencilla de ver el estado lgico de un pin configurado como salida en cualquiera de los puertos de microcontrolador es a travs del uso de LEDs, como se observa en los circuitos de la figura 3.11.

  • 32

    En el primer circuito, el LED se iluminar solo cuando el estado lgico del pin de salida del puerto sea igual a 1, es decir, 5 voltios.

    En el segundo circuito, el LED se iluminar solo cuando el estado lgico de la salida del puerto sea igual a 0, es decir, 0 voltios.

    Figura 3.11.

    Esto significa que si deseamos realizar un programa en Lenguaje Basic encargado de cambiar el estado lgico de un pin especfico, en cualquiera de los puertos de un microcontrolador, una forma bsica de visualizar este cambio es a travs del uso de LEDs.

  • 33

    3.4.2. Lectura de un estado lgico en un pin I/O:

    El microcontrolador tambin nos permite capturar datos o seales externas para luego ser procesadas y convertidas en respuestas que pueden definir una accin especfica en nuestros circuitos de prueba. Un ejemplo comn podra ser el uso de un pulsador para hacer destellar un led cada vez que ste sea presionado.

    Si deseamos introducir un nivel lgico bajo (0V), o alto (5V), a una de las entradas de un microcontrolador a travs de un pulsador, podramos considerar los circuitos de la figura 3.12, los cuales nos proporcionan dos formas diferentes de hacerlo:

    Figura 3.12.

  • 34

    El primer circuito en la figura 3.12 mantiene un nivel lgico alto (5V) mientras el pulsador permanece abierto. Al presionar el pulsador, el nivel lgico en el pin I/O del puerto pasa a ser bajo (0V).

    El segundo circuito de la figura 3.12 mantiene un nivel lgico bajo (0V) mientras el pulsador permanece abierto. Al presionar el pulsador, el nivel lgico en el pin I/O del puerto pasa a ser alto (5V).

    3.4.3. El Opto-acoplador:

    El opto-acoplador es un componente muy til cuando se requiere acoplar circuitos electrnicos digitales con etapas de manejo de potencia o con otros circuitos.

    Este componente en una de sus versiones, se compone bsicamente de un diodo LED el cual se encarga de iluminar un fototransistor, para que ste conduzca corriente a travs del colector.

    Figura 3.13.

  • 35

    En la configuracin de la figura 3.13, cuando en el pin I/O aplicamos un 1 lgico (5V), el LED del opto-acoplador enciende y el fototransistor conduce la corriente a tierra; por lo tanto, en la salida tendremos un 0 lgico (0V).

    Si apagamos el LED, el transistor no conduce, de tal manera que en la salida tendremos un 1 lgico (5V).

    En la configuracin de la figura 3.14, cuando en el pin I/O aplicamos un 1 lgico (5V), el LED del opto-acoplador enciende y el fototransistor conduce para poner en la salida un 1 lgico (5V). Mientras haya un 0 lgico en la entrada, el fototransistor permanecer abierto entre el emisor y colector, dando como resultado un 0 lgico (0V) en la salida.

    Figura 3.14.

    Una configuracin muy comn para el control de dispositivos de potencia como motores elctricos, luces incandescentes, solenoides, etc., se puede ver en la figura 3.15, la cual se basa en cualquiera de los dos circuitos antes mencionados (figura 3.13 y figura 3.14), en la cual se ha incluido un rel a

  • 36

    travs del cual circular la corriente necesaria entre sus contactos, para hacer funcionar cualquiera de estos dispositivos de potencia.

    Figura 3.15.

  • 37

    3.4.4. Fuente de poder, 5Vdc / 3.3Vdc:

    En caso de no disponer de una fuente de poder regulada, proponemos la construccion de un diseo sencillo que podemos implementar en todos los proyectos propuestos. En la figura 3.16 se puede observar el diseo de una fuente regulada con salidas de voltaje de +5 Vdc y +3.3 Vdc:

    Figura 3.16.

  • 38

    Estructura de un programa. Componentes y operadores en PicBasic. Capitulo IV

    4.1.- Estructura de un programa: Para que nuestros programas tengan una apariencia ordenada y se facilite la comprensin del mismo ante otros programadores que deseen realizar mejoras a ste, es necesario establecer una estructura que nos permita identificar fcilmente cada una de las partes que lo componen.

    Figura 4.1.

    En la figura 4.1 se puede observar la estructura bsica de un programa hecho en Microcode Studio, y en la cual hemos identificado las cuatro secciones que consideramos ms importantes para lograr un programa bien estructurado.

    A

    B C D

  • 39

    Seccin A: Corresponde al encabezado del programa, en el cual se debe considerar informacin bsica del mismo, como el nombre, la identificacin de autor, Copyright, fecha de elaboracin o fecha de los ltimos cambios realizados, versin del programa que se est realizando, e incluso una breve descripcin acerca del objetivo del programa y su aplicacin en un determinado circuito electrnico.

    Es importante resaltar que cada lnea del encabezado debe empezar con una comilla simple, en forma de comentario (ver Seccin D).

    Seccin B: Esta seccin empieza en la columna cero del editor de texto de Microcode Studio, y en ella se pueden declarar las definiciones (concepto que estudiaremos mas adelante) y las etiquetas de cada una de las subrutinas que sern programadas.

    Las etiquetas identifican puntos especficos o subrutinas dentro de un programa. Son definidas por el programador y deben tener al final de cada una de ellas el smbolo de dos puntos, que definen el final de la misma.

    Seccin C: Estar destinada para las instrucciones de programa y la misma est separada de la columna cero del editor de texto por una tabulacin, es decir, cuando el cursor se encuentra en la columna cero, presionamos una vez la tecla TAB, y de esta manera establecemos un espacio mnimo, siempre igual o superior entre la seccin B y C.

    Seccin D: Esta destinada para realizar comentarios acerca de la funcin que estar cumpliendo una instruccin especfica en nuestro programa. Cada comentario debe empezar siempre con una comilla simple como se muestra a continuacin:

    ' Define el Oscilador para un Cristal ' de 4 Mhz.

    Cuando un comentario es demasiado extenso, podemos continuar el mismo en la siguiente lnea, siempre que la frase comience con su respectiva comilla.

  • 40

    Los comentarios ayudan al diseador a identificar cada lnea de programa o cada una de las funciones de cada subrutina, garantizando as una buena documentacin en cada uno de los programas que realizamos.

    4.2.- Subrutinas: Una subrutina se presenta como un algoritmo separado del algoritmo principal, y estar destinado a resolver una tarea especfica. Las subrutinas pueden ser referidas cada vez que sea necesario, llamando a la etiqueta que corresponde a sta, la cual debe ir siempre al inicio de la misma.

    Led1:

    For Z = 0 To 9 LED = Encendido Pause 1000 LED = Apagado Pause 1000 Next Z GoTo Inicio End

    Subrutina Etiqueta

  • 41

    4.3.- Componentes y operadores en PicBasic.

    PIC Basic cuenta con una serie de herramientas de programacin entre las cuales podemos mencionar las etiquetas, variables, identificadores, constantes, comentarios, smbolos entre otras.

    Algunas de estas herramientas son de uso obligatorio a la hora de realizar un programa, y otras que no son de uso obligatorio, nos facilitarn el trabajo considerablemente.

    4.3.1.- Define: La directiva Define resulta muy importante en la programacin de microcontroladores con PicBasic, ya que establece una serie de parmetros que de no ser tomados en cuenta, causar que nuestros programas sencillamente no funcionen en la mayora de los casos.

    Esta serie de parmetros estn directamente relacionados con dispositivos externos al microcontrolador. Por ejemplo, si deseamos utilizar un oscilador de diferente frecuencia al valor establecido por defecto (4 Mhz), ser conveniente entonces definir la velocidad del mismo utilizando la directiva:

    Define Osc {frecuencia}

    De igual forma deben ser considerados estos parmetros para el uso de dispositivos como pantallas LCD, donde se debern definir los puertos de conexin para el bus de datos y bus de control. As mismo ocurre para el caso de las comunicaciones seriales o I2C, donde los parmetros tambin deben ser definidos. Veamos a continuacin la tabla de parmetros para el uso de la instruccin Define.

  • 42

    Parmetro Descripcin

    OSC {frecuencia} Frecuencia del Oscilador en Mhz

    LCD_DREG {puerto} Puerto de datos LCDLCD_DBIT {bit} Bit inicial del puerto de datosLCD_RSREG {puerto} Puerto para RS (Register Select) LCD_RSBIT {bit} Pin del Puerto para RSLCD_EREG {puerto} Puerto para E (Enable) LCD_EBIT {bit} Pin del Puerto para ELCD_RWREG {puerto} Puerto para RW (Read/Write)LCD_RWBIT {pin} Pin del puerto para RWLCD_LINES {lneas} Nmero de lneas de la LCD (1,2 o 4)I2C_SCLOUT 1 Interface de Reloj I2C BipolarI2C_SLOW 1 Cuando en la transferencia es utilizado un

    oscilador mas lento que 8 Mhz.

    Tabla 4.1.

    4.3.2.- Variables: En las variables podemos almacenar datos temporalmente, los cuales podrn ser consultados o modificados cada vez que sea necesario. Regularmente la definicin de variables se hace al inicio del programa y para ello se utiliza la palabra VAR seguida por el tipo de variable segn la tabla que mostramos a continuacin:

    Nombre de la Variable VAR

    Tipo de Variable Descripcin

    A1 Var Bit Toma los valores 0 y 1 unicamenteTemp Var Byte Toma valores entre 0 y 255 (8 bits)dig1 Var Word Toma valores entre 0 y 65535 (16 bits)

    Tabla 4.2.

    El nombre de la variable es elegido por el programador y el tipo de variable se define segn el tipo de dato que se desea almacenar temporalmente.

  • 43

    4.3.3.- Arrays: Las variables Arrays tienen un determinado nmero de elementos, definido segn el tamao de la variable. Las variables Arrays tipo Bit, pueden almacenar 256 elementos; las variables Arrays tipo Byte pueden almacenar hasta 96 elementos y las variables Arrays tipo Word hasta 48 elementos, los cuales a su vez pueden ser accesados en cualquiera de los tres casos a travs de un ndice. Este ndice se especfica entre corchetes como se muestra en los siguientes ejemplos:

    Para declarar una variable Array utilizamos el siguiente formato:

    Dato Var Byte[7]

    El primer elemento de esta variable es Dato[0] y el ltimo elemento es Dato[7], lo cual significa que hemos declarado una variable array de 8 elementos. En este caso podemos almacenar un byte en cada elemento, siempre especificando el ndice.

    Ejemplo: Almacenar en cada elemento de la variable Dato los valores 200, 15, 56, 75, 80, 20, 33, 45.

    Dato[0] = 200 Dato[1] = 15 Dato[2] = 56 Dato[3] = 75 Dato[4] = 80 Dato[5] = 20 Dato[6] = 33 Dato[7] = 45

    En algunos casos se debe verificar la hoja de datos del microcontrolador, ya que la cantidad de elementos que se pueden almacenar en variables arrays tipo Byte o Word puede variar segn el modelo del mismo.

  • 44

    4.3.4.- Constantes: Ayudan a identificar un valor constante en nuestro programa, facilitando an ms la comprensin del mismo a la hora de verificar su funcionamiento. En la tabla 4.3 se puede observar la forma de declarar una constante.

    Nombre de la Constante CON

    Valor de la Constante

    Temp_Max CON 150Temp_Min CON 55

    Tabla 4.3.

    4.3.5.- Smbolos o Alias: Proveen un nombre nico y especfico a elementos o variables dentro de nuestro programa. Para definir un smbolo, utilizamos la palabra Symbol, seguida del alias del elemento, el smbolo de igualdad =, y por ltimo el elemento en cuestin:

    Symbol {alias} = {elemento}

    Por ejemplo, si deseamos controlar un motor DC a travs de uno de los pines del puerto A de un microcontrolador, resultara mucho mas sencillo referirse a este pin como Motor, en vez de referirse a l como PortA.0.

    Entonces,

    Symbol Motor = PORTA.0

    Veamos otros ejemplos:

    Symbol Relay = PORTB.0 Symbol Sensor = PORTA.0

    Symbol LED = PORTA.1 Symbol RC0 = PORTC.0

  • 45

    4.3.6.- Operadores Aritmticos: Entre los operadores aritmticos ms utilizados tenemos los que se muestran en la siguiente tabla:

    Operador Descripcin Operador Descripcin+ Suma ABS Valor Absoluto- Resta SIN Seno del Angulo* Multiplicacin COS Coseno del Angulo/ Divisin MIN Minimo de un nmero// Residuo MAX Mximo de un nmero

    > Desplaza a la Derecha DIG Valor de un digito para un

    nmero decimal= Asignacin de Valores

    Tabla 4.4.

    4.3.7.- Operadores Binarios: En la siguiente tabla veremos los operadores binarios proporcionados para el Lenguaje PicBasic:

    Operrador Descripcin& AND Lgico| OR Lgico^ XOR Lgico NOT Lgico&/ NAND Lgico|/ NOR Lgico^/ NXOR Lgico

    Tabla 4.5.

    Con estos operadores resulta muy sencillo realizar operaciones binarias, como lo demuestra el siguiente ejemplo:

    Si aplicamos una AND lgica, donde deseamos filtrar los siete bits ms significativos del valor almacenado en la siguiente variable:

    Var1 = %00101001

    Entonces,

    Var1 = Var1 & %00000001

  • 46

    El resultado de esta operacin es Var1 = %00000001

    4.3.8.- Operadores de Comparacin: Los operadores de comparacin normalmente son utilizados con la instruccin IfThem para realizar comparaciones entre variables o datos extrados de alguna operacin aritmtica.

    Operador Descripcin= Igual

    Diferente< Menor que> Mayor que

    = Mayor o igual que

    Tabla 4.6.

    4.3.9.- Operadores Lgicos: Los operadores lgicos son utilizados para establecer condiciones entre variables y son utilizados de la misma manera que los operadores de comparacin.

    Operador DescripcinAND AND LgicoOR OR Lgico

    XOR XOR LgicoNOT NOT Lgico

    NOT AND NAND LgicoNOT OR NOR Lgico

    NOT XOR NXOR Lgico

    Tabla 4.7.

    Ejemplo:

    If Var1 = 1 and Var2 = 3 And Var3 = 5 Then Goto inicio

    La condicin saltar a la etiqueta inicio solo si se cumplen las tres condiciones.

  • 47

    Primeros Programas con el PIC16F84 Capitulo V

    Para aprender a programar un microcontrolador resulta importante dar inicio al tema con ejemplos prcticos y sencillos, que nos ayuden a comprender el funcionamiento de la arquitectura del PIC y las instrucciones de programa que se estn empleando.

    El primer paso entonces ser realizar el montaje del circuito con base en los conocimientos adquiridos en las pginas anteriores. Se debe tomar en cuenta que aunque en los diagramas de los circuitos que se muestran a continuacin, no estn presentes los pines de alimentacin Vcc y Gnd, stos deben ser conectados debidamente a la fuente de alimentacin de 5 Voltios.

    A medida que se van proponiendo ejemplos de aplicacin prctica, estaremos estudiando la sintaxis de las instrucciones empleadas en cada proyecto para facilitar la comprensin general de ste, referente a la programacin y diseo electrnico.

    5.1.- Proyecto #1: A continuacin realice el montaje de la figura 5.1, en base al cual realizaremos la programacin necesaria para encender dos Leds conectados a los puertos del microcontrolador:

    Figura 5.1.

  • 48

    Proyecto # 1

    Componentes Cantidad

    PIC16F84A 1 Cristal de 4 Mhz 1 Capacitor cermico de 33 pF 2 LED 2 Resistencia de 220 Ohm 2 Fuente regulada de 5 Vdc 1

    Tabla 5.1.

    El Led 1 se encuentra conectado en el pin RA0 del puerto A, el cual deber ser configurado como Salida.

    El Led 2 se encuentra conectado en el pin RB0 del puerto B, el cual deber ser configurado igualmente como Salida.

    Note que el nodo del diodo LED se encuentra conectado al pin de salida del puerto, por lo tanto para que encienda el LED debemos hacer salir un 1 lgico por el pin correspondiente.

    Como los pines de los puertos pueden ser configurados como entradas o como salidas, es importante tomar en cuenta los registros de configuracin de puertos, los cuales para el caso especfico del PIC16F84 son dos:

    TrisA (registro de configuracin I/O del puerto A), es un registro de 8 bits, de los cuales los tres ms significativos no se encuentran implementados en este modelo de microcontrolador, ya que como se puede observar en el diagrama de pines del dispositivo (figura 3.2), el puerto A solo cuenta con 5 pines (RA0, RA1, RA2, RA3 y RA4).

  • 49

    Un ejemplo de configuracin de los pines I/O del puerto A es el siguiente:

    1 1 1 1 0RA4 RA3 RA2 RA1 RA0

    Registro TrisA

    Figura 5.2.

    1 = Entrada (Al configurar un bit del registro TrisA en 1, ste se comporta como entrada).

    0 = Salida (Al configurar un bit del registro TrisA en 0, ste se comporta como salida).

    Al ver la figura 5.2, se puede observar que el pin RA0 ha sido configurado como salida y el resto de los pines como entrada.

    En PicBasic, este paso se realiza de la siguiente manera:

    TrisA = %11110 (% para expresar la configuracin en Binario), :

    TrisA = $1E ($ para expresar la configuracin en Hexadecimal)

    TrisB, es un registro de 8 bits en el cual se configuran los pines del puerto B, ya sea como entrada o como salida, por ejemplo:

    1 1 1 1 1 1 1 0RB7 RB6 RB5 RA4 RA3 RA2 RA1 RA0

    Registro TrisB

    Figura 5.3.

    1 = Entrada (Al configurar un bit del registro TrisB en 1, ste se comporta como entrada).

    0 = Salida (Al configurar un bit del registro TrisB en 0, ste se comporta como salida).

    Bit menos significativo

    Bit menos significativo

    Recordemos entonces que como el Led 1 se encuentra conectado en el pin RA0, el bit correspondiente a este pin en el registro TrisA ha sido configurado como salida.

  • 50

    Para el caso particular del puerto B, se puede observar que el pin RB0 ha sido configurado como salida y el resto de los pines como entrada.

    Consideramos importante configurar los pines que no estarn en uso como entrada, ya que de esta forma podemos evitar daos en el hardware interno del microcontrolador al experimentar con ste en un tablero de pruebas.

    La configuracin en PicBasic para el registro TrisB, ajustada al ejemplo de la figura 5.3 sera entonces la siguiente:

    TrisB = %11111110 (si se desea hacer la notacin en binario), :

    TrisB = $FE (si se desea hacer la notacin en hexadecimal)

    Antes de verificar el programa propuesto para este ejemplo, veremos la sintaxis de las instrucciones utilizadas en l, para tener una idea clara de la funcin que cumple cada instruccin. Esta informacin puede ser complementada en el captulo XV, en el cual encontrar la descripcin de cada una de las instrucciones utilizadas en cada proyecto planteado en esta edicin.

    Sintaxis de las Instrucciones empleadas en el programa:

    HIGH

    Sintaxis: HIGH pin

    La instruccin High pone en uno lgico un pin I/O especfico.

  • 51

    LOW

    Sintaxis: LOW pin

    La instruccin LOW coloca en cero lgico un pin I/O especfico.

    GOTO

    Sintaxis: GOTO etiqueta

    La instruccin Goto contina la ejecucin de un programa a partir de la etiqueta especificada (Esta instruccin no tiene retorno).

    PAUSE

    Sintaxis: PAUSE periodo

    La instruccin Pause realiza una pausa en el programa por un periodo definido en milisegundos.

    Veamos el programa en PicBasic:

    '****************************************

    '* Nombre : Proyecto1.pbp * '* Autor : Nombre del Autor * '* Copyright : Copyright (Ao) * '* Fecha : Fecha * '* Versin : 1.0 * '****************************************

    Define Osc 4 ' Define el Oscilador para un Cristal ' de 4 Mhz.

  • 52

    TRISA = %11110 ' Configuracin el Puerto A TRISB = %11111110 ' Configuracin el Puerto B

    PORTA = 0 ' Inicializa el puerto "A", es decir, ' se ponen todos los pines en cero. PORTB = 0 ' Inicializa el puerto "B".

    Inicio: ' Etiqueta de Inicio del programa

    High PORTA.0 ' Enciente el Led conectado en el pin RA0 Pause 1000 ' Hace una pausa de 1000 milisegundos = 1

    ' Seg.

    Low PORTA.0 ' Apaga el Led conectado en el pin RA0 Pause 1000 ' Hace una pausa de 1000 milisegundos = 1

    ' Seg.

    High PORTB.0 ' Enciente el Led conectado en el pin RB0 Pause 1000 ' Hace una pausa de 1000 milisegundos = 1

    ' Seg.

    Low PORTB.0 ' Apaga el Led conectado en el pin RB0 Pause 1000 ' Hace una pausa de 1000 milisegundos = 1

    ' Seg.

    GoTo Inicio ' Salta a la etiqueta "Inicio" y se repite el ' proceso. End

    La instruccin High se encarga de poner un nivel lgico alto en el pin especificado seguidamente. En este caso, primero se escribe el puerto y seguido de un punto, se especifica el nmero del pin en el puerto que deseamos utilizar.

    La instruccin Low es responsable en este caso de poner el pin especificado en un nivel lgico bajo. Al igual que en la instruccin High, se debe especificar el puerto y el pin del puerto a ser utilizado.

    La instruccin GoTo realiza un salto hacia una etiqueta especfica; en este caso el programa salta a la etiqueta Inicio para empezar de nuevo todo el proceso.

  • 53

    Al escribir el programa en el editor de texto de Microcode Studio, se debe grabar el mismo con el nombre de su preferencia para que ste pueda ser compilado y al mismo tiempo pueda ser enviado al microcontrolador.

    Observe que para este programa, hemos designado el nombre Proyecto1.pbp (figura 5.4).

    Figura 5.4.

    Antes de compilar el programa, se debe asegurar de seleccionar el modelo apropiado de microcontrolador PIC, como se observa en la figura 5.5. Luego se compila el programa y se verifica que ste no tenga errores.

  • 54

    Figura 5.5.

    Seguidamente, se debe proceder a cargar el programa compilado en el microcontrolador con la ayuda del programador de microcontroladores Pic.

    Al hacer clic en el icono Compilar y Grabar en el PIC (ver figura 5.5), el compilador habr generado un archivo de nombre Ejemplo1.hex y seguidamente se abrir el software Picall/P16Pro, como se observa en la figura 5.6:

    Figura 5.6.

    En este momento el microcontrolador deber estar montado en la base del programador en la posicin indicada por la figura 5.6.

    Compilar Compilar y Grabar en el PIC

    Modelo del uC.

  • 55

    Antes de programar el microcontrolador, tambin resulta conveniente verificar los fusibles de programacin, accediendo al botn Config, el cual puede ser visualizado en la figura 5.6.

    En esta seccin se debe configurar el tipo de oscilador utilizado en nuestro circuito, as como otras opciones disponibles que comentaremos a continuacin (ver figura 5.7).

    Figura 5.7.

    En la figura 5.7 se pueden observar tres secciones llamadas Oscillator, Hardware y Protection:

    En la seccin Oscillator, debemos seleccionar el tipo de oscilador utilizado en nuestro circuito electrnico, el cual en este caso es del tipo XT, debido a que el cristal que hemos elegido es de 4 Mhz.

    En la seccin Hardware es posible activar el temporizador Perro Guardin, el cual se encarga de reiniciar el microcontrolador en caso de fallas o bloqueos en el programa. Para utilizar el Watchdog es necesario disear el programa bajo ciertos parmetros, de forma que podamos reiniciar el temporizador Watchdog antes de que ste se desborde y provoque un Reset en el sistema. Si nuestro programa llegara a fallar, el temporizador Watchdog completara su conteo y se desbordara, provocando un Reset del sistema.

  • 56

    En la seccin Hardware tambin disponemos de la opcin Power Up Timer, la cual una vez activada en el microcontrolador, har que ste no pueda iniciar el programa hasta tanto el voltaje aplicado al circuito sea estable y seguro (ver figura 5.8).

    0

    1

    2

    3

    4

    5

    6

    1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61Tiempo

    Volti

    os

    Figura 5.8.

    En la seccin Protection, tenemos la posibilidad de proteger el cdigo de programa almacenado en la memoria del microcontrolador.

    Finalmente hacemos clic en el botn Program (ver figura 5.6), para descargar el programa Proyecto1.hex en el microcontrolador; inmediatamente se podr ver el proceso de grabacin y verificacin de datos, para luego culminar con el montaje del microcontrolador en el circuito de prueba.

    Estos pasos se deben aplicar en cada uno de los proyectos aqu planteados, o cada vez que se desee realizar una modificacin a un programa para obtener siempre mejores resultados sobre el objetivo propuesto en cada actividad.

  • 57

    5.2.- Proyecto #2: En este ejemplo conectaremos un Led en cada pin del puerto B, el cual a su vez deber ser configurado como salida para garantizar el correcto funcionamiento del mismo. En la figura 5.9 podemos observar en detalle la conexin del circuito elctrico que deber ser montado.

    Figura 5.9.

    Proyecto # 2

    Componente Cantidad

    PIC16F84A 1 Cristal de 4 Mhz 1 Capacitor de 33 pF 2 LED 8 Resistencia de 220 Ohm 8 Fuente regulada de 5 Vdc 1

    Tabla 5.2.

  • 58

    En el proyecto #1 se pudo observar como es posible encender un led conectado a un pin del puerto A o B en un PIC16F84A, utilizando las instrucciones High y Low. Tambin existen otras formas de poner un 1 o un 0 lgico en un pin configurado como salida; esto se puede lograr de varias maneras:

    PORTA.0 = 1 ' RA0 = 1 -> (es igual a High PortA.0)

    PORTA.0 = 0 ' RA0 = 0 -> (es igual a Low PortA.0)

    Cuando deseamos poner varios pines de un mismo puerto en 1, podemos utilizar las siguientes opciones:

    PORTB = %10101010 ' RB7 = 1, RB5 = 1, RB3 = 1, RB1 = 1 ' RB6 = 0, RB4 = 0, RB2 = 0, RB0 = 0

    Este mismo ejemplo de configuracin en hexadecimal:

    PORTB = $AA ' RB7 = 1, RB5 = 1, RB3 = 1, RB1 = 1 ' RB6 = 0, RB4 = 0, RB2 = 0, RB0 = 0

    Recordemos que el smbolo % expresa la notacin en binario, por lo cual se deben expresar los ocho bits a ser cargados en el registro PortB. Otra forma de expresar este ejemplo sera colocando la notacin en hexadecimal con el smbolo $, seguido del valor calculado.

    Basados en esta informacin podemos lograr encender y apagar varios leds simultneamente conectados a uno de los puertos del microcontrolador como lo muestra el montaje de la figura 5.9.

    Veamos el siguiente programa:

    '****************************************

    '* Nombre : Proyecto2.pbp * '* Autor : Nombre del Autor * '* Copyright : Copyright (Ao) * '* Fecha : Fecha * '* Versin : 1.0 * '****************************************

  • 59

    Define Osc 4 ' Define el Oscilador para un Cristal ' de 4 Mhz.

    TRISB = %00000000 ' Configura el Puerto B como Salida

    PORTB = %00000000 ' Inicializa el puerto "B".

    Inicio: ' Etiqueta de Inicio del programa

    PORTB = %01010101 ' Enciente las salidas RB0, RB2, RB4 y RB6, al ' mismo tiempo apaga RB1, RB3, RB5 y RB7.

    Pause 1000 ' Hace una pausa de 1000 milisegundos = 1 Seg.

    PORTB = %10101010 ' Enciente las salidas RB1, RB3, RB5 y RB7, al ' mismo tiempo apaga RB0, RB2, RB4 y RB6.

    Pause 1000 ' Hace una pausa de 1000 milisegundos = 1 Seg.

    GoTo Inicio ' Salta a la etiqueta "Inicio" y se repite el ' proceso.

    End

    Este programa enciende primero las salidas pares del puerto B y apaga las salidas impares, genera una pausa de 1 segundo (1000 ms) y seguidamente hace el proceso inverso en las salidas, es decir, enciende las salidas impares y apaga las salidas pares para generar nuevamente otra pausa de 1 segundo y as repetir el proceso completo al generar un salto a la etiqueta Inicio.

  • 60

    5.3.- Proyecto #3: Los pines en los puertos de un microcontrolador pueden ser configurados tambin como entradas, como se detalla en el contenido del proyecto #1, donde se explica claramente que al poner un 1 en un bit de un registro de configuracin de puerto, ya sea TRISA o TRISB, para el caso del PIC16F84A, ste se comportar como entrada. Realice el montaje de la figura 5.10 y analice el programa que se muestra a continuacin.

    Figura 5.10.

    Proyecto # 3

    Componente Cantidad

    PIC16F84A 1 Cristal de 4 Mhz 1 Capacitor cermico de 33 pF 2 LED 1 Resistencia de 220 Ohm 1 Resistencia de 10K Ohm 1 Pulsador Normalmente Abierto 1 Fuente regulada de 5 Vdc 1

    Tabla 5.3.

  • 61

    IF THEM ELSE

    Sintaxis: If expresin 1 {AND / OR expresin 2} Then etiqueta

    Con la instruccin If Them podemos tomar decisiones a lo largo de un programa, basadas en condiciones especficas definidas por el programador.

    El siguiente programa hace destellar un LED conectado en RB0, solo cuado el pulsador es activado:

    '****************************************

    '* Nombre : Proyecto3.pbp * '* Autor : Nombre del Autor * '* Copyright : Copyright (Ao) * '* Fecha : Fecha * '* Versin : 1.0 * '****************************************

    Define Osc 4 ' Define el Oscilador para un Cristal ' de 4 Mhz.

    TRISA = %11111 ' configura el Puerto A como Entrada TRISB = %00000000 ' Configura el Puerto B como Salida

    PORTB = $00 ' Inicializa el puerto B

    Inicio:

    If PORTA.0 = 1 Then PORTB.0 = 1 ' Pregunta si RA0 = 1, si se cumple ' la condicin entonces enciende el Led.

    Pause 1000 ' Hace una pausa de 1 segundo (1000 ms)

    Low PORTB.0 ' Apaga el Led

    Pause 1000 ' Hace una pausa de 1 segundo (1000 ms)

    GoTo inicio ' Salta a la etiqueta "Inicio"

    End

    Para verificar si el pulsador est activado, se pregunta si RA0 = 1. Esto es posible gracias a la instruccin IF la cual genera un resultado siempre que la condicin planteada se cumpla, y para lo cual debemos utilizar necesariamente su complemento Then seguido de la accin a ser tomada.

  • 62

    En este caso si el pulsador ha sido activado, entonces RA0 = 1, es decir, se cumple la condicin y por lo tanto RB0 = 1, es decir, el LED enciende.

    5.4.- Proyecto #4: En este ejemplo empleamos un microcontrolador PIC16F877A, con el cual nos hemos planteado la lectura de ocho pulsadores conectados al puerto B, de tal manera que al activar uno de ellos podemos mostrar un dgito decimal en un Display de siete segmentos.

    Figura 5.11.

  • 63

    Proyecto # 4

    Componente Cantidad

    PIC16F877A 1 Cristal de 4 Mhz 1 Capacitor cermico de 33 pF 2 Resistencia de 220 Ohm 8 Resistencia de 10K Ohm 8 Pulsador Normalmente Abierto 8 Display de 7 Segmentos - Ctodo comn 1 Fuente regulada de 5 Vdc 1

    Tabla 5.4.

    En el diagrama esquemtico de la figura 5.11 se pueden observar ocho pulsadores normalmente abiertos, los cuales una vez activados generan un estado lgico alto en el puerto seleccionado (puerto B), el cual ha sido configurado como entrada.

    El display de 7 segmentos de ctodo comn, se encuentra conectado al puerto D, donde el bit menos significativo RB0 corresponde al segmento a del display, RB1 corresponde al segmento b, RB2 corresponde al segmento c, RB3 corresponde al segmento d, RB4 corresponde al segmento e, RB5 corresponde al segmento f y RB6 corresponde al segmento g.

    El siguiente programa es una forma bsica de tomar una lectura de cada pulsador conectado al puerto B y generar un resultado en el puerto de salida al cual hemos conectado un display de 7 segmentos:

    '****************************************

    '* Nombre : Proyecto4.pbp * '* Autor : Nombre del Autor * '* Copyright : Copyright (Ao) * '* Fecha : Fecha * '* Versin : 1.0 * '****************************************

  • 64

    Define Osc 4 ' Define el Oscilador para un Cristal ' de 4 Mhz.

    TRISB = $FF ' Configura el Puerto B como Entrada TrisD = $00 ' Configura el Puerto D como Salida

    Inicio:

    ' A continuacin se verifica cada pin del puerto B, ' si hay un 1 lgico en alguna de las entradas el ' puerto D se actualiza con el dato correspondiente ' para generar en el Display un dgito decimal.

    ' gfedcba ' ||||||| If PORTB.0 = 1 Then PortD = %00111111 ' Enciende los segmentos correspondientes ' al dgito cero en el display.

    If PORTB.1 = 1 Then PortD = %00000110 ' Enciende los segmentos correspondientes ' al dgito uno en el display.

    If PORTB.2 = 1 Then PortD = %01011011 ' Enciende los segmentos correspondientes ' al dgito dos en el display.

    If PORTB.3 = 1 Then PortD = %01001111 ' Enciende los segmentos correspondientes ' al dgito tres en el display.

    If PORTB.4 = 1 Then PortD = %01100110 ' Enciende los segmentos correspondientes ' al dgito cuatro en el display.

    If PORTB.5 = 1 Then PortD = %01101101 ' Enciende los segmentos correspondientes ' al dgito cinco en el display.

    If PORTB.6 = 1 Then PortD = %01111101 ' Enciende los segmentos correspondientes ' al dgito seis en el display.

    If PORTB.7 = 1 Then PortD = %00000111 ' Enciende los segmentos correspondientes ' al dgito siete en el display.

    GoTo Inicio ' Salta a la etiqueta "Inicio"

    End

  • 65

    5.5.- Proyecto #5: En el ejemplo a continuacin se realiza un conteo ascendente desde cero hasta nueve en un display de 7 segmentos conectado al puerto D de un PIC16F877A.

    Figura 5.12.

    Proyecto # 5

    Componente Cantidad

    PIC16F877A 1 Cristal de 4 Mhz 1 Capacitor cermico de 33 pF 2 Resistencia de 220 Ohm 8 Display de 7 Segmentos - Ctodo comn 1 Fuente regulada de 5 Vdc 1

    Tabla 5.5.

  • 66

    FOR NEXT

    Sintaxis: For variable = inicio to final {step {-} incremento} *

    *

    Instrucciones *

    *

    Next { variable}

    La instruccin ForNext se encarga de hacer repeticiones de instrucciones que permanecen dentro del lazo For Next.

    El parmetro Step afecta el incremento segn el valor asignado despus de esta palabra. Si este parmetro es omitido, el incremento es en una unidad.

    Analice el siguiente programa:

    '****************************************

    '* Nombre : Proyecto5.pbp * '* Autor : Nombre del Autor * '* Copyright : Copyright (Ao) * '* Fecha : Fecha * '* Versin : 1.0 * '****************************************

    Define Osc 4 ' Define el Oscilador para un Cristal ' de 4 Mhz.

    I Var Byte ' Declaracin de la Variable "I" tipo Byte

    ' Constantes para definir cada dgito decimal en el Display:

    ' gfedcba ' ||||||| Cero CON %00111111 Uno CON %00000110 Dos CON %01011011 Tres CON %01001111 Cuatro CON %01100110 Cinco CON %01101101 Seis CON %01111101 Siete CON %00000111

  • 67

    Ocho CON %01111111 Nueve CON %01100111

    ' Configuracin del Puerto de Salida:

    TrisD = $00 ' Configura el Puerto D como Salida

    Inicio:

    For I = 0 To 9 ' Repeticin de Instrucciones dentro del Lazo ' For - Next

    Call Digito ' Salto con Retorno hacia la etiqueta "Digito"

    Pause 1000 ' Pausa de 1 segundo (1000 ms)

    Next I

    GoTo Inicio ' Salta a la etiqueta "Inicio"

    Digito:

    ' Verificacin del dgito a ser mostrado en el Display el cual ' se corresponde con el valor almacenado en la variable "I".

    If I = 0 Then PortD = cero If I = 1 Then PortD = Uno If I = 2 Then PortD = dos If I = 3 Then PortD = tres If I = 4 Then PortD = cuatro If I = 5 Then PortD = cinco If I = 6 Then PortD = seis If I = 7 Then PortD = siete If I = 8 Then PortD = ocho If I = 9 Then PortD = nueve

    Return ' Retorna una lnea despus del salto con retorno (Call) End

    Al iniciar el conteo en el display de 7 segmentos, se puede observar un conteo ascendente que da inicio en cero y se va incrementando en una unidad cada segundo hasta llegar a nueve.

    Si deseamos realizar el incremento en ms de una unidad por vez, tan solo debemos incluir la directiva Step, seguido del incremento, es decir, si queremos realizar un incremento de dos unidades por vez, entonces el lazo For Next se compone de la siguiente manera:

  • 68

    For I = 0 To 9 Step 2 ' Repeticin de Instrucciones dentro del Lazo ' For Next con incremento en dos unidades.

    Call Digito ' Salto con Retorno hacia la etiqueta "Digito"

    Pause 1000 ' Pausa de 1 segundo (1000 ms)

    Next I

    Esto significa que el conteo arranca en cero y cada segundo transcurrido se podrn ver los dgitos: 2, 4, 6 y 8.

    Para realizar un conteo regresivo, el lazo For Next se compone de la siguiente forma:

    For I = 9 To 0 Step -1 ' Repeticin de Instrucciones dentro del Lazo ' For Next.

    Call Digito ' Salto con Retorno hacia la etiqueta "Digito"

    Pause 1000 ' Pausa de 1 segundo (1000 ms)

    Next I

    En este caso en conteo inicia en nueve y decrece en una unidad hasta llegar a cero.

    5.6.- Proyecto #6: PicBasic cuenta con una instruccin capaz de generar tonos DTMF (Dual Tone Multifrecuency - Multifrecuencia de doble tono), tonos que se utilizan en telefona para marcar una serie de nmeros y as poder establecer la comunicacin entre dos o ms personas. Una aplicacin interesante para esta instruccin podra ser el discado de nmeros telefnicos en sistemas de alarma cuando ha sido activado un dispositivo de supervisin, para luego generar un mensaje de voz que nos alerte de dicho evento.

    Realice el montaje de la figura 5.13 y analice el programa que se muestra a continuacin, el cual genera tonos DTMF consecutivos de una serie de dgitos predefinidos. Es muy importante considerar que para generar los tonos adecuadamente el oscilador externo debe ser de 10 Mhz o superior.

  • 69

    Figura 5.13.

    Proyecto # 6

    Componente Cantidad

    PIC16F84A 1 Cristal de 10 Mhz 1 Capacitor cermico de 33 pF 2 Capcitor Electroltico de 10 uF 2 Parlante de 8 Ohm 1 Fuente regulada de 5 Vdc 1

    Tabla 5.6.

    En la tabla 5.7 se puede observar la frecuencia baja y la frecuencia alta de cada digito entre cero y quince, los cuales se corresponden a su vez con cada uno de los dgitos de un teclado telefnico, como se puede observar en la segunda columna de la misma tabla.

    Esto quiere decir que si generamos las frecuencias correspondientes al dgito 1 utilizando la instruccin DTMFout, obtendremos las mismas frecuencias baja y alta que se generan al pulsar el dgito 1 de cualquier telfono de tonos DTMF. Si deseramos generar desde el microcontrolador el tono DTMF

  • 70

    correspondiente al dgito 0 de un teclado telefnico, entonces, segn la tabla 5.7, el dgito a introducir en la instruccin DTMFout deber ser el 10.

    Dgito en la Instruccin DTMFout

    Dgito en un Teclado

    Telefnico

    Frecuencias Bajas

    Frecuencias Altas

    1 1 697 HZ 1209 HZ2 2 697 HZ 1336 HZ3 3 697 HZ 1477 HZ4 4 770 HZ 1209 HZ5 5 770 HZ 1336 HZ6 6 770 HZ 1477 HZ7 7 852 HZ 1209 HZ8 8 852 HZ 1336 HZ9 9 852 HZ 1477 HZ10 0 941 HZ 1209 HZ11 * 941 HZ 1336 HZ12 # 941 HZ 1477 HZ13 A 697 HZ 1633 HZ14 B 770 HZ 1633 HZ15 C 852 HZ 1633 HZ0 D 941 HZ 1633 HZ

    Tabla 5.7.

    Figura 5.14.

  • 71

    Antes de empezar a programar, vamos a verificar la sintaxis de la instruccin DTMFout:

    DTMFout

    Sintaxis: DTMFout pin, {On-ms, Off-ms}, [tono, tono,...tono]

    La instruccin DTMFout genera tonos DTMF en secuencia y a travs de un puerto cualquiera del microcontrolador.

    Pin: especifica el pin del puerto en el cual se emitirn los tonos DTMF.

    On-ms: es una variable o constante que especifica la duracin de cada tono en milisegundos. En caso de no utilizar este parmetro, el tiempo por defecto de cada tono es de 200 ms.

    Off-ms: es una variable o constante que especifica el tiempo en milisegundos del silencio que hay entre cada tono. En caso de no utilizar este parmetro, el tiempo en silencio entre cada tono por defecto ser de 50 ms.

    Tono: puede ser una variable o constante entre 0 y 15, que especifica el tono que debe ser generado.

  • 72

    Programa en Pic Basic:

    '****************************************

    '* Nombre : Proyecto6.pbp * '* Autor : Nombre del Autor * '* Copyright : Copyright (Ao) * '* Fecha : Fecha * '* Versin : 1.0 * '****************************************

    Define Osc 10 ' Define el Oscilador en 10 Mhz.

    TRISA = $FE ' Configura el pin RA0 como Salida ' y el resto de los pines como entrada.

    Inicio:

    DTMFOut PORTA.0, [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

    Pause 2000 ' Genera una pausa de 2 segundos.

    DTMFOut PORTA.0, 400, 150, [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

    Pause 2000 ' Genera una pausa de 2 segundos.

    GoTo Inicio ' Salta a la etiqueta "Inicio".

    End

  • 73

    Observe que en la primera instruccin DTMFout, despus de la etiqueta Inicio, no se especifica la duracin de cada tono y el tiempo en silencio entre cada tono. Esto significa que el microcontrolador genera cada tono con una duracin de 200 milisegundos por defecto, y un tiempo en silencio entre cada tono de 50 milisegundos como se muestra en las figuras 5.15 y 5.16 respectivamente:

    Figura 5.15.

  • 74

    Figura 5.16.

    La segunda instruccin DTMFout, despus de la etiqueta Inicio, tiene definido un tiempo de duracin para cada tono de 400 milisegundos (figura 5.17), y un tiempo de espera entre cada tono de 150 milisegundos (figura 5.18). Estos tiempos pueden ser ajustados a conveniencia cada vez que sea necesario.

  • 75

    Figura 5.17.

    Figura 5.18.

  • 76

    5.7.- Proyecto #7: En este proyecto estudiaremos la instruccin Button, la cual es utilizada para la eliminacin de rebotes en pulsadores o para efectuar repeticiones en un botn, como sucede en el caso de los teclados de las computadoras, en las cuales si dejamos presionado un botn o tecla, la misma se repite indefinidamente a una frecuencia especfica, la cual puede ser variada fcilmente como lo demostraremos a continuacin.

    Antes de empezar, veamos la sintaxis de la instruccin Button:

    Button

    Sintaxis: Button pin, estado, retardo, rango, variable, accin, etiqueta

    La instruccin Button elimina los rebotes de un pulsador o switch, y genera auto-repeticin.

    Pin: especifica el pin del puerto en el cual ser conectado el pulsador.

    Estado: indica cual es estado lgico que debe ocurrir cuando el pulsador es presionado (0 o 1). Si es 0, el pulsador deber ser activo-bajo y si es 1, el pulsador deber ser activo-alto (Ver figura 5.19).

  • 77

    Figura 5.19.

    Retardo: es una variable o constante (0 255) que especifica cuantos ciclos deben pasar antes de efectuar la auto-repeticin. Este campo tiene dos funciones especiales: si el campo retardo es igual 0, no permite anti-rebote y no permite auto-repeticin. Si el campo retardo es igual a 255, permite el anti-rebote pero no permite la auto-repeticin.

    Rango: es una variable o constante (0 255) que especifica el nmero de ciclos entre auto-repeticiones.

    Variable: es una variable auxiliar tipo Byte, definida tambin al inicio del programa para uso exclusivo de la instruccin Button, por lo cual no deber ser utilizada con otro fin en el programa. Siempre debe ser inicializada antes del comando Button.

    Accin: indica el estado del botn cuando ste no es presionado.

  • 78

    Etiqueta: la instruccin realiza un salto a la etiqueta definida en este campo cuando el pulsador no ha sido presionado.

    Adicionalmente utilizaremos la instruccin Pulsout en el ejemplo, para generar pulsos de tiempo definido.

    PULSout

    Sintaxis: PULSout pin, nivel, variable

    La instruccin PULSout, genera pulsos con una duracin definida en decenas de microsegundos. (Tiene una resolucin de 10 microsegundos para un oscilador de 4 Mhz, y una resolucin de 2 microsegundos para un oscilador de 20 Mhz).

  • 79

    Para este proyecto hemos preparado tres ejemplos los cuales estn basados en el circuito de la figura 5.20.

    Figura 5.20.

    Proyecto # 7 - 7.1 - 7.2 - 7.3

    Componente Cantidad

    PIC16F877A 1 Cristal de 4 Mhz 1 Capacitor cermico de 33 pF 2 Resistencia de 10K Ohm 1 Pulsador Normalmente Abierto 1 Fuente regulada de 5 Vdc 1

    Tabla 5.8.

  • 80

    Se puede observar en el diagrama esquemtico, que mientras el pulsador permanece abierto, hay un cero lgico en el pin RB0, el cual debemos configurar como entrada en el programa. Cuando el pulsador sea presionado, el estado lgico en el pin RB0 ser un uno lgico.

    La salida a travs de la cual se van a generar los pulsos ser el pin RB1, en el cual hemos conectado un osciloscopio para poder ver el resultado de las seales generadas a partir de las especificaciones dadas en cada ejemplo a continuacin.

    5.7.1.- Proyecto #7.1: Para el primer ejemplo, se pide generar un pulso de 1.5 milisegundos una vez presionado el botn. Luego, pasados 20 milisegundos con el botn presionado, debe empezar una auto-repeticin de este pulso cada 10 milisegundos.

    Veamos el siguiente programa:

    Define Osc 4

    TRISB = %11111101 ' Configuracin del puerto B

    A Var Byte ' declaracin de la variable A para la instruccin Button.

    A = 0 ' inicializa la variable A PORTB.1 = 0 ' Inicializa la Salida RB0

    Inicio:

    Button PORTB.0,1,2,1,A,0,Tiempo

    PulsOut PORTB.1,150 ' Genera un pulso de 1.5ms o 150 decenas de ' microsegundos. Tiempo:

    Pause 10 ' Pausa de 10 milisegundos GoTo Inicio ' Salta a inicio End

  • 81

    Ahora analicemos la secuencia del programa:

    Mientras el pulsado