Hata bunun neresinde?

Başlatan mabool, 15 Aralık 2010, 12:39:37

mabool

Öncelikle herkeze selamlar forumda yeniyim umarim konuyu doğru yere açmışımdır.
Pic programlama konusunda yeniyim işe asm ile başladim ve aşağıdaki sorunla karşılaştım.
Şimdi amaç pıc16f628a nın 16 ucunu ı/o ucu olarak kullanmaya ornek program.
A portunun tum uclarından ra3 hariç girilen gerilim 0 olduğu (butonlar basılı tutulduğunda) sürece, b portunda o butona karşılık gelen ledi söndüren program. b portunun br3 ucuna bağlı buton basılı tutulduğu sürece de ra3 e baglı led i yakar.

;===deneme.asm===14.12.2010===========================
   LIST         p=16F628A
   INCLUDE         "P16F628A.INC"
   __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF & _DATA_CP_OFF & _CP_OFF
;*****************************************************
   ORG         h'0000'
   CLRF      PORTB         ;portb ye bagli ledleri sondur
   BANKSEL      TRISB         ;bank1 e gec
   MOVLW      b'00001000'      ;w saklayicisina h'08' yukle
   MOVWF      TRISB         ;w saklayicisindaki veriyi portb ye yukle
   MOVLW      b'11110111'      ;w saklayicisina h'f7 yukle
   MOVWF      TRISA         ;RA3 cikis digerleri giris
   BANKSEL      PORTB         ;bank0 a gec
   MOVLW      h'07'         ;w saklayicisina h'07 yi yukle
   MOVWF      CMCON         ;PORTA girisleri dijital
BASLA
   MOVF      PORTA,W         ;portA yi oku sonucu w ye yaz
   MOVWF      PORTB         ;butonlarin durumunu portb de goster
   MOVF      PORTB,W         ;portb yi oku sonucu w ye yaz
   MOVWF      PORTA         ;butonlarin durumunu porta da goster
   GOTO      BASLA         ;portlari tekrar okumaya git
   END

progarmi aynı kitapta olduğu gibi yazdim derledim pice gönderdim, şimdiye kadarki programlarda kart normal çalışıyordu bu son programda başıma şöyle bir iş geldi ve resmen deli oldum.
[IMG]http://img222.imageshack.us/img222/308/1005824s.th.jpg[/img]

Uploaded with ImageShack.us
resimlerde belirtmedigim rb4 ledide calismamaktadir rb3 olmasi gerektigi gibi butona basinda ra3 ledi calismaktadir.
vede data kablosunu sokmeye gerek kalmadan kart prog(programlama) tan deka(deneme) konumuna alinmadan hicbirsekilde calismamasi gerekmekteydi
Yardimlarinizi bekliyorum sevkim kacti cunku :)

eseneren

Selamlar
Senin devrenin amacı portA daki butonların karsılıgını PORTB ye baglı olan ledlerde okumak eger dogru anladı ısem

MOVWF      PORTA         ;butonlarin durumunu porta da goster
   GOTO      BASLA         ;portlari tekrar okumaya git
yerine

BTFSC PORTB,3
BSF PORTA,3
gibi method kullansan daha güzel olmazmı yukarıdaki ile bunun farkı var mı?



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

Tagli

Kodda sorun yok gibi. Düğmeleri tek tek kontrol etmek gereksiz.

Kartı tanımadığım için kesin konuşmak zor. Ama ilk denemen gereken şey config ayarlarına _LVP_OFF ifadesini eklemek (tabi başında & ile). Sorun devam ederse kartı bir kenara bırakıp devreyi breadboard üzerine kur.
Gökçe Tağlıoğlu

malpaslan1979

#3
Alıntı yapılan: senerenemre - 15 Aralık 2010, 13:16:06
Selamlar
Senin devrenin amacı portA daki butonların karsılıgını PORTB ye baglı olan ledlerde okumak eger dogru anladı ısem

MOVWF      PORTA         ;butonlarin durumunu porta da goster
   GOTO      BASLA         ;portlari tekrar okumaya git
yerine

BTFSC PORTB,3
BSF PORTA,3
gibi method kullansan daha güzel olmazmı yukarıdaki ile bunun farkı var mı?



Değerli senerenemre. Arkadaşımız altaş yayınlarının mikrodenetleyiciler ile pic programlama 16f628 kitabının 104 nolu sayfasındaki deneyi program 3`ü yapmaya çalışıyor. Burada sizin söylediğiniz mantık tabiki en doğrusu "btfss mantığı" fakat bahsi geçen kitap btfss komutunu bir sonraki deneyde anlatıyor kendi mantığı içesinde adım adım gittiği için btfss komutu ve işleyişini anlatmamış.

mabool dostum bence bir sonraki deneye geçmeniz sizin için doğru olacaktır madem siz kitaptan çalışmak istiyorsunuz bir sonraki deneyde buton kontrol mantığını daha iyi anlayacaksınız kitabın daha başındasınız diyim bu hali ile bu kadar az komut ile hedeflenen amaçlara ulaşmak zor olur fakat diyorsanız ki mutlaka bu deneyi yapmam lazım yeni komutlar kullanmanız gerekiyor buda sizin takip ettiğiniz kitaptan daha farklı bir öğrenme yöntemi kullanmanızı gerektiriyor. değerli dostum bir sonraki deneye geçiniz. orda buton kontrol mantığını daha iyi anlayacaksınız. yani az komutla çok iş olmuyor. burada bence deneyde hedeflenen ana husus şu sizin bütün giriş çıkış pinleri nasıl yönlendirilir bunu anlamanız deneyin çalışıp çalışmaması mühim değil mesele şu ki btfss olmadan zaman geciktirmesi yapmadan alt program olmadan bu program biraz zor çalışır. siz daha ileriki konularda bu programı kendiniz yazabilirsiniz. bir daha söylemem lazım kitaptaki ana amaç bence deneyin çalışması değil yönlendirme işlemcide giriş çıkış ayarları nasıl yapılır meselesidir girişi oku çıkışa ver kısmı teferruat. değerli dostum hevesiniz daha işin başında kırılacaksa daha neler çıkacak karşınıza.

kolay gelsin....



eseneren

@mabool hevesin kırılmasın soylemeyle olmasada ; ben yapamadığım uğraşıp çözduğum seyden aldıgım tad hemen olan şeylerden alamıyorum.

@malpaslan tsk arkadasım aslında benımkı hemde soru idi PORTB cıkıs ıken PORTB ye 0 dan büyük bir register içeriği yüklense ne olur.
Donanım kısmından bahsedıyorum yoksa cıkıs degısmeyecektır FULL cıkıs ıse...

Saygılar
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

serdararikan

bence olaya yanlış yerden başlamışsın.eğer pic programlamaya yeni başlamışsan sana picbasic tavsiye ederim.donanımı atnıdıktan sonra C ye geçerek basamak atlayabilirsin. assembly ile bu aşamada uğraşma derim.

eseneren

@serdar arıkan bende yeniyim C iyi bilmeme ragmen assembly ile basladım ogrenmek ıcın özellikle yanlıs mı yaptım?
if(x==0) diyeceğime 3-5 satır kod yazıyorum, bunu yapmamıslar keşke parantez kullanılsa ıdı btfsc{kod1,kod2,kod3} oda guzel olurdu :).
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

serdararikan

assmebly de if gibi ön tanımlı komutlar var.bir kurcala help leri.macrolar falan var.onları kullanabilirsin

mabool

yardimlar icin tesekkurler arkadaslar lvp_off komutu ise yaradi neden boyle oldu anlamadim neyse hevesim kirilmasi karta verdigim para yuzunden :D yoksa tam gaz devam bu arada bir arkadas asm ile ugrasma demis hatami yaptim acaba sizler ne dusunuyorsunuz?

malpaslan1979

#9
Alıntı yapılan: mabool - 15 Aralık 2010, 18:08:47
...bu arada bir arkadas asm ile ugrasma demis hatami yaptim acaba sizler ne dusunuyorsunuz?

Bu diller ile ilgili negatif ifadeler kişileri ilgilendirir. Bu tartışmaların sonu gelmez. Bu öznel kişiye özel bir tartışma konusudur. Yalnız artılar eksiler belirtilebilir objektif olmak şartıyla. Bu programlamadaki dilin seviyesi ile ilgili bir konudur. Yani şöyle bir mesele var eğer assemblerden daha yüksek seviyeli bir dil kullanıyorsa örneğin picbasic örneğin c örneğin jal örneğin proton kullanırsan eğer:

    1-Aynı işi daha az komutla halledebilirsin. Mesela hangi dildeydi hatırlamıyorum lcdout yazıp tırnak içinde yazacağın metni girerek lcd ye metin yollarsın aynı işi assembler ile yapmak için baya bir komut cambazlığı yapmak lazım.
    2-Örnek vermek gerekirse C taşınabilirlik konusunda muhteşemdir bir projeye başladınız bu projede kullanmayı hedeflediğiniz işlemci yeterli olmadı diyelim bir iki ufak değişiklik ile bir üst seri işlemciye geçebilirsiniz.
    3-C yi öğrenmeniz durumunda sadece microchip pic işlemcileri değil başka firmalara ait programlanabilir entegreleri de programlayabilirsiniz. Tabi firmalara ait C versiyonlarında mutlaka farklılıklar olacaktır fakat bunlar bir iki günlük çalışma ile öğrenilebilir.
    4-Şunu unutmayınız eğer kritik zamanlama işlemleri yapacaksanız assembler komutları kullanabilirsiniz bunu başka dillerin içinde de kullanabilirsiniz. Yani assembler komutlarını diğer dillerin içine ekleyebilirsiniz.

Bu dil tartışmalarını "aşırı ateşli yapılması bana enteresan geliyor" ama burda önemli olan sizin tercihleriniz durumunuz yani bu işi hangi amaçla yapacaksınız yani eğer olaya profesyonel bakıyorum hızlı programda yazmam lazım diyorsanız bence C daha mantıklı. Yok amatörüm zamanım bol diyorsanız assembler da olabilir. Assembler kullanırsanız donanıma daha hakim olursunuz ama çok hamallık yaparsınız.   

Bu arada ben sadece assembler biliyorum. C öğrenmeye niyetliyim. :D

Tagli

Dil konusunun hiç tartışılmaması daha doğru olacaktır. Daha önce zaten çok tartışıldı. Bir dili ancak kendin kullandığında artısını eksisini anlayabilir, ve de daha önemlisi sevip sevmediğine karar verebilirsin.

_LVP_OFF "Low Voltage Programming"i kapatır. Bu açık olduğunda B4 bacağı programlama voltajı girişidir ve veri giriş çıkışı amacıyla kullanılamaz. Bu durumda, bu bacağa uygulanacak 5 volt PIC'i programlama moduna sokacaktır.

Sana tavsiyem hazır kartlar yerine breadboard kullanımını tercih etmendir.
Gökçe Tağlıoğlu

malpaslan1979

Alıntı yapılan: Tagli - 15 Aralık 2010, 20:09:13
Sana tavsiyem hazır kartlar yerine breadboard kullanımını tercih etmendir.

Bunu söylerken amacınız nedir? Yeni öğrenenler için mi bu yoksa tüm pic kullanıcıları için mi?

Tagli

Yeni öğrenenler için. Hazır kartların kullanıcıyı sınırladığını düşünüyorum. Zaten yeni başlayan birisi için tüm bu olup bitenler yeterince karmaşık iken bir de kartı çözmek durumunda kalmaları işleri zorlaştıracaktır. Ayrıca, breadboard'un sadeliği anlamayı kolaylaştırır düşüncesindeyim.
Gökçe Tağlıoğlu

mabool

malpaslan1979 arkadasim bu c dedigin pic c aluyor degil mi ccs c hitech c bunlar farkli sanirim. yani kisacasi c yi kastederken pcler icin olan programlama dili c degil?

malpaslan1979

Alıntı yapılan: mabool - 15 Aralık 2010, 20:44:07
malpaslan1979 arkadasim bu c dedigin pic c aluyor değil mi ccs c hitech c bunlar farkli sanirim. yani kisacasi c yi kastederken pcler icin olan programlama dili c değil?

aynen öyle ccs c yada hitech c dilleri var bunlardan birisini tercih etmeni öneririm.

1-ccs c ile ilgili serdar çicek altaş yayınlarından kitabı var.

2-hitech ile ilgili yegane türkçe kaynak fxdev.org sitesinde bulacağın fırat deveci arkadaşımıza ait online pdf kitaptır.

programlama yazılımlarının ilaçlı tam sürüm hallerini sitemizde yada sonsivri.com sitesinde bulabilirsin.