BOTTOM: El contador llega al FONDO cuando
se convierte en 0x00.
Facultad de Ingeniería Rec. Segundo Parcial Página
MAX: 1 dealcanza
El contador 2 su MAXimo cuando
Ing. Electromecánica
se convierte en 0xFF (decimal 255).
Electrónica Digital 2021
TOP : El contador llega a TOP cuando llega a
Rec. Segundo Parcial - Electrónica Digital ser igual al valor más alto en la secuencia de
conteo. El valor TOP se puede asignar para
De todos los modos
Nombre y Apellido; LU; que sea el valor fijo 0xFF (MAX) o el valor
Fast-PWM que podemos
almacenado en el registro OCR0A.
configurar, podemos Problema N°1; De acuerdo al programa realizado, responda;
definir cuando el
Clear OC1A/OC1B on compare
contador se reiniciará. boolean toggle0 = 0; // Una variable booleana para alternar entre dos estados
match, set OC1A/OC1B at
TOP=ICR1, y el único que const int analogInPin = A0; // El pin de entrada analógica
int sensorValue = 0; // Variable para almacenar el valor de entrada analógica BOTTOM (non-inverting mode):
tiene esa configuración
int outputValue = 0; // Variable para almacenar el valor de salida mapeado durante una coincidencia de
es el Modo 14,
comparación, el pin OC1A se
void setup(){ establece en nivel bajo y se
DDRB |= ( 1<< PB1 ); // Configura el pin PB1 (pin digital 9 en Arduino) como salida mantiene así hasta que el timer 0
cli(); // Deshabilita las interrupciones alcance el valor BOTTOM (0x00).
TCNT1 = 0; // Reiniciamos el contador inicial (por si acaso) del Timer1
(Ver grafico pág. 102 datasheet)
39999 // Configuramos el periodo de la señal (el TOP de nuestra PWM)
ICR1 = 33333;
TCCR1A = (1 << COM1A1) | (0 << COM1A0) ; Para 20mS ---> ICR1 o TOP=(16000000Hz/8*50Hz )-1
TCCR1A |= (1 << WGM11) | (0 << WGM10) ; //Configuramos el timer1 en modo FastPWM
TCCR1B = (1 << WGM13) | (1 << WGM12);
TCCR1B |= (0 << CS12) | (1 << CS11) | ( 0 << CS10 ); //preescaler de 8
OCR1A = 19999 16667; //valor del registro de comparación de salida - 50% del TOP
TCCR0A = 0;
TCCR0B = 0; //iniciamos en cero los registros del Timer0 TCCR0A,TCCR0B y TCNT0 Por consigna
TCNT0 = 0; necesitábamos que el T0
OCR0A = 199; OCROA o TOP=(Clock/preescaler*fdeseada)-1=(16000000Hz/8*10000Hz )-1 produzca un compare
TCCR0A |= (1 << WGM01); //Timer0 en modo de comparación CTC
match cada 0.0001 seg
TCCR0B |= (1 << CS01) ; //preescaler en 8
osea con una frec = 10kHz
TIMSK0 |= (1 << OCIE0A); //se habilita la interrupción por comparación A
sei();} //se habilitan las interrupciones
void loop(){}
ISR(TIMER0_COMPA_vect){ //Se genera cuando el T0 alcanza el valor de comparación OCR0A
if(toggle0){
Si toogle=True sensorValue = analogRead(analogInPin); //asignamos a esta variable el valor del censado del pin analógico del Pot
toggle0 = 0; }
else{ 40% TOP 80% TOP
outputValue = map(sensorValue, 0, 1023,13333,26667);
15999 31999
Si toggle=False
OCR1A =outputValue ; //Actualizamos el valor del valor de comparación del Timer1
toggle0 = 1;}}
True=1 ; False=0
1) De acuerdo al programa;
a) Describa las características generales del programa, describiendo cuales
son las entradas, salidas, interrupciones, entre otros.
2) ¿En el programa se utilizan interrupciones?
Se utiliza el Timer1 para generar una salida cuadrada por el pin OC1A (pin 9 ), generado mediante el modo Fast PWM, con un TOP para el contador para una
frecuencia de 50Hz (TOP= ICR1=39999) y un registro de comparación a la mitad del top (OCR1A= 19999). Esta salida va conectada por ejemplo a un led o un
osciloscopio. Con el Timer0 configurado en modo CTC con una interrupción con frecuencia de 10kHz, ejecuta una ISR que en su primera etapa cuando toggle=0
sensa el potenciometro y en la segunda etapa actualiza el valor del OCR1A mediante el un mapeado de los valores del POT con un rango acotado 40%-80% del
TOP(ICR1) del Timer1, de esta manera modulando la salida.
Facultad de Ingeniería Rec. Segundo Parcial Página 2 de 2
Ing. Electromecánica
Electrónica Digital 2021
a) Si su respuesta es afirmativa, describa cuantas y cuáles. Se utilizan un
temporizador? Se utiliza un PWM? Se utilizan las interrupciones del ADC?
Se utilizan las interrupciones del puerto serial? Describa y justifique su
respuesta.
b) Si su respuesta es afirmativa, describa que registros se configuran en
cada una de las interrupciones.
3) Si se utilizan algún timer o un pwm;
a) Describa como es su configuración (frecuencia) y como varia el tiempo
del timer o el ciclo de trabajo del pwm, si varia en ambos casos. Realice
el cálculo pertinente para justificar su respuesta.
b) ¿Que parámetro (tiempo, ciclo de trabajo, tiempo de muestreo, etc) del
microcontrolador puede variar en el tiempo al tomar cada medida del
conversor ad? Si varia, indique como se modifica esta.