Telefonla Uzaktan Kontrol Devresi Yardım

Başlatan djtur, 20 Ocak 2012, 16:45:00

djtur

TÜBİTAK \"Kendimiz Yapalım\" köşesindeki telefonla uzaktan kontrol devresini tamamladım ama ilk denemem başarısız oldu.Telefonu açıyorum 2 defa çaldıktan sonra  hat rölesi devreye giriyor ve led yanıyor.Yani artık şifre girmem için bekliyor ama şifreyi giriyorum hiçbir tık yok.Acaba daha önce yapan oldu mu bir fikir verirse sevinirim.Malzeme listesindeki malzemelerden sadece 220nF (400v) değilde 220nF 250v kutupsuz kondansatör  kullandım acaba bunun bir etkisi olabilir mi?
Birde şunu öğrenmek istiyorum.Acaba programda kodların en üstünde bulunan
 #include <pic.h>
#include <delay.c>
satırları acaba aynen programcının yaptığı bu haliyle aynen alınacak mı?Yoksa ne yapılmalı?Benim dosyam TELEFON.HEX şeklinde PIC e atıyorum.
Adres bu http://www.biltek.tubitak.gov.tr/gelisim/elektronik/39.htm

Flatron

Belki şifreyi tam giremediğinizdendir.C bilmiyorum ,ancak C kodun içerisinde
// sifrenin son hanesi * olmalidir diye bir açıklama var.Son hane için * tuşuna basıyormusunuz?
Ayrıca yanlış kod yazıldı ise \"Kod Hatalı\" gibi bir mesaj bölümünü uygun yere eklemeye çalışınki programın cevabını görün eğer o satıra gelmiyorsa hatanın yeri için daha dar bir bölgeyi işaret eder.

djtur


yazici67

sifre[i]=PORTB&0x0F; // sifreyi oku
Burada bir hata var gibi me geldi. Çünkü devrede üst 4 bit bağlı ama şifre alırken alt 4 bit alınıyor dolayısıyla şifre hep 0000* oluyor.
bu kısmı
sifre[i]=( ( PORTB & 0xF0 ) >> 4 ); // sifreyi oku
şeklinde değiştirip bir deneyin.

djtur

Alıntı yapılan: yazici67 - 21 Ocak 2012, 15:49:58sifre[i]=PORTB&0x0F; // sifreyi oku
Burada bir hata var gibi me geldi. Çünkü devrede üst 4 bit bağlı ama şifre alırken alt 4 bit alınıyor dolayısıyla şifre hep 0000* oluyor.
bu kısmı
sifre[i]=( ( PORTB & 0xF0 ) >> 4 ); // sifreyi oku
şeklinde değiştirip bir deneyin.
Yardımınız için teşekkür ederim bi sorum olacak:Acaba .c uzantılı dosyadan dediğiniz yeri değiştirdiğimde yeni .hex nasıl oluşacak ?Nasıl yapmalıyım?Mümkünse dediğiniz yeri değiştirip yeni .hex dosyasını buradan gönderebilirmisiniz? Gerçekten bir sürü masraf ettim ve moralim bozuk.Tek ümidim dediğiniz yer kaldı.

yazici67

Derleyicilerle olacak ama benim derleyicilerim şu an yüklü değil mümkünse ilgilenen arkadaşlar derleyebilir mi ?

djtur

Alıntı yapılan: yazici67 - 21 Ocak 2012, 15:49:58sifre[i]=PORTB&0x0F; // sifreyi oku
Burada bir hata var gibi me geldi. Çünkü devrede üst 4 bit bağlı ama şifre alırken alt 4 bit alınıyor dolayısıyla şifre hep 0000* oluyor.
bu kısmı
sifre[i]=( ( PORTB & 0xF0 ) >> 4 ); // sifreyi oku
şeklinde değiştirip bir deneyin.
Arkadaşlar lütfen herşeyi bıraktım sizden gelecek bir çözüm bekliyorum.Yazici67 arkadaşın dediği düzeltmeyi yapıp .hex olarak gönderecek kimse yok mu?

