Çok detaylı bir alıcı verici devre projesi pic16f84 ve mikro denetleyiciler hakkında bilgilerin yanı sıra Sharp SHF 480, GP 1U52 kullanımı için iyi bir örnek ayrıca assembly kullanımı kod bilgileri ve daha bir çok bilgi bulunuyor. Hazırlayan emeği geçen kişilere teşekkürler.
PIC iLE YAPILAN UZAKTAN GARAJ KAPISI KONTROLÜ
Bu devre Pıc ile yaptığımız IR uzaktan kumanda devresidir. Radyo kontrollü uzaktan kumanda devrelerinden daha avantajlıdır. Radyo kontrollü sistem her türlü radyo vericiden etkilenirken, PIC ile yapılan devrede bu tür sorunla karşılaşılmaz. Çünkü alıcı sadece kendi vericisinin verdiği komutları uygular.
Yaptığımız bu uygulama PIC ile yapılmış, 8 kanallı bir uzaktan kumanda sistemidir. Infrared (IR) uzaktan kumanda sistemleri ışık kaynağı olarak bir IR diyottan, alıcı olarakta bir adet IR fotodiyot veya transistörden yararlanılır. IR uzaktan kumanda sistemimiz bir adet verici ve bir adet alıcı devresinden oluşuri
IR verici devresinde bir adet IR ile IR spektrumunda ışıma sağlanır. IR ledin bağlı olduğu LM 555 entegresi 38-40KHz aralığında bir osilatördür. Bu osilatör vericideki PIC 16F84 tarafından modüle edilerek 38KHz modüleli kontrol sinyali elde edilir. Alımıza neden PIC ile direk sürmüyoruz 38KHz, ne gerek var gibi düşünce gelebilir. Bunun en basit açıklaması etraftaki kızıl ötesi parazit kaynaklarının karışmasını önlemek için olacaktır. Evlerde kullandığımız standart enkandesan ampuller 50KHz lik IR kaynakları olarak çalışır. Eğer biz 38KHz’lik taşıyıcı kullanmasaydik, 50KHz’lik sürekli ve güçlü bir bastırma bizim alıcımıza sinyal yollamamızı engellerdi.
Verici devresinin RB0-RB bacakları kontrol uçlarıdır. Bu uçları anahtarlar yardımıyla şase ile irtibatlarsak alıcıda irtibatladığımız bacak örneğin, vericide RB0 ise alıcıda da RB0 iletime geçer. Bıraktığımız anda alıcıya yeni bir kumanda sinyali gelene kadar ilgili bacak iletimde kalır. Kumanda sinyali giderken RA1 bacağına bağlı led yanar.
Alıcı devredeki transistörler motor sürmek için kullanılmıştır. Transistörün kollektör ucunaki diyotlar, motordan gelecek gerilim ve akımları engeller. RB&6 çıkışındaki led aracın durduğu andaki stop lambalarını oluşturur. Alıcı devresindeki LM 555 bir flip flop devresidir.
Motorun her iki yönde de hareket edebilmesi için transistörün + voltaj verdiği koldaki şasesi anahtarla iletimden kesilir.Bu devre motor üzerine yapılmalıdır.
InfraRed (IR) uzaktan kumanda sistemleri ışık kaynağı olarak bir IR Led diyottan,alıcı olarak da bir adet IR fotodiyot veya transistorden faydalanırlar. Aşağıda şemadan da görüleceği gibi IR uzaktan kumanda sistemimiz bir adet verici ve bir adet alıcı devresinden oluşur.IR verici devresinde bir adet IR Led ile IR spektrumun da ışıma sağlanır. IR led’in bağlı olduğu LM555 entegresi 38…40 Khz aralığında bir osilatördür.
Bu osilatör vericideki pic 16f 84 tarafından modüle edilerek 38 khz modüleli kontrol sinyali elde edilir. Aklınıza neden pic ile led’i direkt sürmüyoruz 38 khz,ye ne gerek var gibi bir düşünce gelebilir. Bunun en basit açıklaması etraftaki kızılötesi parazit kaynaklarının karışmasını önlemek için olacaktır. Evlerde kullandığımız standard enkandesan ampuller 50 Hzlik IR kaynakları olarak çalışırlar…Eğer biz 38 Khzlik taşıyıcıyı kullanmasaydık 50 Hzlik sürekli ve güçlü bir bastırma bizim alıcıya sinyal yollamamızı engellerdi.
IR alıcı devresinde kullandığımız SHARP firmasının GP1U52X IR alıcı modülü, tv lerin üzerinde bulunan ve IR el kumandasından gelen sinyalleri algılayıp bunları 38khzlik taşıyıcıdan süzerek saf kontrol datasını bırakan bir ünitedir. Kısaca tek bir fototransistörden ibaraet değildir. Modül içinde bir adet IR fototransistör,38khz lik bir band-geçiren filtre, kuvvetlendirici, sinyal şekillendirici bulunur. Çıkışı TTL seviyesinde kontrol sinyalidir.
Verici Devresi (pic16f84, shf480, lm555)
Alıcı Devresi (pic16f84, gp1u52)
Bu modül sizi korkutmasın, bulmak zor değil çünkü her IR kumandalı tv üzerinde böyle bir modül bulunmak zorundadır.Belki aynı marka veya tip bulamazsınız ama bacak bağlantılarını öğrenebildiğiniz sürece herhangi birini kullanabilirsiniz. Telefunken firmasının TK19 modülü bir ara SHARP’la birlikte piyasada sıkça bulunuyordu.Verici devresinin RB0..RB7 bacakları kontrol uçlarıdır. Bu uçları anahtarlar yardımıyla şase ile irtibatlarsanız alıcıda irtibatladığınız bacak örneğin vericide RB0 ise alıcıdada RB0 iletime geçer. Bıraktığınız anda alıcıya yeni bir kumanda sinyali gelene kadar ilgili bacak iletimde kalır. Kumanda sinyali giderken RA1 bacağına bağlı led yanar.
Devrenin kontrolu öncelikle verici ile başlanarak yapılmalıdır. Veircide pic’i yerine takmayın ve LM555 entegresinin 4 nolu bacağını +5 volt ile birleştirin. Bu durumda osilatör sürekli 38 khz civarında bir sinyal üretir. Alıcıya da pic’i takmadan +5v verin.bir voltmetre ile alıcı üzerindeki sharp modülünün 1 nolu bacağı ile şase arasını okuyun. Alıcı ve verici birbirini gördüğü konumdayken vericiye voltaj verdiğiniz de alıcıdaki voltmetre ile 0 yani şase , vericiye voltaj verilmediği zaman ise +5 volt okumanız gerekir.
Eğer bu şekilde bir kontrol sonucu voltmetrede bir değişiklik olmuyor ve voltmetre hep +5voltta kalıyorsa vericiye voltaj verip P1 potansiyometresiyle oynayarak alıcıdaki voltmetrede 0 volt yani şase görmeye çalışın. Şaseyi gördüğünüz anda sistem karşılıklı haberleşebiliyor demektir. Şimdi devrelerden voltajı kesin ve picleri yerine takın.Uzaktan kumanda sisteminiz hazır. LM555 entegresi üzerinde yaptığımız 4 nolu bacak ile +5 volt arası kısa devreyi kaldırmayı unutmayın.
Pic rahatlıkla 38 KHz’lik sinyali üretir ama o zaman tek tip alıcı modülü hatta daha iyisi elimizdeki alıcı modülü için yazılım da frekans optimizasyonu yapmak gerekir.Piyasadaki modüller az da olsa 38 khz civarında dolaşan farklı osilasyonlara tepki gösteriyorlar.
Dışarıdan ayarlanabilir bir 38 khz osilatörü kullanmak çok daha esnek bir yapı ortaya koyuyor.. Böylece 38khz. 40 Khz arası çalışan tüm IR modüllerini kullanabilirsiniz.Pic bir cmos entegre olduğundan vericideki RB0…RB7 kontrol bacaklarını boşta bırakırsak hiçbirşeyi kontrol edemeyiz.
PROGRAMLAMA
1- #define : Uygulamalarımızda #define komutunu dahaçok port bitlerine değişken isimler atamada kullanacağız. Bu şekilde yazdığımız programlar da anlaşılır bir hal alacaktır.
Örnek:
#define buton porta,3 ; Bu komutla -PortA,3- yazacağımız yerlerde -buton- yazmamızda aynı işi görecektir
Böylelikle programımızı kontrol ederken -PortA,3- ün ne olduğunu araştırmamıza gerek kalmayacak ve bunun -buton- olduğunu anlayacağız.
2- clrf : Sonrasına yazılan portu tamamen sıfırlar.
Örnek:
clrf Porta ; A Portunu sıfırlar. Genellikle programın başına yazılmasında ;fayda vardır.
3- bsf : Portların çıkışına mantık 1 çıkışı vermeyi sağlar.
Örnek:
bsf Porta,3 ; A portunun 3. bitini mantık 1 yükler.
4- bcf : Portların çıkışlarını mantık 0 (sıfır) yapar.
Örnek:
bcf Portb,5 ; B portunun 5. bitini 0 (sıfır) yapar.
5- btfss : Program akışında portun belirtilen bitinin mantık 1 olup olmadığını kontrol etmekte kullanılır.
Örnek:
main btfss Porta,2 ; A portunun 2. biti mantık '1' ise sonraki komutu ;atla. goto main ; Porta,2 mantık '0' ise -main- etiketli bölüme geri ;dön. bsf Portb,6 ; B portunun 6. bitini çıkış mantık 1 yap. ..... ........
Bu komut setinde A portu mantık 1 olana kadar sürekli 1. ve 2. satır arasında döngüye girer. A portunun 2. biti mantık 1 olduğunda, program 2. satırı uygulamayıp daha sonraki satırı işlemeye başlayacaktır.
6- btfsc : btfss (5. komut) ile aynı özellikte, ancak mantık 0 (sıfır) seviyesini kontrol eder.
7- goto : Programda istenen yere gidilip işlemlerin oradan itibaren yürütülmesini sağlar.
Örnek :
main bsf Portb,4 ; B portunun 4. bitini 1 yap. ..... ...... ; Buraya bir geciktirme rutini (Bkz. 10. madde) ;yerleştirilebilir. bcf Portb,4 ; B portunun 4. bitini 0 (sıfır) yap goto main ; -main- etiketli satıra gider ve işlem oradan sonra ;tekrar devam eder.
8- equ : Bu komut PortA, PortB, ve yazmaçların adreslerinin atanmasını sağlar.
Örnek : PortA nın PIC16F84 teki adresi 05 tir.
porta equ 05 ;Bu komutla PortA nın PIC içerisinde bulunduğu adresin ;05 olduğunu tanımlamış olduk. portb equ 06 ; Bu komutlada PortB nin adresini tanımlamış olduk. ....... .... ...
9- movlw-monwf : Bu komutlarla PIC içerisinde bulunan -W- yazmacına (Değişkenine) değer atanır. Programın ilerleyen aşamalarında bu değer okunup portlara atanabilir. Gerekli görüldüğü yerlerde bu -W- yazmacının değeri arttırılıp-eksiltilerek değişik değerlerin portlara atanmasınıda sağlarlar.
Örnek:
movlw 80H ; W yazmacına 80H değeri yüklenir. movwf trisb ; W yazmacındaki 80H değeri PortB ye yüklenmiş oldu.
10- Geciktirme rutinleri : Geciktirme rutinleri; programın işleyişi esnasında, herhang ibir işlemden sonra belli bir süre beklemesini istediğimiz zamanlarda kullanmamız gereken zamanlayıcı alt programlarıdır.
Örnek: Bir yürüyen ışık devresinde, her ledin yanmasından sonraki satıra geciktirme rutini yerleştirmezsek ledlerin hepsini aynı anda yanıyormuş gibi görürüz. Bunu önlemek için ledleri yakan her program satırından sonra bir geciktirme rutini eklememiz gerekir. Aşağıda basit bir örnek göreceksiniz. Butür alt rutinler genellikle programın sonuna yazılır.
........ ...... ........ ...... delay0 equ 0DH ; delay1 yazmacını 0DH adresinde tanımladık. delay1 equ 0EH ; delay2 yazmacı 0EH adresinde. delay2 equ 0FH ; delay3 yazmacı 0FH adresinde. ......... ..... ..... ......... ..... ..... ; Ana programın işlediği program satırları. bsf portb,1 ; Portb nin 1. bitini mantık '1' yap. call DELAY ; DELAY etiketli alt rutini çağır. bcf portb,1 ; Portb nin 1. bitini mantık '0' yap. bsf portb,2 ; Portb nin 2. bitini '1' yap. call DELAY ; DELAY etiketli alt rutini çağır. bcf portb,2 ; portb nin 2. bitini '0' yap. ..... ......... ; Program bu şekilde devam edebilir. DELAY movlw .4 ; W yazmacına .4 değeri atandı. movwf delay0 ; W yazmacındaki .4 değeri delay0 ;yazmacına atandı. D0 movlw .200 ; W yazmacına .200 değeri atandı. movwf delay1 ; W yazmacındaki .200 değeri delay1 ;yazmacına atandı. D1 movlw .200 ; W yazmacına .200 değeri atandı. movwf delay2 ; W yazmacındaki .200 değeri delay2 ;yazmacına atandı. D2 decfsz delay2,F ; delay2 değerini azalt. '0' olduysa sonraki ;komutu atla. goto D2 ; D2 etiketli satıra geri dön. decfsz delay1,F ; delay1 değerini azalt '0' olduysa ;sonraki komutu atla. goto D1 ; D1 etiketli satıra git. decfsz delay0 ; delay0 değerini azalt '0' olduysa sonraki ;komutu atla. goto D0 ; D0 etiketli satıra git. retlw 00 ; rutinin çağrıldığı satırın alt satırına ;dön.
Bu program grubunda önce portb nin 2. biti çıkışı ‘1’ oluyor, ardından -call DELAY- komutuyla geciktirme rutini çağrılıp çalıştırılıyor. DELAY rutininde 3 ayrı döngü kurulmuştur. Her döngüde -delayX- değerleri azaltılıp ‘0’ değerine kadar düşmesi sağlanmaktadır. -delayX- değerlerinin hepsi ‘0’ değerine ulaştığında program -retlw 00- komutuyla -call DELAY- komutunun altındaki satıra geri dönüp işlemlerin o satırdan itibaren işlemesini sağlamaktadır.
7805 İLE YAPILMIŞ BESLEME DEVRESİ
XT (KRİSTAL-KONDANSATÖR) OSİLATÖR DEVRESİ
YÜKSEK GÜÇLERİN PIC’ TEN YALITILMASI
PIC MİKROKONTROLÖRLERİNİN ÖZELLİKLERİ
PIC16C84/PIC16F84 ÜZERİNE BİR TEZ ÇALIŞMASI
PIC’İN KULLANILMA NEDENİ
PORTLARIN BAĞLANTI ŞEKİLLERİ
Yukarıda özetler verildi;
Şifre-Pass: 320volt.com
Yayım tarihi: 2009/10/16 Etiketler: alıcı verici devre, garaj kapısı kontrol, gp1u52, ir kumanda, LM555, microchip pic projeleri, PIC16F84 örnekleri, shf480
Sonuç olarak kaç mhz üretiyor ?
hocam devrenin hex dosyası yok eğer sizde varsa onuda paylaşabilrmisiniz…..
şimdiden teşekkürler