CCS C ile yapılmış çalıştırdığım RF uzaktan kumanda projem.

Katılım
18 Ocak 2008
Mesajlar
1,068
Puanları
156
Yaş
39
Herkese selamun aleyküm hayırlı ramazanlar ve hayırlı işler diliyorum.

Değerli ustalarım ve değerli meslektaşlarım nedendir bilmiyorum ama ben bu siteyi evim gibi hissediyorum.

Geçen gün bir çift rf433 mhz alıcı ve verici kiti aldım ( udea değil piyasa malı ) bir kaç gündür gözümün içine bakıp bakıp duruyordu ben de bu gün oturdum biraz deneme yapayım istedim uğraştım ettim kendi çapımca bir sonuca vardım ve dedim ki yıllardır forumlarında severek gezindiğim bana da çok büyük faydası olan sitemde paylaşayım.

Öncelikle söylemek isterim ki amacım ukalalık değil bir çok üniversite öğrencisi arkadaş bu konular üzerinde araştırmalar yapıyor devreler yapmaya bir şeyleri başarmaya çalışıyorlar en azından emek ediyorlar öncelikle onlar için sonra da elbette birisine lazım olabilir diye düşündüğüm için elimden geldiği ve çalıştığına kanaat getirdiğim bu devremi paylaşmak istiyorum umarım ilgilenen arkadaşlara faydası olur...

Her zamanki gibi devre şeması paylaşmıyorum çünkü oturup çizmedim :D devreyi bizzat board üzerine kurup iki tane board üzerindeki pic leri rf ile haberleştirdim sadece kod paylaşımı yapacağım ama az da olsa ilen insan kodlara bakarak hangi pin ne işe yarıyor neden kullanılmış anlayacağını zannediyorum.

VERİCİ PROGRAMI :
Kod:
#include <12f675.h>

#fuses INTRC_IO,NOMCLR,NOBROWNOUT,NOPROTECT,NOCPD

#use  delay(clock=4000000)



#define GP0 PIN_A0

#define GP1 PIN_A1

#define GP2 PIN_A2

#define GP3 PIN_A3

#define GP4 PIN_A4

#define GP5 PIN_A5



#use rs232 (baud=2400, xmit=pin_a5,parity=N, stop=1)  // RS232 protokolünün 9600 bit/sn baud hızında olacağını ve





int   veri;



//int   pr_1,pr_2,pr_3;

//int1  buton_1;

//int1  buton_2;



void  gonder(){



//veri=(getch);

putc(0x55);

putc(0x55);

putc(0x55);

putc(0x55);

putc(0x55);

putc(0x00);

putc(0x00);

putc(0x00);

putc(0x00);

putc(0x00);

putc(0xff);

putc(0xff);

putc(0xff);

putc(0xff);

putc(0xff);

putc(veri);

//putc(veri);

//putc(veri);

//putc(veri);

//putc(veri);



//printf(pr_1,pr_1,pr_1,pr_1,pr_1,pr_2,pr_2,pr_2,pr_2,pr_2,pr_3,pr_3,pr_3,pr_3,pr_3,sifre_1,sifre_2,sifre_3,sifre_4,veri);

}

void main()

{



set_tris_a( 0b000110 ); // set GP0 output, all other inputs

setup_comparator( NC_NC_NC_NC ); // disable comparators

setup_adc_ports(NO_ANALOGS);

setup_adc(ADC_OFF);

output_low(pin_a5);



   while(TRUE)

   {



   if (input(PIN_A2)==1){

  veri=10;

   gonder();

   output_high(pin_a4);

}

else{

output_low(pin_a4);}



 

 

      if (input(PIN_A1)==1){

  veri=20;

   gonder();

   output_high(pin_a0);

}

else{

output_low(pin_a0);}

 



   }

     //TODO: User Code

   }









ALICI PROGRAMI :



#include <12F675.h>

#fuses INTRC_IO,NOMCLR,NOBROWNOUT,NOPROTECT,NOCPD

#use  delay(clock=4000000)



#define GP0 PIN_A0

#define GP1 PIN_A1

#define GP2 PIN_A2

#define GP3 PIN_A3

#define GP4 PIN_A4

#define GP5 PIN_A5



#use rs232 (baud=2400, rcv=PIN_A5,parity=N, stop=1) // RS232 protokolünün 9600 bit/sn baud hızında olacağını ve



int   veri;

//int   veri_3;

void main()