djtur

\"PIC C Compiler\"  isimli program ile düzeltmeyi yapıyorum ve \"compile\" tuşuna bastığımda bir sürü hata veriyor.Yukarıdaki include satırı ile ilgili hatalar veriyor.

djtur

#8
Arkadaşlar ekte c kodlarını veriyorum lütfen birisi .hex haline getirebili mi?

yazici67

Arkadaşım Bilgisayarı formatladığım için derleyicileri kuramadım setuplarınıda kaybettim. Vakitte bulamıyorum şuan. Yine uğraşmaya çalışıyorum diğer arkadaşlara diyorum elinde HiTech C derleyicisi olan vardır illa ki bir kimse de indirip derlesin. Vakit bulabilirsem derleyicileri kurmaya çalışacağım.

yazici67

Oh en sonunda buldum setup dvd mi... Derledim hata vermedi vatana millete hayırlı olsun. KOD, COFF ve HEX ekte...

djtur

#11
Öncelikle yardımlarını esirgemediğin için çok teşekkür ederim.Yeni hex dosyasını PIC e attım ama bu  sefer  2 kere zil çalınca hat rölesi önceden çalışıyordu şimdi o da çalışmıyor.Çok basit bir hata ama anlayamadım.
Pıc e hex dosyasını attıktan sonra atılan hex ile dışarıdaki hex dosyalarını karşılaştırdığımda içindeki rakamlarda farklılıklar var acaba neden farklı? :-[ Ekte gördüğünüz gibi...


Birde şu hataları veriyor:
*** Error 18 \"kod.c\" Line 8(10,17): File can not be opened
    Not in \"C:\\Program Files (x86)\\PICC\\devices\\pic.h\"
    Not in \"C:\\Program Files (x86)\\PICC\\drivers\\pic.h\"
    Not in local \"C:\\Users\\isa\\Desktop\\kod\\pic.h\"
*** Error 18 \"kod.c\" Line 9(10,17): File can not be opened
    Not in \"C:\\Program Files (x86)\\PICC\\devices\\htc.h\"
    Not in \"C:\\Program Files (x86)\\PICC\\drivers\\htc.h\"
    Not in local \"C:\\Users\\isa\\Desktop\\kod\\htc.h\"
*** Error 128 \"kod.c\" Line 19(1,9): A #DEVICE required before this line
      3 Errors,  0 Warnings.

yazici67


djtur

Alıntı yapılan: yazici67 - 23 Ocak 2012, 02:05:53Derleyici ekranının resmini atabilir misiniz ?
Kusura bakmayın artık kimse online olmaz bu saatte diye yatmıştım sabah gördüm.Ekte resmini gönderdim

yazici67

3 değil 300 tane hata vermeside normal. :) CCS C derleyicisi kullanıyorsunuz kodlar HiTech C için yazılmış. İkiside C olmasına rağmen aralarında önemli syntax farklılıkları var. İnternette HiTech C compiler diye aratırsan doğru derleyiciyi bulursun. Kodlar CCS C için yeniden yazılabilir ama o uzun iş.

djtur

Alıntı yapılan: yazici67 - 23 Ocak 2012, 12:35:013 değil 300 tane hata vermeside normal. :) CCS C derleyicisi kullanıyorsunuz kodlar HiTech C için yazılmış. İkiside C olmasına rağmen aralarında önemli syntax farklılıkları var. İnternette HiTech C compiler diye aratırsan doğru derleyiciyi bulursun. Kodlar CCS C için yeniden yazılabilir ama o uzun iş.

Maalesef win7 kullanıyorum ve win7 uyumlu olan yok.Şimdi ne yapmam gerekiyor.En son gönderdiğiniz hex dosyasında ne hata veriyor acaba bulabildinizmi?

yazici67

Sorun bilgisayarın Win7 olması değil 64-bit olması.HiTech C nin 9.83 sürümü konsolda çalışır 64-bit uyumludur. Ama komut satırı kullanmasını biliyorsunuz değilmi ?
HiTech C linkte...
HiTech C Compiler

