Elektrotekno.com Ana Sayfa || Programlanabilir Cihaz ve Elemanlar


ds18b20

Kayıt: 04 Oca 2007
Mesajlar: 372
Konum: İzmir
Offline
fuzzy
Tarih: 27 10 2008 19:32

Arkadaşlar ben Dallas one wire ürünleri kullandım ve elimde kendi yazdığım 8051 rutinleri var.Ama ısı sensorlarını hiç kullanmadım.Tüm uygulamalarım TOM ile oldu.Şimdi DS18B20 kullanayım dedim bir türlü ısı değeri gelmiyor,sürekli 0 geliyor.Bir hata yapıtığım ortada,dallas-maxim in dökümanlarıda pek aydınlatıcı değil.Elinde 8051 de çalışan veya başka işlemcide olur asm kodu olan varsa gönderebilir mi?

En son fuzzy tarafından 28.10.2008, 23:17 tarihinde değiştirildi, toplam 1 kere değiştirildi


Reklamlar
Kayıt: 12 Nis 2008
Mesajlar: 900
Konum: İzmir
Offline
esb72
Tarih: 27 10 2008 19:56

asm olmasa..


Selam fuzzy,
aşağdaki linklere bir göz at istersen belki yardımı olur.aslında isteğin asm olmasaydı CCS de daha fazla önerim olurdu.ASM de bunu için uğraşmak amerikayı tekrar keşfetmek gibi.
Kolay gelsin

http://www.elektrotekno.com/about22595.html
http://www.elektrotekno.com/about27104.html
Başa dön
Kayıt: 02 Ksm 2005
Mesajlar: 305

Offline
schlen
Tarih: 28 10 2008 10:02

fuzzy ben pic basic proton kullanıyorum. program derlenirken xx.bas , xx.asm , xx.cod , xx.err , xx.fil , xx.hex , xx.lst , xx.mci , xx.pbe , xx.pbp şeklinde dosylar oluşuyor. bunlardan ilki benim yazdığım kod dosyası. içeriklerine baktığımda xx.pbp ve xx.asm uzun uğraşlar sonunda sana yardımcı olabilecek gibi geldi bana. bu iki dosyanın içeriğini ve proton karşılığını vereyim bi istersen bunun yanı sıra isis devresini ve çalışan uygulamasını da yollayayım.

protondaki olcme rutini:
olcme:

owrıte dqr, 1, [$cc, $44]
repeat
delayms 25
oread dqr, 4, [cr]
untıl cr <> 0
owrıte dqr, 1, [$cc, $be]
oread dqr, 2, [tempr.lowbyte,tempr.hıghbyte, cr, cr, cr, cr, cr, cperdr]
tempr=(((tempr>>1)*100)-25)+(((cperdr - cr)*100)/cperdr)


için xx.asm kodları:

