한정된 자원의 라즈베리파이를 조금이라도 괘적하게 사용하기 위해서 화면을 저해상도로 변경해보고자 한다. 


먼저 터미널에서 다음과 같이 설정 파일을 연다.


sudo nano /boot/config.txt 


이 화일 안에서 코멘트(#) 처리된 것들 중에서 다음 항목들을 활성화 시킨다.


hdmi_force_hotplug = 1

hdmi_group = 2

hdmi_mode = N # 여기서 해상도를 설정한다

hdmi_drive = 1 


위의 명령들 중에서 원하는 해상도에 맞추어 N값을 설정해 준 후 저장하고 빠져나와서 재부팅해주면 된다. 예를 들어 'hdmi_mode = 16' 이라고 쓰면 1024x768@60Hz 로 해상도가 조절된다. (아래 목록표 참조.)


자세한 설정값은 http://elinux.org/RPi_config.txt 에 있다.


hdmi_group=2 (DMT) 인 경우:

주의 :최대 해상도는 1920x1200 @60 Hz (reduced blanking) 이다.

hdmi_mode=1    640x350    85 Hz
hdmi_mode=2    640x400    85 Hz
hdmi_mode=3    720x400    85 Hz
hdmi_mode=4    640x480    60 Hz
hdmi_mode=5    640x480    72 Hz
hdmi_mode=6    640x480    75 Hz
hdmi_mode=7    640x480    85 Hz
hdmi_mode=8    800x600    56 Hz
hdmi_mode=9    800x600    60 Hz
hdmi_mode=10   800x600    72 Hz
hdmi_mode=11   800x600    75 Hz
hdmi_mode=12   800x600    85 Hz
hdmi_mode=13   800x600   120 Hz
hdmi_mode=14   848x480    60 Hz
hdmi_mode=15   1024x768   43 Hz  DO NOT USE
hdmi_mode=16   1024x768   60 Hz
hdmi_mode=17   1024x768   70 Hz
hdmi_mode=18   1024x768   75 Hz
hdmi_mode=19   1024x768   85 Hz
hdmi_mode=20   1024x768  120 Hz
hdmi_mode=21   1152x864   75 Hz
hdmi_mode=22   1280x768          Reduced blanking
hdmi_mode=23   1280x768   60 Hz
hdmi_mode=24   1280x768   75 Hz
hdmi_mode=25   1280x768   85 Hz
hdmi_mode=26   1280x768  120 Hz  Reduced blanking
hdmi_mode=27   1280x800          Reduced blanking
hdmi_mode=28   1280x800   60 Hz  
hdmi_mode=29   1280x800   75 Hz  
hdmi_mode=30   1280x800   85 Hz  
hdmi_mode=31   1280x800  120 Hz  Reduced blanking
hdmi_mode=32   1280x960   60 Hz  
hdmi_mode=33   1280x960   85 Hz  
hdmi_mode=34   1280x960  120 Hz  Reduced blanking
hdmi_mode=35   1280x1024  60 Hz  
hdmi_mode=36   1280x1024  75 Hz  
hdmi_mode=37   1280x1024  85 Hz  
hdmi_mode=38   1280x1024 120 Hz  Reduced blanking
hdmi_mode=39   1360x768   60 Hz  
hdmi_mode=40   1360x768  120 Hz  Reduced blanking
hdmi_mode=41   1400x1050         Reduced blanking
hdmi_mode=42   1400x1050  60 Hz  
hdmi_mode=43   1400x1050  75 Hz  
hdmi_mode=44   1400x1050  85 Hz  
hdmi_mode=45   1400x1050 120 Hz  Reduced blanking
hdmi_mode=46   1440x900          Reduced blanking
hdmi_mode=47   1440x900   60 Hz  
hdmi_mode=48   1440x900   75 Hz  
hdmi_mode=49   1440x900   85 Hz  
hdmi_mode=50   1440x900  120 Hz  Reduced blanking
hdmi_mode=51   1600x1200  60 Hz  
hdmi_mode=52   1600x1200  65 Hz  
hdmi_mode=53   1600x1200  70 Hz  
hdmi_mode=54   1600x1200  75 Hz  
hdmi_mode=55   1600x1200  85 Hz  
hdmi_mode=56   1600x1200 120 Hz  Reduced blanking
hdmi_mode=57   1680x1050         Reduced blanking
hdmi_mode=58   1680x1050  60 Hz  
hdmi_mode=59   1680x1050  75 Hz  
hdmi_mode=60   1680x1050  85 Hz  
hdmi_mode=61   1680x1050 120 Hz  Reduced blanking
hdmi_mode=62   1792x1344  60 Hz  
hdmi_mode=63   1792x1344  75 Hz  
hdmi_mode=64   1792x1344 120 Hz  Reduced blanking
hdmi_mode=65   1856x1392  60 Hz  
hdmi_mode=66   1856x1392  75 Hz  
hdmi_mode=67   1856x1392 120 Hz  Reduced blanking
hdmi_mode=68   1920x1200         Reduced blanking
hdmi_mode=69   1920x1200  60 Hz  
hdmi_mode=70   1920x1200  75 Hz  
hdmi_mode=71   1920x1200  85 Hz  
hdmi_mode=72   1920x1200 120 Hz  Reduced blanking
hdmi_mode=73   1920x1440  60 Hz  
hdmi_mode=74   1920x1440  75 Hz  
hdmi_mode=75   1920x1440 120 Hz  Reduced blanking
hdmi_mode=76   2560x1600         Reduced blanking
hdmi_mode=77   2560x1600  60 Hz  
hdmi_mode=78   2560x1600  75 Hz  
hdmi_mode=79   2560x1600  85 Hz  
hdmi_mode=80   2560x1600 120 Hz  Reduced blanking
hdmi_mode=81   1366x768   60 Hz  
hdmi_mode=82   1080p      60 Hz  
hdmi_mode=83   1600x900          Reduced blanking
hdmi_mode=84   2048x1152         Reduced blanking
hdmi_mode=85   720p       60 Hz  
hdmi_mode=86   1366x768          Reduced blanking

[#00076]

Posted by 살레시오
,

  제목이 좀 거창하긴 한데 파이썬은 컴퓨팅 환경의 첫 번째로 영향력 있는 언어이기도 하지만 마이컴 보드에서도 편리하게 하드웨어를 제어할 수 있는 언어로 점차 그 영역을 넓혀가고 있다. 하드웨어 제어는 닥치고 C/C++ ... 이라는 공식 비슷한 것이 이제는 변하고 있다.


  그 선두에 있는 기기가 바로 잘 알려진 라즈베리파이(raspberry pi)이다. 이 35불 짜리 원보드 리눅스 컴퓨터는 GPIO핀이 내장되어 있고 이것을 제어할 수 있는 파이썬 모듈이 잘 개발되어 있다. C/C++ 몰라도 LED를 깜박이거나 모터를 돌리는 등의 일을 파이썬 코드로 얼마든지 수행할 수 있다.



최근에 출시된 라즈베리 파이 2



본격적으로 파이썬만으로 제어가능한 마이크로 콘트롤러 보드인 micropython 이라는 보드도 있다. 이 보드는 SD카드에 저장된 파이썬 프로그램을 읽어들여서 수행한다. 파이썬의 간결한 문법을 이용하여 다양한 하드웨어를 제어할 수 있다.




좀 더 최근에는 영국의 BBC (알다시피 방송국이다..)에서 어린 학생들의 코딩 능력을 길러주기 위해서 개발하여 보급하고 있는 MicroBit 이라는 보드도 있다.




왜 방송국에서 이런 일을 하는지 알다가도 모르겠지만 어쨋든 이 보드가 지원하는 세 가지 주력 언어 중 하나도 파이썬이다. (이렇게 예를 들고 보니 우연히도 세 가지 보드 모두 영국에서 만들어진 것들이다.)


Posted by 살레시오
,

.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 살레시오
,

udoo neo 라는 보드가 킥스타터에서 캠페인을 진행 중이다.



라즈베리 같은 리눅스 보드인데 아두이노 호환 외부핀을 가지고 있으며 와이파이, 블루투스, 9축 가속센서를 내장하면서 $49불 정도의 가격에 판매될 거라고 한다.


개인적으로 이러한 보드들이 많이 쓰일거라 예상하는데 라즈베리파이를 쓰다보면 아두이노의 기능들이 아쉽기 때문이다.


이와 비슷한 보드로 pcduino 시리즈가 잘 알려져 있는데 있는데 이미 시판 중이다. 아래 그림은 pcduino nano 보드이다.



이 보드도 리눅스 마이컴인데 아두이노 기능과 호환 핀들을 내장하고 있다.


아두이노 호환은 아니지만 아두이노의 모든 기능을 웃도는 내장 하드웨어를 가진 리눅스 보드도 있다. 바로 beaglebone black 이다.


보면 알겠지만 GPIO핀이 넘치도록 많다. 그리고 ADC, PWM, SPI, I2C 등 아두이노의 기능들을 대부분 가지고 있다. 단점은 가격이 $65 정도로 다른 보드들보다 조금 더 비싸다는 점이다.

Posted by 살레시오
,