proton basic ile ds18b20 okuma sorunu pic18f452

Başlatan dnacikaya, 11 Kasım 2017, 02:30:36

dnacikaya

Merhaba. Daha önce pic16f887 ile hazırladığım yazılımı pic18f452'ye taşımak istedim ve bir türlü okumayı gerçekleştiremedim. Gerçek devrede deniyorum ve sistem açılıyor yazısı dışında ekrana bir veri aktaramıyorum. Data pinini kontrol ettim sağlam yinede portb.5 biti ile de test ettim sonuç olumsuz. Config ayarlarında bir hata yapıyor olabilirim. Daha önce pic18f452 ile ds18b20 okumayı başaran var mı?

Device = 18F452 
XTAL = 8
@CONFIG_REQ
@__CONFIG config1h, OSCS_OFF_1 & HS_OSC_1
@__CONFIG config2l, BOR_ON_2 & BORV_20_2 & PWRT_ON_2
@__CONFIG config2h, WDT_ON_2 & WDTPS_128_2
@__CONFIG config3h, CCP2MX_ON_3
@__CONFIG config4l, STVR_ON_4 & LVP_OFF_4 & DEBUG_OFF_4
Declare LCD_DTPIN = PORTD.4	
Declare LCD_RSPIN = PORTD.0
Declare LCD_ENPIN = PORTD.1
Declare LCD_INTERFACE = 4	' 4-bit Interface
Declare LCD_LINES = 4
Declare LCD_TYPE = 0
ADCON1=7
TRISA=%11111111
TRISB=%00000000
TRISC=%10010111
TRISD=%00000000
TRISE=%00000001
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
'PORTB_PULLUPS = true
ALL_DIGITAL = TRUE
Dim D As Byte
Dim C As Byte     
Dim CPerD As Byte 
Dim Temp As Word 
Symbol DQ = PORTC.5                'Place the DS1820 on bit 5 of PORTc
'Symbol DQ = PORTB.5                 'Place the DS1820 on bit 5 of PORTb
Cls
Print At 1,1,"SiSTEM"
Print At 2,1,"ACILIYOR..."
DelayMS 1000
Cls
Again: 
 OWrite DQ, 1, [$CC, $44]      ' Send Calculate Temperature command 
 Repeat 
 DelayMS 25                    ' Wait until conversion is complete 
 ORead DQ, 4, [C]              ' Keep reading low pulses until
 Until C <> 0                  ' the DS1820 is finished.
 OWrite DQ, 1, [$CC, $BE]      ' Send Read ScratchPad command
 ORead DQ, 2,[Temp.LowByte,Temp.HighByte, C, C, C, C, C, CPerD]
 ' Calculate the temperature in degrees Centigrade
 Temp = (((Temp >> 1) * 100) - 25) + (((CPerD - C) * 100) / CPerD)
 Print At 1,1, Dec Temp / 100, ".", DEC2 Temp," ", At 1,8,"C"
 GoTo Again

dnacikaya

Sorun çözüldü. Güncel derleyici ile okuma yapabildim:

http://etepic.com/index.php/topic,3737.msg35361.html#msg35361

Pic18f452 ile kullanabileceğiniz proton basic kodu:

Device = 18F452 
Xtal = 8
@CONFIG_REQ
@__CONFIG config1h, OSCS_OFF_1 & HS_OSC_1
@__CONFIG config2l, BOR_ON_2 & BORV_20_2 & PWRT_ON_2
@__CONFIG config2h, WDT_OFF_2 & WDTPS_128_2
@__CONFIG config3h, CCP2MX_ON_3
@__CONFIG config4l, STVR_ON_4 & LVP_OFF_4 & DEBUG_OFF_4
Declare LCD_DTPin = PORTD.4	
Declare LCD_RSPin = PORTD.0
Declare LCD_ENPin = PORTD.1
Declare LCD_Interface = 4	' 4-bit Interface
Declare LCD_Lines = 4
Declare LCD_Type = 0
ADCON1=7
TRISA=0
TRISB=%00000000
TRISC=0
TRISD=%00000000
TRISE=0
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
'PORTB_PULLUPS = true
All_Digital = TRUE
Dim D As Byte
Dim C As Byte     
Dim CPerD As Byte 
Dim Temp As Word 
Dim bUsY As Byte
Dim sIgN As Byte
Dim hAm As Word
Dim IsI As Word
Dim sIgN_bItI As Bit
Dim DeReCe As Byte

Symbol DQ = PORTC.5                'Place the DS1820 on bit 5 of PORTc
'Symbol DQ = PORTB.5                 'Place the DS1820 on bit 5 of PORTb
Cls
Print At 1,1,"SiSTEM"
Print At 2,1,"ACILIYOR..."
DelayMS 1000
Cls
GoSub SENSOROKU
DelayMS 10
IsI = ((hAm *10) /16) 
    DeReCe = IsI //10
    IsI= IsI /10
Again: 
GoSub SENSOROKU
    sIgN_bItI =GetBit hAm, 11
    If sIgN_bItI = 1 Then
       Print At 1,1,"-"
       hAm = ~(hAm +1)  
       Else
       Print At 1,1,"+"
    EndIf
        
    IsI = ((hAm *10) /16) 
    DeReCe = IsI //10
    IsI= IsI /10
    Print At 1,2,Dec IsI,".",Dec DeReCe," ","C "


 GoTo Again
 
'----------------ISI SENSÖR OKUMA BÖLÜMÜ --------------------------------
SENSOROKU: 
           OWrite DQ, 1, [$CC, $44]' ISI değerini oku
Bekle:
           ORead    DQ, 4, [bUsY]    ' Busy değerini oku
           If      bUsY = 0 Then Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
            OWrite   DQ, 1, [$CC, $BE]' scratchpad memory oku
           ORead    DQ, 2, [hAm.LowByte, hAm.HighByte]' İki byte oku ve okumayı bitir.
Return
 End