olcme
bcf status,5
ram_bank = 0
f1_000032 equ $ ; in [dene.bas] owrıte dqr, 1, [$cc, $44]
movlw portd
movwf gen
movlw 1
movwf genh
movlw 1
movwf gpr
f@call ow@rst2
movlw 204
f@call ow@out
movlw 68
f@call ow@out
f1_000033 equ $ ; in [dene.bas] repeat
bc@ll1
f1_000034 equ $ ; in [dene.bas] delayms 25
movlw 25
f@call dl@ms
f1_000035 equ $ ; in [dene.bas] oread dqr, 4, [cr]
movlw portd
movwf gen
movlw 1
movwf genh
movlw 4
movwf gpr
f@call ow@in
movwf cr
f1_000036 equ $ ; in [dene.bas] untıl cr <> 0
movfw cr
set@page bc@ll1
btfsc status,2
goto bc@ll1
bc@ll2
f1_000037 equ $ ; in [dene.bas] owrıte dqr, 1, [$cc, $be]
movlw portd
movwf gen
movlw 1
movwf genh
movlw 1
movwf gpr
f@call ow@rst2
movlw 204
f@call ow@out
movlw 190
f@call ow@out
f1_000038 equ $ ; in [dene.bas] oread dqr, 2, [tempr.lowbyte,tempr.hıghbyte, cr, cr, cr, cr, cr, cperdr]
movlw portd
movwf gen
movlw 1
movwf genh
movlw 2
movwf gpr
f@call ow@in
movwf tempr
f@call ow@in
movwf temprh
f@call ow@in
movwf cr
f@call ow@in
movwf cr
f@call ow@in
movwf cr
f@call ow@in
movwf cr
f@call ow@in
movwf cr
f@call ow@in
movwf cperdr
f@call ow@rst1
f1_000039 equ $ ; in [dene.bas] tempr=(((tempr>>1)*100)-25)+(((cperdr - cr)*100)/cperdr)
movfw temprh
movwf pp7h
movfw tempr
movwf pp7
clrc
rrf pp7h,f
rrf pp7,f
movfw pp7h
movwf pp3h
movfw pp7
movwf pp3
clrf pp1h
movlw 100
movwf pp1
f@call m@py
movwf pp7
movfw pp2h
movwf pp7h
movlw 25
subwf pp7,f
movlw 0
skpc
addlw 1
subwf pp7h,f
clrf pp8h
movfw cperdr
movwf pp8
movfw cr
subwf pp8,f
skpc
decf pp8h,f
movfw pp8h
movwf pp3h
movfw pp8
movwf pp3
clrf pp1h
movlw 100
movwf pp1
f@call m@py
movwf pp8
movfw pp2h
movwf pp8h
movfw pp8h
movwf pp0h
movfw pp8
movwf pp0
clrf pp1h
movfw cperdr
movwf pp1
f@call d@vd
movwf pp8
movfw pp0h
movwf pp8h
movfw pp7
addwf pp8,w
movwf tempr
movfw pp7h
skpnc
addlw 1
addwf pp8h,w
movwf temprh


ve buradaki bazı etiketler için xx.pbp de faydalı olacağını düşündüğüm kısım:

#include c:\program files\crownhill proton\crownhill\ınc\reg_ld14.ınc
bpf = 32
bpfh = 33
gen = 34
gen4 = 35
gen4h = 36
genh = 37
gpr = 38
pp0 = 39
pp0h = 40
pp1 = 41
pp1h = 42
pp2 = 43
pp2h = 44
pp3 = 45
pp3h = 46
pp4 = 47
pp5 = 48
pp6h = 49
pp7 = 50
pp7h = 51
pp8 = 52
pp8h = 53


http://rapidshare.com/files/158256485/deneme.rar.html

ileride dosyanın rapidden silinmesine karşı dosyayı yüklüyorum. belki ihtiyacı olan bir başka arkadaş olabilir. devre sadece sıcaklık ölçüp lcd de göstermektedir. sensör olarak ds18b20 kullanılmıştır.

burada isis devresi ve diğer dosyalar mevcut. (proteus 7.2)

ds18b20
Başa dön
Kayıt: 04 Oca 2007
Mesajlar: 372
Konum: İzmir
Offline
fuzzy
Tarih: 28 10 2008 23:16

Schlen arkadaş basic in asm lerinden birşey anlaşılmıyor.Basic i de bir garip geldi bana bu programı sözsel anlatabilir misin?.

olcme:

owrıte dqr, 1, [$cc, $44]
repeat
delayms 25
oread dqr, 4, [cr]
untıl cr <> 0
owrıte dqr, 1, [$cc, $be]
oread dqr, 2, [tempr.lowbyte,tempr.hıghbyte, cr, cr, cr, cr, cr, cperdr]
tempr=(((tempr>>1)*100)-25)+(((cperdr - cr)*100)/cperdr)
Başa dön
Kayıt: 02 Ksm 2005
Mesajlar: 305

Offline
schlen
Tarih: 29 10 2008 14:47

[quote="fuzzy"]Schlen arkadaş basic in asm lerinden birşey anlaşılmıyor.Basic i de bir garip geldi bana bu programı sözsel anlatabilir misin?.
quote]

