Facebook RSS Feed
 
.NET Micro Framework: Netduino: Interrupt Port ile Buton Kullanımı
Tarih: 20.10.2013, Platform: .NET MF 4.2, IDE: Visual Studio 2012, Level: 100

Buton ve optik sensörler gibi 1 / 0 mantığıyla çalışan bileşenlerin uygulamaya entegrasyonu Interrupt Port ile sağlanır. Interrupt Port, giriş pininde meydana gelen logic 1 / 0 değişimini izleyerek, istenilen durumlarda interrupt oluşturur. Interrupt oluşumunda uygulama işlemeyi keser, interrupt'a ait event handler çalışır ve istenilen işlemler tamamlandıktan sonra uygulama kaldığı yerden işlemeye devam eder.

Interrupt Port mantığı, masaüstü uygulamalarındaki button click eventi ile çok yakındır. Değişen durum, butonun sanal değil de gerçek olması ve elektriksel birkaç ayrıntıdır.

Interrupt eventi, butona basıldığında, serbest bırakıldığında ya da her iki durumda tetiklenebilir. Grafikte bu durumların aşamalarına gözatabilirsiniz.

-

Hedef 

Interrupt eventlerini gözlemleyeceğimiz bir uygulama geliştireceğiz. Digital 0 butonu onboard LED'i açacak, Digital 1 butonu söndürecek.

Gerekenler

Netduino Plus 2
Breadboard
2x PCB buton
2x 220Ω direnç
6x Jumper wire

Bağlantı Şeması

Digital 0 ve 1 pinlerine birer buton bağlayacağız. Butonlara basıldığında 3.3V, serbest bırakıldığında ise 220Ω pull-down direncinden GND sinyal giriş pinlerine ulaşacak. 

-

Uygulama Kodları

Visual Studio'dan NetduinoInterruptPort adında bir Micro Framework Console Application oluşturun. Proje özelliklerinden SDK versiyonunu Netduino'nuza yüklü versiyon ile aynı olacak şekilde ayarlayın. (4.2) Proje referanslarına Microsoft.SPOT.Hardware.dll, SecretLabs.NETMF.Hardware.dll ve SecretLabs.NETMF.Hardware.NetduinoPlus.dll dosyalarını ekleyin.

Uygulama kodlarımız şöyle olacak.

[C#] Program.cs

using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;

namespace NetduinoInterruptPort
{
    public class Program
    {
        // Onboard LED'e bağlı output port oluştur
        static OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);

        // Digital 0 girişine bağlı interrupt port oluştur
        static InterruptPort ip0 = new InterruptPort(
            Pins.GPIO_PIN_D0, // Digital 0 pini
            true, // Arkdan etkilenmemek için glitch filter
            Port.ResistorMode.PullDown, // Direnç GND'a bağlı
            Port.InterruptMode.InterruptEdgeHigh); // Logic 1'de interrupt

        // Digital 1 girişine bağlı interrupt port oluştur
        static InterruptPort ip1 = new InterruptPort(
            Pins.GPIO_PIN_D1,
            true,
            Port.ResistorMode.PullDown,
            Port.InterruptMode.InterruptEdgeHigh);

        public static void Main()
        {
            // Interrupt Port event handler'larını oluştur
            ip0.OnInterrupt += ip0_OnInterrupt;
            ip1.OnInterrupt += ip1_OnInterrupt;

            // Main thread'i uyut. Uygulama interruptlarda uyanıp işler.
            Thread.Sleep(Timeout.Infinite);
        }

        static void ip0_OnInterrupt(uint data1, uint data2, DateTime time)
        {
            // LED'i yak
            led.Write(true);
        }

        static void ip1_OnInterrupt(uint data1, uint data2, DateTime time)
        {
            // LED'i söndür
            led.Write(false);
        }
    }
}

Uygulamayı çalıştırdığınızda, Digital 0 butonu LED'i yakacak, Digital 1 butonu ise söndürecek.

İpuçları

- Glitch Filter, butona basıldığında meydana gelen ark (kıvılcım) sonucu birkaç kez interrupt oluşumunu engeller. Buton kullanırken True, bazı sensörlerde de False olarak ayarlanmalıdır.
- Port Resistor Mode, direnç GND'a bağlıysa Pull Down, +3.3V'a bağlıysa Pull Up olarak belirtilmelidir. Direnç kullanılmayan durumlarda None olarak belirtilebilir.


Ek Dosya: Belirtilmemiş.
Okunma Sayısı: 1585

comments powered by Disqus
 
Hoşgeldiniz!
Son güncelleme: 25.12.2016
-
Yeni Teknik Yazılar
Latte Panda İncelemesi
Turta IoT HAT İncelemesi
USB Gamepad Kullanımı
GPIO Kullanımı
VEML6075 UV Sensör Kullan...
-
İlgili Gruplar
.NET MF ve Gadgeteer FB Grubu
İst. IoT & Wearables Meet-up
-
 

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.Copyright © 1999 - 2017, Umut Erkal. Bu materyal, "Creative Commons Public Licence" ile sunulmuştur.
Kaynak göstererek ve ücretsiz olarak, aynı şartlar altında paylaşabilir ve kullanabilirsiniz. | Kullanım Sözleşmesi