아트메가/이론 25

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

ATMEGA128 SPI통신 알아보기 2편

안녕하세요. 1편에 이어서 ATMEGA SPI통신 READ를 구현해보겠습니다. 1편에서는 SPI세팅과 SPI WRITE를 했었습니다 (1편:https://wowon.tistory.com/277) SPI에서 마스터가 슬레이브에게 READ를 하려면 클럭을 흔들어야하는데 클럭은 마스터만 흔들 수 있습니다. 그래서 SPI통신은 WRITE를할때 READ를 같이 합니다. 그래서 READ를 하려면 의미없는 값을 WRITE하면 됩니다. 일반적으로 슬레이브(센서)를 READ를 할때 아래의 방식으로 합니다 1) 마스터가 슬레이브에게 특정값 WRITE함 2) 슬레이브는 특정값에 맞는 데이터를 준비해놓음 3) 마스터가 슬레이브에게 의미없는값을 WRITE함 4) 슬레이브는 특정값을 줌 READ해야하는 레지스터는 SPDR입니다...

아트메가/이론 2023.02.19

ATMEGA128 SPI통신 알아보기 1편

안녕하세요. 오늘은 ATMEGA128로 SPI통신에대해 알아보겠습니다. 이 글에서는 SPI통신 WRITE만 알아보고 실제로 8*8 dot matrix(MAX7219사용)을 제어해보겠습니다 기본적인 SPI개념은 아래 글 참조바랍니다 https://wowon.tistory.com/231 SPI통신 아두이노와 오실로스코프로 확인해보기 1편 안녕하세요. 오늘은 SPI통신에 대해 알아보겠습니다. SPI란 Serial Peripheral Interface의 약자입니다. 특징으로는 데이터를 동시에 보내고 받을 수 있는 전이중 모드를 지원하는 동기식 직렬 통신 인터 wowon.tistory.com https://wowon.tistory.com/276 SPI통신 아두이노와 오실로스코프로 확인해보기 2편 안녕하세요. 오늘..

아트메가/이론 2023.02.05

ATMEGA128 UART 수신인터럽트 발생하는 시점

안녕하세요. 오늘은 ATMEGA128 UART 수신 인터럽트 함수가 호출되는 시점이 언제인지 알아보겠습니다. RX 핀이 HIGH로 유지하고 있다가 UART를 수신하면 인터럽트가 뜨는데 수신 인터럽트가 뜨는 시점이 HIGH -> LOW 될 때 바로인지, STOP bit 수신했을 때인지 알아보는 내용입니다. 수신인터럽트는 아래의 함수입니다. ISR(USART0_RX_vect) 테스트방법은 수신인터럽트가 발생하면 포트1개를 LOW->HIGH로 바꾸는 시간을 측정하겠습니다 UART 세팅은 115200bps, 8bit, 1stop bit, no parity입니다. 그러므로 총 10비트이고 1비트당 8.68us고 10비트면 86.8입니다. 데이터를 보내고나서 87.664us후에 수신인터럽트가 발생했습니다. 10비트..

아트메가/이론 2023.01.08

ATMEGA128 TWI(I2C)통신 알아보기 3편

안녕하세요. 오늘은 ATMEGA128 TWI READ를 해보겠습니다 READ를 알아보기전에 먼저 알아야 할게 있습니다. 어떤 모듈에게 데이터를 WRITE/READ를 하려면 먼저 그 모듈의 메모리주소에 접근해야하고 접근하려면 WRITE를 해야합니다. 그래서 WRITE를 하고 READ를 하면 데이터를 읽을 수 있습니다. *READ하기 Read통신하는 순서가 있습니다. 순서를 크게보면 슬레이브 주소를 전송하고 슬레이브가 응답했으면 데이터를 Read하고 통신을 끝냅니다. - 순서 0) WRITE과정하기(ATMEGA128 TWI(I2C)통신 알아보기 2편 참고) 1) START신호 전송 2) START신호 전송완료했나 확인 3) 슬레이브 주소 전송(7bit) + READ전송( Write : 0, Read : 1)..

