ISIS'de çalışyor ama uygulamada çalışmıyor?

Başlatan ican43, 10 Mayıs 2012, 12:40:35

ican43

Arkadaşlar herkese Allah'ın selamı üzerinize olsun.Üç analog girişin ölçülüp karşılaştırarak b portuna bağlı ledlerin yakılmasını sağlamak amacıyla yazılmıştır.Analog giriş gerilimleri lcd de ölçülüyor sonra karşılaştırma işlemine göre gerekli led yanıyor.Bu devreyi ISIS programında çok güzel çalışıyor ama board üzerinde yaptığımda b portu çıkışındaki led bir türlü yanmıyor.Devre elemanlar devredeki gibi ama çalıştıramadım. Acaba devrede b portu çıkışı için başka birşeymi yapmam lazım lütfen yardımcı olun.
     Devreyi nasıl göndereceğimi bilemedim devre hakkında kısa bilgi vereyim
RE0,RE1,RE2 girişlerine 47K ortak ucundan gerilim uyguladım.RB0 ve RB1 uçlarına led bağladım.RD uçlarına lcd bağlamadım elimde yoktu.lcd yi bağlamamam ledlerin yanmasına etki edermi bilmiyorum.Devre bu kadar.ISIS de çalışıyor ama devreyi kurunca led ışık vermiyor.Sağolun.
  //Üç adet Sinyallerin ve karşılaştırmaya göre çıkış ledlerinin yakılması//
#include <16f877.h>
#device ADC=10   //10 bitlik ADC kullancağını belirtiyor//
#fuses XT,NOWDT,NOPROTECT,NOLVP,NOPUT,NOBROWNOUT,NOLVP,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use fast_io(c)
#use fast_io(b)
#use fast_io(e)   //port yönlendirme komutları,E portu için//
#byte port_b=6
#byte port_e=3
#define use_portb_lcd TRUE//LCD B portuna bağlı//
#include <lcd.c>
#INT_AD // A/D çevrimi bitti kesmesi//

void ADC_Kesmesi()
{
   output_high(pin_c5);   //RC5 çıkışı 1//
   delay_ms(200);
   output_low(pin_c5);
}
unsigned long int bilgi1,bilgi2,bilgi3;   //işaretsiz 16 bitlik tamsayı tipinda değişken tanımlanıyor//
float voltaj1,voltaj2,voltaj3;    //ondalıklı tipte voltaj isminde değişken tanımlanıyor//