djtur

Alıntı yapılan: yazici67 - 23 Ocak 2012, 14:52:00Sorun bilgisayarın Win7 olması değil 64-bit olması.HiTech C nin 9.83 sürümü konsolda çalışır 64-bit uyumludur. Ama komut satırı kullanmasını biliyorsunuz değilmi ?
HiTech C linkte...
HiTech C Compiler
Ne için komut satırı

yazici67

#18
Derleyicinin kendi IDE si yok MPLAB varsa kolay ama yoksa komut satırından derleyeceksiniz. Örneğin:
cd C:\\Program Files (x86)\\HI-TECH Software\\PICC\\9.83\\bin
picc --chip 16F84A kod.c
Bunu batch file yapıp ekliyorum. Verceğim dosyayı kod.c ile aynı klasöre koyup çift tıklayın.
not : arşivi açıp içindeki compile.bat \' ı kullanın...

djtur

Alıntı yapılan: yazici67 - 23 Ocak 2012, 15:01:59Derleyicinin kendi IDE si yok MPLAB varsa kolay ama yoksa komut satırından derleyeceksiniz. Örneğin:
cd C:\\Program Files (x86)\\HI-TECH Software\\PICC\\9.83\\bin
picc --chip 16F84A kod.c
Bunu batch file yapıp ekliyorum. Verceğim dosyayı kod.c ile aynı klasöre koyup çift tıklayın.
not : arşivi açıp içindeki compile.bat \' ı kullanın...

Çift tıkladım devam etmek için bir tuşa basın dedi bastım kapandı

yazici67

Evet o hatalı oldu.Şimdi yenisini atıyorum. Denedim çalışıyor.Kod.c ile aynı klasöre sadec hex dosyasını atıyor.

djtur

Dosya kendi üstüne kopyalanamaz
0 dosya kopyalandı


şeklinde yazdı

yazici67

Windows batch script ten nefret ediyorum. Linux shell script takır takır çalışıyor.
Siz C:\\Program Files (x86)\\HI-TECH Software\\PICC\\9.83\\bin klasörüne girin.Orada kod.hex oluşmuş olması lazım.

djtur

#23
Alıntı yapılan: yazici67 - 23 Ocak 2012, 15:34:37Windows batch script ten nefret ediyorum. Linux shell script takır takır çalışıyor.
Siz C:\\Program Files (x86)\\HI-TECH Software\\PICC\\9.83\\bin klasörüne girin.Orada kod.hex oluşmuş olması lazım.

evet oluşmuş çok teşekkürler.Sizi de uğraştırıyorum ama bilmemek böyle bişey demekki.Acaba bu kod.hex neden hat rölesini çalıştırmadı.Bu konuda ne yapabiliriz hocam(artık hocam diyebilirim herhalde)

Ya birde kodların en üstünde ben oraya takıldım.
#include <pic.h>
#include <htc.h>  buralar .hex oluştururken aynen kalacakmı yoksa ben pic.h yazan yere kendi 16F84A mı yazıcam

yazici67

pic.h HiTech C nin standart PIC başlık dosyasıdır. PIClerin standart özelliklerini ( PORTA, PORTB, TRISA, ADCON, CMCON, BOR gibi) #define eder. Çünkü bunlar Ram Bankları içinde standart adreslerdir. htc.h nin içinde HiTech header dosyalarına çağrışımlar bulunur. Mesela DelayMs() fonksiyonu Samples\\Delay\\delay.c içindedir ama bu ve benzer fonksiyonlar htc.h de birleştirilmiştir.
Ayrıca 16F84A kullanıyorsan pic.h uyumludur.

yazici67

Galiba bir hata var.En son oluşturduğunuz hex dosyasını PIC e atın. Tekrar alıp kontrol edin. Eşit değilse program atmada sorun çıkıyor demektir.Programlayıcının resmini atarsanız birşey söyleyebilirim. Eğer atma konusunda sorun çıkmıyor ise son karakteri * değil 0 veya # tuşlayın.

