PIC Programlamaya yeni başlıyorum yol gösterebilir misiniz?

Başlatan Kaya Onur, 27 Ocak 2011, 20:42:21

nurim

Alıntı yapılan: Kaya Onur - 28 Ocak 2011, 23:29:00
Biraz önce PICBASIC PRO 2.6 ve MicroCode Studio'yu kurdum.

2. dersteki Proje 2.b nin kodunu kopyaladım kafat compile tuşuna basınca assembler aramaya başladı.

MicroCode Studio, PBP compiler'ı kendi buldu fakat View menüsünden Compile and Program options'dan Assembler sekmesinde "use MPASM" seçeneğini kaldırmam gerekti.

Bu şekilde compile tuşuna basınca MPASM'ı aramadan işlemi bitirdi. PBP'nun PM assembler'ını buldu sanırım.

Sanırım oldu :) Bu şekilde mi devam edeyim yoksa MPLAB IDE'yi de indirip MPASM'ı mı kullanayım?

Sırada proteus var..
Çok çalışmam lazım çoook :)

İşi çözmüşsün zaten. Bu şekilde devam edebilirsin. MPASM kurman gerekmez.
- "Sırada proteus var.." evet doğru, işin olmazsa olmazlarındandır.

Kolay gelsin
nurim
"Bilgi paylaştıkça artar ,acı ve keder paylaştıkça azalır"

Kaya Onur

Alıntı yapılan: nurim - 29 Ocak 2011, 15:09:29
İşi çözmüşsün zaten. Bu şekilde devam edebilirsin. MPASM kurman gerekmez.
- "Sırada proteus var.." evet doğru, işin olmazsa olmazlarındandır.

Kolay gelsin
nurim

Teşekkürler ama hiç bakamadım bugün.
Çözdüysem de sizlerin sayesinde efenim  ::)

Moderatöre not: Mesajların onaylanma gereksinimi hep olacak mı?
Moderatörden cevap: Belli bir mesaj sayısına kadar evet .

Kaya Onur

Elimde bir 16F88 PIC var bunun dahili osilatörünü kullanmak istiyorum. 16F88'in datasheet'inden anladığım OSCCON register'ına %01111100 gibi bir değer vermem gerektiği. Fakat bu yeterli değil sanırım.

Internetden araştırıyorum. Device Oscillator Configuration Bits'in INTRC_OSC_NOCLKOUT'a set edilmiş olması da gerekirmiş. Bu ne anlama geliyor? Bunun PBP'daki kod karşılığı nedir?

Bir de aklıma takıldı. Datasheet'de OSCCON için (ADDRESS 8Fh) tanımı geçiyor. Yani bu bir pointer mı? Pointer ise nasıl direk OSCCON = %01111100 yazabiliyoruz?

M16f88.INC dosyasında şöyle bir satır var:
OSCCON          equ     8Fh             ; Oscillator Control

Bu ne anlama geliyor? Bu dosya otomatik olarak MicroCode studio tarafından include mü ediliyor PIC listesinden 16F88 seçince?

Çok soru sordum biliyorum ama elimde değil. İşin başında olunca herşey arap saçı gibi geliyor insana. Umarım yakında düzelmeye başlar...



Maxim

son mesajları ben temizledim

proton+ config ayarları boşuna kafa karıştırdı
size picbasic bilen birisi cevap versin

ete

Kaya Onur;

16F88 işlemcisinde dahili RC osilatörü mevcut. Bu osilatörü seçerseniz işlemciye ayrıca bir kristal veya başka bir osilatör elemanı bağlamadan kendi osilatörü ile çalışmasını sağlarsınız. Hatta kristal bağlanan bacaklarıda  normal giriş - çıkış pini olarak kullanabilirsiniz.
Bunu seçimi Pic Basic Pro da;
@ Device 16F88, INTRC_OSC komutu ile oluyor. Kristal pinlerinden birisinden ayrıca bir clock çıkışı almayacak  iseniz komutu şu şekilde yazmanız uygun olur;

@ DEVICE pic16f88, INTRC_OSC_NOCLKOUT

Bu işlemcinin bir dahili osilatörü olmasına rağmen birden fazla frekans seçeneğide mevcuttur. Pek çok işlemcide olmayanbir özellik.
Data sheet'e bakarsanız elinizdeki alternatifler;
- 31,25 KHz
- 125 KHz
- 250 KHz
- 500 KHz
- 1 MHz
- 2 MHz
- 4 MHz
- 8 MHz
dir.  Şimdi düşünün dahili osilatörü seçtiniz ama hangi frekansta olacağını nasıl seçeceksiniz?. İşte bu işide OSCCON registeri yapmaktadır.
Bu registerin 4-6 arasındaki bitleri bu işi yapmaktadır. Bu nedenle program frekansla ilgili iki şey yapmanız gerekiyor;
Birincisi Define OSC 4  (yada 8 yada bir başka değer) şeklinde işlemciye çalışma frekansının ne olacağını bildiriyorsunuz. Bu komut zamana bağlı olarak çalışan Pause , serin, serout shiftout gibi komutların zamanlamasını belirlenen frekansa uygun olarak yapılmasını sağlıyor.
İkinci yapılacak iş ise OSCCON registerinden frekansınızı ayarlamanız olacaktır. Burada en çok kullanılan iki frekans değerini ben vereyim;
OSCCON=%01101110 şeklinde verilirse 4 Mhz seçilmiş olacaktır.
OSCCON=%01111110 şeklinde verilirse 8 Mhz seçilmiş olacaktır.

Kolay Gelsin
E T E
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Kaya Onur

Teşekkürler Erol Bey. Kristali çıkarttım. Çalışıyor.

Not: İkinci dersteki Proje 2b/2c 'nin devresini kurdum breadboard'da (Ledi tuş ile On/Off yaptığımız proje).
Söylediğiniz gibi 7805 kullandım ve 5 ve 14 nolu besleme pinlerine 100nF kondansatör bağladım.

Ledi kontrol eden tuşa bastığımda Led her zaman yanmıyor. Yanıyorsa da sönmüyor bazen. Nerede yanlış yapıyorum acaba? Kristali çıkartmadan önce de bu durum vardı.

ete

Anlaşılan o devreyi 16F88 işlemci ile yapıyorsun.

O programları hazırlarken birinci amaç programlama mantığını oturtmak idi. Okuyucuyada birşeyler bırakmak istemiştim.
Şimdi karşılaştığın sorunu gidermek elinde aslında.

Dikkat edersen Program 2B de, tuşa basıldıktan sonra led yakılıyor ama yakıldıktan sonra yeniden buton kontrolüne gidilinceye kadar hiçbir başka gecikme koyulmamış. Bu durumda işlemci çok hızlı çalıştığı için tuşa basılır basılmaz led yakılıyor ancak sen daha elini tuş dan çekmeden yeniden tuşun basılı olduğu görülerek bu seferde söndürülüyor. Mantıklı bir çalışma için aşağıdaki komutları bir dene bakalım.

TRISB=%00000001
SYMBOL TUS=PORTB.0
SYMBOL LED=PORTB.1
BASLA:
IF TUS=0 THEN
IF LED=1 THEN
LOW LED
ELSE
HIGH LED
ENDIF
PAUSE 300
ENDIF
GOTO BASLA
END


Yada bir başka şekilde;
TRISB=%00000001
SYMBOL TUS=PORTB.0
SYMBOL LED=PORTB.1
BASLA:
IF TUS=0 THEN
IF LED=1 THEN
LOW LED
ELSE
HIGH LED
ENDIF
while tus=0:wend 'tus bırakılıncaya kadar bekleyecek sonra devam edecek
pause 200
ENDIF
GOTO BASLA
END


Program 2C de ise şunlar yapılabilir;

TRISB=%00000001
SYMBOL TUS=PORTB.0
SYMBOL LED=PORTB.1
BASLA:
IF TUS=0 THEN TOGGLE LED
while tus=0:wend
pause 100
GOTO BASLA
END


Kolay Gelsin
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Kaya Onur

Evet 16F88 kullanıyorum. 16F84 mü kullanmalı idim?
Bende şimdi anlattığınız durumdan şüphelenip şunu denedim  :D

BASLA:
IF TUS=0 Then
DO UNTIL TUS = 1
LOOP
TOGGLE LED
ENDIF
GOTO BASLA

Fazla bir gelişme olmadı  ::)

Yazdığınız kod örneklerinden TOGGLE komutu kullanan sonuncuyu denedim. En iyi çalışan o oldu ama yine var aksaklıklar.

Haylaz bir öğrenciyim sanırım...

eseneren

Datasheete bakmadım ama kristali cıkarınca calısıyor demen uzerıne 16f88 dedı sanrım ETE hoca, internal osilatoru var dıye istedigin chip ile calısabılırsın.
16f84 , 16f88 farketmez.
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

Mucit23

Yapamadığın şey nedir anlayamadım. ETE hocamız yapılması gereken herşeyi söylemiş

Birde şöyle dene.
@ DEVICE PIC16F88
@ DEVICE PIC16F88, WDT_ON
@ DEVICE PIC16F88, BOD_ON 
@ DEVICE PIC16F88, MCLR_OFF
@ DEVICE PIC16F88, LVP_OFF
@ DEVICE PIC16F88, PWRT_ON
@ DEVICE PIC16F88, CPD_OFF
@ DEVICE PIC16F88, PROTECT_OFF
@ DEVICE PIC16F88, INTRC_OSC_NOCLKOUT  
DEFINE OSC 4
OSCCON=%01101110
ANSEL=0
TRISA=%00000000
TRISB=%00000001
PORTA=0:PORTB=0
SYMBOL LED=PORTB.1
SYMBOL TUS=PORTB.0

BASLA:
IF TUS=0 THEN 
TOGGLE LED
WHILE TUS=0:WEND
ENDIF
GOTO BASLA
END

Kaya Onur

Alıntı yapılan: mucit23 - 05 Şubat 2011, 12:43:54
Yapamadığın şey nedir anlayamadım. ETE hocamız yapılması gereken herşeyi söylemiş

