La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación de microcontroladores PIC16f877a en linux

Presentaciones similares


Presentación del tema: "Programación de microcontroladores PIC16f877a en linux"— Transcripción de la presentación:

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

2 PIC16F877A 2

3 Caracteristicas Caracteristica 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 Conjunto de instrucciones 35 Ciclo de instruccion 200 ns 3

4 Diagrama de bloques 4

5 Memoria de programa 5

6 Memoria de datos (Registros)
6

7 Partes del PIC16F877A PORTA PORTB PORTC PORTD PORTE
Es un puerto de 6 bits configurable como entrada o salida. PORTB Es un puerto de ocho bits configurable como entradas o salidas. PORTC 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. 7

8 Partes del PIC16F877A TIMER0 TIMER1 TIMER2 CAPTURA/COMPARACION/PWM
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. 8

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

10 Partes del PIC16F877A TIMER0 TIMER1 TIMER2 CAPTURA/COMPARACION/PWM
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. 10

11 Partes del PIC16F877A TIMER0 TIMER1 TIMER2 CAPTURA/COMPARACION/PWM
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. 11

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

13 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 13

14 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 14

15 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 15

16 Configuración del temporizador 0 TIMER0 OPTION_REG
16

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

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

19 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> 19

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

21 Ciclo de duración PWM CD PWM=(CCPR2L:CCP2CON<5:4>) •TOSC • (TMR2 Prescale Value) 21

22 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 22

23 Pasos para configurar el generador PWM
23

24 24

25 Programacion en C para el PIC16F877A
#include <pic16f877.h> int main(){ Return 0; } 25

26 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; } 26

27 Programacion en C para el PIC16F877A-Interrupciones
#include <pic16f877.h> void isr(void) __interrupt n { ... } Donde n es el número de interrupción. 27

28 Referencias http://sdcc.sourceforge.net/
28


Descargar ppt "Programación de microcontroladores PIC16f877a en linux"

Presentaciones similares


Anuncios Google