Program Oluşturma Genel Kuralları 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.
Program yazma işinde ilk önerimiz programlarınızın başına bir başlık mutlaka yerleştirin. Bu aynı zamanda program sırasında ilk olarak yazılacak bölümü kapsamaktadır.
Örnek başlık;
**************************************************************** ‘* İsim : Program Adı.BAS * ‘* Yazar : [İsminiz] * ‘* Not : Copyright (c) 2004] * ‘* : Tüm Hakları Saklıdır * ‘* Tarih : 21.12.2004 * ‘* Sürüm : 1.0 * ‘* Notlar : * ‘* : * ‘****************************************************************
Hiçbir program ilk yazıldığı hali ile çalışır hale gelmez. Sürekli olarak düzeltmeler yapıldıktan bir müddet sonra program yerine oturur. Bu nedenle her program değişikliğinde sürüm numarasını mutlaka değiştirmeye çalışın. Aksi taktirde programın hangisi olduğu konusunda tereddüde düşersiniz.
Bu başlık verildikten sonra , şayet program içinde interrupt (kesme) kullanılacak ise ikinci öncelik sırası olarak kesme tanımlaması yapılmalıdır. Tanımlama şöyle olabilir.
ON INTERRUPT GOTO KESME
Şayet kesme kullanılmayacak ise Giriş çıkış pinleri ayarlanmalıdır.
TRISA=0
TRISB=255 gibi
Daha sonra kullanılan mikro işlemciye ait Device tanımlamaları ve Config bilgileri verilmelidir. Burada @ (at) işareti ile başlayan ve aslında ASM (assembly) komutlarının Basic satırlarında kullanılmasına olanak tanıyan bir komuttan yararlanıyoruz. Çünkü bu komutlar ASM komutları olarak verilmektedirler. Örnek kullanım şekli aşağıdaki gibi olacaktır.
@ DEVICE pic16F628 @ DEVICE pic16F628, WDT_ON @ DEVICE pic16F628, PWRT_ON @ DEVICE pic16F628, PROTECT_OFF @ DEVICE pic16F628, MCLR_ON @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT ‘XT_OSC - HS_OSC –
Yukarıdaki örnekte program için ilk sırada PIC16F628 mikro işlemcisinin kullanılacağı tanımlanıyor . İkinci sırada Config değerini oluşturmak üzere, Watch Dog Timer On yani açık yapılıyor. Üçüncü sırada Power on Timer açık olarak ayarlanıyor. Dördüncü sırada Kod Protek kapalı olarak ayarlanıyor.
Beşinci sırada MCLR pini kullanılacak deniyor. Bu 16F628’in bir özelliği olup MCLR pini gerektiğinde bir INPUT pini olarak kullanılabilmektedir. Burada MCLR ON yani açık olarak ayarlanıp pin’in MCLR fonksiyonu şeklinde kullanılacağını gösteriyor. Şayet bu OFF yapılırsa MCLR pini bir INPUT pini olarak kullanılabilir.
Son satırda ise yine 16F628’e özel bir komut görülüyor. Bu komut 16F628 içinde bulunan dahili osilatör ün kullanılıp dışarıya ayrıca Clock çıkışı yapılmayacağını göstermektedir. Bu komuta yazılabilecek diğer alternatifler satır sonunda XT_OSC veya HS_OSC olarak verilmiştir.
Bu işlemler yerine getirildikten sonra yine mikro işlemci tipine bağlı olarak gerekirse bir emir daha verilir. Bazı işlemcilerde Komparatör bazılarında ise Analog-Digital çeviriciler bulunur. Bu sistemler açılışta önseçimli (default) olarak açık çalışırlar. Yani Komparatör ’ü olan bir Pic de aksine bir emir koymaz iseniz Komparatör önseçimli olarak çalışır. Şayet bu Komparatör bacaklarını iptal edip onları normal giriş-çıkış pin lerine dönüştürmez iseniz programınız hatalı çalışacaktır. Bu yüzden programın bu sırasında var ise bu komutlar yer alır. Komparatör lerin iptali için genelde; CMCON=7 şeklinde bir komut yazılır. Analog Digital çeviricilerin iptali için ise; ADCON1=7 bilgisi verilir.
Verilen değerler pic tipine göre değişiklik arz edebilir. Bu nedenle işlemcilerin Data Sheet’ lerine bakarak doğru bilgiler verilmelidir.
Bu bölümden sonra programda LCD kullanılacak ise LCD tanımlamaları yapılır. Örnek tanımlama bir önceki derste verilmiştir. Görsel olarak unutulmaması için burada yeniden tanımlama yapıyoruz.
DEFINE LCD_DREG PORTB ‘LCD data bacakları PortB ye bağlı
DEFINE LCD_DBIT 4 ‘LCD data bacakları 4. bit den başlıyor
DEFINE LCD_RSREG PORTB ‘LCD RS Bacağı PortB ye bağlı
DEFINE LCD_RSBIT 1 ‘LCD RS bacağı 1. Bite bağlı
DEFINE LCD_EREG PORTB ‘LCD Enable Bacağı PortB ye bağlı
DEFINE LCD_EBIT 3 ‘LCD Enable Bacağı 3. bite bağlı
DEFINE LCD_RWREG PORTB ‘LCD RW Bacağı PortB ye bağlı
DEFINE LC_RWBIT 2 ‘LCD RW Bacağı 2. bite bağlı
DEFINE LCD_BITS 4 ‘LCD 4 bit olarak bağlı
DEFINE LCD_LINES 2 ‘LCD 2 sıra yazabiliyor
Bu aşamadan sonra sıra, Değişkenlerin tanımlanmasına gelir. Programın bu bölümünde program içinde kullanacağımız değişken isimleri ve tipleri belirlenir. Değişkenler büyüklüklerine göre Bit – Byte ve Word tipinde belirlenebilirler. Gerekirse port pinleri için Symbol tanımlaması kullanılabilir. Dolayısıyla Symbol tanımlaması da değişken tanımlama bölümünde yapılmalıdır.
Örnek vermek gerekir ise
SIRA VAR BYTE TOPLAM VAR WORD X VAR BYTE DOGRU VAR BIT TUS VAR PORTB.0 CLK VAR PORTA.1 DATA VAR PORTA.2 SYMBOL BUTON=PORTB.7 SYMBOL LED = PORTB.6
Değişken tanımlamaları verildikten sonra, program için gerekli olan ilk değerler ayarlanır. Genelde değişkenler sıfırlanır (sıfıra eşitlenir). Varsa LCD için Türkçe karakterler tanımlanır.
SIRA=0
TOPLAM=0
X=0
LOW CLK
Artık sıra programın ana bölümüne gelir. Genellikle programlar bir etiket ile başlatılır. Çünkü işlemlerin tekrarlanması amacı ile tekrar bu başlangıç bölümüne geri gelinmesi gerekebilir. Etiket adı olarak genelde BASLA veya START veya ILK veya BIRINCI gibi isimler kullanılır.
Şimdi buraya kadar öğrendiklerimizi bir Örnek programla tekrarlayalım.
Proje 4a :
Yapacağımız örnekte LCD kullanmayacağız. İşlemci 16F628 olacak. Port a ya bağlı butonlar olacak ve bunlar normalde pinler Pull-up olarak ayarlanacak.
PortB pinlerine ise birer tane LED bağlı olacak. Port a da hangi Buton’a basılırsa PortB de aynı bite karşılık gelen Led yanacak veya yanık ise sönecek. Programımız bu şimdi tüm program yazma kaidelerini uygulayarak programımızı yazalım.
‘**************************************************************** ‘* Name : TOGGLE.BAS * ‘* Author : [E.T.E] * ‘* Notice : Copyright (c) 2005 [ETE] * ‘* : All Rights Reserved * ‘* Date : 01.09.2004 * ‘* Version : 1.0 * ‘* Notes : * ‘* : * ‘**************************************************************** TrisA=255 Trisb=0 ‘————————————————————- @ DEVICE pic16F628 ‘işlemci 16F628 @ DEVICE pic16F628, WDT_ON ‘Watch Dog Timer açık @ DEVICE pic16F628, PWRT_ON ‘Power on Timer açık @ DEVICE pic16F628, PROTECT_OFF ‘Kod Protek kapalı @ DEVICE pic16F628, MCLR_ON ‘MCLR pini kullanılıyor. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT ‘Dahili osilatör kullanılacak ‘————————————————————————————————————— CMCON=7 ‘16F628 de komparatör pinleri iptal hepsi giriş çıkış ‘————————————————————————————————————— SYMBOL TUS0=PORTA.0 SYMBOL TUS1=PORTA.1 SYMBOL TUS2=PORTA.2 SYMBOL TUS3=PORTA.3 SYMBOL TUS4=PORTA.4 LED0 VAR PORTB.0 LED1 VAR PORTB.1 LED2 VAR PORTB.2 LED3 VAR PORTB.3 LED4 VAR PORTB.4 PORTB=0 ‘———————————————————————————————————————— BASLA: IF TUS0=0 THEN ‘Tuşa basılmadığı zaman Tus=1 dir basılınca 0 olur. TOGGLE LED0 ‘ LED’in durumunu değiştir yak veya söndür. WHILE TUS0=0 ‘ hala tuşa basılı tutuluyor ise wend ‘ bırakılıncaya kadar bekle. endIF ‘ tuş bırakılınca buraya geç. IF TUS1=0 THEN TOGGLE LED1 IF TUS2=0 THEN TOGGLE LED2 IF TUS3=0 THEN TOGGLE LED3 IF TUS4=0 THEN TOGGLE LED4 WHILE TUS4=0 WEND ENDIF ‘ TUS kullanımı son derece değişik neticeler verir. Yukarıdaki örnekte ‘ toplam 5 adet Tuş bulunmaktadır. İlk tuş ile sonuncu tuş korumaya alınmıştır. ‘ korumadan kasıt tuşa bir kere basılınca Toggle komutu icra edilmekte ancak ‘ tuş bırakılıncaya kadar başka hiç bir işlem yapılmamaktadır. ‘ Diğer tuşlarda ise koruma yoktur. Toggle komutu yerine getirildikten sonra ‘ program çok hızlı bir şekilde yeniden aynı tuşa bakmakta ve şayet halen basılı ‘ ise bir kez daha toggle komutunu icra etmektedir. Tüm tuşları deneyerek aradaki ‘ farkı görmeye çalışınız. Gerekirse PAUSE 100 süresini daha da kısaltarak farkı görmeye ‘ çalışınız. PAUSE 100 GOTO BASLA END
Yukarıdaki programda kullandığımız bazı komutları tekrar açıklayıp değişik kullanım örnekleri vereceğiz. İlk komutumuz IF yani şart komutu dur. Türkçesi ŞAYET olan bu komutu şarta bağlı bazı durumlar için kullanmaktayız. Programımızda olduğu gibi ; Şayet tuşa ’a basılmış ise TOGGLE LED0 komutunu icra et. Bunun Basic satırı olarak karşılığı; IF TUS0=0 THEN TOGGLE LED0 idi. Başka bir örnek , Şayet sayı=200 ise , sayı yı 0 (sıfır) yap şeklinde bir durum için; IF SAYI=200 THEN SAYI=0 şeklinde bir komut kullanmalıyız.
IF komutu birden fazla şartlar içeren bir halka içinde kullanılabilir. Bu durumda komut önce THEN ile satır bitirilip diğer şartlar test edildikten sonra komut sonu ENDIF ile belirlenmelidir.
Örnek;
IF SAYI= 200 THEN
TOPLAM=25
X=0
ENDIF
IF satırı ile ENDIF satırı arasında başka IF lerde bulunabilir. Ama daima kural ilk giren son çıkar prensibine göre uygulama yapılmalıdır. Bunu da bir örnekle açıklamak uygun olacaktır.
IF SAYI=200 THEN
SAYI=0
IF X=100 THEN
SAYI=50
X=0
ENDIF ‘bu komut ile ikinci IF komutunu bitiriyoruz.
ENDIF ‘bu komut ile ilk IF komutunu bitiriyoruz.
İkinci kullandığımız komut TOGGLE komutudur. Bit bazında çalışan bir komuttur. Her hangi bir bit değerini ters çevirmede kullanılır. Bit high ise Low , Low ise High yapar. Programda Led örneğinde şayet Led yanıyorsa söndürür. Sönük ise yakar. Bu komut Byte bazında kullanılmaz. Yani TOGGLE PORTB şeklinde bir ifade kullanamazsınız.
Kullandığımız diğer değişik komut WHILE – WEND komutudur. While in kelime anlamı esnasında demektir. Kısaca bir durum esansında şunu yap şeklinde kullanılır. Örneğin Tuş=0 iken Led yanık olsun demek için;
WHILE TUS=0
HIGH LED ‘TUS=0 olduğu müddetçe program bu satırı icra eder.
WEND
LOW LED ‘TUS=1 olunca program bu satıra atlar ve LED söner.
İfadesini kullanmak gerekir. Wend, While komutunun bitiş yerini belirlemek için kullanılır.
Bizim örneğimizde;
WHILE TUS0=0
WEND
Yazarak aslında TUS=0 iken hiçbir iş yapma sürekli tuşa bak anlamında bir komut icra edilir. Zira While – Wend arasına hiçbir komut yazmadık. Dolayısıyla Program Tus=0 mı diye bakar. Tus=0 ise alta geçer burada hiçbir komut yok. Wend’e gelir ve bunu görünce tekrar Tus=0 mı diye bakar. Bu olay Tus=1 oluncaya kadar devam eder. Yani Tus=0 olduğu müddetçe program WHILE WEND döngüsü içinde bekler.
İkinci Program örneğimizde LCD Kullanacağız.
Proje 4b:
Bu örneğimizde PortB ye LCD bağlayacağız. PortA.0 ve PortA.1 pinlerine Pull-Up yapılmış iki tuş bağlayacağız. PortA.0 daki tuş Yukarı , PortA.1 deki tuş ise Aşağı tuşu olarak çalışacaktır. Başlangıçta Ekranda Sayı adı altında bir değişken’ verilen sıfır değeri görülecek ve yukarı tuşuna basılınca sayı bir artırılacaktır. Aynı şekilde Aşağı tuşuna basılınca sayımız bir azaltılacaktır. Sayıların artırılma ve eksiltme durumlarında maksimum ve minimum değerlerinden sonra aldıkları değerleri görerek öğrenmeniz için sayı değişkeni için bir sonlandırma fonksiyonu kullanılmayacaktır. Şimdi Programımıza geçelim.
‘**************************************************************** ‘* Name : TUSBAS.BAS * ‘* Author : [Erol Tahir Erdal] * ‘* Notice : Copyright (c) 2005 [ETE] * ‘* : All Rights Reserved * ‘* Date : 07.04.2005 * ‘* Version : 1.0 * ‘* Notes : * ‘* : * ‘**************************************************************** TrisA=255 Trisb=0 ‘—————————————————————– @ DEVICE pic16F628 ‘işlemci 16F628 @ DEVICE pic16F628, WDT_ON ‘Watch Dog timer açık @ DEVICE pic16F628, PWRT_ON ‘Power on timer açık @ DEVICE pic16F628, PROTECT_OFF ‘Kod Protek kapalı @ DEVICE pic16F628, MCLR_ON ‘MCLR pini kullanılıyor. @ DEVICE pic16F628, 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_RSREG PORTB ‘LCD RS Bacağı Hangi Porta bağlı ? DEFINE LCD_RSBIT 1 ‘LCD RS bacağı Hangi Bite bağlı ? DEFINE LCD_RWREG PORTB DEFINE LCD_RWBIT 2 DEFINE LCD_EREG PORTB ‘LCD Enable Bacağı Hangi Porta bağlı? DEFINE LCD_EBIT 3 ‘LCD Enable 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 ‘16F628 de komparatör pinleri iptal hepsi giriş çıkış OPTION_REG.7=1 ‘portB deki dahili PULL-UP lar iptal edildi. ‘——————————————————————- SYMBOL YUKARI=PORTA.0 SYMBOL ASAGI=PORTA.1 SAYI VAR BYTE ‘——————————————————————- LOW PORTB.2 SAYI=0 PORTB=0 LCDOUT $FE,1 PAUSE 200 ‘——————————————————————- BASLA: IF YUKARI=0 then SAYI=SAYI+1 IF ASAGI=0 THEN SAYI=SAYI-1 ‘ LCDOUT $FE,1,” SAYI = “,#SAYI LCDOUT $FE,2,” SAYI = “,DEC3 SAYI LCDOUT $FE,$C0, ” LCD ORNEK PROG.” PAUSE 100 GOTO BASLA END
Yukarıdaki örnekte LCDOUT $FE,2,” SAYI = “,DEC3 SAYI şeklinde bir komut satırı görüyoruz. Ekranda sayı gösterimine örnek olması açısından bu satır bir önceki ile alternatifli olarak koyulmuştur. Burada DEC3 komutu sayı değerinin 3 hane olarak ekrana geleceğini göstermektedir. 3 hane olmayan sayılarda hane sayısını doldurmak için 0 kullanıldığını daha önce söylemiş idik. Bir satırın başına koyulan tek tırnak satırın komut olarak icrasını önler. Genellikle açıklama satırları bu şekilde verilir ve derleyici tarafından değerlendirilmezler.
Programda önce Yukarı tuşuna basılarak sayı artırılmalı sonra Aşağı tuşuna basılarak sayı azaltılmalıdır. Sayı 0’a ulaştığında azaltmaya devam edilir ise geriye doğru 255’e dönüldüğü ekrandan izlenmelidir. Aynı şekilde 250 den yukarı doğru sayıyı artırırsanız 255’e kadar gelinip 255 den sonra 0 a geçildiği yine ekrandan izlenmelidir.
Bundan sonraki örneğimiz 2X16 LCD kullanarak Ekran Mönüsü oluşturma ile ilgili olacaktır. Genellikle Mönü ler bir den fazla seçenekli işlerde kullanılmaktadır.
Şimdi kendimize bir örnek belirleyelim ve bunu program şekline getirelim.
Diyelim ki Yine bir ısı kontrol programı yapıyoruz. Program bir evin ortam ısısını kontrol edecek. Kendimiz bir set değeri tayin ediyoruz ve bu işi hem gündüz hem de gece için ayrı yapıyoruz. Gerekçemizde gece oda sıcaklıklarının gündüze göre birkaç derece daha düşük olması.
Şimdi yazacağımız program Ekrana önce bir seçenek getirecek Gündüz veya Gece. Bunlardan birini seçtikten sonra seçtiğimiz şayet Gündüz ise Gündüz Sıcaklığı Set etme bölümüne , seçimimiz şayet Gece ise Gece Sıcaklığı Set etme bölümüne geçecek ve sıcaklık değerini ayarlayıp programdan çıkacağız. Tabii ki normal çalışma modunda ekranda yalnızca ortam sıcaklığını göreceğiz. Şayet seçim tuşuna basarsam mönü ye gireceğim.
Proje 4c :
A portuna 3 adet tuş bağlı olacak. Pull-Up’lı olarak PortA.0 da Seçim tuşu, PortA.1 de Yukarı tuşu (+) ve PortA.2 de ise Aşağı tuşu (-) yer alacak. Yine PortB de 2×16 LCD bağlı olacak ve işlemcimiz 16F628 olacaktır.
İşte Programımız ve açıklamaları;
‘**************************************************************** ‘* Name : MENU.BAS * ‘* Author : [Erol Tahir Erdal] * ‘* Notice : Copyright (c) 2005 [ETE] * ‘* : All Rights Reserved * ‘* Date : 07.04.2005 * ‘* Version : 1.0 * ‘* Notes : * ‘* : * ‘**************************************************************** TrisA=255 Trisb=0 ‘—————————————————————– @ DEVICE pic16F628 ‘işlemci 16F628 @ DEVICE pic16F628, WDT_ON ‘Watch Dog timer açık @ DEVICE pic16F628, PWRT_ON ‘Power on timer açık @ DEVICE pic16F628, PROTECT_OFF ‘Kod Protek kapalı @ DEVICE pic16F628, MCLR_ON ‘MCLR pini kullanılıyor. @ DEVICE pic16F628, 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_RSREG PORTB ‘LCD RS Bacağı Hangi Porta bağlı ? DEFINE LCD_RSBIT 1 ‘LCD RS bacağı Hangi Bite bağlı ? define LCD_RWREG PORTB define LCD_RWBIT 2 DEFINE LCD_EREG PORTB ‘LCD Enable Bacağı Hangi Porta bağlı? DEFINE LCD_EBIT 3 ‘LCD Enable 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 ‘16F628 de komparatör pinleri iptal hepsi giriş çıkış OPTION_REG.7=1 ‘portB deki dahili PULL-UP lar iptal edildi. ‘——————————————————————- SYMBOL SEC=PORTA.0 SYMBOL YUKARI=PORTA.1 SYMBOL ASAGI= PORTA.2 ISIGUN VAR BYTE ‘gündüz ısı değeri ISIGECE VAR BYTE ‘ gece ısı değeri ISIODA VAR BYTE ‘oda sıcaklığı ‘——————————————————————- LOW PORTB.2 ISIGUN=22 ISIGECE=18 ‘Bunlar default değerler olacak ISIODA= 21 PORTB=0 LCDOUT $FE,1 PAUSE 200 ‘——————————————————————- BASLA: LCDOUT $FE,1,” SEC => MENU “ ‘Menu ye nasıl girileceği açıklanıyor BIR: LCDOUT $FE,$C0,”ODA SICAKLIGI=”,#ISIODA ‘ODA sıcaklığını ekrana getiriyoruz. PAUSE 150 IF SEC=0 THEN MENU ‘Şayet SEC tuşuna basılırsa Menu ye git GOTO BIR ‘Tekrar başa git. MENU: LCDOUT $FE,1, “GUNDUZ => YUKARI” IKI: LCDOUT $FE,$C0,”GECE =>ASAGI BAS” PAUSE 200 IF YUKARI=0 THEN GUNDUZ ‘Yukarı tuşuna basılırsa GUNDUZ ’e git. IF ASAGI=0 THEN GECE ‘Aşağı basılırsa GECE’ ye git. IF SEC=0 THEN BASLA ‘Tekrar SEC tuşuna basılırsa Başla’ ya git GOTO IKI GUNDUZ: LCDOUT $FE,1, “GUNDUZ SET DEGER” UC: LCDOUT $FE,$C0,”ISIGUN = “,#ISIGUN ‘Gündüz Set sıcaklığı ekranda PAUSE 200 IF YUKARI=0 THEN ‘Yukarı tuşuna basılınca ISIGUN=ISIGUN+1 ‘Gündüz Set bir artırılıyor IF ISIGUN>50 THEN ISIGUN=50 ‘50 ye ulaşınca 50 de kalıyor ENDIF IF ASAGI =0 THEN ‘Aşağı tuşuna basılınca ISIGUN=ISIGUN-1 ‘Sıcaklık bir eksiltiliyor IF ISIGUN=255 THEN ISIGUN=0 ‘255 e ulaşınca sıfıra eşitleniyor ENDIF IF SEC=0 THEN BASLA ‘Sec tuşuna basılınca başa gidiliyor. GOTO UC GECE: LCDOUT $FE,1, ” GECE SET DEGER ” DORT: LCDOUT $FE,$C0,”ISIGECE = “,#ISIGECE PAUSE 200 IF YUKARI=0 THEN ISIGECE=ISIGECE+1 IF ISIGECE>50 THEN ISIGECE=50 ENDIF IF ASAGI =0 THEN ISIGECE=ISIGECE-1 IF ISIGECE=255 THEN ISIGECE=0 ENDIF IF SEC=0 THEN BASLA GOTO DORT END
Bu programla ilgili ilave bazı açıklamalar yapmak mantığını anlamak açısından yararlı olacaktır.
Görüldüğü üzere 2 satır 16 karakter bir ekran sınırları içinde birkaç kademeli bir menü düzenlenmiştir.
Programın baş tarafında yer alan ifadelerin açıklaması daha önce yapılmış idi. Bu nedenle açıklamamıza BAŞLA etiketinden itibaren yapacağız.
Başla etiketinden sonra hemen ekrana LCDOUT $FE,1, ” SEC => MENU “ komutu ile Mönü ye geçmek için SEC tuşuna basılacağı açıklanıyor. Dikkat edilir ise LCDOUT $FE,1 komutu kullanılarak önce ekran tamamen siliniyor arkasından Menu açıklaması veriliyor. Bu satır yalnızca bir defa icra edileceğinden ekranın tamamen silinmesi doğru olmaktadır. Aksi taktirde bir önceki ekrandan bazı karakterler ekranda kalabilir.
Altında BIR: etiketi ile birlikte LCDOUT $FE,$C0, “ODA SICAKLIGI=”,#ISIODA komutu ile Oda sıcaklığını veriyoruz.
Mönü’nün ilk kısmını oluşturan bu bölümde oda sıcaklığı ölçülerek ekrana getiriliyor ve kullanıcı isterse set sıcaklıklarını ayarlamak üzere bir alt mönüye geçebiliyor. Bunun için SEC tuşuna basması yeterli oluyor.
Bu konumda SEC tuşuna basıldığı zaman programda yer alan;
IF SEC=0 THEN MENU
Satırı sayesinde program MENU isimli etikete atlıyor. Burada
LCDOUT $FE,1, “GUNDUZ => YUKARI”
Komutu ile önce ekran siliniyor ve daha sonra Yukarı tuşuna basılırsa Gündüz mönüsüne gidileceği açıklanıyor. Bu satırın altında;
LCDOUT $FE,$C0,”GECE =>ASAGI BAS”
Komutu ile Aşağı tuşuna basılırsa da Gece mönüsüne gidileceği açıklanıyor. Doğal olarak bu satırların altında da hangi tuşa basıldığını kontrol eden bir bölüm yer alıyor. İşlem gayet basit. Yukarı tuşuna basılırsa GUNDUZ isimli etikete git;
IF YUKARI=0 THEN GUNDUZ
Aşağı tuşuna basılırsa GECE isimli etikete git;
IF ASAGI=0 THEN GECE
Şeklinde komutlar veriliyor. Tabii ki tüm bu işlemler bittikten sonra programın asıl çalışan bölümüne gitmek içinde SEC tuşunu devreye sokuyoruz. SEC tuşuna basılması halinde ise program tekrar en başa atlıyor.
BU aşamada yalnızca Gündüz etiketi altında ne yapılıyor açıklamak istiyorum. Zira Gece etiketinde yapılanlar gündüzden çok farklı değil. Birisini anlarsanız diğerini anlamanız zor değil.
Gündüz etiketi altında önce Gündüz set değeri ekrana verilip aşağı veya yukarı tuşlarından birisine basmanız bekleniyor. Ya da SEC tuşuna basıp tekrar program başına geçmeniz bekleniyor. Yukarı tuşuna basmanız halinde Set sıcaklığı bir artırılıyor. Ancak Artırılan sıcaklığın 50 dereceyi geçmesi istenmediğinden şayet geçerseniz sıcaklık yine 50 ye eşitleniyor. Bu bir kısıtlama veya sınırlandırma halidir.
Aynı şekilde Aşağı tuşuna basılması halinde sıcaklığın değer bir eskitiliyor ve sıfır değeri geçilip 255’e ulaşıldığında sıcaklık tekrar sıfıra eşitleniyor. Daha önce görmüş idik. Sayıları birer eskiterek gidersek. Sıfırdan sonra tekrar 255 geliyor idi.
Bu kadar örnek verdikten sonra Micro Code Studio (MCS) ile nasıl program derlenip Hex dosyası elde ediliyor birazda ona değinelim.
Bildiğiniz gibi Pic gibi mikro işlemciler yazılan programları icra ederler. Bunun için yazılan programların Pic’ kayıt edilmesi (yazılması) gerekir. Basic de yazılan programlar direkt olarak Pic’e yazılamaz. Bas uzantılı olan bu dosyaların önce makine diline çevrilerek Pic ’in anlayacağı biçime dönüştürülmesi gerekmektedir.
Derleme denilen bu işlem MCS tarafından PBP derleyicisi kullanılarak yapılmaktadır. Derlendikten sonra Hex formatına dönüştürülen programın daha sonra yine başka bir program ve bir programlayıcı devre yardımı ile Pic’e aktarılması yani yazılması sağlanır. Hem program yazma ve hem de derleme işlemi için Micro Code Studio (MCS) programı kullanılmaktadır.
MCS ilk defa kurulurken bazı parametrelerin ayarlanması gerekiyor. Bunların başında PBPro klasörünün MCS ye gösterilmesi gerekmektedir. Bu iş için MCS de View mönüsünden Pic Basic Options alt mönüsü seçilir. Bu mönüde PBP nun yeri programa gösterilir. Aynı şekilde Programlayıcı nın yeri ve parametreleri de bu seçenekte MCS ye gösterilir. Bu işlemlerin yapıldığını kabul ederek derlemenin nasıl yapıldığına bakalım.
Programı yazmayı tamamladıktan sonra ekranın üst tarafında bulunan derle tuşuna (bir sayfa ve üzerinde sağa doğru ok olan tuş) tıklanır ise yazmış olduğunuz derlenir ve BAS uzantılı dosyanızın yer aldığı klasör içine aynı isimle ancak Hex uzantılı olarak kayıt edilir.
Dosyanın derlendikten sonra Pic’e yazılması için programlayıcıyı çalıştırmak gerekir. MCS bunu da otomatik yapabilir. Yine ekran üstünde üzerinde aşağı doğru ok bulunan bir entegre resmi göreceksiniz buda derlemeden sonra programlayıcıyı çalıştıran tuş dur. Bu tuşa basılınca önce program derlenir ve ardından program otomatik olarak programlayıcıya (IC-Prog) yüklenerek programlayıcı çalıştırılır. Size yalnızca programla tuşuna basarak Hex dosyasının Pic’e yazdırılması kalır.
MCS içinden IC-Prog gibi programlayıcıların otomatik çalıştırılması için bazı parametrelerinde ayarlanması gerekir. Bunların nasıl yapıldığı Hem MCS help mönüsünde hem de programlayıcıların açıklamalarında yer almaktadır. Bu bilgiler kullanılan programa göre değiştiğinden ve hepsini burada açıklamamız mümkün olmadığından yalnızca ön bilgi vermekle yetineceğiz.
Pic’e yazma ve Pic den okuma işlemlerinde en çok kullanılan program olan IC-Prog hakkında da biraz bilgi vermek isterim. IC-Prog hem seri porttan hem de paralel porttan çalışan programlayıcılarla uyumlu bir programlayıcıdır. Kullanımı son derece basittir. Gerekli parametreler ayarlanıp donanım seçimi de doğru yapılırsa sorunsuz olarak çalışacaktır.
Programı kullanırken dikkat edilmesi gereken en önemli nokta programlama yaparken veya programlama yaptıktan sonra doğrulama işleminin yaptırılmasıdır. Genelde hata veriyor diye bu işlem iptal edilmektedir. Hatalı yapılan bir işlemi kontrol etmez iseniz hatalı olduğunu nasıl anlayacaksınız. Hata var ise gösterilmesinde fayda vardır. Bu nedenle Seçenekler mönüsünden Programlanıyor alt mönüsünde bulunan kutucukların ikisini de veya en az birini işaretlemekte fayda vardır.
Hazırlayan: Erol Tahir Erdal (ETE)
PICBasic Dersleri PIC Basic Pro ile PIC Programlama 4 Kod ve simülasyon dosyaları;
Şifre-Pass: 320volt.com
PICBasic Dersleri PIC Basic Pro ile PIC Programlama-5 Ders-5 Devam
Yayım tarihi: 2010/04/30 Etiketler: kılavuz ders, pic basic dersleri, PIC programlama, picbasic eğitim, picbasic pro
Ustad, 4 saatte bu kadar ilerliyeceğim aklımın ucundan geçmezdi ..
Ellerine sağlık
Amaç da bu idi zaten kısa zamanda bu işi kavratmak. Amacıma ulaştığımı zannediyorum.
Kolay gelsin
Ete
Kardeşim Allah razı olsun Allah ilmini kat kat arttırsın
menü yaparken şayet 30 sn tuşa basılmassa ana ekrana dönmek için hangi komutları yazmam gerekir.
Bu kadar bilgiyi paylaştığınız için teşekkür ederim.
word cinsinden bir degisken tanımla. Sure olsun
sonra bir while wend dongusu kur. 30 sn tam olarak 30000 ms eder
o halde dongu soyle olabilir;
sure=0
while sure0 then ekranagit
sure=sure+1:pause 1
wend
goto anamenu ‘program bu satira gelirse 30 sn gecmis
demektir.
ete
Dongude unutulmuş bir işaret var.
while sure<30000
….
şeklinde olacak
ete
çok teşekkür ederim…
Ete çok teşekkür ediyorum harika şeyler gösteriyorsun. Ama benim senin verdiğin “proje 4a” da kodları yazdığımda micro code studio ya şöyle bir hata veriyor;
Error[122] c:\progra 1\mecani 1\mcsp\toggle 1 asm 65 :Illegal opcode (pic16F628)
bu hatadan 6 tane çıkıyor alt alta sadece asm 65 olan kısım değişik diğerleride şöyle ;asm 71,asm77,asm 83,asm 89,asm 95
biraz netten araştırdım bu @device komuttundan kaynaklanıyormuş entegreyi tanımıyor galiba ve .hex dosyasını oluşturmuyor. Bu @device kısmını sildiğimde ise entegreye yüklüyorum fakat butonlara basınca çalışmıyor. Bunun nedeni ve çözümünü açıklarsanız sevinirim. İyi çalışmalar…
Muhtemelen MCS ekranında üstte yer alan işlemci isminin yer aldığı kutucukta 16F628 seçili değil.
Şayet kutuda 16F628 den başka bir işlemci ismi var ise onu değiştir ve 16F628 yap yeniden derle.
Şayet işlemci seçim, doğru ve senbu hatayı alıyorsan o zaman ya MCS sürümünden ziyade kullandığın PBP sürümü eksik.
Bazen yol isimleri 65 karekterden fazla olur ise MCS bu şekilde hata verebiliyor. Bu nedenle MCS genellikle program Files içinde yer almalı, PBP ise C ana klasöründe yer almalıdır. Şayet farklı ise bunları yeniden kurmaya çalış.
MCS ücretsiz bir programdır. Aşağıdaki linkten en son sürümünü yükle ve kendine kurdur. Zaten Program Files içinde Mechanique isimli klasör içine kuracaktır. PBP nun hangi sürümünü kullanıyorsun onuda belirt bir düşünelim.
Ete
PBP’nin 2.47 sürümünü kullanıyorum MCS 3.0.0.5 kullanıyorum sürümü internetten arattım son sürüm oymuş. Bir siteden indirdim MCS nin kendi sitesinde 4.0.0.0 sürümü son sürüm diyor ama onu indiremedim malesef. MCS program files içine kayıtlı. Birde aşağıdaki linkten son sürümü indir demişsiniz link yok aşağıda 🙂
MCS de, View menüsünü aç. Açılan menüden Compile&Program Options seçeneğini seç. Açılan pencerede Ortada bulunan Assembler butonuna tıkla.
Sağtarafta Use MPASM diye adlandırılmış bir kutucuk var. Kutu işaretlimi yoksa boşmu. Şayet işaretli ise üzerine tıkla ve boş kalmasını sağla. Boş ise aşağıdaki işlemlere geç.
Daha sonra yine üstte başta bulunan Compiler butonuna tıkla ve tıkladığın butonun hemen altında ;
C\PBP şeklinde bir ifade yer alıyormu bak bakalım. Orada hiç bir şey yok ise;
-sağda yer alan find Manually butonuna tıkla ve PBP nun kayıtlı olduğu yeri bulup göster.
Daha sonra açılan bu menülerden çık ve yeniden derleme yap bakalım olacakmı.
Ete
Ete Çok sağ ol o en son dediklerin yapılmıştı zaten komple sildim herşeyi MCS PHP tekrar kurdum bu sefer derledi. İlgin alakan için teşekkür ederim. Programın Neden böyle yaptığını bilmiyorum ama silip tekrar kurunca oldu.Tekrardan Teşekkür ederim…
Hocam merhaba
rölenin kontağından(vs) sinyal geldiğinde pic e pic 30 dakika sonra çıkıştaki röleyi attırmak istiyorum ancak bu süre zarfında pic farklı işlemlerleri mesela lcd de adc yapması lazım..yapmaya çalışıyorum yanlız 30 dakika saymaya başladığında başka işlemleri yaptıramıyorum..
Lütfen yardımm
Bu işin yolu kesme kullanmaktan geçer. Her 50ms de bir kesme oluşturursunuz. Bunun için TMR0 kullanıp kesmeyi oluşturup gelen kesmeleri saymanız gerekir.
30 dakika = 30*60 sn eder yani 1800 sn eder.
1800 sn ise 1.800.000 ms eder. Çok büyük bir değer olduğu için hem dakika hem saniye sayacı kullanmak gerekecektir.
ELinizde iki değişken olacak word cinsinden. Birine SN diğerinede Dak dersiniz.
Şimdi her 50 ms de bir kesme oluşturursanız 20 kesme sonunda 1 sn lik süreye ulaşırsınız.
Bunu sayac isimli byte değişkeni ile sayalım.
Her kesme oluştuğunda aşağıdaki işler yapılmalı;
sizin artık 30 dakikayı takip etme gibi bir sorununuz olmayacaktır. Kesme bunu takip edecek ve 30 dakika dolduğunda roleyi kapatacaktır.
50 ms de bir kesme oluşturmak için;
OPTION_REG=%00000111 ‘bölücü 1/256 ya ayarlandı
TMR0=60 ‘tmr0 a ön yükleme değeri veridi.
ON INTERRUPT GOTO KESME
komutlarını vermeniz yeterli olacaktır.
Derslerin kesme ile olan kısmını yeniden okumanızı da ayrıca öneririm.
Ete
Cevap verdiğiniz teşekkür ediyorum..
Yanlız ben beceremedim…biraz daha uğraşmam lazım.
Teşekkürler
Sayın Ete hocam yukarıda arkadaşım sormuş 30 sn tuşa basılmazsa otomatik ana menüye dönme diye ben beceremedim yardımcı olursanız sevinirim..
öncelikle pic basic pro ile pic16f877 ve 4X20 LCD kullanıyorum
YUKARI, ASAGI ve SEC butonlarım var programda bu butonların herhangi birine 30sn basmadığımda ANAMENU: ye gecmesini istiyorum fakat ne yaptıysam beceremedim , siz yukarıda buton ismi girmemişsiniz bazı arkadaşlar kesme ile yapmış ama ben onuda beceremedim kesme her pic te farklımı onuda bilmiyorum. Ve son olarak ben bu döngüyü programın neresine koyacağım.?
‘***************** 16F877 BİLGİLERİ *****************
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_on
@ DEVICE pic16F877, PWRT_off
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, HS_OSC
OPTION_REG.7=1 ‘PULL UP DİRENÇLERİNİN HEPSİ İPTAL
adcon1=7 ‘tum bacaklar dıgıtal ,ad converterler kapatılır
DEFINE OSC 4
‘******************************************************’
‘***************** LCD TANIMLAMALARI ******************’
DEFINE LCD_DREG PORTD ‘LCD DATA BACAKLARI PORTB’YE BAĞLI
DEFINE LCD_DBIT 4 ‘LCD DATA BACAKLARI PORTB.4 BAĞLI
DEFINE LCD_EREG PORTD ‘LCD ENABLE PİNİ PORTB’YE BAĞLI
DEFINE LCD_EBIT 3 ‘LCD ENABLE PİNİ PORTB.3 BAĞLI
DEFINE LCD_RSREG PORTD ‘LCD RS PİNİ PORTB’YE BAĞLI
DEFINE LCD_RSBIT 2 ‘LCD RS PİNİ PORTB.2 BAĞLI
DEFINE LCD_BITS 4 ‘LCD 4 BIT BAĞLI
DEFINE LCD_LINES 4 ‘LCD 4*20
‘*******************************************************’
‘************ GİRİŞ VE ÇIKIŞLARI TANIT *********************
TRISA=%111111
TRISB=0
TRISC=0
TRISD=0
TRISE=0
‘***************** MENÜ BUTONLARI *********************
SYMBOL YUKARI=PORTA.0
SYMBOL SEC=PORTA.1
SYMBOL ASAGI=PORTA.2
SURE VAR WORD
‘************** BİLGİLERİ TEMİZLEME İŞLEMİ *************
LCDOUT $FE,1
pause 200
CLEAR
‘************* PROGRAM BAŞLANGICI ******************
ANAMENU:LCDOUT $FE,$1, “*******************”
A1: LCDOUT $FE,$C0,”**** ********* ****”
LCDOUT $FE,$94,”**** ********* ****”
LCDOUT $FE,$d4,”*******************”
PAUSE 100
IF YUKARI=0 THEN MENU1
IF SEC=0 THEN MENU1
IF ASAGI=0 THEN MENU1
GOTO A1
MENU1:LCDOUT $FE,$1, “*role1 ON”
M1: LCDOUT $FE,$C0,” role2 ON”
LCDOUT $FE,$94,” role3 ON”
LCDOUT $FE,$d4,” role4 ON”
PAUSE 100
IF YUKARI=0 THEN MENU1
IF SEC=0 THEN role1
IF ASAGI=0 THEN MENU2
goto M1
gibi alt menüler var
Hocam Error Memo.asm 44 diye bi hata alıyorum ışıntan arkadaşımız için gerekli açıklamaları yapmışsınız bende ordakilerin aynısını yaptım ama hala o hatayı veriyor ne yapmam lazım 🙁
Yalnızca tek Memo.asm 44 şeklinde bir hatamıdır yoksa altında başka hatalarda varmıdır.?
Hata kodundan ne olduğunu anlamadım. Ancak aşağıdakleri kontrol edersen daha iyi anlarız ne olduğunu.
Micro Code Studio kullanıyorsundur her halde, Bu varsayıma göre;
1. PBP derleyicin C ana klasöründe yer alıyorumu yani C:\PBP2xx şeklinde bir yerdemi duruyor. Başka bir klasör içinde ise onu direk C klasörüne kaydırmanız daha doğru olacaktır.
2. MCS de View menüsünde Compile & Program Options seçeneğine tıklayın ve Compiler başlığı altında C:\PBP2xx şeklinde derleyicinin adresini görmeniz gerekir. Burada ne yazıyor bildirin.
3. Aynı yerde Assembler butonuna tıklayın ve sağda yer alan MPASM kutusunun seçili olmaması gerekir . Seçili ise tıklayıp seçimi kaldırın.
4. Seçtiğiniz pic işlemcinin cinsi ekranın üstünde yer alan işlemciye ait kutucuk içinde yer alması gerekir. Farklı ise doğrusunu seçin.
Bütün bunları yaptınız ve hala aynı hatayı alıyorsanız derleyicinizde sorun var demektir. Yeniden bir başka yerden yüklemeye çalışın.
Ete
http://etepic.com
Sağolun ete hocam oldu en sonun da yardımlarınız için teşekkürler 🙂
ERROR Line 54: Demo command limit of 31 exceeded. Time to purchase? (Untitled.pbp)
Sayın hocam bende arkadaşa önediklerinizi aynen uyguladım ancak üstdeki hatayı aldım yardımcı olabilirseniz çok sevinirim .
Kullandığınız derleyici demo sürümü ve 31 satırdan fazlasına müsaade etmiyor.
http://www.sonsivri.com da ilaçlı bir tane bulabilirsiniz.
Ete
Teşekkür ederim ete hocam peki ben size kodları göndersem derleyim hex kodlarını bana göndermeniz mümkün mü?
Yolla hallederim.
[email protected]
Şayet eksik ise sigorta ayarlarının ne olacağı, programın hangi işlemci için derleneceği bilgisini vermeyi unutma.
ete
Ete hocam çok teşekkür ederim
gmailden mesaj attım sizde kodları gönderdim
cevabınızı bekliyorum
Hocam teşekkürler çok yardımcı oldu ama Ben compile ederken bir hata çıkıyor
_______________________
| |
|X Cannot Create Run.Bat|
|_______________________|
nasıl düzeltirim?
Bir de bir pine kare dalga nasıl gönderiyoruz?
Mert,
Bu hata mesajını yalnızca bir kere bende görmüştüm ama çok zaman önce idi. Sebebini hatırlamıyorum.
Ya programı yolla bakayım yada MCS de kullandığın ayarları açıkla üzerinde tartışalım.
Bir pine kare dalga nasıl gönderilir sorusuna gelince soruyu böyle sorarsan bende sana ;
kare dalga kaynağını direk pinebağlarsan kare dalgan o pine bağlanmış olur derim. Ama sanki soruyu şöyle soracakmışsın gibi bir his var içimde;
Bir pinden Kare Dalga nasıl çıkartılır?
Bir kare dalganın şekline bakarsan sinyal LOW seviyesende belirli bir müddet ilerler ve birden HIGH seviyesine çıkar. Bu seviyede bir müddet şlerlerken bir den LOW seviyesine düşer ve periodik olarak bunu tekrarlar. O halde sende bir pinden diyelimki PortB.0 dan;
LOW PORTB.0
Pause 10
HIGH PORTB.0
Pause 10
LOW PORTB.0
Pause 10
HIGH PortB.0
Pause 10
şeklinde komutları sıralarsan peryodu 20 ms (10ms LOW +10ms HIGH) bir kare dalga sinyali elde etmiş olursun.
Bir başka yoluda PWM komutunu kullanmaktır.
PWM Pin,Duty,Süreç şeklinde kullanılır.
PWM PortB.0, 127 , 1000 komutu sana yaklaşık 1000 pulslık bir sinyal üretecektir.
Bu sinyallerin devamlılığı yoktur. Üstelik ana programı meşgul yada bloke ederler. EN iyisi HPWM komutunu kullanmaktır. Bazı Piclerin belirli pinleri bu iş için ayrılmıştır. Bu şekilde sinyal bir defa komut verdinizmi sürekli olarak çıkar. Üstelik o sinyalin hem frekansını hemde Duty değerini değiştirebilirsiniz.
Derslerden HPWM konusunu inceleyin derim.
Ete
gönderilmez o pinden kare dalga çıkartılır bunu kast
Çok teşekkürler ve Microcode studiodaki hatayı çözdüm yönetici olarak başlattığımızda hata olmuyor. Bir de bir tane LCD’im vardı 2 satır yazabiliror 1 satıra 16 karakter yazılabiliyor ve Lcd’nin 32 tane bacağı var. Normalde gösterdiğniz LCD’de 14 ya da 16 bacak var demiştiniz. Şimdi hangi bacakları kullanmam gerek? (1. tarafını kulandım lcd çalışmadı.) Ve lcd’De kontrast (vee) pinini serbest bırakınca Lcd çalışır mı? yoksa pota mı bağlamak lazım?
Mert,
Bazı LCD lerde kartın hem üztünde hemde altında 16 şar adet LCD pini bulunuyor. Bunlardanbirisi olabilir elindeki.
Hangisini kullanırsan kullan fark etmez. Ama bacak bağlantılarına dikkat etmen gerekir. Genelde kartın üzerine 1 veya 16 veya 14 diye pinlere numara verirler onları bulmalısın.
Kontrast pini boşta bırakılırsa LCD de hiç bir şey göremezsin. Multlaka bir şey bağlaman gerekir.
Ete
microcode studioyu nereden güvenli bir şeklde indiriyoruz? Ben iki farklı siteden indirdim hiç biri çalışmadı
Ahmet, çalışmayan nedir? Program hiç mi açılmadı?
Yoksa farklı bir şey mi var?
Biraz açıklarsan yardımcı olmaya çalışayım.
Aşağıdaki linkten indirebilirsin. Zaten ücretsiz bir programdır.
http://www.mecanique.co.uk/software/mcsinstall.exe
Ete
Fahrettink, picbsic folderı arıyor ve bir türlü bulamıyor
Micro Code Studio yalnızca bir editör programıdır. Derlemeyi kendi başına yapamaz. Yapmak için PBP derleyicisini kullanır. Bu nedenle makinanızda ayrıca PBP kurulu olması gerekir. Hemde C:\ ana klasöründe. Derleme yapacağı zaman yeri gösterilmemiş ise otomatikman BPB klasörünü arar.
Senin asıl sorunun elinde derleyici olmaması sanırım. Biraz araştır gerekirse http://www.Sonsivri.com adresine bak orada bulabilirsin.
En son sürüm 2,60 dır. Aslında yenisde çıktı ama şimdilik tavsiye etmeyeceğim. Yenisi 3.05 sürüm olarak gözüküyor.
Ete
warning d/…………… faund label after column 1.(device)
error d/……………… illegal opcode (PIC16F628)
hatası çıkıyor,heryeri taradım
PBP nun kayıtlı olduğu klasörü kendin bulup programa gösterdim.
Sonrasında derleme düzgün olması gerekiyor. Bu arada Assembler kısmında hiç bir şey seçili olmaması gerekiyor. ama MPASM seçili yapmadığım ve compile ettiğimde PM.exe uyumluluk sorunu veriyor yardım lütfen
Mcs nin hangi versiyonunu kullaniyorsun?
Makinan 32 bitmidir yoksa 64 bit midir?
Bahsi gecen hata genelde sigorta ayarlarinin format uyumsuzlugundan kaynaklanir.
mcs nin 4.0 versiyonunu kullanmalisin.
Makinan 64 bit ise derleme mpasm ile yapilmali degilse pm asssembler ile yapilmalidir.
Gerekirse programi asagidaki adrese yolla bakayim
[email protected]
Ete
evet onu kullanıyorum ,makinam 64 bit ,pbpro 2.5 kullanıyorum,mpasm 8.86ve 8.15 yüklü- 8.15 aktive durumda.@device yazmadığım zaman prog. derleniyor ama tabi ki düzgün çalışmıyor proteusta (sizinkinin aynısı gibi ) mail adresimi yolladım bana mümkünse mcs 4.0 ı yollarmısınız ki ben mcs 4.0 ıkullandıgımı düşünüyorum.mcs yi açtıgım zaman sol en üst köşede MicroCode Studio ismi yazıyor sadece.Saygılar…
MCLR konusunda çizimlerde hem bir —- çizgisi var ama acemilerin eğitimi için unutulmuş en önemli konu. Günlerce uğraşıyorsun, ısı, nem, voltaj okuma, ama pic çakılı kalıyor veya bir taraflarına elleyince çalışıyor, Ekrandaki kareler siliniyor. İşte Tam da bu noktada aslında doğru yolda olduğunuz görünüyor.
Problem 1- watchdog timer taşıyor. PRG içinde sıfırlanması
lazım. bunu ana döngü içinde bir gosub’un altına
yazmakta fayda var.
Çözüm :
donupdur = donupdur+1 ‘ bura dönüp duru 🙂
if donupdur > 10 Then
CLEARWDT
donupdur = 0
Problem-2 : Bu daha önemli. Pic donması kalması, ekranda hareketsizlik, eyvah ben bununla nasıl değer ölçerim.
MCLR ucu bir dirence bağlanır. Ben 4K7 bağladım. Onu da 100uF (100microFarad) bir capasitor ile GND’ye kapasitörün diğer ucunu VDD ye bağladım.
Fişe tak non stop çalıştır. elektrik gitti geldi devam…
deneme : Pic 16F877a, ds18b20, LDR ışık ölçme, dual 10K pot ADC okuma. Bu benim gibi uğraşanlar için 5-6 gün kazandıracaktır eminim.
proje 4a nın yazılımında hata alıyorum ne yapmam gerek