Posts

Showing posts from 2024

LoRa 모듈 E22-900T22S Breakout Board 설계 2

Image
지난번 설계 에서 두 가지 업데이트 사항이 있다. 첫 번째로 3.3V 로 로직 컨버터를 거치지 않고 직접 통신할수 있는 포트를 구성하였다.  이 포트를 통해 3.3V 동작의 MCU를 사용할때 좀 더 빠르게 회로를 구성  할수 있을것으로 기대한다. 두 번째로 동작 전압 레벨이 서로 다른 MCU 와 Lora 모듈이 통신할때 사용할 기준전압을 직접 인가 할 수 있도록 하였다. 보드에는 위 와같은 점퍼가 주어지는데 3.3V 나 5V 로 점프 시키지 않을 경우 VREF 핀에 사용할 소스전압을 직접 인가해 주어야한다. 특수한 경우가 아니라면 Vref를 사용하는일은 없을것 같다. 위사 진들은 이번에 제작한 테스트 모듈이다.  왼쪽은 E22-900T22S 모듈이고 오른쪽은 ATmega328P/PB 3.3V 8Mhz 보드를 준비했다. 오른쪽의 보드는 ATmega328P/PB 를 모두 장착하여 사용할 수 있도록 설계했다. E22-900T22S 보드의 전체 회로는 다음과 같다. 동작 전압 레벨이 서로 다른 장치와 통신 할 수 있도록 레벨 컨버터를 추가 하였고, 핀 헤더를 장착하여 다른 MCU 보드와 통신하거나 점퍼를 수정해서 USB 시리얼 통신을 할수 있도록 했다. 모듈의 테스트는 mischianti의 E22 라이브러리 를 사용했다. 정리가 아주 잘 되어있는 라이브러리로 생각된다. 아래 코드는 라이브러리에 포함된 시리얼 입력을 LoRa 통신으로 전송하는 예제이다. Lora ATmega328p AUX D3 RX D4 TX D5 M1 D6/GND M0 D7/GND 송신측 코드 #include "Arduino.h" #include "LoRa_E22.h" LoRa_E22 e22ttl(4, 5, 3, 7, 6); void setup() { Serial.begin(9600); delay(500); // Startup all pins and UART e22ttl.begin(); Serial.println(&q

LoRa 모듈 E22-900T22S Breakout Board 설계 2

Image
지난번 설계 에서 두 가지 업데이트 사항이 있다. 첫 번째로 3.3V 로 로직 컨버터를 거치지 않고 직접 통신할수 있는 포트를 구성하였다.  이 포트를 통해 3.3V 동작의 MCU를 사용할때 좀 더 빠르게 회로를 구성  할수 있을것으로 기대한다. 두 번째로 동작 전압 레벨이 서로 다른 MCU 와 Lora 모듈이 통신할때 사용할 기준전압을 직접 인가 할 수 있도록 하였다. 보드에는 위 와같은 점퍼가 주어지는데 3.3V 나 5V 로 점프 시키지 않을 경우 VREF 핀에 사용할 소스전압을 직접 인가해 주어야한다. 특수한 경우가 아니라면 Vref를 사용하는일은 없을것 같다. 위사 진들은 이번에 제작한 테스트 모듈이다.  왼쪽은 E22-900T22S 모듈이고 오른쪽은 ATmega328P/PB 3.3V 8Mhz 보드를 준비했다. 오른쪽의 보드는 ATmega328P/PB 를 모두 장착하여 사용할 수 있도록 설계했다. E22-900T22S 보드의 전체 회로는 다음과 같다. 동작 전압 레벨이 서로 다른 장치와 통신 할 수 있도록 레벨 컨버터를 추가 하였고, 핀 헤더를 장착하여 다른 MCU 보드와 통신하거나 점퍼를 수정해서 USB 시리얼 통신을 할수 있도록 했다. 모듈의 테스트는 mischianti의 E22 라이브러리 를 사용했다. 정리가 아주 잘 되어있는 라이브러리로 생각된다. 아래 코드는 라이브러리에 포함된 시리얼 입력을 LoRa 통신으로 전송하는 예제이다. Lora ATmega328p AUX D3 RX D4 TX D5 M1 D6/GND M0 D7/GND 송신측 코드 #include "Arduino.h" #include "LoRa_E22.h" LoRa_E22 e22ttl(4, 5, 3, 7, 6); void setup() { Serial.begin(9600); delay(500); // Startup all pins and UART e22ttl.begin(); Serial.println(&q

