Gelişen mikrokontrol teknolojileri ve artan bilgi birikimi sayesinde geliştirici düzeyinde daha yaygın kullanımına olanak tanımıştır. Burada elimden geldiği kadar bazı örnekler sunmaya çalışacağım... Görüleceği gibi ilk örneklerimizde çoğunlukla ASM üzerinde iken daha sonraları C üzerinde örnekler yer almaktadır. Hatta ilerleyen zamanlarda Arduino örneklerinin yer alması kaçınılmaz olacaktır.

23 Nisan 2014 Çarşamba

Atmega8 ve DS1302 ile LED ekranlı Masa Saati

Birçok şekilde ve malzeme ile saat yapımı mümkündür.Birçok değişik şekilde elektronik ortamda saat projesi gerçekleştirdik. Amaç sadece saat yapmak değilde saat adı altında değişik teknolojileri incelemek olunca haliyle aynı işi yapan aletlerin üzerinde çalışmak gerekmekte.

Bu projede "ATmega8 ve DS1302 ile LED ekranlı Saat" uygulaması gerçekleştirilecektir.
NotŞu anda kutulanmadığı için sadece Masa Saati bölümü biraz eksik kalıyor


Saat
Saat konusu herkes tarafından bilinen bir konudur. Günlük olarak zaman 24 saate ayrılmıştır, her saat 60 dakikaya eşitken, her dakika da 60 saniyeye eşittir.

Buna göre devre açısından ele alırsak 1 saniye üretilmiş olarak gelen bir sinyal olduğunda, bunu 60 kez sayarsak 1 dakika elde edilir. 60 tane dakika sayıldığında da 1 saat elde edilir. Saatlerde 24 kez sayıldığında 1 güne ulaşılmış olur. En bundan sonraki saymalar diğer birime geçer ki bu takvim olarak tanımlanır.

Saat devresi açısından anlatıldığı şekilde bir devre oluşturmaktır.

DS1302
Şekil-1 :DS1302 çipi.

Dallas/Maxim firması tarafında üretilen bu entegre aslında hem saat, hemde takvim içeren bir üründür.(Ek olarak da RAM)

Entegre 1 saniye üretmek için harici bir saat uygulanabildiği gibi üzerine takılan 32Khz kristal (tam olarak 32.768kHz ) ile gerekli saat sinyalini üretebilir.

Entegre besleme için iki bacak bulundurmaktadır. Birisi asıl besleme bacağıdır (8.nolu bacak) ki doğrudan 5V ile beslenir. Diğer (1 nolu bacak) bacak ise destek beslemesidir. Yani devrenin asıl beslemesi kesilirse entegre saati saymaya devam edebilmesi ve registerlerdeki ayarların tutulabilmesi için kullanılır.
Şekil-2 :DS1302 Şarj bölümünün registeri ile kontrolunu gösteren blok şema.

TCS
Bit 7
TCS
Bit 6
TCS
Bit 5
TCS
Bit 4
DS
Bit 3
DS
Bit 2
RS
Bit 1
RS
Bit 0
İşlevi
XXXXXX00iptal
XXXX00XXiptal
XXXX11XXiptal
10100101Diyot 1 ve 2K
10100110Diyot 1 ve 4K
10100111Diyot 1 ve 8K
10101001Diyot 2 ve 2K
10101010Diyot 2 ve 4K
10101011Diyot 2 ve 8K
01011100Başlangıç durumu
Tablo-1 :DS1302 Şarj bölümünün registerinin değerleri ve kontrolu.

Birkaç değişik destek beslemesi kullanımı mümkündür. Bunlar (1 nolu bacak üzerinden) doğrudan pil, şarj edilebilir pil ve süper kondansatör diyebileceğimiz piyasada saat kondansatörü olarak satılan Farad mertebesinde değere sahip kondansatörlerdir. Bu destek beslemelerinden hangisi kullanılacaksa entegrenin gerekli registerinde uygun değişiklik yapılmalıdır. Şu an için proje üzerinde süper kondansatör kullanımı ile çalışacak şekilde düzenlenmiş ve registeri buna göre ayarlanmıştır. (TRICKLE-CHARGE REGISTER)
Şekil-3 :İki farklı süper kondansatör. Soldaki 0.22F, sağdaki 1F. Bu projede sağdaki (1F) kullanıldı.

Şarj registeri çalışması için 1010xxxx şeklinde bir veri içermesi gerekir. Buradaki x'ler tarafımızdan ayarlanması gereken bitlerdir. Dolayısı ile 1010 bit grubu farklı bir değerde olursa diğer bitlerin durumu farketmeksizin şarj bölümü devre dışı kalır. Özellikle normal pil ile besleme durumunda bu bölüme dikkat etmek gerekir. Bit 0 ve Bit 1 şarj devresi üzerindeki seri bağlı direnç değerini kontrol dolayısı ile şarj akımını kontrol eder. Bit 2 ve Bit 3'de şarj devresi üzerinde seri bağlı diyodu kontrol eder ki bu besleme gerilimindeki diyot gerilim düşümünü kontrol eder.

Dolayısı ile şarj akımı;

