기존에 사용하던... spi통신을 이용한 adc 칩(max1168)이 재고가 없어서
MCP3426을 테스트 해보았다.

16비트 adc 분해능을 가지며 샘플속도는 분해능에 따라 달라지는듯 하다.
그럼 이제 i2c 통신을 해보자
1. 주소
i2c 통신을 위한 device의 주소는 하기와 같다
device 주소 : 0b01101000 = 0x68

2. 설정레지스터
설정 레지스터 값 : 0b10001000
ch1번이며, 16bit의 분해능, gain은 *1로 하였다.

하기 자료를 보면,
첫 바이트는 주소
두번째 바이트 상위 바이트
세번째 바이트 하위 바이트
이렇게 통신이 되는것 같은데...

실제로 통신을 할 때
첫 바이트는 주소
두번째 바이트 설정 레지스터
세번째 바이트 상위 바이트
네번째 바이트 하위 바이트
이렇게 통신을 해야 데이터가 읽어졌다...
stm32 에서 코드는 하기와 같이 하였다.

위 코드를 보면 mcp3426의 주소가 0xD0로 되어있는데,
이는... 오실로스코프를 찍어본 결과...
HAL_I2C_Mem_Read 라이브러리 에서는 주소를 입력했을 때 read 비트 없이 보낸다 그래서
기기의 주소 0b01101000 = 0x68를 왼쪽으로 하나 쉬프트하고 read bit가 포함된 0b11010000 = 0xD0를 입력했다.
하기는 오실로 스코프 측정 결과 나타나는 파형이다.

첫 바이트는 디바이스 주소와 read bit 0b11010000
두번째 바이트는 configration resitor 0b10001000
세번째 네번째 바이트는 각각 Upper data byte, lower data byte 이다.
참고로 -2.048~2.048V 까지 측정이 가능하다!!
아래는 회로 설계 할 때!!

하나더 팁을 넣자면... i2c 통신이든 spi 통신이든 처음 공부를 한다면, 오실로 스코프로 찍어보면서 파형을 확인하면서 공부하시길 바랍니다.
자료로 쓰기에 많이 부족해 보이지만... 너무 피곤해서 여기까지 작성합니다.
혹시나 누군가 보시고 미흡하거나 혹은 궁금한점이 있다면 댓글 부탁드립니다.
'임베디드 > STM32' 카테고리의 다른 글
| stm32f asm("nop")을 활용한 MicroSecond Delay 만들기 (0) | 2022.10.22 |
|---|---|
| stm32f Systick을 활용한 MicroSecond Delay 만들기 (0) | 2022.10.22 |