아트메가 58

ATMEGA32U4 breakout-보드 사용하기 8편(PCB제작)

안녕하세요. 오늘은 이전에 만들었던기능을 테스트할수있는 PCB보드를 만들어보겠습니다. 보드의 주된 목적은 i2c 통신을 사용하는 장비를 연결하여 cli 기능을 이용해서 손쉽게 i2c 테스트를 하는 것입니다.GPIO에 LED를 3개와 버튼 2개를 연결했습니다. 그리고 I2C라인, UART라인 , JTAG라인은 따로 뺐습니다. I2C/UART의 소켓을 여러개 연결한 이유는 파형을 측정하기위함입니다.예상했던 부품배치는 아래와 같습니다. 그러나 UART장비의 VCC, GND를 반대로 그려놔서 UART장비는 점퍼케이블을 이용해서 사용해야합니다. I2C소켓부분이 두곳인데 하나는 GND/VCC/SCL/SDA순서고 하나는 VCC/GND/SCL/SDA순서입니다. 두개를 다르게 해놓은 이유는 제가 가지고있는 LCD들의 핀..

ATMEGA32U4 breakout-보드 사용하기 7편(External Interrupt)

안녕하세요. 오늘은 기존의 프로젝트에서 External Interrupt를 사용해보겠습니다.ATMEGA32u4에는 5개의 외부인터럽트가 있습니다.기존의 프로젝트에서는 PD0~PD3을 이미 다른기능으로 사용중이고 PE6은 사용하지않고있으므로 PE6을 외부인터럽트로 사용하겠습니다.초기세팅을 Falling edge로 했고 Port의 상태는 HIGH로 해놨습니다.EICRB 레지스터로 외부인터럽트 발생조건을 바꿀때 EIMSK를 disable해놔야 예상치못한 인터럽트가 안뜬다고해서 EICRB레지스터를 설정할때는 EIMSK를 disable 상태로 했습니다. 또한 cli로 인터럽트발생조건(low/both/falling/rising)을 바꿀수있게해서 디버깅할때 조건을 바꿀수있게 했습니다.#include "int.h"#i..

ATMEGA32U4 breakout-보드 사용하기 6편(SSD1306)

