avatar_ete

Dijital Saat

Başlatan ete, 28 Ağustos 2011, 13:49:54

ete

Aynı hatta iki DS18B20 bağlanabilir. Aralarındaki ayırım fabrika kodu ile yapılır. Bu bağlantıda okuma şekli biraz değişir ve karmaşık bir konudur. Bilgin olsun diye bildireyim dedim. Daha kolay bir şey istersen,
Aynı kodları başka bir sensör için çalıştırabilirsin. Değişecek kısım Comm_Pin ile okunan değerin aktarılacağı değişkenler olacaktır.

Ete

xoom

#31
Cevap için tşk ederim.. peki 1.sıcaklık 4 displayde 2. sıcaklık farklı 4 displayde olacağı için .. hangi 4lü displaye hangi sıcaklık değerinin gideceği ayırımı hangisi yapıyor? yada nasıl yapmalıyım acaba ?..

Mucit23

Bir şekilde isimlendirmelisin. Mesela iç ve dış ortamların sıcaklığını ölçeceksen 1. displayin yanına iç 2. display gurubunn yanına dış yazabilirsin. En iyisi böyledir.
Sensörlerden hangisinin hangi display gurubuna bağlı olduğunu ise sensörleri isimlendirerek yaparsın. Zaten İki sensörü iki ayrı hattan okuyacaksan problem yok. Ama Tek hattan okuyacaksan bir şekilde isimlendirmen gerekir.

Aynı sensörü tek hattan okumak biraz karmaşık bir iş. Her sensörün Teker teker kaydı yapılması yani sisteme tanıtılması gerekiyor.
Bunu yapmanın en mantıklı yolu bu iş için özel bir menü yapmak menüde sensör kayıt işlemlerini gerçekleştirmek. Bu şekilde çok güzel programlar yapılabilir.

Ben bu konuda bir çalışma yaptım daha önceden. Aşağıda verdiğim program Aynı hattan2 adet sensörden sıcaklık bilgisini okuyup ekrana yazıyor.

'****************************************************************
'*  Name    : WiRE.BAS                                          *
'*  Author  : [FERHAT YOL]                                      *
'*  Notice  : TEK KABLO İLE İKİ ADET SENSÖR OKUMA İŞLEMİ        *
'*          :                                                   *
'*  Date    : 19.12.2010                                        *
'*  Version : 1.0                                               *
'*  Notes   : Her bir Sensör 64 Bitlik Rom koduna sahiptir.     *
'*          : Her cihazın özel bir kodu var. Bu kod sayesinde   *
'*          : Aynı hattan one wire ile çalışan birden fazla     *
'*          : cihaz kontrol edilip okunabilir.                  *
'****************************************************************

PORTA=0:PORTB=0
TRISA=0     
TRISB=%00000001
'-----------------------------------------------------------------
@ DEVICE pic16F628A                      'işlemci 16F628                               
@ DEVICE pic16F628A, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_off            'MCLR pini kullanılmıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
'-----------------------------------------------------------------
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
define LCD RWREG    PORTB   'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT    2       'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı  ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor
'-------------------------------------------------------------------------
CMCON=7    'comparatör iptal
'----------------------------------------------------------------------------
DQ           VAR PORTB.0
TEMP1        VAR WORD
TEMP2        VAR WORD
FLOAT1       VAR WORD
FLOAT2       VAR WORD 
ISI1L        VAR byte
ISI1H        VAR BYTE
ISI2L        VAR byte 
ISI2H        VAR BYTE     
DERECE       CON 223       

'-----------------------------------------------------------------------------
CLEAR
PAUSE 300
LCDOUT $FE,1

BASLA:
  GOSUB SENSOR1_OKU
  GOSUB SENSOR2_OKU
  GOSUB EKRAN
GOTO BASLA

