Hazırlayan: Akif CANBOLAT mikro denetleyiciler ile seri iletişim hakkında detaylı bilgiler Emeği geçen Kişilere Teşekkürler
Seri veri haberleşmesi, işletmelerde, otomasyon sistemlerinde, çok sayıda motor, makine bulunan fabrikalarda karmaşıklığın azaltılması, maliyetin düşürülmesi, kontrol kolaylığının sağlanması, sistemin istenildiği şekilde kolayca programlanabilmesi, devreye sonradan yapılan ilave aygıtlar için ek data hattı çekilmesine gerek kalmaması şeklinde büyük öneme sahip bir çok nedeni vardır.
Seri veri haberleşmesi kullanılan sistemler giderek yaygın olarak kullanılmakta ve daha da önem kazanmaktadır. Sistemde veri haberleşmesi verinin eşzamanlı gönderilmesi ve alınmasıyla gerçekleşmektedir. Bu zamanlama kullanılan PIC16F84 mikrodenetleyicisiyle gerçekleştirilir.
Mikrodenetleyici Nedir ?
Bir bilgisayarın sahip olduğu Ram ve I/O ünitesi bileşenlerinin tek bir chip içerisinde üretilmiş biçimine mikrodenetleyici (mikrokontroller) denir. Bilgisayar teknolojisinin gerekli olduğu uygulamalarda kullanılmak üzere üretilen mikrodenetleyiciler, mikroişlemcilere göre çok daha ucuzdur. Günümüzde televizyon, radyo, otomobil, buzdolabı gibi birçok alanda mikrodenetleyiciler kullanılmaktadır. Mikrodenetleyici üreten firmalar ürettikleri chiplere farklı isimler vermektedir.
Üreticilerinin ürettikleri mikrodenetleyiciler birbirinin neredeyse aynısı olmasına rağmen farklı isimlerle adlandırılmaktadırlar. Mikrochip firması ürettiklerine pic adını verirken, parça numarası olarakta 16C84, 16F84, 12C508 gibi numaralar vermektedir. Aslında PIC16C84, PIC16F84 ve PIC16F84A aynı EEPROM belleğe ve özelliklere sahip olmalarına rağmen farklı adlarla anılmaktadırlar. PIC, adını ingilizcedeki Peripheral Interface Controller (Çevresel üniteleri destekleyen arabirim) cümlesinden almaktadır.
Pic lamba, motor, sensör gibi üniteleri çok hızlı bir şekilde kontrol edebilmektedir. RISC (Reduced Instruction Set Computer) mimarisi adı verilen bir yöntem kullanılarak üretildiklerinden kullanılacak komutlar basit ve sayı olarakta azdır.
PIC’lerin piyasada bulunan türleri çok farklı ambalajlara sahiptir. Örneğin PIC16F84 , 18 pinli standart DIP şeklinde ambalajlanmış ve PIC 0.3 inç genişliğindedir. Her iki yanında 0.1 inç aralıklarla yerleştirilmiş 9’ar pini bulunmaktadır. CMOS teknolojisi ile üretilmiş olan PIC16F84 çok az enerji harcar. RA0-RA3 pinleri ve RB0-RB7 pinleri giriş/çıkış pinleridir.
Seri İletişim Teknikleri
Seri haberleşmenin çok geniş bir kullanım alanı vardır. Modem, printer, floppy disc gibi cihazlar ile mikroişlemciler arasındaki haberleşme seri formda gerçekleştirilir. Bunlara ilave olarak hat sayısının azaltılmasının hedeflendiği durumlarda da seri formda haberleşme kullanılır. Seri iletişimde veriler tek hat üzerinden bazen tek yönlü bazen de çift yönlü olarak iletilirler. Seri iletişimde hat sayısı düşük olduğundan veri iletim hızı da düşüktür.
Seri formda veri haberleşmesinde birçok standart geliştirilmişse de, bunların içinden RS232C standardı hemen hemen herkes tarafından kabul görmüştür. Seri haberleşme senkron ve asenkron veri haberleşmesi olmak üzere iki şekilde gerçekleştirilir.
Senkron İletişim
Senkron bilgi transferinde bilgi ile clock pals de transfer edilir.Bu durum start ve stop bitlerinin gereğini ortadan kaldırır. Aynı zamanda senkron iletişim karakter blokları bazında olduğu için asenkrona göre daha hızlıdır. Ancak daha karmaşık devreler içerir ve daha pahalıdır. Senkron iletişim alıcı ve vericinin eş zamanlı çalışması anlamına gelir. Clock pals ihtiyacı da bu durumdan ileri gelir.
İletime başlama şu şekilde olur. Önce gönderici taraf belirli bir karakter gönderir.Bu her iki tarafça bilinen iletişime başlama karakteridir.Alıcı taraf bu karakteri okursa iletişim kurulur. Verici bilgileri gönderir. Transfer işlemi veri bloğu tamamlanana yada alıcı verici arasındaki senkronizasyon kayboluncaya kadar devam eder.
- 1- Hata saptama ve koruması yapılır
- 2- Hız genellikle modemler tarafından saptanır.
- 3- Senkron terminaller asenkron terminallere göre daha hızlı ve pahalıdır.
- 4- Veriler bloklar halinde gönderilir.
- 5- Blok formatları kullanılan iletişim protokollerine göre değişir.
Tipik bir senkron verici bloğunu oluşturan kısımlar aşağıdaki gibidir.
Control field (Kontrol sahası) : Transfere başlama ve kontrol bilgileri içerir.Bu bilgiler arasında hata düzeltme bilgileri de vardır.
Header (Başlık) : Gönderilmek istenen terminalin adres bilgilerini içeren başlık.
Squence number (Sıra num.) : Verilerin kaybolup kaybolmadığının anlaşılması için gelen ve giden bilgilerin hayıt numaraları
Data (veri) : Bilgi yada yönetici data
Error check (Hata saptama) : Transfer edilen veri bloğundan üretilen hata kontrol bilgisi gönderilir. Alıcı taraf aynı şekilde eline geçen veri bloğundan hata kontrol bilgisini üretir ve aldığı hata kotrol bilgisiyle kendi türettiğini karşılaştırır. Eğer farklılık varsa hata üretir.
Asenkron İletişim
Asenkron iletişimin belirgin özellikleri şunlardır:
-Transferler karakter bazında yapılır.
-Her bir veri haberleşme cihazının parametreleri eş değerde olmalıdır. Şekil 1.1 de asenkron iletişimin basit şekli ile asenkron data bloğu görülmektedir. Bir asenkron karakter start biti, parity biti, veri bitleri ve stop bitlerinden oluşur.
Şekil-1.1 Asenkron veri bloğu
Start bit: Bir karakterin gönderilmeye başlandığını bildirmek için kullanılır. Her zaman transferin ilk biti olarak gönderilir.
Data bits: Veri bitlerini oluşturan gruplar bütün karakterlerden ve klavyedeki diğer tuşlardan oluşur.
Parity bit: Transfer edilen karakterlerin karşı tarafa doğru gönderilip gönderilmediğini kontrol etmek için kullanılan bittir. Eğer alıcı, alınan parity biti ile hesaplanan parity bitinin eşit olmadığını tespit ederse, hata verir ve o andaki karakteri kabul etmez.
Stop bit: Karakterin bittiğini gösterir. Karakterler arasında boş ya da ölü zamanlar sağlar. Stop biti gönderildikten sonra sonra istenildiği zaman yeni bilgi gönderilebilir.
Baud: Bit/sn olarak ifade edilen bit iletişim hızı birimidir. Anolog sinyaldeki değişim hızıdır. Asenkron seri veri hatları veriyi ASCII kodlanmış karakter biçiminde kullanır. Asenkron iletişimde faydalı 7 bilgi bitini göndermek için toplam 10 veri bitine ihtiyaç duyulur. Bu da asenkron iletişimin belirli ölçüde verimsiz olmasına neden olmaktadır.
PIC16F84 Mikrodenetleyicilerinin Haberleşmesi
Assembler da bir uygulama vermeden önce seri haberleşmenin kolay anlaşılması için TX (Transmit/Gönderme) ve RX (Recieve/Alma) algoritmaları aşağıdaki şekildedir.
TX Bölümü (Transmit) : Şekil 1.2 de TX algoritmasını görülmektedir. Buradaki 1 bit bekleme süresi uygun formül ile bulunur. Örnek olarak 2400 baud için bu süre 416 uS dir. Bu algortimanın Assembler kodları aşağıda verilmiştir.
‘****** SERI HABERLEŞME ** ‘****** TX BÖLÜMÜ******** ‘******TX Pin=Portb.0****** Start: movlw 31h movwf veri bcf portb,0 ; ‘start bit send call delay_full movlw .8 movwf sayac TX_Loop: rrf veri,f btfss status,c bcf portb,0 btfsc status,c bsf portb,0 call delay_full decfsz sayac,f goto TX_Loop bsf portb,0 ;‘stop bit send call delay_full end
RX Bölümü (Receive) : Veri alma bölümünün programı aşağıda ve blok diyagramı Şekil 1.3 te görülmektedir.
’****** SERI HABERLEŞME ********* ‘****** RX BÖLÜMÜ************** ‘******RX Pin=Portb.1************ Start clrf RX_veri btfsc portb,1 goto start call delay_half movlw .9 movwf sayac RX_Loop: bsf status,c btfss portb,1 bcf status,c rrf RX_veri,f call delay_full decfsz sayac,f goto RX_Loop call delay_half STOP_Loop: btfss portb,1 goto STOP_Loop end
Devrenin incelenmesi : Sistemde bir adet kontrol paneli ve üç adet de aygıt bulunmaktadır. Uygulamada aygıtların üzerindeki röle elemanının kontrolü yapılmakta ve 1.aygıta bir fan bağlanmış durumdadır. Şekil 2.1 te görülmektedir.
Kontrol paneli : Panelde 6 adet buton bulunmakta ve bunlar 1., 2. ve 3. makineyi aktif hale geçiren ve pasif duruma geçiren butonlar olmak üzere çalışmaktadırlar. Butonlar mikrodenetleyicinin B portuna bağlı durumdadırlar. Ayrıca kontrol panelinden aygıtların durumunun gözlenebilmesi amaçlı kırmızı ve yeşil led göstergesi bulunmaktadır. Veri girişi ve +5V PIC besleme gerilimi devreye giriş yapmaktadır. Şekil 2.2’de devre şeması ve Şekil-2.3 ‘te ise baskı devre şeması görülmektedir.
Şekil-2.2 Kontrol paneli
Şekil-2.3 Kontrol panelinin baskı devre kartı
Eleman değerleri
R50=R51=R52=R53=R54=R55=3,3K
R56=R58=R60=2,2K
R67=10K
R65=R66=560
R63=100
D53=D55=D57=D59=Yeşil led
X1=4MHZ KRISTAL
C1=C2=28PF
D52=DIYOT
B1,B2,B3,B4,B5,B6=MERCIMEK BUTON
U1=PIC16F84
Kontrol edilen aygıt : Aygıt üzerindeki mikrodenetleyicinin A portundan veri girişi ve yine aynı porttan veri çıkışı gerçekleşmektedir. Devrede, veri girişi, +5V PIC besleme gerilimi, +12V röle bobin besleme gerilimi bağlantı noktaları bulunmaktadır. Şekil-2.4 da devre şeması ve Şekil-2.5 de baskı devre kartı görülmektedir..
Şekil-2.4 Kontrol edilen aygıtın görünüşü
Şekil-2.5 Kontrol edilen aygıtın baskı devre kartı
R1=10K
R4=470
R2=560
R3=100
R6=1K
R7=2.2K
Q1=BC337 NPN
D2=DIYOT
X1=4MHZ KRISTAL
C1=C2=28PF
RELAY=5 PINLI 2 KONTAKLI RÖLE
U1=PIC16F84
D1=SARI, D3=KIRMIZI, D4=YEŞİL LED
Devrenin simülasyonu : Devrenin, proteus programı ile gerçekleştirilmiş simülasyonu Şekil-2.6 da görülmektedir. Kontrol paneli üzerinde butonları ve aygıtların konumlarını gösteren ledler görülmektedir. Aygıtlarda da rölenin çekmiş veya bırakmış konumda olduğunu gösteren ledler bulunmaktadır. Yeşil led rölenin çektiğini, kırmızı ise bıraktığını göstermektedir..
Şekil-2.6 Devrenin proteus programı ile gerçekleştirilen simülasyonu
Devrenin çalışması : Devre alıcı ve verici sistem olmak üzere iki şekilde çalışmaktadır. Başlangıçta verici kısım kontrol paneli, alıcı kısımda aygıtlar olurken, veri iletişimi esnasında kontrol paneli alıcı, aygıt ise verici konuma geçerek iletişimi tamamlamaktadırlar.
Kontrol paneli üzerindeki butonlar B portuna bağlı durumda bulunmaktadır. Butonlardan herhangi birine basıldığı anda PIC elemanının ilgili pin girişini sıfıra çekerek, daha önceden programlanmış veriyi göndermeye başlar. İlk olarak bir bitlik start bitini gönderir. Start bitini alan aygıtlar, okuma işlemine başlarlar.
Bu işlemler eşzamanlı olarak gerçekleşir. Kontrol panelinden veri gönderme işlemi bittikten sonra, aygıtlar okuduğu veriyi kendi içlerindeki programlanmış görevlerle karşılaştırarak uyup uymadığına bakarlar. Eğer veri daha önceden programlanmış görevlerle uyuşuyorsa, yapması gereken işlemleri gerçekleştirir, uyuşmuyor ise bekleme konumuna geçerek, hiçbir işlem gerçekleştirmez.
Daha sonra kontrol paneli okumaya, aygıt ise yaptığı işlemi kontrol paneline bildirmek için veri göndermeye hazır konuma geçerler. Bu sefer başlangıçtaki veri gönderme işleminin aynısı tekrarlanır. Aygıt, start biti gönderir ve ardından da veriyi gönderir. Bu esnada kontrol paneli okuma işlemini gerçekleştirir. Okuduğu kodu karşılaştırarak yapması gereken işlemi gerçekleştirir. Devrede aygıtların aktif veya pasif olduğunu yeşil veya kırmızı ledleri yakarak göstermektedir.
Devrenin bu şekilde çalışması esnasında bizim için en önemli etken zamanlama işleminin istenilen hıza ayarlanarak, devrenin çalışma hızının en yüksek değerde tutulmasıdır. Uygulamada her bir peryot için 50 mikrosaniyelik zaman dilimi yeterli olmaktadır. Ancak uygulamanın gerçeğe uygunluğu açısından daha uzun kablo ve kapasitif etkiler dikkate alınarak her bir peryot yaklaşık 100 mikrosaniyelik zamanda gerçekleştirilmiştir. Kontrol panelinden veri gönderme ve geriye veri alma işlemi yaklaşık olarak 25 peryot sürmektedir. Buda 2.5 milisaniyelik bir zaman dilimine tekabül eder.
Sistemde kullanılan aygıtların kodları Tablo-2.1’deki şekildedir. 0,1,2,3 bitleri aygıtın yapması gereken işlemleri göstermektedir. 4,5,6,7 bitleri ise aygıtın kodunu göstermektedir.
Tablo-2.1 İletişim işleminde kullanılan aygıtlara ait kodlar
Kontrol paneli ve aygıtlarda kullanılan PIC16F84 mikrodenetleyicilerin programlanması
;********************************* ;*********Kontrol paneli************ ;**********02/06/2004************** LIST P=16F84 ;PIC16F84'ün tanıtılması include P16F84.INC __CONFIG_XT_OSC&_CP_OFF&_WDT_OFF&_PWRTE_ON ;*******Tanımlamalar*********** SAY EQU H'1C' SAY1 EQU H'1D' SAY2 EQU H'1E' RP0 EQU H'05' SAYAC EQU H'1f' RVERI EQU H'21' TVERI EQU H'22' MAC1ON EQU H'24' MAC2ON EQU H'25' MAC3ON EQU H'26' MAC1OF EQU H'27' MAC2OF EQU H'28' MAC3OF EQU H'29' ;*******Başlangıç************* ORG 0 BSF STATUS,5 ;BANK1'E GEÇ MOVLW B'11110000' MOVWF H'85' ;PORTA,0,1,2,3'NİN UCUNU ÇIKIŞ YAP MOVLW B'11111111' MOVWF H'86' ;PORTB GİRİŞ YAP BCF STATUS,5 ;BANK0'A GEÇ CLRF PORTB ;PORTB'Yİ TEMİZLE CLRF PORTA ;PORTA'YI TEMİZLE BSF PORTA,0 ;PORTA,0 IN CIKISINI 1 YAP ;---------------------------------------------------- MOVLW B'00010001' ;1.MAKİNE AKTİF KODUNU TANIMLA MOVWF MAC1ON ;MAC1ON(AKTIF) MOVLW B'00010000' ;1.MAKİNE PASİF KODUNU TANIMLA MOVWF MAC1OF ;MAC1OFF(PASIF) MOVLW B'00100001' ;2.MAKİNE AKTİF KODUNU TANIMLA MOVWF MAC2ON ;MAC2ON(AKTIF) MOVLW B'00100000' ;2.MAKİNE PASİF KODUNU TANIMLA MOVWF MAC2OF ;MAC2OFF(PASIF) MOVLW B'00110001' ;3.MAKİNE AKTİF KODUNU TANIMLA MOVWF MAC3ON ;MAC3ON(AKTIF) MOVLW B'00110000' ;3.MAKİNE PASİF KODUNU TANIMLA MOVWF MAC3OF ;MAC3OFF(PASIF) ;---------------HERHANGİ BİR BUTONA BASILDIMI?-------- BASLAT BTFSS PORTB,0 ;PORTB,0 YE BASILDIMI GOTO MAC11 ;BASILDIYSA 1.MAKINEYI HAREKETE GECIR BTFSS PORTB,1 ;PORTB,1 YE BASILDIMI GOTO MAC10 ;BASILDIYSA 1.MAKINEYI DURDUR BTFSS PORTB,2 ;PORTB,2 YE BASILDIMI GOTO MAC21 ;BASILDIYSA 2.MAKINEYI HAREKETE GECIR BTFSS PORTB,3 ;PORTB,3 YE BASILDIMI GOTO MAC20 ;BASILDIYSA 2.MAKINEYI DURDUR BTFSS PORTB,4 ;PORTB,4 YE BASILDIMI GOTO MAC31 ;BASILDIYSA 3.MAKINEYI HAREKETE GECIR BTFSS PORTB,5 ;PORTB,5YE BASILDIMI GOTO MAC30 ;BASILDIYSA 3.MAKINEYI DURDUR GOTO BASLAT ;---------------------------------------------------- MAC11 MOVLW B'00010001' MOVWF TVERI ;VERIYE 1. MAKINEYI HAREKETE GECIRI YUKLE GOTO START ;---------------------------------------------------- MAC10 MOVLW B'00010000' MOVWF TVERI ;VERIYE 1. MAKINEYI YUKLE GOTO START ;---------------------------------------------------- MAC21 MOVLW B'00100001' MOVWF TVERI ;VERIYE 2. MAKINEYI HAREKETE GECIRI YUKLE GOTO START ;---------------------------------------------------- MAC20 MOVLW B'00100000' MOVWF TVERI ;VERIYE 2. MAKINEYI YUKLE GOTO START ;---------------------------------------------------- MAC31 MOVLW B'00110001' MOVWF TVERI ;VERIYE 3. MAKINEYI HAREKETE GECIRI YUKLE GOTO START ;---------------------------------------------------- MAC30 MOVLW B'00110000' MOVWF TVERI ;VERIYE 3. MAKINEYI YUKLE GOTO START ;------------VERİ GÖNDERME İŞLEMİNE BAŞLIYOR--------- START CALL TX ;ALTPROGRAM ;------------VERİ GÖNDERME İŞLEMİ BİTTİ-------------- CALL BEKLE1S CALL BEKLE1S BCF PORTA,0 ;PORTA,0 I SIFIRLA CALL BEKLE1S CALL BEKLE1S ;------------VERİ OKUMA İŞLEMİNE BAŞLIYOR------------ CALL RX ;------------VERİ OKUMA İŞLEMİ BİTTİ---------------- ;-----OKUNAN KODUN KARŞILIĞI ARANIYOR---- CALL CONTROL ;---------------------------------------------------- CALL BEKLE1S TEKRAR BTFSC PORTA,4 GOTO TEKRAR BSF PORTA,0 ;PORTA,0 I TEKRAR AKTIF HALE GETIR CALL BEKLE1S CALL BEKLE1S ;---------------------------------------------------- GOTO BASLAT ;---------ALTPROGRAMLAR----------------------------- ;---------------------------------------------------- TX BCF PORTA,0 ;START BIT SEND CALL BEKLE1S MOVLW D'8' MOVWF SAYAC TX_LOOP RRF TVERI,F BTFSS STATUS,C BCF PORTA,0 BTFSC STATUS,C BSF PORTA,0 CALL BEKLE1S DECFSZ SAYAC,F GOTO TX_LOOP BSF PORTA,0 ;STOP BIT SEND RETURN ;---------------------------------------------------- RX CLRF RVERI ;RVERI YI SIFIRLA RXL BTFSC PORTA,4 ;PORTA,4 YI KONTROL ET,START BIT GELDIMI? GOTO RXL CALL BEKLE05S ;YARIM ZAMAN BEKLE MOVLW D'9' MOVWF SAYAC ;SAYACA 9 DEGERINI VER RX_LOOP BSF STATUS,C ;CARRY BITINI 1 YAP BTFSS PORTA,4 ;PORTA,1 DEN 1 MI GELDI? BCF STATUS,C ;GELMEDIYSE C'YI SIFIRLA RRF RVERI,F ;VERIYI SAGA KAYDIR CALL BEKLE1S ;BIRIM ZAMAN BEKLE DECFSZ SAYAC,F ;SAYICIYI AZALT GOTO RX_LOOP RETURN ;---------------------------------------------------- CONTROL MOVF MAC1ON,W ;1.MAKINA AKTİF KODUNU W YA YUKLE XORWF RVERI,W ;VERI ILE W YI EXOR LA BTFSC STATUS,2 ;SONUC BIRMI? GOTO M1ON ;--------------- MOVF MAC1OF,W ;1.MAKINA PASİF KODUNU W YA YUKLE XORWF RVERI,W ;VERI ILE W yI EXOR LA BTFSC STATUS,2 ;SONUC BIRMI? GOTO M1OF ;--------------- MOVF MAC2ON,W ;2.MAKINA AKTİF KODUNU W YA YUKLE XORWF RVERI,W ;VERI ILE W YI EXOR LA BTFSC STATUS,2 ;SONUC BIRMI? GOTO M2ON ;--------------- MOVF MAC2OF,W ;2.MAKINA PASİF KODUNU W YA YUKLE XORWF RVERI,W ;VERI ILE W yI EXOR LA BTFSC STATUS,2 ;SONUC BIRMI? GOTO M2OF ;--------------- MOVF MAC3ON,W ;3.MAKINA AKTİF KODUNU W YA YUKLE XORWF RVERI,W ;VERI ILE W YI EXOR LA BTFSC STATUS,2 ;SONUC BIRMI? GOTO M3ON ;--------------- MOVF MAC3OF,W ;2.MAKINA PASİF KODUNU W YA YUKLE XORWF RVERI,W ;VERI ILE W yI EXOR LA BTFSC STATUS,2 ;SONUC BIRMI? GOTO M3OF ;--------------- GOTO PINRET ;--------------- M1ON BSF PORTA,3 ;1.MAKİNE AKTİF LAMBASINI YAK GOTO PINRET M1OF BCF PORTA,3 ;1.MAKİNE PASİF LAMBASINI YAK GOTO PINRET M2ON BSF PORTA,2 ;2.MAKİNE AKTİF LAMBASINI YAK GOTO PINRET M2OF BCF PORTA,2 ;2.MAKİNE PASİF LAMBASINI YAK GOTO PINRET M3ON BSF PORTA,1 ;3.MAKİNE AKTİF LAMBASINI YAK GOTO PINRET M3OF BCF PORTA,1 ;3.MAKİNE PASİF LAMBASINI YAK GOTO PINRET PINRET RETURN ;---------------------------------------------------- BEKLE1S ; TAM PERYOT GECİKME MOVLW D'1' MOVWF SAY D1 MOVLW D'1' MOVWF SAY1 D2 MOVLW D'100' MOVWF SAY2 D3 NOP DECFSZ SAY2,F GOTO D3 DECFSZ SAY1,F GOTO D2 DECFSZ SAY,F GOTO D1 RETURN ;---------------------------------------------------- BEKLE05S ;YARIM PERYOT GECİKME MOVLW D'1' MOVWF SAY D4 MOVLW D'1' MOVWF SAY1 D5 MOVLW D'50' MOVWF SAY2 D6 NOP DECFSZ SAY2,F GOTO D6 DECFSZ SAY1,F GOTO D5 DECFSZ SAY,F GOTO D4 RETURN ;---------------------------------------------------- END
Programlama esnasında kontrol edilecek aygıtı tanımlayan kodların Tablo-1’den alınarak uygun olanları yazılmalıdır. Aşağıda 1.aygıtın kontrolü amaçlı program yazılmış bulunmaktadır
;************************************ ;****KONTROL EDİLEN AYGIT******** ;***********02/06/2004***************** LIST P=16F84 ;PIC16F84'ÜN TANITILMASI INCLUDE P16F84.INC __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_PWRTE_ON ;**********TANIMLAMALAR*********** SAY EQU H'1C' SAY1 EQU H'1D' SAY2 EQU H'1E' RP0 EQU H'05' RVERI EQU H'21' TVERI EQU H'22' SAYAC EQU H'23' MAC1ON EQU H'24' MAC1OF EQU H'25' MAC1LON EQU H'26' MAC1LOF EQU H'27' MACL EQU H'28' ;*********BAŞLANGIÇ***************** ORG 0 BSF STATUS,5 ;BANK1'E GEÇ CLRF TRISB ;PORTB'NİN UÇLARINI ÇIKIŞ YAP MOVLW B'11111101' MOVWF H'85' ;PORTA,1 U CIKIS YAP BCF STATUS,5 ;BANK0'A GEÇ CLRF PORTB ;PORTB YI TEMIZLE CLRF PORTA ;---------------------------------------------------- BASLAR MOVLW B'00010001' ;1.MAKINAYI HAREKETE GECIR KODUNU TANIMLA MOVWF MAC1ON MOVLW B'00010000' ;1.MAKINAYI DURDUR KODUNU TANIMLA MOVWF MAC1OF BASLA ;--------VERİ OKUMA İŞLEMİ BAŞLIYOR------------------- RXR CALL RX ;--------OKUNAN VERİ KARŞILAŞTIRILIYOR----------------- MOVF MAC1ON,W ;1.MAKINAYI HAREKETE GECIR KODUNU W YA YUKLE XORWF RVERI,W ;VERI ILE W YI EXOR LA BTFSC STATUS,2 ;SONUC SIFIRMI? GOTO MAC11 ;--------------- MOVF MAC1OF,W ;1.MAKINAYI DURDUR KODUNU W YA YUKLE XORWF RVERI,W ;VERI ILE W YI EXOR LA BTFSC STATUS,2 ;SONUC SIFIRMI? GOTO MAC10 ;----DİĞER AYGITLARIN İŞLEM YAPTIĞI ZAMANDA BEKLEME KONUMUNA GEÇİYOR-------------------- CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE1S CALL BEKLE05S GOTO RXR ;---------------------------------------------------- MAC11 BSF PORTB,0 ;PORTB,0 I HAREKETE GECIR MOVLW B'00010001' ;1.MAKINA HAREKETE GECTI, LAMBA KODUNU TANIMLA MOVWF MACL GOTO TRANS MAC10 BCF PORTB,0 ;PORTB,0 I DURDUR MOVLW B'00010000' ;1.MAKINA DURDU, LAMBA KODUNU TANIMLA MOVWF MACL GOTO TRANS ;----------------------------------------------------- TRANS BTFSC PORTA,0 ;KONTROL PANELİ VERİ OKUMA İŞLEMİNE BAŞLADIMI? GOTO TRANS CALL BEKLE1S ;----------------------------------------------------- BSF PORTA,1 ;VERİ GÖNDERME İŞLEMİNE HAZIRLANIYOR. CALL BEKLE1S CALL BEKLE1S ;--------VERİ GÖNDERME İŞLEMİ BAŞLIYOR--------------- CALL TX ;--------VERİ GÖNDERME İŞLEMİ BİTİYOR---------------- CALL BEKLE1S CALL BEKLE1S CLRF MACL ;MACL KODUNU SIFIRLA BCF PORTA,1 ;VERİ OKUMA İŞLEMİNE BAŞLANIYOR DONGU BTFSS PORTA,0 GOTO DONGU ;---------------------------------------------------- GOTO BASLA ;---------------------------------------------------- ;-------------ALTPROGRAMLAR------------ RX CLRF RVERI ;RVERI YI SIFIRLA BTFSC PORTA,0 ;PORTA,0 YI KONTROL ET,START BIT GELDIMI? GOTO RX CALL BEKLE05S ;YARIM ZAMAN BEKLE MOVLW D'9' MOVWF SAYAC ;SAYACA 9 DEGERINI VER RX_LOOP BSF STATUS,C ;CARRY BITINI 1 YAP BTFSS PORTA,0 ;PORTA,0 DEN 1 MI GELDI? BCF STATUS,C ;GELMEDIYSE C'YI SIFIRLA RRF RVERI,F ;VERIYI SAGA KAYDIR CALL BEKLE1S ;BIRIM ZAMAN BEKLE DECFSZ SAYAC,F ;SAYICIYI AZALT GOTO RX_LOOP RETURN ;---------------------------------------------------- TX BCF PORTA,1 ;START BİTİ GÖNDER PORTA,4 CALL BEKLE1S MOVLW D'8' MOVWF SAYAC TX_LOOP RRF MACL,F BTFSS STATUS,C BCF PORTA,1 BTFSC STATUS,C BSF PORTA,1 CALL BEKLE1S DECFSZ SAYAC,F GOTO TX_LOOP BSF PORTA,1 ;STOP BİTİ GÖNDER RETURN ;---------------------------------------------------- BEKLE1S ;TAM PERYOT GECİKME MOVLW D'1' MOVWF SAY D1 MOVLW D'1' MOVWF SAY1 D2 MOVLW D'100' MOVWF SAY2 D3 NOP DECFSZ SAY2,F GOTO D3 DECFSZ SAY1,F GOTO D2 DECFSZ SAY,F GOTO D1 RETURN ;---------------------------------------------------- BEKLE05S ;YARIM PERYOT GECİKME MOVLW D'1' MOVWF SAY D4 MOVLW D'1' MOVWF SAY1 D5 MOVLW D'50' MOVWF SAY2 D6 NOP DECFSZ SAY2,F GOTO D6 DECFSZ SAY1,F GOTO D5 DECFSZ SAY,F GOTO D4 RETURN ;---------------------------------------------------- END
Veri transferinin zamanlaması : Kontrol panelinden veri gönderilmeye başlandığı andan itibaren, verinin zamana bağlı olarak iletimi söz konusudur. Verinin çift yönlü iletiminin zamanlaması Şekil-2.7 de görülmektedir. Herbir peryot arasındaki geçen zaman yaklaşık 100 mikrosaniyedir.
Şekil-2.7 Veri iletiminin zamanlaması
Sonuç : Mikrodenetleyici kullanılarak gerçekleştirilen seri haberleşmede, sistem sade ve karmaşadan uzak hale gelmesine karşılık, bit transfer oranı düşer. Bu uygulama basit bir kontrol sistemi uygulaması olduğundan dolayı PIC16F84 kullanılmıştır, ancak daha kompleks bir uygulama için seri port çıkışı bulunan bir mikrodenetleyici kullanılması, devrenin performansına büyük oranda katkı sağlayacaktır.
PIC16F84’te veriyi seri forma dönüştürmek için çeşitli işlem basamakları uygulanmaktadır. Bu da zaman kaybı oluşturur. Bu nedenle uygulamada yüksek oranda bit transferinin gerçekleşmesi gereken sistemlerde paralel haberleşme kullanılmalıdır.
Devre yukarıdaki şekilde uygulanarak gerçeğe yakınlık sağlanmış ve sorunsuz olarak çalışmıştır. Eğer uygulamada tek hat seri iletişim kullanılmamış olsaydı, sistem daha karmaşık hale gelir ve maliyet de büyük oranda artardı. Devre üzerindeki döngülerin zamanlamaları kısaltılarak peryot zamanı düşürülebilir ve bu haliyle gerçek bir kontrol sistemi uygulaması yapılabilir.
Kaynaklar
1. http://www.turkengineers.com
2. http://www.mikrochip.com
3. http://www.mikroelektronika.com
4. http://www.dallassemiconductor.com
5. Altınbaşak,O.,PIC programlama,Altas basım yayım dağıtım a.ş., İstanbul,2001
Yayım tarihi: 2009/01/19 Etiketler: asenkron, assembler, haberleşme, microchip pic projeleri, mikrodenetleyiciler, PIC16F84 örnekleri, rs232, senkron, seri iletişim, veri transferi
hex dosyaları nerde acaba kardeş
Keşke CCS C örneğide olsaydı.
@Murat
istediğinize benzer soru burada sorulmuş http://pic-c.ccsinfo.com/forum/viewtopic.php?p=62584
Orada anlatılanları özetlersem:
Paef isimli kişi o uzun kodu göndererek ,kodun çalışmadığını PC ile PIC i seri porttan haberleştiremediğini o meşhur kelimeyi yani “Hello word” u gönderemediğini söylüyor.Bu arada seri porttan haberleştirmeye çalıştığı PIC 16F84 Humberto da yanlış forumda olduğunu ama gönderdiği o kısa kodla o uzun kodla yapmaya çalıştığının aynısını yapacağını söylüyor.
Paef derlerken hata aldığını söylüyor Humbertoda demo derleyicinin http://www.ccsinfo.com/content.php?page=compdemo
burada olduğunu buradan indirmesini ama buda 3 tane PIC i desteklediğini söylüyor bu yüzden 10 dolara bir tane PIC16F877 satın al dene diyor.
Özetle bu
Umarım size faydası olur
Kolay gelsin
Helal olsun dedim içimden gizleme gereğide duymuyorum ellerine sağlık
Merhaba sistem analizi dersinde proje olarak bu devreyi tasarlayacağız ve pıc programlamak için . hex dosyası lazım nereden bulabilirz .Teşekkürler
basic dilinde olması lazım assemble değil
Değerli arkadaşlar. Üzerinden uzun süre geçmiş ancak Tarafımca yapılmış olan bu proje detaylarına http://akifcanbolat.tripod.com adresinden de ulaşabilirsiniz. O bölümde hex kodları vs. projenin tüm detayları yer almaktadır.
ayrıca iletişime geçmek isteyenler [email protected] dan irtibat kurabilirler.
Güzel olmuş eline sağlık
hocam 16f84 de rx tx olmadığı halde yapabiliyormuyuz yani bunu
Süper bir yazı , ayrıca assembler ile olması daha da güzel. İzahatler,anlatim,program. Teşekkürler.