짱구개미 사육장에 위치한 브리기테 동상

Image
  지난주 부터 흙 사육을 시작했다. 짱구개미 군체의 성장은 어느순간부터 가속도가 붙은 것 처럼 불어나기 시작했다.  사육장을 계속 만들어서 붙여주었지만 먹이탐사장 까지 넘어온 개미들은 새로 붙어준 사육장으로 좀 처럼 들어가려 하지 않았다. 사용 패턴으로 보니 이미 점령한 먹이 탐사장을 확장된 집의 일부로 여기고 새로 붙여준 사육장을 쓰레기장 정도로 여기는것 같았다. 첫 사육장은 초경 석고를 사용해서 만들었다. 만드는 방법은 어렵지 않다. 먼저 적당한 틀을 구해서 내부에 지점토로 개미굴 모양을 잡고 그위로 잘 배합한 초경 석고 반죽 물을 부어주면 된다. 아무리 초경 석고라해도 물이 많이들어가면 물러지니 주의가 필요하다. 석고 사육장이 회색인 이유는 따로 색칠을 한건 아니고 만들때 약간의 숯 가루 파우더를 섞어서 시멘트 느낌을 주려고 했다. 숯 가루가 제대로 섞이지 않아서 얼룩이 좀 생겼지만 나름대로 멋이라고 생각했다. 취향으로 넣은거니 반드시 넣을 필요는 없다. 그러나 이 집은 곳 폐기하였다. 사육장을 담은 틀이 내구성이 약한것도 있었지만 석고가 굳을 때 팽창해서 그런지 깨진부분이 있었던것 같고 짱구 개미들이 조금씩 그 틈에 씨앗을 쑤셔 넣으면서 조금씩 벌려가며 깨진 틈을 공략해 탈출을 하기 시작한것이다. 그리고 작년 초 두 번째 사육장을 만들어주었다. 이 사육장은 튼튼하고 신뢰도가 높아 가장 오랜기간 사용한 석고 사육장이며, 흙 사육장을 사용하기 전까지 동일한 방식으로 여러번 만들어서 집을 확장 할 때 사용하였다. 위 사진은 개미들이 가득하지만 처음에 이 사육장으로 이사 할 때 까지만 해도 이렇게 많지는 않았다. 마찬가지록 초경 석고와 참 숯 가루를 섞어서 만든 사육장으로 락앤락 반찬통을 틀로 이용해 만들었다. 사진에 보면 적색 투명 아크릴 판을 나사로 고정 했는데 석고에 나사를 직접 체결한건 아니고 안에 육각 스페이서를 먼저 넣고 석고를 부어서 고정 시켰기 때문에 아크릴이 튼튼하게 빈틈없이 고정이 되었다. 측면에는 10mm 드릴 비트를 사용해 출입구를 만들

마음에 안드는 Logitech G604 고무 커버 3D 프린트

