ds18b20 7 segde gösterimi

Başlatan baranekrem9, 26 Ocak 2014, 22:44:27

baranekrem9

Merhaba arkadaşlar ben daha önceden lcd de sıcaklık tarih gösterimini falan yapmıştım şimdi ds18b20  kullanarak 2 adet 7 seg ortak anot ile sıcaklık göstergesi yapacağım fakat daha önceden displayi cok az kullanmıştım o yüzden fazla bilgim yok kafamda şu soru var he diyelim sıcaklık 20 derece ben bu '2' ve '0' ayrı ayrı displaylere nasıl gönderebilirim bunula ilgili örnek yapılmıs bir proje veya izlemem gereken bir yol varmı arkadaslar

Herkese Kolay Gelsin.

ete

Öncelikle sıcaklığın displayde nasıl gösterileceğini öğrenmen gerekiyor. Bunun için iki metod kullanılır. Birincisi taramsız sistem. Her bir display bir shift registere bağlanır (74HC595) ve shift registerden hangi rakam bilgileri çıkıyor ise o display sürekli olarak onu gösterir. Shift register değerini değiştirirsen göstergede değişir. Buna örnek istersen benim saat projelerine bakabilirsin.
İkinci metod ise Taramalı sistemdir. Zaman paylaşımlı bir işlemdir bu. Açıklamalar Basic Dersleri Ders-13 de mevcut. Yinede biraz burada açıklama vereyim. İnsan gözünün aldatılması esasına dayanır işin temeli. İnsan gözü bir saniyede 25 defadan daha az değişen girsel bilgiyi algılayabilir. Ama fazlasını algılamaz. Bir displayi bir saniye içinde 25 defa veya daha fazla yakıp söndürürsen göz bunu algılamaz. Onu sürekli yanıyor zanneder. İşte bu özelliği kullanarak displayleri birim zaman içinde sıralı olarak yakıp söndürürüz. İki displayli sistemde her 1ms de bir önce birler hanesini yakıp 1ms bekletir, sonra onu söndürüp onlar hanesini yakıp 1 ms bekletir sonra tekrar birler hanesini derken bu işi sıralı olarak yaparsak göz her iki displayde kendi sayılarını sürekli yanık olarak görür. Bu alsında bir göz aldatmacasıdır ama işe yarar bir sistemdir.
Sistem basitçe şöyle kurulur. Her iki displayın segment uçları birleştirilip bir porta bağlanır. Displaylerin ortak uçları birer port pininden transistörle ayrı ayrı sürülür. Bu sisteme göre çalışma şeklide şöyledir.

Birler Hanesi değerini Portdan segmentlere ver. Bu işlemde hem birler hanesine hem onlar hanesine aynı bilgi gider teorik olarak. Ancak yalnızca birisini süreceğimiz için diğeri kapalı konumda beklemiş olur.
Birler hanesini süren transistörü aç ve böylece segmentlere verilen birler hanesi değerini displayda gör
1 ms bekle.
Birler hanesini süren transistörü kapat
Onlar hanesi bilgisini Port dan segmentlere ver.
Onlar hanesini süren transistörü aç. Böylece onlar hanesi bilgisi onlar hanesinde görülmüş olsun.
1 ms bekle
onlar hanesini süren transistörü kapat
tekrar an başa dönerek aynı işlemleri tekrarla.
Görüldüğü üzere bu iş tamda kesme ile düzenli olarak yapılacak cinsten bir iştir. Bu nedenle genelde 1 ms lik peryotlarla çalışan bir TMR0 kesme düzeneği kurulur. Kesme içinde yukarıda anlatılan işlemler yapılır ve kesmeden çıkılarak diğer işler halledilir.

http://etepic.com/index.php/topic,24.0.html

BAsic de bir sayının desimal hanelerini ayıran bir komut vardır. DIG (Yani Digit yada Türkçesi Hane) komutudur.
Bu komut SAYI DIG 0  seklinde kullanılır.  Burada SAYI hanelerini ayıracağımız değişken oluyor. DIG 0 ise hangi haneyi ayıracağımızı gösteriyor. Burada sıfır yani sağdan ilk hane yada birler hanesi anlamına geliyor.
Onlar hanesi için SAYI DIG 1, Yüzler hanesi için SAYI DIG 2 , varsa Binler hanesi için SAYI DIG 3 şeklinde komutlar kullanıyoruz.
Bunları daha rahat kullanabilmek için her birini bir başka değişkene atmak daha akıllıca olur. Örneğin BIRLER=SAYI DIG 0
şeklinde. Daha sonra bu BIRLER değişkenini istediğin yerde rahatlıkla kullanabilirsin.

Ete

Powered by EzPortal