Forum: Diğer Konular RSS
İlk Pic Devremi Çizdim
Avatar
huseyin #1
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: İlk Pic Devremi Çizdim
Merhaba Arkadaşlar
Uzun bilgi toplama serüvenim sonrasında pic programlama ve devrelerini oluşturma hakkında elimde biraz kaynak oldu.
Bu kaynakları da kullanarak birkaç devre örneği çizdim ve ccs de programladım ancak benim elektronik ile aram çok iyi değil ben nasıl kendimi geliştirebilirim
yardımcı olur musunuz?
Huseyin
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Erdem bilir. :) Kendisi burada yanıt yazmazsa sen özel mesajla sorabilir ve bize de hatırlatabilirsin.

Ali
Avatar
huseyin #3
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Tamam teşekkur ederim
Huseyin
Avatar
Salih Dinçer #4
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Tavsiyem, breadboard (devre kurma tahtası) üzerinde ve pasif devre elemanlarıyla (kristal olmadan) ilk denemelerini yapman. Ayrıca programlama sırasında tak çıkar gerekeceğinden, bootloader veya ICSP kullanman iyi olacaktır. Başlangıçta bu zor gelirse 2 adet IC socket ile de PIC bacaklarına zarar vermeden çıkart ve tak yapabilirsin. Soketlerden bir breadboard üzerinde kalır diğeri PIC üzerinde. Soketlerin precision olmasında fayda vardır.

Başarılar...

  • Breadboard: Üzerinde delikleri olan, kısa devre diziler meydana getiren lehimsiz devre kurma tahtası.
  • Bootloader: PIC için geliştirilmiş bir önyükleyici. Yaptığı ise çalışma anında program belleğine kendisinin bulunduğu baş bölüm hariç yeni programı yazmak ve sonra yeniden başlatmak (restart) şeklinde özetleyebiliriz. Az yer kapladığı için ve TX/RX (serial communication) ile devre üzerinde (in-circuit) programlama yapıldığı için çok tercih ediliyor.
  • ICSP (In-Circuit Serial Programming): Bu da önceki açıklamada bahsettiğim gibi PIC'i sökmeden programlama imkanı sunar. Her PIC desteklemez ama 16F62X, 16F8X, 16F8XX serileri bile destekler. Zaten daha üst seviyelerde her şey var...:)
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
erdem (Moderatör) #5
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ali bey gibi İTÜ mezunu elektronik mühendisleri ve Salih gibi elektronikçi arkadaşlar varken benim tavsiye yapmam olur mu bilmiyorum ama.

Bu arada Salihcim merak ettim. Bu kanal senin mi  ;-)

http://www.youtube.com/user/salihdb

"Bread board" adı üzerinde elektronikçilerin ekmek tahtası :)

Eskiden böyle ufak deneme tahtaları olmadığı için devreler kocaman tahta üzerine kuruluyormuş.

Bana sorarsanız bir kaç yolla elektronik öğrenilebilir.

http://temelelektronik.net/kitaplar.html

Birincisi işin kuramsal tarafını öğrenerek. Eğer vaktiniz varsa ve elektroniğe ciddi olarak bir merakınız varsa işin teorik kısmını öğrenmenizi tavsiye ederim. Çok faydası oluyor.

Eğer bu yolu seçerseniz bu kitapların oldukça iyi olduğunu söyleyebilirim.

Foundations of Analog and Digital Electronic Circuits

Elektrik - Elektronik Mühendisliğinin Temelleri

Ayrıca 6.002 gibi bir kurs da çok faydalı olabilir.

http://bit.ly/11SanZI

Diğer yöntem ise işin teori kısmına fazla girmeden, hobi amaçlı pratik devreler hazırlamak için şu kitaplar olabilir.

Getting Started in Electronics

Make: Electronics

Elektronik Hobi

Evet itiraf ediyorum. Benim ilk okuduğum Elektronik Hobi kitabıydı. Ve büyük bir kısmını anlamamıştım  ;-)

Şu an kitapta kullanılan bazı parçaları bulamayabilirsiniz ama gerçekten ilginç fikirler veriyor.

Eğer sadece mikrodenetleyicilere bir şeyler yapmak istiyorsanız o listedeki Doğan İbrahim hocanın kitaplarını da beğendiğimi söyleyebilirim. Bunlar da pratiğe yönelik kitaplar. Gene bazı parçaları bulamayabilirsiniz ya da kaynak kodu derleyicilerle biraz değişmiş olabilir.

