ii günler arkadaşlar bitirme ödevim konusunda yardıma ihtiyacım var.konuyu kısaca anlatayım. pic 16f877 i kullanıyom ccs c ile program yazıyom.pic den pwm üretiyoruz darbe genişliklerini 2 tane butonla artırıp azaltıyorum .pwm çıkışına bi dc motor bağlıyom hızını değiştiriyom buraya kadar tamam. bundan sonra aynı picde kesmeleri kullanak takometre yapcam CNY70 i kullanacam.
dc motorun hızını bu şekilde kontrol ediyom
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT, NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use fast_io(c)
#use fast_io(e)
#define use_portb_lcd TRUE
#include <lcd.c>
int i=2;
int32 j=65;
int32 k;
float f,s;
void main()
{
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_DISABLED);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
set_tris_a(0x0f);
set_tris_c(0x00);
set_tris_e(0x0f);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,j,1);
set_pwm1_duty(i);
set_pwm2_duty(i);
lcd_init();
printf(lcd_putc,"\ffreq=");
printf(lcd_putc,"\nduty=");
while(1)
{
j=j+1;
k=4*j*16;
f=4000000/k;
lcd_gotoxy(6,1);
printf(lcd_putc,"%f",f);
j=j-1;
s=i*1.562;
lcd_gotoxy(6,2);
printf(lcd_putc,"%f",s);
if(input(pin_a0))
{
delay_ms(20);
while(input(pin_a0));
i+=2;
if(i>64)
i=64;
set_pwm1_duty(i);
}
if(input(pin_a1))
{
delay_ms(20);
while(input(pin_a1));
i-=2;
if(i<2)
i=2;
set_pwm1_duty(i);
set_pwm2_duty(i);
}
if(input(pin_a2))
{
i=10;
set_pwm1_duty(i);
delay_ms(20);
while(input(pin_a2));
j+=5;
if(j>250)
j=250;
setup_timer_2(T2_DIV_BY_16,j,1);
}
if(input(pin_a3))
{
i=10;
set_pwm1_duty(i);
delay_ms(20);
while(input(pin_a3));
j-=5;
if(j<65)
j=65;
setup_timer_2(T2_DIV_BY_16,j,1);
}
}
}
takometre programı ise
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT, NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(e)
unsigned int32 i=0;
int s=0;
float y,j=0;
#define use_portb_lcd TRUE
#include <lcd.c>
#int_timer1
void timer1_kesme()
{
s++;
if (s>3)
{
s=4;
lcd_gotoxy(6,1);
printf(lcd_putc,"XXXXXX");
}
}
#int_CCP1
void yakala_kesmesi()
{
i=get_timer1();
set_timer1(0);
i=i+65535*s;
s=0;
j=i*0.000008/4;
j=60/j;
lcd_gotoxy(6,1);
printf(lcd_putc,"%f",j);
}
void main()
{
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_INTERNAL |T1_DIV_BY_8);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
enable_interrupts(INT_CCP1);
enable_interrupts(int_timer1);
enable_interrupts(GLOBAL);
lcd_init();
setup_ccp1(CCP_CAPTURE_DIV_4);
CCP_1_HIGH=0x00;
CCP_2_LOW=0x00;
set_tris_b(0x00);
set_tris_c(0x07);
output_b(0x00);
printf(lcd_putc,"\fSPIN RPM");
while(1);
}
bu programlar çalışıyo ama takometre programını yukardaki programda kesmeleri kullanarak içinde yazmam gerekiyo,yardıma ihtiyacım var