본문 바로가기

전체 글948

최적의 I2C 풀업 저항 선택 방법 1. 풀업 저항의 역할 I2C 통신 라인은 오픈 드레인(Open-drain) 구조로, 데이터(SDA)와 클럭(SCL) 신호를 LOW로 드라이브하는 것은 디바이스에서 직접 수행하지만, HIGH 상태는 외부 풀업 저항을 통해 이루어진다. 이 과정에서 풀업 저항 값 선택이 다음과 같은 요소에 영향을 미친다. 저항이 작은 경우 :소모 전력 증가 (P=V^2/R, 저항값이 적을수록 더 많은 전류가 흐르고 전력 소비가 증가한다)Rise time 감소 (신호 상승 속도가 빠르다)고속 데이터 전송에 적합저항이 큰 경우 :소모 전력 감소 (더 적은 전류가 흐른다)Rise time 증가 (신호 상승 속도가 느리다)저속 데이터 전송에 적합    2. 통신 속도에 따른 전송 모드 I2C는 다양한 속도 모드에서 동작하는데 각 .. 2025. 4. 27.
Ubuntu ] 노트북 덮개 닫았을 때 느려지는 문제 해결 방법 1. /etc/UPower/UPower.conf 파일을 에디터로 연다. $ sudo vim /etc/UPower/UPower.conf    2. IgnoreLid 옵션을 IgnoreLid=true 로 수정한 뒤 저장하고 에디터를 빠져나온다. IgnoreLid=true    3. UPower 서비스를 재시작한다.$ service upower restart     출처 :https://askubuntu.com/questions/15520/how-can-i-tell-ubuntu-to-do-nothing-when-i-close-my-laptop-lid 2025. 4. 24.
듀얼 부팅시 GRUB 부팅 메뉴 순서 변경하기 우분투, 윈도우 듀얼 부팅시 GRUB 부팅 메뉴 순서 변경하는 방법    1. 우분투로 부팅한다.  2. /etc/default/grub 파일을 에디터로 연다.$ sudo vim /etc/default/grub  3. 파일에서 GRUB_DEFAULT 옵션을 기본 부팅 값으로 설정할 메뉴의 인덱스 번호로 수정한다.예를 들어 Windows Boot가 메뉴 중에 세 번째에 위치한다면 인덱스 2로 설정한다.GRUB_DEFAULT=2   4. sudo update-grub 명령으로 변경사항을 적용한다.$ sudo update-grub 2025. 4. 21.
C++ ] uint8_t, int_8t를 스트림 연산자(<<)로 출력할 때의 문제점 C++에서 char, singed char, unsigned char 타입은 스트림 연산자( uint8_t와 int8_t도 내부적으로 각각 unsigned char, singed char로 정의되어 있기 때문에 마찬가지이다. 즉, C++에서 8비트 데이터 타입 중 std::ostream  #include #include int main() { char c = 65; signed char sc = 66; unsigned char uc = 67; uint8_t u8 = 68; int8_t i8 = 69; std::cout    때문에 해당 타입을 정수로 출력하기 위해서는 명시적으로 다른 정수 데이터 타입으로 캐스팅을 하거나, std::cout (u.. 2025. 4. 18.
공개키 기반 암호없이 ssh 접속하기 (+ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 오류) 공개키 기반 암호없이 ssh 접속하기 이 방법은 Remote가 Linux인 경우에 유효하다. 다음은 Local PC에서 진행하는 환경설정으로 윈도우인 경우엔 사전에 git bash가 필요하다. 1. 리눅스인 경우 쉘에서, 윈도우인 경우 git bash에서 'ssh-keygen'을 치고 질문이 나오면 엔터를 연타한다.ssh-keygen 이렇게 하면 리눅스인 경우 ~/.ssh/ 경로에, 윈도우 git bash인 경우 C:\SPB_Data\.ssh\ 경로에 아래 두 파일이 생성된다.id_rsa (공개키)id_rsa.pub (비공개키) 2. 공개키를 서버로 복사한다.ssh-copy-id 사용자@서버IP 생성한 공개키를 ssh-copy-id 명령을 통해 접속 대상 서버의 ~/.ssh/authorized_.. 2025. 4. 17.
C++] PCAN 드라이버와 API를 사용한 TUI 앱 (Text-based User Interface) 지난번 글에 이어서 두번째로 만든 TUI 앱으로, PCAN 장치 드라이버와 API를 활용한 윈도우 콘솔 기반 CAN 통신 소프트웨어이다. 특징 유니코드 사용을 통한 그래픽 개선콘솔에서 레이아웃을 그릴 때 ASCII 문자가 아닌 유니코드 문자를 사용해 더 깔끔한 UI를 구현했다.Unicode Box-drawing characters는 아래 링크에서 찾을 수 있다.https://en.wikipedia.org/wiki/Box-drawing_charactersUTF-8 → UTF-16 변환콘솔 코드 페이지를 ANSI가 아닌 UFT-8(65001)을 적용한다고 하더라도, Windows 콘솔 버퍼는 내부적으로 UTF-16을 사용해 문자를 저장하고 표시하므로 이에 대한 처리가 필요하다.void draw_text.. 2025. 4. 17.
TCA9538 데이터시트 및 리눅스 드라이버 분석 (Tested on Raspberry Pi 4) 데이터시트 분석 TCA9538은 I2C 및 SMBus를 지원하는 8채널 I/O Expander이다. 1. 주요 특징 주요 기능은 I2C to Parallel Port 확장 기능Open-Drain Active Low 인터럽트 출력 기능 제공Active Low 리셋 입력 기능 제공공급 전압 : 1.65V~5.5V5V tolerant I/O 포트최대 400kHz(Fast Mode)의 I2C 통신 속도 지원전원 공급 시 기본적으로 모든 채널이 Input으로 설정됨2개의 하드웨어 주소 핀(A0, A1)을 통해 최대 4개의 디바이스 연결 가능전원 인가 시 글리치 없음SCL/SDA 라인에 노이즈 필터 존 2. 블락 다이어그램 3. 핀아웃 4. 제어 방법1) Supported I2C ModeSt.. 2025. 4. 17.
C++] 파일 입출력시 최적화 방안 C++ 기준 파일 입출력 시 최적화를 통해 속도 개선하는 방법들을 몇가지 소개한다. 1. 큰 버퍼를 미리 할당해서 메모리 재할당 방지 std::vector, std::string 등은 내부적으로 동적 메모리를 사용하는데, push_back()이나 append()로 데이터를 계속 집어넣다 보면 사이즈가 커질 때마다 메모리 재할당이 발생해서 성능이 저하될 수 있다.이를 방지하기 위해 reserve()로 초기에 충분한 용량을 미리 확보해 두면 이후 데이터 추가 시 메모리 재할당 없이 빠르게 처리할 수 있다.reserve()는 capacity만 늘릴 뿐 size()나 length()에는 영향을 주지 않으며, 선언 시 큰 사이즈로 만든 다음 clear()를 하더라도 capacity는 그대로 유지된다. std:.. 2025. 4. 17.
RJ-45 커넥터 핀아웃 (10/100BASE-T, 1000BASE-T 연결 방법) RJ-45 커넥터 핀 아웃    핀 번호페어10/100BASE-T1000BASE-T1Pair 2TX+BI_DA+2Pair 2TX-BI_DA-3Pair 3RX+BI_DB+4Pair 1-BI_DC+5Pair 1-BI_DC-6Pair 3RX-BI_DB-7Pair 4-BI_DD+8Pair 4-BI_DD-  ✅ 10/100BASE-T1, 2, 3, 6번 핀만 사용하며 1, 2번 핀(Pair 2)는 TX, 3, 6번 핀(Pair 3)은은 RX로 구분됨 ✅ 1000BASE-T (Gigabit Ethernet)8핀 모두 사용하며 모든 핀이 Bi-directional임 2025. 4. 15.
DAC sine wave 생성 DAC(Digital-to-Analog Converter)를 다룰 때, 시험용으로 사인파(Sine Wave) 신호를 생성하는 경우가 많다. 하지만 실시간으로 sin() 함수를 사용하는 것은 연산 부하가 크기 때문에, 대부분 LUT(Look-Up Table) 방식을 활용한다.  첫번째 방법아래 사이트를 이용하면 최소값(min), 최대값(max), 샘플 개수(N) 등을 입력하여 자동으로 사인파 LUT 배열을 생성해 준다. https://deepbluembedded.com/sine-lookup-table-generator-calculator/https://www.daycounter.com/Calculators/Sine-Generator-Calculator.phtml const uint16_t sineLooku.. 2025. 4. 12.