"#$%" ' $"()&*)+ ,"&./012345612.7 8 )19:5612.7
;
<5=125:1231 #$%&'%'()&'*+,'&-.
$21>.712? <.101@61 A52:B9 6.@ )5/01 "5/B2.4 C./.7:2.? D,EFG** H2I01? DJ,K ) +I@5?
)I5I:3:@P9Q ARS3M1 5 EK 6. 5=23@ 6.@ D,EF
R_06_MIC
OBJETIVOS Al término de esta práctica el alumno podrá ! : Crear rutinas de retardo a partir de programación en C para microcontroladores. • Utilizar uno de los módulos de temporización en modo de contador para identificar • eventos que se produzcan de forma externa al microcontrolador.
EQUIPO •
• • •
1 PC con software instalado: MPLAB IDE 1 Grabador universal o grabador de PICs 1 Fuente de voltaje de CD 1 Osciloscopio
MATERIAL 1 Microcontrolador PIC 16F887 1 Display LCD 16x2 1 Potenciómetro de 2 k " 3 Resistencias de 10 k ", 1⁄2 watt 1 Resistencias de 0.33 k ", 1⁄2 watt 1 Diodo emisor de luz infrarroja, led IR333C. 1 Fototransistor infrarrojo, PT331C 1 Inversor Schimth Trigger, 74LS14 1 Push button Tableta de Conexiones (Protoboard) Alambres y cables para conexiones
PROCEDIMIENTO EXPERIMENTAL 1. Haciendo uso del primer programa de las actividades previas y siguiendo la lógica del algoritmo se programó el microcontrolador. 2. Con ayuda del osciloscopio, en acoplo de CD, se verificó que el circuito de la figura 6.2 genere de manera correcta las señales de reloj de salida.
R_06_MIC
Imagen 1. Señal aprox. 2.5 KHz
Imagen 2. Señal aprox. 8 KHz.
6. La figura 6.3 muestra las señales de control de baja frecuencia que requiere un servomotor para funcionar, realice un programa que permita generar dichas señales con las características indicadas en la figura 6.3.
R_06_MIC
7. El programa debe tener un interruptor para elegir el ancho de la seña l, lo que corresponde a la posición angular del servomotor. #Include <16F887.h> #fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,MCLR #use delay (clock=4M) void main(){ set_tris_b(0xff); set_tris_c(0x00); while(true){ if(input(pin_B0)=0){ output_high(pin_c0); delay_ms(2); output_low(pin_c0); delay_ms(18); } else{ output_high(pin_c0); delay_ms(4); output_low(pin_c0); delay_ms(16); } } }
Imagen 3. Pulso en alto: 2 mS
Imagen 4. Pulso en bajo: 18 mS
Imagen 5. Pulso en alto: 4 mS
Imagen 6. Pulso en bajo: 16 mS
R_06_MIC
9. A continuación, para el circuito de la figura 6.4, se programó el microcontrolador usando el segundo programa de las actividades previas. 10. Se probó que, al interrumpir el haz de luz infrarroja, se incrementara el valor del conteo mostrado en la pantalla del Display. 11. Se aplicó una señal de reset y se observó que el conteo se reinició. Tanto el valor de conteo como el de grupo.
Imagen 3. Funcionamiento del circuito de conteo.
Imagen 4. Funcionamiento del circuito de conteo 2.
R_06_MIC
Cuando se interrumpía la señal del haz de luz infrarroja, el conteo aumentaba, y al llegar a grupos de 5, el segundo conteo aumentaba.
CUESTIONARIO 1) ¿Cuál es el valor máximo que permite un retardo utilizando las instrucciones delay_ms y delay_us? Sintaxis: delay_ms(time) & delay_us(time) Parámetro: time Variable 0-65536 (int16) o una constante 0-65536 Algunos compiladores ignoran los bits superiores de un int16, ahora los bits superiores afectan el tiempo.
2) Escriba un programa en lenguaje C que, utilizando específicamente el modulo del Timer0, realice el mismo funcionamiento que el primer programa realizado en esta práctica. #include <16f887.h> #fuses hs,nowdt,noprotect,noput #use delay (clock=4M) #int_timer0 #int_ext int var=0; void ext_isr(){ if(input(pin_B0)==1){ var=50; } else{ var=216;} } void timer0() { output_toggle(pin_c0); set_timer0(var); } void main() { setup_timer_0(rtcc_internal|rtcc_div_4); set_timer0(var); enable_interrupts(int_timer0); enable_interrupts(int_ext); enable_interrupts(global); ext_int_edge(L_TO_H); while(true){ } }
3) ¿Cuál es el límite del conteo que se puede alcanzar con el circuito de la práctica y a qué se debe dicho valor? El contador es de 16 bits, por lo que el valor máximo de conteo es de 2ˆ16 = 65536. Tomando en consideración el 0, el número total de conteo es 65535.
R_06_MIC
CONCLUSIONES Un temporizador y contador son los registros que aumentan su valor según cada ciclo de reloj al cual se encuentre funcionando el microcontrolador, por medio del PIC16f887 y software en c, fue posible crear rutinas de retardo, asi como la utilización del timer1 del mismo. Donde El timer1 PIC es un temporizador contador de 16 bits, el registro TMR1 es el temporizador contador timer1en sí, es donde se guardan los valores del timer1 PIC, cuando es utilizado como temporizador, sus valores aumentaran de uno en uno entre 0 y 65535 con cada 4 ciclos de reloj. Así, de este modo que se pudieron identificar eventos externos al microcontrolador, como la interrupción de un haz infrarrojo, y realizar algún proceso, en este caso un conteo de dichos eventos.
BIBLIOGRAFÍA Breijo, E. G. (2012). Compilador C CCS y simulador Proteus para microcontroladores PIC . Marcombo. Pérez, F. E. V., & Areny, R. P. (2007). Microcontroladores: fundamentos y aplicaciones con PIC (Vol. 1149). Marcombo.