.net micro framework 에 InterruptPort 클래스가 있는데 이것을 이용해서 인터럽트를 처리한다. 이 클래스는 Microsoft.SPOT.Hardware 네임스페이스에 있으며 레퍼런스는 아래와 같다.



먼저 생성자를 살펴보면


     public InterruptPort

     (

          Cpu.Pin portId,                   // (1)핀을 지정한다.

          bool glitchFilter,                  // (2)debouncing 필터 관련 지정인 듯

          Port.ResistorMode resistor, // (3)Disabled/PullDown/PullUp 저항을 연결할 것인가

          Port.InterruptMode interrupt // (4)인터럽트 발생 시점 지정

     )


  여기서 (2)번 항의 글리치는 물리적인 버튼을 연결했을 경우 접점이 떨어지거나 붙는 순간에 발생하는 노이즈(bounce 라고도 한다)인데 이 잡음으로 인해서 의도하지 않게 인터럽트가 여러 번 발생될 수도 있다. 하드웨어 회로적으로 이러한 잡음을 제거할 수도 있고 여기에서 처럼 소프트웨어로 필터링을 하도록 설정할 수 있다. (4)번 항에서는 인터럽트 발생시점을 지정하는데 다음과 같으며 이름으로 충분히 무슨 의미인지 예상할 수 있다.


  • InterruptNone
  • InterruptEdgeLow
  • InterruptEdgeHigh
  • InterruptEdgeBoth
  • InterruptEdgeLevelHigh
  • InterruptEdgeLevelLow


프로퍼티는 다음과 같은 것들이 있고 생성자에서 지정했던 옵션들을 읽거나 변경할 수 있다.


  • Id (get)
  • Interrupt (get/set)
  • Resistor (get/set)
  • GlitchFilter (get/set)


메쏘드는 하나인데 이것에 += 연산자를 이용하여 이벤트 처리 함수를 지정하면 된다.


  • OnInterrupt


예제프로그램은 다음과 같다.


----------------------------------------------------------------------------


using System;

using System.Threading;

using Microsoft.SPOT;

using Microsoft.SPOT.Hardware;

namespace InterruptPortApplication

{

     public class Program

     {

          public static void Main()

          { 

               InterruptPort button = new InterruptPort(Cpu.Pin.GPIO_Pin3, true,                                    Port.ResistorMode.PullDown, Port.InterruptMode.InterruptEdgeLow);

               OnInterrupt += new GPIOInterruptEventHandler(button_OnInterrupt);

                while (true)

               { // The main thread can now essentially sleep // forever. 

                    Thread.Sleep(60 * 1000);

                    Debug.Print("House Keeping Ping...");

               }

          }

          

          static void button_OnInterrupt(Cpu.Pin port, bool state, TimeSpan time)

          {

               Debug.Print("The button is pressed");

          }

     }

}

----------------------------------------------------------------------------


Posted by 살레시오
,

  닷넷 마이크로 프레임워크(.Net Micro Framework, 이하 DNMF)는 닷넷프레임워크에서 빈약한 자원의 프로세서 환경에서 구동할 최소한의 기능을 추려놓은 것이라고 할 수 있다.


  첫 번째 프로그램을 넷두이노 없이 작성해 보았다. 먼저 Visual Studio 2010 express (인터넷에서 쉽게 다운 받을 수 있음. VS2012는 지원 안 됨.)를 설치한 후 DNMF 4.2와 넷두이노SDK를 설치해야 한다. 튜토리얼은 아래 동영상에 있다.




  아직 그 구조는 다 파악하지 못했지만 생각보다 프로그래밍이 간단하다. 무엇보다 자동완성기능이 완벽하게 지원되며 일일이 레퍼런스를 찾아볼 필요가 없기 때문데 코딩 효율이 굉장히 높다. IO포트는 물론이고 PWN, ADC, 인터럽트 등이 쉽게 구현이 됨을 검색을 통해서 알 수 있다.


Posted by 살레시오
,

  '아두이노'로 검색하다 보면 여기서 파생된 보드들 중에 넷두이노(netduino)라는게 있다. 막연히 이름만 보고 네트웍기능이 추가된 아두이노일 것으로 짐작했었는데 그게 아니었다.


  바로 .NET 기능을 이용할 수 있는 보드인데 아두이노와는 핀배열은 동일하지만 개발환경이나 실행환경이 완전히 다르다. 코딩에 아두이노의 IDE를 쓰지 않고 Visual Studio를 개발도구로 사용하며 .Net Micro Framework 환경에서 실행된다. 마이크로소프트가 이런 곳에까지 발을 담그고 있었을 줄이야.



  위 표를 보면 알겠지만 성능도 일반 아두이노보다 훨씬 높은 편이고 무엇보다도 ,NET Micro Framework 를 이용할 수 있는데 닷넷 환경에 익숙하고 좀 더 고성능의 제어프로세서가 필요한 사용자라면 이것이 훌륭한 아두이노의 대안일 것 같다. (하지만 단순히 클럭이 높은 고성능 프로세서라고 하더라도 framework 위에서 실행되는 것이라서 native code로 돌아가는 아두이노 보드에 비해서 성능은 훨씬 높지 않을 것 같은 짐작은 든다.)


  개발 환경은 잠깐 훑어 보았는데 아두이노하고 공통점은 핀배열하고 그 기능 정도이고 그 외에는 모두 다 다른 것 같다. 따라서 기존에 개발된 아두이노 shield 를 거의 대부분 쓸 수 있다는 장점에 닷넷 기반의 개발 환경을 사용할 수 있다는 큰 잇점을 가지는 것이다.


  사실 아두이노 IDE를 사용할 때 제일 아쉬운게 바로 자동완성 기능인데 비주얼스튜디오는 이것을 완벽하게 지원하고 Express버젼은 무료로 사용할 수 있으니 이 보드만 있다면 바로 개발을 시작할 수 있을 것 같다. 메모리 관리에 신경쓸 필요 없이 훨씬 고수준의 프로그래밍이 가능하다.


다음은 최신 보드인 netduino plus 2 보드의 핀아웃 다이어그램이다.



아두이노 우노와 핀배열이 같다는 것을 알 수 있다.

[#00062]


Posted by 살레시오
,