Yapamadığım şey devrenin güvenilir çalışmasını sağlamak. LED yanıyorsa tuşa bastığımda sönsün, sönükse tuşa bastığımda yansın. İstisnası olmasın.

Verdiğiniz kod çok büyük gelişme sağladı. Ayrıca LED artık yanıkken titreme de yapmıyor. Teşekkür ederim. Bu farkı yaratan nedir ?

Kaya Onur

@ DEVICE PIC16F88
@ DEVICE PIC16F88, WDT_ON
@ DEVICE PIC16F88, BOD_ON 
@ DEVICE PIC16F88, MCLR_OFF
@ DEVICE PIC16F88, LVP_OFF
@ DEVICE PIC16F88, PWRT_ON
@ DEVICE PIC16F88, CPD_OFF
@ DEVICE PIC16F88, PROTECT_OFF
@ DEVICE PIC16F88, INTRC_OSC_NOCLKOUT  
DEFINE OSC 4
OSCCON=%01101110
ANSEL=0
TRISA=%00000000
TRISB=%00000001
PORTA=0:PORTB=0
SYMBOL LED=PORTB.1
SYMBOL TUS=PORTB.0

BASLA:
IF TUS=0 THEN TOGGLE LED
WHILE TUS=0:WEND
PAUSE 100 'Yada 200
GOTO BASLA
END


Hatam şu: Erol Bey'in yazdığı kodu copy-paste yapmak yerine elimdekine yazarak uydurdum. Bu arada Pause ile başlayan satırı yazmamışım. Oysa while döngüsünden başka bir diğer önemli yer de bu. Parmak tuştan kalkarken o sırada oluşabilecek "temassızlık"lar işi bozuyor. Bu pause ile bunun önüne geçmiş oluyoruz.

Mucit23: LED'in titreyerek yanmasını önleyen nedir söyleyebilir misiniz?

Mucit23

Farklı bişey yapmadım. Pic çok hızlı çalışır. Yani sen tuşa bastığın zaman tuşu bırakıncaya kadar birkaç defa döngü tamamlanır led birden fazla yanıp söner. Bunu engellemek için Whıle wend komutunu kullanmıştım. Bu komut ile tuşa bir kez basıldığı zaman ıf koşulunu yerine getirir ve tekrar tuşu bırakıncaya kadar hiçbir işlem yapmaz. Tuşu bırakıp tekrar basınca yine ıf koşulunu yerine getitir ve tekrardan tuşun bırakılmasını bekler. Böylelikle tuşa basmamız ileledin biden fazla yanıp sönmesi engellenir. Hepsi bundan ibaret.

KIRIKDR

önce biraz asm bakınız ardından ccs c öğrenmek icin altaş yayıncılıktan "serdar çiçek" in ccs-c ile pic programlama kitabına bakabilirsiniz..Ayrıca altaş yayıncılığın proteus kitabı da cok hos hazırlanmıs...iyi calısmalar..

Kaya Onur

Alıntı yapılan: mucit23 - 06 Şubat 2011, 17:18:47
Farklı bişey yapmadım. Pic çok hızlı çalışır. Yani sen tuşa bastığın zaman tuşu bırakıncaya kadar birkaç defa döngü tamamlanır led birden fazla yanıp söner. Bunu engellemek için Whıle wend komutunu kullanmıştım. Bu komut ile tuşa bir kez basıldığı zaman ıf koşulunu yerine getirir ve tekrar tuşu bırakıncaya kadar hiçbir işlem yapmaz. Tuşu bırakıp tekrar basınca yine ıf koşulunu yerine getitir ve tekrardan tuşun bırakılmasını bekler. Böylelikle tuşa basmamız ileledin biden fazla yanıp sönmesi engellenir. Hepsi bundan ibaret.
Güleceksiniz buna ama bir hatam da MCLR pinine pull-up koymamak. O haliyle PIC gayet güvenilmez bir şekilde çalışıyordu. Hatta çalışıyor bile denemez "birşeyler" yapıyordu. Ledde de belli belirsiz bir titreme oluşuyordu... Nasıl yanık halde kalabildiğini bilmiyorum. Sizin verdiğiniz kodun konfigürasyon kısmında bunun da önüne geçilmiş tek satır ile. Anlayabilmek için bayağı bir uğraşmam gerekti..

Alıntı yapılan: KIRIKDR - 07 Şubat 2011, 10:45:57
önce biraz asm bakınız ardından ccs c öğrenmek icin altaş yayıncılıktan "serdar çiçek" in ccs-c ile pic programlama kitabına bakabilirsiniz..Ayrıca altaş yayıncılığın proteus kitabı da cok hos hazırlanmıs...iyi calısmalar..
Teşekkürler tavsiyeniz için. Evet her yol ASM'ye çıkıyor. Şimdilik Erol Bey'in derslerini bitirene kadar başka bir platform denemek istemiyorum. C compiler olarak çok alternatif var. Siz neden CCS'yi tavsiye ediyorsunuz?