I= (5Volt-diyot gerilim düşümü)/direnç değeri

ile hesaplanabilir.

DS1302 ilk besleme verildiğinde şarj registeri 01011100 şeklinde bir veri içerir. Yani şarj ünitesi kapalı.

Her ne kadar entegreyi ilk gördüğümde haberleşmesini i2c zannetsemde aslında 3 telli bağlantı biçimindedir. Aslında biraz SPI haberleşmesine benzeyen bir yapı. Tek farkla veri giriş ve çıkış tek bacak üzerinden yürütülmesi gerekiyor.

DS1302 hem saat ve takvim için registerler içerirken aynı zamanda destek pili tarafından beslenebilen RAM bölgesi bulunmaktadır. Bu işlemci devresi ile kullanılan sistemlerde bazı verilerin eeprom gibi saklanabilmesine izin verir. (0xC0 0xFD aralığındaki tek sayılar okuma, çift sayılar yazma için kullanılır. Ne de olsa bit o oku/yaz bitidir.). Tabii DS1302'de saklanan verinin ömrü destek beslemesinin kapasitesi ile sınırlıdır.

Normal durumda DS1302 destek beslemesine göre 0,2µA ile 1µA civarındadır.

DS1302 ilk devreye sokulduğunda yapılması gereken 2 önemli konu vardır. Birincisi 0x8F okuma ve 0x8E yazma adresindeki "WP" yazma koruması (7. bit) lojik 0 yapılarak sıfırlanmasıdır. Bu bit lojik 1 konumunda kaldığında DS1302'ye herhangi bir verinin yazılması mümkün değildir.

İkinci konu ise 0x81 okuma ve 0x80 yazma adresindeki saniye registerinin 7. bitinin lojik-0 yapılmasıdır. Bu bit lojik-0 yapılmazsa DS1302 saymaya başlamayacaktır.
Şekil-4 :DS1302 komutun bit yapısı.

Çip ile haberleşme CE bacağının lojik 1'e çekilmesi ile yapılır. Bunun anlamı CE lojik-0 iken haberleşme ile ilgili register sıfırlanır. Onun için bazı belgelerde CE bacağı RST (sıfırlama) olarak da geçmektedir.
Şekil-5 :DS1302 haberleşmede kullanılan sinyal şekli.

Çip ile haberleşmede ilk gönderilen bayt komut baytıdı. Basitçe incelersek bit 0 oku/yaz bitidir. Lojik-1 iken oku, Lojik-0 iken yaz anlamını taşır. Sonraki 5 bit adresleme bitidir. Yani okunmak istenen register veya RAM bölgesi için adresleme bilgisini taşır. Bit 6 okunacak bölgenin bitidir. RAM/Saat. Yani bit 6 lojik0 için saat, lojik 1 için RAM bölgesini işaret eder. Bit 7 sürekli sabit değer olarak Lojik 1 durumundadır.

OkuYazBit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0Aralık
0x810x80CHsaniye 10saniye 100-59
0x830x82dakika 10dakika 100-59
0x850x8412/240saat 10 (*)saat 100-23
0x870x8600gün 101-31
0x890x88000ay 10ay 11-12
0x8B0x8A00000hafta günü1-7
0x8D0x8Cyıl 10yıl 100-99
0x8F0x8EWP0101001-
0x910x90TCSTCSTCSTCSDSDSRSRS
Tablo2 :DS1302 Saat ve Takvim Registerleri.(*) işaretli yerde saat 12 saat modunda olduğu bit 5 AM/PM gösterimi için kullanılır. Saat aralığında 1-12 olur. (Ram bölümü ele alınmamıştır)

Yazma ve okuma işlemindeki saat sinyalinin durumu önemlidir. Yazma işleminde saat sinyalinin yükselen kenarında işlem yapılırken okuma işleminde saat sinyalinin inen kenarında işlem yapılır. Elbette CE bacağı lojik 1'de iken.

İlk okuma veya yazma bit 0'dan başlar ve sonraki bitler bu biti takip eder.


Devre
Şekil-6 :Yapılmış halde devre.

Devre basitçe Atmega8 işlemci olmak üzere, Saat bilgisi üreten bölüm DS1302, Saati gösteren LED ekran (6 adet 7 parçalı gösterime sahip) LED ekran sürücüsü ve besleme.

Kritik saat sinyali gerekmediği için işlemcinin üzerinde kristal kullanılmadan iç saat kaynağı kullanım yoluna gidildi.
Şekil-7 :LED ekranın bulunduğu kart. (Ön panel). Ledler yanıyormuş gibi görünsede sadece flaş ışığının yansıması

Devre üzerindeki kritik saat sinyali gerektiren tek bölüm olan DS1302 üzerine bağlı 32KHz kristal bu işlevi yerine getirir. Yapısına entegre şarj birimi ile kendisi için gereken destek beslemesi şarjını sağlar. Besleme için 1 F/5.5V değerinde süper kondansatör yeterli gelmektedir.
Şekil-8 :Devrenin değişik bir görünümü.

