PIC C simülasyonda çalışan, pratikte çalışmayan devre

Başlatan punks_spawn, 30 Mart 2017, 22:15:49

punks_spawn

Arkadaşlar Merhaba,
Özel Bir şirkette Makine-Enerji Şefliği görevi üstlenmekteyim. Mevcut bir makineyi aşağıdaki gibi çalıştırmak istemekteyim.
Konu ise tam olarak şudur;
Simülasyonda çalışan bir devre breadboard'da da çalışmıyor.
Gerekli tüm bağlantıları yaptığımı düşünüyorum ve internette bununla ilgili araştırma yaptım fakat sonuç alamadım.
Bu arada arkadaşlar çıkışları bağlamadım devreye,
potans ayarı yaptığımda da ekranda görüntü alamıyorum.
Bilgi : Windows 10 SerPIC USB 2.0 PIC PROGRAMLAYICI Kullanıyorum. Proteus 8 Professional

Konu ile ilgili yardımlarınızı bekliyorum.





#include <16F877A.h>
#device ADC=10
#FUSES HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#USE delay (clock=20000000)

#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#define use_portb_lcd TRUE
#define kapak1 pin_d6
#define kapak2 pin_d7
#include <lcd.c>

float bilgi;
int vakum_zamani;
int isitici_zamani;
float vakum;
float isitici;



void main()
{
   setup_psp(PSP_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);
   setup_adc(adc_clock_div_32);
   setup_adc_ports(ALL_ANALOG);
   lcd_init();
   
output_d(0x00);
output_c(0x00);
set_tris_a(0x0F);
set_tris_c(0x00);
set_tris_d(0b11000000);
delay_ms(2000);
output_high(pin_d0);
output_high(pin_c5);
    delay_ms(100);
   output_high(pin_c6);
    delay_ms(100);
   while(1)
   { 
    basla:
   set_adc_channel(5);
   delay_us(20);
   bilgi=read_adc();
   vakum=0.0048828125*bilgi;
   vakum_zamani=vakum*12;
   if ( vakum_zamani<15)
   { vakum_zamani=15;
   }
   else {
   vakum_zamani=vakum_zamani;
   }
   printf(lcd_putc, "\fVAKUM = %d Sn. ",vakum_zamani);
   delay_ms(100);   
   
   set_adc_channel(6);
   delay_us(20);
   bilgi=read_adc();
   isitici=0.0048828125*bilgi;
   isitici_zamani=isitici*0.65;
   if ( isitici_zamani<1)
   { isitici_zamani=1;
   }
   else {
   isitici_zamani=isitici_zamani;
   }
   printf(lcd_putc, "\nISITICI = %d Sn. ",isitici_zamani);
   delay_ms(100);
   
   if(input(kapak1)==1)
    {output_high(pin_c6);
    delay_ms(200);    
    output_high(pin_d1);
    delay_ms(vakum_zamani*1000);
    output_low(pin_d1);
    delay_ms(1500);
    output_high(pin_d3);
    delay_ms(1500);
    output_high(pin_d5);
    delay_ms(isitici_zamani*1000);
    output_low(pin_d5);
    delay_ms(1000);
    output_low(pin_d3);
    delay_ms(1000);
    output_high(pin_d2);
    delay_ms(5000);
    output_low(pin_d2);
    delay_ms(1000);
    output_low(pin_c5);
    delay_ms(100);}
    
   if(input(kapak2)==1)
    {output_high(pin_c5);
    delay_ms(200);
    output_high(pin_d1);
    delay_ms(vakum_zamani*1000);
    output_low(pin_d1);
    delay_ms(1500);
    output_high(pin_d4);
    delay_ms(1500);
    output_high(pin_c4);
    delay_ms(isitici_zamani*1000);
    output_low(pin_c4);
    delay_ms(1000);
    output_low(pin_d4);
    delay_ms(1000);
    output_high(pin_d2);
    delay_ms(5000);
    output_low(pin_d2);
    delay_ms(1000);
    output_low(pin_c6);
    delay_ms(100);
    }
   
   }  
   
}





30f4011

bence ilk önce LCD çalışıyor mu onu dene çünkü LCD dide lehim sorunları oluyor bide bendede böyle bir şey olmuştu ilk önce LCD çalışıyor mu onu dene
#include <16f877a.h>
##fuses xt
#use delay (clock=4000000)
#define use_portb_lcd true
#include <LCD.c>

void main()
{
LCD_init();

delay_ms(100);
printf(LCD_putc,"\f LCD deneme");
}
ya da fuses a sadece xt yaz ben biraz daha inceliyecem kodlarını ondan sonra sana cevap veririm

aboo67

hocam yanlış görmediysem lcdnin 1 numaralı ucu +ya gitmiş VSS ucu değilmiydi o VCC +5 VSS GNDye(1 numarayı -ye 2 numarayı +ya) bağlayıp bir denermisin tabi önce lcdnin datasheetinden veya arkasında yazar ordan bir bakarmısın 1 ve 2 numaralı uçlar nelermiş

mehmet

Kullandığınız şemayı da paylaşınız.

LCD 3. uç da, potun orta ucuna gitmeli. Potun bir ucu +5V.,
diğer ucu da GND olmalı.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

overlok

Lcd bir numaralı pin gnd olmalı, 2. pin artıya. 3 numaralı pin potun orta bacağına, potun kenarlarda kalan pinleri gnd ve artıya bağlanmalı.  Birde besleme kaynağınız nedir?
Hanımların dikkatine, overlok makinesi ayağınıza geldi!

vitruvius

#use fast_io(b) kullanmissiniz ama lcd'nin bagli oldugu B portunun tris ayari yapilmamis.

punks_spawn

Merhaba, şu an işyerinde olduğum için istediğiniz cevapları veremiyorum fakat akşama devre şemasını ve diğer fotoğrafları da paylaşacağım.
Tavsiyelerinizi deneyeceğim. Bu arada LCD çalışmadığı için 19 numaralı bacak ta çıkış vermiyor olabilir mi? pic enerjilendiğinde 19 numaralı çıkış sabit bir şekilde hep çalışacak diye ayarlamıştım.


LCD için kullandığım datasheet görüntüsünü paylaşıyorum.

kimlenbu

PIC değil ARM kullanıyorum ama böyle durumlarda bir kaç yöntem izlersin. Eğer gerçek zamanlı debug şansın varsa, program hangi satıra kadar geliyor izlersin. Yoksa belli noktalara seri porttan veri gönderecek kod ekler, terminalden bunu izlersin. Daha basiti bağlı ledi bir kaç kere yakıp söndürecek bir kod eklersin belli bölgelere. İşlemcinin çalıştığından emin olduktan sonra çevre birimlere doğru yönelirsin.

Ledi direkt yanık kalacak şekilde ayarlarsan hata yaparsın, nerede takılıyor kalıyor göremezsin, ya da port kontrolsüz bir şekilde çıkış veriyor olabilir, gene yanıltır.

punks_spawn

Merhabalar Devre Şeması Görüntüsüde budur arkadaşlar.
Değerli yorumlarınız için teşekkür ederim. Deneyeceğim dediklerinizi.


punks_spawn

Arkadaşlar LCD ve Kontrast ayarındaki potans bağlantılarını dediğiniz gibi yaptım.
LCD 1 numaralı uç GND 2 numaralı uç +5V
Çalıştı Sonunda...
Yorum yapan, destek veren sizlerden Allah razı olsun.
2 Gündür uyuyamadım adam akıllı.