owrıte dqr, 1, [$cc, $44] ==>OWRITE pin,mod,[Gönderilen veri]
repeat
delayms 25 ==> 25 ms bekle (Sıcaklık ölçümü tamamlanıncaya kadar bekle)
oread dqr, 4, [cr] ==>OREAD pin,mod,[Gelen veri] (DS1820 işini tamamlayıncaya kadar)
untıl cr <> 0 ==>Düşük darbeleri okumaya devam et
owrıte dqr, 1, [$cc, $be] ==>Yaz-boz bellek okuma komutu gönderilir
oread dqr, 2, [tempr.lowbyte,tempr.hıghbyte, cr, cr, cr, cr, cr, cperdr]

Modlar:
0 reset yok, byte modu
1 veriden önce reset, byte modu
2 Veriden sonra reset, byte modu
3 veriden önce ve sonra reset, byte modu
4 reset yok, bit modu
1 veriden önce reset, bit modu
2 Veriden sonra reset, bit modu
3 veriden önce ve sonra reset, bit modu

şeklinde pic baisc proton da bilgiler verilmiş. Orjinalini de aşağıda vereyim. Ancak dediğim gibi birebir çeviri yapılamaz diye düşünüyorum. Çünkü pic baisc proton kodları direkt olarak hex yapılmıyor. Onun dönüşüm sırasına göre adım adım gidilebilir diye düşünüyorum.

Syntax

OREAD Pin , Mode , [ InputData ]

Overview

Receive data from a device using the Dallas Semiconductor 1-wire protocol. The 1-wire protocol is a form of asynchronous se-ri-@l communication developed by Dallas Semiconductor. It requires only one I/O pin which may be shared between multiple 1-wire devices.

Operators
Pin - a PORT-BIT combination that specifies which I/O pin to use. 1-wire devices require only one I/O pin (normally called DQ) to communicate. This I/O pin will be toggled between output and input mode during the ORead command and will be set to input mode by the end of the ORead command.
Mode - a numeric constant (0 - 7) indicating the mode of data transfer. The Mode argument control's the placement of reset pulses and detection of presence pulses, as well as byte or bit input. See notes below.
InputData - a list of variables or arrays to store the incoming data into. The STR modifier may also be used to store the incoming data into an array.
Example

DIM Result AS BYTE
SYMBOL DQ = PORTA.0
OREAD DQ, 1 , [ Result ]

The above example code will transmit a 'reset' pulse to a 1-wire device (connected to bit 0 of PORTA) and will then detect the device's 'presence' pulse and receive one byte and store it in the variable Result.

Notes

The Mode operator is used to control placement of reset pulses (and detection of presence pulses) and to designate byte or bit input. The table below shows the meaning of each of the 8 possible value combinations for Mode.

Mode Effect
0 No Reset, Byte mode
1 Reset before data, Byte mode
2 Reset after data, Byte mode
3 Reset before and after data, Byte mode
4 No Reset, Bit mode
5 Reset before data, Bit mode
6 Reset after data, Bit mode
7 Reset before and after data, Bit mode

The correct value for Mode depends on the 1-wire device and the portion of the communication that is being dealt with. Consult the data sheet for the device in question to determine the correct value for Mode. In many cases, however, when using the ORead command, Mode should be set for either No Reset (to receive data from a transaction already started by an OWrite command) or a Reset after data (to terminate the session after data is received). However, this may vary due to device and application requirements. When using the Bit (rather than Byte) mode of data transfer, all variables in the InputData argument will only receive one bit. For example, the following code could be used to receive two bits using this mode: -

DIM BITVAR1 AS BIT
DIM BITVAR2 AS BIT
OREAD PORTA.0 , 6 , [ BITVAR1, BITVAR2 ]

In the example code shown, a value of 6 was chosen for Mode. This sets Bit transfer and Reset after data mode. We could also have chosen to make the BITVAR1 and BITVAR2 variables each a byte type, however, they would still only have received one bit each in the OREAD command, due to the Mode that was chosen.

