24 Eylül 2020, 03:42:26

Haberler:

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


SHT30 nem sensörü kullanımı ?

Başlatan mustafa_cmbz, 12 Eylül 2020, 01:33:09

OG

adres pinini direk gnd yapsan daha güvenilir olur.
sensor pic arası kablolar uzun falan değildir umarım

Şunu I2Cout / I2CIn komutlarına çevirip bir denesen (donanımsal I2C ayarları kapatmayı unutmamalı).
yavaşlatmak için de üste
Declare Slow_Bus On

SCL SDA pinlerini de tris ile input yaparak
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

Programın tamamı burada değil herhalde.
HBStart diye bir komut yada etiket kullanman gerekmiyor.
NEM okuma kısmı yanlızca aşağıdaki şekilde olmalı.
 NEM_OKU:
  
  
GoSub MELODI
  HBusout 
%10001000,$2C,$0D
  HBusIn  
%10001001,[ ISI_HAM.HighByte ,ISI_HAM.LowByte ,CRC1 NEM_HAM.HighByte,NEM_HAM.LowByte CRC2]
RETURN
Daha öncede belirttiğim gibi Start ve stop komutlarını derleyici ayarlıyor zaten senin bir şey yapman gerekmiyor. Daha önce hiç I2C eprom okumadınmı yada yazmadınmı. Yaptın ise o kodlara bak aynısıdır prensip.
Birde böyle dene bakalım ne olacak.
 
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mustafa_cmbz

Alıntı yapılan: ete - 14 Eylül 2020, 18:27:54Programın tamamı burada değil herhalde.
HBStart diye bir komut yada etiket kullanman gerekmiyor.
NEM okuma kısmı yanlızca aşağıdaki şekilde olmalı.
 NEM_OKU:
  
  
GoSub MELODI
  HBusout 
%10001000,$2C,$0D
  HBusIn  
%10001001,[ ISI_HAM.HighByte ,ISI_HAM.LowByte ,CRC1 NEM_HAM.HighByte,NEM_HAM.LowByte CRC2]
RETURN
Daha öncede belirttiğim gibi Start ve stop komutlarını derleyici ayarlıyor zaten senin bir şey yapman gerekmiyor. Daha önce hiç I2C eprom okumadınmı yada yazmadınmı. Yaptın ise o kodlara bak aynısıdır prensip.
Birde böyle dene bakalım ne olacak.
 

  HBStart
  HBusOut 
%10001000 ,[$2C,$0D]
  
DelayMS 50
  HBusIn  
%10001001 ,[ISI_HAM.HighByte,ISI_HAM.LowByte,CRC1,NEM_HAM.HighByte,NEM_HAM.LowByte,CRC2]
  
HBStop

hocam şuanki hali ile sanırım sensörden ham veriyi alıyorum.

fakat datasheetteki dönüşüm formülünü kabaca uyguladığımda ekranda hep 65535 değerini görüyorum.



RH  100 NEM_HAM/65535-1
RH  = (NEM_HAM/65535-1) * 100
RH  100 * (NEM_HAM/65535)-1
şöyle bir kaç şekilde denedim ama değişen bir şey olmadı.

tam olarak bu formülün yazım şekli nasıl olmalı?

mustafa_cmbz

c kodlarından kopya çekerek şöyle bir şey denedim şuan gayet güzel çalışıyor :

RH 100 * (NEM_HAM.HighByte 256 NEM_HAM.LowByte) / 65535.0

OG

Alıntı yapılan: mustafa_cmbz - 15 Eylül 2020, 05:09:26c kodlarından kopya çekerek şöyle bir şey denedim şuan gayet güzel çalışıyor :

RH 100 * (NEM_HAM.HighByte 256 NEM_HAM.LowByte) / 65535.0
Formuldeki de bu zaten, aynısı
NEM_HAM (2 byte) değeri 100 ile çarpınca taşma yapmış olabilir, RH değişkeni Dword yapı ile denenebilir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

sonunda programı toparlayıp son halini buraya koyarsan sevinirim.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mustafa_cmbz

Alıntı yapılan: ete - 15 Eylül 2020, 14:12:34sonunda programı toparlayıp son halini buraya koyarsan sevinirim.

Ete




Son çalışan hali bu akşam çekmiştim şuan pc kapalı. Pc açınca kopyala yapıştır yaparım hocam.


mustafa_cmbz

  
   Device 
18F25K22
   
Declare Xtal 20
   
   
Declare LCD_Type 0
   
Declare LCD_DTPin PORTB.0
   
Declare LCD_ENPin PORTB.5 
   
Declare LCD_RSPin PORTB.4 
   
Declare LCD_Interface 4
   
Declare LCD_Lines 2
   
   
Declare HSDA_Pin PORTC.4
   
Declare HSCL_Pin PORTC.3
   
'Declare Hbus_Bitrate  400
   Declare Slow_Bus On
   All_Digital = True
  
  
   Symbol BUZZER = PORTB.7
   Output BUZZER 
  
  
   Dim NEM_HAM      As Word 
   Dim ISI_HAM      As Word 
   Dim CRC1         As Byte
   Dim CRC2         As Byte
   Dim CRC_CALC     As Byte
   Dim ISI          As Float 
   
   Dim A As Byte 
   A       = 0
   Dim DERECE        As Word
   DERECE  = $DF
   
   NEM_HAM = 0
   ISI_HAM = 0 
   ISI     = 0
 
   
   
   Dim RH           As Float 
   RH=0
