PIC BASIC PRO Öğreniyoruz soru cevapları

Başlatan aster, 19 Mayıs 2005, 17:33:33

POWER

#225
ete hocam,
sigorta ayarları için verdiğin satırlardan uygun olan tek bir satırımı kullacağız?söylediğin gibi yapmaya çalıştım fakat kırmızı renkte aşağıdaki hatayı verdi.

TB6BKG

frkcn

Sn ETE hocam zahmet edip ilgilendiğiniz için teşekkürler. Dediklerinizi yaptım, bir kaç hata mesajı kayboldu ve sadece ;
Error[102] c:\pbp\pbppic18.lib 997 : Out of memory   (997 den 1012 ye kadar giden)
bir hata dizisi alıyorum.  Hatamı bulmaya çalışıyorum teşekkürler.
Bugün ömrümün geride kalan son günü...

ete

Öncelikle şu Micro Code Studio Plus kullanmaktan vaz geçin. Size hiç bir faydası olmadığı gibi işinizi çıkmaza sokuyor gibime geliyor.
Normal MCS ücretsiz bir programdır Plus ise ücretlidir ancak kırılarak kullanılmaktadır. Bu nedenle normale geçseniz sizin için daha hayırlı olacak. Plus kullanmak için ileri derece programcı olmanız Debug vs kullanmanız gerekir. Bunları kullanıyorsanız sözüm yok ama kullanmıyorsanız nrmalini kullanmanızı öneriyorum.

Power sözümün bir kısmı sana. Evet ordaki ASM satırlarının tamamı Config ile ilgilidir. Ama programın önceki hali sanırım 16F877 için yazılmış ve XT osc kullanılmış. Bu nedenle ASM satırlarının ilkini aşağıdaki şekilde değiştirmen gerekir.;

__CONFIG _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H

Verilen hataları çok iyi anlamadım. Sanki ASM kodları ile MPASM kodlarının uyuşmaması gibi bir durum sezinliyorum. Bunu anlamak için şöyle yapıver;

- MCS yada MCS_Plus da open File seçeneğini kullanarak ,Derleme için kullandığın MPASM klasörünü aç ve içinde  yer alan P18F452.INC dosyasını ekrana getir. Dikkat et MCS de açtığın için BAS yada PBP uzantılı dosya arayacaktır. Dosya tipi olarak ALL Files seçersen P ile başlayan dosyaları göreceksin.
- Ekrana gelen bu dosyanın sonuna doğru git
- Takriben 654 üncü satırlar civarında;
  ;Configuration Byte 1H Options şeklinde bir ifade göreceksin. Altında 1H options için önerilen komutları bulacaksın.
  Ben sana göreceklerini sıralayayım
_OSCS_ON_1H        EQU  H'DF'   ; Oscillator Switch enable
_OSCS_OFF_1H       EQU  H'FF'
_LP_OSC_1H         EQU  H'F8'   ; Oscillator type
_XT_OSC_1H         EQU  H'F9'
_HS_OSC_1H         EQU  H'FA'
_RC_OSC_1H         EQU  H'FB'
_EC_OSC_1H         EQU  H'FC'   ; External Clock w/OSC2 output divide by 4
_ECIO_OSC_1H       EQU  H'FD'   ; w/OSC2 as an IO pin (RA6)
_HSPLL_OSC_1H      EQU  H'FE'   ; HS PLL
_RCIO_OSC_1H       EQU  H'FF'

Bu yazılanlar sende farklı olabilir. Diğer config satırlarınıda kontrol et. Programa ayzdıklarınla dosyada olanlar arasında yazım farklıkları var ise onları düzelt.
Aslında derleme yaptığın anda programdaki config satırları ile bu dosyadaki satırlar eşleştiriliyor. Uyumsuz olan varsa yada yanlış yazılmış olan varsa program hata veriyor.

Bir diğer husus da MPASM ile derleme yaparken kesinlikle kısa bir yol kullanılması gerekiyor . Bas uzantılı yada PBP uzantılı dosyanız çok uzun bir yol ismi ile gelirse ki burada sınır en fazla 65 karekter diye biliyorum sistem yine hata verecektir.
Gerekirse direk MPASM nin içine programınızı kayıt edin ve oradan derleme yapın.

Önceden dediğim gibi PBP klasöründe yer alan 18F452.INC dosyasında hiç bir CONFIG satırı açık olmamalıdır. Buna da dikkat edin.

Ete

Ete

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

erkan614

İyi günler

sürekli bu hatayı alıyorum ne sıkıntısı var anlamadım
[IMG]http://img121.imageshack.us/img121/8876/67779059.jpg[/img]

melabdan mcs indirdim olmadı pbp250a versyounu da gösterdim compiler olarak yine yok

şuan da sağlam çalışan bir versyonu lazım yardımcı olursanız sevinirim

ete

MCS ücretsiz olarak aşağıdaki adresten indirilebilir.

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

PBP ise şu anda tek kaynak gördüğüm Sonsivri sitesinen alıntı aşağıdaki adreslerin birinden indirilebilir.

http://www.megaupload.com/?d=0XIXHXHA
Aslında pek çok adres olmasına rağmen çoğundan dosya silinmiş durumda. Henüz tam çalışan birini bulamadım. Ama bu forumda da olması gerek bazı adresler. Özellikle 4shared.com adresleri çalışır durumda olması gerek. ARaştırın bence.

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

erkan614

#230
Alıntı yapılan: ete - 02 Kasım 2010, 14:54:15
MCS ücretsiz olarak aşağıdaki adresten indirilebilir.

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

PBP ise şu anda tek kaynak gördüğüm Sonsivri sitesinen alıntı aşağıdaki adreslerin birinden indirilebilir.

http://www.megaupload.com/?d=0XIXHXHA
Aslında pek çok adres olmasına rağmen çoğundan dosya silinmiş durumda. Henüz tam çalışan birini bulamadım. Ama bu forumda da olması gerek bazı adresler. Özellikle 4shared.com adresleri çalışır durumda olması gerek. ARaştırın bence.

Ete


teşekkürler linkleri aradım aslında ama pek bulamadım



define OSC 4
CMCON = 7 
ANSEL = 0  
TRISIO = %00001111 
GPIO = %00000000 
on interrupt goto kesme
intcon=%10100000          'interrupt aktif tmr0 kesmesi aktif
OPTION_REG=%00000001       'pull up aktif ps tmr0 için 1/4
tmr0=0
    
Basla:
      High GPIO.5
      Pause 50
      Low GPIO.5
      pause 500
      
      goto   basla
goto basla

end

disable
Kesme:
       toggle gpio.4
       intcon.2=0
       tmr0=0
       resume
enable


bu kodda 500 ms ara ile yanıp sönen bir led ve interrupt ile 1 ms ara ile yanan 2. led lmasını istyordum fakatbir türlü olmadı işte çıkışı görüntüsü
[IMG]http://img191.imageshack.us/img191/7480/out1f.jpg[/img]

sanırı goto basla komtunu icra etmiyor

ete

Kesme kullandığın program içinde büyük değerli PAUSE komutu kullanamazsın.
Yoksa kesme oluşsa bile Pause komutu bitinceye kadar program kesme etiketine atlamaz.
Yapılacak iki şey var ya pause süresini daha küçük sürelere bölerek uygulaman yada pause yerine başka bir taktik kullanman gerekir.

Senin programı ele alırsak;
PAUSE 500 yerine

FOR I=1 to 5000
PAUSEUS 100
next
şeklinde komut dizisi kullanmak daha doğru olacaktır. Ancak komutlardan doğan gecikmelere karşı Pauseus 100 yerine Pauseus 90 yazmanız daha uygun olur.
Kesme olan programlarda en büyük pause komutu 5 us olmalıdır. Şayet doğru bir çalışma bekliyorsan. Yoksa yukardaki örnekte olduğu gibi ms seviyesinde olmayan 100us lik bir gecikmede kullanılabilir. Kesme oluştuktan sonra en fazla 100us sonra kesme etiketine gider program.

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

erkan614

ete hocam sizin verdiğiniz linkleri indirdim tekrar kurdum mcs yi
fakat bir süre sonra tekrar ayni hatayı almaya başladım


sürekli bu hatayı alıyorum ne sıkıntısı var anlamadım
[IMG]http://img121.imageshack.us/img121/8876/67779059.jpg[/img]

yucelcem

hocam basicle rasyonel sayılarla işlem yapma şansımız varmı?

ete

Yucelcem,
Rasyonel sayılardan kastın küsüratlı işlemler ise direk olarak mümkün değil.
PBP yalnızca tam sayılarla işlem yapar. Sayıları küsürattan kurtararak işlem yapabilirsin.
Örneğin 4/5 sayısı 0,8'e eşdeğerdir. Bu sayıyı direk basicde kullanamayız.
Ancak bu sayıyı 10 ile çarparsak 8 değerini alacaktır. İşlem yaptıktan sonra sonucu yeniden 10'a bölersen sonuç değişmemiş olacaktır. Yolu bu.

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

erkan614

Alıntı yapılan: erkan614 - 02 Kasım 2010, 18:25:19
ete hocam sizin verdiğiniz linkleri indirdim tekrar kurdum mcs yi
fakat bir süre sonra tekrar ayni hatayı almaya başladım


sürekli bu hatayı alıyorum ne sıkıntısı var anlamadım
[IMG]http://img121.imageshack.us/img121/8876/67779059.jpg[/img]