Image
  마우스에 문제가 생기면 스트레스다. 3년전 보조 마우스로 G604을 구매했다. 보조 마우스로 구매한 이유는 7년정도 사용했던 MX Master의 배터리 사용시간이 너무 짧아졌기 때문이다. G604의 문제는 사용한지 2년정도 부터 발생했는데 오른쪽 버튼이 더블클릭 증세를 보이기 시작했고 고무 부분이 지우개 처럼 밀려서 가루가 되어 떨어져 나가기 시작했다.  문제는 그립감을 저해하는 고무부분이다. 요즘은 G502 X LIGHTSPEED를 사용하고 있는데 블루투스 연결이 없는것은 생각보다 큰 단점이 되었다.  전용 USB 동글을 옮겨가면 사용하는건 생각보다 불편했다. MX Master 가 후속 제품도 많이 나왔던데 그거나 살걸 왜 이런걸 샀는지 모르겠다. MX Master는 세월의 흔적이 고스란히 남아있다.  반자동 휠에있던 커버는 닳아 없어졌고 엄지 버튼의 커버도 구멍이 생겼지만 동작은 잘 된다. USB 충전단자가 micro 5핀 배터리 수명이 거의 다 된 것 만 빼면 기능적으로 크게 고장인 부분은 없다.  놀랍게도 지금까지 로지텍 제품을 여럿 사용해봤지만 이렇게 까지 잔 고장없이 터프하게 사용한 제품은 MX Master가 처음이다. 수명이 다 된 배터리를 교체 해주면 지금도 현역처럼 쓸 수 있겠지만 문제는 USB 단자 타입이다.  작년까지만 해도 직장에서 사용하고 있었지만 주변기기중에 micro 5핀 케이블을 사용하는 제품은 MX Master만  남아서 그런지 케이블을 자꾸만 잃어버리고 새로 구매하고 반복하게 되면서 이제는 더 이상 사용하지 않고있다. 다시 G604 이야기로 돌아와서 아무튼 G604의 경우 빠른 블루투스 연결 전환도 가능하고 고무부분만 어떻게 해주면 아직은 쓸만 한 녀석이다. 이 고무 커버부분을 3D 프린터로 해결 할 수 없을까 하고 싱기버스에 검색을 해봤더니 의외로 자료가 있었다. 자료를 받아서 확인해보니 G604를 3D 스캐너로 카피해서 만든 자료이고 기대한 것 보다 괜찮았다. 실제로 프린트해 보면 결과가 어떨지 모르겠지만 일단 집에있는

RP2040 개발보드 설계 3

Image
RP2040 개발보드 설계 하면서 모듈형식으로 사용할 수 있는 리튬 충방전 모듈을 디자인 해보았다. 모듈의 설계는 위 이미지에서도 알 수 있겠지만 18650/21700 사이즈의 리튬 이온 배터리를 사용하는 것을 고려하고 있다. 설계 목표는 개발보드가 USB 로 PC 와 연결된 상태에서 리튬 배터리 모듈이 연결/제거 되어도 동작을 유지하는것이고, 아두이노 보드의 쉴드처럼 쓸 수 있도록 하는것이 목적이다. 전원소스 동작은 개발보드에 연결시 Power Path 선택 회로에 의해 배터리 전원 입력시 USB 입력전원은 리튬 배터리의 충전 전압으로 사용되고 리튬 방전회로의 출력전압 소스를 개발보드의 주 전원 소스로 사용하도록 설계하였다. 아래 회로도는 개발보드의 각 부분을 가독성 있게 계층도로 구분하여 작성하였다. 계층도를 사용하여 설계하면 각 기능의 모듈화도 편하고 제품의 기능 파악도 빨라진다. 간단한 회로에서 시작한 제품이라도 여러 기능들이 붙기 시작하면 거대해 지기 마련인데 그렇게 복잡해진 회로도를 다른사람이 보고 분석해서 리뷰하기란 쉽지 않은 일이다.  프로젝트에 계층 구조를 적용하면 디자인이 거대한 회로도에서 큰 효과를 발휘 할 수 있지만 단순한 디자인 일 지라도 여러 시트에 나누어 디자인 할 경우 더 쉽게 이해할 수 있게되는건 마찬가지다. 무슨 말이하고 싶은 것이냐 하면 디자인이 특별히 복잡하지 않더라도 여러 시트에 걸쳐 구성하면 이점이 있을 수 있다는말이다. KiCad 에서는 회로설계에 사용된 모든 시트목록은 왼쪽의 계층구조 목록에서 확인할 수 있고 시트를 더블클릭하게 되면 해당 시트로 이동하게 되며 구체적인 설계를 확인 할 수 있다. 개념적으로 간단한 기능일지라도 실제 설계를 해보면 어려울때가 때가 있다.  그럴때 계층 구조를 적용해 필요한 부분만 놓고 보면 생각보다 쉽게 풀어나갈 수 있는 경우도 있다.

7년차 장성한 씨발아 레몬나무

