2026년 7월 13일 월요일

[소스코드 해설] 미니 오실로스코프

[소스코드 해설] 미니 오실로스코프

목차
1. 들어가며...
2. 아듀이노 개발보드
3. 미니 오실로스코프
    3-1. 미니 오실로스코프의 기능
    3-2. 사용된 라이브러리
    3-3. 버튼 입력과 인터럽트
    3-4. 아날로그 입력과 샘플링
    3-5. 데이터 분석
    3-6. 데이터 시현
    3-7. 보정
4. 마치며...

----------------------------------------------
1. 들어가며...

"내 칩"을 만들기 전에 "남의 칩"을 익혀보자. "남의 칩"을 응용에 활용하려면 그들이 제공하는 기술 문서(Data Sheet)를 읽을 수 있어야 한다. 아울러 "내 칩"의 기술 문서를 작성하는 본보기로 삼아본다.

"미니 오실로스코프"는 자작파들 사이에 가장 흔한 프로젝트다[Youtube: Arduino mini oscilloscope]. 이 DIY 프로젝트는 Atmel 사의 마이크로 컨트롤러 ATmega328P를 채택한다. 이 칩을 선택한 이유는 개발도구와 응용 라이브러리가 매우 풍부하고 응용 목적에 맞는 기능을 모두 갖추고 있다는 점도 있지만 저렴하다는 것도 큰 이유다. 참고로 요즘 출시된 어지간한 마이크로 컨트롤러들은 이보다 훨씬 우수한 성능을 가지고 있다. ATmega328P은 중앙처리장치(CPU, Central Processing)와 데이터(SRAM, 2KBytes)와 코드(Flash, 32KBytes), EEPROM(1KBytes) 메모리(Memory) 그리고 다양한 주변장치(Peripherals)를 한 패키지에 내장하고있다. 이 칩 사양서에서 보여주는 내부 구성은 아래와 같다[ATmega328P Datasheet].



"미니 오실로스코프"를 만들었다고 자랑하는 동영상 혹은 웹 문서들의 대부분은 "만들었음"을 보여줄 뿐이다. 일부 성능 개량을 이야기 하며 소스 코드를 공개하지만 내용을 설명하는 경우는 보지 못했다. 한 칩이 응용되려면 주변회로가 더해지고 이를 구동하기 위한 프로그램 코드가 작성되어야 한다. 마이크로 컨트롤러를 활용하여 "미니 오실로스코프"를 만들기에 필요한 회로와 이에 따라 작성된 구동 소프트웨어의 C++(.ino) 소스코드를 함께 읽어본다.

2. 아듀이노 개발보드

상용 칩들은 널리 판매되기 위해 법용성을 감안하여 설계되고 제작된다. 다양한 기능을 내장하고 있지만 우리가 원하는 응용에 필요한 회로는 칩 하나로 끝나지 않는다. 이 칩을 구동 하려면 최소한 전원 공급회로가 더해져야 한다. 아울러 개발과정에서 코드의 동작을 확인할 용도로 깜빡이 하나 정도는 있으면 좋다. 칩 내에서 도데체 무슨일이 벌어지는지 알고 싶다. 이 깜빡이는 나중에 개발이 완료되고 제품 장식에 활용 된다. 전원과 기타 보조 회로를 모아 개발하기 편리하도록 범용으로 만들어 판매되는 보드로 아듀이노 우노(Arduino Uno)라는 제품이 있다. 공개 하드웨어(Open-Source Hardware)로써 수없이 많은 아류 제품들이 출시 되었다. 아듀이노(Arduino)는 ATmega 계열의 칩을 활용한 보드 제품으로 시작했으나 지금은 ARM, ESP32등 다양한 마이크로 컨트롤러의 개발 환경이 되었다. 각 프로세서 칩과 다양한 개발 보드들이 아듀이노 환경에 맞춰 설계 제작되어 판매되고 있다. 자유 소프트웨어 재단(Free Software Foundation)의 GNU C++는 뛰어난 이식성과 참여자들 덕분에 거의 모든 프로세서들의 응용 프로그램 개발 언어가 되었다. "미니 오실로스코프"는 아듀이노 우노를 작은 크기로 축소한 "아듀이노 프로 미니(Arduino Pro Mini)"를 목표보드(target board)로 한다. 회로도는 다음과 같다.