The compiler also has a modifier for handling a string of data, named STR. The STR modifier is used for receiving data and placing it directly into a byte array variable.

A string is a set of bytes that are arranged or accessed in a certain order. The values 1 , 2 , 3 would be stored in a string with the value 1 first, followed by 2 then followed by the value 3. A byte array is a similar concept to a string; it contains data that is arranged in a certain order. Each of the elements in an array is the same size. The string 1 2 3 would be stored in a byte array containing three bytes (elements).

Below is an example that receives ten bytes through a 1-wire interface and stores them in the 10-byte array, MYARRAY: -

DIM MYARRAY[10] AS BYTE ' Create a 10-byte array.
OREAD DQ, 1 , [STR MYARRAY]
PRINT DEC STR MYARRAY ' Display the values.

If the amount of received characters is not enough to fill the entire array, then a formatter may be placed after the array's name, which will only receive characters until the specified length is reached. For example: -

DIM MYARRAY[10] AS BYTE ' Create a 10-byte array.
OREAD DQ, 1 , [ STR MYARRAY \5 ] ' Fill the first 5-bytes of the array with received data.
PRINT STR MYARRAY \5 ' Display the 5-value string.

The example above illustrates how to fill only the first n bytes of an array, and then how to display only the first n bytes of the array. n refers to the value placed after the backslash.

DALLAS 1-WIRE PROTOCOL

The 1-wire protocol has a well defined standard for transaction sequences. Every transaction sequence consists of four parts: -

Initialisation.
ROM Function Command.
Memory Function Command.
Transaction / Data.
Additionally, the ROM Function Command and Memory Function Command are always 8 bits wide and are sent least-significant-bit first (LSB). The Initialisation consists of a reset pulse (generated by the master) that is followed by a presence pulse (generated by all slave devices).

The reset pulse is controlled by the lowest two bits of the Mode argument in the ORead command. It can be made to appear before the ROM Function Command (Mode = 1), after the Transaction / Data portion (Mode = 2), before and after the entire transaction (Mode = 3) or not at all (Mode = 0).

1-wire ROM Function Commands

Following the Initialisation, comes the ROM Function Command. The ROM Function Command is used to address the desired 1-wire device. The above table shows a few common ROM Function Commands. If only a single 1 wire device is connected, the Match ROM command can be used to address it. If more than one 1-wire device is attached, the PICmicro will ultimately have to address them individually using the Match ROM command.

The third part, the Memory Function Command, allows the PICmicro to address specific memory locations, or features, of the 1-wire device. Refer to the 1-wire device's data sheet for a list of the available Memory Function Commands.

Finally, the Transaction / Data section is used to read or write data to the 1-wire device. The ORead command will read data at this point in the transaction. A read is accomplished by generating a brief low-pulse and sampling the line within 15us of the falling edge of the pulse. This is called a 'Read Slot'.

The program below demonstrates interfacing to a Dallas Semiconductor DS1820 1-wire Digital Thermometer device using the compiler's 1-wire commands. The code reads the Counts Remaining and Counts per Degree Centigrade registers within the DS1820 device in order to provide a more accurate temperature (down to 1/10th of a degree).

DEVICE 16F84
DECLARE XTAL 4
SYMBOL DQ = PORTA.1 ' Place the DS1820 on bit-1 of PORTA
DIM Temp AS WORD ' Holds the temperature value
DIM C AS BYTE ' Holds the counts remaining value
DIM CPerD AS BYTE ' Holds the Counts per degree C value
CLS ' Clear the LCD before we start
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

NOTE: The equation used in the program above will not work correctly with negative temperatures. Also note that the 4.7kW pull-up resistor (R1) is required for correct operation.

Inline OREAD Command

The standard structure of the ORead command is: -

OREAD Pin , Mode , [ Inputdata ]

However, this did not allow it to be used in conditions such as If...Then, While...Wend etc. Therefore, there is now an additional structure to the ORead command: -

VAR1 = OREAD Pin , Mode

Operands Pin and Mode have not changed their function, but the result from the 1-wire read is now placed directly into the assignment variable.

