Hazırlayan: Mustafa PATAN Proje Açıklamasının Tamamı ve Kaynak şema pcb kod isis simülasyon .dsn .lyt .bas dosyaları Emeği geçen Kişilere Teşekkürler

Neden P1C16F628A

Burada programlanması ve örnek uygulamaları verilen PIC’in 16F628A olmasının en önemli nedeni, analog dijital çeviricisi olması, PIC16F628A mikrodenetleyicisinin program belleğinin silinip yazılabilen teknolojisi ile üretilmiş olması ve giriş çıkış port sayısının fazla olmasıdır.

Çok kez programlanabilen hafıza teknolojisi ile üretilen bir belleğe yüklenen program, entegreye uygulanan enerji kesilse bile silinmez. Yine bu tip bir belleğe istenirse yeniden yazılabilir. Çok kez programlanabilen bellekler bu özellikleri ile EEPROM bellekler ile aynı görünmektedirler. Gerçekten de çok kez programlanabilen ile EEPROM bellek aynı şeylerdir.

Kullanıcılar tarafından çok kez programlanabilen belleğe sahip olan P1C16F628A’yı programlayıp, deneylerde kullandıktan sonra, silip yeniden program yazmak, büyük kolaylıktır. Böylece işe yeni başlayanlar yaptıkları programlama hataları nedeniyle entegreyi atmak zorunda kalmayacaklardır. Gerçi EPROM program hafızası olan camlı entegrelere de yeniden yazmak mümkündür ama, bu durumda bir EPROM silici cihazına ihtiyaç vardır.

Bir silici cihaz bulunsa bile programı bellekten silmek için en azından 10-15 dakika beklemek zorunda kalınacaktır. İşte PIC16F628A’nın bu özelliği mikrodenetleyici kullanmaya yeni başlayanlar için ideal bir seçenektir.

Pic Basic Pro Nedir?

Pic basic pro; koyun postundan kıl ayıklar gibi assembly dilinde program yazmaktan yorulanların akıllılık edipte bir sürü luzumsuz bitlerle uğraşmak yerine daha basit ve kullanıcı dostu bir arabirim geliştirmesi sonucu ortaya çıkan bir derleyicidir ki, pic assembly dilinde 20, 30 sayfa süren bir program hiç hilafsız Pic Basic Pro’da bi iki sayfa ya tutar ya tutmaz. Bu projede kullanılan programın uzunluğuna ve yaptığı işe bakmak bu işi anlatmak için kafidir.

Devrenin Özellikleri

Projede yaptığımız devre şu fonksiyonları gerçekleştirmektedir
İki adet dahili telefon devreye bağlanmaktadır.
Bu dahili telefonlardan önce hangisi 9’u tuşlarsa onu harici hatta bağlamaktadır.
Harici hattan bir çağrı geldiğinde 1 nolu dahili telefonu çaldırmaktadır.

Devrenin Çalışma Prensibi

Devre iki adet telefonun iki adet röle ile hatta bağlanmasını sağlar. Her iki telefonun kendisine ait bir rölesi vardır. Bu röle aktif olduğunda telefonun harici hatta bağlanmasını, pasif olduğunda ise dahili bir yapay telefon hattına bağlanmasını sağlar. Bu yapay telefon hattı sadece dtmf kod çözücü entegresiyle (CM8870) telefondan basılan tuşu anlamaya yarar.

Böylece hangi telefondan önce 9 tuşlandığı anlaşılır ve bu telefon harici telefon hattına bağlanır. Dışardan bir çağrı gelmesi halinde ise, çağrı geldiğini anlayan devre ile çağrının geldiği tespit edilir ve 1 nolu telefon harici hatta bağlanarak 1 nolu telefonun çalması sağlanır. Aşağıdaki şekilde bunu incelersek; Hattan gelen bilgi telefonun çalması esnasında 80 Volt AC gerilim şeklindedir. Bu AC gerilim D1 diyodu ile doğrultulduktan sonra R5ve R6 gerilim bölücü dirençleriyle genliği azaltılır.

