

12F675 Ve Nokia Lcd İle Oda Termometresi (Proton Basic)
-
Devre tarafımdan tasarlanmış ve yapılmıştır. Başka bi elektronik forumunda da paylaştım bu devreyi, onun için c/p yapıyorum, başkasından çaldım sanmayın haa :D
Enerji tasarruflu ve düşük voltajlı olmaları nedeniyle nokia ekranlarını seviyorum.
Küçük ve taşınabilir pilli bir termometreye ihtiyacım olduğu için düşük maliyetli ve az malzemeli bir cihaz yapmak istedim. Aşağıda gördüğünüz gibi bir cihaz çıktı meydana. Bir devre yaparken ciddi bir takıntı yaşıyorum. Devre çok küçük olacak,az ve ucuz malzeme kullanılacak, en düşük işlemci seçilecek ve programında kod tasarrufu yapılarak en az bellek kullanılacak.
Devrenin birkaç özelliği;
-Devre her 5 dakikada bir DS18B20 sensörü ile sıcaklık ölçümü yapar. Bu süreyi koddan değiştirebilirsiniz ama pil ömrü için tavsiye etmem. Bu ölçüm sırasında 0.5-1 saniyelik süre için pilden en fazla 2mA akım çekilir. Çalışma anında ise pilden 400 mikro amper akım çekiliyor.
-12f675 işlemcisi 1KB belleğe sahip bir işlemci, bu 1024 byte belleğe programı sığdırabilmek için font tanımlamadım, yerine basit bir algoritma kullanarak font oluşturdum. Bu şekilde sensör okuma + sıcaklık hesaplaması, lcd haberleşmesi ve font oluşturmada kullanılan algoritma kısmı ile program 875 word kelime ile oluştu(1024-875=149 byte yer kaldı bellekte), başka bişey sığar mı bilmiyorum.
-devre eksi sıcaklık ölçmüyor, çünkü iç mekan için kullanıyorum. Yoksa ekranın düzenini baştan değiştirmek gerek.
-cihazı yeni yaptığım için uzun süredir deneyemiyorum bu nedenle üzerindeki cr2032 pil ne kadar dayanır bilemiyorum. Kullanılmadığı zaman arkasındaki switch anahtardan cihaz kapatılabilir.
DİKKAT EDİLMESİ GEREKEN BAZI NOKTALAR;
-Devrede kullanılan ekran kesinlikle 3310 ekranı değildir. 3310 ekranı 84x48 iken bu ekran 96x64 çözünürlüklü bir ekrandır bu nedenle 3310 ekranı kullanılamaz. Açıkçası bu ekranın hangi modele ait olduğunu ben de bilmiyorum ve merak ediyorum. Modelini öğrenirsem birkaç daha arayacağım. Bu konuda sizlerden cevap bekliyorum. 3310 ekran değil ama aynı pinlere ve özelliklere sahip bir üst model, sadece 96x64 piksel, yapacak olursanız lütfen buna dikkat edin, telefoncudan ona göre alın.
-Devreye dikkatli bakarsanız işlemcinin 5 numaralı pininin hemen önünde DS18B20'ye paralel 4K7 değerinde 805 kılıf SMD direnç var. Devrede yer sorunu olduğundan, daha doğrusu direç için devreyi büyütmek istemediğimden 1 adet SMD malzeme kullandım. Devreyi yapmak isteyen buna dikkat etsin.
-CR2032 ye ait pil yuvasının çizimi bana ait değil, fakat bu çizimi daha önce başka bir devremde de kullanmıştım ve onda sorun olmamıştı, bunda ise bacaklar tam denk gelmedi sorun yaşadım, sanırım piyasada pil yuvasının çeşitleri mevcut. Buna dikkat edin, gerekirse çizimde oynama yapın.
Şimdilik diyeceklerim bu kadar, olursa ekleme yaparım.
Programın bazı kısımları alıntı(sensör okuma ve lcd iletişim) ben yazmadım sadece küçük değişiklik yaptığım noktalar oldu, yoksa kataloglarını hatim etmek lazım, kolay iş değil.
Yapmak isteyen olursa kolay gelsin;PROJE DOSYALARI BURADA: http://s3.dosya.tc/server15/PlfRKg/termometre.rar.html
resimler;






Kaynak kod;
'**************************************************************** '* Name : UNTITLED.BAS * '* Author : [ESAT METİN ERDOĞAN] * '* Notice : Copyright (c) 2013 [İZİNSİZ KULLANMAK HARAMDIR] * '* : All Rights Reserved * '* Date : 08.12.2013 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** Device = 12F675 @ CONFIG_REQ @ __config MCLRE_OFF & CP_OFF & WDT_ON & INTRC_OSC_NOCLKOUT & CPD_OFF & BODEN_OFF & PWRTE_ON Xtal=4'OSCCAL: 48 'OSCCAL=48 CMCON=7 ANSEL=0 Symbol SCLK=GPIO.1 Symbol SDIN=GPIO.0 Symbol RST=GPIO.5 Symbol D_C=GPIO.4 Symbol DS=GPIO.2 TRISIO=0 GPIO=0 Dim I As Word,ARA As Byte,DIG_1 As Byte,DIG_0 As Byte,KSR As Byte Dim LCDDATA As Byte,POSX As Byte,POSY As Byte,SATIR As Byte,SUTUN As Byte Dim MESGUL As Byte,HAM As Word,ISI As Word,KSRT As Word DelayMS 500 GoSub LCD_AC GoSub LCD_SIL '************************************************************************************************ BASLA: Clear GoSub LCD_SIL GoSub DS_OKU ARA=ISI Dig 1:DIG_1=1:DIG_0=0:GoSub SEC ARA=ISI Dig 0:DIG_1=0:DIG_0=1:GoSub SEC ARA=KSRT:KSR=1:GoSub SEC SATIR=6:SUTUN=60:GoSub YOLLA'NOKTA Sleep 300 GoTo BASLA '*********************************************************************************************** SEC: Select ARA Case 1:GoSub BIR Case 2:GoSub IKI Case 3:GoSub UC Case 4:GoSub DORT Case 5:GoSub BES Case 6:GoSub ALTI Case 7:GoSub YEDI Case 8:GoSub SEKIZ Case 9:GoSub DOKUZ Case 0:GoSub SIFIR End Select Return '*********************************************************************************************** BIR: GoSub SOR SATIR=0:GoSub YOLLA SATIR=1:GoSub YOLLA SATIR=2:GoSub YOLLA SATIR=3:GoSub YOLLA SATIR=4:GoSub YOLLA SATIR=5:GoSub YOLLA SATIR=6:GoSub YOLLA Return '*********************************************************************************************** IKI: GoSub SOR SATIR=0:GoSub TEKRAR_8 SATIR=1:GoSub YOLLA SATIR=2:GoSub YOLLA GoSub SOR SATIR=3:GoSub TEKRAR_8 GoSub SOR SATIR=4:GoSub YOLLA SATIR=5:GoSub YOLLA SATIR=6:GoSub TEKRAR_8 Return '*********************************************************************************************** UC: GoSub SOR SATIR=0:GoSub TEKRAR_8 SATIR=1:GoSub YOLLA SATIR=2:GoSub YOLLA GoSub SOR SATIR=3:GoSub TEKRAR_8 SATIR=4:GoSub YOLLA SATIR=5:GoSub YOLLA GoSub SOR SATIR=6:GoSub TEKRAR_8 Return '*********************************************************************************************** DORT: GoSub SOR SATIR=0:GoSub TEKRAR_16 GoSub SOR SATIR=1:GoSub TEKRAR_16 GoSub SOR SATIR=2:GoSub TEKRAR_16 GoSub SOR SATIR=3:GoSub TEKRAR_8 SATIR=4:GoSub YOLLA SATIR=5:GoSub YOLLA SATIR=6:GoSub YOLLA Return '*********************************************************************************************** BES: GoSub SOR SATIR=0:GoSub TEKRAR_8 GoSub SOR SATIR=1:GoSub YOLLA SATIR=2:GoSub YOLLA SATIR=3:GoSub TEKRAR_8 SATIR=4:GoSub YOLLA SATIR=5:GoSub YOLLA GoSub SOR SATIR=6:GoSub TEKRAR_8 Return '*********************************************************************************************** ALTI: GoSub SOR SATIR=0:GoSub TEKRAR_8 GoSub SOR SATIR=1:GoSub YOLLA SATIR=2:GoSub YOLLA SATIR=3:GoSub TEKRAR_8 GoSub SOR SATIR=4:GoSub TEKRAR_16 GoSub SOR SATIR=5:GoSub TEKRAR_16 GoSub SOR SATIR=6:GoSub TEKRAR_8 Return '*********************************************************************************************** YEDI: GoSub SOR SATIR=0:GoSub TEKRAR_8 SATIR=1:GoSub YOLLA SATIR=2:GoSub YOLLA SATIR=3:GoSub YOLLA SATIR=4:GoSub YOLLA SATIR=5:GoSub YOLLA SATIR=6:GoSub YOLLA Return '*********************************************************************************************** SEKIZ: GoSub SOR SATIR=0:GoSub TEKRAR_8 GoSub SOR SATIR=1:GoSub TEKRAR_16 GoSub SOR SATIR=2:GoSub TEKRAR_16 GoSub SOR SATIR=3:GoSub TEKRAR_8 GoSub SOR SATIR=4:GoSub TEKRAR_16 GoSub SOR SATIR=5:GoSub TEKRAR_16 GoSub SOR SATIR=6:GoSub TEKRAR_8 Return '*********************************************************************************************** DOKUZ: GoSub SOR SATIR=0:GoSub TEKRAR_8 GoSub SOR SATIR=1:GoSub TEKRAR_16 GoSub SOR SATIR=2:GoSub TEKRAR_16 GoSub SOR SATIR=3:GoSub TEKRAR_8 SATIR=4:GoSub YOLLA SATIR=5:GoSub YOLLA GoSub SOR SATIR=6:GoSub TEKRAR_8 Return '*********************************************************************************************** SIFIR: GoSub SOR SATIR=0:GoSub TEKRAR_8 GoSub SOR SATIR=1:GoSub TEKRAR_16 GoSub SOR SATIR=2:GoSub TEKRAR_16 GoSub SOR SATIR=3:GoSub TEKRAR_16 GoSub SOR SATIR=4:GoSub TEKRAR_16 GoSub SOR SATIR=5:GoSub TEKRAR_16 GoSub SOR SATIR=6:GoSub TEKRAR_8 Return '*********************************************************************************************** TEKRAR_8: GoSub YOLLA:SUTUN=SUTUN+8:GoSub YOLLA:SUTUN=SUTUN+8:GoSub YOLLA Return '*********************************************************************************************** TEKRAR_16: GoSub YOLLA:SUTUN=SUTUN+16:GoSub YOLLA Return '*********************************************************************************************** SOR: SUTUN=0 If DIG_0=1 Then SUTUN=SUTUN+32 If KSR=1 Then SUTUN=SUTUN+40 Return '*********************************************************************************************** DS_OKU: OWrite DS, 1, [$CC, $44] DelayMS 750 OYALAN: ORead DS, 4, [MESGUL] If MESGUL = 0 Then OYALAN OWrite DS, 1, [$CC, $BE] ORead DS, 2, [HAM.LowByte, HAM.HighByte] ISI=HAM/16 KSRT=ISI*16 KSRT=((HAM-KSRT)*10)/16 Return '*********************************************************************************************** YOLLA: POSX=SUTUN:POSY=SATIR:GoSub LCD_XY_VER:D_C=1 SHOut SDIN,SCLK,1,[255,255,255,255,255,255,255,255] Return '*********************************************************************************************** LCD_YAZ: SHOut SDIN,SCLK,1,[LCDDATA] Return '************************************************************************************************ LCD_SIL: POSX=0:POSY=0:GoSub LCD_XY_VER D_C=1 For I=1 To 500'EKRANINIZ 96*64 İSE BURAYI 500 YAP//84*48 İSE 252 LCDDATA=0:GoSub LCD_YAZ '1. yarı siliniyor LCDDATA=0:GoSub LCD_YAZ '2. yarı siliniyor Next Return '************************************************************************************************ LCD_XY_VER: D_C=0 LCDDATA=%01000000 | POSY GoSub LCD_YAZ LCDDATA=%10000000 | POSX GoSub LCD_YAZ D_C=1 Return '************************************************************************************************ LCD_AC: RST=0 DelayMS 10 RST=1 D_C=0 ' RESET LCD LCDDATA= $21: GoSub LCD_YAZ ' LCD EXTENDED COMMANDS LCDDATA= $b0: GoSub LCD_YAZ ' SET LCD Vop (CONTRAST) LCDDATA= $06: GoSub LCD_YAZ ' SET TEMP COEFFICENT LCDDATA= %00010101: GoSub LCD_YAZ ' LCD BIAS MODE LCDDATA= $20: GoSub LCD_YAZ ' LCD STANDARD COMMANDS LCDDATA= $0c: GoSub LCD_YAZ ' LCD IN NORMAL MODE Return '************************************************************************************************ End -
bomba olmus
-
eline sağlık birader güzel olmuş
-
güzel olmuş eline sağlık, bunu biraz daha geliştir bence, mesela alarm kurulabilsin, atıyorum sıcaklık 20 derecenin altına düştüğünde kombiyi çalıştırsın ve 25 e çıktığında kapatsın.. tabi o kendisi ayar yapıyor ama benim kast ettiğim direk müdahale değil bir röle koyarak bu işi yaptırman, bunu da herhangi bir analog kazanlanlar olan dairede kullanabilirsin ya da yangın alarmı gibi bi şey olabilr v.s.
-
Bir elektronikçi olarak şu kadarını söyleyebilirim, gerçekten mükemmel çalışmışsın üstad, özenerek işin tekniğini sömürerek :D
Kod kısmına gelince de, hangimiz öyle kodlamıyoruz ki :D :D ben picbasic teyim hala :D
başarılarının devamını dilerim.
-
hocam güzel çalışma olmuş tebrikler. kullandığın ekran 1100 ekranı :)
-
unbalanced
Söylediğin şeyi tembellikten yapmıyorum. düşüncem var aslında. Bir el kumandası olacak pilli ve üzerinde vericisi olan, istediğim odaya götüreceğim oradaki ısıya göre ve ayarladığım sıcaklıklar arasında kombiyi kontrol edecek. Ama bazı sorunlar var onları da düşünüyorum. Sistem pilli olacak(prize takıldığında cihaazdaki ısı artışı üzerindeki sensörü etkiliyor) ekran da buna göre tasarruflu olacak, verici pille çalışabilecek kadar düşük voltajlı olacak, ister sıcaklığa göre istenirse belli saat aralıkları ile açılıp kapanacak, işlemci de bunlara uygun falan falan...
---ALPER---Pic basicle proton neredeyse aynı, yaklaşık %80 lik benzerlik var. Sadece protonda bazı kart okuyucular, program belleğini yazma silme, grafik ekran zart zurt şeyler var ve pic basic protona göre daha kararlı. Proton sanırım crack yüzünden sorun çıkarıyor ve bazı aptal hatalar yapıyor.
Pic basicten istediğin anda protona geçebilirsin, alışman 1-2 gününü alır, örneğin picbasicteki SHIFTOUT komutu protonda SHOUT şeklinde, bazı komutlar bunun gibi. Takıldığın yerde manueli açar bakarsın.
cicoszYok hocam 1100 değil bu ekran, ama 1100 dan daha alt model telefonlardan birine ait. 1100 ekranı şunlar: https://www.google.com.tr/search?q=nokia+1100+lcd&client=firefox-a&hs=tf2&rls=org.mozilla:tr:official&tbm=isch&tbo=u&source=univ&sa=X&ei=ZEzFUqzfEoW24ATl54HADg&ved=0CCsQsAQ&biw=1680&bih=946
-
Hocam wdt neden açık acaba ? wdt yüzünden programda kesme sorunu olmicakmı ?
-
Dos_Attach bunu yazdı
Hocam wdt neden açık acaba ? wdt yüzünden programda kesme sorunu olmicakmı ?
Hocam başla etiketi dahilinde
SLEEP 300
komutu var. Bu komut enerji tasarrufu için işlemciyi 300 saniye yani 5 dakika uykuya sokuyor. İşlemcinin 5 dakika sonunda uykudan uyanabilmesi için ya reset atılmalı, ya dış kesme sinyali verilmeli, ya timer kesmesine gitmeli ya da WDT ile uyandırılmalıdır. Ben burada sadece WDT ile uyandırmayı kullandım. zaten programda SLEEP komutunu kullandın ve derleyiciye sigorta ayarında WDT OFF gösterdysen derleyici ingilizce olarak "WDT KAPALI, PİC ASLA UYANAMAYACAK" diye uyarı veriyor derleme sonrasında.
-
antivir-US bunu yazdıDos_Attach bunu yazdı
Hocam wdt neden açık acaba ? wdt yüzünden programda kesme sorunu olmicakmı ?
Hocam başla etiketi dahilinde
SLEEP 300
komutu var. Bu komut enerji tasarrufu için işlemciyi 300 saniye yani 5 dakika uykuya sokuyor. İşlemcinin 5 dakika sonunda uykudan uyanabilmesi için ya reset atılmalı, ya dış kesme sinyali verilmeli, ya timer kesmesine gitmeli ya da WDT ile uyandırılmalıdır. Ben burada sadece WDT ile uyandırmayı kullandım. zaten programda SLEEP komutunu kullandın ve derleyiciye sigorta ayarında WDT OFF gösterdysen derleyici ingilizce olarak "WDT KAPALI, PİC ASLA UYANAMAYACAK" diye uyarı veriyor derleme sonrasında.
Çok teşekkür ederim hocam aydınlattığın için. Projede çok güzel olmuş eline sağlık.