La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Programar PIC`s en lenguaje C18 En 64 horas. El siguiente material está desarrollado como complemento didáctico para la materia de microcontroladores,"— Transcripción de la presentación:

1 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.Licencia Creative Commons Atribución-NoComercial-CompartirIgual 2.5 Colombia

2 Tema 11

3 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.com www.wulfden.org www.coldfire-electronica.com

4 Conexión de la LCD Clase 6 Etapa Alimentación Etapa bidireccional de datos

5 Pines de alimentación: 1. Vss: Gnd 2. Vdd: +5 voltios 3. 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

6 www.thelearningpit.com Clase 6

7 Conexión de la LCD Clase 6

8 RUTINA CLEAR DISPLAY RE2RE1RD7RD6RD5RD4RD3RD2RD1RD0 RSRWD7D6D5D4D3D2D1D0 0000000001 #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);

9 Clase 6 RUTINA HOME DISPLAY RE2RE1RD7RD6RD5RD4RD3RD2RD1RD0 RSRWD7D6D5D4D3D2D1D0 0000000011 #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);

10 Clase 6 RUTINA ENTRY MODE SET DISPLAY RE2RE1RD7RD6RD5RD4RD3RD2RD1RD0 RSRWD7D6D5D4D3D2D1D0 0000000110 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);

11 Clase 6 RUTINA DISPLAY CONTROL RE2RE1RD7RD6RD5RD4RD3RD2RD1RD0 RSRWD7D6D5D4D3D2D1D0 0000001111 lcd_rs=0; lcd_enable=1; PORTD= 0x0F; delay_ms(2); lcd_enable=0; delay_ms(2);

12 Clase 6 RUTINA DESPLAZAR CURSOR O DISPLAY RE2RE1RD7RD6RD5RD4RD3RD2RD1RD0 RSRWD7D6D5D4D3D2D1D0 0000010100 lcd_rs=0; lcd_enable=1; PORTD= 0x14; delay_ms(1); lcd_enable=0; delay_ms(1);

13 Clase 6 RUTINA DE FUNCIONES (CARACTERISTICAS) RE2RE1RD7RD6RD5RD4RD3RD2RD1RD0 RSRWD7D6D5D4D3D2D1D0 0000111000 lcd_rs=0; lcd_enable=1; PORTD= 0x38; delay_ms(1); lcd_enable=0; delay_ms(1);

14 Clase 6 RUTINA CLEAR DISPLAY RE2RE1RD7RD6RD5RD4RD3RD2RD1RD0 RSRWD7D6D5D4D3D2D1D0 1001000001 lcd_rs=1; lcd_enable=1; PORTD= ‘ A ’; delay_ms(1); lcd_enable=0; delay_ms(1); www.elproducto.co

15 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: HEX: HEX: Clase 6

16 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

17 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. Filas 0x80 0xC0 Columnas 80 8F C0CF www.elproducto.co

18 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.

19 Void lcd_gotoxy (unsigned char x, unsigned char y){ char dir ; if(y!=1) dir=0xC0; else dir=0; dir+=x-1 Lcd_enviar(0, 0x80|dir) ; } Clase 6 Función goto (x,y) Con esta funcion se posiciona el cursor en la fila y columna deseada.

20 Ejercicio mostrar un mensaje en la LCD Clase 6

21 #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 6 Crear 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”.

22 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

23 /*******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 6 Continuación Crear librería para LCD (lcd4550.h)

24 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)

25 /******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 3 Display 7 Segmentos Incremento y Decremento. Clase 6

26 /*********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 6 Continuación Crear librería para LCD (lcd4550.h)

27 /**************Espacio para librerías*******************/ #include #include // 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

28 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 LCD Clase 6

29 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,000Isla Margarita: $500,000 Cancún: $2´600,000Panamá: $1`200,000Crucero: $2`500,000 Clase 6

30 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

31 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


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

Presentaciones similares


Anuncios Google