avatar_ete

PIC Basic Ders-04 (Program Oluşturma Genel Kuralları)

Başlatan ete, 28 Ağustos 2011, 14:47:36

ete

Bu bölümde bir program yazılırken nelere dikkat etmeliyiz, hangi bilgi nerede verilmeli bunları öğreneceğiz. Ayrıca program oluşturmak için kullanacağımız yazılımlara bir göz atacağız. Daha sonrada oluşturduğumuz programı derleyip Hex file (Hex Dosyası) haline getirip Pic'e yüklemeyi öğreneceğiz.


Basic programları yazılırken bir editör programından yararlanılır. Bu herhangi bir editör programı
olabileceği gibi BASIC ler için yaratılmış özel editör programları da olabilir. Tabii ki özel editörlerin
görsellik ve program takibi açısından büyük avantajları vardır. Bu nedenle bizde Özel editör
programlarından olan Micro Code Studio programını kullanacağız.

Reytabu

Sayın ETE

İşin mantığını öğrenme amaçlı pic 16F88 ile minik bir devre yaptım.
Programı derlerken sizin örneğinizden 16f88 olarak düzelterek yazdığım aşağıdaki kodlarda Micro Code Studio komutlarında hata veriyor. Bu kodları sildiğim zaman ise hex dosyasını oluşturuyor.
Yardımınızı rica ederim

@ DEVICE pic16F88
@ DEVICE pic16F88, WDT_ON
@ DEVICE pic16F88, PWRT_ON
@ DEVICE pic16F88, PROTECT_OFF
@ DEVICE pic16F88, MCLR_ON
@ DEVICE pic16F88, INTRC_OSC_NOCLKOUT  'XT_OSC - HS_OSC –

ete

MCS de View menüsüne tıkla.
Açılan pencerede Assembler butonuna tıkla.
Sağ tarafta MPASM şeklinde bir ifade ve yanında bir seçim kutusu olacak. O kutu seçilimi duroyor yoksa seçilmemiş durumdamıdır? Seçili ise seçimi üzerine tıklayarak iptal et. Yeniden derlemeye çalış bakalım.

Seçili duruyorsa ve makinan 64 bitlik bir makina ise yapman gereken ilave işler var demektir.
Cevabına göre hareket edeceğiz.

Ete

Reytabu

Hocam

MCS de hex dosyası oluşturmaya  da epey uğraşmıştım.
Makinam 64 bit. MPASM tıklı. Tıkı kaldırınca hiç bir şekilde Hex oluşturmuyordu.

ete


Reytabu

Hocam

verdiğiniz linkteki yöntemi anladığım şekilde uyguladım. Doğru mu anlamışım bir değerlendirin.

PBP klasöründeki 16 f88 klasöründeki config satırının başına ; koyup kaydettim.
sonra programdaki
@ DEVICE pic16F88
@ DEVICE pic16F88, WDT_ON
@ DEVICE pic16F88, PWRT_ON
@ DEVICE pic16F88, PROTECT_OFF
@ DEVICE pic16F88, MCLR_ON
@ DEVICE pic16F88, INTRC_OSC_NOCLKOUT 
tanımlamaları silip aşağıdaki gibi
@ __config  _WDT_ON & _PWRT_ON & _PROTECT_OFF &_MCLR_ON & _MCRL_ON & _INTRC_OSC_NOCLKOUT
kaydettim.
Bu şekilde derlediğm zaman 101 words lük hex dosyası veriyor.

@ __config  _WDT_ON & _PWRT_ON & _PROTECT_OFF &_MCLR_ON & _MCRL_ON & _INTRC_OSC_NOCLKOUT
satırını silip derleyince de 101 words lük hex dosyası veriyor.
bir hata yapıyorum sanki ,
ayrıca pic'i nasıl tanımlayacağız bu formatta.


ete

Pic tanımlaması yada config tanımlama derleme sonucunu etkilemez.
Çünki sen tanımlamaz isen derleyici defult değerleri koyar. Tanımlarsan seninkileri koyar. Doğrusu senin koymandır.

Pic cinsi, derlemeden önce yukarıdaki küçük kutucuktan secilecektir. Gerisini derleyici otomatik yapacaktır.

Ete

mhmtklhci

Merhaba ete hocam uzun araştırmalar sonunda proteus ve protonu buldum kurduktan sonra şu programı yazdım.LED in yanıp sönmesi gerekirken LED Sürekli yanıyor sizce problem  nedir?
Device 16F877A
XTAL 4
Clear PORTB
TRISB=%00000000
basla:
PORTB.0=1
DelayMS 100
PORTB.0=0
GoTo basla
End