OREAD - OWRITE Presence Detection

Another important addition to both the ORead and OWrite commands is the ability to jump to a section of the program if a presence is not detected on the 1-wire bus. The new structure is: -

OWRITE Pin , Mode , Label , [ Outputdata ]
OREAD Pin , Mode , Label , [ Inputdata ]
VAR1 = OREAD Pin , Mode, Label

The Label operand is an optional condition, but if used, it must reference a valid BASIC label.

' Skip ROM search & do temp conversion
OWRITE DQ, 1, NO_PRES, [$CC, $44]
WHILE OREAD DQ, 4, NO_PRES != 0 : WEND ' Read busy-bit,' Still busy..?
' Skip ROM search & read scratchpad memory
OWRITE DQ, 1, NO_PRES, [$CC, $BE]
OREAD DQ, 2, NO_PRES, [Temp.Lowbyte, Temp.Highbyte] ' Read two bytes
RETURN

NO_PRES:
PRINT "No Presence"
STOP
Başa dön
Kayıt: 04 Oca 2007
Mesajlar: 372
Konum: İzmir
Offline
fuzzy
Tarih: 29 10 2008 15:11

Kardeş sağol şimdi anlaşıldı.Yanlız bu sensoru ben sevmedim var bir gariplik.Hala okuyamadım devamlı ffh geliyor,çalışmaya devam...

İşi hallettim.Yanlız yüksek seviye kodlarla bu işten tam hakkıyla çıkmak biraz zor,bence.Dallas ın dökümanlarını iyi incelemek lazım,konu pek ittirmeye gelmiyor.Asm sini ekliyorum,bu bir test programı incelemek lazım.Puanı olmayanlar mesaj atarsa maill gönderebilirim.
Başa dön
Kayıt: 24 Eyl 2008
Mesajlar: 788
Konum: gurbeti diyar
Offline
scorpioan
Tarih: 20 05 2009 14:39

owrıte dqr, 1, [$cc, $be]
owrıte dqr, 1, [$cc, $44]

anladığım kadarıyla bunlar birer değer peki bu değerleri ne için seçtik neye göre ve bunlar entegre için mi sensör için mi kullanılıyor
Başa dön



ds18b20


Benzer Konular
- DS18B20 Termometre (pcb)
- DS18B20 datasheet Türkçe
- Pic16F877A 20Mhz entegre ile DS18B20 Isı sensörü uygulaması Program kodlarıdır.

- 16f628 ile yapılmıs ds18b20 li + ve - sıcaklık kontrollu lcdli termostat devresi

- ds18b20-pic16f628-arac-ici-disi-termometre-picbasic
- DS18B20 ile yapılmış iç dış saat termometre
- ds18b20 ve 16f628a ile ısı ayarlı termometre devresi acil yardım!!!
- pıc16f628 ds1302 ds18b20 690 ledli saat termometre devresi
- pic 16F84 ile DS18B20 ile termometre yapımı

- DS18B20 entegresi ile pic 16f877a kullanarak digital termometre yapımı

- Pic16F628 & DS18B20 Ayarlanabilir Termometre

Sitemize üyelik ve içeriğin indirilmesi tamamen ücretsizdir. Sitemizde paylaşılan tüm dokümanlar (Tezler, makaleler, ders notları, sınav soru cevaplar, projeler) paylaşımcıların bireysel çalışmaları olup telif hakları kendilerine aittir ya da açık bir şekilde kamusal alana yerleştirilmiş dokümanların birer kopyalarıdır. Kişilerin bireysel çalışmalarını sitemizde yüklemesinde, sitemizde paylaşıma teşvik eden puanlama sisteminin de etkisi büyüktür. Bunlara rağmen hala size ait olan ve burada bulunmasına izin vermediğiniz dokümanlar varsa iletişim bölümünden yöneticilere bildirmeniz durumunda derhal silineceklerdir.
Powered by phpBB | Translated by phpBB Türkiye | Ads by Google Adsense | Design by Crazy Bat based
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72