PIC BASIC PRO Öğreniyoruz soru cevapları

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

Tagli

Evet öyle, zaten ilk mesajımda "dizi değişken" demiştim. "DIZIN" ifadesi PALS'ın bitini değil dizi numarasını temsil ediyor. Gerçi tanımın PALS VAR BYTE[13] (köşeli parantez ile) olması gerekir diye biliyorum. Ayrıca eğer başka bir yerde kullanılmıyorsa 13 olmasına da gerek yok sanırım, 8 olsa yeter bu döngü için, tabi kodun tamamını görmeden kesin birşey diyemem, belki 8'den 12'ye kadarını da başka yerde kullanıyordur.
Gökçe Tağlıoğlu

dombilik

Dim pals [8]  As Byte (proton basic için)
şeklinde bir dizin tanımlanmış olması gerekli daha öncesinden..
if pals(dizin)<100

ifadesinde pals[0] dan pals[7] ye kadar 8 byte'ı 100 değeri ile karşılaştırıyor.Ama;
IF PALS[DIZIN]< 100 THEN DBIT.0[DIZIN]=0
ifadesinde

DBIT.0[DIZIN]=0 kısmında bir hata oldugunu düşünüyorum.DBIT mutlaka byte olarak tanımlanmıştır.Dolayısı ile bu kısmın

DBIT.[DIZIN]=0

şeklinde olmalı ki örneğin DBIT.[0]=0 (DBIT byte'nın 0.biti 0 olsun)
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

Tagli

Alıntı yapılan: "dombilik"DBIT.0[DIZIN]=0 kısmında bir hata oldugunu düşünüyorum.DBIT mutlaka byte olarak tanımlanmıştır.Dolayısı ile bu kısmın

DBIT.[DIZIN]=0

şeklinde olmalı ki örneğin DBIT.[0]=0 (DBIT byte'nın 0.biti 0 olsun)

Kesinlikle katılıyorum, bence de mantıklı olan bu ama PicBasic Pro 2.47 bu şekilde kabul etmiyor. DBIT.0[DIZIN] olarak istiyor, ve sanki DBIT.[0+DIZIN] gibi işleme sokuyor (0'ı 1 yaparak falan da denemiştim). Saçma ama elimizden birşey gelmez, adamlar böyle yazmış, biz de kurala uymak zorundayız...
Gökçe Tağlıoğlu

okanbugdayci

arkadaşlar çok sağol ilgilendiğiniz için olayı anladım yanlız bi sorum daha olacak şimdi ben pulsin komutunu kullanıyorum pbp de ama ben bu komutun tam olarak çalışmasını anlamadım elimdeki kaynaklarda çok açık yazmıyor

şimdi komutun kalıbı "pulsin pin,konum,değişken" şimdi low pals genişliğine göre ölçüm yapıyorum kaynakda şöyle bir şey diyor "4 mhz lik osc kullanılırsa pals genişliği 10us lik artışlarla ölçülür " diyor bu tam olarak ne demek oluyor mesela benim gönderdiğim sinyalin low pals genişliği 288 us olsun bunu 10,20,30.....280,290 diye artırarak pals bitene kadar mı ölçüyor  değişken içine nasıl bir değer atıyor yani bu değer pals genişliğinin us cinsinden aynı değeri mi??

hp8920

arkadaşlar selam
öncelikle sitede yeni oldugumu belirtmek isterim
sitede gerçekten çok güzel konular var emeği geçen arkadaşlara teşekkürler sorunumla ilgili birşeyler bulamadım

ornek:
gigh porta.2
pause 100
high porta.3
pause 100
goto örnek

A portunu çıkış olarak kullanmam gerekiyor fakat örnekteki işlemde portların her ikisininde haih da kalması gerekirken biri high da iken diyeri low a düşüyor.
dikkatimi çeken bu sorun ADC si olan pic lerde oluyor 16f84 ve 628 be böyle bi sorun yok.
bu konuda bana yardımcı olursanız sevinirim

dombilik

ADC si olan pic lerde (mesela 16F877) analog kanallar PORTA ya konumlandırılmıştır.PORTA hem analog giriş kanalı hemde digital giriş kanalı olarak kullanılabilir tabi bu durumu pic'e belirtmek koşulu ile...

16F877 için konulacak olursak ADCON1 registeri ile bu seçimler yapılır.İstenilen kanallar analog istenilen kanallar digital olarak yönlendirilir.ADCON1 registeri ve kullanımı datasheette mevcut ama kısaca bu registerdeki pcfg0,pcfg1,pcfg2,pcfg3 konfigurasyon bitleri ile
portunu düzenleyebilirsin..
mesela;
ADCON1=7
tüm analog kanallar digital olacaktır.
Kolay gelsin..
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

hp8920

cevap için teşekkur
16f877 pdf sini epeyce inceledim ama asm bilmedigim için pek bişe anlamadım az önce şu örnegi denedim
'------16f88-------------------------

 adcon1=7
 trisa=%00000000
main:
 high porta2
 high porta3
 pause 100
 low porta2
 low porta3
goto main
'----------------------------------------

bu şekilde bi deneme yaptım fakat sonuç olumsuz
porta3 normal çalışıyor
porta2 anında low a duşuyor
bu arada adcon1=7 olarak denedim adcon1=0 ve adcon1=255 olarak çeşitli denemeler yaptım ama hiçbiri en ufak bi etki yapmadı
A portunu tanımlamayla ilgili bi sorun oldugunu biliyorum am nasıl olacagını bulamadım ayrıca dökümanda bulamadım ASM de bilmiyorum

dombilik

Device 16F877
XTAL 20
ADCON1=7
basla:
      High PORTA.2  
      High PORTA.3
      DelayMS 500
      Low PORTA.2
      Low PORTA.3
      DelayMS 500
      GoTo basla


birde böyle dene..High ve Low komutları zaten ilgili pini direk
çıkış olarak atadığı için TRIS yada OUTPUT komutu ile veri yönü
belirtmenede gerek kalmaz..Bu arada PORTA.4 ün "open drain"
yani açık kollektor bağlantısına sahip olduğunuda belirteyim..
Eğer bu pin çıkış olarak kullanılacaksa 4K7 bir direnc ile +5V ye
bağlanmalıdır aksi takdirde çıkıştan "lojik 1" seviyesini alamazsın.

micro code studio da ise;
include "P16F877.inc"
DEFINE OSC 20
ADCON1=7
basla:
      High PORTA.2  
      High PORTA.3
      High PORTA.4
      pause 500
      Low PORTA.2
      Low PORTA.3
      Low PORTA.4
      pause 500
      GoTo basla

işini görecektir sanırım.
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

hp8920

verdiginiz örnekle diyerleri arasında pek far gözukmuyor ama yinede denedim sorun aynı devam ediyo
fakat yeni bi deneme yaptım bu şekilde çalışıyor
---------------------------------------------------
     ADCON1=7
basla:
     portA=00001100
     pause 500
     portA=00000000
     pause 500
     GoTo basla
---------------------------------------------------
bu şekilde kullanmakta programın uzamasına neden olur yani 1 portu high yapmak için tüm portların degerlerini gondermek gerekiyor
açıkçası bu olayı çözmek gerekiyor neden
(porta=00001100) çalışıyorda
(high porta.2,  high porta.3) çalışmıyor
yaptıgım testlerde high porta.2  çalışıyor ardından high porta.3 dedigimizde porta.2 işlevini kaybediyor porta.3 işlevsel duruma geçiyor
yani  1 bit register varmışta tüm a portları için aynı registeri kullanıyormuş gibi

hp8920

soruna bi çozum buldum bu şekilde kullanabiliyorum ama asıl sorun duruyor
---------------------------------------------------------
cikis var byte
TRISA = %00000000
basla:
cikis=0
   cikis.2=1
   cikis.3=1
       porta=cikis
   cikis.2=0
   cikis.3=0
       porta=cikis
goto basla
-------------------------------------------------------------------
bu sekilde kullanabiliyoruz purogram içerisinde a portlarından bini high veya low yapmamız gerekirse şöyle yazmamız gerekiyor
--------------------------------------------------------------
cikis.1=1      'cikis in 1. adresini 1 yap
porta=cikis    'cikis i portA ya aktar
-------------------------------------------------------
enteresan bi durum A portunun 1 pinine işlem yaptırdıgımızda diyer pinlerdeki bilgiler siliniyor A portunun hepsine birden yükledigimizde bi sorun yok

dombilik

senin daha önce verdiğin örneklerde ;

porta2

tabirini kullanmışssın...doğrusu porta.2 olacak...

mutlaka çalışması lazım biryerlerde bariz bir hata var..
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

hp8920

ordaki örnekte porta2 senbolik dogru olması gereken porta.2
gerçek uygulamada yazılımda bi sorun yok fakat kesinlikle bahsettigim hata oluşuyor  ayrıca bu yazılımları kendim yapmış oldugum deney bordunda anında deneyebiliyorum ve yukardakileri denedim
zannedersem ADC li PİC lerde A portunu çıkış olarak kullanan olmadı.
PİC12F675   8 bacaklı ADC li ve 6 adet IO portu var A ve B portları olmadıgı icin tüm işlemleri IO port uzerinde yapmak zorundayız birden fazla pini çıkış olarak kullandıgımızda aynı sorun burdada oluşuyor

kafa1500

ETE hocanın derslerinde kopya çekerek 12f675 ve RF modüllü tek kanal alıcı-verici yapmaya çalıştım, nasıl olduysa çalıştı :) Buraya kadar sorun yok.
Şimdi alıcı kısmına ayrıca buton ekleyip alıcıdaki ledi yakıp söndürmeye çalışıyorum, ama doğal olarak çalıştıramadım. Amacım vericiden led yakıldıysa veya söndürüldüyse alıcıdaki butonla tersini yapmak. Nasıl yapabilirim?
@   device  pic12f675, intrc_osc_noclkout, wdt_on, pwrt_on, mclr_off, protect_off

         cmcon = %00000111
         ansel = 0
         OPTION_REG.7=0
         trisio = %000110
         GPIO=0
        
	BILGI VAR BYTE
        GIRIS VAR GPIO.2
        LED1 VAR GPIO.0
        TUS VAR GPIO.1
        PAUSE 300
        
BASLA    
   serIN2 GIRIS,396,[WAIT ("OZB"),BILGI]
    IF BILGI=22 then
       TOGGLE LED1
    ENDIF
IF TUS=0 THEN
        TOGGLE LED1
        WHILE TUS=0
        WEND
    ENDIF
       pause 200
       GOTO BASLA

END

Güzelin nazına, Ford'un ara gazına hastayım.

kafa1500

Kesme mi kullanmak gerekir? Arkadaşlar bu konuda yardımınıza ihtiyacım var.
Güzelin nazına, Ford'un ara gazına hastayım.

kafa1500

@alayli hocanın başka bir başlıkta yazdığı mesajdan yola çıkarak kodu aşağıdaki şekilde değiştirdim. Sonuçta alıcıdaki buton çalıştı ama önce vericideki butona bir kere basmak gerekiyor. Alıcıdaki butonu bağımsız çalıştıramıyorum. Bu kısmı çözemedim.


@   device  pic12f675, intrc_osc_noclkout, wdt_on, pwrt_on, mclr_off, protect_off
         cmcon=%00000111
         ansel=0
         trisio=%000110
         GPIO=0
        BILGI VAR Byte
        GIRIS VAR GPIO.1
        LED VAR GPIO.0
        TUS VAR GPIO.2
        PAUSE 100        
BASLA:
serIN2 GIRIS,396,50,ZAMAN,[WAIT ("OZB"),BILGI]
    IF BILGI=1 then
    TOGGLE LED
    PAUSE 50
    ENDIF
ZAMAN:
    IF TUS=0 THEN
    TOGGLE LED
    WHILE TUS=0 :WEND
    PAUSE 50
    ENDIF
    goto BASLA
    END
Güzelin nazına, Ford'un ara gazına hastayım.