Elektronik Devreler Projeler Elektronik ve biraz daha fazlası İletişim - Araçlar - Dikkat - Topluluk
Elektronik / Elektronik Kaynakları/

PICBasic Dersleri PIC Basic Pro ile PIC Programlama 4

Sponsorlu Bağlantılar

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 :

picbasic_proje4a_4led_pic16f84

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:

picbasic_proje4b_lcd

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 :

picbasic_proje4c_lcd

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ı: pic-basic-pro-ile-pic-programlama-ders-4.zipDers-5 Devam

  • Cengiz

    Ustad, 4 saatte bu kadar ilerliyeceğim aklımın ucundan geçmezdi ..
    Ellerine sağlık

  • ete

    Amaç da bu idi zaten kısa zamanda bu işi kavratmak. Amacıma ulaştığımı zannediyorum.
    Kolay gelsin
    Ete

  • emre kula

    Kardeşim Allah razı olsun Allah ilmini kat kat arttırsın

  • behçet

    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.

  • ete

    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

  • ete

    Dongude unutulmuş bir işaret var.
    while sure<30000
    ….
    şeklinde olacak
    ete

  • Behçet

    çok teşekkür ederim…

  • Işıntan

    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…

  • Ete

    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

  • Işıntan

    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 :)

  • Ete

    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

  • Işıntan

    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…

  • Adem

    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

  • Ete

    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ı;

    Disable
    KESME:
    Sayac=sayac+1
    If Sayac=20 then
      sayac=0
      Sn=sn+1
         if sn=1000 then
             sn=0
            dak=dak+1
                 if dak=1800 then 
                   Role=0
                   sayac=0::sn=0:dak=0
                  endif
             endif
          endif
         TMR0=60
    INTCON.2=0
    Resume
    Enable 
    

    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

  • Adem

    Cevap verdiğiniz teşekkür ediyorum..
    Yanlız ben beceremedim…biraz daha uğraşmam lazım.
    Teşekkürler

  • goxen

    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

  • mehmet

    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 :(

  • ete

    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

  • Mehmet

    Sağolun ete hocam oldu en sonun da yardımlarınız için teşekkürler :)

  • Mahmut KARADAĞ

    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 .

  • ete

    Kullandığınız derleyici demo sürümü ve 31 satırdan fazlasına müsaade etmiyor.
    www.sonsivri.com da ilaçlı bir tane bulabilirsiniz.

    Ete

  • Mahmut KARADAĞ

    Teşekkür ederim ete hocam peki ben size kodları göndersem derleyim hex kodlarını bana göndermeniz mümkün mü?

  • ete

    Yolla hallederim.
    erol.erdal@gmail.com

    Şayet eksik ise sigorta ayarlarının ne olacağı, programın hangi işlemci için derleneceği bilgisini vermeyi unutma.

    ete

  • mahmut

    Ete hocam çok teşekkür ederim
    gmailden mesaj attım sizde kodları gönderdim
    cevabınızı bekliyorum

  • mert

    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?

  • ete

    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

  • mert

    Ç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?

  • ete

    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

  • ahmet

    microcode studioyu nereden güvenli bir şeklde indiriyoruz? Ben iki farklı siteden indirdim hiç biri çalışmadı

  • fahrettink

    Ahmet, çalışmayan nedir? Program hiç mi açılmadı?

    Yoksa farklı bir şey mi var?

    Biraz açıklarsan yardımcı olmaya çalışayım.

  • ete

    Aşağıdaki linkten indirebilirsin. Zaten ücretsiz bir programdır.

    http://www.mecanique.co.uk/software/mcsinstall.exe

    Ete

  • ahmet

    Fahrettink, picbsic folderı arıyor ve bir türlü bulamıyor

  • ete

    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 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

  • ONUR

    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

  • Ete

    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
    Erol.erdal@gmail.com
    Ete

  • ONUR

    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…

  • 45likSensei

    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.