programación de microcontroladores pic16f877a en linux dia 3 por: ing. fernando e. serrano...
TRANSCRIPT
Programación de microcontroladores PIC16f877a en linux
Dia 3Por: Ing. Fernando E. SerranoE-mail:[email protected]
PIC16F877A
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
Diagrama de bloques
Memoria de programa
Memoria de datos (Registros)
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.
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.
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.
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.
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.
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.
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
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
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
Configuración del temporizador 0 TIMER0 OPTION_REG
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.
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.
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>
Periodo PWM
Periodo PWM=(PR2+1)*4*Tosc*(TMR2 prescale value)
Ciclo de duración PWM
CD PWM=(CCPR2L:CCP2CON<5:4>) •TOSC • (TMR2 Prescale Value)
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
Pasos para configurar el generador PWM
Programacion en C para el PIC16F877A
#include <pic16f877.h>
int main(){
Return 0; }
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; }
Programacion en C para el PIC16F877A-Interrupciones
#include <pic16f877.h>
void isr(void) __interrupt n { ... } Donde n es el número de interrupción.
http://sdcc.sourceforge.net/http://gputils.sourceforge.net/http://gsim.sourceforge.net/http://www.utp.edu.co/~eduque/arquitec/Instruc%20877.pdf
Referencias