아트메가/이론 2022.09.13

ATMEGA128 TWI(I2C)통신 알아보기 2편

안녕하세요. 오늘은 TWI통신의 Write에 대해 알아보겠습니다. * 초기세팅하기 - 통신속도설정 일단 초기세팅으로 통신속도를 설정해줘야 합니다. 통신속도는 일반적으로 100kHz로 설정을 하고 10us입니다 위의 파형은 클럭 파형이고 100kHz로 설정한 모습입니다. 주기가 10us인것을 볼 수 있습니다. 속도를 구하는 공식인데 CPU Clock frequency는 16mHz이고 TWBR과 TWPS는 아트메가 레지스터입니다 TWBR = 0x48;, TWSR = 0x00;을 넣으면 100kHz가 나옵니다 - 풀업저항설정 SDA,SCL라인에 풀업저항을 연결해줘야 합니다. 데이터시트에 풀업저항권장 사양이 나와있는 경우도 있습니다. 일반적으로 10k옴을 연결합니다. 풀업저항에 따라서 파형의 기울기가 변합니다...

아트메가/이론 2022.09.11

ATMEGA128 TWI(I2C)통신 알아보기 1편

안녕하세요. 오늘은 TWI 통신에 대해 알아보겠습니다. *TWI통신이란 TWI통신이란 Two Wire Interface이고 I2C통신과 같습니다. 선 2개로 통신을 하므로 편리하고 많이 사용됩니다. 선2개의 이름은 각각 SDA, SCL이라고 부릅니다. *SDA/SCL 데이터 읽는방법 SDA는 Serial Data이고 SCL은 Serial Clock입니다. SDA가 실제 데이터이고 SCL은 클럭입니다. HIGH와 LOW로 데이터를 전달합니다. 기본적으로 SDA는 SCL이 LOW일때 상태를 변경하고 SCL이 HIGH일때는 SDA이 변하지 않습니다. 그래서 SCL이 HIGH일때 값을 읽습니다 위의 그림처럼 데이터가 0b10001이 됩니다 이러한 과정은 출력을 HIGH/LOW를 계속 변경해가면서 만들수도 있는데..

아트메가/이론 2022.09.10

아트메가128 타이머/카운터0 주파수 알아보기

안녕하세요. 오늘은 타이머/카운터0 주파수에 대해 알아보겠습니다. 주파수(frequency)란 단위 시간 내에 몇 개의 주기나 파형이 반복되었는가를 나타내는 수를 말합니다. 예를들어 16Mhz라면 1초에 1600만번 파형이 반복되었다는 뜻 입니다. 타이머/카운터0에 CTC모드, Fast PWM모드, Phase Correct PWM모드에서 나오는 OC0의 파형이 다릅니다. 이 파형의 주파수를 구할 수 있습니다. 각 모드의 공식과 예시를 알아보겠습니다. CTC모드 N=프리스케일러의 분주비 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include #include #include #include #include #define F_CPU 16000000UL int ma..

아트메가/이론 2017.10.01

아트메가128 타이머/카운터0 Phase Correct PWM모드 알아보기

안녕하세요 오늘은 Phase Correct PWM (위상 교정 PWM) 모드에 대해 알아보겠습니다.이 모드는 TCNT0이 0x00에서 0xff까지 증가하였다가 다시 0xff에서 0x00으로 감소하는 동작을 반복합니다.이때 TCNT0이 OCR0과 같아지면 OC0의 파형이 변합니다.Phase Correct PWM모드는 잘 사용하지 않는 모드이므로 CTC모드와 FAST PWM모드를 안다는 전재하에 글을 작성합니다. TCCR0레지스터중 3,6번비트 COM01 COM00이 10일때 내려갈때 1 올라갈때 0 인것을 확인할 수 있습니다. TCCR0의 4,5번비트 12345678910111213141516171819202122232425#include #include #include #include #include #..

아트메가/이론 2017.09.30