Mikrodenetleyici İle Tek Hat Seri İletişim (PIC16F84)

| Temmuz 14, 2014 Tarihinde güncellendi
Mikrodenetleyici İle Tek Hat Seri İletişim (PIC16F84)

Hazırlayan: Akif CANBOLAT mikro denetleyiciler ile seri iletişim hakkında detaylı bilgiler Emeği geçen Kişilere Teşekkürler

PCBway Türkiye PCB Manufacturer PCB Assembly

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
asenkron-veri-blogu

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

Şekil-1.2 TX bloğu
tx-blogu

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

Şekil-1.3 RX bloğu
rx-blogu

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.

devre-semasi

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
kontrol-paneli

Şekil-2.3 Kontrol panelinin baskı devre kartı
kontrol-panel-pcb

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üşü
kontrol-aygit

Şekil-2.5 Kontrol edilen aygıtın baskı devre kartı
kontrol-aygit-pcb

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
proteus-simulasyon-devresi

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
iletim-islemi-tablo

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ı
veri-iletiminin-zamanlamasi

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: , , , , , , , , ,



10 Yorum “Mikrodenetleyici İle Tek Hat Seri İletişim (PIC16F84)

  1. FlatronFlatron

    @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

    CEVAPLA
  2. AddedAdded

    Helal olsun dedim içimden gizleme gereğide duymuyorum ellerine sağlık

    CEVAPLA
  3. cagdascagdas

    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

    CEVAPLA
  4. Akif CANBOLATAkif CANBOLAT

    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.

    CEVAPLA
  5. Ömer AnarÖmer Anar

    hocam 16f84 de rx tx olmadığı halde yapabiliyormuyuz yani bunu

    CEVAPLA
  6. Oğuz ErdalOğuz Erdal

    Süper bir yazı , ayrıca assembler ile olması daha da güzel. İzahatler,anlatim,program. Teşekkürler.

    CEVAPLA

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir