avatar_ete

Nokia 3310 Ekran ile Termometre

Başlatan ete, 04 Eylül 2011, 19:19:57

ete

Eski telefonlardan Nokia 3310 LCD ekranı ile hazılanmış bir termometre projesidir.
Bu proje aslında bir grafik ekranın nasıul kullanıldığına dair iyi bir örnektir aynı zamanda.
Bu Projeyide yapıp denedim. Halen evimde çalışmaktadır.

Ete

Hattuşa


zoptrik

#2
Ellerinize sağlık hocam kodlar benim için baya bir örnek teşkil edecek.
İzin verirseniz bir iki sorum olacak,
birincisi OSCCON=96 gibi bir kod kullanmışsınız tam olarak amacı nedir?
ikincisi lookup tablosunun kullanım amaçlarını internette ne kadar aradıysam bulamadım. Örnekler de farklılık teşkil ediyor. Sanırım biraz ayrıntılı bir konu. Mantığını açıklayabilir misiniz?
Teşekkürler...
DEHA; İMKANSIZDA MÜMKÜNÜ GÖREBİLMEK DEMEKTİR.GEMİLERİN KARADA DA YÜZEBİLECEĞİNİ SEZMEK, MEHMETLERDEN BIRINI "FATİH" YAPAR...!

Mucit23

Ben açıklayayım.
OSCCON Registeri 16F88 De dahili osc'nin frekansının ayarlandığı ve diğer osilatör kaynak seçimi gibi işlemlerin yapıldığı registerdir.
OSCCON=96 Değeri Binary olarak %01100000 değerine denk gelir. 16F88 in Datasheedine baktığımızda OSCCON registerinin 6-4. Bitleri İç osilatör frekans seçim bitleri olarak adlandırılmış.

bit 6-4 IRCF<2:0>: Internal RC Oscillator Frequency Select bits
000 = 31.25 kHz
001 = 125 kHz
010 = 250 kHz
011 = 500 kHz
100 = 1 MHz
101 = 2 MHz
110 = 4 MHz
111 = 8 MHz

Yukarıda IRCF bitlerinin verildiği değere göre iç oscnin çalıştığı frekans yazıyor. Dolayısıyla Biz OSCCON=96 dediğimizde IRCF bitlerine 110 değerini yüklemiş oluruz ve işlemcimiz 4Mhz de çalışır
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

zoptrik

Cok tesekkùr ederim. Devre isis simulasyonda benim bilgisayarda OSCCON hatasi vermisti fakat dùzgùn calisiyordu. Biraz da onun icin sormustum.
Tekrar tesekkùrler
iyi forumlar
DEHA; İMKANSIZDA MÜMKÜNÜ GÖREBİLMEK DEMEKTİR.GEMİLERİN KARADA DA YÜZEBİLECEĞİNİ SEZMEK, MEHMETLERDEN BIRINI "FATİH" YAPAR...!

zoptrik

Sayın ETE hocam;
LOOKUP komutuyla ilgili biraz bilgi verebilir misiniz?
DEHA; İMKANSIZDA MÜMKÜNÜ GÖREBİLMEK DEMEKTİR.GEMİLERİN KARADA DA YÜZEBİLECEĞİNİ SEZMEK, MEHMETLERDEN BIRINI "FATİH" YAPAR...!

ete

LOOKUP bir tablo yaratma ve bu tablodan index değişkeni değerine bağlı olarak değer alma komutudur.
ELinizde 10 adet sayı olsun; 11,12,13,14,15,16,17,18,19,20   Bir program içinde bu sayılarıda kullanacaksınız. Mesela 7 segment displayde sayı karekterlerini göstereceksin. Şayet Lookup olmasa idi bir sürü if satırı kullanmak zorunda kalacaktın.
Şimdi komuta bakalım,
AL:
LOOKUP , INDEX, [11,12,13,14,15,16,17,18,19,20 ], ALINAN:RETURN
Dkkat edersen komutta 2 adet değişken mevcut. Birisi başta yer alan İndex yani sıra değişkeni, sonda yer alan ise Tablodan alınan değerin yerleştirildiği ALINAN isimli değişken.
INDEX=0 :GOSUB AL dediğim zaman program AL alt programına gelecek ve index değeri sıfır olduğu için sıra numarası sıfır olan 11 saysını alıp ALINAN isimli değişkene yerleştirip dönecektir. Bu komut sonucunda ALINAN=11 olarak döner.