Bu azaltılan yarım dalga gerilim C5 kondansatörüyle filtre edilerek DC bir seviye haline dönüştürülür. Kondansatörün + ucu ise pice ring dedektörü olarak bağlandığından, telefon çalarken bu pinde (PORTB.0) oluşan gerilim +5 Volt seviyesine kadar yükselecek ve pic bu pinden ölçüm alarak telefonun çaldığını anlayacaktır.

Devrede herhangi bir şekilde konuşmanın bitiğini anlayacak bir kısım olmadığından devreyi başlangıç koşullarına döndürmek için bir buton kullanılmıştır.

Devrenin beslemesinde ise aşağıdaki devre kullanılmıştır

Bu devrede J2 girişine uygulanan gerilim D2 diyodu ile yarımdalga doğrultulduktan sonra C6 kondansatörüyle doğrultulur ve 7805 +5 Volt gerilim regülatörüne verilir. Çıkışından alınan +5 Voltluk gerilim C7 kapasitesiyle filtrelendikten sonra Devreye DTMF kodçözücü ve Pic entgeresi beslemesi olarak dağılır. Devrede görülen +12 Volt ise dahili telefonların beslemesi için kullanılmıştır.

Devre Şeması

Devrenin Yapım Aşamaları
Devrenin şeması ISIS.EXE adlı programda çizildi.
Isis.exe den ARES.EXE programına geçilip baskılı devresi çizildi.
Baskılı devresi printerden PNP kağıdına basıldı.
Basılmış PNP kağıdı bakırlı plaketin üzerine koyup ütülendi.
Ütülenmiş bakırlı plaketten PNP kağıdı ayrılıp tuzruhu-perhidrol karışımına atıldı.
Baskılı devrenin yolları çıktıktan sonra asitten çıkartıp delikleri delinip elemanların montajı yapıldı.
MPLAB programında PicBasic Source Code yazıldı.
Source Code MPLAB içinde derlenip HEX file elde edildi.
Bu HEX file P16PRO adlı programda açılarak, Pic programlayıcı cihazı ile 16F628A entegresine yüklendi

İki Aboneli Santral Projesinin Kaynak .bas Kodları

;2 ABONELİ SANTRAL Programı ve devresi V1.0
'16f628
@        __CONFIG _BODEN_OFF & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_OFF &_INTOSC_OSC_NOCLKOUT
@		messg "Config word yazıldı"

define OSC 4
define NO_CLRWDT
std1	var	PORTB.3
std2    VAR PORTA.5
ringin	var	PORTB.0
hat2    var PORTB.1
hat1    var PORTA.4
number	var	byte
ilk     var byte
temp    var byte
starter:	

	CMCON=$07
	OPTION_REG=$80
	PAUSE 300
	TRISA=%11101111
	TRISB=%11111101
	PORTA=0
@	movf	PORTB,F

    high    hat1    'hat1 beklemede
    high    hat2    'hat1 beklemede
    low hat1
    low hat2
    pause 3000
    high    hat1
    high    hat2
start:
            if std1=1 then
                pause 10
               	temp=PORTB
               	temp=temp & %11110000
               	temp=temp >>4
               	if temp=9 then
               	     low hat1
               	     pause 100
fdet:
               	     if PORTB.7=1 then
               	        pause 10
                        high hat1
                        goto start
                     else
               	         goto fdet
               	     endif
               	endif
            endif
            if std2=1 then
                pause 10
               	temp=PORTA
               	temp=temp & %00001111
               	if temp=9 then
               	     low hat2
fdet1:
               	     if PORTB.7=0 then
               	        pause 10
                        high hat2
                        goto start
                     else
               	         goto fdet1
               	     endif
               	endif
            endif

    if ringin=1 then
        low    hat1    'hattı line bağla
        while PORTB.7=0 ' hat açık olduğu sürece bekle
            pause 100
        wend
        high   hat1     'hattı devre dışı bırak
    endif

    goto start

getnumber:
	number=temp
	if number=0 then
		number=13
	endif
	if number=10 then
		number=0
	endif
	return

	end