avatar_ete

PIC Basic Ders-02 (İnput Giriş Ayarları)

Başlatan ete, 28 Ağustos 2011, 14:44:08

yanuma

TRISA=%00000010
TRISB=%00000000
SYMBOL BUTTON =PORTA.1 
SYMBOL ROLE1  =PORTB.0
SYMBOL ROLE2  =PORTB.3
ROLE AC
PAUSE 200

ROLE1=0
ROLE2=0
BUTTON =0
İF BUTTON =0 THEN
ROLE1=HIGH
PAUSE:500
low ROLE
PAUSE 500
HIGH ROLE2
PAUSE 500
LOW  ROLE
PAUSE 500
GOTO ROLEAC

BU DOGRUMU  ISIS ŞEMASI ÖRNEK OLARAK VERDİM ÖGRENMEK İÇİN  HER DERS  İÇİN  EKLEME YAPARAK GİDİYORUM ÖGRENMEK İÇİN  SAYGILARIMLA

Burak

#16
Alıntı yapılan: yanuma - 02 Ağustos 2015, 16:42:21
TRISA=%00000010
TRISB=%00000000
SYMBOL BUTTON =PORTA.1 
SYMBOL ROLE1  =PORTB.0
SYMBOL ROLE2  =PORTB.3
ROLE AC
PAUSE 200

ROLE1=0
ROLE2=0
BUTTON =0
İF BUTTON =0 THEN
ROLE1=HIGH
PAUSE:500
low ROLE
PAUSE 500
HIGH ROLE2
PAUSE 500
LOW  ROLE
PAUSE 500
GOTO ROLEAC

BU DOGRUMU  ISIS ŞEMASI ÖRNEK OLARAK VERDİM ÖGRENMEK İÇİN  HER DERS  İÇİN  EKLEME YAPARAK GİDİYORUM ÖGRENMEK İÇİN  SAYGILARIMLA

1. BUTTON olarak kısa yol oluşturduğunuz ilgili port ve pin değeri PORTA.1 olan yazmacı giriş olarak ayarladınız ama üstüne kalkıp BUTTON=0 diyerek ona çıktı vermeye uğraşmanız yani o pini çıkış olarak kullanmaya çalışmanız yanlış
2.BUTTON = HIGH şeklinde bir komut olmaz bu bir syntax hatasına yol açar ..
3."BUTTON" ifadesi bir komuta tahsis edilmiş bir harf dizisidir dolayısıyla değişken olarak kullanılamaz bu durumda button şeklinde yazılmış tüm satırları "buton" yada "but" veyahut anlayacağınız başka bir ifade ile değiştirin .
4. if koşullanmasının konulduğu her satır gerekli koşullandırmalar birince "endif" ile sonlandırılmalıdır  (sizde endif eksik)..
5. Etiketler her zaman (elden geldiğince iki nokta üst üste noktalaması ile bitirilse iyi olur .. Bitirilmesede çalışır ama code explorer kısmında labels direktifinde etiket olarak görülmezler ..)

Programın doğrusu şu şekilde olacak ;


PORTA=%00000000
PORTB=%00000000
TRISA=%00000010
TRISB=%00000000
SYMBOL BUT      =  PORTA.1 
SYMBOL ROLE1  =  PORTB.0
SYMBOL ROLE2  =  PORTB.3

'ROLE1=0  Yukarıda PortB komutu ile zaten bu iki ifadeyi sıfırladığım için bu satırlara gerek yok
'ROLE2=0 Yukarıda PortB komutu ile zaten bu iki ifadeyi sıfırladığım için bu satırlara gerek yok

PAUSE 200


ROLEAC:

if BUT=0 THEN
ROLE1=1
PAUSE 500
ROLE1=0
PAUSE 500
ROLE2=1
PAUSE 500
ROLE2=0
PAUSE 500
endif
GOTO ROLEAC


6. Lütfen derslere ÇOK iyi çalışın ..

Burak
Ω Gens Una Sumus Ω

yanuma


Burak

Alıntı yapılan: yanuma - 02 Ağustos 2015, 17:25:08
KIZSANIZ'DA HAKLISINIZ  ALLAH RAZI OLSUN

Estağfurullah , kızmak diye birşey yok .. Ama hakkını vermek gerekirse Erol Hocamın dersleri gerçekten güzel bir yol gösterici , sizin yerinizde olsam şu aşamada o kaynaklardan gözümü ayırmazdım ...
Çok çalışın başka hiçbirşeye ihtiyacınız yok ....

Burak
Ω Gens Una Sumus Ω

yanuma

PORTA=%00000000    bu satır  portları   0ut olarak'mı tanıttık  yoksa 0 değerimi vermiş oluyoruz
PORTB=%00000000      benim için  önemli yada TRIS yazmacına  hazırlıkmı
TRISA=%00000010
TRISB=%00000000
SYMBOL BUT      =  PORTA.1 
SYMBOL ROLE1  =  PORTB.0
SYMBOL ROLE2  =  PORTB.3
PAUSE 200

saygılarımla

ete

#20
PORT pinlerine değer verebilmek için önce o pinleri çıkış olarak ayarlamak gerekir. Yalnızca ÇIKIŞ olarak ayarlanmış pinlere HIGH yada LOW gibi değer verebilirsin. Port pinlerinin giriş yada çıkış olarak ayarlanması ise TRISX (X burada A-B-C-D gibi port ismini temsil ediyor) yazmaç'ına değer vererek mümkündür.
Örnek vermek gerekirse TRISA=%00000000 şeklinde değer verilirse bütün A portu pinleri ÇIKIŞ (OUT) olarak ayarlanmış olur.
TRISA=%00000001 şeklinde değer verilir ise PORTA.0 pini giriş diğerleri çıkış olarak ayarlanmış demektir.
Burada bir ipucu vereyim TRIS yazmac bitlerine sıfır (0) verilirse ilgili pin Çıkış (Out) oluyor. Sıfır rakamını O harfi gibi düşünebilirsiniz. (0=OUT) Bitleri "1" yaparsan ilgili pin Input yani giriş oluyor burada da 1 rakamını I harfine benzetebilirsiniz. Yani 1=INPUT Bu şekilde düşünrseniz giriş çıkış yaparken şaşırmazsınız.

Yazmaca hazırlık diye bir şey yoktur.
SYMBOL BUT      =  PORTA.1  şeklinde bir tanımlama yapılınca PORTA.1 pinine BUT ismini vermiş oldun. Kullanırken iki türlü kullanabilirsin.
IF BUT=0 THEN   veya
IF PORTA.1=0 THEN  iki satırda aynı işi yapar. Birinde o pinin ismini  diğerinde ise direk kendi tanımlama adını kullanmış olduk. İsim kullanmak programlama esnasında bize epeyce kolaylık sağlar. Komutları anlayarak yazmanızı sağlar.

Ete

yanuma


yanuma

ISIS'de yapabildiğim kadar çizim yaptım fakat butona basmadan ledler kendi kendine yanıp sönüyor
start verince daha butona basmadan

ete

Asıl sorun aslında devre çiziminde. Buton pini hem PORTA.1'e direk bağlanmış hemde oraya +5V verilmeye çalışılmış.
Bir buton PULLUP yapılacak ise buton pini PORT'a direk bağlanır ve aynı pine direnç (10K) üzerinden +5V verilir.
+5V direk olarak pine bağlanırsa ne yaparsan yap buton pini konum değiştirmez hep +5V da yani HIGH da kalır.
Verdiğin 5V gerçekten bir 5V değil bu nedenle o pin sürekli olarak LOW da kaldığı için program tarafından butona basılıpta LOW tatbik edilmiş gibi işlem görüyor.

16F628 de A portu default olarak Komparatör olarak açılır. O pinleri Digital giriş çıkış pini haline getirecek isen CMCON=7 komutunu ilave ederek komparatör özelliğini iptal etmen gerekir.

Devreye Doğru 5V bağlamanın iki yolu var. Birincisi sol tarafta = şeklinde bir buton mevcut. Ona tıklarsan açılan pencerede POWER yazan seçenek +5V seçeneğidiri.  Üzerinde bir şey yazmasada nereye bağlarsan oraya +5V verir. Hemen altında GROUND var oda GND dir ki onu bolca kullanmışsın zaten devrede.

Doğru dosyalar ilişiktedir. Sen de yükle ve incele istersen

Ete

yanuma

#24
hocan ilk çizim ilk yazılım ALLAH razı olsun  daha ileri gideceğim sayenizde ALLAH razı olsun sizden ve diğer arkadaşlardan

yanuma