안녕하세요. 오늘은 기존의 프로젝트에서 SSD1306를 사용해보겠습니다. SSD1306은 다양한 통신인터페이스를 지원하는데 이 글에서는 I2C를 이용하겠습니다. (참고한 소스코드 : https://github.com/elo1957/OLED-ssd1306-atmega/tree/master) SSD1306은 128x64 Dot matrix panel입니다. 이 글에서는 가로 8bit 세로8bit를 이용해서 한글자를 만들것이므로 한줄당 글자는 최대 16글자, 줄은 8줄이 됩니다. 기본적인 SSD1306 동작하는방식을 알아보겠습니다. I2C Write통신 데이터포맷입니다. slave address - control byte - data byte 포맷으로 보내면 됩니다. SSD1306은 read는 사용하지않습니다..

ATMEGA32U4 breakout-보드 사용하기 5편(I2C)

안녕하세요. 오늘은 기존의 프로젝트에 I2C기능을 추가하겠습니다. 기본적인 I2C기능은 아래의링크 참고바랍니다 1) ATMEGA128 TWI(I2C)통신 알아보기 1편 2) ATMEGA128 TWI(I2C)통신 알아보기 2편 3) ATMEGA128 TWI(I2C)통신 알아보기 3편 위에 적은 I2C글에서는 write / read함수 하나에 start, address write, data write등등 기능들을 함수 하나에 넣어놨는데 이번에는 이런 기능들을 분리해서 함수로 구현하고 write, read함수에서 사용하는 형식으로 하겠습니다 void i2cInit() { PORTD |= 0x03; // SDA,SCL pull-up setting PD0: SCL, PD1: SDA TWBR = 0x48; /* S..

ATMEGA32U4 breakout-보드 사용하기 4편(CLI)

안녕하세요. 오늘은 기존의 프로젝트에 CLI기능을 추가하겠습니다. CLI란 Command Line Interface의 약자이고 명령어를 입력해서 장치의 동작을 제어하고 상태를 모니터링할 수 있는 방법을 의미합니다. 해당 프로젝트는 이미 UART로 송수신기능이 구현되어있으므로 UART로 CLI기능을 추가하겠습니다. 이미 구현되어있는 CLI코드가 있으므로 해당 코드를 이 프로젝트에 옮겨서 사용하겠습니다. 해당코드는 UART통신할때 Write/Read하는 함수만 CLI코드에 동작가능하게 넣으면 되므로 다른 프로젝트에도 적용이 매우 쉽습니다. 그래서 해당코드를 설명하는 방식으로 적겠습니다. 코드 출처 : https://github.com/chcbaram/stm32wb55-ble/tree/main/firmware..

ATMEGA32U4 breakout-보드 사용하기 3편(USB CDC)

안녕하세요. 오늘은 기존의 프로젝트에 USB CDC를 추가해보겠습니다. CDC는 Communication Device Class를 의미합니다. UART통신과처럼 시리얼포트가 잡히고 터미널프로그램을 이용해서 데이터를 송수신합니다. USB CDC를 사용하면 UART JIG를 사용하지않아도 되므로 편리합니다. ATMEGA32u4 breakout보드는 USB커넥터에 D+, D-가 연결되어 있습니다. 그리고 USB 2.0을 지원합니다. *일반적인 USB CDC 통신 순서 1. USB ENABLE 및 기본 세팅 2. Endpoint 데이터 송수신코드 작성 3. HOST에 연결했을때 셋업EP에 응답하는 표준 디스크립터 작성 4. 셋업 EP로 오는 CDC CLASS에 관한 디스크립터 작성 5. 셋업 EP로 오는 디바이..

ATMEGA32U4 breakout-보드 사용하기 2편(프로젝트 구조&UART)

안녕하세요. 오늘은 프로젝트 구조와 UART에 대해 알아보겠습니다 먼저 inc폴더와 source 폴더를 만들었습니다. inc폴더는 헤더파일을 넣고 source폴더에는 c파일을 넣었습니다. 각 모듈들은 하나의 헤더파일과 소스파일로 나눴습니다. def.h파일은 모든 파일이 공통적으로 사용하는 define을 넣어놨습니다. MICROCHIP STUDIO에서 폴더를 빌드에 포함시키는법은 툴체인-> 디렉토리에서 추가하면 됩니다. *UART (레지스터에 대한 설명은 블로그내에 있는 다른 UART글 참고 바랍니다) https://wowon.tistory.com/269 UART통신 알아보기 안녕하세요. 오늘은 UART통신에 대해 알아보겠습니다. UART통신은 전송(TX)/수신(RX) 핀이 각각있고 핀이 HIGH / LO..

ATMEGA32U4 breakout-보드 사용하기 1편(avrdude사용)

안녕하세요. 오늘은 ATMEGA32U4 breakout 보드를 사용해보겠습니다 해당보드는 sparkfun에서 만든보드고 특징으로는 USB인터페이스가 있으므로 ISP장비가 없어도 펌웨어를 다운로드 가능합니다. https://www.sparkfun.com/products/retired/11117 ATMEGA32U4는 아두이노 레오나르도보드에 사용됩니다. ATMEGA32U4는 USB 인터페이스를 제공하므로 아두이노 레오나르도보드가 펌웨어를 다운받을때 별도의 장비가 필요없습니다. 많이 사용하는 아두이노 우노는 ATMEGA328p을 사용하고 해당 MCU는 USB인터페이스를 지원하지않으므로 아두이노우노에는 ATMGEA16u2가 들어가있어서 펌웨어를 다운로드하게 해줍니다. 아두이노 IDE는 펌웨어를 다운로드할때 av..

ATMEGA128을 STM32코드 형식(HAL 라이브러리) 으로 바꾸기

안녕하세요. 오늘은 ATMEGA128코드를 STM32 코드 형식(HAL 라이브러리)으로 바꿔보겠습니다. 먼저 "아트메가/이론 ATMEGA128 주솟값으로 제어하기" 글 참고바랍니다. https://wowon.tistory.com/280 GPIO A,B,C출력/입력만 테스트 해보겠습니다. 먼저 제어할 레지스터가 PORT, DDR, PIN입니다. 데이터들은 1바이트씩이고 PIN다음에 DDR이 나오고 다음에 PORT가 나옵니다. 먼저 GPIO 주소의 시작점을 define해줍니다. #define GPIOA_BASE (0x39) #define GPIOB_BASE (0x36) #define GPIOC_BASE (0x33) 그리고나서 PIN,DDR,PORT 구조체를 만듭니다 typedef struct { volati..

아트메가/이론 2023.03.01

ATMEGA128 주솟값으로 제어하기

안녕하세요. 오늘은 ATMEGA128의 PORTA를 데이터시트에 나와있는 주솟값으로 제어해보겠습니다. 주솟값으로 제어하는 테스트를 하는 이유는 다른 32bit mcu를 사용할 때 (STM,NXP등등) 주솟값으로 제어하는 방법을 알면 좋아서 먼저 비교적 간단한 8bit mcu인 ATMEGA로 해보겠습니다. 목표는 DDRA와 PORTA를 사용하지 않고 데이터시트에 나와있는 주소로 DDRA와 PORTA를 제어하는 것입니다. 먼저 DDRA 선언을 따라가보겠습니다. #define DDRA_SFR_IO8(0x1A) #define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET) #define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *..

아트메가/이론 2023.02.25