Image
2017년 6월  에 싹을 틔운 레몬 나무가 7년간 아주 많이 자랐다. 이걸 심는다고 자랄까 하는 호기심으로 시작한것이 어쩌다 보니 계속 키우게 되었다.  그러다 최근에 너무 커진 레몬 나무를 배란다로 옮겨주었다.  사진으로 봐서는 실감이 날지 모르겠지만 170cm 를 넘어 왠만한 여성의 키보다 커졌다. 알고있는 사람들도 있겠지만 씨앗을 발아하여 심은 레몬나무는 꽃과 열매를 볼수 없다고 생각해야한다. 씨앗으로 꽃과 열매를 보겠다는건 너무나 막연하다못해 환상에 가까운걸지도 모른다. 이 나무는 유주나무라고 하는데 꽃과 열매가 자주 열리는 편이다.  열매 크기는 금귤이랑 비슷하고 맛은 많이 시다.  꽃이 피면 그 주변에 꽃 향기가 은은하게 퍼진다. 꽃과 열매를 보려는 목적이면 이런 나무를 구매해서 기르는 것이 맞다. 레몬 나무는 한번 고비가 있었다. 4년전 겨울이였는데 아마 너무 추웠던걸지도 모른다. 그 해 여름이 지나고 점점 성장이 더뎌지고 벌레도 많이 생기고 잎도 많이 떨어졌다. 드디어 죽는구나 생각하고 치울 준비를 했지만 작년 여름에 보니 부활을 해버렸다.  나무의 줄기도 기둥이라고 불러도 될정도로 호스 둘레 만큼 두꺼워 졌다.  자란지 얼마 안된 개체면 몰라도 어느정도 크기까지 자란 식물은 쉽게 죽지 않는다는걸 알게되었다.  나무의 생명력은 생각보다 강했다. 오랜만에 샤워좀 시켜줄까 하는 마음에 살펴보던 중 나뭇가지 마디마다 자라난 거대한 가시들을 발견했다.  이 가시들은 자칫하면 치명상을 입을 정도로 뾰족하고 무시무시한 사이즈를 자랑한다. 원래 이정도로 크게 자라지는 않았는데 잎의 사이즈도 그렇고 모든 부분이 거대해 지고 있다.  갑자기 이 녀석 장래가 기대가 되기 시작했다. 혹시나 화분 주변에 뿌리파리나 기타 잡 벌레로 고민이 있다면 대유 총진싹 제품을 추천한다. 뿌리 파리 덕분에 다양한 살충 제품들을 사용해봤지만 대유 총진싹이 가장 확실한 효과를 보여주었다.  화분에 대유 총진싹 몇 스쿱 떠주고 물만 충분히 주고 기다리면 벌레들의 대가 끊기게된다. 

LoRa 모듈 E22-900T22S Breakout Board 설계 1

Image
E22-900T22S 제품을 위한 Breakout Board 를 설계해 보았다.  한국의 경우 LoRa 모듈을 사용 하려면 제품이 LBT 기능을 사용할 수 있어야하며 주파수 대역은 920.9 ~ 923.3MHz 을 사용하도록 되어있고 Tx Power 최대 값의 경우 End-Device는 10dBm(10mW), Gateway 의 경우 23dBm(200mW) 까지 허용하는 것을 알수있다. 별도 신고 없이 개설하여 사용할 수 있는 무선 통신 기술이라도 국가별로 사용가능한 주파수나 송신 출력이 상이하기 때문에 모듈 구매 및 사용시 전파법을 위반하지 않도록 주의가 필요하다. 사용가능한 주파수 채널 정보는 아래링크에서 확인가능하다. KR920 - LoRaWAN LoRa Regional Parameter 1.0.4   회로부분은 나에게 필요한 부분을 중점으로 설계하였다. 이 모듈의 IO 들은 3.3V 의 동작 레벨을 갖고 있기 때문에 다른 동작 전압 레벨의 MCU와 호환성을 위해 레벨 시프터 회로가 요구되었다. 기본적으로 모든 핀은 3.3V 로 풀업 하였으며, 사용 환경에 따라 UART 통신과 LoRa 모듈의 동작 모드를 점퍼로 수정할 수 있도록하였다. USB 의 경우 C 타입을 사용하였고 CC 저항기를 배치하였다. 안테나는 함께 판매되는 U.FL 안테나를 사용할 것이다.  만약 남는 SMA 규격의 안테나가 있다면 SMA 단자를 구성해서 사용하는 방법도 있다. LoRa 모듈의 동작모드는 M0, M1 점퍼를 사용해 변경이 가능하다. 물론 MCU 로 제어하는 것도 가능하다. AUX 는 LoRa 모듈의 상태를 알려주는 핀이다. 모듈의 스탠바이 상태나 송신, 수신의 동작 상태를 피드백 받을수 있다. 제조사에서 권장하는 회로 설계는 다음과 같다. NRST 핀은 모듈을 리셋할 수 있는 핀으로 3.3V 풀업을 권장하고 있다. 라즈베리 파이 Hat으로 나온 모듈이나 기타 모듈용 쉴드에서는 아무것도 연결하지 않고 놔두는 설계가 대부분으로 확인되었다. E22-900T22S의 데이터 시트에서