sorunu çözdüm şudur ki windows 7 ve kis2011 kullanıyorum kis'i kapatınca derlemeyi sorunsuz yaptı 10 tanede 3 tanesi yine ayni hatayı verdi
sonra uyumluluktanda xp sp2 ye göre çalıştıra tıklayınca hiç problem kalmadı

yucelcem

Alıntı yapılan: ete - 02 Kasım 2010, 20:30:34
Yucelcem,
Rasyonel sayılardan kastın küsüratlı işlemler ise direk olarak mümkün değil.
PBP yalnızca tam sayılarla işlem yapar. Sayıları küsürattan kurtararak işlem yapabilirsin.
Örneğin 4/5 sayısı 0,8'e eşdeğerdir. Bu sayıyı direk basicde kullanamayız.
Ancak bu sayıyı 10 ile çarparsak 8 değerini alacaktır. İşlem yaptıktan sonra sonucu yeniden 10'a bölersen sonuç değişmemiş olacaktır. Yolu bu.

Ete

demek istediğim işlem sonucu olarak atıyorum 7.682 alıp bunu lcd'ye yazdırabilir miyiz? Denemelerimde yazdırmadı, tam kısmını alıp yazdırdı, bunu yapmanın yolu var mı?

ete

7.682 sayısını mutlaka 7682 olarak elde etmen gerekiyor. Zaten bu sonuca 7,682 sayısını 1000 ile çarparak ulaştığın için sayının tam ve küsürat kısımlarını elde etmenin yolu şöyle;
TamSayı=7682/1000
Kusurat=7682//1000

Lcdout $fe,2,dec TamSayı,",",dec Kusurat

Kusurat hesabına Mod alma işlemi denir. Bir sayının belirli bir sayıya bölünmesinden sonra kalanları sana verir. Kısaca şu işlemi yapar bu mod alma ,
-7682 sayısı zaten 1000'e bölünürse tam sayı olarak sonuç 7 çıkar.
- Bunu 1000 ile çarparsan sonuç 7000 çıkar
- 7682-7000=682 sayısını verir Böylece 7682//1000=682 bulunur.

Ekrana yazdırırkende önce tamsayıyı yazdırıyoruz;
LCDOUT $fe,2,Dec Tamsayı

Sonra bu sayının peşine bir ondalık ayıracı olarak tırnak içinde bir virgül koyuyoruz;
Lcdout $fe,2,Dec Tamsayı,",",

Daha sonrada ondalık kısmı yazdırıyoruz.
Lcdout $fe,2,Dec Tamsayı,",",Dec Kusurat

Hepsi bu kadar.

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

H@S@N

s.a arkadaşlar hayırlı çalışmalar dilerim.sizlere bir sorum olucak.kısmetse ılk projemı yapıcam.(ete hocadan ALLAH razı olsun).yapmak istediğim proje lcd ekranlı anımasyon devresi.diyelimki elimde 3 farklı animasyon var.1.animasyon,2.animasyon,3.animasyon diye.kullandığım işlemci 16f84a.malum pin sayısı kısıtlı.şuan tuş için bir adet pin kaldı boşta :)benim yapmak istediğim tus a her bastığımda diğer animasyona geçmesi ve lcd bunun gözlenmesi.bana tus kısmında yardımcı olursanız lcd de gösterme işini halledebilirim.
devre şeması aşağıdaki gibidir.
[IMG]http://img825.imageshack.us/img825/2397/adszfrt.png[/img]

Uploaded with ImageShack.us
satılık STM32F4-Discovery kit...

ete

Hasan,
Önce kolay gelsin diyorum. Yapacağın iş çok zor değil. Önce bir değişken belirle Byte cinsinden olsun. Mesela SIRA diyelim.
Program ilk çalıştırıldığında değeri sıfır olsun (SIRA=0) Bunun için başla satırından evvel SIRA=0 komutunu koy.
Daha sonra tuşa her basılışta SIRA değeri 1 artsın ama animasyon adedini geçmesin. Diyelimki animasyon adedin 3 ve biz sıfır değerinide kullandığımız için SIRA değeri 2'yi aşmamalı. Aştığı zaman yeniden sıfırlanmalı.
Örnek verelim;
IF TUS=0  THEN 'yani tuşa basılmış ise
SIRA=SIRA+1
IF SIRA>2 then SIRA=0
WHILE TUS=0:WEND
ENDIF
Bu işlemden sonra geriye sıra değerine bağlı olarak programı animasyonlara yönlendirmek kalıyor.
SELECT CASE SIRA
CASE 0
Goto Animasyon_Bir
Case 1
Goto Animasyon_Iki
Case 2
Goto Animasyon_Uc
End Select
hepsi bu kadar.
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com