Posts

RP2040 개발보드 설계 2

지난번 설계에 이어서 전반적인 레이아웃이 수정되었다. 먼저 지난번 보다 더 많은 포트를 구성하여 배열하였다. 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

ATmega 시리즈를 위한 Standalone AVR Programmer

Image
예전에 제품 설계에 ATmega328PB 를 사용해야 했었는데 아쉽게도 사용하던 펌웨어 다운로드 장비에서 PB 제품군을 지원하지 않았다. 업체에 문의도 넣었지만 업무가 많은지 업데이트는 없었다. 이미 스탠드얼론 프로그래머에 익숙해졌기 때문에 일반적인 AVR ISP 프로그래머는 불편해서 사용할 수 없는 노릇이었다. 사실 AVR 에 적용 가능한 스탠드얼론 프로그래머 프로젝트는 많기 때문에 만드는 건 어렵지 않다. 문제는 성능인데 기존에 사용하던 제품은 MCU에 매우 빠른 속도로 펌웨어를 다운 받을 수 있었기 때문이다. 지금 소개하는 장치는 그렇게 빠른 속도는 낼 수 없지만 저렴하게 만들 수 있다는 것에 감사한다. IC 는 ATmega328P 를 사용하였고 microSD 통신에 로직 컨버터로 74HC4050 을 사용하였다. ATmega328P 의 D2 에 연결된 택트 버튼을 누르면 프로그래밍이 시작되고 SD 카드로 부터 데이터를 읽어올 때 택트 버튼에 있는 LED 로 표시하도록 하였다. 타겟 장치로 연결되는 ISP 포트의 경우 리산테크의 10 to 6 케이블을 사용할 것 이기 때문에 그대로 만들어준다. 타겟 장치로의 ISP 연결은 D5~D8을 사용하도록 했다.  그리고 칩셋의 ISP 를 다른 기능으로 사용하는 설계는 ISP 프로그래머 기기에서 에러를 출력하는 경우가 있기 때문에 가능하다면 임시로 회로를 비활성 할 수 있는 기능을 넣거나 사전에 프로그램을 다운받는 것이 좋다. 자! 40mm x 50mm 라는 매우 컴팩트한 사이즈의 AVR 프로그래머 가 만들어졌다. SD 카드에 저장된 데이터를 원 버튼으로 타겟 장치의 전원이나 USB 로 입력된 전원 소스로 펌웨어를 쓸 수 있다. 위 영상은 간단한 동작 시연 영상으로 디지털 핀의 LED를 하나씩 깜빡이는 간단한 예제를 업로드 하는 영상이다. 펌웨어 기록 프로세스에서 검증 단계를 제외하면 다운로드 프로세스 시간을 단축 할 수 있다. AnnaJinK/AVR_FLASHER (github.com)

V-USB 를 활용한 ATmega328/168P기반의 USB 키보드 1

