hocam merhaba, şimdi normalde elimde 16f877 nın devre sematıgı var fakar ben 18f252 ile yaptım kodlarımı ona entegre edip datasheetınden ona gore bacaklara bagladım sımdı o sematıgı, devre fotografını ve kodlarımı da atacagım. fotografta gorcegınız uzere probları baglıyorum guc kaynagını daha acar acmaz short ckt. hatası verıyor multımetrem. multımetreyı de devrenın artısı ve eksısıne baglıyorum. guc kaynagından yıne de 5v vermeye calıstıgımda korumaya alıyor kendını 3v dan sonra bu sekilde 2 tane pıc yaktım :/ ve ucuz pıclerde degıllerdı. multımetre kısa devrede oterken devrede sadece sag en usttekı kapasıtorun toprak ucunu veya devrenın power supplaya gıden genel topragını cıkardıgımda ses kesılıyor.
bkz:
kodum:
#device PIC18F252
#device icd=true
#include <18f252.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000) // 4MHz kristal
#define B_ileri pin_c7
#define B_geri pin_c6
#define B_dur pin_c5
int i=0, hiz=500;
// Yarim adim atmasini istedigimiz icin adimlar sirasiyla diziye tanimlaniyor.
const int y_adim_bin[]={0b0000001,0b00000011,0b00000010,0b00000110,0b00000100,0b00001100,0b00001000,0b00001001};
void main()
{
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_b(0x00);
set_tris_a(0x00);
set_tris_c(0b00000111);
output_b(0x00);
output_a(0x00);
while(1)
{
output_high(pin_a2);
delay_ms(500);
output_low(pin_a2);
delay_ms(500);
if(input(B_ileri)) // Eger ileri butonuna basildiysa
{
// output_low(pin_a2);
delay_ms(20); // buton arki onleme gecikmesi
while(!(input(B_dur))) // (Dur butonuna basilmadigi surece) isleyecek dongu
{
if(i==8)
i=0;
output_b(y_adim_bin);
output_high(pin_a2);
delay_ms(hiz);
output_low(pin_a2);// step motorun adimlarini gorebilmek icin
i++;
}
// output_b(0x00); // Dur butonuna basildiginda donguden cikip ilk pozisyonunu almasini
// istersek bu satiri eklememiz gerekir.
}
if(input(B_geri)) // Eger geri butonuna basildiysa
{
delay_ms(20);
while(!(input(B_dur))) // (Dur butonuna basilmadigi surece) isleyecek dongu
{
if(i==0)
i=8;
i--;
output_b(y_adim_bin);
delay_ms(hiz);
}
// output_b(0x00); // Baslangic pozisyonunu almasini isteseydik yazardik.
// Biz dur diyerek oldugu halde kalmasini istedik.
}
}
}
sematık ve devre tasarımım: