12f675 ve nokia lcd ile oda termometresi (12F675 & 3310 LCD THERMOMETER)

Başlatan est32, 02 Ocak 2014, 00:17:58

est32

MERHABA,
PROGRAM 3310 LCD YE GÖRE YENİDEN DÜZENLENMİŞTİR.

******************************************************************
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;

-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. ŞU AN AYNI 2 KALEM PİL İLE YAZ AYLARINDAN BU YANA SORUNSUZ KULLANIYORUM.

Ş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;

program;
'****************************************************************
'*  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
OPTION_REG=%11001111
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 Byte,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

Clrwdt
DelayMS 500
Clrwdt
GoSub DS_OKU
GoSub LCD_AC
GoSub LCD_SIL
Clrwdt
'************************************************************************************************
BASLA:
Clear
GoSub DS_OKU
Clrwdt
GoSub LCD_SIL


        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
       
        POSX=54:POSY=5'NOKTA AYARLAMALARI
        For I=1 To 4
        GoSub LCD_XY_VER:D_C=1
        LCDDATA=63
        GoSub LCD_YAZ'NOKTA
        POSX=POSX+1
        Next
       
        GPIO=%00100100
        Sleep 300' 5 DK UYU

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
                SUTUN=SUTUN+8
        SATIR=0:GoSub YOLLA
        SATIR=1:GoSub YOLLA
        SATIR=2:GoSub YOLLA
        SATIR=3:GoSub YOLLA
        SATIR=4:GoSub YOLLA
                                   
Return
'***********************************************************************************************
IKI:
                GoSub SOR
        SATIR=0:GoSub TEKRAR_8
        SATIR=1:GoSub YOLLA
                GoSub SOR
        SATIR=2:GoSub TEKRAR_8
                GoSub SOR
        SATIR=3:GoSub YOLLA
                GoSub SOR
        SATIR=4:GoSub TEKRAR_8
           
Return
'***********************************************************************************************
UC:
                GoSub SOR
        SATIR=0:GoSub TEKRAR_8
        SATIR=1:GoSub YOLLA
                GoSub SOR
        SATIR=2:GoSub TEKRAR_8
        SATIR=3:GoSub YOLLA
                GoSub SOR
        SATIR=4: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_8
        SATIR=3:GoSub YOLLA
        SATIR=4:GoSub YOLLA
       
Return
'***********************************************************************************************
BES:
                GoSub SOR
        SATIR=0:GoSub TEKRAR_8
                GoSub SOR
        SATIR=1:GoSub YOLLA
                GoSub SOR
        SATIR=2:GoSub TEKRAR_8
        SATIR=3:GoSub YOLLA
                GoSub SOR
        SATIR=4:GoSub TEKRAR_8

Return
'***********************************************************************************************
ALTI:
                GoSub SOR
        SATIR=0:GoSub TEKRAR_8
                GoSub SOR
        SATIR=1:GoSub YOLLA
                GoSub SOR
        SATIR=2:GoSub TEKRAR_8
                GoSub SOR
        SATIR=3:GoSub TEKRAR_16
                GoSub SOR
        SATIR=4: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
       
Return
'***********************************************************************************************
SEKIZ:
                GoSub SOR
        SATIR=0:GoSub TEKRAR_8
                GoSub SOR
        SATIR=1:GoSub TEKRAR_16
                GoSub SOR
        SATIR=2:GoSub TEKRAR_8
                GoSub SOR
        SATIR=3:GoSub TEKRAR_16
                GoSub SOR
        SATIR=4: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_8
        SATIR=3:GoSub YOLLA
                GoSub SOR
        SATIR=4: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_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+28
        If KSR=1 Then SUTUN=SUTUN+32     
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 252'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 

ete

Güzel proje tebrik ederim. Küçük dev diye bir tabir vardır. Boyutlar küçük ama rakamlar en büyük olmuş. Tek kusuru rakam tasarımın. Dot matriks de 1 rakamı matriksin ortasında olacak şekilde tasarlananilir. Ben dahil herkesin bu konuda 7 segmentdeki gibi rakamı sağa yada sola yaslama kusuru var.  Sende sola yaslamışsın. Ayrıca rakamlar çok köşeli olmuş köşeleri biraz daha yumuşatsan daha güzel olabilirdi.
Bazıları bu tip rakamları seviyor. Sende seviyorsan rakam yorumumu geri alıyorum.

Benzer ama farklı ekran tasarımlı bir projede benim vardı. 2 adet kalem pil ile yaklaşık 2 ay çalışabiliyor maalesef. Yinede epeyce uzun bir süre sayılır.

Ete

Mucit23

Tebrikler Güzel bir proje olmuş. Fakat ben pille çalışan cihazlarda pic'lerin pil tüketimi açısından pek verimli olmayacağı kanısındayım. Bence  bir pille en az 6 ay çalışabilmeli
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

est32

Çok teşekkür ederim.
Evet 1 rakamı kusurlu. Bunu ben de ortaya almaya çalıştım ve bir yöntem denedim, diğer rakamlar da kayınca başarısız oldum ve başka deneme yapmadan bıraktım.
Bu proje ile tam olarak adam akıllı uğraşamadım, hep yarım yamalak parça parça çok uzun sürede yaptım bu nedenle de kabak tadı verdi ve bigün başına geçip yeter artık bitsin dedim ve bitirdim. Bu bıkkınlık yüzünden de bu kusurun üzerine bi daha gitmedim. hatta bu yazıyı yazarken aklıma bir yöntem daha geldi, ilk fırsatta onu da deneyim bari.

Rakamlarım mecburen köşeli oldu. Bellek az olduğu için font tanımlamadım, o zaman bellek yetmezdi. Ben de rakamları 8*8 pixellik karelerden oluşturdum. Bu nedenle rakamlar köşeli oldu, bazı rakamlar(1-4-7-8) benim de gözüme batıyor ama mecburen öyle oldu.
Dediğiniz gibi 2 kalem pil ile 2 ay gidiyorsa bu hiç dayanmaz o zaman. Zaten piyasada hap pil türünde beklememiş taze pil bulmak zor, öyle ise ömrü kısa olacak demektir, dolayısıyla ben de egomu tatmin etmiş oldum bu devre ile :)
Ya da okulundan ödev alan birine belki ilham kaynağı olur.

Ben avr ve picten başka bir işlemci denemediğim için tasarruf konusunda bişey diyemiyorum ama pic avr'ye göre daha az akım çekiyor, forumlardan okumuştum. Bu nedenle pilli uygulamada pic'i seçtim tabii.

Powered by EzPortal