djtur

Alıntı yapılan: yazici67 - 23 Ocak 2012, 16:01:30Galiba bir hata var.En son oluşturduğunuz hex dosyasını PIC e atın. Tekrar alıp kontrol edin. Eşit değilse program atmada sorun çıkıyor demektir.Programlayıcının resmini atarsanız birşey söyleyebilirim. Eğer atma konusunda sorun çıkmıyor ise son karakteri * değil 0 veya # tuşlayın.
Atarken bir hata vermiyor ama atılan hex ile dışardaki arasında yine önceki sayfada resmini verdiğim farklılıklar var.Programlayıcım işte ekte

djtur

0,* # hepsini denedim olmadı.Tübitak sitesindeki kendi verdikleri .hex dosyasını atıyorum hat rölesi tık ediyor ve led yanıyor ama şifre girdiğimde herhangi bir icraat yok

yazici67

Gerçekten sıkıntılı ama hexler farklı oluyorsa sorun programlama esnasındadır.Programlayıcı programın devre ile uyumlu mu ? Gerekli sürücüleri kurdun mu ?

djtur

yüklerken hiçbir problem yok.Çünkü ilk devrem değil.Daha öncede yükledim aynı cihazla problem olmadı.

djtur

Aslında en büyük problem benim programlama bilmemem.Bunun bir nedeni olmalı.Ama arkadaşlardan biri daha önce yaptım çalıştı diyor.Özelden mesaj attım ama cevap alamadım.

yazici67

Dediğim gibi yazılımda bir sorun gözükmüyor.Anakartınızda bir sıkıntı olması ihtimali çok düşük ama siz yinede başka bir bilgisayarda deneyin. Dediğim gibi herhangi bir sorun yok .Yalnız programı atıp yanlış geri alması PIC \' in bozuk olduğu ihtimalini arttırıyor.

djtur

Arkadaşım çok teşekkürler Allah razı olsun.Yarın yeni bir PIC alıp denicem.Tekrar ilginden ve yardımseverliğinden dolayı sonsuz teşekkürler.

yazici67

Önemli değil arkadaşım . Tekrar yapıpta işe yaramazsa aklıma yapılabilecek birşey gelmiyor artık yapan arkadaşına sorarsın. Kolay gelsin... Hayırlı çalışmalar...

djtur

yazici67 arkadaşım nihayet uzaktan kontrol devresi çalıştı.Bir gün gece saat  3 lere kadar tek tek kontrol ettik ve arızanın nedenini bulduk.Daha doğrusu arızamı hatamı bilmiyorum.Devrede 220nF (400v) olması gereken kondansatör, benimkinde 220nF (250v) idi.Bunu iptal edip direk bağlayınca çalıştı.Acab dedik yanılıyor muyuz?Bir daha bağlayalım dedik ve denedik yine çalışmadı.Ya benim kondansatör arızalı idi ya da 250v olanı kullandım diye çalışmadı.Bilmiyorum.Tek bildiğim iptal edince canavar gibi çalışıyor.Oh be rahatladım.Tekrar herkese teşekkürler.Belki başka arkadaşlara ışık tutar diye yazayım dedim.Başka projelerde başınıza bela olmak dileğiyle hayırlı günler...

Ekte şemada gösterdim.

yazici67

#35
İyi o zaman çalıştıysa sorun yok ama merakımı yenemedim :)



Bu şekilde dener misin ? Bakalım çalışacak mı ? Projenin kendi sayfasında \" tüm cihazlarda çalışması için \" diye belirtilmiş.Yine bir sorun olabilir ileride diye belki çözüm olur.Ama sağlam olan devreyi bozmak istemezsen önemli değil boşver.
İyi günler...

djtur

Alıntı yapılan: yazici67 - 27 Ocak 2012, 13:08:44İyi o zaman çalıştıysa sorun yok ama merakımı yenemedim :)


Bu şekilde dener misin ? Bakalım çalışacak mı ? Projenin kendi sayfasında \" tüm cihazlarda çalışması için \" diye belirtilmiş.Yine bir sorun olabilir ileride diye belki çözüm olur.Ama sağlam olan devreyi bozmak istemezsen önemli değil boşver.
İyi günler...

Zaten devreyi yeni haline göre yapmıştım.Yani denememi istediğin şekilde yapılı.Diğer resmi göstermek amacıyla aceleden kullandım.

yazici67

Peki tamam o zaman soru\'n yoksa sorun yoktur :D İyi çalışmalar...

djtur

Teşekkürler.Acaba güvenli bildiğiniz gaz alarm devresi var mı ?Çok araştırdım ama eksikleri çok.Şöyle kalibre edilmiş çalışan bir devre biliyor musunuz?



yazici67


askerolbey

tubitakın sitesinde gördüğüm bu devreyi yaptım fakat; arama yaptığımda hat açıyor sifre girmem için bekliyor 1234* yazıyorum fakat onay ledi yanmıyor. kafayı yemek üzereyim. lütfen bir yol gösterin ve altta yazan c kodunda sifreyi 1820* yaparak derleyip hex dosyasını bana yollarmısınız. ali_urundu@hotmail.com

şimdiden tesekkür ederim.

-----------------------


// Telefonla uzaktan cihaz kontrolu projesine ait PIC16F84A programi
// CM8870\'in Q1-Q4 cikislari PIC16F84A\'nin RB0-RB3 pinlerine baglidir.
// StD ucu RB4\'e baglidir. Hat acma rolesi RA1\'e baglidir.
// Sifre onay LED\'i RA2\'ye baglidir.
// Zil calma sayisi icin pals devresi RA1\'e baglidir.
// Kontrol edilecek cihazlar sirasiyla RB5,RB6,RB7\'ye baglidir.

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

#define StD RB4
#define HAT_ROLE RA1
#define LED RA2
#define PALS RA0

// 4MHz osilator
__CONFIG(XT&WDTDIS&PWRTEN);

unsigned char kontrol=0;
unsigned int CX;

//----------------------------------------------------------
// Timer alt programi
// 15 saniye suresince tusa basilmadiysa hatti kapatmak icin
//----------------------------------------------------------
void interrupt kesme(void){

CX++;
if(CX>15000)kontrol=1;
   
T0IF=0; // bayragi temizle
TMR0=131;
}
//----------------------------------------------------------