Mucit23

Ben söyliyeyim.
Kodunu sırayla takip edersen aslında nerede hata yaptığını göreceksin.
Goto basla komutundan önce delay koymamıştın. Program Portb.0=0 komutu işledikten sonra hemen başla etiketine dallanıp tekrar portb.1 komutunu işliyor ve led yanıyor. Led sönüp tekrar yanıyor. Tabi bu süre mikrosaniyeler mertebesinde olduğu için sen bu yanıp sönmeyi göremiyorsun elbet.
Portb.0=0 komutundan sonra tekrar delay koyarsan ledin yanıp söndüğünü görürsün.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

mhmtklhci

Mucit23 hocam cok tesekkür ederim.Dediğiniz gibi yaptım calıştı.Hocam basic dilini öğrenmek için tavsiye edeceğiniz kaynak var mı?

ete

Forumda yer alan Basic derslerinin iyi bir kaynak olduğunu herkes söylüyor. Normalda başka kaynak ihtiyacın yok. Asıl kaynak bu forum. Yeni başlayanlara öğrenenlere ve ilerletmek isteyenlere her türlü yardım yapılıyor. Bolca örnek program var.
Daha nasıl bir kaynak arıyorsunki ? İllaki bir de kitabım olsun diyorsan piyasada bir çok kitap var. Alırsın birisini arda bir okursun.

Basi dili , programlama komutlarını öğrenmek ve bunları yerli yerinde kullanma becerisidir. BU komutlara ilave öğrenmen gerek bazı ek bilgilerde var. Bunlar sayı formatları  (binary - Desimal- Hexadesimal gibi) , lojik ifadeler (AND - OR- XOR NOR gibi)
Gerisi ihtiyaç duydukça öğrenilecek hususlar . Tabiiki birazda elektronik bilgisne ihtiyaç var. Hem analog hemde digital elektronik bilgisi gerekiyor. Ama her şeyi birden öğrenmke mümkün dmeğil. Yavaş yavaş lerlemeye çalışmanı tavsiye ederim.
Tıkandıkça sor. Hç bir zaman genel soru sorma . Sorduğun soru bir kaç cümle ile cevaplanacak şeyler olsun. Sayfalarca açıklaması olan soruları sorarsan kimse yanıtlamaz. Bu ben bilmiyorum bana öğretin demektir. Ama işin aslı senin çaba gösterip öğrenmen ve eksiklerini burada sorman şeklindedir. Bunu senden bekliyoruz.
Başarılar dilerim.

Ete



mhmtklhci

ETE hocam biraz elektronik bilgim var.Forumda da sizin ve diğer arkadaşların yardımıyla bu işi geliştireceğim, ilginize tesekkürler.

Reytabu

Hocam

Kafama takılan bir konu var bir türlü çözemedim. PIC deki dahili osilatör konusu.
4. dersteki 16f628 li örneklerde geçiyor. Komut şu
@ DEVICE pic16F628,  INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak

Benim bu komuttan anladığım PIC'in içinde bir osilatör var bu kullanılacak. Ayrıca harici bir osilatör bağlanmayacak.
Fakat örneğin şemasında 15 ve 16. bacaklara kristal ve cap. bağlanmış. Konuyu yanlış mı anlamışım.
Bu konuda aydınlatabilir misiniz?


ete

Anladığın doğru. Şemaları hazırlarken uğraşmamak için önceden hazırladığım şemalardan kopyaladım sanırım.
Onları silmeyi unutmuşum.  Dahili OSC kullanılırsa işlemciye ayrıca kristal bağlamak gerekmez.

Ete

Reytabu

Hocam
portb.0 a bağlı bir  tuşla  iki adet portA ya bağlı 1 konumdaki ledi söndürmek istiyorum. İsiste programı çalıştırınca ledler yanıyor. Tuşa bir kez bastığımda 2 led te sönüyor. Acaba nerede hata yapıyorum  veya başka bir yolu var mı?


Yazdığım komutlar şöyle

SAYI=0
HIGH PORTA.0
HIGH PORTA.1

BASLA:

IF PORTB.0=0 THEN SAYI=SAYI+1
IF SAYI=1 THEN LOW PORTA.0
IF SAYI=2 THEN LOW PORTA.1

GOTO BASLA

END


Powered by EzPortal