void main()
{

   setup_psp(PSP_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   set_tris_c(0x00);  // c portu komple çıkış//
   set_tris_b(0x00);
   set_tris_e(0x0F);   // e portu komple giriş//
   output_c(0x00);   //c portu çıkışını sıfırla//
   
   setup_adc(adc_clock_div_32);
   setup_adc_ports(ALL_ANALOG);
   enable_interrupts(INT_AD);
   enable_interrupts(GLOBAL);
   lcd_init();
   printf(lcd_putc,"\f ADC UYGULAMASI");
   delay_ms(1500);
   
   while(1)
   {
   set_adc_channel(5);
   delay_us(20);
   bilgi1=read_adc();
   voltaj1=0.0048828125*bilgi1;
   printf(lcd_putc,"\fAN5 Kanali");
   delay_ms(1500);
   printf(lcd_putc,"\fDijital=%lu",bilgi1);
   printf(lcd_putc,"\nVoltaj1=%fV",voltaj1);
   delay_ms(2500);
   set_adc_channel(6);
   delay_us(20);
   bilgi2=read_adc();
   voltaj2=0.0048828125*bilgi2;
   printf(lcd_putc,"\fAN6 Kanali");
   delay_ms(1500);
   printf(lcd_putc,"\fDijital=%lu",bilgi2);
   printf(lcd_putc,"\nVoltaj2=%fV",voltaj2);
   delay_ms(2500);
   set_adc_channel(7);
   delay_us(20);
   bilgi3=read_adc();
   voltaj3=0.0048828125*bilgi3;
   printf(lcd_putc,"\fAN7 Kanali");
   delay_ms(1500);
   printf(lcd_putc,"\fDijital=%lu",bilgi3);
   printf(lcd_putc,"\nVoltaj3=%fV",voltaj3);
   delay_ms(2500);
   if((voltaj1)>(voltaj2))
   {
   output_b(0x01);
   delay_ms(100);
   }
   else if((voltaj1)<(voltaj2))
   {
   output_b(0x02);
   delay_ms(100);
   }
   }
}

taso

led in altına ne kadarlık direnç koyuyorsun ?

eemuratozan

taso doğru yere değinmiş donanımda b portundan akım çekebilmen için dirençle bağlamalısın ledleri 100 ohm yeter sana dirençsiz takıyorsan yanmayabilir
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

ican43

100 ohmluk direnç bağladım ama b portu çıkışlarından gerilim gelmiyor, son bölümde yönlendirme veya b portuna atamada hata var herhalde..programı incelediğinizde belki siz daha iyi görebilirsiniz. yani voltaj ları karşılaştırıyorum ama bunu b portu çıkışına vermiyor.başka bir işlemleim aktarmam gerekiyor..Yardımcı olursanız çok sevinirim.Allaha emanet olun

ican43

arkadaşlar program  sırasında voltaj değişkenine atanan dijital bilgi değeri yeniden port b nin çıkış verebileceği sinyale nasıl dönüştürürüm orada bir eksiklik var..Sonra bu değerleri karşılaştırmam gerekiyor herhalde...

eemuratozan

programda output_c(0x00); gibi bi de altına output_b(0x00); ekle bakalım ne değişecek ? byte port_b=6 ne demek oluyor ben bu şekilde yazmıyorum da ona göre çözüm arıyalım
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

eemuratozan

ben baktım şimdi sorun byte portb=6 da olabilir sen bu komutu kullanınca pic ram den 6. adresi portb değişkeni için ayırıyor ancak daha sonra siledebiliyor locate portb=6 desen pic oadrese dokunamaz çalışır ama bence byte portb=6 yı kullanmana hiç gerek yok o komutları sil öle dene
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

ican43

Arkadaşlar o şekilde düzelttim yine olmadı.Hatta iki değeri karşılaştıracağımdan voltaj3 ü ve kesmeleri iptal ettim yani biraz daha sadeleştirdim ama b portundaki ledleri yakamdam..Yani voltaj1,voltaj2 gerilim değerlerini b portunun algılayabileceği değere aktarabilmem gerekir ama acemilik işte.. b portuna bu değerleri aktarıp çalıştıramadım. sadeleştirilmiş devre aşağıda, bi incelerseniz çok memnun olurum hayırlı çalışmalar;
#include <16f877.h>
#device ADC=10   //10 bitlik ADC kullancağını belirtiyor//
#fuses XT,NOWDT,NOPROTECT,NOLVP,NOPUT,NOBROWNOUT,NOLVP,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(e)//port yönlendirme komutları,E portu için//
#define use_portd_lcd TRUE//LCD D portuna bağlı//
#include <lcd.c>

unsigned long int bilgi1,bilgi2;//işaretsiz 16 bitlik tamsayı tipinda değişken tanımlanıyor//
float voltaj1,voltaj2;//ondalıklı tipte voltaj isminde değişken tanımlanıyor//

void main()
{
   setup_adc_ports(ALL_ANALOG);
   setup_adc(adc_clock_div_32);
   setup_psp(PSP_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   set_tris_b(0x00);// b portu komple çıkış//
   set_tris_e(0x0F);// e portu komple giriş//
   output_b(0x00);//b portu çıkışını sıfırla//
   lcd_init();
   printf(lcd_putc,"\f ADC UYGULAMASI");
   delay_ms(1000);
   
   while(1)
   {
   set_adc_channel(5);
   delay_us(20);
   bilgi1=read_adc();
   voltaj1=0.0048828125*bilgi1;
   printf(lcd_putc,"\fAN5 Kanali");
   delay_ms(1000);
   printf(lcd_putc,"\fDijital=%lu",bilgi1);
   printf(lcd_putc,"\nVoltaj1=%fV",voltaj1);
   delay_ms(100);
   set_adc_channel(6);
   delay_us(20);
   bilgi2=read_adc();
   voltaj2=0.0048828125*bilgi2;
   printf(lcd_putc,"\fAN6 Kanali");
   delay_ms(1000);
   printf(lcd_putc,"\fDijital=%lu",bilgi2);
   printf(lcd_putc,"\nVoltaj2=%fV",voltaj2);
   delay_ms(1000);

   if((voltaj1)>(voltaj2))
   {
   output_b(0x01);
   delay_ms(200);
   }
   else if((voltaj1)<(voltaj2))
   {
   output_b(0x02);
   delay_ms(200);
   }
   }
}

eemuratozan

programda hata görünmüyor ama bi kaç yeri daha düzeltsek acaba mı desek şu voltaj1 ve voltaj2 yi neden parantez içinde yazdın doğrudan voltaj1>voltaj2 yazabilirsin sorun bu mu bilemem bi de output_b(0x01) yerine output_high(pin_b0) yaz bakalım aynı şey ama deneyerek bulcaz simülasyon resmini de koyarsan aslında fena olmaz
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

eemuratozan

bir de şunu da dene programın set tris ayarlarını yaptıktan sonra port_b_pullups(false); yaz
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

ican43

Dedikleriniz yaptım ama hala aynı,pic çıkışından (Rb0,Rb1),hala gerilim alamıyorum..Örneğin yürüyen ışık yapıyroum çalışıyor ledler yanıyor,ama bu devreyi kurduğumda led yanmıyor,ölçtüm,çıkışta gerilim yok. ama ISIS de çalışıyor...ISIS deki simülasyonu nasıl gönderirim beceremedim..sürekli bununla uğraşıyorum olmuyor..yardımlarınızı bekliyorum..Şimdiden Allah razı olsun..İnşaallah başaracağız sizlerin yardımı ile..

serhat1990

Devre şeması ekle en azından ayrıca lcd kütüphanesinde enable rs rw uçları olarak kullanmak istediğin pinler kullanılıyor olabilirmi onlarıda kontrol etsen iyi olur . İyi çalışmalar.

ican43

lcd kütüphanesinde port b nin kullanıldığı durumu göremedim, port d den çıkış veriyor, ama port b den çıkış alalmdık, ayrıca ISIS deki devreyi seçiyorum ama buradan kopyalayamıyorum, ekleme bölümü de yok devreyi size nasıl göştereceğim.yani resim şeklinde;

serhat1990

export-> pdf olarak çıktı al burayada image olarak ekle postimage'den yapabilirsin bu işi kolay gelsin ...