programar pic`s en lenguaje c18 en 64 horas. el siguiente material está desarrollado como...

31
Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores , puede ser utilizados por docentes y estudiantes con disciplina de autoaprendizaje. Autor: Ramdhar Hadit Yusseff Vanegas Esp. En control e instrumentación industrial Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 2.5 Colombia .

Upload: oscar-pereyra-olivares

Post on 24-Jan-2016

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Programar PIC`s en lenguaje C18 En 64 horas.

El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores, puede ser utilizados por docentes y estudiantes con disciplina de autoaprendizaje.

Autor: Ramdhar Hadit Yusseff Vanegas Esp. En control e instrumentación industrial

                          Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 2.5 Colombia.

Page 2: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Programación de pantallas LCD 2*16 y

teclados matriciales.

Tema 11

Page 3: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

El display LCD es un dispositivo que permite visualizar un contenido de forma grafica o alfanumérica, por medio de símbolos y caracteres establecidos en la memoria en código ASCII. Normalmente se encuentra gobernada por un microcontrolador para configurar su funcionamiento.

LCD Display de Cristal Liquido 2x16

Clase 6

www.unocero.com www.artemecatronica.com

www.hwkitchen.comwww.wulfden.org

www.coldfire-electronica.com

Page 4: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Conexión de la LCD

Clase 6

Etapa Alimentación

Etapa Alimentación

Etapa bidireccional de datos

Page 5: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Pines de alimentación:

1. Vss: Gnd2. Vdd: +5 voltios3. Vee: corresponde al pin de contraste, se regula por medio de un potenciómetro como muestra la figura anterior.

Pines de control:

4. RS: Pin de selección registro de control (0) o registro de datos (1). 5. RW: Corresponde al pin de Escritura(0) o de Lectura(1). 6. E: Corresponde al pin Enable o de habilitación.

Pines de Bus de datos:7 – 14. El Bus de datos bidireccional comprende los pines D0 a D7.

Display 7 segmentos Cátodo Común

Clase 6

Page 6: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

www.thelearningpit.com

Clase 6

Page 7: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Conexión de la LCD

Clase 6

Page 8: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Clase 6

RUTINA CLEAR DISPLAY

RE2 RE1 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

RS RW D7 D6 D5 D4 D3 D2 D1 D0

0 0 0 0 0 0 0 0 0 1

#define lcd_rs LATEbits.LATE2 #define lcd_RW LATEbits.LATE1 #define lcd_enable LATEbits.LATE0

lcd_rs=0;lcd_enable=1;PORTD= 0x01; delay_ms(2);lcd_enable=0;delay_ms(2);

Función retardo basada en 20MHz

void delay_ms (unsigned int retardo){unsigned int k;for(k=0;k<retardo;k++){Delay1KTCYx(5);

Page 9: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Clase 6

RUTINA HOME DISPLAY

RE2 RE1 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

RS RW D7 D6 D5 D4 D3 D2 D1 D0

0 0 0 0 0 0 0 0 1 1

#define lcd_rs LATEbits.LATE2 #define lcd_RW LATEbits.LATE1 #define lcd_enable LATEbits.LATE0

lcd_rs=0;lcd_enable=1;PORTD= 0x03; delay_ms(2);lcd_enable=0;delay_ms(2);

Función retardo basada en 20MHz

void delay_ms (unsigned int retardo){unsigned int k;for(k=0;k<retardo;k++){Delay1KTCYx(5);

Page 10: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Clase 6

RUTINA ENTRY MODE SET DISPLAY

RE2 RE1 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

RS RW D7 D6 D5 D4 D3 D2 D1 D0

0 0 0 0 0 0 0 1 1 0

lcd_rs=0;lcd_enable=1;PORTD= 0x06; delay_ms(2);lcd_enable=0;delay_ms(2);

Función retardo basada en 20MHz

void delay_ms (unsigned int retardo){unsigned int k;for(k=0;k<retardo;k++){Delay1KTCYx(5);

Page 11: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Clase 6

RUTINA DISPLAY CONTROL

RE2 RE1 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

RS RW D7 D6 D5 D4 D3 D2 D1 D0

0 0 0 0 0 0 1 1 1 1

lcd_rs=0;lcd_enable=1;PORTD= 0x0F; delay_ms(2);lcd_enable=0;delay_ms(2);

Page 12: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Clase 6

RUTINA DESPLAZAR CURSOR O DISPLAY

RE2 RE1 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

RS RW D7 D6 D5 D4 D3 D2 D1 D0

0 0 0 0 0 1 0 1 0 0

lcd_rs=0;lcd_enable=1;PORTD= 0x14; delay_ms(1);lcd_enable=0;delay_ms(1);

Page 13: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Clase 6

RUTINA DE FUNCIONES (CARACTERISTICAS)

RE2 RE1 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

RS RW D7 D6 D5 D4 D3 D2 D1 D0

0 0 0 0 1 1 1 0 0 0

lcd_rs=0;lcd_enable=1;PORTD= 0x38; delay_ms(1);lcd_enable=0;delay_ms(1);

Page 14: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Clase 6

RUTINA CLEAR DISPLAY

RE2 RE1 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

RS RW D7 D6 D5 D4 D3 D2 D1 D0

1 0 0 1 0 0 0 0 0 1

lcd_rs=1;lcd_enable=1;PORTD= ‘A’; delay_ms(1);lcd_enable=0;delay_ms(1);

www.elproducto.co

Page 15: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Ejercicio Display LCD Escriba correctamente el numero binario y

hexadecimal que debe tener un puerto para representar los siguientes números en un display de cristal liquido (LCD)

BIN: BIN: BIN: BIN:

HEX: HEX: HEX: HEX:

Clase 6

Page 16: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Enviar palabra completa “saludo”

unsigned char Mensaje [16] = {“ABCDEFGHIJKLMNOP”};

for (i=0; i<=15;i++) {lcd_rs=1;lcd_enable=1;PORTD= Mensaje[i]; delay_ms(1);lcd_enable=0;delay_ms(1);

}

Clase 6

www.elproducto.co

Page 17: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Direcciones de memoria DD RAM

Clase 6

Esta función sirve para posicionar el cursor en la culumna y fila deseada. Las direcciones de la 80h a la 8Fh corresponden con los 16 caracteres del primer renglón y de la C0h a la CFh con los 16 caracteres del segundo renglón, para este modelo.

Filas0x800xC0

Columnas

Columnas

80 8F

C0 CF

www.elproducto.co

Page 18: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Void lcd_enviar (unsigned char dir, unsigned char valor){

If (dir = 0){lcd_rs=0;lcd_enable=1;PORTD= valor;delay_ms(1);lcd_enable=0;delay_ms(1);}else{lcd_rs=1;lcd_enable=1;PORTD= valor;delay_ms(1);lcd_enable=0;delay_ms(1);}}

Clase 6

Función lcd_enviar

Con esta función se va a configurar con RS=0 y a escribir RS=1 en la LCD.

Page 19: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Void lcd_gotoxy (unsigned char x, unsigned char y){char dir ;if(y!=1)dir=0xC0;else dir=0;dir+=x-1Lcd_enviar(0, 0x80|dir) ;}

Clase 6

Función goto (x,y)

Con esta funcion se posiciona el cursor en la fila y columna deseada.

Page 20: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Ejerciciomostrar un mensaje en la LCD

Clase 6

RA0/AN0/C1IN-2

RA1/AN1/C2IN-3

RA2/AN2/C2IN+/VREF-/CVREF4

RA3/AN3/C1IN+/VREF+5

RA4/T0CKI/C1OUT6

RA5/AN4/SS/HLVDIN/C2OUT7

RA6/OSC2/CLKO14

RA7/OSC1/CLKI13

RB0/AN12/FLT0/INT033

RB1/AN10/INT134

RB2/AN8/INT235

RB3/AN9/CCP2A36

RB4/KBI0/AN1137

RB5/KBI1/PGM38

RB6/KBI2/PGC39

RB7/KBI3/PGD40

RC0/T1OSO/T13CKI15

RC1/T1OSI/CCP2B16

RC2/CCP1/P1A17

RC3/SCK/SCL18

RC4/SDI/SDA23

RC5/SDO24

RC6/TX/CK25

RC7/RX/DT26

RD0/PSP019

RD1/PSP120

RD2/PSP221

RD3/PSP322

RD4/PSP427

RD5/PSP5/P1B28

RD6/PSP6/P1C29

RD7/PSP7/P1D30

RE0/RD/AN58

RE1/WR/AN69

RE2/CS/AN710

RE3/MCLR/VPP1

U1

PIC18F4620

D7

14D

613

D5

12D

411

D3

10D

29

D1

8D

07

E6

RW

5R

S4

VS

S1

VD

D2

VE

E3

50%

RV1

1k

Page 21: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

#ifndef __lcd4550_H // instrucción de creación de librería#define __lcd4550_H // instrucción de creación de librería

/********* Definición de pines***************/#define LCD_LINEA2 0xC0 // Dirección de memoria para la segunda línea#define lcd_rs LATEbits.LATE2 #define lcd_RW LATEbits.LATE1 #define lcd_enable LATEbits.LATE0 #define DATOS PORTD // puerto de salida de datos

/******definición del registro de control (RS)******/#define LCD_DATO 1 // para escribir en la pantalla#define LCD_COMANDO 0 // para configurar el lcd

/*******Definicion de configuraciones del lcd*******/#define LCD_CLEAR 0x01 // 0b00000001#define LCD_HOME 0x02

Clase 6Crear librería para LCD (lcd4550.h)

Se va a crear una librería con el fin de facilitar la programación de los códigos, esta librería se debe grabar con extensión “.h”.

Page 22: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Continuación Crear librería para LCD (lcd4550.h)

// Opciones para el display#define LCD_DISPLAY_OFF 0x08#define LCD_DISPLAY_ON 0x0C#define LCD_CURSOR_ON 0x0E#define LCD_CURSOR_BLINK 0x0F#define LCD_ENTRY_MODE 0X07

// Opciones especiales del cursor#define LCD_CURSOR_SHIFT_RIGHT 0x14#define LCD_CURSOR_SHIFT_LEFT 0x10#define LCD_DISPLAY_SHIFT_RIGHT 0x1C#define LCD_DISPLAY_SHIFT_LEFT 0x18

// Configurar el hardware#define LCD_DISPLAY_8_BITS 0x3F //0b00111000#define LCD_DISPLAY_4_BITS 0x28 //0b00111000

Clase 6

Page 23: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

/*******funciones para el manejo de los delays*******/void delay_ms (unsigned int retardo){unsigned int k;for(k=0;k<retardo;k++){Delay1KTCYx(5); // retardo de 1ms con reloj de // Cycles = (TimeDelay * Fosc) / 4// Cycles = (1ms * 20MHz) / 4// Cycles = 5,000}}void delay_us (unsigned int retardo) // solo sirve para números mayores a 10{retardo =retardo/10;unsigned int k;for(k=0;k<retardo;k++){Delay10TCYx( 5 );// retardo de 1us// Cycles = (TimeDelay * Fosc) / 4// Cycles = (1us * 20MHz) / 4// Cycles = 5}}

Clase 6Continuación Crear librería para LCD (lcd4550.h)

Page 24: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Clase 6

Void lcd_enviar (unsigned char dir, unsigned char valor){

If (dir = 0){lcd_rs=0;lcd_enable=1;PORTD= valor;delay_ms(1);lcd_enable=0;delay_ms(1);}else{lcd_rs=1;lcd_enable=1;PORTD= valor;delay_ms(1);lcd_enable=0;delay_ms(1);}}

Continuación Crear librería para LCD (lcd4550.h)

Page 25: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

/******inicialización del LCD************/void lcd_init(void){ int dir,valor; dir = LCD_COMANDO; //para configurar la LCD valor = LCD_CLEAR; //0x38 Inicia el modulo a 8 bits lcd_enviar (dir,valor); delay_ms(1); valor = LCD_HOME; //0x0c activa display lcd_enviar (dir,valor); valor = LCD_ENTRY_MODE; //0x01 borra display lcd_enviar(dir,valor); valor = LCD_CURSOR_BLINK; //selecciona mensaje fijo lcd_enviar (dir,valor); valor = LCD_DISPLAY_SHIFT_RIGHT ; // instrucción para decrementar el cursor lcd_enviar(dir,valor); valor = LCD_DISPLAY_8_BITS ; lcd_enviar(dir,valor);}

Ejercicio 3Display 7 Segmentos Incremento y Decremento.

Clase 6

Page 26: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

/*********Función para posicionamiento del cursor********/void lcd_gotoxy ( char x, char y) { char dir; if(y!=1) dir=0xC0; else dir=0; dir+=x-1; lcd_enviar(LCD_COMANDO,0x80|dir);}

#endif

Clase 6Continuación Crear librería para LCD (lcd4550.h)

Page 27: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

/**************Espacio para librerías*******************/#include <p18f4550.h>#include <delays.h>#include <lcd4550.h> // incluir la librería creada. /***********Configuración de fuses o pragma**************/ #pragma config PLLDIV = 5, CPUDIV = OSC1_PLL2, USBDIV = 1#pragma config FOSC = HSPLL_HS, FCMEN = OFF,IESO = OFF #pragma config PWRT = ON,BOR = OFF,BORV = 0 #pragma config VREGEN = OFF, WDT = OFF,WDTPS = 32768 #pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = OFF #pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF #pragma config CP0 = ON,CP1 = ON,CP2 = ON #pragma config CPB = ON,CPD = ON #pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON, WRT3 = ON#pragma config WRTB = ON,WRTC = ON,WRTD = ON #pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON, EBTR3 = ON#pragma config EBTRB = ON

Código control LCD

Clase 6

Page 28: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

char const vector[10]="SALUDO";char const vector2[12]="ESTUDIANTES";char i=0;

void main (void){TRISD = 0X00;TRISE = 0X00;PORTD = 0X00;PORTE = 0X00;while (1){

lcd_init();lcd_gotoxy(8,1);

for (i=0;i<6;i++){lcd_enviar (LCD_DATO,vector [i]);delay_ms (300);}lcd_gotoxy(24,2);for (i=0;i<=10;i++){lcd_enviar (LCD_DATO,vector2 [i]);delay_ms (300);}

}}

Código control LCDClase 6

Page 29: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Ejercicio Propuesto.

Usted es contratado por una agencia de viajes para desarrollar un dispositivo que cumpla con las siguientes especificaciones.

Muestre en una pantalla de 16x2 el nombre y el precio de los planes que ofrece. Desea lo siguiente:

* El mensaje se debe desplazar de derecha a izquierda* Debe salir el nombre del plan arriba y el precio en la segunda fila. * En la noche la pantalla se debe encender automáticamente para que los usuarios puedan leer. * Por favor indicar el costo total.

Los planes son:

San Andrés: $1’200,000 Amazonas: $989,000 Isla Margarita: $500,000Cancún: $2´600,000 Panamá: $1`200,000 Crucero: $2`500,000

Clase 6

Page 30: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Bibliografía

Tema 11

www.canalgif.net/

• piccmania.blogspot.com• www.unocero.com• www.microchip.com• www.thelearningpit.com• http://electronica-teoriaypractica.com

Programación de PIC 18F4550 en C18 Autor: Ramdhar Hadit Yusseff Vanegas

Page 31: Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,

Palabras clave

Tema 11

www.canalgif.net/

Microcontrolador, PIC, 18f4550, Puertos, LCD, crear Librería, Puertos de salida, Código C18.

Programación de PIC 18F4550 en C18 Autor: Ramdhar Hadit Yusseff Vanegas