EXAMEN 1

16
EXAMEN 1 Temporizador / timer Aaron Alan Orozco Grajeda 94479 Email: [email protected] Ingeniería en Mecatrónica UACJ, IIT, Industrial y Manufactura Materia: Sistemas embebidos Profesor: Juan de Dios Cota Ruiz 27 de septiembre

Transcript of EXAMEN 1

Page 1: EXAMEN 1

EXAMEN 1Temporizador / timer

Aaron Alan Orozco Grajeda 94479

Email: [email protected]

Ingeniería en Mecatrónica

UACJ, IIT, Industrial y Manufactura

Materia: Sistemas embebidos

Profesor: Juan de Dios Cota Ruiz

27 de septiembre

Page 2: EXAMEN 1

Todos los contadores de tiempo depende de la hora del sistema de su sistema Arduino . Normalmente, el reloj del sistema es de 16 MHz. El hardware de temporizador se puede configurar con algunos registros especiales temporizador . En el firmware Arduino todos los temporizadores estaban configurados para una frecuencia de 1 kHz y las interrupciones están habilitadas.

Timer0 es un temporizador de 8 bits. En el mundo timer0 Arduino se ha utilizado para las funciones del temporizador , como delay () , millis () y micros (). Si cambia TIMER0 registros, esto puede influir en la función de temporizador Arduino .

Timer1 es un temporizador de 16 bits. En el mundo de Arduino la biblioteca Servo utiliza timer1 en Arduino Uno.

Timer2 es un temporizador de 8 bits como timer0 . En el trabajo de Arduino el tono () función utiliza temporizador 2 .

Timer 3,4,5 sólo están disponibles en Arduino Mega tablas. Estos temporizadores son temporizadores de 16 bits .

Timer Registro

Usted puede cambiar el comportamiento del temporizador a través del registro del temporizador. Los registros más importantes del temporizador son:

TCCRx - Temporizador / contador de registro de control . El prescaler se puede configurar aquí.

TCNTx - Temporizador / Contador Registro. El valor actual del temporizador se almacena aquí .

OCRx - Salida Compara Registro

ICRx - Entrada Captura Registro (sólo para el temporizador de 16 bits )

TIMSKx - Temporizador / Contador registro de máscara de interrupción . Para habilitar / deshabilitar las interrupciones del temporizador.

Page 3: EXAMEN 1

TIFRx - Temporizador / Contador Flag Registro de interrupción . Indica una interrupción de temporizador en espera .

Reloj de selección y la frecuencia del temporizador

Diferentes fuentes de reloj se pueden seleccionar para cada temporizador de forma independiente. Para calcular la frecuencia del temporizador ( por ejemplo, 2 Hz utilizando Timer1 ) , necesitará:

CPU Frecuencia 16Mhz para Arduino. Valor máximo contador del temporizador ( 256 para 8 bits, 65.536 de temporizador de 16 bits )

Divida la frecuencia de la CPU a través de la cadena seleccionada prescaler (16000000/256 = 62500 )

Divida resultado a través de la frecuencia deseada ( 62500 / 2 Hz = 31250 )

modos de temporizador

Los temporizadores pueden estar configurados en diferentes modos .

Modo PWM . El modo de modulación de anchura de Pulth . las salidas OCxy se utilizan para generar señales PWM

Modo de CTC . Borrar temporizador en comparación partido . Cuando el contador cronómetro alcance el partido comparar registro , se borrará el temporizador

Page 4: EXAMEN 1

Temporizador de desbordamiento :

Desbordamiento del temporizador significa que el temporizador ha alcanzado es el valor límite. Cuando se produce una interrupción de desbordamiento del temporizador , el temporizador de desbordamiento poco TOVx se encuentra en el indicador de interrupción registro TIFRx . Cuando se active la alarma de desbordamiento del temporizador TOIEx bit de la máscara de interrupción registro TIMSKx se establece, el temporizador de desbordamiento de interrupción el servicio de rutina ISR ( TIMERx_OVF_vect ) será llamado.

Comparación de salida del partido :

Cuando una salida de comparar interrupción partido ocurre , la bandera OCFxy se encuentra en el indicador de interrupción registro TIFRx . Cuando la salida de comparar interrumpir bit de habilitación OCIExy en el registro de máscara de interrupción TIMSKx se establece , la salida de comparar coincidir interrupción de servicios ISR ( TIMERx_COMPy_vect ) rutina será llamado.

Timer Captura de entrada:

Cuando se produce una interrupción de la captura de entrada del temporizador , la entrada de captura de bandera de bits ICFx se encuentra en el indicador de interrupción registro TIFRx . Cuando la toma de entrada de interrupción permitirá ICIEX bit de la máscara de interrupción registro TIMSKx se establece, el temporizador de entrada de captura interrupción servicio rutina ISR ( TIMERx_CAPT_vect ) será llamado.