{



set_tris_a( 0b000100 ); // set GP0 output, all other inputs

setup_comparator( NC_NC_NC_NC ); // disable comparators

setup_adc_ports(NO_ANALOGS);

setup_adc(ADC_OFF);

output_low(pin_a0);



   while(TRUE)

   {





    veri =  getch();



    if   (veri==10)  {



    output_high(pin_a0);



    }



    if   (veri==20)   {



    output_low(pin_a0); 

    }



       //TODO: User Code

   }

}
Devre sadece haberleşmeyi çözmek amacı ile yapıldığı için tek kanallıdır ama elbette çok kanallı yapılabilir yada farklı denetleyiciler ile de yapılabilir ben sadece haberleşmeye örnek olması açısından paylaştım umarım bir kişinin işine yarar.
 
Moderatör tarafında düzenlendi:
Elinize sağlık 16f877 ve ya 16f84 ile yapılabilir mi
Birde sizden ricam wi-fi örnekleri yani esp8266 ile filan yaparak paylasabilirmisiniz
 
ibrahim hocam evet 16F877A ve 16F84A ile çok rahat bir şekilde yapılabilir tabii ki ama diğer söylediğiniz wi-fi olayı ile hiç uğraşmadım ne dersem büyük yalan olur bi bakmak lazım ama zannetmiyorum o kadar ileri proje yapabileceğimi...

Tamamen amator işi bu ;)
 
has artvinli kardeş lisede benim öğretmenim vardı adama Türkiye dar geliyor otomasyon konusunda Kayserili şimdi mühendis adamın babası tır şoförü imiş bizim ordan memleketine giderken kamyon şoförlerine misafir olur Onların kamyonunu sürer o içindeki şoför olma uhdesinide öyle giderirmiş gelelim size şimdi sizin bu direksiyon başındaki fotonuzu görünce öğretmenimi hatırladım acizane neyse ccs_c yazılım yapabiliyorsunuz galiba size bir sorum olacak inşaallah çözebiliriz
Kod:
*****************************************************************

      PIC16F877 ile Dahili EEPROM Uygulaması-1 (Hafızalı Kronometre)

PIC PROG/DEKA     : Port B jumper'ı LCD konumunda olmalı

******************************************************************/



#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.



// Denetleyici konfigürasyon ayarları

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD



#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.



#use fast_io(a) //Port yönlendirme komutları A portu için geçerli



#use fast_io(e) //Port yönlendirme komutları A portu için geçerli

#define use_portb_lcd TRUE   // LCD B portuna bağlı



#include <lcd.c> // LCD.c dosyası programa ekleniyor

#use delay (clock=20000000)

//==============================================================================

int8 _10ms=0;           // Tam sayı tipinde değişken tanımlanıyor

unsigned int8 saniye=0; // İşaretsiz tam sayı tipinde değişken tanımlanıyor



//****************** Timer0 Kesmesi *****************************

#int_timer0  // Timer0 kesmesi. Her 10 msn'de bir kesme oluşur.

void  timer0_kesme ()   // Kesme fonksiyonu ismi

{

    set_timer0(217); // TMR0 değeri belirleniyor



    _10ms++;        // _10ms değişkeni değerini 1 arttır

      

    if (_10ms==100) // _10ms değeri 100 olunca (Geçen süre 1 saniye olunca)

    {

       _10ms=0;    // _10ms değişkenini sıfırla

       saniye++;   // saniye değişkenini bir arttır

       if (saniye==255) // Eğer saniye değişkeni 999 olursa sıfırla

          saniye=0; // saniye değişkenini sıfırla

    }

}



/********* ANA PROGRAM FONKSİYONU********/

void main ( )