Lenovo ThinkPad OneLink Pro 알아보기

Image
10년전 Lenovo ThinkPad 에 사용하던 전용 Dock 이다. 몇년 전 ThinkPad 노트북이 고장나면서 애물단지가 되었다. 호환되는 제품도 없고 중고 판매도 쉽지 않을거라 생각한다.  다음은 이제품의 I/O 구성이다.  이 당시만 해도 USB C 나 Thunderbolt 는 대중적이지 않았고 다음과 같은 독특한 규격의 제품이 아직 많이 남아있던 시절이다. 이 부분을 USB C 로 변경하는 것이 가능할지 알아보려고 한다. 이 커넥터의 핀맵에 대한 자료는 아래 링크에서 찾을수 있었다. Lenovo ThinkPad OneLink docking port pinout diagram @ pinoutguide.com 위 사진에서 빨간 색 동그라미 부분의 핀맵은 다음과 같을것으로 생각된다. 핀맵을 보면 ML_Lane 이라는 부분을 찾아 볼수 있다.  이 핀들은 DisplayPort 를 위한것으로 보통의 경우라면 4개 레인 구성이지만 이 제품은 2개 레인 으로 구성되어있다.  USB 의 경우 총 3개의 USB 컨트롤러 칩셋이 사용되었다. 두 개의 USB3.0(VL812-Q7) 칩셋과 한 개의 USB2.0(FE1.1s) 칩셋이 사용되었으며 이더넷 컨트롤러, 사운드 컨트롤러가 USB 3.0 으로 로 연결되어있다. 첫 번째 USB 3.0 컨트롤러에는 두 개의 USB3.0 포트와 전면 오디오 잭을 위한 사운드 컨트롤러 그리고 두 번째 USB3.0 컨트롤러 칩셋이 연결되어있다. 두 번째 USB 3.0 컨트롤러에는 후면 두 개의 USB3.0 포트 와 이더넷 컨트롤러와 USB 2.0 허브가 연결되어있다. USB 2.0 컨트롤러의 USB2.0 포트는 두 개 까지만 구현되어있다. 비디오 출력을 제외한 기능은 모두 USB 를 사용하여 연결됨을 알 수 있었다. 남은 부분은 DVI 출력인데 이 부분은 캔 쉴드를 열어봐야 알 수 있었다. 캔 쉴드의 내부는 다음과같다. 회로를 보면 OneLink Pro 는 핀맵을 통해 알 수 있었던 데로 DisplayPort 신호를 2개 레인으로 입력받아

RP2040 개발보드 설계 2