Page 5: EXAMEN 1

PINA0

PINA1

PINA2

PINA3

PINA4

PINA5

PIND7

PIN5

PIN4

PIN3

PIN2

PIN0

PIN6

PIN 8

PWM y temporizador

Existe una relación fija entre los temporizadores y las salidas capaces PWM. Cuando nos fijamos en la hoja de datos o la disposición de las patillas del procesador de estos pines capaces PWM tienen nombres como OCRxA , OCRxB o OCRxC (donde x significa el número de temporizador 0 .. 5 ) . La función PWM es a menudo compartida con otras funciones pin.

El Arduino tiene 3 Timers y 6 pines de salida PWM . La relación entre los temporizadores y salidas PWM es :

Patillas 5 y 6 : controlado por timer0.

Pines 9 y 10: controlados por timer1.

Pines 11 y 3: controladas por temporizador 2.

Desarrollo

Se armo un circuito con 7 pulsadores y 6 interruptores con una resistencia de 1kΩ. Los siete pulsadores son para las teclas del piano y los interruptores para los armónicos como se muestra en la siguiente imagen.

Para la bocina se utiliso dos capacitores de 10 micro faradios y una resistencia de 33 Ω como se muestra en la figura.

Page 6: EXAMEN 1

Cada boton combinado con los acordes debe generar una salida con cierta frecuencia las culaes son las de las ciguiente tabla

Page 7: EXAMEN 1

Armonicos Do Re Mi Fa Sol La Si

0 261 294 330 349 392 440 4961 522 588 660 698 784 880 9882 783 882 990 1047 1176 1320 14823 1044 1176 1320 1320 1568 1760 19764 1305 1470 1650 1747 1960 2200 24705 1566 1764 1980 2094 2352 2640 2964

Código

void setup()

Serial.begin(9600);

DDRD &=1;

DDRC &=0;

PORTC |=1;

PORTD |=248;

//PCICR=4;

//PCMSK20=248;

cli();

TCCR1A=0;

TCCR1B=0;

DDRB |=0X01; //PORTB.0 Output

TIMSK1 |=0X02; // Enable Timer compare Interrupt

TCCR1B |=0x09; //4-mode star time

//OCR1A = 3000;

sei();

int y,x=0,i,j,a,b,n=0;

double f,f1[6][8]=261,294,330,349,392,440,494,522,588,660,698,784,880,988,783,882,990,1047,1176,1320,1482,1044,1176,1320,1396,1568,1760,1976,

Page 8: EXAMEN 1

1305,1470,1650,1747,1960,2200,2470,1566,1764,1980,2094,2352,2640,2964;

void loop()

//int a=0;

while (1)

if((PIND & 128)==128)

else

x=6;

a=1;

b=1;

if((PIND & 64)==64)

else

x=5;

a=1;

Page 9: EXAMEN 1

b=1;

if((PIND & 32)==32)

else

x=4;

a=1;

b=1;

if((PIND & 16)==16)

else

x=3;

a=1;

b=1;

if((PIND & 8)==8)

else

Page 10: EXAMEN 1

x=2;

a=1;

b=1;

if((PIND & 4)==4)

else

x=1;

a=1;

b=1;

if((PIND & 1)==1)

else

x=0;

a=1;

b=1;

if((PINC & 1)==1)

Page 11: EXAMEN 1

else

y=0;

if((PINC & 2)==2)

else

y=1;

if((PINC & 4)==4)

else

y=2;

if((PINC & 8)==8)

else

y=3;

Page 12: EXAMEN 1

if((PINC & 16)==16)

else

y=4;

if((PINC & 32)==32)

else

y=5;

//Serial.println(y);

i=x;

j=y;

f=f1[j][i];

Serial.println(f);

OCR1A = 16000000/(2*f);

b=0;

Page 13: EXAMEN 1

ISR(TIMER1_COMPA_vect)

int li;

if(a==1)

PORTB = PORTB^0X01;

li=1;

if((li==1)&&(b==0))

n++;

if(n==200)

n=0;

a=0;

li=0;

Conclusión

El timer en modo cuatro nos permite controlar la frecuencia de salida de los puertos, así como también nos da la posibilidad de activar y desactivar puertos al cumplirse las condiciones que programemos.

Page 14: EXAMEN 1

Existen diferentes tipos de desactivar un puerto por medio de un timer, ya sea parando el timer o desactivando el puerto. desactivando el puerto da la ventaja de poder realizar conteos y manipular otros puertos afectándolos individualmente por lo que en al manejar barios puertos con el timer en modo cuatro lo mejor es activar y desactivar los puertos de salida.