#25
Alıntı yapılan: ete - 15 Ağustos 2015, 08:26:50
Asıl sorun aslında devre çiziminde. Buton pini hem PORTA.1'e direk bağlanmış hemde oraya +5V verilmeye çalışılmış.
Bir buton PULLUP yapılacak ise buton pini PORT'a direk bağlanır ve aynı pine direnç (10K) üzerinden +5V verilir.
+5V direk olarak pine bağlanırsa ne yaparsan yap buton pini konum değiştirmez hep +5V da yani HIGH da kalır.
Verdiğin 5V gerçekten bir 5V değil bu nedenle o pin sürekli olarak LOW da kaldığı için program tarafından butona basılıpta LOW tatbik edilmiş gibi işlem görüyor.

16F628 de A portu default olarak Komparatör olarak açılır. O pinleri Digital giriş çıkış pini haline getirecek isen CMCON=7 komutunu ilave ederek komparatör özelliğini iptal etmen gerekir.

Devreye Doğru 5V bağlamanın iki yolu var. Birincisi sol tarafta = şeklinde bir buton mevcut. Ona tıklarsan açılan pencerede POWER yazan seçenek +5V seçeneğidiri.  Üzerinde bir şey yazmasada nereye bağlarsan oraya +5V verir. Hemen altında GROUND var oda GND dir ki onu bolca kullanmışsın zaten devrede.

Doğru dosyalar ilişiktedir. Sen de yükle ve incele istersen

Ete

HOCAM bugün sizin düzenleme yaptıgnız asm koduna baktım pic877 16f628a değil ama  similatörde nasıl çalıştı anlamadım yükleme yapsam 16f628 a ya çalışırmı 
saygılarımla

Adem AYDIN

A var byte[10]  Bahsettiğin işlem dizi değişkeni tanımlamadır. Yani 11 adet 8 bitlik(Byte) değişken tanımlarsın.

Ete hocam şöyle bir sorum var pbp'de a var yazıp bir boşluk bırakıp F1'e basıyorum var tanımlamaları çıkıyor çok fazla bir şey anlamadım ama a var byte[3] olan kısımda 3 yani totalde (toplamda) 3 şeklinde yazıyor sanırım bu ne kadar doğru?
(yani a var byte[10] yazdığımızda 10 tane mi 11 mi?)
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

Burak

0 dahil 9 dahil toplam 10 adet ...

Burak
Ω Gens Una Sumus Ω

Adem AYDIN

ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

yanuma

Alıntı yapılan: Burak GÜNAY - 02 Ağustos 2015, 15:30:45
Pull-up ve pull-down kavramlarini arastirmaniz gerek . Pull up yapilan devrelerde islemcinin giris olarak yapilandirilan ucunu olctugumuzde besleme voltajini goruruz , pull down yaptigimiz devrelerde ise Vsource-source yani diger tabiri ile GND voltajini okuruz ..

Sizin yaptiginiz hatalari siralayalim ..
Isisten gordugum kadariyla sizin giris yaptiginiz pin pull-up yapilmis .. Bu durumda butona basildiginda Buton-pin yolu gnd'ye baglanacak . Yani basarsak 0 basmazsak lojik 1 gorecegiz . Bu durumda programda sadece
if button=0 then
seklinde bir kod yazabiliriz bu devre semasi icin..
Diger hataniz button olarak ifade edilen pini giris yapmis olmaniza ragmen cikis pini gibi davranmasini isteyip onu bir lojik seviyeye zorlamak istemeniz olmuş (BUTTON =0 komutundan bahsediyorum)... Bunu yapmak ölümcul bir hata degil aksine hicbirseyi degistirmeyecegi icin etkisiz bir hatadir yani gormezden gelinebilir ..
Diğer hataniz ise isiste porta.1'e baglanmasi gereken uc portb.1'e baglanmis , Ayrıca komut yazım kurallarında problem var örneğin ;

İF BUTTON :1THEN
yazılmıs ..
Doğrusu
if BUTTON=1 THEN
olacaktır

RÖLE LOW :
yazılmış
Doğrusu
LOW ROLE 
olacak

Eşittir (=) ve iki nokta üst üste ( : ) programda farklı amaçlar için kullanılır . Bu çok önemlidir aksi takdirde derleme gerçekleşmez

.. Benim gozlemledigim kadariyla role iki kez ac kapa yapacak butona basildiginda ve tekrar basilana kadar hicbirsey yapmayacak ..
Burak
çıkışı pulldown yaptığmız zaman logic degeri 1 iken 0 mı yapıyoruz   tuş basılımı basılı ise rA1 HIGH İKEN LOW DURUMUNAMI düşmesi lazım

Powered by EzPortal