Image
키보드나 마우스 혹은 조이스틱과 같은 장치를 만들어보려고 할 때 HID 프로파일을 지원하는 제품을 찾게 된다. 이러한 제품의 경우 개발이 간편하고 고급 기능을 지원하지만 단가가 높은 편이다.  반면 ATmega AVR 에  V-USB를 사용하면 ATmega8 과 같은 비교적 저렴한 가격의 IC 로도 USB 1.1 규격의 키보드나 마우스, 조이스틱과 같은 다양한 USB 장치들을 만들 수 있다. V-USB 관련하여 아래 웹사이트에 재미있는 프로젝트들이 많이 있다. V-USB - A Firmware-Only USB Driver for Atmel(r) AVR(r) Microcontrollers (obdev.at) 이번에 ATmega328/168P와 V-USB를 사용해서 5V 로 동작하는 작은 테스트용 키보드를 만들어 보려고 한다. V-USB 를 사용한 장치는 호스트 장치와 연결시 ATmega328/168P에 있는 UART 포트인 PD0 와 PD1으로 통신하지 않고 PD2 와 PD4 를 사용하게 된다. 여기서ATmega328/168P의 경우 5V 전원 공급에서 디지털 포트도 5V 까지 동작하게 되는데 이 부분을 주의해야 한다. 일반적으로 USB는 전원 공급에 5V를 사용하지만, 양쪽 데이터 라인은 HIGH 에서 2.8V~3.6V, LOW 에서 0.0V~0.3V  전압으로 정격화된다. 이는 호스트 측으로 입력이 3.6V 보다 높아지지 않도록 주의해야 함을 의미한다. 만약 5V 신호를 그대로 USB 데이터 라인에 입력하게 되면 호스트 장치의 입력 회로를 손상시킬 수 있다. USB 데이터 라인의 회로 손상을 방지하기 위해 일반적으로 사용되는 방법으로 왼쪽 회로처럼 데이터 라인에 3.6V 제너 다이오드를 병렬로 사용해서 전압을 조정하는 방법이 있다. 만약 이 방법이 마음에 들지 않는다면 ATmega328/168P 에 3.3V 전원을 공급하는 방법도 있다. 오른쪽 회로는 아두이노 호환 보드에서 흔하게 볼 수 있는 CH340C를 사용한 USB 시리얼 통신 포트이다. ATmega3

Raspberry Pi Zero W/2W - 게임보이 만들기 4 - 샘플 테스트

Image
샘플을 주문하여 PCB 납땜을 하면서 설계하면서 발견하지 아쉬운 점들이 하나 둘 발견되었다.  첫 번째로 원활한 테스트에 필요한 테스트 포인트 설계를 누락 했다.  이게 없어서 PCB 도 너무 지저분해졌고 회로 찾아가며 테스트 하는데 너무 많은 시간을 소비했다.  두 번째로는 디스플레이 백라이트 설계가 완전히 잘못되었다. 지금 생각하면 너무 바보 같은데 회로도 설계시 심볼을 회전하면서 결선이 틀어진 모양이다. 일단 테스트는 백라이트 컨트롤 없이 항상 켜져있도록 만들어두고 테스트를 하였다    전원부의 경우 예상했던 5.15V 보다 높은 5.18V을 얻게 되었다.  이 정도의 전압도 사용에 큰 문제가 되지는 않지만 정확한 값을 얻기 위해서는 가변저항을 사용하는 것이 좋아 보인다. 큰 문제는 USB 에 특정 장치들을 연결할 때 발견되었다. 충전이 가능한 제품 중에서 연결하면 무조건 5W 이상을 끌어가도록 설계된 제품들이 있는데 이런 제품들이 문제였다. TPS61230의 최대 출력은 2.1A 이기 때문에 저방전 배터리를 사용하면 1.2A 이상 끌어가는 상황이 오면 시스템이 불안정해지면서 전원부가 셧다운된다.  가장 먼저 Raspberry Pi OS 를 설치해보았다. USB 장치와 microSD 카드도 잘 인식되고 컨트롤러도 잘 인식이 되었다. 구현된 모든 인터페이스는 잘 작동됨을 확인하였다. 사용자의 손길이 필요한 부분은 디스플레이와 오디오 출력 말고는 없어 보인다. RetroPie 의 경우 Wi-Fi 드라이버를 직접 넣어줘야 하지만 그 외에는 Raspberry Pi OS 와 동일하다. RecalBox는 Raspberry Pi OS 와 많이 다르기도 하고 화면 출력과 네트워크 드라이버 부분에 좀 더 연구가 필요하다. 디스플레이는 2.8 인치 ili9341 TFT 를 사용했으며, RetroPie 와Raspberry Pi OS에서 fbcp-ili9341 드라이버를 사용하여 구동 시킬 수 있었다. fbcp-ili9341 드라이버를 빌드 과정은 다음과 같은 과정이 필요하