주의사항
STM32 보드에서 ADS1248를 사용하기 위해 만든 문서입니다.
STM32 보드에 펌웨어를 올리기 위해서는 STLink같은 업로드 툴을 사용하시는게 편합니다.
출력 인피던스나 필터 등은 길이 길어져서 제외하고, 단순히 ADS1248모듈을 사용하기 위한 글입니다.
1. 내 칩 분석
내가 사용할 칩은 STM32F103C8T7라는 칩이다.
이 칩은 72Mhz로 동작하며, ARM M3 코어를 사용한다.
이 칩을 굳이 선정한 이유는 무려 STM32duino 부트로더가 올라간다. (arduino 부트로더)
단, 3.3V 레벨에서 작동하는 칩이라서 사용에 주의를 요한다.
2. 문제의 칩 분석
기본적으로 모든 칩들은 내가 쓰는 보드랑 전압이 맞는지, 신호는 어떻게 보내야하는지, 레지스터를 어떻게 설정해야 하는지 등을 봐야한다. 데이터 시트를 간단하게 봐보도록하자
전원이랑 통신만 보면 대강 이게 사용 가능한 칩인지 아닌지 견적이 나온다.
전원 구성
다행히 전원 구성은 내부에 칩이 있어서 5.5V까지 지원한다. Pass
통신 구조
역시 24bit짜리 괜찮은 칩이라 그런지 SPI를 지원한다. SPI Mode는 사진상에는 없지만 mode 1이다. (CPOL = 0, CPHA =1)
그리고 데이트 시트에 무려 예제 코드가 있는데 하려는 거랑 많은 차이가 있지만, init에 어떤 순서로 초기화 해야되는 알려주는 좋은 정보다.
3. 회로 구성
Application Note를 참고해서 대강 회로 구성을 했다.
어디에 꼿았는지 제대로 보이지 않는데, fritzing 깔아서 다음글에 업데이트할 생각이다.
const int START = 4;
const int CS[] = {
16, 17, 19, 20, 21, 22, 23, 24, 25, 8
};
const int DRDY = 1;
volatile int drdyState = HIGH;
SPIClass SPI_1(1);
SPIClass SPI_2(2);
void setup(){
for(uint8_t i = 0;i<sizeof(CS) / sizeof(CS[0]);i++){
pinMode(CS[i], OUTPUT);
digitalWrite(CS[i], HIGH);
}
pinMode(DRDY, INPUT);
pinMode(START, OUTPUT);
digitalWrite(START, HIGH);
attachInterrupt(DRDY, drdyInterrupt, FALLING);
SPI_1.begin();
SPI_1.setBitOrder(MSBFIRST);
SPI_1.setDataMode(SPI_MODE1);
SPI_1.setClockDivider(SPI_CLOCK_DIV16);
}
void waitforDRDY() {
while (drdyState) {
continue;
}
noInterrupts();
drdyState = HIGH;
interrupts();
}
void drdyInterrupt(){
drdyState = LOW;
}
void loop() {
}