개발/아두이노-Arduino 5

SPI 통신

SPI 통신 SPI 통신은 Serial Peripheral Interface의 약자로 시리얼 통신 중 하나입니다. 이 SPI은 여러 가지가 있지만 기본적인 연결은 다음과 같습니다. 마스터 기기와 슬레이브 기기간의 통신의 연결입니다. 여기에 사용되는 MISO, MOSI, SCK, CS 핀은 기기나 제조사에 따라 다른 이름으로 불립니다. 이는 헷갈리기 쉽기 때문에 정리해둔 글을 참조해주시면 좋습니다. 일단 많이 사용되는 이름인 위 이름을 사용하겠습니다. 간단하게 핀을 알아보면 다음과 같습니다. MOSI (Master Out, Slave In) : 데이터를 슬레이브에서 받고, 마스터에서 나가는 핀 MISO (Master In, Slave Out) : 데이터를 마스터에서 받고, 슬레이브에서 나가는 핀 CS (C..

[SPI/TFT...] 디스플레이에 텍스트, 문자가 출력되는 원리

[SPI/TFT...] 디스플레이에 텍스트, 문자가 출력되는 원리 SPI를 사용하는 디스플레이는 여럿이 있습니다. ST7789 시리즈나 SSD1306가 있습니다. 이 디스플레이에서 텍스트(영어, 한글, 라틴, 유니코드 등)를 출력하는 원리는 동일합니다. 원리는 생각보다 간단합니다. 도트 하나하나 찍어서 연속적으로 출력합니다. 이는 문자뿐만 아니라 비트맵도 해당됩니다. 예를 들어 폰트의 width, height가 각각 24, 24로 설정된 폰트가 있다면, 한글 '가'는 다음과 같이 표현됩니다. 가로세로 모두 24픽셀로 특정 픽셀만 표시를 하여 '가'를 표시합니다. 그리고 한글 '가'를 표현하기 위해서는 아마 다음과 같은 코드들이 필요할겁니다. (아래 코드는 원리 이해의 예시로만 참고해주세요) // 가로 2..

[에러/arduino] avrdude: stk500_recv(): programmer is not responding

[에러/arduino] avrdude: stk500_recv(): programmer is not responding 아두이노 나노를 사용하다가 이런 에러 문구가 발생했습니다. 문구의 뜻으로는 프로그래머가 반응하지 않는다인데 이는 아두이노가 반응하지 않는다는 말입니다. 해결방법으로는 2가지가 있습니다. RX, TX 핀에 연결된 부분 확인 아두이노 보드에는 RX와 TX가 있습니다. 가장 많이 사용하는 아두이노 우노와 나노에는 0번 핀과 1번 핀이 Rx, Tx 역할을 합니다. 이 핀에 선이나 다른 장치들이 연결되어 있으면, 업로드하는 과정이 진행되지 않고, 에러를 띄우게 됩니다. 이 에러가 프로그래머가 반응하지 않는다는 에러입니다. 이 경우에는 연결된 선을 잠깐 제거하고 업로드가 완료되면 다시 연결하는 방법..

I2C와 SPI 통신, MOSI, MISO, SCL, SS, SDA 등의 핀 정리

I2C와 SPI 통신 I2C와 SPI 통신은 유사하지만 다른 통신 방법입니다. 따라서 소형 TFT 디스플레이들에 보면 SPI와 I2C가 겸용으로 되어 있는 부품들이 많습니다. I2C와 SPI를 겸용으로 사용하다 보니 핀 이름과 관련된 것부터 혼동이 있어서 정리하는 김에 글을 작성합니다. ※ 현재 SPI, I2C에서 사용되는 단어인 Master, Slave는 Controller(컨트롤러), Peripheral(주변기기)로 변경해서 사용하는걸 권장하는 추세이지만 여기에서는 기존에 사용했던 Master, Slave를 사용합니다. 현재 많은 부품들이 Controller, Peripheral보다는 Mastser, slave로 많이 사용되기 때문입니다. SPI 통신, Serial Peripheral Interfac..

[에러/arduino] expected '=', ',', ';', 'asm' or 'attribute' before 'PROGMEM' arduino

expected '=', ',', ';', 'asm' or 'attribute' before 'PROGMEM' arduino 아두이노를 작업하면서 혹은 C/C++을 작업하면서 종종 PROGMEM을 사용할 때가 있습니다. 이때 여러 파일에서 한 번에 작업하다 보면, 위와 같은 에러를 띄우기도 합니다. 저의 경우에는 pgmspace.h를 찾지 못해서 발생하는 에러였습니다. #ifdef ARDUINO_ARCH_AVR #include #else #include #endif 위와 같이 변경해 주면 에러 없이 진행됩니다.