전체 글 272

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

SPI통신 아두이노와 오실로스코프로 확인해보기 2편

안녕하세요. 오늘은 SPI통신을 알아보는 2편입니다. 1편: https://wowon.tistory.com/231 참고사항 (ARDUINO UNO기준) MOSI (SDI) : 11번핀 MISO (SDO) : 12번핀 CLOCK : 13번핀 SS (CS) : 10번핀(or 사용자 지정) SPI통신은 SS핀을 LOW로 설정한다음에 MOSI핀과 CLOCK핀을 흔들면 됩니다. CLOCK은 8번 흔들리고 MOSI핀도 8번 흔들립니다 위의 사진은 SPI속도 200Mhz, MSBFIRST, 0x64(100)전송한 파형입니다. 속도가 200Mhz설정했으므로 1클럭의 속도는 5ns입니다. 0x64 = 0b 0110 0100입니다. MSBFIRST이므로 위와같이 파형이 나왔고, LSBFIRST면 아래처럼 나옵니다. 기본은..

아두이노/이론 2023.01.31

STM32로 DS1302제어하기(3편)

안녕하세요. 2편에서 단순히 초만 읽었는데, 3편에서는 시간,분,초를 설정하고 시간, 분, 초를 읽어보겠습니다 -읽기 void readTime(uint8_t *time) { //array : 0: seconds, 1: minutes, 2: hours //seconds read HAL_GPIO_WritePin(CE_GPIO_Port, CE_Pin, 1); commandWrite(SCLK_GPIO_Port, SCLK_Pin, I_O_GPIO_Port, I_O_Pin, 0x81); time[0] = commandRead(SCLK_GPIO_Port, SCLK_Pin, I_O_GPIO_Port, I_O_Pin); HAL_GPIO_WritePin(CE_GPIO_Port, CE_Pin, 0); // minutes r..

STM32/활용 2023.01.24

MCU GPIO 전류 측정하기

안녕하세요. 오늘은 MCU GPIO 전류를 측정해보겠습니다 사용하는 보드는 nucleo-f103rb(STM32F103RB)입니다. 측정방식 측정방식은 아래의 그림처럼 멀티미터를 이용해서 측정합니다. 이 경우 멀티미터에는 3.3mA가 측정됩니다 회로에 pull-down, pull-up일때 GPIO의 설정을 변경하고 전류를 측정하겠습니다. 저항은 1kΩ을 사용했습니다 pull-down인 경우 먼저 INPUT일때 측정되는 소비전류입니다. 1,3번인경우 전압이 없으므로 0A가 나옵니다. 2번에서 pull up일때는 85uA가 측정됩니다. pull-up 이므로 위의 회로처럼 됩니다. 이때 내부풀업의 저항값을 구해보면 3.3=0.000085(1000+R)이므로 약R=37.8kΩ입니다. 데이터시트에도 40kΩ로 나와..

MCU지식 2023.01.23

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

STM32로 DS1302제어하기(2편)

안녕하세요. 오늘은 DS1302에 이전에썻던 1편에 이어서 2편을 쓰겠습니다. 1편에서는 MCU랑 DS1302랑 통신을 하기위한 과정을 적었고 2편에서는 실제로 해보겠습니다 첫 번째로 DS1302로부터 '초'단위만 읽어서 시리얼모니터로 값을 확인해보겠습니다. 사용하는 MCU는 NUCLEO-F103RB 입니다. 먼저 GPIO설정을 해줍니다. DS1302랑 통신하기위해서는 IO포트 3개가 필요합니다. 그 다음에 DS1302를 write/read하기위해서 데이터시트에 나와있는 파형에 맞게 코드를 작성해줍니다 먼저 write 부터 알아보겠습니다 초기상태 CE핀 : LOW SCK핀 : LOW IO핀 : 사용자설정 * Write 1. CE핀 -> HIGH세팅 2. I_O핀 = OUTPUT 설정 3. I_O핀 -> ..

STM32/활용 2023.01.07

STM32로 DS1302제어하기(1편)

안녕하세요. 오늘은 STM MCU로 DS1302를 제어하는 글을 쓰겠습니다. 여기서 STM MCU를 사용하지만 GPIO를 제어해서 통신하므로 STM이나 ATMEGA나 아두이노나 다른 MCU를 사용하던 방식은 모두 같습니다. 그래서 님이 MCU를 STM를 사용하지 않더라도 이 글을 봐도 됩니다. STM MCU는 NUCLEO-F103RB를 사용합니다. DS1302는 2017년도에 아두이노로 제어하는 글을 쓴 적이 있어서 DS1302에 대해서는 이전에 썼던 글을 참고하면 좋습니다. 또한 DS1302보드도 옛날에 사용했던 보드로 사용합니다. https://wowon.tistory.com/92 이제 STM32로 DS1302를 제어해야하므로 데이터시트를 자세히 봐야합니다. 첫 번째로 DS1302로부터 '초'단위만 ..

STM32/활용 2023.01.04

아두이노 shiftOut함수 알아보기

안녕하세요. 오늘은 아두이노에있는 shiftOut함수에 대해 알아보겠습니다. shiftOut함수는 1바이트가 있으면 1바이트를 8비트로 쪼개서 HIGH/LOW로 출력해줍니다. HIGH/LOW로 출력할때 clock도 같이 보내줍니다. 예를들어 0x44를 shiftOut함수 태우면 HIGH/LOW로 01000100(MSB FIRST) or 00100010(LSB FIRST)가 나옵니다. 위의 파형은 0x44를 shiftOut함수를 태운 01000100(MSB FIRST) 입니다. 파형만 봐서는 01000100인지 00100010인지 구분이 안됩니다. 그래서 HIGH / LOW마다 clock을 같이 출력해줍니다 clock가 표시가되므로 01000100이란걸 알 수 있습니다 함수 void shiftOut(uin..

아두이노/이론 2022.12.26

UART통신 알아보기

안녕하세요. 오늘은 UART통신에 대해 알아보겠습니다. UART통신은 전송(TX)/수신(RX) 핀이 각각있고 핀이 HIGH / LOW로 변하면서 통신을 합니다. 핀이 HIGH/LOW로 변하는 시간을 가지고 데이터를 판단합니다. - Baud rate 시간은 Baud rate값으로 세팅합니다. Baud rate단위는 bps(bits per second)이고 초당 비트 수 입니다. 예를들어 Baud rate가 9600이라면 1초에 9600bit를 보냅니다. 1초에 9600bit면 1bit는 104us입니다. 위의 사진에서 HIGH/LOW가 변하는걸 1bit로 봅니다. 9600bps에서는 1bit가 104us인 모습입니다. - 패킷 구조 START하기: UART통신핀의 상태는 기본적으로 HIGH입니다. 그래서 ..

MCU지식 2022.12.24