SENSOR1_OKU:
    OWOUT DQ, 1, [$55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$44] ;1. Sensör Rom kodu = $28,$6E,$D7,$B8,$00,$00,$00,$4C
    OWOUT DQ, 1, [$55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$BE]
    OWIN DQ, 2, [Temp1.LOWBYTE,Temp1.HIGHBYTE]             ;1. Sensör Sıcaklık Değerini oku
    GOSUB HESAP1
RETURN

SENSOR2_OKU:
    OWOUT DQ, 1, [$55,$28,$30,$C5,$B8,$00,$00,$00,$8E,$44] ;2. Sensör Rom kodu = $28,$30,$C5,$B8,$00,$00,$00,$8E
    OWOUT DQ, 1, [$55,$28,$30,$C5,$B8,$00,$00,$00,$8E,$BE]
    OWIN DQ, 2, [Temp2.LOWBYTE,Temp2.HIGHBYTE]             ;2. Sensör sıcaklık Değerini oku
    GOSUB HESAP2
GOTO BASLA

HESAP1:  ;1. Sensörden okunan sıcaklık değeri hesaplanıyor             
    FLOAT1 = (TEMP1*10)/16       
    ISI1H=FLOAT1/10
    ISI1L=FLOAT1//10
RETURN 

HESAP2:  ;2. Sensörden okunan sıcaklık değeri hesaplanıyor
    FLOAT2 = (TEMP2*10)/16       
    ISI2H=FLOAT2/10
    ISI2L=FLOAT2//10
RETURN   

EKRAN:
    LCDOUT $FE,$80,"1.SENSOR=",DEC2 ISI1H,",",DEC1 ISI1L,DERECE,"C"
    LCDOUT $FE,$C0,"2.SENSOR=",DEC2 ISI2H,",",DEC1 ISI2L,DERECE,"C"
RETURN
END


Programı incelersen Her bir sensörün  64 bitlik Rom kodunu görürsün. Ben bu kodu önceden bildiğim için direk programda kullandım. Ama normalde bu kod bilinemiyeceği için bu iş içn bir menü yapılması gerekir.
Ben Sensörün Rom kodunu öğrenmek içinde bir program yazmıştım. Oradan sensörün Rom koduna bakıp buradaki programda kulandım.

Sensörlerin Rom kodunuöğrenmek için yazdığım program ise budur
'****************************************************************
'*  Name    : Seri No.BAS                                       *
'*  Author  : [Ferhat YOL]                                      *
'*                                                              *
'*          : All Rights Reserved                               *
'*  Date    : 19.12.2010                                        *
'*  Version : 1.0                                               *
'*  Notes   : Aynı anda hatta sadece 1 adet sensör bağlayınız   *
'*          :                                                   *
'****************************************************************
PORTA=0:portb=0
TRISB=%00000001   'PortB.0 giriş diğerleri çıkış yapıldı.
TRISA=0           'A portu tamamı çıkış yapıldı.
'-----------------------------------------------------------------
@ DEVICE pic16F628A                      'işlemci 16F628                               
@ DEVICE pic16F628A, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_off            'MCLR pini kullanılmıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
'-----------------------------------------------------------------
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
define LCD RWREG    PORTB   'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT    2       'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı  ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor

CMCON=7    ' komparatör iptal
'----------------------------------------------------------------------------
DQ     VAR PORTB.0
ID     VAR BYTE[8]

CLEAR
PAUSE 500
LCDOUT $FE,1
BASLA:
OWOUT DQ, 1, [$33]  ' Issue Read ROM command
OWIN DQ, 0, [STR ID\8]' Read 64-bit device data into the 8-byte array "ID"
LCDOUT $FE,$80,HEX2 ID[0],HEX2 ID[1],HEX2 ID[2],HEX2 ID[3],HEX2 ID[4],HEX2 ID[5],HEX2 ID[6],HEX2 ID[7]
GOTO BASLA
END


Bu verdiğim iki programı birleştirerek sensör kayıt menülü aynı hattan birden fazla sensör okuyan bir termometre yapabilirsin.

Unutmadan işin kuralı gereği sensör kaydı yaparken veya sensörün seri nosunu öğrenirken aynı anda hatta birden fazla sensör bağlamamak gerekiyor.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Soru aslında display bazında sorulmuş. Bende anladığım şekilde cevaplayayım.
Sonuçta iki sensörden okunmuş elinde iki sıcaklık olacak. Birincisi SICAK1 diğeri SICAK2 olsun.
Elinde 4 erli gurup halinde 8 adet display mevcut. Tabiiki bunların sürülme şekli önem kazanıyor.
Şayet hepsini aynı port dan sürersen sanki 8 adet displayi taramalı olarak sürüyormuş gibi görmek gerekiyor.
Nasılki bir saat bilgisini gösterirken en sağdakine dakika birler ve onlar hanesini sonraki guruba saat bir ler ve onlar hanesini verebiliyoruz. Aynı şekilde 8 adet displayi de benzer mantıkla sürüp bilgileri paylaştıracaksın.
Bu durumda ilk 4 displaye SICAK1 bilgisi diğer 4 lü gurubada SICAK2 bilgisi verilince istediğini elde etmiş olacaksın.

Ete.

xoom

Cevaplar için tşk ederim .. sormak istediğim ete hocam sizin yanıtınızdı fakat mucit  hocam senin paylaştığın bilgilerde çok güzel.. ben şuan hem sıcaklık bilgilisi ayrı hatlardan hemde display grupları için ayrı hat kullanmayı deneyeceğim .. Ete hocam sizin saat programınız üzerinde oynama yaparak yapmaya çalışacağım. tşkler..

erdoganacun

ete  hocam  saygılar  ben bir  şey  öğrenmek  istiyorum  hocam  elimde  bir  saat  proje  var  ve  bu saati  infre  led  ile  4 kanal   çalıştırmak  istiyorum  ...  pt2272  görevini  pic  e  verebilirmiyiz   hocam  biliyorsunuz  pt2262..72   infre  ledli  projeler  var   bende  ek  bir  sürü  kalabalık  olmasın  bu  şekilde  yapabilirmiyiz     saygılar

erdoganacun

ete  hocam  pt2272  görevini  pic e  verebilirmiyiz  derken  saat için kullandığımız  pic  demek  istedim   hem saat  hemde  infre  alıcı  görevini  yapacak 

ete

Birinci sorun şifre isini pic ile çözmek başlı basına bir program konusu bir sürü kod yazmak gerekir. Kullandığın işlemci 18f serisinden birisi degilse saat ve şifre çözme kodlarını taşıyamaz.
İkincisi bu ısı kendin yapacaksan zaten bana sorman yersiz. Yok ben yapacaksam bunu ücretsiz yapmam. Çünkü ticari bir konu.

Ete

efor

hocam merhaba, boş kaldıkca projenın basına oturabılıyorum anca.

RGB için üretecegimiz picleri 16f777 sectık. şimdi kartta bunun çizimizi yapıyorum.  mosfetlerı dıp kılıf olarak yerleştırdım. picin

ccp1 (36 pin)  PORTC.2
ccp2 (35 pin)  PORTC.1
ccp3 (15 pin)  PORTB.5

pinlerini pwm çıkışı olarakmı kullanacagız ? bunlarmıdır hocam donanımsal pwm cıkısları ?  ve mosfetin gate ile pic pini arasına kac ohm direnc kullanayım?

ete

Evet onlar pwm çıkışları olacak. direç 10 ohm - 22 ohm arası bir şey olacak

ete

BİDİL

Bilgi kirliliği yarattığım için herkesden özür dilerim.
Bir iki gündür sitede kodlarını incelemek için ds1307 rtc yi 16f877A ile okuyup lcd ekrana yazabilen bir proje arıyorum yada aramaya çalşıyorum bir türlü bu konuya erişemedim. Tabiki birçok proje var fakat ya dıspay ekran ile çalşılmış yada ds1307 yerine 1302 kullanılmış. Belkide ben yanlış bir arama metodu kullanıyorum. Sitemizde konuyla alakalı çalşmalar yapıldığına eminim fakat ben bu konu başlıklarına ulaşamadım ne tür konu başlıklarını incelemem gerekir yardımcı olursanız sevinirim. iyi çalışmalar dilerim.

ete


BİDİL

TEŞEKKÜR EDERİM
İYİ ÇALŞMALAR

BİDİL

BASLA:
       GOSUB ZAMANOKU
         lcdout $FE,1,"TIME",":",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
         LCDOUT $FE,$C0,"DATE",":",DEC2 AYGUN,":",DEC2 AY,":",DEC2 YIL
         pause 50
         RETURN       
   
ZAMANOKU:
        I2CRead SDA,SCL,$D0,$00,[SECOND,MINUTE,HOUR,WEEK,DAY,MONTH,YEAR]',TEMP]                 
        sn =((SECOND>>4) & $0F)*10+(SECOND & $0F)
        IF SN=ESKISN THEN RETURN
        dak=((MINUTE>>4) & $0F)*10+(MINUTE & $0F)
        SAAT=((HOUR>>4) & $03)*10+(HOUR & $0F)
        HAFGUN=((WEEK>>4) & $03)*10+(WEEK & $0F)
        AYGUN=((DAY>>4) & $03)*10+(DAY & $0F)
        AY= ((MONTH>>4) & $01)*10+(MONTH & $0F)
        YIL= ((YEAR>>4) & $0F)*10+(YEAR & $0F)         
        ESKISN=sn   
        RETURN
                   
ZAMANYAZ:
        SECOND =(SN DIG 1)<<4+SN DIG 0
        MINUTE=(DAK DIG 1)<<4+DAK DIG 0
        HOUR=(SAAT DIG 1)<<4+SAAT DIG 0
        WEEK=(HAFGUN DIG 1)<<4+HAFGUN DIG 0       
        DAY=(AYGUN DIG 1)<<4+AYgun DIG 0
        MONTH = (AY DIG 1)<<4 + AY DIG 0
        YEAR =(YIL DIG 1)<<4+YIL DIG 0       
        I2CWRITE SDA,SCL,$D0,$00,[SECOND,MINUTE,HOUR,WEEK,DAY,MONTH,YEAR]
        PAUSE 10
        RETURN

Yukarıdaki kodları sayın ETE nin haftalık alarm projesinden aldım d1307 ve 16f877A kullanarak saat ve tarihi Lcd ekrana yazmak istiyorum ancak lcd ekranda bilgilerin tamamı 00:00:00 olarak geliyor ki gayet doğal :)) araştırdığım ve anladığım kadarıyla programa başlamadan önce ds1307 nin ilgili bitlerine başlangıç değerleri atamam gerekiyor.Konuyla ilgili Sayın ETE nin bir çok açklamasını okudum ama yeni olmam hasebiyle anlayamadım ve nerden başlamam gerektiğini bilmiyorum. Anlayabileceğim basit bir kaynak sizce ne olabilir.
teşekkür ederim.

ete

Aslında DS1307 nin data sheetini incelemektenbaşlasan fena olmayacak. Anlamadığın yerler sanırım registerlerin format şekli.
Bende Data sheet den öğrenmiştim. Oraya bakarsan neler olduğunu görebilirsin.
Verrdiğim programda saat'e nasıl yazıldığını ve saatin nasıl okunduğunu görüyorsun. Bu bilgiyi standart olarak alıp kendi programına monte etmen gerekiyor.
Bütün saatler ayar ister. Ayarladığın yerden çalışmasını südürür. Bütün yapman gereken şey saat registerlerine ayarlanmış değeri verdirip entegreye kendi formatında yazdırmak. Verdiğim programda bununda örneği mevcut. Aradığın her şey var. Lütfen oturup incele ve genel kapsamlı sorular yerine daha daraltılmış alanı kapsayan sorular sormaya çalış. Yoksa hiç bir yardım alamayacaksın.

Ete

Powered by EzPortal