INDEX=3:GOSUB AL   dediğim zaman  14 sayısı alınıp ALINAN isimli değişkene yerleştirilip dönülecektir.
Şayet index değerini orada olan sayı toplamından daha büyük verirsen ALINAN=0 olarak döner.
Bu komut yalnızca 8 bitlik sayılarla çalışır. Karekterleride tablo altına alabilirsin.
LOOKUP INDEX,["DENEME YAZISIDIR"],ALINAN   şeklinde bir tablo yapabilirsin. Bu tablodanda index değişkenine bağlı olarak karekterler alınır ve ALINAN isimli değişkene atanır.  PBP da dizi (string) bu şekilde kullanılmaktadır.

Şayet 16 bitlik rakam yada karışık bir tablo kullanmak istersen Lookup2 komutunu kullanmanız gerekir. Şekil aynıdır ama bu komut diğerine göre 4 katı fazla hafıza kullanır dikkat etmek gerekir.

Ete

zoptrik

Yüreğinize sağlık hocam.
bir de bu CASE olayını açıklarsanız çok sevinirim. mesela  "select case harf" gibi bir komut kullanmışsınız. Anlamadığım yer tam olarak burası. ASCII tablosunda bazı karakterler var ve bunları doğrudan sayı ile ifade edebiliyoruz. Normal 16x2 LCD de de burada da kullanıyoruz. Alfanumerik LCD de mesela LCDOUT $fe,$c0,255 dediğimde mesela bar çıkıyor fakat buradaki lookup 1,[fatih],degisken dediğim zaman 1. karakterin ascii tablosundaki sayıyı mı değişkene atıyor? est32 arkadaşımız burada "select case değişken" gibi bir komutla örneğin "case "A"  ile direk 6 farklı değişkene harfin sütunlarını yazdırmış sizin kullanım amacınız ise çok farklı. Bunun ortak bir mantığı olmalı tam olarak sorum bu.
Şimdiden teşekkürler.
iyi forumlar...
DEHA; İMKANSIZDA MÜMKÜNÜ GÖREBİLMEK DEMEKTİR.GEMİLERİN KARADA DA YÜZEBİLECEĞİNİ SEZMEK, MEHMETLERDEN BIRINI "FATİH" YAPAR...!

Mucit23

#8
Select Case, Case XX ve End Select Komutları Lokup komutlarına farklıdır.

Lookup Komutunu Ete hocamız çok iyi anlatmış. Birçok işlemde kullanılan işleri kolaylaştıran bir komuttur.

Lookup Komutunda İndex değişkenin değerine göre Alınan değişkeine tablomuzdaki değerleri yüklüyorduk. Case olayında ise program Yinde İndex Değişkenin değerine göre farklı alt programlara gidip o alt programda yazdığımız komutları işlenir. İşte en büyük fark burada. Lookup komutunda farklı işlemler yapamıyoruz. Sadece bir değişkenin değerine göre başka bir değişkene tablodan değerler yükleyebiliyorduk. Case olayında ise index değerine göre o değere karşılık gelen alt programa işlemci gidip orada yazdığımız komutları işlenir.

Bir örnekle açıklayayım.
Yine İndex adında değişkenimiz olsun
Select Case index ; Bu komut ile Select case sorgulamasını başlatmış olduk
Case 0   ; Eğer index değeri 0 ise Case dan Case 1 komutları arasındaki yazılan komutları işler.
Komutlar...................
................................
..................................
...................................
Case 1   ; Eğer index değeri 1 ise Case dan Case 2 komutları arasındaki yazılan komutları işler.
Komutlar...................
................................
..........................
..............................
Case 2    ;Eğer index değeri 2 ise Case dan Case 3 komutları arasındaki yazılan komutları işler.
Komutlar...............
.........................
...........................
........................
Case 3
       .
       .
       .
       .
Case 28
       .
Case 29
       .
Case 30
       .
End Select ; Case sorgulamasının sonu