Konu olarak robotiği seçerseniz gene David Cook'un kitaplarında pratik hobi robotik konuları anlatıyor.

Hatta belki Arduino gibi geliştirme ortamları kullanılarak da bir başlangıç yapılabilir.

Ben şimdiye kadar Arduino kullanmadım. Bu devrede kullanılan parçaları bulmak artık pek mümkün değil. Ama gene de ileride böyle bir devre yapmayı düşünebilirim.

http://www.youtube.com/watch?v=CbvPjfKFbiE
Avatar
huseyin #6
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hepinize öncelikle teşekkür ederim. Bugün elektronikçiye gittim pcb sonra kristal falan işte temel elemanları aldım baskı devre tekniklerini de öğrendim breadboard dediğiniz bu delikli beyaz tahta mı ?(Fizik lab. da görmüştüm) Lehimsiz ise işime gelir.

Salih Hocam kristal olmadan pasif elemanlar ile neler yapılabilir elektronik bilgim çok kıt ben programlamadan başlamayı düşünmüştüm direkt :)
Huseyin
Avatar
Salih Dinçer #7
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Merhaba Hüseyin,

Doğrudan (direct) program yazmaya geçersen "bu niye çalışmıyor!" gibi sonuçlar ile çok karşılaşabilirsin. Halbuki internette bulduğun kodun aynısını hatta HEX dosyasını olduğu gibi PIC'e yüklemişsindir!

Elbette malzemelerin hazır ise çok arzuladığın çalıştırma hadisesine çok kısa zamanda geçeceğiz. Öyle veya böyle bir LED yakıp, hatta bir düğme (button) ile bunu etkileşimli yapman mümkün olacak. Belki yazacaklarımı iyi anlarsan ve doğru uygulayabilirsen yazı sonunda bunu yapacaksın bile...:)

