Saturday, 21 July 2018

ATmega8 ve DS1307 çipi ile RS485 iletişimli LCD Saat

ATmega8 ve DS1307 çipi ile RS485 iletişimli LCD Saat


Giriş

"ATMega8 ve DS1307 çipi ile RS485 saat kaynağı" projesi ile RS485 üzerinden
 7 parçalı LED ekran üzerinde saat ve dakika gösterimi sağlandı. Ama görüldüğü
üzere elde edilebilir bilgi çok sınırlı idi. DS1307 çipini inceleyen kişiler elbette
çok daha fazla bilgi barındırdığını görecektir. Bunu 7 parçalı LED ekranlar üzerinde göstermek biraz yetersiz kalabilir. 


Bu noktada kullanılabilecek bilgi gösterme
 araçlarından biri olan LCD modül kullanımı olanağı ile yine RS485 üzerinden
 saniye, dakika ve saat gibi zaman bilgileri ve haftanın günü (pazartesi, salı...),
 gün, ay ve yıl gibi tarihsel bilgileri (4x20 mavi arkadan aydınlatmalı)
LCD modül arayüzü üzerinde sunacağız.
DS1307

Birçok benzerleri gibi gerçek zaman saati olarak geliştirilmiş Dallas
 Semiconductor veya Maxim firması tarafından geliştirilmiş olan
çip sadece birkaç eleman yardımı (pil ve 32.768Khz kristal) ile artık
yıl hesabı dahil saniye, dakika, saat (12 veya 24), haftanın günü,
ayın günü, ay, yıl gibi değişkenlerin sayılabildiği gibi ek olarak bazı
parametrelerin saklanabileceği 56 baytlık pil desteği tarafından
korunan ram bölgeside yer almaktadır.



Şekil-1 :DS1307 çipi zaman registerinin adres ve tanımları (Not:RAM bölgesi gösterilmemiştir. Sadece 24 saat modu ile ilgili bölümlere yer verilmiştir.).


Zaman ve tarih bilgileri 0x00 ile 0x06 ve kontrol registeri olarak kullanılan
0x07 adreslerinde saklanmaktadır.

Saat ve tarih bilgileri BCD biçiminde saklanmaktadır. (onluk -ikilik sistem)

DS1307 çipi üzerinde i2c bağlantıları yanında, bir çıkışı programlanabilir
 saat çıkış bacağı (referans saat çıkışı), 32.768Khz için saat kristal bacakları,
yedekleme pili için besleme bacağı yanında tabii ki normal besleme
 için +5V ve GND bacaklarıda var.

DS1307 çipi içinde otomatik besleme takip sistemi yer alıyor. +5V bacağındaki
besleme gerilimi 1.25x Vpil (yaklaşık olarak 3.75V) gerilimine ulaştığında
 besleme işlemini otomatik olarak pil beslemesine aktarmaktadır.
Vcc (+5V) gerilimi 1.25x Vpil gerilimi üzerine ulaştığı zaman
 i2c hatları DS1307 tarafından aktif hale getirilmektedir.

Sadece burada belirtilmesi gereken nokta DS1307 çipi ilk defa çalıştırıldığında
 zamanlama sayıcıları çalışmaya başlamaz. Bunun için saniye registerinin
 (0x00 adresi) 7.biti üzerinde bulunan (CH) çip tutma bitinin "0" yapılarak
sayıcıların aktif hale getirilmesi gerekiyor. Yani yapılması gereken
tek şey ayar gir ve ayardan çık. Bu işlem sonunda saniye kendiliğinden
okunup ve okuma esnasında CH biti sıfırlandığından sadece tekrar
yazılarak bu CH biti (0x00 adresindeki 7. bit) sıfırlanmış olur.
 (okuma esnasında 0x00 adresinde 7. bit sıfırlanarak maskelenmektedir).

