Professional Documents
Culture Documents
Objetivos:
Material:
Motor dc
Fuente de computadora
Microcontrolador 16F877A
Cables de para practicas
Programador
de
Microcontroladores
Resistencia para Master Clear
Proteus
8
(software
de
simulacin)
PIC C Compiler 4.104 (software
de programacin)
PICkit 2 v2.61 (software para
introducir el programa al PIC)
Sensor de herradura
Lcd 16x2
Compuerta not
Frmulas:
RPM = (Pulsos/ Encoder) tiempo.
PWM=0.125 (Valor. Ingr. -200)+100
Desarrollo de la Prctica
Lo primero que se hizo
conseguir todo el material
necesario para desarrollar la
prctica, una vez con ya con el
material
proseguimos con la
prctica.
#include <16f877A.h>
#fuses HS,NOWDT
#USE DELAY (CLOCK=20Mhz)
set_timer0(0);
//Reinicia cuenta
set_timer1(3036);
Recarga a 0.5s
//#include <LCD_D.c>
#include <LCD_INVDISA.c>
//***********************************
***********
#include
4X4.C>
<KBD_B_INDVISA
VOID MAIN()
int16 counter=0;
int32 num;
//***************
TIMER1*********************
char tecla;
INT
#int_TIMER1
signed int t;
char PWMH=0,PWML=0;
void TIMER1_isr(void) {
lcd_init();
counter=get_timer0();
//Lectura contador TMR0
counter=((counter/9)*(0.5)) ;
Conversin a rpm
//
kbd_init();
//
PORT_B_PULLUPS(TRUE);
setup_timer_0(rtcc_ext_l_to_h
|RTCC_DIV_2);
//Configuracin TMR0
lcd_gotoxy(1,2);
printf(lcd_putc,"%lu
",counter);
rpm
setup_timer_1(T1_internal|
T1_DIV_BY_8);
//Configuracin TMR1
set_timer0(0);
//Borrado contador
if(tecla=='C')break;
set_timer1(3036);
//Carga a 0.5s
enable_interrupts(int_timer1);
lcd_gotoxy(1,1);
printf(lcd_putc,"%Lu"v1[t]);
enable_interrupts(global);
//Habilitacin interrupciones
}
WHILE (TRUE) {
//TECLADO:
Inicio:
//convercion
n=1; t=t-1;
while (t>=0)
{
v1[t]=(v1[t]*n);
num=0;
num=num+v1[t];
tecla=' ';
n=n*10;
//No de vueltas
t--;
for(t=0;t<=3;t++)
//restincion de numeros
do
if(num<=50 || num>=3151 ){
lcd_gotoxy(1,1);
printf(lcd_putc,"Error
tecla=kbd_getc();
if(tecla=='C')break;
v1[t]=tecla-48;
} while(v1[t]>9);
");
lcd_gotoxy(1,2);
printf(lcd_putc,"Intente de
nuevo");
delay_ms(400);
for(PWML;PWML>0;PWML-){
printf(lcd_putc,"\f");
OUTPUT_LOW(PIN_A0);}
goto Inicio;
if(input(PIN_A1)==0){
}
OUTPUT_LOW(PIN_A0);
//valores pwm
break; }
x=((0.125)*(num-200))+100;
WHILE (TRUE) {
// para pwm
//
num<=3150 ){
if(num>=92
||
}
// OUTPUT_LOW(PIN_A2);}
PWMH=x;
PWML=270-PWMH;
for(PWMH;PWMH>0;PWMH
--){
OUTPUT_HIGH(PIN_A0);}