https://www.arduino.cc/en/uploads/Main/Arduino-Pro-Mini-schematic.pdf

ATmega328P는 USB 인터페이스 기능을 내장하고 있지 않다. 별도로 CH340 칩을 추가하여 작은 크기(26x21.5mm)로 출시한 보드가 "나노 슈퍼 미니(Arduino NANO V3 Super Mini)"다. 아듀이노 개발환경에서 이 보드는 아듀이노 프로 또는 프로 미니(Arduino Pro or Pro Mini)로 인식된다.




3. 미니 오실로스코프

오실로스코프는 등시간간격으로 피 측정 회로가 내놓는 전압을 측정(샘플)하여 가로 128, 세로 64 화소의 OLED 장치에 시현한다. 피 측정 회로의 전압 변화를 디지털 값으로 변환하기 위해 ADC(Analog-to-Digital Converter), "등간격" 으로 샘플 하기위해 타이머-카운터(TC, Timer-Counter) 그리고 사용자 인터페이스용 버튼 입력을 입출력 포트(IO Port)를 활용한다. ADC, TC 그리고 PORT는 ATmega328P 에 내장되어있다. 미니 오실로스코프 회로도는 다음과 같다. 아듀이노 나노 슈퍼미니 개발 보드에 128x64 화소를 가지는 OLED 표시장치로 구성되었다. 1.5볼트에서 5볼트로 승압 할 수 있는 DC-DC 업 컨버젼 모듈을 사용하여 AAA 건전지로도 작동 시킬 수 있다. 마이크로 컨트롤러 ATmega328P에 짜넣는 프로그램에따라 다양한 응용이 가능하다[pong_Uno].


3-1. 미니 오실로스코프의 기능

"미니 오실로스코프"의 소스 코드를 읽기 전에 이 장치가 어떤 기능을 갖는지 살펴보자. 시현할 파형의 샘플에 더하여 입력 신호의 수직 해상도(전압범위), 수평 해상도(샘플 간격), 트리거 엣지(상승 또는 하강)를 선택 할 수 있다. 측정한 파형을 분석하여 주파수(frequency)와 듀티 비(duty ratio)를 보여준다. 나름 디지털 스토리지 오실로스코프(DSO, Digital Storage Oscilloscope)다.
.....
<사진>

3-2. 라이브러리

이제 "미니 오실로스코프"의 응용 프로그램을 읽어보자. 파일명은 Mini_Oscilloscope.ino 다. "내 칩 디자인 킷"의 응용 예제로 포함되어있다. 총 830줄에 이르는 소스코드를 중요 부분으로 나눠 설명한다.


"미니 오실로스코프"는 공개된 소스코드를 일부 수정하였다. 원본 출처를 밝혀둔다.


이미 만들어 놓은 다양한 라이브러리들을 활용하기로 한다. 각 라이브러리에 속한 함수(API, Application Programing Interface)들을 사용하려면 이들을 정의한 헤더 파일(header file)을 들여온다.


각 라이브러리들의 헤더 파일은 다음과 같다.
- Wire.h: I2C 장치와 통신에 필요한 라이브러리다.
- Adafruits_GFX.h: Adafruit 사에서 개발하여 공개하는 범용 그래픽 라이브러리다. 점찍기, 줄긋기, 사각형 그리기, 원 그리기, 비트맵 문자 표시 등 다양한 함수들을 제공한다.  깃허브 저장소 링크는 다음과 같다.


API 문서는 아래링크에서 받을 수 있다.


