16f876 termometre ıç dış ısı ayarlı

Başlatan recebcolak, 20 Şubat 2008, 21:53:34

recebcolak

s.a.
arkadaşlar bu kodlardaki termometre devresi 2 adet ısı gösteriyor bennim sizlerden bir riçam var bu devrede ısıyı ayarlıyorsunuz ve ısı ayarladıgınız ısıya gelince rölleyi aktif yapıyor ama devrenin enerjisini kestigimizde ayarladıgımız ısı sıfırlanıyor ayarladıgımız ısıyı nasıl kayıt edebilirim yardım edermisiniz teşekkürler.
devre şemasını ugraştım ama bırakamadım

proteus similasyonu bas hex dosyası
http://rapidshare.com/files/93495750/termometre___305___d__305___351____305_s__305__ayrl__305_.rar.html



[code]
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2006 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 08.07.2006                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Include "MODEDEFS.BAS"      ' Include Shiftin/out modes

trisa=%00111000
trisb=0
trisc=%00000000
trisd=%11111111
ADCON1 = %10000010    
 

 
ON INTERRUPT GoTo KESME   'kesme oluşursa KESME adlı etikete git.
OPTION_REG=%10000101   'Pull up dirençleri İPTAL- Bölme oranı 1/64.
INTCON=%10100000  'Kesmeler aktif ve TMR0 kesmesi aktif
TMR0=0
ADCON1=7
ON INTERRUPT GoTo KESME   'kesme oluşursa KESME adlı etikete git.
OPTION_REG=%10000101   'Pull up dirençleri İPTAL- Bölme oranı 1/64.
INTCON=%10100000  'Kesmeler aktif ve TMR0 kesmesi aktif
TMR0=0
ADCON1=7
data @$40
MEM         var      byte
ONLAR      var      BYTE
BIRLER      var     BYTE
SAYAC       var      BYTE






Comm_Pin     var     Portd.2     ' One-wire Data-Pin "DQ" PortB.0 da
Busy         var     BIT         ' Busy Status-Bit
Float        var      WORD        ' Holds remainder for + temp C display
SIGN         var      BYTE
SIGN_BITI    var      HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
NEGAT_ISI    CON    1
HAM          var        WORD        ' Sensör HAM okuma değeri
ISI          var     WORD        ' Hesaplanmış ISI değeri
TEMP         var    BYTE         ' Div32 bit hesap için geçici değişken

Comm_Pin0    var        Portd.3     ' One-wire Data-Pin "DQ" PortB.0 da
Busy0        var      BIT         ' Busy Status-Bit
Float0        var      WORD        ' Holds remainder for + temp C display
SIGN0         var     BYTE
SIGN_BITI0   var    HAM0.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
NEGAT_ISI0     CON      1
HAM0          var     WORD        ' Sensör HAM okuma değeri
ISI0          var     WORD        ' Hesaplanmış ISI değeri
TEMP0         var     BYTE         ' Div32 bit hesap için geçici değişken
ICISISAYI     var     BYTE
DISISISAYI     var    BYTE
a           var      byte
x           var      byte
sayi        var      byte
SAYI1       var      byte
Y           var      BYTE
POZ         var      BYTE
Z           var      WORD

symbol  SEC=PORTA.3  
SYMBOL  ASAGI=PORTA.5
SYMBOL  YUKARI=PORTA.4
CLEAR
PAUSE 20


PORTB=0
   
   BAK:    
       WHILE SEC=0
       WEND      
       
   
EKRAN0:  
       POZ=0

       if SEC=0 THEN BAK1
       IF Y=2 THEN
       Y=0
       GOTO EKRAN1
       ENDIF              
   PORTC=%11111101      
   PORTB=%00110000'I
   Pause 1
   PORTC=%11111011
   PORTB=%00111001'C
   Pause 1
   PORTC=%11110111
   PORTB=%01000000'-
   Pause 1
   PORTC=%11101111         
   PORTB=%00110000'I
   Pause 1
   PORTC=%11011111
   PORTB=%01101101'S
   Pause 1
   PORTC=%10111111
   PORTB=%00000110'I 2
   Pause 1  
 
goto EKRAN0

EKRAN1:
       POZ=0
       IF ISI0>ICISIsayi then   HIGH PORTD.0
       IF ISI0=<ICISIsayi then   LOW PORTD.0
       gosub ICISI
       if SEC=0 THEN BAK1
       IF Y=5 THEN
       Y=0
       GOTO EKRAN2
       ENDIF  
   
       
       x= SIGN0     : gosub al: portc=%11111101: portb=sayi
       pause 2
       x= ISI0 DIG 1: gosub al: portc=%11111011: portb=sayi
       pause 2
       x= ISI0 DIG 0: gosub al: portc=%11110111: portb=sayi
       pause 2
       x= 10        : gosub al: portc=%11101111: portb=sayi
       pause 2
       x= 11        : gosub al: portc=%11011111: portb=sayi
       pause 2
       

 goto  EKRAN1
 
  EKRAN2:  
       POZ=0
       if SEC=0 THEN BAK
       IF Y=2 THEN
       Y=0
       GOTO EKRAN3
       ENDIF
   PORTC=%11111110   
   PORTB=%01011110'd
   Pause 1                  
   PORTC=%11111101   
   PORTB=%00110000'I
   Pause 1
   PORTC=%11111011   
   PORTB=%01101101'S
   Pause 1
   PORTC=%11110111
   PORTB=%01000000'-
   Pause 1
   PORTC=%11101111   
   PORTB=%00110000'I
   Pause 1
   PORTC=%11011111
   PORTB=%01101101'S
   Pause 1
   PORTC=%10111111
   PORTB=%00000110'I 2
   Pause 1
     
