16F877A programlama hakkında bilgi yardım

kardeşim baskı devrenin altından 877a nın data şheet bakarak hangi prtu kulandıgını kendin bak söyle yardımcı olsunlar
 
Kendi robotunu kendin yap kitabından yararlanarak Sumo robot yaptım fakat programa ihtiyacım var. Kitabın yanında verdikleri programı yükledim çalıştı ama beyaz çizgiye geldiğinde duruyor, geri gitmiyor ayrıca hızınıda biraz arttırmak istiyorum.
Yardımcı olabilirmisiniz acaba?
 
arkadaşlar merhaba
çok acil yardıma ihtiyacım var. şimdi elimde bulunan iki farklı direncin ölçümünü yapmak istiyorum. 1-0-2 anahtarla seçimini yapıcam ölçme direnci devredeki RX direncidir. çıkışta kırmızı , yeşil led , buzzer ve Lcd var. devreyi isiste kurdum similasyonda lcd bana değeri veriyor fakat ok durumunda sürekli , açık devre ve uygunsuz durumunda kesikli çal dediğimde her iki durumda kesikli çalıyor tabi bunlar similasyonda . pratiğe geçtiğimde ise pici programladım devreyi kurdum. pic girişi okuyup çıkışa hiç birşey aktarmıyor. ne lcd , ne led ne buzzer çıkış veriyor. girişi de okumuyor. Yardıma çok ihtiyacım sorun nerede devrede mi programda mı?



#include <16f877A.h>
#DEVICE ADC=10 //10 BİT ADC
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,NOBROWNOUT
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(d)
#use fast_io(a)
#use fast_io(e)


unsigned int16 adcbilgi=0; //16 bitlik işaretsiz adcbilgi adında bir degisken tanımladık...
float voltajdeger=0; //ondalıklı voltaj adında bir degisken tanımladık
float R3 = 0.51 , Vcc = 5;
float direnc = 0;

#define LCD_ENABLE_PIN PIN_d3 //lcd enable pini d3
#define LCD_RS_PIN PIN_d1 //lcd rs pini pin d1
#define LCD_RW_PIN PIN_d2 //lcd rw pini pin d2

#define LCD_DATA4 PIN_d7 //lcdnin data4 pini pind7
#define LCD_DATA5 PIN_d6 //lcdnin data5 pini pind6
#define LCD_DATA6 PIN_d5 //lcdnin data6 pini pind5
#define LCD_DATA7 PIN_d4 //lcdnin data7 pini pind4

#include <lcd.c> // lcd dosyalarını yükler

void main()