{

   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı

   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı

   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı

   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok

   setup_adc(ADC_OFF);             // ADC birimi devre dışı

   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı

   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı



   set_tris_a(0x0F);   // RA0, RA1, RA2, RA3 pinleri giriş

   set_tris_e(0x00);

   lcd_init();         // LCD kurulumu yapılıyor



   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); // Timer0 ayarları yapılıyor

   set_timer0(217);   // TMR0 değeri belirleniyor

 

   lcd_gotoxy(1,1); // İmleç 1.sütun, 1. satırda

   printf(lcd_putc,"Sure=%03u.%02d",saniye,_10ms); // Saniye ve milisaniye LCD'ye yazdırılıyor

   lcd_gotoxy(1,2); // İmleç 1.sütun, 2. satırda

   printf(lcd_putc,"Sonuc=%03u.%02d",read_eeprom(0),read_eeprom(1)); // EEPROM'da saklanan saniye ve milisaniye değerleri LCD'ye yazdırılıyor



   while(1)

   {

 

      if(input(pin_a3))  // SIFIRLA butonuna basıldı ise

      {

         saniye=_10ms=0;

         write_eeprom(0,saniye);  // 0 (0x00) adresine saniye değerini yaz

         write_eeprom(1,_10ms);   // 1 (0x01) adresine milisaniye değerini yaz

         lcd_gotoxy(1,1); // İmleç 1.sütun, 1. satırda

         printf(lcd_putc,"Sure=%03u.%02d",saniye,_10ms); // Sıfırlanan süre LCD'ye yazdırılıyor

         lcd_gotoxy(1,2); // İmleç 1.sütun, 2. satırda

         printf(lcd_putc,"Sonuc=%03u.%02d",saniye,_10ms);// Sıfırlanan kayıtlı süre LCD'ye yazdırılıyor

        

         while(input(pin_a3)); // Butondan el çekilene kadar bekle

      }



      if(input(pin_a0)) // BAŞLA butonuna basıldı ise

      {

         while(!input(pin_a2)) // DUR butonuna basılana kadar döngü dönsün

         {

            enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar

            enable_interrupts(GLOBAL);     // Aktif edilen kesmelere izin ver

            lcd_gotoxy(1,1); // İmleç 1.sütun, 1. satırda

            printf(lcd_putc,"Sure=%03u.%02d",saniye,_10ms); // Süre LCD'ye yazdırılıyor

            lcd_gotoxy(1,2); // İmleç 1.sütun, 2. satırda

            printf(lcd_putc,"Sonuc=%03u.%02d",read_eeprom(0),read_eeprom(1)); // EEPROM'da saklanan saniye ve milisaniye değerleri LCD'ye yazdırılıyor





            if (input(pin_a1))  // YAKALA butonuna basılmışsa

            {

             write_eeprom(0,saniye);  // 0 (0x00) adresine saniye değerini yaz

             write_eeprom(1,_10ms);   // 1 (0x01) adresine milisaniye değerini yaz

             lcd_gotoxy(7,2);         // İmleç 7.sütun, 2. satırda

             printf(lcd_putc,"%03u.%02d",read_eeprom(0),read_eeprom(1));  // LCD'de yakalanan zamanı göster

              while(input(pin_a1));     // Butondan elimizi çekene kadar bekle

             }

          

            lcd_gotoxy(6,1);                // İmleç 6.sütun, 1. satırda

            printf(lcd_putc,"%03u.%02d",saniye,_10ms); // Geçen zamanı LCD'de göster   

         }

         disable_interrupts(GLOBAL); // Tüm kesmeleri pasif yap.

     }

 

 



   }}

serdar çiçek hocanın ccs-c kitabından dahili eeprom uyg1
Burda dört tane buton var baŞla butonuna basıldığında sayıcı geriplanda sayıyor lcd gösteriyor yakala butonuna basıldıgında ise; o anki saniye ve milisaniye değerlerini kaydediyor lcd de gösteriyor yapmak istediğimiz; YAKALANAN zaman ne kadar az ise bu zaman değerini herhangi bir sabit değer ile çarpıp sonucu 3 dijitli seven segment displayde göstermek mümkünse hc595 li olursa tadından yenmez yani üç pin ile sevent seğment gösterme display 999'a kadar saysın istiyoruz iki ayrı 3'lü display grubu var biri 999 kadar
diğeri önceki yakalanan zaman değerini gösterirken tekrar yakalanan değeri karşılaştırsın hangisi büyükse onu göstersin
 

Ekli dosyalar

  • Yeni Microsoft Office Word Belgesi.docx
    34 KB · Görüntüleme: 25
Moderatör tarafında düzenlendi:
Vallahi hocam gönlüm ister ki oturup satır satır komut yazalım da çizelim de deneyelim ama öyle bir durumdayım ki bildiklerimi de unuttum ayrıca ccs c de de iyi bir bilgiye sahip de değilim...

En kötüsü de şu an kamu da tır şöförü olarak çalışıyorum iki saat boş vakit bulsam uyumak için harcıyorum :)

Çok istiyorum plc ve otomasyon işleri ile uğraşayım hatta çok işlevsel de bir pano yaptım ama onunla bile uğraşamıyorum çok özür dilerim size bu konuda yardımcı olamayacağım...
 
ilginizee teşekkür ediyorum allah kolaylıklar versin daha nice projelerde çalışmak dileği ile saygılar.
 
Merhaba has_artvin_li hocam . ben devre kısmında çok tecrübeli değilim şematik için yardımcı olabilir misiniz.
 

Forum istatistikleri

Konular
128,126
Mesajlar
915,254
Kullanıcılar
449,841
Son üye
nazoyata

Yeni konular

Geri
Üst