26 Eylül 2018, 00:49:23

Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d


proton basic ile ds18b20 okuma sorunu pic18f452

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

dnacikaya

11 Kasım 2017, 05:30:36 Son düzenlenme: 11 Kasım 2017, 05:36:14 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ı?

Kod Seç
Device 18F452 
XTAL 
8
@CONFIG_REQ
@__CONFIG config1hOSCS_OFF_1 HS_OSC_1
@__CONFIG config2lBOR_ON_2 BORV_20_2 PWRT_ON_2
@__CONFIG config2hWDT_ON_2 WDTPS_128_2
@__CONFIG config3hCCP2MX_ON_3
@__CONFIG config4lSTVR_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.HighByteCCCCCCPerD]
 
' 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:

Kod Seç
Device 18F452 
Xtal 
8
@CONFIG_REQ
@__CONFIG config1hOSCS_OFF_1 HS_OSC_1
@__CONFIG config2lBOR_ON_2 BORV_20_2 PWRT_ON_2
@__CONFIG config2hWDT_OFF_2 WDTPS_128_2
@__CONFIG config3hCCP2MX_ON_3
@__CONFIG config4lSTVR_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 DQ1, [$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.LowBytehAm.HighByte]' İki byte oku ve okumayı bitir.
Return
 End