{
set_tris_a(0b000001); //a0 pini giriş ...
setup_adc(adc_clock_div_32); //adc clock frekansı fosc/32
setup_adc_ports(AN0); //AN0 ANALOG GİRİŞ

set_tris_e(0xff); //e portu giriş
set_tris_d(0x00); //d portu cıkıs
set_tris_b(0x00); //b portu cıkıs
output_d(0x00); //d portunu sıfırla
output_b(0x00); //b portunu sıfırla
lcd_init(); //lcd dosyalarını yükle


while(1) //sonsuz döngüye giriliyor..

{
printf(lcd_putc,"\f"); //lcd'yi temizle
lcd_gotoxy(2,1);printf(lcd_putc," Direnc "); //lcd 1.satır 2.sütundan YAZ.
lcd_gotoxy(2,2);printf(lcd_putc," Olcme ");
delay_ms(1500); //2.SATIR 2.sütundan itibaren yaz.1.5 sn bekle
printf(lcd_putc,"\f");

set_adc_channel(0); //adc kanalı 0 aktıf
delay_us(20); //20 us bekle
adcbilgi=read_adc(); //adc oku adc bilgiye ata
voltajdeger=adcbilgi*0.00488828125; //5/1024=0.0048828125 ADIM voltajı...
direnc =((voltajdeger * R3)/(Vcc - voltajdeger)); // printf(lcd_putc,"\f"); //lcd'yi temizle


if (input(pin_e0) && input(pin_e1)) // e0 ve e1 lojik 1 ise
{
if(direnc >= 5.04 && direnc <= 6.16) // direnç değeri belirtilen aralıkta ise değeri yaz ve ok yaz
{
Output_high(pin_b0); //yesil led yak
Output_high(pin_b2); //buzzer çal
delay_ms(1000);
lcd_gotoxy(2,1);printf(lcd_putc,"DIRENC=%fkOhm",direnc); //direnc bilgisini göster...
Delay_Ms(100); //100 Ms BEKLE
lcd_gotoxy(2,2);printf(lcd_putc,"******OK******* ");
delay_ms(1000); //2.SATIR 2.sütundan itibaren yaz.1 sn bekle
printf(lcd_putc,"\f"); //lcd'yi temizle
}
else if (direnc > 20) //eğer ki bu şartların dışında ise açık devre var demektir.
{
lcd_gotoxy(2,1);printf(lcd_putc,"SONSUZ DIRENC "); //açıklama bilgisini göster...
Delay_Ms(100); //100 Ms BEKLE
lcd_gotoxy(2,2);printf(lcd_putc,"ACIK DEVRE VAR");
delay_ms(1000); //2.SATIR 2.sütundan itibaren yaz.1 sn bekle
printf(lcd_putc,"\f");
output_high(pin_b1); //kırmızı ledi yak
output_high(pin_b2); // aralıklı buzzer çal
delay_ms(500);
output_low(pin_b2);
delay_ms(500);

}
else //eğer ki belirtilen aralıkta değilde değeri yaz ve uyarı ver
{
lcd_gotoxy(2,1);printf(lcd_putc,"DIRENC=%fkOhm",direnc); //direnc bilgisini göster...
Delay_Ms(100); //100 Ms BEKLE
lcd_gotoxy(2,2);printf(lcd_putc," UYGUN DEGIL ");
delay_ms(1000); //2.SATIR 2.sütundan itibaren yaz.1 sn bekle
printf(lcd_putc,"\f");
output_high(pin_b1); //kırmızı ledi yak
output_high(pin_b2); // aralıklı buzzer çal
delay_ms(500);
output_low(pin_d2);
delay_ms(500);

}
}
else if (input(pin_e0) && input(pin_e2)) // e0 ve e2 lojik 1 ise
{
if(direnc >= 0.75 && direnc <= 0.85) // direnç değeri belirtilen aralıkta ise değeri yaz ve ok yaz
{
Output_high(pin_b0); //yesil led yak
Output_high(pin_b2); //buzzer cal
delay_ms(1000);
lcd_gotoxy(2,1);printf(lcd_putc,"DIRENC=%fkOhm",direnc); //direnc bilgisini göster...
Delay_Ms(100); //100 Ms BEKLE
lcd_gotoxy(2,2);printf(lcd_putc,"******OK*******");
delay_ms(1000); //2.SATIR 2.sütundan itibaren yaz.1 sn bekle
printf(lcd_putc,"\f"); //lcd'yi temizle
}
else if (direnc > 20) //eğer ki bu şartların dışında ise açık devre var demektir.
{
lcd_gotoxy(2,1);printf(lcd_putc,"SONSUZ DIRENC "); //direnc bilgisini göster...
Delay_Ms(100); //100 Ms BEKLE
lcd_gotoxy(2,2);printf(lcd_putc,"ACIK DEVRE VAR"); //2.SATIR 2.sütundan itibaren yaz.1 sn bekle
delay_ms(1000);
printf(lcd_putc,"\f");
output_high(pin_b1); //kırmızı ledi yak
output_high(pin_b2); // aralıklı buzzer çal
delay_ms(500);
output_low(pin_b2);
delay_ms(500);

}
else //eğer ki belirtilen aralıkta değilde değeri yaz ve uyarı ver
{
lcd_gotoxy(2,1);printf(lcd_putc,"DIRENC=%fkOhm",direnc); //voltaj bilgisini göster...
Delay_Ms(100); //100 Ms BEKLE
lcd_gotoxy(2,2);printf(lcd_putc," UYGUN DEGIL ");
delay_ms(1000); //2.SATIR 2.sütundan itibaren yaz.1 sn bekle
printf(lcd_putc,"\f");
output_high(pin_b1); //kırmızı ledi yak
output_high(pin_b2); // aralıklı buzzer çal
delay_ms(500);
output_low(pin_d2);
delay_ms(500);

}
}
else
output_d(0x00); //d portunu sıfırla
output_b(0x00); //b portunu sıfırla
}
}
 

Ekli dosyalar

  • Adsız.png
    Adsız.png
    70.8 KB · Görüntüleme: 5

Forum istatistikleri

Konular
129,842
Mesajlar
930,704
Kullanıcılar
452,688
Son üye
MEHMET ALİ BOZ

Yeni konular

Geri
Üst