Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

16F'den 18F'e kod geçişi

Başlatan BAHAR, 01 Mart 2013, 16:47:07

BAHAR

Merhabalar, bir kod konusunda birşey farkettim ancak durumu anlayamadım. Forumdan ETE bey'in yazmış olduğu DS18B20 sensöründen sıcaklık okuma basic kodlarını 18F452'ye uyarlamaya çalıştım. Fakat şu sorun var; 16F serisi Pic'ler de sensörden sıcaklık ondalıklı okunabilirken(20.0,20.1 ... gibi) 18F452 ile sıcaklık sadece şu şekilde okunabiliyor;

20.0 -> 20.5 -> 21.0 ...

Acaba neden bu şekilde okuma yapılıyor?   :o


16F serisi ile sağlıklı okunan kodlar, 18F452 için çevirme yapıldığında ondalıklı okunamıyor.

TRISB=0   
TRISA=0
CMCON=7 '16f serisinde etkin.  
'ADCON1=7 ' 18f serisinde etkin. 
'----------------------------------------------------------------------------
SYMBOL Comm_Pin=PortA.0     ' One-wire Data-Pin "DQ" PortB.0 da
Busy        VAR BIT         ' Busy Status-Bit
HAM         VAR	WORD        ' Sensör HAM okuma değeri
ISI         VAR WORD        ' Hesaplanmış ISI değeri
Float       VAR WORD        ' Holds remainder for + temp C display
X           VAR WORD  
SAYI        VAR BYTE   
SIGN_BITI   VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
NEGAT_ISI   CON 1           ' Negatif_Cold = 1
SIGN        VAR BYTE        '  ISI değeri için  +/-  işaret

CLEAR

SYMBOL  DTA=PortB.0
SYMBOL  CLK=PORTB.1
symbol  ST=PORTB.2

Gosub sensoryaz
gosub sensoroku
GOSUB BEKLE

BASLA: 
GOSUB BEKLE
GOSUB SENSOROKU
GOSUB EKRAN1         

GOTO BASLA
'-----------------------alt programlar-------------------------------------------       
TEKRAR:
       SHIFTOUT DTA,CLK,1,[SAYI] 
       RETURN

AL:    LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :RETURN
     

EKRAN1:  
      
X=11:GOSUB AL:GOSUB TEKRAR
X=10:GOSUB AL:GOSUB TEKRAR

X=FLOAT DIG 0
GOSUB AL
GOSUB TEKRAR
X=FLOAT DIG 1
GOSUB AL
;SAYI=SAYI+128
GOSUB TEKRAR
X=FLOAT DIG 2
GOSUB AL
IF X=0 THEN SAYI=0
GOSUB TEKRAR        

SAYI=0
GOSUB TEKRAR 
GOSUB STYAZ

RETURN

STYAZ:      
HIGH st:PAUSEUS 2:LOW st
RETURN         

'-------------------------------------------------------------------------------      
'----------------ISI SENSÖR OKUMA BÖLÜMÜ --------------------------------
SENSOROKU: 
'-----------------DİKKAT İSİS'de BU SATIR AKTİF EDİLECEK----------------------
'           ham=$005e:Gosub hesapla:return 'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK
'------------------------------------------------------------------------------
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
           return
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN
           
SENSORYAZ:
          OWOUT   COMM_Pin, 1, [$CC, $4E, $00,$00,$00,$00,$7F]
          return           
             
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-"  
       ham=~ham+2
    endif
    float = (HAM*10)/16  'sıcaklık 23,7 iken  FLOAT=237 hesaplanır.        '       
    ISI=FLOAT/10      'ISI=23 hesaplanır 
    RETURN               
         
END


yasarbozoglu

arkadaşlar pic basic de bir program yazdım derledim,microcode studio da '595 word used' yazdı programda herhangi bir sıkıntı yok ancak hex dosyasının boyutu 3.3 KB ben pic16F628 in 2 KB program hafızası oldugunu biliyorum sizce ben bu hex dosyasını pic e atabilir miyim..?(devre isiste sorunsuz çalışıyor)