devreyi ve kodları koydum...yardım lütfen....

Başlatan emocan, 04 Ocak 2007, 02:21:04

emocan



#include <pic.h>
#include <delay.c>

main(void)
{  
       TRISA=0xFF;
       TRISB=0;
       TRISC=0;

       ADCON1=0x80;

for(;;){
       
     if(RA1=1){
        istenen=10;
         
                 for(ortam=37;ortam=istenen;ortam--){
                     PORTB=1;
                     PORTC=2;
           }  
         }

  else if(RA2=1){
         istenen=18;
         
                 for(ortam=37;ortam=istenen;ortam--){
                     PORTB=1;
                     PORTC=2;
           }  
         }

     else if(RA3=1){
         istenen=27;
         
                 for(ortam=37;ortam=istenen;ortam--){
                     PORTB=1;
                     PORTC=2;
           }  
         }

   
      else if(RA4=1){
         istenen=35;
         
                 for(ortam=37;ortam=istenen;ortam--){
                     PORTB=1;
                     PORTC=2;
           }  
         }

       else if(RA5=1){
         istenen=43;
         
                 for(ortam=37;ortam=istenen;ortam++){
                     PORTB=4;
                     PORTC=1;
           }  
         }
     
else
      {
       PORTB=0;
       PORTC=0;
      }
    }
     
}


öncelikle yapmak istediim basit klima mantığı ile çalışan bi devre...yani devrede görüldüğü gibi analog girişlerden 5 tane kullandım ve her bir girişe ayrı ayrı 5V uygulanması durumunda bir sıcaklık değerini istediğimiz değer olarak alglılayacak...istenen=burdaki değer PIC in içindeki ADC çıkışı ve ortam=burdaki değer de 18 dereceye karşı gelen değer...birinci butona basınca RA1=1 olcak ve istenen sıcaklık 5 derece olarak (ADC karşılığı 10) algılancak ve ortam sıcaklığı ile bi döngüye gircek...B poruna bağlı 3 ledden en üstteki ortam>istenen durumunda,ortadaki led ortam=istenen,alttaki led ise ortam<istenen durumunda yancak....C portuna bağlı ledlerden üstteki temsili olarak ısıtıcının çalıştığını göstercek ve yancak,alttaki ise soğutucunun çalıştıını göstercek ve yancak....
ama işte hex dosyasını proteusta yükleyip çalıştırdıım da anahtarlara basıyorum ama led lerden hiç biri yanmıyo...ve yalnızca RA4 e bağlı butona basınca led ler yanıyo..bir şey daha butona basıp kaldırınca port sanırım lojik 1 olarak kalıyo...
durum böyle arkadaşlar uğraşıyorum C yide pek bilmiyorum iki güne de yetitirmem lazım...
lütfen bi yardım....

arslan74

Merhaba,

Öncelikle senin devrende ve kodunda bazı hatalar var. Buton girişlerin uclarını boşt bırakmışsın. Her girişe 4.7k ile 10k arasında birer dirençle beslemeye bağla. butuna basına şaseye ceksin.

Kodundaki hataya gelince,derleyince yaptığın hataları sana uyarır, hiçbir uyarı almayıncaya kadar kodları düzeltmen lazım.

C'de sorgulama şekli öyle yapılmaz. Örneğin a , b ye eşitmi sorusu yapmak için. " if ( a == b ) " şeklinde olmalı. oysa seni eşitmı sorgusunu tek "=" karekteiyle yapmışsın. "if ( a = b )" şeklindeki ifade cok farklı anlam taşır. onun anlamı a'ya b'nin değerini ata sonra a sıfır dışı bir değer ise doğrudur. Eğer a sıfıra eşit ise o zaman yanlış anlamına geliyor.

Sen bu mantıkla kodunu tekrar düzenle sonra diğer hatalar tekrar bakarız.

Çalışmalarında başarılar.

emocan