- DIYables_OLED_SSD1309.h: 특정 OLED 칩의 드라이버 라이브러리다. 수많은 개발자들에 의해 드라이버가 개발되어 공개됐다. 이 드라이버는 SSD1309(2.4"), SSD1315(0.96"), SSD1306(0.96") 등과 호환된다.
- EEPROM.h: ATmega328P 에 내장된 플래시 메모리는 프로그램 코드를 저장하는 공간이다. 이 영역을 고정 데이터로 사용하기 위한 라이브러리다.

3-3. 버튼 입력과 인터럽트

버튼 입력을 받아들일 포트를 정의하였다. 미니 오실로스코프의 동작을 제어하기 위해 4가지 버튼, UP, DOWN, SELECT, HOLD 이 필요하다. 각 버튼은 아듀이노 보드의 디지털 핀 D6, D7, D8, D9에 연결되었다. 이 핀들은 다시 ATmega328P 칩의 PD6, PD7, PB0, PB1에 연결된다. 아듀이노 보드의 포트 번호를 실제 컨트롤러 칩의 핀으로 연결(매핑)은 아듀이노 개발 환경에서 보드 지정에 의해 이뤄진다.


개발환경에 연결된 보드의 종류에 따라 장착된 컨트롤러에 맞는 GNU C++ 컴파일러가 호출 될 것이며 기타 입출력 장치와 보드의 포트(번호) 연결(매핑) 역시 보드 명에 의해 적용된다. 따라서 기준을 맞추기만 하면 어떤 종류의 보드도 아듀이노 개발 환경에서 사용할 수 있다. 보드 뿐만 아니라 각종 장치 구동용 라이브러리 역시 이에 준한다. 소프트웨어와 하드웨어 개발도구의 개방성이 바로 오픈-소스(Open-Source)의 철학이며 모두의 문화가 되어 번성하고 마침내 민주화를 이뤄낸 원동력이다(Toward an Open-Source Digital Flow: First Learnings from the OpenROAD Project[pdf]).


미니 오실로스코프에 사용된 4개의 버튼을 5방향 키를 사용하여 보드의 크기를 줄였다.


마이크로 컨트롤러의 입출력 핀은 사용하려는 용도에 따라 입력 혹은 출력 중 하나로 정의 되어야 한다. 버튼은 모두 입력 이다. 버튼이 눌리면 접지에 닫게 되어 이를 디지털 값 0(또는 false)으로 읽힌다. 따라서 일부러 누름이 아닐 경우 1(또는 true) 상태에 있어야 한다. 이를 전기적으로 항상 1로 올려 놓기 위해 INPUT_PULLUP 으로 초기화 해 놓았다.


외부의 입력을 받아들이는 방식은 폴링(polling)과 인터럽트(interrupt)다. 여기에서는 인터럽트 방식으로 버튼 입력을 처리한다. AVR 계열 CPU는 2개의 인터럽트 채널을 가지고 있다. D2는 IRQ0, D3 핀은 IRQ1 이다. "슈퍼 미니" 보드의 D3 핀을 인터럽트로 사용하기 위한 초기화는 다음과 같다. D3 핀을 입력 풀-업으로 설정한 후 인터럽트를 처리할 함수(interrupt handler)를 지정한다. 함수 Btn_IRQ()를 IRQ1에 연결한다. 인터럽트로 인지하는 조건은 해당 핀에 하강 엣지 사건(FALLING)이다.


위의 D3 포트에 대한 인터럽트 지정을 도식화 하면 다음과 같다. 점선은 컨트롤러 칩 내부의 포트 설정이며 외부에 다이오드와 누름 스위치가 직렬로 접지에 연결된 회로다. 핀 모드 INPUT_PULLUP에 의해 칩 내부에서 R_pu가 VCC에 연결 된다. 외부의 스위치 S1이 열린 상태라면 IRQ 값은 1을 유지한다. 만일 외부 스위치 S1이 닫히면 IRQ는 1에서 0으로 떨어져(FALLING) 이 사건으로 인해 인터럽트가 발생한다. 마이크로프로세서는 인터럽트 사건을 감지하여 즉시 이를 처리할 함수를 호출한다.


인터럽트 처리 함수 Btn_IRQ()는 다음과 같다. 버튼은 기계 스위치다. 접점에 발생하는 스파크(채터링)로 인해 인터럽트 오동작이 있을 수 있다. 버튼 값을 읽기 전에 잠시 쉬었다가(delay) 여전히 버튼이 눌려 있는지 확인한다. 버튼의 디지털 값을 모두 읽은 후 값이 모두 1(high) 이면 잘못 호출된 것으로 간주 한다. 하드웨어적인 방법으로 작은 용량의 컨덴서를 접지와 연결하거나 슈미트 트리거 논리 소자를 사용하면 기계 스위치의 채터링을 방지 할 수 있다.


눌려진 버튼에 따라 해당하는 기능을 수행한다. Select 버튼이 눌리면 기능 변수 변경한다. 변수 scopeP가 0일때 수직범위(전압), 1일때 수평범위(샘플 간격), 2일때 트리거 방향(상승또는 하강 엣지)을 선택한다.


Down(또는 Up)버튼이 눌리면 해당 기능에서 표시 값을 변경한다.


오실로스코프의 동작을 잠시 멈추는 HOLD 버튼의 기능은 다음과 같다.


3-4. 아날로그 입력과 샘플링

오실로스코프의 아날로그 입력 채널은 0이다. 부가 기능(내부 배터리 전압 측정 등)으로 1번 채널을 사용한다.


아날로그 값(전압)을 디지털로 변환하는 기준 전압(ADC reference)은 칩 내부 전압(1.1V)으로 정했다. ADC는 기준 전압과 입력 전압을 비교하여 디지털 값으로 나타낸다.


ATmega328P의 ADC 구성은 아래와 같다. 프로그램 코딩을 하기전에 구성도를 보고 대략적인 사용법을 이해할 수 있으면 좋겠다. 어쨌든 눈에 익혀두자.


ATmega328P에 내장된 ADC의 해상도는 10비트다. ADC의 기준전압에 따라 해상도 전압이 달라진다. 칩의 동작전압 5V를 기준 전압으로 삼을 경우 이를 10비트로 나누면 해상도는 0.004882(=5/1024)다. 내부에 정전압 회로(voltage reference)의 출력 1.1V를 ADC 기준 전압으로 설정할 수 있다. ADC의 기준 전압을 INTERNAL로 설정한 경우 해상도는 1mV(0.00097=1.1/2024)로 세밀한 측정이 가능하다. 비록 "미니 오실로스코프"가 칩 내외부의 잡음 대책을 세우지 않은 데다가 표시 장치의 수직 해상도가 64화소에 불과하지만 나름 정밀도를 추구한다. ADC의 기준을 1.1V이지만 피측정 회로의 전압 범위는 이보다 넓어야 한다. 분압기 회로를 구성하여 피측정 입력 변동폭을 넓혔다. 미니 오실로스코프의 피측정 입력 회로는 다음과 같다. ADC 채널의 기준 전압을 1.1볼트로 설정 되었다. 피측정 입력전압의 범위를 이보다 넓게 하기 위해 분압 회로(voltage divider)를 구성하였다.

분압기는 다음과 같다. Rv를 조절하면 V_in이 5V일 때 V_A0가 1.1V가 되도록 맞출 수 있다. 이론적으로는 V_in의 범위를 얼마든지 늘릴 수 있지만 저항이 허용하는 내압과 저항 정밀도가 이를 따라주어야 한다. V_in과 V_A0는 Rv와 R4를 상수로 둔 비례 관계다. 피측정 범위 V_in을 0-5V로 정하면 Rv는 약 554.545K 옴 이다. 부품의 정밀도가 일정치 않을 것이므로 Rv를 조절하여 보정(calibration)해 주도록 하자.


분압기에 사용한 저항의 신뢰도가 문제될 수 있다. 음의 전압을 인가하면 칩이 소손될 수 있으므로 주의해야 한다. 양의 전압 뿐만 아니라 음의 전압 측정도 가능하려면 "프론트-엔드" 회로를 넣어 주도록 한다[참고:미니 오실로스코프의 프론트-엔드]. "미니 오실로스코프"의 아날로그 입력 전압을 디지털로 변환(샘플링)하는 함수는 readWave() 다.


샘플링은 시간상 등간격으로 이뤄져야한다. 나름 정교하게 계산하여 샘플링 간격을 정하고 있다. 마이크로 초 단위의 지연 API, delayMicrosecond()를 사용하여 등간격을 맞추고 아날로그 값을 디지털로 변환, analogRead() 한다. 한번에 취할 값은 200개(=REC_LENG)다. 만일 200개의 샘플에 주기가 200ms인 파형 10개를 담는 것이 목표라고 하자. 샘플링 간격은 10ms(=200x10/200)다.


마이크로컨트롤러는 내장하고 있는 다양한 주변장치를 제어하기 위해 마련된 레지스터에 값을 써넣는다. ADC 장치의 제어 레지스터는 ADCSRA다. 각 비트마다 용도가 정해져 있다.


칩의 작동 주파수는 16Mhz이다. 사양서에 따르면 AD변환기를 제어하는 레지스터 ADCSRA의 하위 3비트는 ADC의 클럭의 분주비를 나타낸다. 프리-스케일러 ADPS[2:0]=111b이면 분주비는 128이다. 따라서 ADC 클럭은 16Mhz/128=125Khz다. 한번의 ADC 동작에 13클럭이 소요되므로 한번의 샘플링에 걸리는 시간은 (1/125000)*13=0.0001초다.


200mS의 피측정 신호를 관찰하기 위한 파형읽기는 다음과 같다. ADC 변환에 소요되는 시간 외에 샘플을 반복하고 비교 분기 명령 수행에 소요되는 클럭을 감안하여 대략 7888마이크로 초 간격의 지연을 두고 있다. 이 값은 다분히 여러번의 실험끝에 나온 숫자로 짐작된다.


샘플간격 지연을 타이머의 마이크로초 단위 API가 할 수 있는 범위 이하일 경우 기계어 nop (no-operation)의 수행 시간을 넣었다 asm("nop").


ADC 클럭의 분주비를 128로 설정해 놓은 최대 샘플링 주파수는 9.6kHz다. 프로그램 소스코드에 따르면 미니 오실로스코프로 측정 가능한 파형의 주기 최대치는 200us 초다. 굳이 대역폭을 따지자면 최대 샘플링 주파수의 절반 가량인 5kHz(=1/200us)에 불과 하다. 고성능 계측기에 비하면 턱없는 수준이지만 실험용으로 봐주자. 마이크로프로세서로 샘플링 주파수를 올리기는 한계가 있다. 샘플링 주파수가 기가 헤르츠에 이르는 고성능 오실로스코프들은 고속 ADC 칩을 사용하고 전용 하드웨어를 FPGA에 구현한다[Why high performance oscilloscope use FPGA?]. 

3-5. 데이터 분석

ADC로 얻은 샘플을 분석하여 피측정 회로에서 출력되는 신호의 주파수와 듀티 비를 계산하고 정렬된 파형을 시현할 수 있도록 엣지를 찾아 맞춘다. 분석하기에 앞서 샘플의 조건을 먼저 설정한다. 버튼으로 오실로스코프가 측정할 대상의 범위(수직축의 전압 vRange, 수평축의 시간 hRange)를 정할 수 있었다. 측정은 반복 작업이다. 여러 기능을 가진 계측기를 매번 설정하려면 짜증을 불러오기 마련이다. 마지막으로 측정했던 설정 값을 EEPROM에 저장해 두었다가 동일한 조건으로 재측정할 때 꺼내 쓰면 편리하다.


수직축 측정(전압) 범위 vRange를 5V와 이의 10배인 50V 로 선택할 수 있도록 아날로그 채널 A0의 입력에 감쇄(ATT, attenuation) 회로가 있었다. 측정 범위를 50V에 놓으면 ATT=0이 되어 R5(=10K)가 영향을 주어 Vin을 5V의 열배인 50V까지 넓힐 수 있다. 감쇄를 나타내는 attx10x가 0이면 ATT 를 입력 포트로 설정하므로써 고저항(Hi-Z)이 되어 분압 회로에 영향을 미치지 못한다. 관련 부분은 아날로그 샘플 함수 readWave()를 참고한다.


수직축 범위 vRange=5일때 측정 전압 범위를 5V로 놓은 경우다. 측정 값을 작은 화면에 표시하기 위해 해당 범위 내에 전압 분해능 lsb5v 로 나눴다. 겨우 64행에 불과한 표시장치에 이렇게까지 정밀한 계산을 동원할 필요가 있을지 의문이지만 원작자도 나름 생각이 있었을 것이다.


전압 분해능 lsb5v 값은 다음과 같이 계산 되었다. ADC의 기준 접압 1.1V를 10비트(=1024)나눈 후 5V로 환산하기 위해 적용한 분압 계수 (630/120)로 곱해서 얻은 값이다. 원작자의 분압 회로가 대략 630K와 120K 옴으로 고정된 저항을 사용했던 것으로 보인다. "미니 오실로스코프"는 보정할 수 있고 고정밀 측정기가 아닌 만큼 이 값을 변경하지 않고 그대로 적용하였다.


측정 범위를 분해능으로 나눠 계산한 rangeMax (5/0.005=1000)를 작은 표시 장치에 적용하기 위해 map() 함수를 사용하여 크기변환 한다. ADC로 저장해둔 waveBuff[]를 rangeMin 과 rangeMax 사이 에서 표시장치의 수직 범위 63에서 9까지 범위로 변환 하여 선을 긋는다.


설정을 마치면 ADC로 얻은 값을 분석한다. 샘플의 평균을 계산하고,


트리거 위치를 고른다. 샘플한 200개의 데이터를 가로 128화소의 화면에 모두 시현할 수 없다. 샘플 값중에 상승 또는 하강 엣지를 찾아 그 주변의 데이터만을 취하여 표시 범위를 정한다. 이어 dataMax와 dataMin의 중간 값을 오가는지 검사하여 듀티 비 계산을 실시한다.


누군가 작성한 소스 코드를 일일이 들여다 보기는 여간 지난한 일이 아닐 수 없다. "계측기"의 관점에서 전체 처리과정을 살펴보는 중이다. "미니 오실로스코프"의 소스코드를 보면 데이터 분석에 꽤나 공을 들인것을 엿볼 수 있다.

3-6. 데이터 시현

샘플 조건에 맞춰 보정(수직축 전압과 수평축 시간)한 데이터를 제한된 시현장치(128x64 OLED)에 표시해본다. 시현장치 마다 그에 맞는 구동 라이브러리를 찾아 초기화한다. 여러 OLED 구동 라이브러리 중 DIYables_OLED_SSD1309 를 선택 했다. 변경 없이 SSD1315, SSD1306 등과 화환된다.


OLED의 구동에 필요한 각종 그리기 함수들이 모두 C++ 크래스 객체 oled 에 소속함수로 묶여있다. OLED를 구동하여 각종 그림을 그리는 함수들은 오직 OLED에 필요할 뿐, 범용으로 쓰이지 않는다. Adafruits_GFX의 각종 그래픽 API들은 oled 객체로 상속되었다. 선을 그려 오실로스코프의 기본 화면을 꾸민다.


데이터 분석을 통해 얻은 각종 정보를 화면에 표시한다. 전압 범위, 평균 전압,


듀티 비와 주파수.


마침내 샘플 값을 멋지게 파형으로 그려낸다. 


3-7. 보정

"미니 오실로스코프"에 사용된 마이크로 컨트롤러 ATmega328P의 ADC 기준 전압은 1.1V 이지만 아날로그 입력의 전압 범위는 5V와 50V 다. 분압기를 통해 피측정 전압을 기준 전압 범위내로 맞춘다. 가변저항으로 둔 분압기의 한쪽 저항을 조절하여 오실로스코프의 측정치를 보정할 수 있도록 하였다.


 보정에 사용할 신호 발생기를 내장 시켰다. 시험 신호는 진폭 5V 1kHz 구형파로서 PWM_PIN으로 정의된 D5 포트를 통해 출력된다.


타이머-카운터 제어 레지스터의 하위 3비트는 분주 클럭 선택(CS)한다. 이 값이 0x03이면 64분주 클럭이다. analogWrite()는 이 클럭 256개를 한 주기로 하는 PWM 신호를 생성한다. 따라서 PIN_PWM(D5)에 1kHz의 구형파 신호가 출력된다. 참고로 아듀이노 우노 보드의 5번핀은 기본적으로 타이머0를 사용하며 64분주 클럭으로 8비트 카운터를 사용하여 PWM 신호를 생성하도록 기본설정되어 있다.  따라서 별도의 타이머 제어 레지스터를 변경하지 않고도 analogWrite() 함수를 사용하면 1kHz에 근접한978Hz(=1/0.001024) 구형파를 발생 시킬수 있다.


보정을 위해 오실로스코프 수직 범위를 10V 에 맞춰놓고 아날로그 입력을 D5에 연결한다. 이어 OLED에 표시된 파형이 중간이 되도록 RV를 조절한다. 이어 듀티비와 평균전압 그리고 주파수를 확인 한다.

<사진>

4. 마치며....

"내 칩"을 만들기 전에 먼저 남의 칩을 엿봤다. 거의 모든 것을 내장하고 있는 듯이 보이는 범용 마이크로 컨트롤러지만 응용에 적용하려면 최소한의 부가 회로가 필요하다. 아울러 이에 맞는 구동 소프트웨어를 작성해 주어야 한다. 반도체 부품이 시장에서 성공하려면 누군가 "내 칩"을 활용하여 응용 사례가 많아야 한다. 내 칩의 활용 문서를 만들고 응용 회로를 제공해야 하며 경우에 따라 구동 라이브러리 소프트웨어도 제공해야 한다. 나혼자 사용하려고 엄청난 자원을 들여 "내 칩"을 만드는 것은 무의미하다.

2026년 7월 10일 금요일

미니 오실로스코프 프론트 엔드

미니 오실로스코프 프론트 엔드


1. 개요
    오실로스코프의 아날로그 프론트-엔드[참고]
    OpAmp이용 아날로그 입력 범위 조정(-5V-+5V to 0V-5V) [참고]

2. 회로도
    FrontEnd_SCH.pdf

2. PCB
 

3. 부품
    MC6002, Rail-to-Rail 듀얼 OpAmp

4. 조립
    - PCB 제작중...
5. 시험



Arduino Uno(ATmega 328p)+0.9" OLED 실험 키트

Arduino Uno(ATmega 328p)+0.9" OLED 실험 키트

1. 개요

2. 응용
    pong_Uno.ino

3. 회로도

4. PCB
 

5. 부품목록 및 구입처
모듈
    1. NANO V3.0 / Nano SuperMini Type-C 개발 보드
        atmega328p 칩 ch340 Arduino 용 직렬 포트 (1개)
        https://ko.aliexpress.com/item/1005007342237827.html
    2. 0.96 인치 iic 직렬 옐로우 블루 oled 디스플레이 모듈 128x64 (1개)
        i2c ssd1306 12864 lcd 스크린 보드 gnd vcc scl sda for arduino
        https://ko.aliexpress.com/item/32869184826.html
    3. DC-DC 0.9-3.3V ~ 3.3V 500mA 0.9-5V ~ 5V 미니 스텝 업 부스트(1개)
부품
    4. IN4148 DO-35 고속 스위칭 다이오드 (5개)
        https://ko.aliexpress.com/item/1005009379098965.html
    5. RM-065 시리즈 가변 저항 트리머 1M 옴, 상단 조정 (1개)
        https://ko.aliexpress.com/item/1005009881045452.html
    6. 1/8w 금속 필름 저항기(10, 100, 10K, 100K,각 1개)
        https://ko.aliexpress.com/item/1005002852712445.html
    7. 50V 모놀리식 세라믹 커패시터 (100nF/104,1개)
기구
    8. 5 방향 탐색 키 모듈 독립 키보드 키 스위치 버튼 5D 조이스틱 마이크로 컨트롤러(1개)
    9. 슬라이드 스위치 마이크로 전원 토글 스위치, 단일 및 이중 열 직접 삽입, 수평 슬라이딩
         (SS12D00, 핀간격 2.5mm, 1개)
        https://ko.aliexpress.com/item/1005007736314869.html
    10. 직각 핀헤더(2P, 3개)
    11. 암 와이어 테스트 후크, 컬러 듀폰, 모든 구리 용접 로직 분석기, 테스트 클램프, DIY, 20cm
        (Yello, Black, 각 1개)
        https://ko.aliexpress.com/item/1005004479009849.html
    12. AAA 배터리 상자 배터리 홀더(1개)
        https://ko.aliexpress.com/item/1005006274732583.html
    13. M3 PCB 마더 보드 검정색 나일론 플라스틱 필립스 나사 볼트 남성-여성 여성 육각 스탠드 오프
        (육각형 기둥 스페이서 길이 15mm-M3, 육각너트-M2, 1조)
        https://ko.aliexpress.com/item/32976004197.html

6. 조립
    - PCB 제작중...
7. 시험