Bu projede RS232 Seri Haberleşme Portu kullanılarak bilgisayar ile pic 16f877A mikrodenetleyicisinin haberleştirilmesi sağlanmıştır.

Devre Şeması:

Böylece programda belirlemiş olduğumuz bilgisayar tuşları ile pic’e komutlar göndererek motoru kontrol etmiş olmaktayız. Programı görsel olarak çalıştırabilmek için Hyperterminal programına ihtiyacınız vardır. Bu programda boud hızı 9600, veri biti ise 8 bit olacak şekilde ayarlanmalıdır. Hyperterminal programı bilgisayarınızda mevcut değilse internetten indirebilirsiniz.

Not: Dosyada iki farklı program vardır. Birinde, diğerinden farklı olarak rda kesmesi kullanılmıştır.

PIC C KODU #1

#include “D:\Projeler\Bilgisayarla Step Motor Kontrolü\step.h”

///////////////Bu program Mustafa AKBAS tarafindan yapilmistir.

char islem=0;

int hiz=20;

int a=20;

void main()

{

setup_adc_ports(NO_ANALOGS);

setup_adc(ADC_OFF);

setup_psp(PSP_DISABLED);

setup_spi(SPI_SS_DISABLED);

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

setup_timer_1(T1_DISABLED);

setup_timer_2(T2_DISABLED,0,1);

printf(“\n\r **********Step Motor Kontrolu**********”);

printf(“\n\r islem seciniz:\n”);

printf(“\n\r Sola Dondurur (W):\n”);

printf(“\n\r Sola Donerken Hizlandirir (S):\n”);

printf(“\n\r Sola Donerken Yavaslatir (X):\n”);

printf(“\n\r Saga Dondurur (E):\n”);

printf(“\n\r Saga Donerken Hizlandirir (D):\n”);

printf(“\n\r Saga Donerken Yavaslatir (C):\n”);

printf(“\n\r islemi seciniz—->”);

 

while(TRUE)

{

islem=”null”;

islem=getchar();

putc(islem);

 

while(islem==’W’ || islem==’w’)

{

printf(“\n\rMotor Sola Donuyor”);

 

while(TRUE)

{

output_high(pin_b0);

delay_ms(a);

output_low(pin_b0);

output_high(pin_b1);

delay_ms(a);

output_low(pin_b1);

 

output_high(pin_b2);

delay_ms(a);

output_low(pin_b2);

output_high(pin_b3);

delay_ms(a);

output_low(pin_b3);

 

if(kbhit()) break;

}

if(kbhit()) break;

}

 

while(islem==’S’ || islem==’s’)

{

printf(“\n\rMotor Hizlaniyor\n”);

printf(“hiz=%d”,a);

a=a-3;

while(TRUE)

 

{

output_high(pin_b0);

delay_ms(a);

output_low(pin_b0);

output_high(pin_b1);

delay_ms(a);

output_low(pin_b1);

 

output_high(pin_b2);

delay_ms(a);

output_low(pin_b2);

output_high(pin_b3);

delay_ms(a);

output_low(pin_b3);

 

if(kbhit()) break;

}

if(kbhit()) break;

}

 

 

while(islem==’X’ || islem==’x’)

{

 

printf(“\n\rMotor Yavasliyor\n”);

printf(“hiz=%d”,a);

a=a+3;

while(TRUE)

 

{

output_high(pin_b0);

delay_ms(a);

output_low(pin_b0);

output_high(pin_b1);

delay_ms(a);

output_low(pin_b1);

 

output_high(pin_b2);

delay_ms(a);

output_low(pin_b2);

output_high(pin_b3);

delay_ms(a);

output_low(pin_b3);

 

if(kbhit()) break;

}

if(kbhit()) break;

}

 

 

while(islem==’E’ || islem==’e’)

{

printf(“\n\rMotor Saga Donuyor\n”);

 

while(TRUE)

 

{

output_high(pin_b3);

delay_ms(hiz);

output_low(pin_b3);

output_high(pin_b2);

delay_ms(hiz);

output_low(pin_b2);

 

output_high(pin_b1);

delay_ms(hiz);

output_low(pin_b1);

output_high(pin_b0);

delay_ms(hiz);

output_low(pin_b0);

 

if(kbhit()) break;

}

if(kbhit()) break;

}

while(islem==’D’ || islem==’d’)

{

printf(“\n\rMotor Hizlaniyor\n”);

printf(“hiz=%d”,a);

a=a-3;

 

while(TRUE)

 

{

output_high(pin_b3);

delay_ms(a);

output_low(pin_b3);

output_high(pin_b2);

delay_ms(a);

output_low(pin_b2);

 

output_high(pin_b1);

delay_ms(a);

output_low(pin_b1);

output_high(pin_b0);

delay_ms(a);

output_low(pin_b0);

 

 

if(kbhit()) break;

}

if(kbhit()) break;

}

 

 

while(islem==’C’ || islem==’c’)

{

printf(“\n\rMotor Yavasliyor\n”);

printf(“hiz=%d”,a);

a=a+3;

while(TRUE)

{

output_high(pin_b3);

delay_ms(a);

output_low(pin_b3);

output_high(pin_b2);

delay_ms(a);

output_low(pin_b2);

 

output_high(pin_b1);

delay_ms(a);

output_low(pin_b1);

output_high(pin_b0);

delay_ms(a);

output_low(pin_b0);

 

if(kbhit()) break;

}

if(kbhit()) break;

}

}

 

}

PIC C KODU #2

/*

—————————————————————

—————-                                          —–

—————-BİLGİSAYAR KONTROLLÜ STEP MOTOR UYGULAMASI—–

—————-                                          —–

—————————————————————

*/

#include <16f877.h>

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000)

#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)

char islem=0;

int16 hiz=500;

int x,y,z;

#int_rda

void rda_kesmesi()

{

islem=getchar();

if (islem==’L’)

{

x=1;

puts (“MOTOR SOLA DÖNÜYOR”);

}

if (islem==’R’)

{

x=2;

puts (“MOTOR SAĞA DÖNÜYOR”);

}

if (islem==’D’)

{

x=3;

puts (“MOTOR DURDURULDU”);

}

if (islem==’H’)

{

hiz=hiz-100;

 

if (hiz<150)

{

hiz=200; // müsade edilen en yüksek hız değeri

puts (“MAX. HIZ”);

}

else

{

puts (“HIZ ARTTIRILDI”);

}

}

if (islem==’Y’)

{

hiz=hiz+200;

if (hiz>2000)

{

hiz=2000; // müsade edilen en düşük hız değeri

puts (“MİN. HIZ”);

}

else

{

puts (“HIZ AZALTILDI”);

}

}

}

void main()

{

setup_adc_ports(NO_ANALOGS);

setup_adc(ADC_OFF);

setup_psp(PSP_DISABLED);

setup_spi(SPI_SS_DISABLED);

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

setup_timer_1(T1_DISABLED);

setup_timer_2(T2_DISABLED,0,1);

enable_interrupts(int_rda);

enable_interrupts(global);

set_tris_b(0x00);

output_b(0x00);

x=0;

y=0;

z=0;

tara:

{

if (x==1)

goto sol;

if (x==2)

goto sag;

if (x==3)

goto dur;

goto tara;

}

/**************** Sola donus*********************/

sol:

{

output_high(pin_b0);

delay_ms(hiz);

output_low(pin_b0);

output_high(pin_b1);

delay_ms(hiz);

output_low(pin_b1);

output_high(pin_b2);

delay_ms(hiz);

output_low(pin_b2);

output_high(pin_b3);

delay_ms(hiz);

output_low(pin_b3);

goto tara;

}

/**************** Saga donus*********************/

sag:

{

output_high(pin_b3);

delay_ms(hiz);

output_low(pin_b3);

output_high(pin_b2);

delay_ms(hiz);

output_low(pin_b2);

output_high(pin_b1);

delay_ms(hiz);

output_low(pin_b1);

output_high(pin_b0);

delay_ms(hiz);

output_low(pin_b0);

goto tara;

}

dur:

output_b(0x00);

x=0;

hiz=500;

goto tara;

}