ATmega328P 기초: 아두이노 없이 시작하기

Ari Mahpour
|  작성 날짜: 오월 29, 2024
ATmega328P 기본 사항: 아두이노 없이 시작하기

저는 꽤 오랜 시간 동안 Arduino Uno 보드를 사용해 왔으며, 많은 기사의 예로도 사용했습니다. 오래된 Uno 보드에 사용된 원래 칩인 ATmega328P를 완전히 독립적으로 작동시키는 데 필요한 것이 무엇인지 항상 궁금했습니다. Arduino가 부트로더, 멋진 GUI 소프트웨어, C++ 추상화를 통해 접근성을 높여주기 때문에, 왜 이런 시도를 하고 싶을까 궁금할 수 있습니다. 때로는 다른 사람들이 한 일을 진정으로 감사하려면 직접 해보는 것이 중요합니다. 이 프로젝트는 Arduino 팀이 이 작업에 얼마나 많은 노력을 기울였으며 그 친근한 작은 제품으로 세상을 바꾼 것을 정말로 보여주었습니다.

이 글에서는 외부 전원 공급원과 Atmel-ICE 프로그래머만을 사용하여 칩을 완전히 독립적으로 구동하는 방법을 살펴보겠습니다. 칩과의 통신 방법을 보여주고 LED를 하나 또는 두 개 깜박이는 방법도 시연할 것입니다.

환경 설정

ATmega328P를 구성하는 몇 가지 방법이 있습니다. 제목에서 알 수 있듯이 의도적으로 다루지 않은 한 가지 방법은 ATmega328P 칩을 Arduino Uno에 넣고 프로그래밍한 다음 빵판으로 옮기는 것입니다. 포럼에서 피드백을 바탕으로 일부 사람들은 Arduino 과정을 건너뛰고 Microchip의 Atmel-ICE와 같은 전통적인 접근 방식을 사용하고 싶어합니다. Microchip(이전의 Atmel) 마이크로프로세서로 시작하는 가장 간단한 방법은 Microchip Studio를 설치하는 것입니다. 이 글을 쓰는 시점에서 Microchip Studio 전체 스위트는 Windows에서만 지원됩니다. 저는 모든 빌드 환경을 CI(지속적 통합)에서 실행하고 싶어서 대안적인 접근 방식을 선택했습니다.

GNU Compiler Collection (GCC)은 C 언어에 대한 가장 인기 있는 컴파일러 중 하나입니다. 특정 플랫폼과 아키텍처를 컴파일하지만 AVR (ATmega) 칩 계열에는 해당되지 않습니다. 그러나 AVR 및 기타 Microchip 계열에 대한 컴파일러 세트가 그들의 웹사이트에 호스팅되어 있습니다. 다행히도, 일부 친절한 사람들이 이 컴파일러를 Debian 패키지로 포장하여 Debian이나 Ubuntu에서 쉽게 설치할 수 있습니다:

$ apt-get install gcc-avr binutils-avr avr-libc avrdude

이 도구들을 설치하면 이제 Atmel-ICE 프로그래머와 외부 전원 공급장치(5V로 설정)만으로 ATmega328P를 컴파일하고 프로그래밍할 수 있습니다. 코드를 컴파일하기 위해 AVR 버전의 GCC를 사용하고 ATmega328P 칩을 플래시하기 위해 AVRDUDE를 사용할 것입니다.

프로젝트

이 프로젝트의 목표는 ATmega328P의 몇 가지 기본적이지만 기능적인 기능을 시연하는 것이었습니다. 간단한 외부 깜박이 LED와 몇 가지 직렬 명령어의 왕복만으로 이 칩이 스스로 설 수 있음을 증명하는 것이 필요했습니다. 프로젝트의 저장소에서는 소스 코드("src"라고 명명됨) 외에도 이 프로젝트의 개발을 돕는 몇 개의 폴더를 만들었습니다.

소프트웨어 개발(하드웨어에 탑재되는 소프트웨어 포함)에 있어 중요한 구성 요소는 단위 테스트입니다. 단위 테스트는 더 큰 시스템의 함수나 부분들이 예상대로 작동하는지를 검증합니다. 만약 누군가가 그 기능의 일부를 수정한다면, 단위 테스트는 회귀(regressions)를 방지할 것입니다(즉, 새로운 기능을 도입하면서 의도치 않게 다른 것을 망가뜨렸습니다). 이 예에서 저는 하드웨어를 모의하고 시리얼 통신 라이브러리(USART)의 초기화 스킴을 실행하는 기본 단위 테스트를 작성했습니다.