Image
지난번 설계에 이어서 전반적인 레이아웃이 수정되었다. 먼저 지난번 보다 더 많은 포트를 구성하여 배열하였다. ADC 기준 전압을 외부 창조하기 편하게 하였고 GND 와 3.3V 전압 포트가 추가 되었다. 오른쪽에 새로운 보드는 리튬 충/방전 모듈로 5.1V 의 전압을 출력하도록 설계되었다. 이 모듈을 상단에 장착할 경우 BOOTSEL 버튼이 가려지기 때문에 별도의 BOOT 버튼을 추가해 주었다. 본래 리튬 충/방전 회로를 하나의 보드에 구성하려 했지만 너무 과한 설계가 되는것 같아 모듈형식을 생각해보았다. 이번에 추가된 기능적인 부분으로 보드가 USB와 VIN 전원소스를 선택할 수 있도록 하였다. 왼쪽이 기존 설계이고 오른쪽이 새로설계된 보드의 모습이다.보드는 기본적으로 USB 전원을 사용하여 구동되지만 VIN 입력이 있는경우 VIN 전압소스를 선택하여 사용하도록 설계하였다. 리튬 충/방전 모듈은 충전과 전원 공급을 동적으로 관리할수 있도록 설계되어 충전중에도 안정적인 전원공급이 가능하다.

RP2040 개발보드 설계 1

Image
RP2040 을 위한 새로운 개발 보드를 만들고 있다. 회로는 어느정도 완성이 되었지만 레아아웃은 계속 수정중이다. 가능하다면 리튬 배터리 충전 회로와 DC-DC 부스트 회로를 추가할 예정이다. Pi Pico 보드와 여러가지 차이점을 주었다 첫 번째로 메모리 부분이다. 2MB인 Pi Pico 와 달리 16MB 의 QSPI 플래시 메모리를 사용하였고 별도로 EEPROM 을 장착할 수 있는 공간을 마련하였다. EEPROM의 동작을 LED 로 확인할수 있으며, 읽기/쓰기는 WP 점퍼를 통해 활성화 하거나 잠글 수 있도록 했다. 두 번째로 전원 필터에 LDO 를 사용하였다. Pi Pico 에 있는 스위칭 레귤레이터의 전압은 노이즈 때문에 ADC Vref 로 사용하기에 적합하지 않다는 평가를 자주 봤기때문에 간단하게 LDO를 사용해 구성하였고 LM4040로 VRef 회로를 구성해 ADC VRef 로 사용할수 있도록 하였다. 이 회로는 기본으로 점퍼가 열려 있으며 필요한 경우에 닫아서 사용할수 있다. 사실 일반적인 경우 LDO의 3.3V 를 바로 사용해도 문제는 없다고 생각한다. 세 번째로 이 보드에는 SD 카드 슬롯이 있다. SD 카드 슬롯의 경우 경우 모든 핀에 풀업을 사용하진 않았고 DATA1/DATA2/DATA3 에 만 풀업 저항을 사용하였다. 사실 저항값을 아끼면서 까지 뺄 필요는 없지만 요즘 SD 카드들은 풀업 저항이 꼭 필요하진 않은것 같다. 너무 오래된 SD 카드를 사용하는 것이 아니라면 풀업 저항 없이 SD 카드 만으로도 문제없이 작동할 것이다. 4비트 통신을 원하는 경우 DATA1/DATA3 를 바닥면에 있는 점퍼로 회로를 열거나 닫을 수 있다. 네 번째로 5V AVR 과 ISP 통신을 위한 로직 컨버터를 추가하였다. 이 부분은 AVR Prog 프로젝트에 사용하기위해 고안된 것으로 기본적으로 타겟 장치의 전압을 사용하도록 되어있지만 다이오드를 반대로 연결해서 타겟 장치로 전원을 공급할수도 있다. 그러나 가능하면 타겟 장치의 전원을 이용하는것이 좋다. (

Raspberry Pi Pico 를 AVR Programmer 로 사용하기

Image
이 장치는 지난번 ATmega328P 로 만들었던 Standalone AVR Programmer 의 업그레이드 버전이라고 할 수 있다. RP2040 은 ATmega328P 보다 높은 성능과 상당히 넓은 메모리 공간으로 프로그래밍 성능을 좀 더 끌어올릴수 있을 것으로 기대하고 있다. 아직 모든 부분에서 안정적인 것은 아니지만 Pi Pico 는 확실히 프로그래밍 속도를 높일 수 있었다.  ATmega328P에 사용한 것과 거의 동일한 코드로 펌웨어 쓰기 시간을 최대 1/6 수준으로 줄일 수 있었지만 일부 IC는 테스트에서 클럭 사인파 간격을 최소로 했을때 IC 와 퓨즈 정보를 읽어오는데 가끔씩 실패했다.  전원과 결선에 문제가 없다면 실패의 원인으로 다음 두 가지를 예상할 수 있다. 첫 번째는 각 IC 들의 기본 퓨즈 세팅에 따른 SPI 성능 부족이다. 실제로 외부 클럭을 사용하도록 퓨즈를 수정하여 시스템의 클럭을 높이게 되면 SPI 클럭의 사인파 주기를 좀 더 줄일 수 있었으며, 이때 고속으로 SPI 를 통한 프로그래밍을 할 수 있었다. 두 번째는 로직 컨버터의 부재다. Pi Pico 는 gpio 에서 3.3V 출력을 지원하는데 고속으로 운용시 gpio의 3.3V 신호가 타겟보드에서 HIGH 혹은 LOW 신호로 인식될만큼 충분하지 못했을 수 있다. 물론 ATmel 사의 모든 AVR 이 3.3V에서 프로그래밍이 불가능 한것은 아니지만 적어도 ATtiny 같은 일부 제품에서는 클럭을 수정하거나 모든 SPI 핀이 3.3V 보다 높은 전압에서 안정적인 통신이 가능했다. 따라서 통신 신뢰도를 높이기 위해서는 로직 컨버터가 필요하다.  위 두가지를 모두 보완하면 프로그래밍 실패 이슈는 대부분 사라질 것으로 보고있다.

HC-05 모듈을 사용한 아두이노 스케치 무선 업로드 (블루투스 SPP)

Image
지금부터 소개하는 방법은 상당히 오래된 방법이지만 아직도 유용하게 사용할수 있는 방법으로 ArduinoIDE 스케치 업로드 버튼을 누르고 사용자가 직접 하드리셋을 시켜줄 필요도 없다.  HC-05 와 같은 저렴한 블루투스 클래식 모듈은 SPP 통신을 지원한다.   HC-05에 적절한 펌웨어 설정과 적절한 회로구성만 있다면 마치 USB 를 통해 스케치를 업로드하는것 처럼 사용할수 있다. 위 이미지 처럼 온보드 형태로 PCB 로 만들고자 할때 모듈을 잘 골라야하는데 펌웨어 버전이 다른거나 HC-05 와 비슷한 BC04 라는 제품이 있다.  좀 더 다양한 테스트를 받았고 상위 호환의 제품으로 보이지만 이 모듈은 사용하면 안된다.  비슷한 제품인 BC04은 HC-05 제품과 비교하여 AT 명령어 셋의 일부가 누락되어 있으며 핀 아웃 마저 다르다.  따라서 온보드 형태의 PCB 를 만들어야하는 경우 HC-05 그대로 사용하거나 모듈 부분만 떼어내서 사용하는 방법이 확실하다. 먼저 아두이노와 HC-05의 하드웨어 결선 방법이다. HC-05 의 핀아웃을 보자면 정변 기준 왼쪽부터 STATE, RxD, TxD, GND, VCC, EN 이 있다. 핀 들의 순서를 기준으로 필요한 회로도를 작성하면 다음과 같다. HC-05 는 3.3V 로 동작하는 모듈로 이보다 높은 전압에 노출되면 회로가 손상되거나 오작동 할 가능성이 높아진다. 때문에 이렇게 전압이 다른 두 컨트롤러를 통신할때는 전압 레벨을 맞춰줄수 있는 레벨 컨버터 를 사용하는것이 좋다. 레벨 컨버터의 경우 모스펫을 사용하는방법 저항을 사용하는 방법 다이오드를 사용하는 방법 등 여러가지가 있지만 가장 빠르고 안정적이며 범용적으로 사용할수 있는 모스펫을 사용하는 방법을 추천한다. 보통은 RX TX 에 모두 설계를 적용하지만 HC-05 기준 RX 만 모스펫을 적용하였다 아래 회로는 모스펫을 이용한 로직 레벨 컨버터 설계로 안정적으로 신호를 변환할 수 있는 방법중 하나이다.  풀업 저항은 범용적으로 10K 이 많이 사용되지만 1K