'
----------------------------  
   
   
Cls DelayMS 3000

  

  

   ANA
:
   Print 
At 1,1,"Nem: ",Dec2 RH ," %RH"
   
Print At 2,1,"ISI: ",Dec2 ISI," ",DERECE,"C"  
   
   
DelayMS 2000
   GoSub NEM_OKU
   GoSub NEM_HESAPLA
  
   
GoTo ANA 
   
  
  NEM_OKU
:
  
  
GoSub MELODI


  HBStart
  HBusOut 
%10001000 ,[$2C,$0D]
  
DelayMS 50
  HBusIn  
%10001001 ,[ISI_HAM.HighByte,ISI_HAM.LowByte,CRC1,NEM_HAM.HighByte,NEM_HAM.LowByte,CRC2]
  
HBStop
  
  
Return 


  
NEM_HESAPLA:
  
RH 100 * (NEM_HAM.HighByte 256 NEM_HAM.LowByte) / 65535.0
  
  ISI 
ISI_HAM.HighByte 256 ISI_HAM.LowByte
  ISI 
= -45 + (175 ISI 65535.0)
  Return  
  
  
 
  
   
MELODI:
   
High BUZZER DelayMS 70 Low BUZZER DelayMS 35
   High BUZZER 
DelayMS 54 Low BUZZER DelayMS 70
   
Return 

kodun tamamı budur..

yardımlarınız için çok teşekkürler...

dnacikaya

Alıntı yapılan: mustafa_cmbz - 16 Eylül 2020, 16:06:06  
   Device 
18F25K22
   
Declare Xtal 20
   
   
Declare LCD_Type 0
   
Declare LCD_DTPin PORTB.0
   
Declare LCD_ENPin PORTB.5 
   
Declare LCD_RSPin PORTB.4 
   
Declare LCD_Interface 4
   
Declare LCD_Lines 2
   
   
Declare HSDA_Pin PORTC.4
   
Declare HSCL_Pin PORTC.3
   
'Declare Hbus_Bitrate  400
   Declare Slow_Bus On
   All_Digital = True
  
  
   Symbol BUZZER = PORTB.7
   Output BUZZER 
  
  
   Dim NEM_HAM      As Word 
   Dim ISI_HAM      As Word 
   Dim CRC1         As Byte
   Dim CRC2         As Byte
   Dim CRC_CALC     As Byte
   Dim ISI          As Float 
   
   Dim A As Byte 
   A       = 0
   Dim DERECE        As Word
   DERECE  = $DF
   
   NEM_HAM = 0
   ISI_HAM = 0 
   ISI     = 0
 
   
   
   Dim RH           As Float 
   RH=0
'
----------------------------  
   
   
Cls DelayMS 3000

  

  

   ANA
:
   Print 
At 1,1,"Nem: ",Dec2 RH ," %RH"
   
Print At 2,1,"ISI: ",Dec2 ISI," ",DERECE,"C"  
   
   
DelayMS 2000
   GoSub NEM_OKU
   GoSub NEM_HESAPLA
  
   
GoTo ANA 
   
  
  NEM_OKU
:
  
  
GoSub MELODI


  HBStart
  HBusOut 
%10001000 ,[$2C,$0D]
  
DelayMS 50
  HBusIn  
%10001001 ,[ISI_HAM.HighByte,ISI_HAM.LowByte,CRC1,NEM_HAM.HighByte,NEM_HAM.LowByte,CRC2]
  
HBStop
  
  
Return 


  
NEM_HESAPLA:
  
RH 100 * (NEM_HAM.HighByte 256 NEM_HAM.LowByte) / 65535.0
  
  ISI 
ISI_HAM.HighByte 256 ISI_HAM.LowByte
  ISI 
= -45 + (175 ISI 65535.0)
  Return  
  
  
 
  
   
MELODI:
   
High BUZZER DelayMS 70 Low BUZZER DelayMS 35
   High BUZZER 
DelayMS 54 Low BUZZER DelayMS 70
   
Return 

kodun tamamı budur..

yardımlarınız için çok teşekkürler...

Proton'un hangi sürüm kullanıyorsunuz. Proton'a fuse generator eklemenizde fayda olabilir. İşlemciye göre otomatik sigorta ayarı oluşturur.

http://www.protonbasic.co.uk/content.php/2607-PIC-FuseConfigurator-Mk2

OG

Alıntı yapılan: mustafa_cmbz - 16 Eylül 2020, 16:06:06kodun tamamı budur..

yardımlarınız için çok teşekkürler...
CRC yi kullanmayı alışkanlık edinmeli,
şöyle diyelim, mesela,
Kuluçka yumurtaların ısısını kontrol ediyoruz
Temp okuduk, data gelirken bir şekilde parazit binmiş, yanlış data geldi,
öldü civcivcikler  ;)

örneği abartalım,
yangın alarmı oto su püskürtmeyi kontrol ediyoruz
göl oldu ofisler  ;)

gibi..
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

mustafa_cmbz

Alıntı yapılan: OG - 16 Eylül 2020, 18:37:27CRC yi kullanmayı alışkanlık edinmeli,
şöyle diyelim, mesela,
Kuluçka yumurtaların ısısını kontrol ediyoruz
Temp okuduk, data gelirken bir şekilde parazit binmiş, yanlış data geldi,
öldü civcivcikler  ;)

örneği abartalım,
yangın alarmı oto su püskürtmeyi kontrol ediyoruz
göl oldu ofisler  ;)

gibi..

haklısın hocam.diğer kullandığım sensörde mevcut onu uygulayacağım