Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano...

28
Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:[email protected]

Transcript of Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano...

Page 1: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Programación de microcontroladores PIC16f877a en linux

Dia 3Por: Ing. Fernando E. SerranoE-mail:[email protected]

Page 2: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

PIC16F877A

Page 3: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

CaracteristicasCaracteristica PIC16F877A

Frecuencia de operación 20 MHz

Memoria flash de programa 8K

Memoria de datos (Bytes) 368

Memoria EEPROM (Bytes) 256

Interrupciones 15

Puertos entrada/salida A,B,C,D,E

Temporizadores 3

Módulo captura/comparación/PWM 2

Comunicacion serie MSSP/USART

Comunicación paralela PSP

Modulo de conversión analoga-digital 10 bits

8

Comparadores analogos 2

Conjunto de instrucciones 35

Ciclo de instruccion 200 ns

Page 4: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Diagrama de bloques

Page 5: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Memoria de programa

Page 6: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Memoria de datos (Registros)

Page 7: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Partes del PIC16F877A PORTA

Es un puerto de 6 bits configurable como entrada o salida.

PORTB Es un puerto de ocho bits configurable como

entradas o salidas. PORTC

Es un puerto de ocho bits configurable como entradas o salidas.

PORTD Es un puerto con entradas con disparador

Schmitt, que pueden configurarse como entradas y salidas.

PORTE Tiene tres pines los cuales se configuran

como entrada y salidas individualmente.

Page 8: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Partes del PIC16F877A

TIMER0 Es un temporizador que se puede usar con

entradas externas o internas. TIMER1

Es un temporizador de 16 bits. TIMER2

Es un temporizador de 8 bits con un prescalador y post escalador.

CAPTURA/COMPARACION/PWM Registro de captura de 16 bits. Registro de comparacion de 16 bits. Generador de PWM amo/esclavo.

MASTER SYNCRONOUS SERIAL PORT MODULE

Tiene tres pines los cuales se configuran como entrada y salidas individualmente.

Page 9: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Partes del PIC16F877A

ADDRESSABLE UNIVERSAL SYNCHRONOUS ASYNCHRONOUS RECEIVER TRANSMITTER (USART)

Se utiliza para la comunicación en serie con otros dispositivos como PC's.

ANALOG-TO-DIGITAL CONVERTER (A/D) MODULE

Convertidor analogo a digital.

Page 10: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Partes del PIC16F877A

TIMER0 Es un temporizador que se puede usar con

entradas externas o internas. TIMER1

Es un temporizador de 16 bits. TIMER2

Es un temporizador de 8 bits con un prescalador y post escalador.

CAPTURA/COMPARACION/PWM Registro de captura de 16 bits. Registro de comparacion de 16 bits. Generador de PWM amo/esclavo.

MASTER SYNCRONOUS SERIAL PORT MODULE

Tiene tres pines los cuales se configuran como entrada y salidas individualmente.

Page 11: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Partes del PIC16F877A

TIMER0 Es un temporizador que se puede usar con

entradas externas o internas. TIMER1

Es un temporizador de 16 bits. TIMER2

Es un temporizador de 8 bits con un prescalador y post escalador.

CAPTURA/COMPARACION/PWM Registro de captura de 16 bits. Registro de comparacion de 16 bits. Generador de PWM amo/esclavo.

MASTER SYNCRONOUS SERIAL PORT MODULE

Tiene tres pines los cuales se configuran como entrada y salidas individualmente.

Page 12: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Configuración del temporizador 0 TIMER0

La interrupción TMR0 es generada cuando el registro TMR0 se desborda de FFh a 00h. Este desborde pone el bit TMR0IF (INTCON<2>) a 1. El bit TMR0IF (INTCON<2>) debe ponerse a cero al salir debe ser puesta a cero en software por la interrupción del timer0.

Page 13: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Configuración del temporizador 0 TIMER0

El temporizador 0 TIMER0 tiene las siguientes características

Temporizador/contador de 8 bits Lectura y escritura Selección de reloj externo e interno. Interrupción en desbordamiento de FFh a

00h

Page 14: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Configuración del temporizador 0 TIMER0

Prescaler El prescaler es un divisor de frecuencia que

se utiliza para el timer 0 tanto como temporizador como contador.

Este se configura modificando los siguientes bits del registro option_reg

Page 15: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Configuración del temporizador 0 TIMER0

Prescaler El prescaler es un divisor de frecuencia que

se utiliza para el timer 0 tanto como temporizador como contador.

Este se configura modificando los siguientes bits del registro option_reg

Page 16: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Configuración del temporizador 0 TIMER0 OPTION_REG

Page 17: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Configuración del temporizador 0 TIMER0 OPTION_REG

Donde se debe poner el bit PSA del registro option_reg a 1 para asignarlo al temporizador watchdog y a 0 para asignarlo al TIMER0.

El bit T0CS del OPTION_REG debe estar en cero para activar el TIMER0 como temporizador o en uno como contador.

Page 18: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Configuración del temporizador 0 TIMER0 INTCON

El bit 6 (PEIE) del registro INTCON debe estar a 1 para habilitar todas las interrupciones .

El bit 5 (TMR0IE) del INTCON debe estar a 1 para habilitar todas la interrupción del TIMER0.

El bit 7 (GIE) del INTCON debe estar a 1 para habilitar todas las interrupciones.

Page 19: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Configuración generador de PWM (Pulse Width Modulation)

El generador de PWM sirve para generar pulsos con modulación de anchura el cual se utiliza para variar la velocidad en motores ya sea de corriente directa o corriente continua. Para configurarlo se necesita el TIMER2. Para esto los pines CCPx se deben configurar como salidas estos están en el puerto C. Por lo que se debe configurar CCP2 como salida poniendo a cero el bit TRISC<1>

Page 20: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Periodo PWM

Periodo PWM=(PR2+1)*4*Tosc*(TMR2 prescale value)

Page 21: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Ciclo de duración PWM

CD PWM=(CCPR2L:CCP2CON<5:4>) •TOSC • (TMR2 Prescale Value)

Page 22: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Pasos para configurar el generador PWM

Poner el bit 2 (TMR2ON) del T2CON a 1 y los bit 0 y 1 del T2CON de acuerdo a la tabla en la siguiente diapositiva.

Asigne el periodo PWM escribiendo en el registro PR2.

Asigne el ciclo de duracion PWM escribiendo en el registro CCPR2L y CCP2CON<5:4>

Configurar el pin CCP2 poniendo a cero el bit TRISC<1>

Configure el modulo CCP2 para la operación en PWM en CCP2CON bit 3-0 con 11xx

Page 23: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Pasos para configurar el generador PWM

Page 24: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.
Page 25: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Programacion en C para el PIC16F877A

#include <pic16f877.h>

int main(){

Return 0; }

Page 26: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Programacion en C para el PIC16F877A

Para modificar los registros estos están almacenados en variables por ejemplo

#include <pic16f877.h>

int main(){ TRISA=0x0C; PORTA=0x01; Return 0; }

Page 27: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

Programacion en C para el PIC16F877A-Interrupciones

#include <pic16f877.h>

void isr(void) __interrupt n { ... } Donde n es el número de interrupción.

Page 28: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.

http://sdcc.sourceforge.net/http://gputils.sourceforge.net/http://gsim.sourceforge.net/http://www.utp.edu.co/~eduque/arquitec/Instruc%20877.pdf

Referencias