Upload
truongkhanh
View
250
Download
0
Embed Size (px)
Citation preview
İSTANBUL TEKNİK ÜNİVERSİTESİ
ELEKTRİK – ELEKTRONİK FAKÜLTESİ
GELGİT ÖLÇER
BİTİRME ÖDEVİSERKAN ŞAHAN
040060321
Bölümü: Elektronik ve Haberleşme MühendisliğiProgramı: Elektronik Mühendisliği
Danışman: Prof. Dr. İnci Çilesiz
Ağustos 2010
ÖNSÖZ
Geniş bilgi birikimi, yol göstericiliği ve tecrübesiyle çalışmam süresince benden desteğini ve yardımını esirgemeyen Sayın Prof. Dr. İnci Çilesiz’e sonsuz saygılarımı ve teşekkürlerimi sunarım.
Ağustos 2010 Serkan ŞAHAN
İÇİNDEKİLER
ÖZETSUMMARY
1. GİRİŞ
2. DONANIM
2.1. Projede Kullanılan Tümdevre ve Malzemelerin Listesi
2.2. Mikrodenetleyici: PIC16F877
2.2.1. PIC16F877 Hakkında Genel Bilgi 2.2.2. PIC16F877’ Besleme Bacakları ve Beslenmesi 2.2.3. PIC16F877’ Saat Bacakları ve Osilatörler Hakkında Bilgi 2.2.4. PIC16F877' nın Analog/Sayısal Çevirici (ADC) Birimi
2.3. LM7805AC 5 Volt Gerilim Düzenleyici
2.4. TXC1 RF Verici Devre
2.5. RXA1-B-434M RF Alıcı Devre
2.6. ATM1602B Sıvı Kristal Görüntü Birimi (Liquid Crystal Display, LCD)
2.7. DS1302 Saat ve Takvim Tümleşik Devresi
3. DEVRE TASARIMI
3.1. Verici Devre Tasarımı
3.2. Alıcı Devre Tasarımı
3.3. Elektromekanik Kısım İçin Devre Tasarımı ve Düşünülenler
4. YAZILIM
4.1. C Programlama Dili ve C ile PIC Programlamaya Giriş
4.2. Yazılım Ortamı:Micro Code Studio Derleyicisi
4.3. Çalışma
4.4. Verici Devre İçin Kullanılan Kod ve Algoritma Tasarımı
4.5. Alıcı Devre İçin Kullanılan Kod ve Algoritma Tasarımı
4.6. PIC’e Programın Yüklenmesi
5. SONUÇLAR VE TARTIŞMA
ÖZET
Bu bitirme projesi, gelgit dolayısıyla deniz suyu düzeyinin 30 cm'ye kadar olan (±15cm) değişimini ölçen; şamandıra tabanlı ve karada kazılacak bir kuyu içine yerleştirilecek; deniz suyu yüksekliğini gösteren elektriksel işaretin kablosuz olarak iskele veya kuyudan yaklaşık 30-50 m uzaktaki panele gönderileceği; panelde gösterilen su düzeyi yanılma payının 2 mm veya daha az olduğu bir cihaz tasarımı gerçekleştirilmesini içermektedir. Proje, donanım ve yazılım alarak iki ana bölümden oluşmaktadır.
Donanım içeriği PIC16F877 mikrodenetleyicisi, LM7805AC 5 volt gerilim düzenleyici, TXC1 rf verici devre, RXA1-B-434M rf alıcı devre, ATM1602B 2x16 sıvı kristal görüntü birimi (liquid crystal display), DS1302 saat ve takvim tümleşik devresi oluşturmaktadır. Gelgit bilgisinin elektriksel işarete dönüşümünü sağlayan elektromekanik kısım ise Volkswagen Golf modeli bir aracın akaryakıt ölçüm sisteminin kullanılması ile gerçeklenmiştir.
Yazılım kısmında ise verici tarafta gelgit seviyesini mekanik olarak ölçerek 0-5 volt arası değerlerde analog elektriksel işarete dönüştüren cihazdan gelen bilginin mikrodenetleyicideki analog/sayısal çevirici birimi işlenip verici devre ile alıcı kısma gönderilmesi, alıcı kısımda algılanan bilginin saat ve tarih tümdevresinin içerdiği bilgi de eklenerek gerekli dönüşümlerin yapılması ile sıvı kristal göstergede görüntülenmesi gerçeklenmektedir..
TIDE GAUGE REALIZATION
SUMMARY
The main aim of this project is to design and implement a tide-gauge which basicly operate between 30 centimeters below and above of sea level. This project also supposed to provide the following features such as being buoy based and settled in a well which is digged on the land, a wireless transfer of the electrical signal which carries the information of sea water level from the dock or well about 30-50 meters distance and having a data error of 2 millimeters or less.
This project includes hardware and software parts. The main parts of the hardware are PIC16F877 microcontroller, LM7805AC 5 Volts voltage regulator, TXC1 rf transmitter circuit, RXA1-B-434M rf receiver circuit, ATM1602B 2x16 liquid crystal display, DS1302 real time clock and date circuit. The electromechanical part which provides the convertion of tide level information to electrical signal, is realised using a fuel measurement system of a Volkswagen Golf model vehicle.
In the software part, by using transmitter circuit it is realized sending the information, which comes from the device that measures the tide level mechanically and converts it into an analog electrical signal between 0-5 volts, by processing it in the ADC the of microcontroller and it is realized that displaying the information which is sensed in the receiver part doing necessary convertions and the additional real time and date information on the liquid crystal display.
1. GİRİŞ
Gelgit ölçerler, 1800’ lü yıllardan bu yana dünyada kullanılan cihazlardır. Ana kullanım
amaçları deniz seviyesini ölçmek, tsunamileri ve taşkınları belirlemektir. Yüzyıllardan yana
kullanılan bu sistemlerin ana prensibi deniz suyunun içine girdiği ince bir boru ve kaydedici
düzenlerdir.
Özellikle okyanus kıyılarındaki yaşam merkezleri için gel-git değerinin bilinmesi hayati
önem taşımaktadır. İlkel gel-git ölçerler zamanla gelişen teknoloji ile geliştirilmiş ve farklı
ara yüzler, farklı ve kullanışlı haberleşme yöntemleri kullanılmış ve sonuçlar istatiksel amaçlı
veri bankalarında depolanmıştır. Bugün dünyada profesyonel anlamda gelgit ölçümleri
yapılmakta, bu gelgit ölçümlerinde küresel konumlama sistemleri, uydu haberleşmesi gibi
ileri teknoloji uygulamalardan yaralanılmaktadır. Bizim amacımız bu projelerin küçük ve
amatör bir şekilde bir benzerini yapabilmektir. Marmara Denizi’ nde meydana gelen deniz
seviyesinden on beş santimetre meydana gelen değişimini gözlemleyebilmek diğer bir
amacımızdır. Milli Savunma Bakanlığı’ nın gel-git ölçer alımı hakkındaki açtığı ihale bu
konunun her anlamda önemini bir kez daha ortaya koymaktadır.
Proje, bir çok disiplinin birleşmesi ile meydana gelmektedir. Kullanılan mikrodenetleyicinin
(PIC 16F877) mimari yapısı, programlama boyutu, analog sayısal çevirme işleminin
mantığının anlaşılması ve özellikle radyo frekansları ile iletişimin nasıl gerçeklendiği ve
sayısal haberleşme; tümdevrelerin analog sistem tasarımlarına ilavesi ve son olarak sıvı
kristal göstergelerin özellikleri ve programlanmaları bu projenin displinler arası yönünü
ortaya koymaktadır.
Proje basitçe açıklamak gerekirse tasarım olarak üç ana bölümden oluşmaktadır. İlk bölüm
bir araba yedek parçası olan Volswagen Golf modelinin yakıt algılayıcısının bu sistemde
deniz suyu yüksekliğini dahili şamandırası ile algılaması ve dahili devresi ile bu yüksekliği
elektriksel işarete dönüştürmesidir. Bu tipik bir analog dönüşümdür ve parçada bulunan grafit
ucun bir direnç serisinin üzerinde yüksekliğe bağlı olarak gezmesi ile gerilimi değiştirmesi
esasına dayanır. Bunu bir potansiyometre olarak düşünebiliriz.
Projenin ikinci bölümü, yedek parçanın dönüştürdüğü işaretin mikrodenetleyiciye bir bacak
sayesinde alınması analog giriş işlemidir. Mikrodenetleyiciye giren işaret ASÇ ile sayısal
işarete çevrilir ve bu sayısal işaret RF verici ile alıcı tarafa iletilir.
Projenin son bölümü alıcı taraftır. Bu kısım, RF ile gönderilen sayısal işaretin alınmasını ve
bu sayısal işaretin ayrı bir mikrodenetleyici kulanılarak ve gerekli dönüşümlerin yapılması ile
saat ve takvim bilgilerinin de eklenmesi ile sıvı kristal göstergede gösterilmesi işlemlerini
yerine getirir.
2. DONANIM
Bu bölümde, projede kullanılan tümdevre ve malzemeler hakkında detaylı bilgi
verilmektedir.
2.1. Projede Kullanılan Tümdevre ve Malzemelerin Listesi
Tablo 2.1: Malzeme listesi
MALZEME ÇEŞİT ADET
PIC16F877 Mikrodenetleyici 1TXC1 RF Verici 1RXA1-B-434M RF Alıcı 12x16 LCD Sıvı Kristal Görüntü Birimi 1DS1302 Saat ve Takvim Devresi 1
11
L7805AC Pozitif gerilim düzenleyici 14 Mhz kristal Osilatör 132.768 KHz kristal Osilatör 110 µF kondansatör Kondansatör 1330 nF kondansatör Kondansatör 122 pF kondansatör Kondansatör 210 kΩ direnç Direnç 34,7 kΩ direnç Direnç 2330 Ω direnç Direnç 19 V pil Pil 1
1
2.2. Mikroişlemci: PIC16F877A
2.2.1. PIC16F877A Hakkında Genel Bilgi
PIC (Peripheral Interface Controller) Microchip firmasının ürettiği ve ilk olarak 1994’ te
lanse ettiği mikrodenetleyicilerdir. PIC16F877 mikrodenetleyicisi Harward mimarisi
kullanılarak geliştirilmiştir. Yani bellek ve veri için ayrı yerleşik yollar kullanılmıştır. Bu
tasarım belleğe ve veriye erişim hızını arttırarak pic ailesini diğerlerinden ayırır.Şekilde
PIC16F877 PDIP (Plastic Dual In-line Package) kılıf PIC görülmektedir.
Şekil 2.1. PIC16F877 Bacak Şeması ve Resmi[1]
PIC16F877 mikrodenetleyicisinin özellikleri şunlardır:
8K FLASH Program bellek, programın yazılıp silinebilmesine olanak sağlar.
DC-20 MHz Çalışma Frekansı
368*8 RAM bellek, kullanıcının yaralandığı
256 byte EEPROM Veri belleği
14 bit genişliğinde komutlar
33 Adet Giriş-Çıkış Portu, bu çalışmadaki seçim kriterlerinden biridir.
8 Kanallı 10 Bit Analog-Sayısal Çevirici, dahili olduğu için diğer bir seçim
kriteridir.
Kesme kaynağı, 14 adet kesmeye izin verebilir.
SPI (serial peripheral interface) ve I2C (inter-integrated circuit) seri iletişim
özelliği
Paralel iletişim portu (paralel slave port, PSP)
USART (Universal Synchronous Asynchronous Receiver Transmitter) seri
iletişim, USART I2C(efendi-köle haberleşmesi), RS232 gibi güçlü bir seri iletişim
bacağıdır ve sadece bu modelde bulunur.
SPI iletişimi içerir.
25 mA port çıkış akımı
Bekçi köpek (watchdog timer) devresi
Dahili salıngaçı bulunur.
Uyku modu
0,6 mA’ den düşük bir akım, 3V-MHz çalışma koşullarında
1 µA’ den daha düşük bekleme modu akımı
PIC16F877 mikrodenetleyicisinin dâhili A/S çevirici devreye sahip olması, seri ve paralel
iletişim konularında gelişmiş bir altyapısının bulunması, girişler ve çıkışlar için yeterli sayıda
bacak içermesi en önemli tercih nedenidir.
2.2.2. PIC16F877' nin Analog/Sayısal Çevirici (Analog/Digital Converter, ADC)
Birimi
PIC 16F877’ nin bir özelliği de mikrodenetleyici uyku modunda iken bile analog sayısal
çeviricinin arka planda çalışma özelliğidir.Bu kısımda mikrodenetleyicimizin yazmaç
özelliklerini inceleyeceğiz.
Şekil 2.3: ADCON1 kaydedicisi [1]
Bit-7: A/S çeviricinin Sonuç Format Seçme biti dir. Sonuç 1 olur ise sonuç sağa hizalanmış,
ADRESH’ nin 6. uç bitleri 0 olarak okunur. 0 olur ise sonuç sola hizalanmış, ADRESL’ nin
alt bitleri 0 olarak okunur. Bit 6-4 arası kullanılmaz ve 0 olarak okunur. Bit -3-0
arası PCFG3 – PCFG0 A/D portu ayarlama kontrol bitleridir. İşte bu bitleri ayarlayarak
portların seçimleri yapılır. Aşağıdaki tabloya bakınız.
Örnek olarak PCFG3:PCFG0 bitlerini 0000 olarak verir isek bu durumda RA0-RA3 , RA5,
RE0-RE2 bacaklarının tamamı ANALOG olarak ayarlanmış olacak ve artı referans Voltajı
VDD den eksi referans voltajı ise VSS yani GND den alınacaktır.Eğer projemize yönelik
bakacak olursak şunu kolaylıkla söyleyebiliriz ki bize 1 adet Analog giriş yeterlidir, diğerleri
sayısal olabilir. +5V ve GND de referans voltajları olarak kullanılacak. Bu durumda tabloya
bakar isek 1110 değeri tam istediğimiz ayarlamayı yapabiliyor. Tablonun en son hanesinde
ilk değer kaç analog giriş olduğunu / işaretinden sonraki değer ise harici referans voltaj girişi
adedini gösteriyor. Seçtiğimiz değerde burası 3/0 olarak görülmektedir. Anlamı 3 adet
Analog giriş ve sıfır referans voltajı var demek. Zaten biz mikrodenetleyicinin kendi voltaj
girişlerini kullanmak istediğimizden gerçektende bize sıfır referans girişi lazımdır.
Mikrodenetleyicinin voltaj girişleri referans voltajı olarak seçildiğinde mikrodenetleyiciye
giren Analog voltaj değerinin 5 Volt’u aşmamasına dikkat edilmelidir. Tasarımda oto yedek
parçasının uçlarına 5 Volt gerilimin verilme nedeni de budur. Bu şekilde tablonun
kullanılmasını anlattıktan sonra bu aşamada tüm girişlerin sayısal seçilmesini inceleyelim.
Analog girişlerin sayısal olarak kullanılması istenir ise tablodan sağ tarafta 0/0 değerinin
bulunduğu satırda PCFG3:PCFG0 değeri 0111 (onluk sistemde 7) olarak görülür. Demek ki
ADCON1=7 veya ADCON1=%0111dediğimiz zaman mikrodenetleyici 16F877 nin Analog
girişleri iptal edilerek normal sayısal giriş çıkışa dönüştürülmektedir. A/S çeviricisi bulunan
mikrodenetleyicilerde aksine bir komut bulunmaz ise ilk açılışta A/S bacaklar analog olarak
açılırlar. Dolayısıyla bu pinleri sayısal kullanmak istersek mutlaka ADCON1=7 komutuyla
işle yaparız.
n bitlik bir ADC en fazla 2n adet değer ile bir analog işareti örnekleyebilir. Örneğin 10 bitlik
bir ADC en fazla 210 = 1024 adet değer ile bir analog işareti örnekleyebilir. ADC biriminin
elde ettiği sayısal bilginin bit sayısı ADC biriminin çözünürlüğünü ifade eder. Çözünürlük
ne kadar yüksek ise o kadar iyi bir dönüşüm yapılır. ADC tüm devreleri analog giriş için,
analog sinyalin pozitif giriş ucu olan VIN(+) ve analog sinyalin negatif giriş ucu olan VIN(-) giriş
uçlarına sahiptir. Bu girişlerden analog sinyal uygulanır. Ayrıca ADC tümdevrelerinde analog
sinyali sayısala çevirirken kullanılan VREF(+) ve VREF(-) uçları vardır. VREF(+) sayısala çevrilecek
sinyalin en yüksek değerini, VREF(-) de en düşük değerini belirtir. Böylece giriş sinyalinin
istenen aralığı için sayısala çevirme işlemi uygulanarak daha hassas ölçüm sonuçları elde
edilebilir (projede daha hassas sonuca gerek duyulmadığından bu uygulanmamıştır).
ADC'nin sayısal bilgiye dönüştürebildiği en küçük gerilim değerine adım büyüklüğü denir.
Adım büyüklüğü 1 LSb değeri olarak da ifade edilir ve şu şekilde hesaplanır:
Adım büyüklüğü (1 LSb) = (VREF(+) - VREF(-)) / 2n (n, ADC'nin bit sayısını belirtir.) (2.1)
Örneğin en yüksek değeri VIN(+) = VREF(+) = 5V ve en düşük değeri VIN(-) = VREF(-) = 0V olan bir
sinyalin 10 bitlik ADC için adım büyüklüğü 5V/210 = 4,8828125mV'tur.
ADC biriminin analog uçlarına gelen sinyalin gerilim değerini hesaplamak içinse aşağıdaki
formül kullanılır:
Sinyal gerilimi = Sayısal çıkışın onluk tabandaki değeri x Adım büyüklüğü + VREF(-) (2.2)
2.3. LM7805AC 5 Volt Gerilim Düzenleyici
LM7805AC 5 Volt gerilim düzenleyici ABD’ li fairchild yarıiletken firması tarafından
üretilmektedir. Bu gerilim düzenleyicilerinin en büyük özellikleri ısıl kapama, iç akım
sınırlaması ve güvenli çalışma alanı gibi bu düzenleyicileri zarar verilemez kılan
özelliklerdir. 7805 tümdevresi 0-125 oC arasında çalışır, 500 mA çıkış akımı ve 0.1 µF kadar
bir giriş kapasitesi mevcuttur. Devrenin en üstteki bacağı, düzenlenmiş çıkış bacağıdır. En
alttaki bacak pozitif doğru gerilim girişi, ortadaki bacak ise toprağa veya 0 Volt gerilime
bağlanması gereken giriştir.
Şekil LM7805AC tümdevresi
2.6. Sıvı Kristal Görüntü Birimi (Liquid Crystal Display, LCD)
Sıvı kristal ekran, elektrikle kutuplanan sıvının ışığı tek fazlı geçirmesi ve önüne eklenen bir
kutuplanma filtresi ile gözle görülebilmesi ilkesine dayanan bir görüntü teknolojisidir.
Projede 2x16 karakter tabanlı paralel LCD kullanılmıştır. Bu başlık altında bu tip LCD’ler
hakkında bilgi verilecektir.
İmleçleri ile birlikte 5x8 noktalı olan göstergelerde karekterler 5x7 matrisler şeklinde oluşur.
Bizim uygulamamızda Türkçe’ ye özel karakterler de kullanılmıştır. Yazılım kısmında bunun
ayrıntılı anlatımı mevcuttur. ATM1602B sıvı kristal göstergesi -20 ila 70 oC arasında çalışır.
Piyasadaki hemen hemen tüm sıvı kristal göstergeler aynı bacak diyagramına sahiptir.
Şekil 2.12: 2x16 karakter LCD Şekil 2.13: ATM1602B bacak diyagramı
Projede kullandığım sıvı kristal göstergenin 3 no’ lu bacağı kontrast bacağı olup bu bacak 10
K lık bir trimpotun orta ucuna bağlanmalıdır. Trimpotun diğer uçlarından birisi +5V’ a diğeri
de GND ye bağlanıp ekranda bir şeyler yada en azından karartılar görününceye kadar trimpot
ayarlanmalıdır. Trimpotun alternatifi 3 no’ lu gösterge bacağını 470-680 ohm arası bir
dirençle GND ye bağlamak ve aynı bacağı 8K2 ile de +5V ta bağlamaktır. Gösterge Çin
üretimi olduğu için sorun çıkmış ve çeşitli kullanıcıların deneyimlerinden yararlanılarak bu
yola başvurulmuştur.
- Göstergenin 1 nolu bacağı ile 5 no’ lu bacağı GND’ ye bağlanmalı , 2 no’ lu bacağı ise
+5V’ a bağlanmalıdır.
- R/W=0 yani düşük seviyede tutularak veri gönderme işlemi yapılmıştır.
- R/S=1 yani yüksek seviye veri, R/S=0 yani alçak seviye komut için yazmaçın seçimidir
- Göstergenin veri bacakları mutlaka her hangi bir portun ya 0 no’ lu bacağından itibaren
yada 4 bitlik iletişim kullanılacak ise 4 nolu bacağından itibaren sıra ile bağlanmalıdır. Alıcı
devredeki mikrodenetleyiciye yüklenen programda gösterge 4 bitlik kullanıldığı için bağlantı
şöyle olmalıdır.
Gösterge-D4==>portB.4
Gösterge -D5==>portB.5
Gösterge -D6==>portB.6
Gösterge -D7==>portB.7
D0-D7 arasındaki tüm bacaklar göstergenin veri bacaklarıdır. E yetkilendirme bacağıdır. VEE
kontrast bacağıdır.
2.7. DS1302 Saat ve Takvim Devresi
DS1302, Dallas yariiletken firmasi tarafindan üretilmis olan bir gerçek zamanli saat ve
takvim devresidir. 8 bacakli bir devre olan DS1302, 2100 yilina kadar çalisma garantisine
sahiptir ve bacak sayisini ekonomik olarak kullanabilmek için seri iletisim yetenegine
sahiptir. 2 Volt ile 5.5 Volt arasi besleme gerilimine ihtiyaç duyan devre; -40 °C ile +85 °C
arasi çalisabilme özelligine sahiptir. Devre besleme gerilimi kesildiginde saat ve takvim
bilgilerini saklayabilmek için yapisinda rasgele erisimli bellek ( RAM ) bulundurmaktadir.
Bu bellek sürekli çalis mak için tasarlanmistir ve Vcc1 besleme gerilimine ihtiyaç
duymaktadir. Ana besleme gerilimi yani Vcc2 kesintiye ugradiginda, Vcc1 bacagina
baglanmis olan pil, saati ve takvim bilgilerini içinde barındıran belleği sürekli aktif tutacaktir
ve dolayisiyla bilgi kaybi olmadan saat ve takvim çalis maya devam edecektir. Vcc2 bacagina
baglanacak olan en az 1.5 Volt’luk pilin, yeniden s arj edilebilir pil olmasi tavsiye
edilmektedir. Çünkü DS1302 devresi pil sarj etme düzenegine sahiptir. Devrenin katalog
bilgileri incelendiginde, sarj etme düzeneginin nasil çalis tigi kolayca anlasilabilecektir.
Gerekli yazilimsal ayarlamalar yapilmadan, sarj edilebilir pil kullanmanin bir anlami yoktur.
Bu ayarlamalar devrenin katalog bilgilerinde bulunmaktadir. X1 ve X2 bacaklari osilatör
bacaklaridir. 32.768 KHz frekansinda çalisan bir osilatör, saat ve takvim tümdevresinin
çalismasi için gereklidir.
Sekil 1.3 DS1302 Tümdevresi
4.4. Verici Devre için Kullanılan Kod ve Algoritma Tasarımı
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_on
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
define adc_bits 10 ' 10 bitlik A/S çevirici seçildi
define adc_clock 3 ' 3. modda çalışılacak
define adc_sampleus 100 ' 100 mikro saniye örnekleme süresi
include "modedefs.bas" ' modedefs.bas dosyası kodun içine alındı
c var word ' i değişkeni tanımlandı
toplam1 var word ' toplam1 değişkeni tanımlandı
meas var word
trisa = %00000001 ' A portu analog giriş seçildi
adcon1 = %10001110 ' A/S çevirici konfigürasyonu
basla: ' basla etiketi
c=1
meas=0
toplam1=0
FOR C=1 TO c=100 ' ölçüm 100 kere tekrarlanacak
adcin 0 , meas ' port A.0'dan veri alındı
toplam1=toplam1+meas ' sonuclar birikiyor
NEXT c
toplam1=toplam1/100
serout2 portc.6,396,[REP$AA\5,REP$00\5,REP$FF\5] 'uyandırma işareti yolla
serout2 portc.6,396,[("S"),("E"),toplam1] ' 2400 baud ile "SE" yolla
serout2 portc.6,396,[("S"),("E"),toplam1] ' 2400 baud ile "SE" yolla
serout2 portc.6,396,[("S"),("E"),toplam1] ' 2400 baud ile "SE" yolla
PAUSE 100
GOTO basla
4.5. Alıcı Devre İçin Kullanılan Kod ve Algoritma Tasarımı
@ DEVICE pic16F877@ DEVICE pic16F877, WDT_on@ DEVICE pic16F877, PWRT_ON@ DEVICE pic16F877, PROTECT_OFF@ DEVICE pic16F877, XT_OSC
define lcd_dreg portb ' b portu data portudefine lcd_dbit 4 ' 4 bitlik veri iletimi yapılacak define lcd_ereg portb ' enable portu seçildidefine lcd_ebit 3 ' enable pini seçildiDEFINE lcd_rwreg portb DEFINE lcd_rwbit 2define lcd_rsreg portb ' register select portu seçildidefine lcd_rsbit 1 ' register select pini seçildiDEFINE lcd_bits 4DEFINE lcd_lines 2lcdout $FE,$40,4,0,4,4,4,4,4,0LCDOUT $FE,$48,17,0,17,17,17,17,31,0LCDOUT $FE,$50,14,17,12,6,17,14,8,0define adc_bits 10 ' 10 bitlik A/S çevirici seçildidefine adc_clock 3 ' 3. modda çalışılacakdefine adc_sampleus 50 ' 50 mikro saniye örnekleme süresiinclude "modedefs.bas" ' modedefs.bas dosyası kodun içine alındı' modedefs.bas dosyası seri haberleşme protokollerinin var olduğu dosyadır. TRISA=1TRISB=0TRISC=0rk VAR WORDsa VAR WORDRST var PORTA.2IO var PORTC.1SCLK var PORTC.3rtcyil var bytertcgun var bytertcay var bytertctarih var bytertcsaat var bytertcdakika var bytertcsaniye var bytertckontrol var byte
Low RST ' Reset RTCLow SCLKLow PORTD.2 pause 200
' Set initial time to 15:00:00AM 06/08/2010 rtcyil = $10 rtcgun = $05 rtcay = $07 rtctarih = $06
rtcsaat = $15 rtcdakika = 0 rtcsaniye = 0 ana: Gosub zamanikur ' Set the time
Gosub zamaniyurut ' Skip subroutines
gosub basla gosub ARAYUZ goto ana
' Subroutine to write time to RTCzamanikur: RST = 1 ' Ready for transfer ' Enable write Shiftout IO, SCLK, LSBFIRST, [$8e, 0]RST = 0 ' Reset RTC
RST = 1 ' Ready for transfer
' Write all 8 RTC registers in burst mode Shiftout IO, SCLK, LSBFIRST, [$be, rtcsaniye, rtcdakika, rtcsaat, rtctarih, rtcay, rtcgun, rtcyil, 0]
RST = 0 ' Reset RTC Return
' Subroutine to read time from RTCzamaniyurut: RST = 1 ' Ready for transfer
Shiftout IO, SCLK, LSBFIRST, [$bf] ' Read all 8 RTC registers in burst mode Shiftin IO, SCLK, LSBPRE, [rtcsaniye, rtcdakika, rtcsaat, rtctarih, rtcay, rtcgun, rtcyil, rtckontrol]
RST = 0 ' Reset RTC
' Main program loop - in this case, it only updates the LCD with the time
' Read the time from the RTC
' Display time on LCD
Lcdout $fe, 1, hex2 rtctarih, "/", hex2 rtcay, "/" ,"20", hex2 rtcyil pause 1000 Lcdout $fe,$c0, hex2 rtcsaat, ":", hex2 rtcdakika, ":", hex2 rtcsaniye
Pause 1000 ' Return
basla :lcdout $fe,1 ' ekran temizlendiserin2 portc.7,396,500,hava,[wait("SE"),rk] ' AB ön uyarma sinyalli veri = rkrk=(rk*4.8828125)*6/1000sa=(rk*4.8828125)*6/100sa=sa//10LCDOUT " GELG",0,"T SEV",0,"YES",0," : "LCDOUT " ",DEC2 rklcdout " ",dec1 salcdout " cm" PAUSE 3000 returnARAYUZ :lcdout $fe,1 ' ekran temizlendiif saat < $12 && saat > $6 then ' saat 6 ile 12 arası iselcdout " G",1,"NAYDIN " ' ekranda günaydın yazpause 3000 ' 3 saniye bekleendif ' döngüden çık54if saat < $19 && saat > $11 then ' saat 12 ile 19 arası iselcdout " ",0,"Y",0," G",1,"NLER " ' ekranda iyi günler yazpause 3000 ' 3 saniye bekleendif ' döngüden çıkif saat < $22 && saat > $18 then ' saat 22 ile 19 arası iselcdout " ",0,"Y",0," AK",2,"AMLAR " ' ekranda iyi akşamlar yazpause 3000 ' 3 saniye bekleendif ' döngüden çıkif saat < $24 && saat > $21 then ' saat 24 ile 22 arası iselcdout " ",0,"Y",0, GECELER " ' ekranda iyi geceler yazpause 3000 ' 3 saniye bekleendif ' döngüden çıkreturn