Member baru? Bingung? Perlu bantuan? Silakan baca panduan singkat untuk ikut berdiskusi.

Welcome to Forum Sains Indonesia. Please login or sign up.

Desember 04, 2024, 07:27:30 AM

Login with username, password and session length

Topik Baru

Artikel Sains

Anggota
Stats
  • Total Tulisan: 139,653
  • Total Topik: 10,405
  • Online today: 43
  • Online ever: 1,582
  • (Desember 22, 2022, 06:39:12 AM)
Pengguna Online
Users: 0
Guests: 35
Total: 35

Aku Cinta ForSa

ForSa on FB ForSa on Twitter

Tolong bantu tulisin kode buat PIC16F628 sebagai digital thermometer

Dimulai oleh alvin_wj, Maret 09, 2009, 07:51:24 PM

« sebelumnya - berikutnya »

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

alvin_wj

Ini kerjaan dah dari minggu lalu. Gak kelar2 juga sampai sekarang. Dah muter2 ke forum luar negeri. Gak ada yg bantu. Mudah2an disini bisa membant.

[pranala luar disembunyikan, sila masuk atau daftar.]

Saya lagi buat yg kayak diatas. Emang gak berhubungan sama robotika. Tapi setau saya yg main PIC anak2 klub robotika.
Nah tujuan saya supaya PIC itu bisa membaca suhu dari sensor. Sensor yg dipakai beda dari yg di web. Yg saya pakai DS18B20.
Perbedaannya cuma yg B20 kenaikkan suhunya 0.625°C

Saya mau buat supaya di LCD nya keluar suhunya dengan format :

CPU Temp   xx.x°C
GPU Temp   xx.x°C

Saya bener2 gak ngerti soal pemrograman PIC. saya taunya cuma nyolder. hehehe. Tapi suka dengan hobi ini. Mudah2an ada yg bantu. Atau minimal kasih gambaran. Saya gak ada gambaran sama sekali.

Oh iya tadi nemu code dari web luar. Cuma buat PIC16F877 dah gitu LCD nya cuma 14Pin klo gak salah.
untuk codenya :

Device 16F877
XTAL 4

Declare LCD_TYPE ALPHA              ' Type of LCD Used is Alpha
Declare LCD_DTPIN PORTB.4           ' The control bits B0,B1,B2,B3
Declare LCD_RSPIN PORTB.2           ' RS pin on B4
Declare LCD_ENPIN PORTB.3           ' E pin on B5
Declare LCD_LINES 2                 ' Amount of LCD lines
Declare LCD_INTERFACE 4             ' Interface method is 4 bit

PORTB_PULLUPS = true
ALL_DIGITAL = TRUE

SYMBOL DQ = Portb.0                 'Place the DS1820 on bit 1 of PORTA

Dim Sign as Byte
Dim Cnt as Byte
Dim Count_Per_Deg as Byte
Dim Temp as Word
Dim Temp_Dec as Byte

Delayms 150                         ' Let LCD warm up

Cls

' Send a command that creates the degree
Print $FE,$40,$06,$09,$09,$06,$00,$00,$00,$00
'  symbol on the LCD, to print it, simply address
'  the character as 0, eg,
'  Print At 1, 1, Value, 0, "Degrees"

Again:

'Send calculate temperature command
OWRITE DQ, 1,[$55,$10,$31,$C5,$C8,$00,$00,$00,$F4,$44]
                 ' FF  I1  I2  I3  I4  I5  I6  CRC
                 '  FF - Family, Ix - Address bytes,
                 '  CRC - checksum
REPEAT
     DELAYMS 25                   ' Wait until conversion is complete
     OREAD DQ,4,[Cnt]             ' Keep reading low pulses until
UNTIL Cnt <> 0                    '  the DS1820 is finished

'Send read scratchpad command
OWRITE DQ,1,[$55,$10,$31,$C5,$C8,$00,$00,$00,$F4,$BE]
                ' FF  I1  I2  I3  I4  I5  I6   CRC
                '  FF - Family, Ix - Address bytes,
                '  CRC - checksum checksum

OREAD DQ,2,[Temp.LOWBYTE,Temp.HIGHBYTE,Cnt,Cnt,Cnt,Cnt,Cnt,Count_Per_Deg]

' Each Cnt is 1/16 of a degree, therefore 100/16 = 6.25, and that's our decimal value
Temp_Dec = (6.25 * Cnt)

' Bits 8-15 are 1 for a negative temperature and 0 for a positive
If Temp.8=1 Then
     ' If negative then drop the first bit, and invert the value
     Temp=(Temp.LowByte ^ $FF) >> 1
     ' If Cnt = 0 then increment Temp, as the 1820 does not do this
     If Cnt = 0 then Temp = Temp + 1
     ' Change the sign to a negative
     Sign = "-"
Else
     ' If positive then drop the first byte
     Temp=(Temp >> 1)
     ' And change the sign value to positive
     Sign = "+"

     ' Invert the decimal value
     Temp_Dec = 100 - Temp_Dec
Endif

' Display the data on the LCD
Print At 1,1, Sign, Dec Temp, ".", Dec DIG Temp_Dec, 1, 0,"C "


Goto Again