본문 바로가기

펌웨어25

Helix MP3 Decoder 와 ID3 처리 요즘은 원만한 디바이스에도 리눅스가 포팅되기에 오디오나 비디오 코덱 적용이 어렵지 않다. 하지만 아직도 펌웨어로 오디오 코덱을 개발해야 하는 경우도 있고, MP3를 재생하기 위해 Helix MP3 Decoder를 포팅하여 사용했다. https://github.com/ultraembedded/libhelix-mp3 포팅방법에 대해서는 그다지 복잡하지 않고, 인터넷에 샘플 소스가 많아 찾기 어렵지 않으며 http://ww1.microchip.com/downloads/en/Appnotes/01367A.pdf https://www.silabs.com/documents/public/application-notes/an1112-efm32-helix-mp3-decoder.pdf문서들을 참조하면 좋다. 또 MP3 대한.. 2022. 1. 18.
ambiq micro Apollo3 Blue의 Ctimer와 Stimer 그리고 오버플로우 타이머 테스트 ambiq micro의 Apollo 시리즈 CPU는 좀 독특한 면이 있다. 내가 아는 MUC들은 사용자 개발제품에 맞게 쓸 수 있도록 다양한 메모리, GPIO를 가진 제품 종류가 많은데 Apollo는 그냥 단일 제품으로 몇종류가 되지 않았다. (물론 내가 아는 MUC는 대부분..ATMEL이나 MicroChip같은 대기업..) 그렇다고 해서 Apollo 칩을 나쁘게 보는건 아니다. 저전력과 BLE통신, 기술지원은 대기업의 제품과 비교될 정도이다. 아무튼 Apollo3 Blue로 개발를 하는 도중 100us단위로 펄스 제어를 해야 하는 경우가 생겼다. 모터 컨트롤과 같이 해야 해서 단순 딜레이 함수로는 구현하면 안 되어서 이 CPU가 어떤 타이머를 지원하는지 데이터 시트를 확인해봤다. 기본적으로 System.. 2021. 10. 4.
펌웨어 강좌 #07 키패드 제어와 고스트 키 안녕하세요 오늘은 펌웨어나 임베디드 기기에서 많이 사용하는 키패드 대해 알아보겠습니다. ​ 보통 버튼 하나당 io핀을 하나씩 연결하나 키보드처럼 버튼이 많아 지면 매트릭스 구조로 해서 핀 부족문제를 해결합니다. 아래 그림과 같이 출력 A,B,C,D 핀으로 스캔을 하면서 키가 눌러지면 특정키로 지정하면서 처리가 가능합니다. 하지만 아래처럼 특정 키의 다중 입력 시, 고스트 키라고 누르지도 않았는데 눌러진 것으로 인식되는 현상이 있습니다. 자세한 내용은 아래 영상으로 확인해 주세요. 감사합니다. 2021. 9. 18.
[펌웨어] 키패드 다중 키 처리에 대한 이야기 펌웨어로 키패드 프로그램을 만들 때가 많다. 키 패드를 사용하는 제품은 눌러진 키를 어플리케이션 단에 전달을 해야 하는데 하나만 눌러진 경우와 멀티 키가 눌러진 경우에 따라 처리가 달라지곤 한다. 조건 없이 눌러진 키들을 그냥 전달만 해야 하는 경우는 어려운 것이 없으나, 직접 하드웨어를 컨트롤하는 (호이스트나 모터를 제어하는) 경우에는 키 패드에서도 멀티 키, 다중 키에 대해 처리가 필요하다. 2개 이상 눌러진 경우, 무시 보통 키 패드는 매크릭스 구조로 되어 있는데, 2개 이상 눌러진 경우 보내지 않는 조건으로 어플리케이션이 설계되어 있다면 어려울 것이 없다. 눌러진 키값이 여러 개이면 안 보내면 되기 때문이다. 특정 패턴의 키가 눌러지는 경우만 무시 모터를 제어하는 경우, 반대되는 키들의 조합이 눌.. 2021. 9. 1.
[C언어/API] 변수의 비트 수 체크하기 C언어 함수 중 필요한 것들을 정리해서 올려보려 합니다. ​ 이번 함수는 변수 내에 있는 비트 수를 체크하는 함수입니다. ​ 변수 A에 0x03 값이 들어 있는 경우, 이진수로 표현 시 0000 0011 = 0x03 위와 같습니다. 1로 써진 비트 수는 2개이고, 비트 연산을 많이 쓰는 경우 비트 개수를 체크할 때가 많습니다. ​ 예를 들면 여러 스위치의 값이 변수 1개에 각 비트별로 OR 처리하는 경우, 1번 스위치는 0번 비트 자리에 2번 스위치는 1번 비트 자리에 들어가도록 OR를 하면 몇 개의 스위치가 눌러졌는지 체크하는 일이 있습니다. ​ 비록 최적화는 신경 쓴 소스는 아니지만 코딩에 많은 도움이 되었으면 합니다. //해당 데이타에 비트 '1'이 2개이상이면 TRUE, 1개 이하면 FALSE u.. 2021. 8. 1.
[C언어/API] 버튼 입력 채터링 관련한 팁 펌웨어나 GPIO 관련한 프로그램을 짤 때, 스위치나 버튼 관련된 입력이 생각보다 힘든 부분이 있다. 출력은 한 번만 하면 되지만, 사용자의 입력을 받는 입력은 노이즈가 튈 가능성이 있기 때문이다. (빠르게 누르고 땐다거나, 마구 누르거나 보드 자체 노이즈가 들어가거나...) 그래서 입력을 처리할 때는 채터링 또는 디바운스라해서 단순히 한 번만 핀/포트 읽는 것으로 처리하지 않고 수차례 읽어서 처리하곤 한다. for(cnt=0,i=0;i 7) BUTTON_IN = 1; else BUTTON_IN = 0; 보통 위와 같이 심플하게 여러 번 읽어서 처리하는데, 이는 제품마다 편차가 있을 수도 있어서 튜닝을 해야 하는 코드이다. 또, 입력이 여러 개인 경우, 그만큼 처리가 복잡해지기도 한다. 내가 작업했던 어.. 2021. 8. 1.