Módulos de Microcontroladores
Módulos de Microcontroladores
Módulos de Microcontroladores
Las interrupciones que se van a tratar en esta unidad será la Externa por el pin
RBo, la del Timer0, timer1 y Timer2. Los timers son módulos integrados en el
micro que pueden funcionar como temporizadores o contadores. Como es
tradicional se presentará su Teoría, Simulaciones, Laboratorios y Evaluación.
1. TEMPORIZADORES E INTERRUPCIONES
Para interrumpir el micro de forma externa se utiliza el pin RB0 para provocarla.
Esta interrupción obra por cambio de nivel en el pin ya sea de alto a bajo o de bajo
a alto. Usa la directiva:
#int_ext
enable_interrupts(int_ext) y la global
enable_interrupts(global)
Las instrucciones son:
El Timer0 es un registro del micro que hace parte de la memoria RAM que está en
la posición 101H. Es de 8 bits (hasta 255) y funciona como:
- Temporizador haciendo uso del reloj interno del micro a una frecuencia de fosc/4
Se puede preescalar haciendo un divisor de frecuencia programable por 2, 4, 8,
16, 32, 64, 128 o 256.
#int_timer0
setup_timer_0(modo)
get_timer0 ()
Dependiendo del tiempo de overflow (desborde) T del timer se calcula este valor
asi:
Por ejemplo, si se quiere generar una señal cuadrada de una frecuencia de 1000
Hz, el periodo es de 1000 usg, o sea, un T= 500 usg, con prescala de 2, entonces,
Directiva:
#int_timer1;
Prescala = 8,
valor = 3036
#int_timer2
set_timer2(valor) ;
EJEMPLO.
Generar una señal cuadrada de 1 Khz utilizando la interrupción del Timer2. T = 0.5
ms = 500 us.
setup_timer_2(T2_DIV_BY_4,124,1);
1. MEMORIA EEPROM
FUNCIONES
EEPROM.read(dirección);
Lee un byte de la eeprom. Las locaciones que nunca han sido escritas tienen un
valor de 255 (todas 1). Donde la dirección es la locación a leer, empieza de 0.
Retorna el valor almacenado en esa locación (byte).
EEPROM.write(dirección,valor);
EEPROM.update(dirección,valor);
EEPROM.get(dirección,valor);
Lee cualquier tipo de dato u objeto de la eeprom. El dato a leer, puede ser de tipo
primitivo (ej float) o una estructura.
EEPROM.put(dirección,valor);
Escribe cualquier tipo de dato u objeto de la eeprom.
EEPROM [dirección];
Este ejemplo borrará toda la memoria eeprom del microcontrolador del Arduino
Uno que tiene un almacenamiento de 1Kbyte. Se requiere cargar la librería
<EEPROM.h>.
Este ejemplo permite un acceso para realizar un control con clave guardada en la
eeprom.
2. INTERRUPCIONES EXTERNAS
Sólo hay unos pocos pines en los que se pueden realizar interrupciones y
dependen del modelo de la board o placa. Para el caso del Arduino Uno
solamente hay dos interrupciones externas: Interrupción 0 por el pin 2 y la
interrupción 1 por el pin 3. Los modos de activación se determinan según las
posibilidades siguientes:
LOW: La interrupción se activa cuando el voltaje del pin elegido es bajo, esto es,
0V.
RISING: Se activa únicamente cuando el valor del pin pasa de LOW a HIGH.
FUNCIONES
attachInterrupt(interrupt,ISR,modo)
Especifica un servicio de interrupción (ISR) cuando una llamada a interrupción
externa ocurre.
detachInterrupt(interrupt)
Los timer’s se usan para medir y controlar tiempos. Un timer puede disparar una
interrupción y controlar por ejemplo la alarma de un reloj. Los timers trabajan
aumentado un contador variable (counter register) hasta su máximo valor donde
llega el overflow (sobreflujo), se resetea y vuelve a cero y en este momento puede
solicitar servicio de interrupción (interrupt service routine ISR) para correr un
determinado código. Para aumentar el valor del contador en intervalos regulares
se requiere una fuente de reloj. El ATmega328 del arduino uno tiene tres timers:
Timer0, Timer1 y Timer2.
Timer0
Es de 8 bits, o sea, el counter register tiene un valor máximo de 255. Este timer lo
usa el arduino en las funciones delay() y millis().
Timer1
Timer2
PWM y Timer
El arduino tiene 3 timers y 6 pines de salida PWM. La relación es:
Configuración
Timer1.initialize(microseconds);
Timer1.setPeriod(microseconds);
Run Control
Timer1.start();
Timer1.stop();
Para el Timer.
Timer1.restart();
Timer1.resume();
Timer1.pwm(pin, duty);
Configura uno de los pines del timer PWM. "duty" es de 0 to 1023, donde 0 pone el
pin siempre en LOW y 1023 en HIGH.
Timer1.setPwmDuty(pin, duty);
Timer1.disablePwm(pin);
Para el uso del PWM en un pin. El pin revierte a ser controlado por digitalWrite().
Interrupt Function
Timer1.attachInterrupt(function);
Corre una función cada vez que termina el periodo del timer. La función corre
como un interrupt.
Timer1.detachInterrupt();
Desahbilita la interrupción.
Poner la salida PWM en el pin 9 con un 50% de ciclo de trabajo (duty) y forzar una
interrupción que conmute el pin digital 10 cada medio segundo (500000 ms).