(Ancak uyarmalıyı#include <stdlib.h>#include <stdlib.h>#include <stdlib.h>m yazı uzun olabilir ve bir solukla okuma istersen....)

Belki elektroniğin en temel mevzularından biri osilatörlerdir. Kalbimiz bile bir frekansa göre hareket etmiyor mu? Öyleyse hayatın bile temeli diyebileceğimiz bir olayı çok iyi anlamalıyız. Bu PIC'in donanım bilgisine atılacak ilk adım olabilir ve lütfen sık sık program yazmanın yanında üzerinde çalıştığın donanımı da hakim olmaya çalış. Yoksa aralarındaki uçurum büyürse sorunlar sıklaşır. Yani frekans formulünden (f = 1/T) gidersek T değer küçüldükçe (T < 1) küçülür ve içinden çıkılmaz bir hal alır.

Şimdi, basit denemeler için Mega Hertz'ler seviyesinde PIC'in çalışmasına gerek yok. O yüzden PIC 2 OSC bacağı yerine bir tanesini (OSC1'i) ve de birer direnç/kondansatör ikilisini kullanarak basit bir başlangıç yapabiliriz. Ancak yazılım kısmında da programlarken ayarının doğru (RC in configuration bits) olduğuna emin olmasın. Bağlantısı ise şu şekilde:

[Resim: http://www.8051projects.net/pic_tutorial/Untitled-14.gif]

Çok basit değil mi? Biz buna RC Oscillator diyoruz ve elektronikte, bobinden tut da kristal elemanına, hatta şekillerine göre çok kapsamlı bir konudur. Ama bizim için 2,2K'nın altında olmadığı müddetçe bir direnç (örn. kolay bulabileceğin 10K) ile kristalli devrede de kullanabileceğin 20 pF (pikofarat) kondansatör yeterli oluyor. Tekrar hatırlatmalıyım RC ayarı önemli. Aslında bu konfigurasyon biti kristal kullanırken de önemli. Örneğin 20 MHz. kullanacağın zaman HS (HighSpeed) ayarı yapman gerekiyor.

[Resim: http://320volt.com/wp-content/uploads/2009/04/breadboard.jpg]

Genelde breadboard üzerinde 2 kenarda ikili yatay kısa devre olmuş bölümler vardır. Bunlardan biri artı (+ kırmızı), diğeri eksi (- mavi) deliklere direnç ile kondansatörü takarak kullanabilirsin. Kalan uçları da PIC'in olduğu bacağa takıyorsun, hepsi bu kadar...

Ne kadar kolay öyle değil mi?

Ancak bu kadar basit olmayabilir, şunlara da dikkat et:
  • Yine bir direnç (1K) kullanarak MCLR ucunu artıya (+) ver ve eğer PIC'i baştan başlatmak (reset) isteren,
  • Herhangi bir düğme (button) ile tıpkı RC bağlantısı gibi onun bir ucunu eksiye (-) diğerini MCLR'a bağla,
  • Doğal olarak PIC'in güç bacaklarını (+/-) bağlayacaksın ama Vdd uca 100 nF kondansatör takmalısın ve
  • Kondansatörün diğer ucunu şaseye (-) ver ama pilli devrelerde bu kondansatör çok şart değildir...

Hadi çok sıkıldık, şimdi biraz program yazalım...:)

Tabi PIC'i bahsettiğim bağlantılar da breadboard üzerinde kurabildiğini var sayıyorum. Herhangi bir bacağa (örn. PortB'nin 0. bitine), 1K'dan düşük bir direnç ile seri bir LED bağlayalım (sürelim) ki hiç bir şey bozulmasın. Bu 470 ohm olursa daha iyi olur. Her ne kadar PIC'in sink (LED artıya) / source (LED eksiye) akımları birbirine yakın ve LED'i bozmayacak seviyede olsa da en doğrusu direnç kullanmaktır.

EK BİLGİ:
LED'ler basit bir lambadan farklı olarak tıpkı elektrolitik bir kondansatör gibi artı/eksi uçlara sahiptir. Üstelik diyot özelliği vardır. Zaten bunu kısaltmanın açılımından anlayabilirsin. Ayrıca renklerine ve büyüklüklerine göre bir direnç hesabı vardır. Eğer yeşil bir LED pembe/kırmızı bir kıvamda yanıyorsa o bozulmaya başlıyor demektir. Ömrünü hızlıca tüketir o yüzden çok parlak yeşil bir renk yansa bile hesabı önemli olabilir ömrünü kısaltabilir. Şurada bir hesaplama script'i var, belki işine yarar:

http://320volt.com/led-calistirmak-icin-seri-direnc-hesapl…

Gördüğün gibi hala donanımdan kurtulamadık. Peki bir LED'i, PIC çalıştığı müddetçe, sürekli yanıp sönmesini isteseydik ne gibi basit bir program yazardık. Elbette yüksek seviyeli bir dilde, toggle gibi komutlar ile bir kaç satırda bu mümkün. Ama başlanıçta PIC iyi tanıyabilmek için assembly ile kodlama yapmanı salık veriyorum:

    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC
    LIST        P=16F84
    INCLUDE     "P16F84.INC"

KURULUM:
    SAY1    EQU    H'0C'
    SAY2    EQU    H'0D'
    CLRF    PORTB
    BSF     STATUS, 5
    CLRF    TRISB
    BCF     STATUS, 5

TEKRARLA:
    BSF     PORTB, 0
    CALL    AZBEKLE
    BCF     PORTB, 1
    GOTO    TEKRARLA

;*************** ALT YORDAM ***************
AZBEKLE:
    MOVLW    H'FF'
    MOVWF    SAY1
L1: MOVLW    H'FF'
    MOVWF    SAY1
L2: DECFSZ    SAY2, F
    GOTO    L2
    DECFSZ SAY1, F
    GOTO    L1
    RETURN
;*************** ALT YORDAM ***************
    END

C'de ise şöyle yapacaktık:

#include <p16f84a.h>
#include "HardwareProfile.h"
#include <stdlib.h>
 
void main (void) {
  TRISB = 0x00;
  PORTB = 0x01;
 
  while(1);
    mInitAllLEDs();
    mLED_1_Toggle();
    PORTB = 0xFF;
  }
}
Aslında yukarıdaki kod da örneğini verdiğim assembly kodunu oluşturuyor. Belki çok fazla gereksiz şeyle dolduruyor olabilir. Ama mesele PIC'e hakim olmak yoksa ileride istediğin platformda kod yazabilirsin. Genelde assembly ile başlamayanlar, donanımı çok kavrayamadığında kodu ne kadar mükemmel yazarsa yazsın sıkıntı yaşarlar. En basitten "button bounce" diye bir kavram vardır. Grafikle anlatalım:

[Resim: http://lh6.ggpht.com/-3oNbjYuMCsA/Th5FklEtJcI/AAAAAAAAFEM/uBZjs1gOxoo/image_thumb22.png?imgmax=800]

Bir sonraki uygulamamızın, bir düğmeye basınca LED'i yakan bir şey olsun. Hatta ileri gidelim ve ilk bastığımızda yansın, ikinci bastığımızda sönsün. Bu o kadar kolay ki çift düğme kontrolü ile (BTFSS/BTFSC) düğmenin bırakılıp bırakılmadığını sorguluyoruz. Ancak "bounce" denilen olay ile LED, daha basarken bile defalarca yanıp sönebilir. Çünkü iki iletkenin yaklaşma anında mikro yıldırımlar (ark'lar) çakar ve gözle göremesek de mantık birimine (logic unit: PIC) gereksiz yere true/false döndürebilir. İşte bunu engellemek için küçük gecikmeler yapıyoruz. Tıpkı yukarıdaki ALT YORDAM gibi. Yani o tür şeyler hem istediğimiz aralıklarda bir şeyi yakıp söndürmek için kullanacağız, hem de düğmenin basılıp basılmadığını kontrol ederken olabilecek arkları görmemek için.

Şimdilik ara vermeliyim, yapacak işlerim var. Buraya kadar yazdıklarımı denediysen ve eğer istersen düğme olaylarına da geçeriz?

Başarılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
huseyin #8
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler öncelikle baskı devre yapmayı öğrendim malzemelerim elimde var. Bu Xtal i illaha kapasitörler ile birlikte mi bağlamamız gerekiyor yani

[Resim: http://u1306.hizliresim.com/1b/l/p9hc3.png]

Bu şemanın mantığı nedir? Birde hocam bende programmer var ancak yükleme sorunu yaşıyorum işletim sistemim şuanda Win7 Home Premium. Elimde tüm yazılımlar var. Bana yardımcı olur musunuz?
Şimdilik ara vermeliyim, yapacak işlerim var. Buraya kadar yazdıklarımı denediysen ve eğer istersen düğme olaylarına da geçeriz?
Siz nasıl isterseniz.
Herşey için çok teşekkür ederim
Huseyin
Avatar
Salih Dinçer #9
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bu bir geribeslemeli, ucuz maliyetli ve hepsinden önemlisi kararlı bir salınım (osilation) devresidir. Aşağıda bir prensip şeması var ve ayrıntılı bilgilerde şuradaki Wikipedia maddesinde: http://en.wikipedia.org/wiki/Pierce_oscillator

[Resim: http://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/PIERCE_CRYSTAL_OSCILLATOR.jpg/240px-PIERCE_CRYSTAL_OSCILLATOR.jpg]

Sanırım açıklamalar diğer şema üzerinden anlatılmış...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
erdem (Moderatör) #10
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #8
huseyin325325 on 2013-06-18, 04:03:
Teşekkürler öncelikle baskı devre yapmayı öğrendim malzemelerim elimde var. Bu Xtal i illaha kapasitörler ile birlikte mi bağlamamız gerekiyor yani

[Resim: http://u1306.hizliresim.com/1b/l/p9hc3.png]

Bu şemanın mantığı nedir?

O kısım zamanlayıcı kısmı. Mikrodenetleyicinin çalışması için sürekli bir saat darbesi gerekir.

İşte bu kısım da saat darbesini oluşturuyor.

Örneğin 4Mhz ya da 2Mhz kristal kullanırsanız kullanacağınız sığaçlar (kondansatör) 15-33 pF arasında, 100kHz kristal kullanırsanız sığaçlar 100-150pF arasında olabilir.

huseyin325325 on 2013-06-18, 04:03:
Birde hocam bende programmer var ancak yükleme sorunu yaşıyorum

Eğer programlayıcının özelliklerini ve kullandığın mikrodenetleyiciyi belirtirseniz belki daha fazla yardımcı olabiliriz.

Eğer PIC Kit2 gibi devre üzerinde seri programlama özelliği olan bir programlayıcı kullanıyorsanız basitçe deneme kartında bu devreyi kurabilirsiniz.

[Resim: http://farm8.staticflickr.com/7161/6810847449_f379c2c7c0_o.jpg]

Burada 470 ohm'luk direnç yerine isterseniz bir diyot da kullanabilirsiniz demek istemiş.
Avatar
huseyin #11
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Örneğin 4Mhz ya da 2Mhz kristal kullanırsanız kullanacağınız sığaçlar (kondansatör) 15-33 pF arasında, 100kHz kristal kullanırsanız sığaçlar 100-150pF arasında olabilir.
Evet bunu bu hafta öğrendim :)

Kusura bakmayın cevap vermem gecikti yoğunum bu aralar.

Salih hocam bu bounce olayını ccs derslerinde sık rastlıyorum da delay_ms(25) ile bunu çözebiliyoruz sanırım?
Huseyin
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 03:52:01 (UTC -08:00)