dediğin gibi == olarak değiştirdim..bir de senin dediğin gibi yapsam yani dirençleri 5V a bağlayıp butona basınca şaseye çekme işini...normalde benim istediim PORTA nın girişinde jojik  0 olcak ve istediimiz sıcaklık değerini ayarlayabilmek için sadece gerekli porta 5V uygulicaz(lojik 1)...senin dediğin gibi yaparsam portlara başlangıçta da 5V gelmez mi...
programı HITECH PICC de derliyorum hata vermiyor...

aster

2 ayrı yer de aynı soruyu sormuşsun, 2 sine de cevap verilmiş mecburen diğer cevapları buraya taşıyorum, biraz dikkatli olalım Lütfen

Alıntı yapılan: "ete"Emocan,

Her nekadar C dilini bilmiyor isemde işin mantığı üzerine biraz kafa yorayım istedim.
5 adet analog giriş kullanmana rağmen hepsini +5 Volta bağlamışsın. Bu durumda bu girişleri analog olarak kullanman gerekmez. Burada yapmak istediğini tam anlayamadım. Şayet yapmak istediğin;
1. tuşa basılınca algılanacak sıcaklık 5 derece
2. tuşa basılınca 10 derece
3. tuşa basılınca 15 derece
..
.. gibi bir şey ise bunu analog girişleri kullanmadan da yapabilirsin.
Ama bu tuşlar ile ne yapmak istediğini daha açık anlatırsan arkadaşlar sana yardımcı olacaklardır sanırım.

Şayet butonlara bağlı değerler gerçek ADC değerleri olarak okunacak ise bu butonların diğer uçlarına birer pot bağlaman gerekir. Böylece butona basılınca pot'un ayarına bağlı değer ADC tarafından okunup ortam sıcaklığı veya ne olarak algılanacak ise o sıcaklık olarak okunabilir. Öncelikle buranın açıklığa kavuşturulması gerekir.

Ete

Alıntı yapılan: "emocan"yapmak istediğim örneğin ilk if için:

eğer RA girişi lojik 1 ise ;istenen sıcaklığı 5 derece olarak (ADC çıkış karşılığı 10) algılayacak ve ortam=37 zaten(sensörden algılanan temsili sıcaklığın ADC çıkış karşığı) ortam=istenen olana kadar ortam 1 azaltılacak ve bu süre içinde de B nin ve C nin birinci portu yancak...bu şekilde 5V un diğer girişlere uyugulanması durumunda istenen değer farklı algılancak ve içindeki for döngüsüne göre iş yapacak...yani istenen sıcaklık değeri girilmiş olcak butonlar ile...butonlara bağlı 5V lar ı sadece o uca uygulanması durumunda istenen değeri değiştircek die düşündüm....

örneğin sensör 10 derece için 100mV luk bir gerilim veriyor.port girişinde 100mV gerilim elde edeilmek için ne yapmam gerekir...çünkü prota bağlı direnci ne kadar değiştiriyim yine 5V olmaz mı o portun ucundaki gerilim değeri

emocan

bana acil lazım o yüzden iki bölüme de koymuştum..neyse önemli olan yetiştirebilmek...

burak1987

arslan74'ün dediği gibi kodunda ki hataları düzelt muhtemelen ondan olacak kodu o şekilde derlersen hata vermez zante en büyük bug sebeblerinden bir taneside senin hata tipi " == " olarak sorgularsan problemin çözülebilir.

arslan74

if(RA1=1){
istenen=10;

for(ortam=37;ortam=istenen;ortam--){
PORTB=1;
PORTC=2;
}
}


Sen burda ne yapmak istiyordun, herbir satırı adımadım anlatırsan neyi yanlış yaptığın belli olacak.

Çalışmalarında başarılar.

Ziya

ISIS te hex dosyasını değil cof dosyasını mcuya tanıt ve adım adım çalıştır. Belirli yerlere breakpoint at ve hatanı çalıştırarak gör. Hangi değişken ne olmalıydı ve ne olmuş araştırarak sorunlarını kendin daha çabuk çözebilirsin.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey