avatar_ete

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

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

ete

Bu dersimizde pic pinlerinin nasıl input yani giriş olarak ayarlandığını ve bu işlemin nerelerde kullanıldığını öğreneceğiz.


Hazırlanan programlarda pic in zaman zaman dış ortamdan bilgi alması ve bu bilgiye göre karar vermesi istenir.

Örnek olarak bir tuşa basılması halinde git şu işi yap şeklinde bir program en basitinden yazılabilir.

ETE

yusuf.ozyer

hocam bu yazında bir farklılık gördüm şu yerde
"TOGGLE PORTB DİYEMEYİZ ANCAK TOGGLE PORTB.2 DİYEBİLİRİZ " demişsin halbuki oradabiz orada portb.2  boşta biz led olarak PORTB.1 i kullandık yoksa siz orayı sadece örnek vermek içinmi yazdınız hocam

ete

Toggle komutunun byte bazında değil bit bazında işlediğini açıklamak için öyle söylemişimdir. Genel örnek yani diğeri ile bağdaştırmayın.
Ete

yusuf.ozyer

hocam ISIM VAR BYTE[10] denilen yerde 11 adet değişken vardır  yani şunumu demek istediniz   bir animasyon yapılacak 11 adet led kullanacağım  LED VAR BYTE[10]  bu devrede 11 adet led olduğunumu gösteriyor

Mucit23

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

Led tanımlamak istiyorsan Symbol tanımlamalarını kullanabilirsin. Kullanımı aşağıdaki gibidir.

Symbol Led1=Portb.0
Symbol Led2=Portb.1
Symbol Led3=Portb.2
.
.
.

Şeklinde 11 led için hangi pine bağlı olduğunu tanımlayabilirsin. Sonrasında Program içerisinde Led1 dediğin zaman derleyici Portb.0 dan bahsedildiğini bilir. Yani Led1=1 yaptığın zaman portb.0'a bağladığın led yanar.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

sinan5541

#5
arkadaşlar öncelikle herkese merhabalar
yeni yeni program yazmaya çalışıyorum bişeyler yazdım ama bi yerde tıkandım
yardım ederseniz çok sevinirim
düşündüğüm program şöyle 2 buton ve 2 led var
enerji verilince 1. led yanacak 2.led sönük durumda olacak
1. butona basınca 1. led sönecek 2. led yanacak
2. butona 5 kere basınca 2. led sonecek 1. led yanacak
ve bu boyle devam edecek
benim yazdığım programda 2. butona 5 kere basma durumunu gerçekleştiremedim
döngüyü sağlayamadım yardımcı olursanız sevinirim.bi de hatayı nerede yapıyorum açıklayabilirmisiniz.
yazdığım program şöyle
TRISA=%00000011
TRISB=%00000000
PORTA=0
PORTB=0
SYMBOL BUTON1=PORTA.0
SYMBOL BUTON2=PORTA.1
SYMBOL LED1=PORTB.0
SYMBOL LED2=PORTB.1
SAYI VAR BYTE
BASLA:
LED1=1
LED2=0
BASLA1:
IF BUTON1=0 THEN DON
GOTO BASLA
DON:
LED1=0
LED2=1
BASLA2:
IF BUTON2=0 THEN DON2
GOTO BASLA2
DON2:
'SAYI=SAYI+1
'PAUSE 150
'IF SAYI=5 THEN
'SAYI=0
LED1=1
LED2=0
GOTO BASLA
END

ete

Biraz fazla teferruatlı bir program yazmışsın ama anlamak açısından iyi yapmışsın.
Bir butona 5 defa basılıp basılmadığını anlamanın tek yolu basılma sayısını saymaktır.
Ben olsam şöyle yazardırm;
TRISA=%00000011
TRISB=%00000000
PORTA=0
PORTB=0
SYMBOL BUTON1=PORTA.0
SYMBOL BUTON2=PORTA.1
SYMBOL LED1=PORTB.0
SYMBOL LED2=PORTB.1
SAYI VAR BYTE
pause 200 'açılış gecikmesi gereklidir
'başlarken Led1 yanacak Led2 sönük olacak o halde buraya yazarım
Led1=1
Led2=0
SAY=0
BASLA:
IF BUTON1=0 THEN
  LED1=0
  LED2=1
  WHILE BUTON1=0:WEND
  PAUSE 50
ENDIF

IF BUTON2=0 THEN
  SAY=SAY+1
  IF SAY=5 THEN
    LED2=0
    LED1=1
    SAY=0
  ENDIF 
  WHILE BUTON2=0:WEND
  PAUSE 50
ENDIF   
GOTO BASLA

END

Ete


sinan5541

hocam cok tesekkurler yanıtınız için dersleriniz sayesinde insallah adım adım ilerleyemeyi düşünüyorum

MrDodo

Merhaba,

Örnek projeleri simülasyon ve pratikte denerken farkettiğim bir durum var. Mesela Buton ile led yakıp söndürdüğümüz alıştırma programında, butona basıldığında mikrosaniyelik arklanmalar dolayısıyla led sürekli yanıp sönüyor. Yani basılı tutuyormuş gibi. Kararsız bir çalışma söz konusu. Acaba yükselen kenar-düşen kenar tarzında bir input komutu ekleme şansımız var mı ?

MrDodo

BİDİL

Bahsettiğiniz örnek proje pic'in giriş ayarlarını nasıl yapılacağını göstermek için yazılmış. Yazılama bakılırsa butona sürekli basıldığında ledin yanıp sönmesi çok normal, bunu engellemek için icra edilecek komuttan önce WHILE TUS=0:WEND komutu eklenerek basılı olan butonun bırakılması ve daha sonra komutun icra edilmesi sağlanabilir. Ayrıca mikrosaniyelik bir arklanma söz konusu değil bunun nedeni ledin konumunu değiştirdikten sonraki bir milisaniyelik geçikme (pause 1), bu geçikmeyi 500 milisaniye yaparsan arklanma olmadığını bilakis yanıp söndüğünü görebiliriz.Tabii bir milisaniyelik geçikmeyi gerçek devrede göremezsin.

yanuma

#10
Şimdi bu yazdğımı doğrumu  aslında işin mantığını çözmeye çalışıyorum  entegre adı vermiyorum o yüzden  saygılarımla

TRISA=%00000010
TRISB=%00000000
SYMBOL BUTTON =PORTA.1 
SYMBOL ROLE1  =PORTB.0
SYMBOL ROLE2  =PORTB.3
ROLE AC
PAUSE 200  ete hocam burayı ilk açılışta stabil çalışsın dediğniz için yazdım önceki derste

ROLE1=0
ROLE2=0
BUTTON =0
İF BUTTON :1THEN    butona basıldıysa roleye yol versin dedim
RÖLE1:HIGH
PAUSE:500
RÖLE LOW :
PAUSE 500
RÖLE2: HIGH
PAUSE 500
ROLE LOW
PAUSE 500
GOTO ROLEAC

yanuma


Burak

#12
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
Ω Gens Una Sumus Ω

yanuma

burak günay çok teşekkür ederim  inşallah öğrenecegim  sizlerin sayesinde

yanuma

#14
alıntı:( Benim gozlemledigim kadariyla role iki kez ac kapa yapacak butona basildiginda ve tekrar basilana kadar hicbirsey yapmayacak .. )

DOGRUDUR

Powered by EzPortal