//----------------------------------------------------------
// ANA PROGRAM
//----------------------------------------------------------
main(void){

unsigned char i,komut,sifre[5],sayac;

//----------------------------------------------------------
// Port konfigurasyonu
//----------------------------------------------------------
TRISB=0x1F; // PORTB\'nin RB5,6,7 pinleri cikis,digerleri giris 
TRISA=0x01; // RA0 giris digerleri cikis
//----------------------------------------------------------

PORTB=0; // cihazlar enerjisiz
PORTA=0; // hat kapali, LED sonuk

//-------------------------------------------------------------
//Timer islemleri (kesme suresi=1ms)
//-------------------------------------------------------------
T0CS=0; // Dahili clock
PSA=0; // Prescaler TMR0 icin ayarli
PS0=0; PS1=1; PS2=0; // Oran 1:8
ei(); // butun kesmeler etkin
T0IE=0; //Baslangicta timer pasif
T0IF=0; // bayrak temizle
//-------------------------------------------------------------

// resetten sonra 1 saniye bekle
for(i=0;i<4;i++)DelayMs(250);

basla:

sayac=0; CX=0;

for(;;){ // zil sayisi belirleme dongusu

while(PALS==1);

sayac++;

   if(sayac>50){ // Zil sayisi 2
      HAT_ROLE=1; // Hatti ac

      sifreoku:
      
      for(i=0;i<5;i++){ // sifreyi al

      //--------------------------------------
      kontrol=0;
      TMR0=131; // 
      T0IE=1; // TIMER ON

      //--------------------------------------

         while(StD==0){   // tusa basilmadi ise bekle
            if(kontrol==1){ // sure>15s ise hatti kapat
            HAT_ROLE=0; goto basla; // basa don
            }
            else {};
         }

      T0IE=0; CX=0; // Tusa basildi ise Timer\'i durdur, CX\'i sifirla
               // Boylece yeni bir 15s\'lik ek sure kazanilmis olur
      sifre=PORTB&0x0F; // sifreyi oku

      while(StD==1); // tus basili ise bekle
      }
      //--------------------------------------
      // sifrenin son hanesi * olmalidir
      
      //--------Sifre konrol------------------
      if(sifre[0]==1 && sifre[1]==2 && sifre[2]==3 && sifre[3]==4 && sifre[4]==11){
      // 11 degeri tus takimindaki * tusuna karsilik gelir.

      LED=1; // sifre dogru ise LED\'i yak
         
         for(;;){
            while(StD==0); // cihazlar icin komut bekle
                     
            komut=PORTB&0x0F;
   
            if(komut==1)RB5=1; // cihaz 1 ON
            if(komut==2)RB6=1;
            if(komut==3)RB7=1;
            if(komut==4)RB5=0; // cihaz 1 OFF
            if(komut==5)RB6=0;
            if(komut==6)RB7=0;
   
            if(komut==12){ // # tusuna basildi ise hatti kapat
               HAT_ROLE=0; LED=0; goto basla;
            // Cihazlarin ON/OFF durumlari degismeden kalir.
            }
         }            
            //--------------------------------------
      }
      
      else{
      goto sifreoku; //sifre yanlis ise tekrar sifre okumaya git
      }
   }

   else{  // sayac<50 ise
   while(PALS==0);
   }

} // for dongusu

}

askerolbey

ben nerde hata yaptımmm neden sıfreyı gırınce yesıl led yanmıyor neden

askerolbey

lutfen yardım

yazici67

Program aynı.Devre aynı.PIC\'e programı atarken hangi programı kullandın? Programlarken sorun oldu mu? Devrede soğuk lehim kırık bacak vs. var mı? Bunları bir kontrol et. En son ihtimal kullandığın telefon uyumsuz olabilir diyeceğim ama bunlar standarttır DTFM kodları standarttır.Aklıma başka birşey gelmiyor şuan...

askerolbey

ıc prog 1.05 herhangı bır hata vermedi. dırek programladı. 16f84a - 04p olan pıc almıstım deneme amaclı krıstalıde ıptel ettım bu sefer ana role harıc 3 roleyıde bırden acıp kapattı. yanı yıne calısmadı sımdı krıstalı gerı taktım. arıyorum telefonu 2 kez calıyor  ana roleyı acıyor ondan sonra beklıyor sıfreyı gırıyorum kabul etmıyor 15 sn sonra hattı kapatıyor. pıc sorunlu olsa 2 calmada acıp 15 sn sonra kapatmaz sanırım. nerede yanlıs var analamdım . lehımlere baktım tekrardan tazeledım hepsını. bır yardım lutfen bır yardım. hevesım kursagımda kaldı yaa

yazici67

Bilmiyorum önceki arkadaşın devresi takır takır çalışıyordu gçrünüşe göre onun uyguladığı mesajları bir daha gözden geçir benim en son attığım yazılım olması lazım orada onu kullan.
Birde http://ic-prog.com/icprog106C.zip ICProg 1.06 var bununlada bir dene...

askerolbey

allah razı olsun çalıstı çok tesekkür ederim ic prog 1.06 ile yeniden pic yazdım calıstı. çok tesekkürler


Hızlı Yanıt

Not: Bu konu bir moderatör tarafından onaylanmadan görüntülenmeyecektir.

Adı:
E-Posta:
Doğrulama:
Lütfen bu kutuyu boş bırakın:
IRFP250 Nedir:
kısayollar: göndermek için alt+s veya önizleme yapmak için alt+p'ye basın