Merhaba arkadaşlar bugün sizlerle C# kullanılarak RS-232 ile led yakıp söndürme projesini gerçekleştiricez. Neden bu proje ? bu soruya cevap verecek olursak arkadaşlar Led yakıp söndürme olayının röle tetiklenmesinde ve buna bağlı olarak kendin yap projelerinde yer alan PLC devrelerinin temelini oluşturması ,PIC serisinin ŞİRKETLER tarafından tercih edilmesi beni bu projenin yapımına götürmüştür.Bu cevaptan sonra isterseniz projeye adım adım başlayalım.
PROJENİN AMACI
1) Mikroişlemci, mikrodenetleyeci , RS-232 iletişim protokolü,MAX 232, led, 2×16 LCD ekran kavramlarını öğrenmek.
2) PIC18f4550 mikrodenetleyicisinin CCS C de gömülü yazılım komutlarının ne amaçla kullanıldığını öğrenmek.
3) C# arayüz kontrol panelinin ve gömülü yazılımın proteus ortamında ve gerçek devrede testinin gerçekleştirebildiğimizi göstermek.
TEORİK BİLGİLER
Mikroişlemci : Bilgisayara yüklenen programların tüm işlemlerini yerine getiren birimdir ve CPU( Central Processing Unit) olarak da adlandırılır. Mikro işlemciler içerisinde RAM ,ROM, I/O ünitesi bulunmadığı için bunlar kart üzerinde mikroişlemciyle birlikte kart üzerine monte edilir.
Mikrodenetleyici : Bir tüm devre üzerinde üretilen birime denir. Mikrodenetleyici içerisinde RAM, ROM,EEPROM,RTC,ADC BİRİMİ,PWM BİRİMİ,I2C,USB,UART RS232/RS485 birimlerini içerir.
RS-232 İletişim Protokolü : Bilgisayar ile Mikrodenetleyici/mikroişlemci içeren devrelerde iletişim kurmamıza yarayan iletişim protokolüdür . Bu iletişim protokolünde tek bir hattan veri gönderilip tek hattan veri alınır paralel iletişime göre yavaş olmasına rağmen uzun mesafelerde kullanılır ve maliyet olarak da düşüktür. Bu seri iletişim ile ilgili temel kavramların tanımlarını yazacak olursak;
1) Start (başlangıç ) biti : Bu alıcıya veri gönderiminin başlandığını bildirir
2) Stop(Bitiş) biti : Bu ise alıcıya gönderilecek bilginin bittiğini belirtir stop biti 1 veya 2 olabilir.
3) Parity(Eşlik) biti : Bu ise alıcı tarafından alınan bilginin iletilip iletilmediğini kontrol etmek için kullanılır .
4) Baund Rate : Bu ise gönderilecek verinin hızını belirtir.
Max232 : Seri iletişimlerde sıklıkla kullanılan bu entegrenin Rx bacağı yüksek seviyeli RS-232 sinyalini düşük seviyeli TTL sinyaline çevir iken Tx bacağı ise düşük seviyeli TTL sinyalini yüksek seviyeli RS-232 sinyaline çevirmek için kullanılır.
Led : Işık yayan diyotlar olarak adlandırılır. Temelinde ise üzerinden geçen elektrik akımı ile katkılandığı maddenin cinsine göre kırmızı, yeşil, mavi gbi ışık yayan yarı iletken malzemelerdir. Elektronik devrelerde ledin uzun bacağı anot(+) , kısa bacağı ise katot (-) dikkat ederek devreye bağlanmalıdır.
2×16 LCD Ekran : LCD ekrana uygulanan gerilim ile yapı içerisinde oluşan elektrik alan meydana gelir . Elektrik alan etkisiyle kutuplanan sıvı kristaller ekranın en alt tabakasından gelen ışığı tek fazlı geçirir ve önüne eklenen bir kutuplanma filtresi ile ışığın görünmesi ve ekran üzerinde resim,fotoğraf veya yazı karakterlerinin görünmesi sağlanır. dayanan bir görüntü teknolojisidir.
MALZEME LİSTESİ
Proje kapsamında teorik bilgiler verildikten sonra projenin devamı için gerekli olan malzemeler aşağıdaki tabloda yer verilmiştir.
MALZEME ADI | MALZEME ADET | MALZEME ADI | MALZEME ADET |
Breadboard | 2 | Data Kabloları | N TANE |
PIC18F4550 | 1 | Kırmızı Led | 1 |
MAX232 | 1 | Yeşil Led | 1 |
D Tipi Erkek Konnektör | 1 | Mavi Led | 1 |
D Tipi Dişi Konnektör | 1 | Beyaz Led | 1 |
8 Mhz Kristal | 1 | 10 Kohm Potansiyometre | 1 |
15 pF Kondonsatör | 2 | 10 Kohm | 1 |
100 nf Kondonsatör | 1 | 330 ohm | 4 |
1 nf Kondonsatör | 1 | 100 ohm | 1 |
1 uf Kondonsatör | 4 | — | — |
USB RS232 Dönüştürücü | 1 | — | — |
2×16 Karakter LCD | 1 | — | — |
ŞEMATİK DEVRE
Bu projenin şematik bölümü Proteus ISIS programının 7.10 sürümünde çizilmiştir. Şematik kısmına bakıldığında mikrodenetleyicinin VDD kısına 100 nf ve Vusb kısmına 1 nf kondansatör kullanılmıştır. Bu nedeni ise sinyal üzerinde oluşabilecek gürültüyü bu kondansatör üzerinden toprağa aktarmak için kullanılmıştır.
KAYNAK KODLARI
Bu projenin gömülü yazIlımı CCS C derleyecisinin 5.0.1 sürümünde derlenmiştir. Komutlara bakılacak olursa her satır yanında ‘ // ‘ ifadelerinin yanında açıklamaları bulunmaktadır . LCD ekrana ait kütüphane kaynak kodlarının sonunda link olarak verilmiştir.
/* Program Adı : RS232 ile Led Uygulaması Donanım : PIC18F4550 Derleyici : CSS C 5.0.1 MCU : 8 Mhz Yazar : Adil Teoman Kurt Adres : http://electrolog.blog */ #include // PIC18ff4550 Kütüphanesi dahil ediliyor #fuses HS,CPUDIV1,NOPROTECT,NOLVP,NOBROWNOUT,NOPUT,NOWRT,NODEBUG,NOCPD // Konfigirasyon ayarları yapılıyor #use delay(clock=8000000) // Mikrodenetleyicinin clock frekansı 8 MHz'e ayarlanıyor #use rs232 (baud=9600,xmit=pin_C6,rcv=pin_C7,parity=N,stop=1) // Mikrodenetleyicinin rs-232 ayarları yapılıyor #use fast_io(b) // Port Yönlendrime Komutları B portu için Geçerli #use fast_io(d) // Port Yönlendrime Komutları D portu için Geçerli /* -- LCD ekranın pin ayarları yapılıyor -- */ #define LCD_ENABLE_PIN PIN_d6 #define LCD_RS_PIN PIN_d7 #define LCD_RW_PIN FALSE #define LCD_DATA4 PIN_d5 #define LCD_DATA5 PIN_d4 #define LCD_DATA6 PIN_d3 #define LCD_DATA7 PIN_d2 #include// LCD ekran kütüphanesi ekleniyor //B portunun ilk 6 biti led1,led2,... ile lişkilendiriliyor #bit led1=0xf81.0 #bit led2=0xf81.1 #bit led3=0xf81.2 #bit led4=0xf81.3 #bit led5=0xf81.4 #bit led6=0xf81.5 char veri; void main() { //B portu ile D portu ilişkilendiriliyor set_tris_b(0); set_tris_d(0); lcd_init();//LCD ekrnan başlatılıyor printf(lcd_putc,"\felectrolog.blog"); //2x16 LCD ekrana yazı yazdırılıyor delay_ms(500); // 500 ms bekleme fonksiyonu çalıştırılıyor printf(lcd_putc,"\nRS-232 Uygulama"); //2x16 LCD ekrana yazı yazdırılıyor delay_ms(2000); // 2000 ms bekleme fonksiyonu çalıştırılıyor printf(lcd_putc,"\fC# Uygulamasi"); //2x16 LCD ekrana yazı yazdırılıyor delay_ms(500); // 500 ms bekleme fonksiyonu çalıştırılıyor printf(lcd_putc,"\nLED YAKMA"); //2x16 LCD ekrana yazı yazdırılıyor delay_ms(2000); // 2000 ms bekleme fonksiyonu çalıştırılıyor while(true) { veri=getchar();//PC den gelen mesaj alınıp veri kutucuguna aktarılıyor if (veri=='A')// PC den A karakteri geldiği zaman 1. Led yanar { led1=1; printf(lcd_putc,"\fLED1 YANDI"); delay_ms(20); printf("1.LED YANDI\n"); } if(veri=='B')// PC den B karakteri geldiği zaman 1. Led söner { led1=0; printf(lcd_putc,"\fLED1 SONDU"); delay_ms(20); printf("1.LED SONDU\n"); } if(veri=='C')// PC den C karakteri geldiği zaman 2. Led yanar { led2=1; printf(lcd_putc,"\fLED2 YANDI"); delay_ms(20); printf("2.LED YANDI\n"); } if(veri=='D')// PC den C karakteri geldiği zaman 2. Led söner { led2=0; printf(lcd_putc,"\fLED2 SONDU"); delay_ms(20); printf("2.LED SONDU\n"); } if(veri=='E')// PC den E karakteri geldiği zaman 3. Led yanar { led3=1; printf(lcd_putc,"\fLED3 YANDI"); delay_ms(20); printf("3.LED YANDI\n"); } if(veri=='F')// PC den F karakteri geldiği zaman 3. Led söner { led3=0; printf(lcd_putc,"\fLED3 SONDU"); delay_ms(20); printf("3.LED SONDU\n"); } if(veri=='G')// PC den G karakteri geldiği zaman 4. Led yanar { led4=1; printf(lcd_putc,"\fLED4 YANDI"); delay_ms(20); printf("4.LED YANDI\n"); } if(veri=='H')// PC den H karakteri geldiği zaman 4. Led söner { led4=0; printf(lcd_putc,"\fLED4 SONDU"); delay_ms(20); printf("4.LED SONDU\n"); } } }
C# ARAYÜZ PANELİ
Bu projenin arayüz programı Microsoft Visual Stiduo programının C# bölümü ile oluşturulmuştur . Programın ‘Verilerin Gönderilmesi’ bölümü ile ledlerin durumu kontrol edilirken ‘Verilerin Alınması’ bölümü ise PIC18f4550 den PC ye gönderilen verilerin alınıp yazıldığı kısımdır.
DEVRENİN VİDEOSU
Bu projede hazırlanan C# programına ait arayüzünün hem proteus ISIS programı ile similasyonun hemde gerçek elektronik devresi ile ilgili çalışmasını anlatan videoya ya C# +PIC18f4550+ Proteus ISIS ifadesine basarak izleyebilirsiniz.
EK DOSYALAR
Bu bölüm ise C# arayüz panelinin .exe dosyasını , gömülü yazılımının .hex dosyasını ve bu yazılımı içerisinde kullanılan LCD ekranın kütüphane dosaysını içermektedir.
https://drive.google.com/file/d/0B_aQGEZxbOrHczFQTU5HZ0pzY2s/view?usp=sharing
Başari dileklerimle….
BeğenBeğen
Çok teşekkür ederim iyi dilekleriniz için
BeğenBeğen
merhabalar proje için tesekkurler . Verileri c# tarafında nasıl alıyorsunuz . Örnegin sizin projenizdeki sekılde pic den c# a veri gönderiyorum ancak c# tarafında bu veriyi okuyamıyorum. Arduino ile aynı projeyi yaptıgımda c# da sorunsuz okuyorum bu kısım ile ilgili detay verebilir misiniz ?
BeğenBeğen