Genel olarak kullanım şekli yukarıdaki gibidir. Buradaki dikkat edilmese gereken nokta Aynı if sorgulamasının nasıl başlatıp Endif komutuyla sonlandırıyorsak buradada Select Case sorgulamasını başlatıp End Select Komutuyla sonlandırılması gerektiğidir. Bu yapılmazsa eğer zaten Derleyici programı derlemez uyarı verir.

Case 0, Case 1, Case 2 komutları arasına istenilen komutlar yazılabilir .Mesela Lookup Tablosundaki gibi kullanılmak istenirse Alınan=11 gibi komutlar veya daha fazla komutlar direk yazılabilir.

AL:
Select Case index
  Case 0
    Alınan=11
  Case 1
    Alınan=12
  Case 2
    Alınan=13
  Case 3
    Alınan=14
  Case 5
    Alınan=15
  Case 6
    Alınan=16
  Case 7
    Alınan=17
  Case 8
    Alınan=18
  Case 9
    Alınan=19
  Case 10
    Alınan=20
End Select
Return
     
Yukarıdaki komut Aşağıdaki lookup komutu kullanılarak yapılmış olanla aynı işi görür
AL:LOOKUP , INDEX, [11,12,13,14,15,16,17,18,19,20 ], ALINAN:RETURN
İki komut arasındaki Farkı yukarıda açıkladım

Umarım Açıklayıcı olmuştur.

Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

zoptrik

Çok teşekkür ederim. Mükemmel açıklama olmuş. Şimdi daha iyi anlıyorum herşeyi. Ben tamamen birlikte çalıştıklarını falan düşünmüştüm. İki ayrı kod olabileceklerini düşünememişim :D
Tekrar tekrar teşekkürler...
iyi forumlar...
DEHA; İMKANSIZDA MÜMKÜNÜ GÖREBİLMEK DEMEKTİR.GEMİLERİN KARADA DA YÜZEBİLECEĞİNİ SEZMEK, MEHMETLERDEN BIRINI "FATİH" YAPAR...!

ete

Select Case komutunda pek çok kişinin yanıldığı bir konu var onu açıklayayım yeri gelmiş iken.
İndex değişkeninin  sıra takip etmesi gerekmiyor.
Select Case X
Case 0
...
...
Case 4
...
...
Case 12
g,b, bir sıralamda komutu çalıştırır. Atlamalı giden index değerleri ilede komut çalışır demek istiyorum. Burada temel faktör index değişkeninin alacağı muhtemel değerlere göre case xx komutları verilir.

Ete

zoptrik

Teşekkürler Hocam. Ellerinize sağlık :D
iyi forumlar...
DEHA; İMKANSIZDA MÜMKÜNÜ GÖREBİLMEK DEMEKTİR.GEMİLERİN KARADA DA YÜZEBİLECEĞİNİ SEZMEK, MEHMETLERDEN BIRINI "FATİH" YAPAR...!

zoptrik

Bir ekleme de benden olsun. Microcode studio'nun örneklerinde
SELECT CASE x
  CASE 1
    y = 10
  CASE 2, 3
    y = 20
  CASE IS > 5
    y = 100
  CASE ELSE
    y = 0
END SELECT


gibi bir kod var. Dikkat ederseniz "CASE ELSE" gibi bir şey kullanmış. Bunu 3310 ekranında mesela yazdığımızın tanımlanmadığı yerler için kullanabiliriz diye düşündüm. CASE ELSE altına bir soru işareti tanımladım ve sayın @est32'nin yazdığı programa koydum. sonra da "select case" de olmayan sayılar gönderdim. sonuç resimdeki gibi.
iyi forumlar...
DEHA; İMKANSIZDA MÜMKÜNÜ GÖREBİLMEK DEMEKTİR.GEMİLERİN KARADA DA YÜZEBİLECEĞİNİ SEZMEK, MEHMETLERDEN BIRINI "FATİH" YAPAR...!

djtur

Ete hocam bende 2 adet laptop lcd si var.Acaba 3310 yerine onlardan birini nasıl kullanabilirim?Eğer denemek isterseniz tatil dönüşü size bir tanesini gönderebilirim.Teşekkürler

Mucit23

Laptop LCD sini kullanmanın öyle kolay olacağını sanmıyorum.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Powered by EzPortal