Not 2: PIC16F628A ile I/O (Giriş/Çıkış) İşlemleri

Yayınlandı: 25 Ağustos 2011 / Microchip PIC Programlama...
Etiketler:, , , , , , , , ,

Bir önceki yazımızda MikroC’ ye giriş yapmış ve portb’nin çıkış olarak kullanılmasına örnek vermiştik. Bu arada “delay_ms(x)” komutunun da bize istediğimiz  sürede bekleme sağladığını öğrenmiştik. Bu yazımızda ise PORTB üzerinde giriş çıkış işlemleri yapacağız. PORTB’nin bazı pinlerini giriş, bazılarını çıkış olarak ayarlayacağız ilk olarak. Daha sonra giriş olarak ayarladığımız pinlere bağladığımız butonlarla  çıkış olarak ayarladığımız  pinlere bağlı ledleri yakıp söndüreceğiz.

İlk olarak devre şemamızı çizelimki hangi pinleri giriş hangilerini çıkış olarak ayarlayacağımızı belirleyelim. Benim çizmiş olduğum şema alt tarafta görülüyor.

Görüldüğü üzere butonları pull-up olarak bağladım. Yani butonlara basıldığı anda ilgili pine +5V ulaşmakta, butona basılmadığı zaman ise ilgili pin 0V seviyesinde. Butonun bu  bağlantısına “pull-up” deniliyor. Eğer butona basıldığında ilgili pinde 0V görmek isteseydik buton ve direnci ters çevirmemiz gerekecekti. Ancak bu durumda direnç değerini iyi ayarlamamız gerekiyor çünkü “sink akımı” dediğimiz  pinlerden girebilecek akım miktarı 25mA max. Yani bu akım seviyesini aşarsak iyi ihtimalle ilgili portu, kötü ihtimalle ise uC’yi komple kaybedebiliriz.  Şemamız hazır olduğuna göre gelelim programımızı yazmaya. Programı paylaşırken resim olarak paylaşmamın nedeni koyala yapıştır yapmadan, sizlerin de kodları yazarak el alışkanlığınızın gelişmesini sağlamak.  MikroC derleyicisine ait kod penceresi  aşağıda görülmekte.  Programda  “yak” butonuna bastığımızda portb’ye ait son 6 pin “high” oluyor. “Söndür” butonuna basıldığında ise bahsettiğimiz pinler “low” seviyeye düşüyor. Pinlerin giriş çıkış olarak ayarlanması ile ilgili örnek bir program bu..

Kodda gördüğümüz üzere yeni olan iki ifade var bunlar ” while” ve “if”. “while” bir döngü komutudur ve  “while(a==5)” örneğinde olduğu gibi “a’nın değeri 5 iken ” anlamına gelir. Bu durumda “a” değişkeninin değeri 5 iken while döngüsünün küme parantezlerinin arasında kalan komutlar  sırası ile sürekli işletilir. En alttaki komutta işletildikten sonra a’nın hala 5′ e eşit olup olmadığı kontrol edilir ve hala 5′ e eşit ise küme  parantezleri arasındaki kodlar sırası ile tekrar işletilir. Bu durum şart bozluncaya kadar tekrar eder. Burada dikkat edilecek  bir yazım kuralı vardır. “a” değişkeninin 5’e eşit olup olmadığı kontrol edilirken, yani eşit mi sorusu sorulurken “==” çift eşittir operandı kullanılır. while(a=5) yanlış bir ifadedir.  “a=5” demek a’nın içeriğini 5 yap demektir. “a==5” ise a’nın içeriği 5’mi diye sormaktır.  Bir diğer ifade ise “if” şartıdır. “if(portb.f0==1) demek “eğer(portb’nin 0. pini 5V seviyesinde ise)” demektir. Bu şart sağlanırsa “if” şartına ait küme parantezleri arasındaki kodlar sırası ile işletilir ve en son kodda işletildikten sonra parantezlerden çıkılır ve bir sonraki komuta geçilir. Yani “while” döngüsünde olduğu gibi başa dönülmez.  Yukarıdaki programda  portb.f0’ın durumu kontrol edildikten sonra  portb.f1’in durumuna sıra geliyor, o da kontrol edilince program tekrar “while(1)”  ifadesinin küme parantezleri içerisindeki kodların başlangıcına geliyor ve tekrar portb.f0’ı kontrol ediyor. “while(1)” ifadesi ise sonsuz döngüdür. Çünkü while( ) ifadesinin içerisi ‘1’  yapılmıştır. Yani her halükarda şart sağlanıyor anlamına gelir bu. Böylece while ifadesinin şartının bozulmasına imkan tanınmamış olur ve program sonsuz while döngüsüne girer…

Bu uygulamaya ait tüm dosyaları buradan indirebilirsiniz..

İyi Çalışmalar…

yorum
  1. kerem dedi ki:

    Merhaba “portb.f4=0” yazımında “f4” ifadesi standart bi ifademidir heryerde bu şekilde mi kullanılıyor tam anlayamadım.

  2. kerem dedi ki:

    Herhangi bir hata almamış olmama rağmen program çalışmadı bakarak yazdığımda bir hata var sanırım diye sizin vermiş olduğum dosyaları indirdim maalesef oda çalışmadı sizce neden olabilir?

  3. kerem dedi ki:

    hatayı buldum vermiş olduğunuz dosyada şemada butonlardan pic e bağlantı eksik. hallettim program çalıştı.

    • mikrodunya dedi ki:

      Vermiş olduğum isis dosyasında eksiklik vardı. Uyardığınız için teşekkürler, çalışan hali upload edilmiştir.
      İyi çalışmalar…

  4. Ali dedi ki:

    Pıc’li Işık izleyen ve sese yönelen robot yapımı ile ilgili bir çalışmanız var mı ? Var ise link verebilir misiniz.Tam anlatımlı bir şekilde .. Şİmdiden Çok Teşekkürler ..

  5. ferhat dedi ki:

    problem yok teşekkürler

  6. Doğan dedi ki:

    Selam devre çalıştı fakat bir şey dikkatimi çekti. Butonları topraklarken neden 10k gibi bir direnç kullanıyoruz. Toprağa fazla akım verim diğer elemanları etkilememek için mi acaba ? İyi çalışmalar.

    • mikrodunya dedi ki:

      Toprağa vereeğini<z akımın fazla bir önemi olmamakla beraber, butona bastığınızda kaynaktan fazla akım çekilmemesi için 10K kullandım orada. Aslında oradaki dirençlerin değeri çok önemli değil.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s