Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Acil yardım lütfen :(

Başlatan conqueror3, 28 Şubat 2009, 19:08:52

conqueror3

Arkadaşlar merhabalar.

Ben sıvı seviye ölçümü ile ilgili bir proje yapıyorum. Seviye ölçümü için 5V DC gerilimin + ucunu kabın dibine kablo ile veriyorum. Sonra yükseklikleri farklı 5 noktadan bu gerilimi okuyarak anahtarlama yapıyorum. Böylelikle LCD ekrana seviyeyi yazdırmak istiyorum. Örneğin seviye ilk tele ulaştığında A1 pini tetiklenecek, bir üst sevieye ulaştığında hem A1 hemde A2 tetiklenecek, bir üstteki seviyeye ulaştığında A1,A2 ve A3 beraber tetiklenecek. Bu şekilde bir sistem olucak.



Ancak kodlamada biraz sorun yaşıyorum. Aşağıdaki gibi bir kod düşündüm ama bu sefer hiç bir pin tetiklenmese bile ekranda "Yüzde 20 Dolu" yazısı görünüyor. Ama hiç bir pin tetiklenmiyorsa "Depo Boş" yazmasını istiyorum.



#include <16f877A.h>
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use fast_io(b)
#include <lcd.c>

void main()
{
setup_psp(PSP_DISABLED);
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_d (0x00);
set_tris_a (0xFF);

lcd_init();

while(1)
{

if(PIN_A1==0)
{
printf(lcd_putc, "\f Depo Bos");
delay_ms(1000);
}

else if(PIN_A1==1)
{
printf(lcd_putc, "\f Yuzde 20 Dolu");
delay_ms(1000);
}

else if (PIN_A1==1 & PIN_A2==1)
{
printf(lcd_putc, "\f Yuzde 40 Dolu");
delay_ms(1000);
}

else if (PIN_A1==1 & PIN_A2==1 & PIN_A3==1)
{
printf(lcd_putc, "\f Yuzde 60 Dolu");
delay_ms(1000);
}
}
}



if(PIN_A1==0) kısmını eklersem ekranda hiç yazı görünmüyor, o kısmı silersem bu sefer ekranda sadece "Yüzde 20 Dolu" yazısı yazıyor, diğer pinleri tetiklememe rağmen yüzde 40 yüzde 60 falan yazmıyor.

Ayrıca Yüzde ibaresini " % " şeklinde yazdığımda hata veriyor. O ifadeyi ekranda nasıl yazdırabilirim?

Kodlamada nasıl bir sorun var çözemedim. Tecrübeli arkadaşlar yardımcı olursanız çok sevinirim :(

necati

http://www.vermontficks.org/pic.htm
LIQUID LEVEL TRANSMITTER/RECEIVER SYSTEM
su tankınız kapalı ise suya dc vermeyin elektroliz olur;
oksijen hidrojen sonrada patlama olur.
suya ac uygulamalı bir devre daha uygun olur.
[email]entegreterbiyecisi@yahoo.com[/email]

conqueror3

Teşekkür ederim ama benim tank tamamen kapalı değil üstten açık deliği var

Sizden ricam programsal bir destek bekliyorum :)

necati

#include <16f877A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
//////////////////////
#BYTE  PORT_A=0X05        
#BYTE  PORT_B=0X06
//////////////////////
#include <lcd.c>
//////////////////////
int data=0;
//////////////////////////////////////////////////////////////////
void main(){

setup_adc_ports(NO_ANALOGS);

set_tris_d (0x00);
set_tris_a (0xFF);

lcd_init();
printf(lcd_putc, "\fogrenmek icin     ");
printf(lcd_putc, "\nbunlari sen yaz   ");
delay_ms(2000);
///////////////////////////////////////////////////////////////////
while(1){

data=PORT_A;
data&=0b00111110;//bit1---bit5 i al

if(data== 0){printf(lcd_putc, "\f Depo Bos     ");printf(lcd_putc, "\n Suyu ac       ");delay_ms(1000);}
if(data== 2){printf(lcd_putc, "\f Yuzde 20 Dolu");delay_ms(1000);}//data==0b00000010
if(data== 6){printf(lcd_putc, "\f Yuzde 40 Dolu");delay_ms(1000);}//data==0b00000110
if(data==14){printf(lcd_putc, "\f Yuzde 60 Dolu");delay_ms(1000);}//data==0b00001110
if(data==30){printf(lcd_putc, "\f Yuzde 80 Dolu");delay_ms(1000);}//data==0b00011110
if(data==62){printf(lcd_putc, "\f Yuzde 100 Dolu");printf(lcd_putc, "\n tasiyor uyuma       ");delay_ms(1000);}
}
}
[email]entegreterbiyecisi@yahoo.com[/email]

tyildizak

while(1)
{

switch(PORT_A)
{

case 14: printf(lcd_putc, "\f Yuzde 60 Dolu");
break;

case 6: printf(lcd_putc, "\f Yuzde 40 Dolu");
break;

case 2: printf(lcd_putc, "\f Yuzde 20 Dolu");
break;

case 0: printf(lcd_putc, "\f Depo Bos");
break

default: printf(lcd_putc, "\f Hata");
break

}

delay_ms(1000);

}

conqueror3

necati çok sağol dostum gerçekten çok yardımseversin Allah senden razı olsun.

Gerçi ben hatamı buldum. Değer okutmak istediğimde input_A(); komutunu kullanmam gerekiyor. O komut ile port A nın sayısal değerini bir değişkene attım ve değişkenin durumlarını if ile kontrol ettirdim.

Yinede bu yol da güzel bunu de deneyeceğim teşekkür ederim ;)

conqueror3

Arkadaşlar peki Yüzde ibaresini " % " şeklinde yazdığımda hata veriyor. O ifadeyi ekranda nasıl yazdırabilirim?

conqueror3

Arkadaşlar o işi de çözdüm ya

Printf variable count (%) does not match actual count

The number of  % format indicators in the printf does not match the actual number of variables that follow.  Remember in order to print a single %, you must use %%.


CCS de böyle diyor yani çift %% kullanmak gerekiyomuş :)

cemilkendir

baya bir geç olmuş ama yinede yazayım dedim

if(pin_a1==1);//bu satır yanlış

if(input(pin_a1)==1); //şeklinde yazman gerekli

bu nun yüzünden saç baş yolduğum günleri hatırlıyorum  :)

conqueror3

evet hocam bende onu geç de olsa farkettim yine de sağol:)