아래 그림은 AVR에서 SPI 통신을 수행하는데 필요한 SPCR이라는 레지스터이다. SPI통신은 주로 AVR에 연결되어 있는 다른 부품과의 통신을 위해 주로 사용된다. 이때 사용되는 부품들은 SPI 통신이 안정적으로 동작될 수 있는 최대 통신 속도에 대한 규격을 명확히 알려준다. 때로는 그 속도가 AVR CPU의 동작 속도에 비해 많이 낮은 속도가 될 수 있다. 따라서 AVR은 부품 규격에서 제안하는 통신 속도를 맞추기 위하여 여러가지 통신 속도를 설정할 수 있어야 한다. 통신 속도 조절을 위하여 SPCR 레지스터에는 SPR이라는 필드가 있다. SPR은 두개의 비트로 이루어져 있다. SPCR레지스터는 8비트 레지스터이므로 2비트를 SPR로 할당하면 6비트가 남게 된다. SPI통신을 위해서는 SPR과 같은..
푸쉬 버튼 감지 1에서 사용한 예제는 역시 AVR에서만 사용할 수 있는 코드이다. 이를 일반적인 임베디드 프로그램으로 표현해 보도록 하겠다. #include #define PORTB_REG 0x23 #define PUSH_BTN 0x01 #define RED_LED 0x02 struct port { uint8_t pin; uint8_t ddr; uint8_t port; }; volatile struct port *const portb = (void*)PORTB_REG; void setup(void) { portb->ddr = RED_LED; portb->port= (RED_LED | PUSH_BTN); } void loop(void) { if (portb->pin & PUSH_BTN) portb->por..
AVR의 포트핀 출력을 제어하여 두개의 LED를 점멸시키는 방법을 여러가지 예제를 통하여 알아 보았다. 이번 글에서는 포트로 입력되는 신호를 읽어내는 방법에 대해서 알아본다. 이전글에서 사용하였던 회로에서 초록색 LED회로를 들어내고 푸쉬버튼을 넣어보도록 하겠다. 회로도로 표현하면 아래 그림과 같이 된다. 위의 회로를 브레드보드에 꾸미면 아래 그림처럼 된다. 회로도 그림에서 보이는 푸쉬버튼 스위치 'S1'의 한쪽은 PB0에 연결되어 있고, 나머지 한쪽은 GND에 연결되어 있다. 버튼을 누르지 않은 상태에서 PB0에 입력되는 값을 high로 만들고 버튼을 눌렀을때 PB0의 값이 low로 되면 AVR CPU입장에서 1혹은 0의 입력으로 판단할 수 있다. 그렇게 하기 위해서는 PB0에 pull-up 저항을 연..