goto EKRAN2

  EKRAN3:
       
         POZ=0
       IF ISI>DISISIsayi then   HIGH PORTD.1
       IF ISI=<DISISIsayi then   LOW PORTD.1
       gosub DISISI
       if SEC=0 THEN BAK
       IF Y=5 THEN
       Y=0
       GOTO EKRAN0
       ENDIF
   
         
       x= SIGN     : gosub al: portc=%11111101: portb=sayi
       pause 2
       x= ISI DIG 1: gosub al: portc=%11111011: portb=sayi
       pause 2
       x= ISI DIG 0: gosub al: portc=%11110111: portb=sayi
       pause 2
       x= 10        : gosub al: portc=%11101111: portb=sayi
       pause 2
       x= 11        : gosub al: portc=%11011111: portb=sayi
       pause 2
       
 goto  EKRAN3
 


 
'----------------ISI SENSÖR OKUMA BÖLÜMÜ --------------------------------
ICISI:


'-----------------DİKKAT İSİS'de BU SATIR AKTİF EDİLECEK----------------------
         ;ham=$fe6e:Gosub hesapla:return 'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK
'------------------------------------------------------------------------------
 
          OWOUT   Comm_Pin0, 1, [$CC, $44]' ISI değerini oku
Bekle:
          OWIN    Comm_Pin0, 4, [Busy0]    ' Busy değerini oku
          IF      Busy0 = 0 THEN devam  ' hala meşgulmü? , evet ise goto Bekle..!
devam:
          OWOUT   Comm_Pin0, 1, [$CC, $BE]' scratchpad memory oku
          OWIN    Comm_Pin0, 2, [HAM0.Lowbyte, HAM0.Highbyte]' İki byte oku ve okumayı bitir.
          GOSUB   Hesapla
          RETURN
   
Hesapla:                 ' Ham değerden Santigrat derece hesabı
   Sign0  = 13
   IF SIGN_BITI0 = NEGAT_ISI0 THEN
      Sign0   = 12  
      temp0=($ffff-ham0+1)*625
      ISI0  = DIV32 10
      GOTO GEC  
   endif
   TEMP0 = 625 * (HAM0+1)       '
   ISI0 = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
   FLOAT0 = (ISI0 //1000)/100
   ISI0=(ISI0/1000)
   

  RETURN    

 
   
   
   
   
 '----------------ISI SENSÖR OKUMA BÖLÜMÜ --------------------------------
DISISI:
'-----------------DİKKAT İSİS'de BU SATIR AKTİF EDİLECEK----------------------
         ;ham=$fe6e:Gosub hesapla:return 'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK
'------------------------------------------------------------------------------
 
          OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle1:
          OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
          IF      Busy= 0 THEN devam1  ' hala meşgulmü? , evet ise goto Bekle..!
devam1:
          OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
          OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
          GOSUB   Hesapla1
          RETURN
   
Hesapla1:                 ' Ham değerden Santigrat derece hesabı
   Sign  = 13
   IF SIGN_BITI = NEGAT_ISI THEN
      Sign   = 12  
      temp=($ffff-ham+1)*625
      ISI  = DIV32 10
      GOTO GEC1  
   endif
   TEMP = 625 * (HAM+1)       '
   ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC1:
   FLOAT = (ISI //1000)/100
   ISI=(ISI/1000)
   RETURN
     
                             

           
             
    ;          0          1        2         3         4         5         6         7         8        9         10 *      11C      12eksi    13artı
AL:LOOKUP X,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111101,%00000111,%01111111,%01101111,%01100011,%00111001,%01000000,%00000000],sayi :RETURN



                     
       
BAK1:
       WHILE SEC=0
       WEND

     
ICISIAYAR:  
       POZ=1
       if SEC=0 THEN BAK0
       IF ASAGI=0  THEN ICISISAYI=ICISISAYI-1 :pause 70
       IF YUKARI=0 THEN ICISISAYI=ICISISAYI+1 :pause 70
       IF ICISISAYI=80 THEN ICISISAYI=0
       
       PORTC=%11111110         
      PORTB=%00110000'I
      Pause 4
       PORTC=%11111101         
      PORTB=%00111001'C
      Pause 4
   
       x= ICISISAYI DIG 1: gosub al: portc=%10111111: portb=sayi
       Pause 4
       x= ICISISAYI DIG 0: gosub al: portc=%01111111   : portb=sayi
       Pause 4
GOTO  ICISIAYAR

BAK0:
       WHILE SEC=0
       WEND
       

DISISIAYAR:  
       POZ=1
       if SEC=0 THEN BAK
       IF ASAGI=0  THEN DISISISAYI=DISISISAYI-1:pause 70
       IF YUKARI=0 THEN DISISISAYI=DISISISAYI+1:pause 70
       IF DISISISAYI=65 THEN DISISISAYI=0    
       PORTC=%11111110      
      PORTB=%01011110'd
      Pause 4
       PORTC=%11111101      
      PORTB=%00110000'I
      Pause 4
       PORTC=%11111011      
      PORTB=%01101101'S
      Pause 4
     
       x= DISISISAYI DIG 1: gosub al: portc=%10111111: portb=sayi
       Pause 4
       x= DISISISAYI DIG 0: gosub al: portc=%01111111   : portb=sayi
       Pause 4
GOTO    DISISIAYAR

       


       
           
DISABLE
KESME:
      IF POZ=1 then CIK
     SAYAC=SAYAC+1  'kesme sayacı  1 sn= 61(sayac) x 256 (Tmr0) x 64 (bölme)
     if sayac<=30 then
     a=1
     else
     a=0
     endif
     IF SAYAC=61 then  '61 adet kesme olunca 1 sn. süre geçiyor.(999424 us)
        SAYAC=0        'sayaç sıfırlanıyor
        Y=Y+1
    ; GOSUB ZAMAN_OKU
     ENDIF
CIK:     INTCON.2=0        'TMR0 Kesme bayrağı sıfırlanıyor
        RESUME
        ENABLE
       
END[code]
ben herkesi sevdim bilmiyorum sevildimmi?

erkan614

https://www.picproje.org/index.php/topic,16062&highlight=
bu başlıkta enerji kesildiğinde eeeprom yazımıyla alakalı bişiler yazılmıştı
bunxa benzer bi kaçbaşlık daha olcak bi arama yaparsan bulursun sanırım.

recebcolak

ben herkesi sevdim bilmiyorum sevildimmi?

recebcolak

arkadaşlar bu devreye bir türlü eproma yazmayı ekleyemedim çok araştırdım örneklerbuldum ama yapamadım yardım ederseniz çok sevinirim teşekkürler.
ben herkesi sevdim bilmiyorum sevildimmi?

sahinler64

bir fikir ama aklına yatarsa.elektrik kesilmelerinden etkilenmemek için bir adet pil kullan.sadece pic'beslemek için.eprom işi biraz karışık.aslında karışık değil ama işin iç kısmını öğrenmek lazım.en kolayı pil ile çözüm.hani şu bilgisayarın bioslarında bulunan pillerden.sonuçta pic'in çalışması için gerekli enerjiyi sağlar.yani elektrik kesildiği an pil devreye girecek ama sadece pic çalışacak diğer alıcılar stop edecek.
dediğim gibi sadece bir fikir uyarsa.
SAYGILARIMLA...

recebcolak

yaptım ustalar sagolun.
ICISISAYI     var    byte
DISISISAYI    var    byte
bu degişkenleri

ICISISAYI     var   word
DISISISAYI    var    word

olarak degiştidim
;bunları programın başına ekledim
PAUSE 20
       READ 11,ICISISAYI .highbyte
       READ 10,ICISISAYI .LOWbyte
       PAUSE 20
       READ 13,DISISISAYI .highbyte
       READ 14,DISISISAYI .LOWbyte
       PAUSE 20


ayar kısmınuda böyle yaptım

ICISIAYAR:  
      POZ=1
       if SEC=0 THEN BAK0
       READ 11,ICISISAYI.highbyte
       READ 10,ICISISAYI.LOWbyte
       IF ASAGI=0  THEN ICISISAYI=ICISISAYI-1 :pause 70
       IF YUKARI=0 THEN ICISISAYI=ICISISAYI+1 :pause 70
       WRITE 11,ICISISAYI.HIGHbyte
       WRITE 10,ICISISAYI.LOWbyte
       IF ICISISAYI=64 THEN ICISISAYI=0

       PORTC=%11111110         
      PORTB=%00110000'I
      Pause 4
       PORTC=%11111101         
      PORTB=%00111001'C
      Pause 4
   
       x= ICISISAYI DIG 1: gosub al: portc=%10111111: portb=sayi
       Pause 4
       x= ICISISAYI DIG 0: gosub al: portc=%01111111   : portb=sayi
       Pause 4
GOTO  ICISIAYAR


sanırım oldu proteus similasyonunda açıp kapatıyorum en son girdigim degerler duruyor.
kolaygelsin.
ben herkesi sevdim bilmiyorum sevildimmi?

sahinler64

dosyaları çalışır şekilde tekrar yükleme şansın varmı kardeş
SAYGILARIMLA...

recebcolak

ben herkesi sevdim bilmiyorum sevildimmi?