LED ekran ortak anot özellikli bir devre elemanıdır. Her ne kadar projede kırmızı olan LED ekran seçilsede isteğe bağlı renk tercih edilebilir. Bu durumda işlemci ile LED ekran arasında diren değerlerinin uygun şekilde değiştirilmesi yerinde olur.

Şekil-9 :Ana kartın alttan görünümü. Bazı hatlar tasarım hatasından dolayı kablo ile taşınması gerekti.

Şema
Devrenin işi götüren IC1 (Atmega8) ve onun bu devredeki yardımcısı konumundaki IC2 (DS1302) dir. Clk, I/O ve CE bağlantıları ile gerekli iletişim için gereken hatları oluşturur.

D1..D4 (3mm kırmızı LED) ikişerli grup halinde R1 ve R2 (680R ) direnç üzerinden sürülür. DIS1..DIS6 (JZ-5161) ortak LED ekranların parçaları R3...R9 (220R) dirençler üzerinden IC1(Atmega8) bağlanmakta, DIS1..DIS6 (JZ-5161) ortak uçları Q1...Q6 ( BC327) PNP transistörlerin konnektörlerine bağlanmaktadır. Q1...Q6 ( BC327) emetör uçları +5V hattına bağlıdır. Q1...Q6 (BC327) transistörlerin baz uçları R12...R17 (1k) dirençler üzerinden IC1 (Atmega8) bağlanmaktadır. Dolayısı ile bu bölüm LED ekranları sürmek ve saat, dakika, saniye verisinin gösterimi için kullanılır
.
IC2 (DS1302) 2. ve 3. bacaklarına XTL1 ( 32.768KHz) bir kristal bağlanarak saat entegresi için gereken saat sinyalini üretir. IC2 (DS1302) 8. bacak ile GND arasına C4 (1F) süper kondansatör bağlanmıştır. Bu eleman destek beslemesini depolamak ve gerektiğinde DS1302 beslemek için kullanılmaktadır.

D5 (2W10M) köprüsü IC3 (7805) , C7(100nF) ve C8 (10µF) kondansatörleri üzerinden devre için gereken +5V gerilimi sağlarlar.

IC1 (Atmega8) bağlı ISP konnektörü işlemcinin programlanması için kullanılır.

IC1'e (Atmega8) bağlı R10 ve R11 (10k) pullup dirençleri olarak işlemciye bağlanmış olup işlemciye bağlı S1 ve S2 butonlar saat ve dakika ayarı için kullanılmaktadır.

Geri kalan kondansatörler filtre amaçlı elemanlardır.
                                                              Şekil-10:Blok şeması

Şekil-11:Devre şeması

Devre Yapımı

Devre montajı açısından kritik bir durum yoktur. Görüldüğü gibi devre son derece sadedir.
Şekil-12:PCB şeması, yollar

Şekil-13:Kartların eleman yerleşimi.

Şekil-14:Kartların yolları birlikte üstteki eleman yerleşimi

Şekil-15:Kart çalışırken bir görünümü. Monte edilmiş ve saat ayarı yapılmış. Sadece butonlar takılı değil

Devre Elemanları
220RR3,R4,R5,R6,R7,R8,R9
680RRR1,R2
1KR12,R13,R14,R15,R16,R17
10KR10,R11
100nFC1,C2,C3,C7,C8
10µF/16VC5,C6
1F/5.5VC4
2W10M veya benzeriD5
3mm kırmızı LEDD1,D2,D3,D4
JZ-5161DIS1,DIS2,DIS3,DIS4,DIS5,DIS6
7805IC3
Atmega16IC1
DS1302IC2
BC327Q1,Q2,Q3,Q4,Q5,Q6
32.768KHz KristalXTL1
6 Header (ISP6)ISP
28 bacak entegre soketi-
8 bacak entegre soketi-
Bas bırak butonS1,S2
Besleme için 9V'luk adaptör unutulmamalıdır.

Devrenin Çalıştırılması


DS1302 üzerinde WP kaldırılması, registerlerin sıfırlanması ve CH bitinin sıfırlanması için devreye enerji vermeden saat ve dakika ayar butonları basılı halde iken devreye besleme verilir. Sonra butonlar bırakılır. Bu şekilde ilk başlatma işlemi yerine getirilmiş olur. Eğer bu noktada işlem başarılı ise saatin saniye göstergesi saymaya başlar.
Şekil-16:Deneme için akü kullanılabilir. Ama uzun süre kullanmaya gelmez.

Saat ayar butonunu kullarak saati ayarlıyor ve dakika ayar butonu kullanılarak da dakika ayarı yapılıyor. İlk etapta C4 kondansatörünün şarj olması zaman alacağından biraz beklemek gerekecektir. Şarj olduğunu voltmetre ile kondansatör uçlarından kontrol edilebilir.


Ekler:

Atmega8 hakkında bilgi için

"Atmega8 ve DS1302 ile LED ekranlı Masa Saati" projesi için gereken dosyalar

Bu devrenin yapım sorumluluğu size aittir. Devre yapıldı ve çalışıyor. K.A....



Hiç yorum yok:

Translate

Sayfalar

Etiketler

İzleyiciler