단위 테스트("tests" 폴더에 위치) 외에도 "hil"이라는 폴더가 있는데, 이는 Hardware in the Loop의 약자입니다. 이 폴더에는 실제 하드웨어를 루프에 넣고 테스트를 실행하는 데 필요한 스크립트가 포함되어 있습니다(제 이전 기사에서 여러 번 논의한 바와 같이). 이는 내 코드가 가상 세계(모의를 사용하여)뿐만 아니라 실제 하드웨어에서 테스트를 실행함으로써 실제 세계에서도 기능적임을 보장합니다.

README.md를 참조하면 Atmel-ICE 프로그래머를 ATmega328P 칩에 연결하기 위한 핀아웃 다이어그램을 제공합니다:

Atmel ICE 핀아웃

그림 1: Atmel ICE 핀아웃

몇 개의 LED를 추가하고, 시리얼 통신 포트를 라즈베리 파이에 연결하고, 라즈베리 파이의 +5V 라인을 선택하면 이제 완전한 조립체가 준비됩니다:

라즈베리 파이 브레이크아웃 보드

그림 2: 라즈베리 파이와 Atmel-ICE 프로그래머를 사용한 ATmega328P 브레이크아웃 보드

테스팅, 컴파일링, 그리고 더 많은 테스팅

새로운 기능을 개발함에 따라, Makefile을 사용하여 단위 테스트를 실행하고 코드를 컴파일하세요. 원하는 코드가 의도한 대로 작동하는지(단위 테스트 검증을 통해) 확인한 후, 바이너리를 빌드하고, Makefile을 통해 장치에 플래시하고, 라즈베리 파이의 시리얼 통신 포트를 사용하여 Hardware in the Loop (HIL) 테스팅을 실행하세요.

가장 중요한 부분 중 하나는 내부 8 MHz 클록을 활성화하기 위해 퓨즈 비트를 올바르게 플래싱하는 것입니다. 이는 README에 문서화되어 있지만 Makefile의 플래싱 명령에도 추가되었습니다:

avrdude -c atmelice_isp -p m328p -B 32 -U lfuse:w:0xe2:m

그 후에는, 메인.c의 상단에서 정의한 대로 온보드 클록이 8 MHz에서 실행된다고 가정하고 칩의 시리얼 인터페이스를 사용할 수 있어야 합니다. 여기서부터 추가적인 시리얼 명령, 외부 구성 요소 및 센서에 대한 인터페이스, 이 재미있는 작은 마이크로컨트롤러로 생각할 수 있는 모든 것을 추가할 수 있습니다.

결론

TRANSLATE:

이 기사에서는 원래 Arduino Unos와 Microchip 평가 보드에서 흔히 볼 수 있는 외부 회로 없이 ATmega328P 칩을 시작하는 방법을 배웠습니다. 이제 단위 테스트, 바이너리 빌드, 칩 플래싱, 하드웨어 인 루프 테스팅을 실행하는 개념을 알게 되었습니다. 또한, 내부 클록을 8 MHz로 설정하기 위해 퓨즈 비트를 프로그래밍하는 것에 대한 중요한 세부 사항이 있었는데, 이는 종종 간과됩니다. 이 시점에서 추가 단위 및 HIL 테스트로 더 많은 기능을 추가하고 Atmel-ICE 프로그래머와 외부 5V 공급 장치만으로 모든 것을 실행할 수 있어야 합니다. 간단함을 위해, 전원 공급원과 직렬 통신 기능을 위해 Raspberry Pi를 사용하는 것이 프로세스를 처음부터 끝까지 제어하는 가장 쉬운 방법일 것입니다.

프로젝트의 소스 코드는 여기에서 찾을 수 있습니다:https://gitlab.com/embedded-designs/atmega328p-serial-led-control.

작성자 정보

작성자 정보

Ari is an engineer with broad experience in designing, manufacturing, testing, and integrating electrical, mechanical, and software systems. He is passionate about bringing design, verification, and test engineers together to work as a cohesive unit.

관련 자료

관련 기술 문서

홈으로 돌아가기
Thank you, you are now subscribed to updates.