İkinci olarak seçilmesi gereken 12/24 saat modudur. Bunun için 0x02 adresindeki
saat baytında yer alan 6.bit "0" yapılarak 24 saat modunda çalıştırılması sağlanır.
Bu işlemde aynen ayar giriş çıkışı ile yerine getirilir.
 (okuma enasında 0x02 adresindeki 6. ve 7. bitler sıfırlanarak maskelenmektedir.

Kontrol registeri bu projede kullanımadığından girilmeyecektir.
Bu bölüm ancak referans saat sinyali olarak DS1307 kullanılmak
istendiğinde DS1037'nin out çıkışının ayarlanması için gereken
paremetrelerin ayarlanması için kullanılacağı zaman ayarlanır.
(örneğin işlemcinin sürekli DS1307 okuması yerine program
olarak oluşturulacak saat programında zamana göre saat ile
DS1307'nin eşleşmesinde kullanılmak üzere gerekir).

DS1307 üzerine ayarlar yazılırken (CH) biti "0" ve (12/24) "0" olacak
şekilde yazılmasına dikkat etmek gerekir. Devre ilk kez çalıştırıldığında
DS1307 saymaya başlamayacaktır. DS1307 veri kağıtlarında (CH) biti "1"
konumda olduğu belirtilmektedir. Bu problemi çözmek için yapılması
 gereken sadece "AYAR GİR" ve "AYAR TAMAM" işlemini yap.
Yani AYAR butonuna iki kez bas bırak. Zaten saat ve tarih ayarını yapmak gerekecek!!

Proje normalde 2 modülden oluşuyor. Birinci modül LCD ekran bölümüdür ki
"RS485 (Seri) LCD Çevirici" projesi ile gerçekleştirildi. Ama baskı devrede bazı değişiklikler yapıldığı halde program aynen kullanıldı. (isp konnektörü 2x3 şeklinde).

Anlaşılacağı üzere de ikinci modül
"ATMega8 ve DS1307 çipi ile RS485 saat kaynağı"
projesidir ve aynı isim altında gerçekleştirilmiştir.



Şekil-2 :Kartın üstten görünümü. DS1307 destek pili takılı halde.



Şekil-3 :Tamam saati en azından ayarlamak için gereken tuş takımı. İşlemci kartı ile bağlantı için gereken P3 konnektörü ile birlikte.


Şekil-4 :LCD sürücü kartı.


Şekil-5 :RS485-seri(uart) dönüştürücü (alma modu ayarlı-kart üzerindeki köprü).


Şekil-6 :4x20 LCD ekran, bağlantı kablosu ile birlikte.

Şema


Saat modülü kabini IC1 atmega8 işlemcisi oluşturuyor. Bu işlemci için gereken
 saat kaynağı için XTL1 (3,6864MHZ) kristal, C6 ve C7 (27pF) kondansatör birlikte kullanılmakta. Devrenin çalışmasını göstermek üzere D2 ve R2 (1k) direnci kullanılır.

IC1 üzerine bağlı S1 butonu (ayar butonu)üzerindeki R5 (10K) direnci butonun
pull-up direnci görevini görürken, C11 (100nF) kondansatörü tuş için giriş
parazitlerini bastırır. Aynı şekilde S2 (saat) ve S3 (dakika) saat ayarlama butonlarını oluşturur ve butonlara bağlı C12 ve C13 parazitik etkileri bastırmak için işlev görürler.

İşlemcinin seri haberleşme (UART) üzerinden IC2 ST485 arayüz çipine bağlanmakta.
Bu çipin girişine bağlı bulunan R1 (120OHm) ile hat empadansının uygunlaştırılması sağlamakta. İşlemci programı ile bu çip sadece sinyal gönderece biçimde şekillendirilmiştir.

IC1 işlemcinin TWI bacaklarına bağlanmış olan IC3 (DS1307)
 (projenin asıl konusudur) i2c bağlantısı üzerinden iletişimi sağlar.
i2c bağlantısı üzerindeki R3 ve R4 (10k) dirençleri i2c hattının pull up
ihtiyacını karşılar.IC3 üzerine bağlı XTL2 (32,768KHz) kristal bu çip için
 gereken saat referans sinyallerin üretir. Ayrıca IC3'ün Vbat bacağına
bağlı PIL1 (3V) pili ile IC3'ün ihtiyacı olan destek gerilimini sağlar.

D1 girişdeki besleme kutbu sorunun ortadan kaldırarak doğrultma sağlar.
IC4 ve buna bağlı olan C2,C3,C4 ve C8 devre için gereken 5V besleme gerilimini üretir.

IC1'e bağlı olan ISP konnektörüde artık bilindiği gibi işlemcinin programlanmasında kullanılır.

--LCD Modülü:(şekil-9'a bak)

LCD modül kalbini ATtiny2313 oluşturuyor. İşlemci XTL1 (3,6864MHz)
kristal ile birlikte C3 ve C4 (27pF) kondansatörler saat kaynağı olarak kullanır.
 P1 LCD için (14P) bağlantı konnektörüdür. R1 LCD parlaklık ayarı içindir.
 C1 (10µF) kondansatör LCD Vo ( parlaklı ayarı) ucu için filtre görevini görür.
D1 (LED) ve R2 (1K) LCD kartı için monitörolarak kullanılır.

P3 besleme giriş konnektörüdür. D2 köprü diyot besleme gerilimi için kutuplama
sorununu ortadan kaldırır ve IC2(7805) LCD modül için 5V besleme gerilimini üretir.

P2 ve P2_2 konnektörleri ATtiny2313 ve ST485 arasındaki seri bağlantıyı (UART) sağlar.
R4 (1K) ve D3 (LED) RS485 kartına besleme geldiğini gösterir. IC3 (ST485) seri-RS485 dönüştürücü arabirimidir. P4 RS485 için giriş konnektörüdür(6p2c veya 6p4c) ve
 buna bağlı olan R3 (120R) empedans uygunlaştırıcıdır.
 R5 ve P5 RS485 için çalışma modu seçicidir.(köprü yardımı ile )

Geri kalan kondansatörler besleme hatları üzerinde filtre görevini yerine getirirler



Şekil-7 :Devrenin blok şeması


Şekil-8 :Saat Modülü Devrenin şeması


Şekil-9 :LCD Modülü Devrenin şeması (LCD arkaplan aydınlatması gösterilmemiştir). Kullanılmakta olan LCD üzerinde arkaplan aydınlatması için sadece 2 tane beyaz LED var.

Devre Yapımı

"RS485 (Seri) LCD Çevirici" ve "ATMega8 ve DS1307 çipi ile
RS485 saat kaynağı" projeleri bu proje için kaynaktır.

Devre yapılırken buton kartı en kolay yapılan olacaktır.
Butonlar karta lehimlendikten sonra, buton bacaklarına C11,C12 ve C13
kondansatörlerini lehimlemek yeterli olacaktır. Ve karta şerit kablo ile
küçük bir konnektörü takmak yeterlidir.

Devre yapımı için fazla bir şey söylemeye gerek yok. Çipler için soket
kullanılması yerinde olacaktır. Kristallerin topraklanması çalışma
esnasında oluşabilecek sorunları ortadan kaldıracaktır.

LCD kablosu için ekran konnektör bağlantıları küçük bir kart üzerinden
gerçekleştirldi. Ama bu kart o kadar gerekli değildir. Serit kablo doğrudan
 LCD ekran bağlantı noktalarına lehimlenebilir



Şekil-10:Saat Modül-baskı devresi şekli(üstten görünüm)




Şekil-11:Saat Modül-yerleşim planı




Şekil-12:Saat Modül-eleman ve yollarla birlikte yerleşim planı.




Şekil-13:LCD Modül-baskı devresi şekli(üstten görünüm)


Şekil-14:LCD Modül-yerleşim planı



Şekil-15:LCD Modül-eleman ve yollarla birlikte yerleşim planı.

Devre Elemanları

--Saat Modülü Malzeme Listesi:


120RR1
1KR2
10K %1R3,R4,R5
10µF/25VC2,C3
100nFC1,C4,C5,C7,C9,C10,C11,C12,C13
27pFC6,C7
Atmega8IC1
ST485IC2
DS1307IC3
7805IC4
2W10M köprüD1
3mm kırmızı LEDD2
3,6864MHz kristalXTL1
32,768Khz kristalXTL2
6'li headerisp
4'lü sıra pinP3
Bas-bırak butonS1,S2,S3
tip 0 klemensP2
RJ12 konnektör 6p2c veya 6p4c gibiP1
3V Lityum düğme pilPIL1
düğme pil soketi-


--LCD Modülü Malzeme Listesi:



120RR3
1KR2,R4
10KR5
10K yatık TrimpotR1
10µF/25VC1,C5,C7,C10
27pFC3,C4
100nFC2,C6,C8,C9
2W10M veya benzeri köprü diyotD2
ST485IC3
7805IC2
ATtiny2313IC1
3,6864Mhz kristalXTL1
3mm LEDD1,D3
6p6c veya 6p2c RJ12 konnektörP4
tip 0 klemensP3
14P konnektör (erkek)P1
10P konnektör(erkek)P2,P2_2
2x3 sıra pin(erkek)P5,isp
4x20 LCD modül (kablosu ile)-
P5 için köprü-
P2 ve P2_2 için kablosu(konnektör ile)-


Malzeme listesi. Burada işlemci için soket ve 9V adaptörler verilmemiştir.
Entegre soketi listede verilmemiş kullanımı kişinin tercihine kalmış bir durum.
Ayrıca buton kartı ile işlemci kartı arasındaki bağlantı ve RS485 için
gereken bağlantı kişinin kendi tercihine bırakılmıştır.

Sistemin Çalışması


Şekil-16:Projedeki elemanlar bir arada.


Sistemin çalışması konusunda;

İşlemci saniyede 2 kez DS1307 üzerinden saniye, dakika, saat ,tarih verilerini alıyor. Saniye değiştiği zaman saat bilgisini ekrana gönderiyor.

Verileri her virgül arası bayt biçiminde olarak;

Saat bilgisi:Satır kodu,saat 10 hanesi, saat 1 hanesi, ayıraç,dakika 10 hanesi, dakika 1 hanesi, ayıraç,saniye 10 hanesi, saniye 1 hanesi, gerektiği kadar boşluk, satır sonu kodu (gönder kodu).

Tarih bilgisi:Satır kodu, gün 10 hanesi, ayıraç, gün 1 hanesi, ay (isim olarak),ayıraç, yıl(sadece 20xx için),satır sonu kodu (gönder kodu).

Haftanın günü bilgisi: Satır kodu, haftanın günü (isim olarak),satır sonu kodu (gönder kodu)

Bu bilgiler her saniye ve ayar yapılırken tuşun her bırakılışında yenilenmektedir.

Ayarlar


Şekil-17:Tuş atamaları

Ayar Gir/TamamBasıldığında Ayar moduna girer (ekran yenilemeyi durdurur) ve tekrar basıldığında ayar modundan çıkıp zaman gösterim moduna girer (ayarlar DS1307'e kaydedilir ve saat çalışmaya başlar)
Ayar SeçEkran üzerinde ayarlanaca öğeyi seçer (saat, dakika, saniye...)
Ayar YapEkran üzerinde seçili öğeyi ayarlar.

Minimum buton ile işlemin yapılması sağlandığından "Ayar Yap" işleminde sayma işlemi sadece ileri doğru yapılmaktadır.


Şekil-18:Ekranda "ayar seç" sıralaması


Şekil-19:"Ayar Gir" butonuna basıldığında ekran.

Saat ve tarih ayarı için;
"Ayar Gir" butonuna bas. Ekranda saat hanesinin olduğu bölge
Büyük ve küçük karakteri ile şekil-19'da görüldüğü gibi işaretlenir.
Ayarlamak istenilen birim ne ise (saat,dakika,saniye, gün, ay, yıl ve haftanın günü)
o birime gelmek için "Ayar seç" butonu kullan. Bu birimlerin sıralaması şekil 18'de gösterilmiştir. Şekil-19,Şekil-20 ve şekil-22 "Ayar gir" butonu kullanılarak seçilmiş ayar görüntüleridir.



Şekil-20:"Ayar Seç" butonu ile seçilmiş ay.




Şekil-21:"Ayar Gir" butonu ile seçilmiş haftanın günü.

Not:Ayar işlemi esnasında saat gösteriminin durduğunu ve ekran üzerindeki 
ayar ne ise o noktadan itibaren saatin sayacağını unutmayın.

"Ayar Yap" butonuna:
Bu butona basıldığında hangi birim ayarlanıyorsa ("Ayar Seç" butonu ile seçilmiş) o
birim 1 artırarak sayar. Ama diğer birimler bundan etkilenmez. Yani dakika ayarlanırsa sadece dakika üzerinde işlem yapılır.

Saat: Butona her bas/bırakta 1 artırarak sayar. Eğer saat "23" olursa sayma "00"'dan
devam eder.

Dakika:Butona her bas/bırakta 1 artırarak sayar. Dakika "59" ulaştığı zaman, sayma "00"'dan devam eder.

Saniye:Butona her bas/bırakta 1 artırarak sayar. Dakika "59" ulaştığı zaman, sayma "00"'dan devam eder.

Gün:Butona her bas/bırakta 1 artırarak sayar. Burası biraz değişik. Aslında yıl ve
 aya göre değişmesi gerekiyor. Ama günün ayarı aydan önce olduğu için ne yazık ki
bu ay ayarını siz yapmanız gerekebilir. Takvimi doğruluğu açısından bulunduğunuz
 günü doğru girmeniz gerekiyor. Örneğin 31 kasım girmemeye çalışın. Burada gün "31" olduğu zaman "01" tarihine devam eder.

Ay:Ay isimleri kullanıldığından, butona her bas/bırakta sonraki ay ismi ile ekran yenilenir. Ocak, şubat, mart, nisan, mayıs, haziran, temmuz, ağustos, eylül, ekim, kasım, aralık ay isimleri birbirini izler. "Aralık" ayından sonra ayar "Ocak"
 ayından deva eder.

Yıl: Yıl olarak sadece son iki rakamı göz önüne alınmıştır. Bu nedenle sadece son iki rakam ayarlanıyor. Butona her bas/bırakta 1 artırarak sayar. Yıl olarak "2099" tarihine ulaştığında "2000" tarihinden devam eder.

Haftanın günü:Haftanın günleri isim olarak kullanıldığından birbirini takip eden bir düzünde olarak pazar, pazartesi, salı, çarşamba, perşembe, cuma ve cumartesi şeklindedir. Bu nedenle ayarıda bu şekilde bir tekerleğin etrafına yazılmış gibi gün isimleri birbirini takip eder.

Gerekli ayarlamalardan sonra ayarları kaydedip saati çalıştırmak sadece "Ayar Gir" butonuna bas(bırak). Saat çalışmaya başlayacaktır.


Arduino Yazılım Kod.. İNDİR

No comments: