PIR HAREKET SENSÖRÜ KONTROLÜ NASIL YAPABİLİRİM?

Başlatan tayfun, 06 Ekim 2011, 11:54:32

tayfun

Hocam bu işlemi 15 defa gerçekleştirecekmiyim? ve en son LOW verildikten sonra sensör pini giriş yapılacak ve istenilen pin çıkış durumuna gelicek?  biraz kafamda canlandı ama tam oturtamadım program akışını?Örnekleyebilirmisiniz? Birde ben BUTTON komutunu kullanarak yapailirmiyim bunu ?

Tayfun
İnancın büyük olsun; ama inancınla büyüklük taslama!

ete

Bu şekilde toplam 15 adet bit alman gerekiyor. 15. biti aldıktan sonra senör LOW da bırakılıp pic sensör pini girş yapılacak hepsi bu.
Buton komutu ile yapabilirmiyim demişsin. Ortada bir buton göremiyorum ben sen görüyorsan buton komutunu kullan. Doğrusu ne demek istediğini bile anlamadım. Ne demek oluyor Buton komutu. Bu komut bir butonu kontrol etmek için kullanılır. Sende buton yokki!!!!.

Ete


tayfun

Button komutunun açıklamalarında görmüştüm. Sensör kontrollerinde kullanılabilir diye okumuştum ondan sordum hocam. Evet button yok devrede.

Tayfun
İnancın büyük olsun; ama inancınla büyüklük taslama!

tayfun

Günaydınlar herkeze.Hocam ben bazı bilgiler buldum.Bir kontrol edebilirmisiniz?

http://www.picbasic.co.uk/forum/showthread.php?t=7688&s=c4f5792b90c469760d8b8d90bb1232d9
@ device  pic12F675, protect_off, mclr_off

define OSC 4
DEFINE OSCCAL_1K 1             'Set OSCCAL for 1K device

DataPin     VAR GPIO.0              'DOCI on the PIR
PIRdata     VAR WORD               
i           VAR BYTE

ANSEL = 0                           'No AD on 12F675
CMCON = %00010111                   'Digital pins - no comparator
WPU = 0                             'No pullups

WHILE 1                             'Do forever
    HIGH GPIO.1                     'Set a pin to time the reading
    GOSUB ReadPIR                   'Call the Sub
    LOW GPIO.1                      'Reset a pin to time the reading
    PAUSE 10                        'Just something to sync the scope
WEND
   

ReadPIR:
    INPUT DataPin                   'Let PIR control the Datapin
    PIRdata = 0                     'Use this time to let Datapin settle
    WHILE DataPin = 0 : WEND        'Wait for PIR to indicate "new data"
    PAUSEUS 25                      'Wait for PIR to fiddle with the data
    FOR i = 14 to 0 STEP -1         'Loop to get 15bits
        LOW DataPin                 'Force Datapin Low
        HIGH Datapin                'Force Datapin High
        INPUT Datapin               'Let PIR control the Datapin
' You may need a short pause here if you have long wires to the PIR   
        PIRdata.0(i) = Datapin      'Sample the datapin
    NEXT
    LOW DataPin                     'Force Datapin Low
    INPUT Datapin                   'Let PIR control the Datapin
    RETURN
   
END
İnancın büyük olsun; ama inancınla büyüklük taslama!

ete

Veridiğin program benim açıklamama uyuyor. Ancak bir iki eksiği var bana kalırsa.
Eksiği Pic sensör pininin Çıkış yapıldığı gibi aynı zamanda giriş yapılması gerektiği göz ardı edilmiş.
Kısaca sensör pini çıkış verecekse çıkış yapılmaıl bilgi alacaksa giriş yapılmalıdır. Bu programda yalnızca birisi yapılmış.
Doğrusu aşağıdaki gibi olmalı,
ANSEL = 0                           'No AD on 12F675
CMCON = %00010111                   'Digital pins - no comparator
WPU = 0                                         'No pullups
TRISIO=0
PIRData VAR WORD                        'değişken tanımlaması eksik idi eklendi

WHILE 1                             'Do forever
    HIGH GPIO.1                     'Set a pin to time the reading
    GOSUB ReadPIR                   'Call the Sub
    LOW GPIO.1                      'Reset a pin to time the reading
    PAUSE 10                        'Just something to sync the scope
WEND
   

ReadPIR:
    INPUT DataPin                   'Let PIR control the Datapin
    PIRdata = 0                     'Use this time to let Datapin settle
    WHILE DataPin = 0 : WEND        'Wait for PIR to indicate "new data"
    PAUSEUS 25                      'Wait for PIR to fiddle with the data
    FOR i = 14 to 0 STEP -1         'Loop to get 15bits
        Output DataPin              'yeni eklendi***************
        LOW DataPin                 'Force Datapin Low
        HIGH Datapin                'Force Datapin High
        INPUT Datapin               'Let PIR control the Datapin
' You may need a short pause here if you have long wires to the PIR   
        PIRdata.0(i) = Datapin      'Sample the datapin
    NEXT
    Output DataPin                 'Yeni eklendi*******************************
    LOW DataPin                     'Force Datapin Low
    INPUT Datapin                   'Let PIR control the Datapin
    RETURN     
END


Bu işlem sonucunda elinde PIRData şeklinde 16 bitlik bir değişkende okunana digital veri olacaktır. Nasılbir değer okunduğunu ancak başka bir işlemciye LCD bağlayarak anlamak gerekir. Ona göre yine bu işlemci ile gerekirse LCD kullanmadan değerlendirme yapılabilir.

Ete

tayfun

PIRData VAR WORD                        'değişken tanımlaması eksik idi eklendi
Değişken tanımlamalrında vardı hocam?yoksa bu şekilde yazdığınız gibi değişiyormu?

'''''Bu işlem sonucunda elinde PIRData şeklinde 16 bitlik bir değişkende okunana digital veri olacaktır. Nasılbir değer okunduğunu ancak başka bir işlemciye LCD bağlayarak anlamak gerekir. Ona göre yine bu işlemci ile gerekirse LCD kullanmadan değerlendirme yapılabilir. ''''
Burada anladığım kadarı ile PIRData değişkenindeki 16 bitlik dijital veriyi başka bir pice yollayıp LCD de görüntüleyip o bilgiye göre işlem yaptırmakmı?

Tayfum
İnancın büyük olsun; ama inancınla büyüklük taslama!

ete

Tayfun dediklerimi yanlış anlıyorsun.
Bu verilen programda sensörden yalnızca bilgi okunuyor. Ama o bilgi ile bir işlem yapılmıyor. Bunu kast etmiştim.
Gelen bilgi 14 bitlik bir bilgi aslında . Ama nasıl bir bilgi bilemiyorum. Yani sensör bir cisim görünce nasıl bir bilgi veriyor.
Maksimum 16380 gibi bir değer vermesi gerek. Ama cisim var ikenmi veriyor yok ikenmi veriyor. Yada cismin yakınlığı veya uzaklığına göre nasıl değer değiştiriyor bunların incelenmesini kast etmiştim. Yoksa başka bir işlemciye gerek yok.
Alınan bilgi şayet rakam büyüdikçe cisim yakınlaşıyor şeklinde ise yapılacak iş şayet Pirdata>1000 then röleyiçek gibi bir şey olabilir. Bunlar sensör okuma sonuçları konusunda bilgi sahibi olduktan sonra kararlaştırılacak şeyler elbette.

Ete

inventor

#22
Aşağıda PYD1998 için yazılmış PBP kodları bulunuyor. Okumanın nasıl yapıldığını oradan anlayabilirsiniz
FOR i = 14 to 0 STEP -1         'Loop to get 15bits
        LOW DataPin                 'Force Datapin Low
        HIGH Datapin                'Force Datapin High
        INPUT Datapin               'Let PIR control the Datapin

Yukarıdak, bölümde low-high bölümleri arasına kesinlikle bir zaman gecikmesi koymayın. Sensör 1mikrosn gecikmeli istiyormuş bunu. Sensörden tam bilgi okuma şekli aşağıda


@ device  pic12F675, protect_off, mclr_off

define OSC 4
DEFINE OSCCAL_1K 1             'Set OSCCAL for 1K device

DataPin     VAR GPIO.0              'DOCI on the PIR
PIRdata     VAR WORD               
i           VAR BYTE

ANSEL = 0                           'No AD on 12F675
CMCON = %00010111                   'Digital pins - no comparator
WPU = 0                             'No pullups

WHILE 1                             'Do forever
    HIGH GPIO.1                     'Set a pin to time the reading
    GOSUB ReadPIR                   'Call the Sub
    LOW GPIO.1                      'Reset a pin to time the reading
    PAUSE 10                        'Just something to sync the scope
WEND
   

ReadPIR:
    INPUT DataPin                   'Let PIR control the Datapin
    PIRdata = 0                     'Use this time to let Datapin settle
    WHILE DataPin = 0 : WEND        'Wait for PIR to indicate "new data"
    PAUSEUS 25                      'Wait for PIR to fiddle with the data
    FOR i = 14 to 0 STEP -1         'Loop to get 15bits
        LOW DataPin                 'Force Datapin Low
        HIGH Datapin                'Force Datapin High
        INPUT Datapin               'Let PIR control the Datapin
' You may need a short pause here if you have long wires to the PIR   
        PIRdata.0(i) = Datapin      'Sample the datapin
    NEXT
    LOW DataPin                     'Force Datapin Low
    INPUT Datapin                   'Let PIR control the Datapin
    RETURN
   
END
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

ete

Inventor,
Geriden geldin aynı şeyleri tekrarlamış oldun. Önceden verdiğim yada verilen programlara bakarsan senin verdiğin ile aynı satırları içeriyor. Ancak oradaki eksikleri belirtmeye çalışıyorum ben.
Bir pic pini hem giriş hem çıkış çalışabilir. Pini giriş yapınca dışardan gelen digital bilgi (0-1 bilgisi) alınabilir. Ama o pin giriş konumda ise o pinden bir sinyal çıkartamazsın. Yani pin=HIGH desen o pinden HIGH sinyali çıkmaz. Neden? çünki pin giriş konumundadır ve ilgili sinyali çıkartmak için pin önce Çıkış yapılmalıdır. Bu eksiklikler var o programda.
Bu örnekleri aldığınız yerdeki kişiler ticari programlar yazdıkları için asıl programlarını vermiyorlar. Yalnızca haberleşme kısmını veriyorlar ama aynı zamanda da kafa karıştırıyorlar. Bu konuda benim ilk mesajım geçerli. Sensörden bilgi okumak için işlem sırasını vermiştim.
Bir pini Hem tris registerinden giriş yada çıkış yapabilir hemde INPUT ve OUTPUT komutlarını kullanarak giriş yada çıkış yapabilirsin. Mademki örneğimiz 12F675 işlemcisi bunun Tris Registeri TRISIO dur. O halde söylediklerimi GPIO.0 pinine uygulayalım. Bu pini Çıkış yapalım;
- TRISIO.0=0  veya OUTPUT GPIO.0  her iki komutta aynı işi yapar.
Şimdi bu pini giriş yapalım.
-TRISIO.0=1   veya INPUT GPIO.0  her iki komutta aynı işi yapıyor.

Şimdi tekrar sensör konusunda dönerseniz sensörün DOCI pini bir pic pinine bağlanacak. Bu pin gerektiğinde giriş ve gerektiğinde ise çıkış çalışmak zorundadır. Verilen programda ilgili pin, gerektiğinde giriş olarak ayarlanmış ama çıkış gerektiğinde çıkış yapma komutu verilmemiş. İşte eksiklik burada.
Umarım artık anlaşılmıştır.
ETE

inventor

#24
ETE hocam,

Vaktiyle sizden öğrendiğim kadarıyla high komutu ilgili pini otomatikan çıkış yapıyordu. Şimdi help dosyasına baktım. Şöyle bir ifade var
"Make the specified Pin high. Pin is automatically made an output. "
Burada da high komutu verilen pinin otomatik olarak çıkış olacağı yazıyor. Bu konuda örneği de şu şekilde vermiş.
Example

HIGH 0 ' Make Pin0 an output and set it high (~5 volts)
HIGH PORTA.0 ' Make PORTA, pin 0 an output and set it high (~5 volts)
led VAR PORTB.0 ' Define LED pin
HIGH led ' Make LED pin an output and set it high (~5 volts)


İncelermisiniz
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

ete

Bu aklıma gelimişti. Bazı komutlar pini direk amacına uygun olarak giriş yada çıkış yapıyor idi. Bakmak aklıma gelmedi. Benim hatam.  Ama dikkat etmek gerekiyor. Burada,
HIGH Pin denildimi ilgili pin otomatik olarak çıkış yapılıyor. Ama aynı işi yapan şu komutta yapılmıyor. pin=1
Bu nedenle bana kalırsa doğrusu yine pinleri giriş yada çıkış kendin ayarlamalısın.
Yukarıdaki mesajda eklemeyi unuttum. O forumda bazı komutların 1us  içinde verilmesi gerektiği hatta bir yerde de 200ns lik bir gecikme verilmesi zorunluluğu gibi bilgiler var. Bunların doğru olduğunu sanmıyorum. Sonuçta benim tahminime göre sensör içinde bir shift register var. Bu register clk palsi ister ama zamana bağlı olmaması gerekir.
Dolayısıyla işe başlamak için sensörün kendi pininin HIGH olması bekleniyor. Bu aşamada pic o pine low-High sinyalini (yani bir clk palsi) uyguladığı zaman içerdeki shift register konum değiştirip ilk biti çıkışa veriyor. Burada zamana bağlı bir olduğunu sanmıyorum. Yinede denemek ve emin olmak gerekiyor.
Sensör bir yerlerde satılıyormudur acaba denemek isterdim doğrusu. Tabiiki pahalı bir şey değil ise.

Ete

tayfun

Hocam ozaman ben 16F628A ile PIRdata daki Hareketi gördüğü andaki oluşan veriyi görmeliyim.Sonra ise 12F675 ile gerekli kontrol işlemlerini yaparım.

Tayfun
İnancın büyük olsun; ama inancınla büyüklük taslama!

tayfun

Hocam ben size yollayım sensörü bende var...İnvertor sizede yollayabilirim.

Tayfun
İnancın büyük olsun; ama inancınla büyüklük taslama!

inventor

#28
Sanırım aradığımız  cevaplar bu datasheette var. Sensörün tam anlamıyla nasıl çalıştığını burada anlatmışlar. Benim anladığım kadarıyla ETE nin bahsettiğinden  farklı değil. Ama ETE hocam inceleyip dataylı olarak bizlere anlatabilir. Ben tercümeye başladım.
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

ete

Benim anlattıklarımdan farklı şeyler söylemiyor. Epeyce detay verilmiş burada.
200ns meselesi burada açıklanmış. En azından diyor bana kalırsa pinin o konumda minimum kalma süresidir. Daha azı sorun yaratır ama çoğu bir farklılık yaratmaması gerekir diye düşünüyorum.
Artık bazı şeyleride denemeden üzerinde tartışmak istemiyorum.  Şayet zaman sorunu çıkar ise en azında 20 Mhz lik bir pic ile bu okumayı yapmak ve ard arda okumalar için yükselen kenar PortB.0 kesmesi kullanmak gerekiyor.
Bu konuda daha fazla tartışmaya yada eşelemeye gerek yok. Her şey açıklandı.Gerisi denemeye kalmış artık.

Ete


Powered by EzPortal