Busan IT/로봇제어

BCM 라이브러리 PWM LED Dimming

newind2000 2015. 10. 30. 16:25

==================================Outline====================================

BCM 라이브러리

PWM LED Dimming

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

 

p/441

 

BCM 라이브러리

 

주소를 가상화 시키는 이유는 메모리를 효율적으로 사용하기 위해서이다.

‘[그림 16-18] BCM 2835의 버스 주소와 물리 주소의 대응관계에서 MMU가 버스의 주소를 가상화시키는 것을 알 수 있다.

 

핀의 기능이 한 가지 이상인 경우는 핀에 여러 가지 신호가 물려 있고 사용자의 조작에 따라 스위치가 동작하여 원하는 기능을 사용할 수 있다.

 

//‘SPI’는 시리얼로 분류된다.

 

 

우선 BCM라이브러리를 다운로드 받는다. Pi2bcm2836이 가능한 파일을 설치한다.

 

 

기존의 라이브러리 제공 사이트에서 제공하는 최신버전인 1.39버전부터는 bcm2836을 지원한다.

 

아래 링크를 통해서 설치 할 수 있다.

 

http://www.airspayce.com/mikem/bcm2835/bcm2835-1.39.tar.gz

 

ssh를 통해서 터미널로 접근 및 설치 해보도록 한다.

 

설치 절차는 다음과 같다.

 

1. wget을 사용하여 라이브러리 다운로드

 

wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.39.tar.gz


2. 다운받은 파일 압축해제

 

tar xvzf bcm-2835-1.39.tar.gz

3. 압축 해제한 폴더로 이동 후 설정을 적용한다.

 

cd bcm2835-1.39/

./configure

4. 설정이 올바르게 적용 되었는지 확인한다.

make check

 

 

5. 설치한다.

make install

 

 

라즈베리파이2의 경우는 라이브러리를 사용하기 위해 디바이스 트리를 활성화시켜야 한다.





다음 'reboot'명령어를 사용하여 재부팅한다.

 

PWM LED Dimming

 

교재 p/449에 있는 [PWM제어 예제]를 사용하여 PWM 코딩을 한다.

/*** 소스 ***/

[PWM_test.c]


 #include <bcm2835.h>
 #include <stdio.h>

 #define PIN 18
 #define PWM_CHANNEL 0
 #define RANGE       1024

 int main(int argc, char **argv)
 {
     int direction = 1;
     int data = 1;
     if ( 0 == bcm2835_init() )
         return 1;

     bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);
     bcm2835_gpio_write(PIN, LOW);
     bcm2835_delay(1000);

     bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_ALT5);

     bcm2835_pwm_set_clock(BCM2835_PWM_CLOCK_DIVIDER_2);

     bcm2835_pwm_set_mode(PWM_CHANNEL, 11);

     bcm2835_pwm_set_range(0, RANGE);

     while(1)
     {
         if(data == 1)
             direction = 1;
         else if(data == RANGE-1)
             direction = -1;

         data += direction;

         bcm2835_pwm_set_data(PWM_CHANNEL, data);
         bcm2835_delay(20);
     }
     bcm2835_close();
     return 0;
 }



반응형