안녕하세요 질문 있습니다.
307
投稿した質問数 19
안녕하세요 기압센서 부분 관련 질문 드립니다.
질문 1)
강의를 보면 10분 50초 부분에 3 bytes를 받아서
상위 두 bytes를 shift하고 bitwise OR연산을 한다고 하는데 강의 뒷 부분의 실제 코드에는 그러한 연산을 하는 부분이 없는거 같은데 어느 함수 부분에서 그러한 연산을 하나요??
질문 2)
10분 23초 부분에 EN_LPFP와 LPFP_CFG 를 각가 1로 설정해야 된다고 되어 있는데 코드 어느 부분에서 그러한 설정을 하나요??
回答 2
0
안녕하세요!
A1)
강의 10:50의 설명에서는 bitwise shift를 통해 1바이트 3개를 3바이트 하나의 데이터로 합치지만, LPS22HH.c 라이브러리 에서는
LPS22HH_Readbytes(PRESSURE_OUT_XL, 3, (unsigned char*)pressure);
함수를 호출하고, 그 안에서는 아래같은 코드가 수행됩니다.
void LPS22HH_Readbytes(unsigned char reg_addr, unsigned char len, unsigned char* data)
{
...
SPI3_SendByte(reg_addr | 0x80); //Register. MSB 1 is read instruction.
while(i < len)
{
data[i++] = SPI3_SendByte(0x00); //Send DUMMY
}
...
}
이 코드의 내용은 (unsigned char*)pressure 포인터의 시작 주소부터 1번지씩 3 번 증가시키면서 읽은 값을 저장하는 코드입니다.
이 내용은 C언어의 포인터에 대한 내용이고, 코드가 강의 내용과는 살짝 달라 보이지만 연산의 결과는 동일합니다.
이 코드를 강의의 내용처럼 바꾼다면 아래처럼 할 수 있겠죠.
unsigned char tmp1 = SPI3_SendByte(0x00); //Send DUMMY
unsigned char tmp2 = SPI3_SendByte(0x00); //Send DUMMY
unsigned char tmp3 = SPI3_SendByte(0x00); //Send DUMMY
unsigned int total = (tmp3 << 16) | (tmp2 << 8) | tmp1;
A2)
해당 내용은 LPS22HH의 데이터시트를 보면서 라이브러리 코드와 비교하셔야 합니다.
데이터시트의 레지스터 맵 부분을 보시면

이런 표를 보실 수 있습니다. 이것은 CTRL_REG1의 각각의 비트가 의미하는게 뭔지를 나타냅니다.
여기서 빨간색 네모 친 bit2와 bit3이 각각 LPFP_CFG와 EN_LPFP를 나타내죠. 이걸 기억해두시고,
이번에는 LPS22HH.c 의 int LPS22HH_Initialization(void) 함수를 보시면 196번째 줄 부터
// Enable LPF, Cut-off frequency
//0x08: ODR/9 0x0c: ODR/20
temp_reg = LPS22HH_Readbyte(CTRL_REG1);
temp_reg = temp_reg | 0x0c; //0000 1100
LPS22HH_Writebyte(CTRL_REG1, temp_reg);
이런 코드를 보실 수 있습니다.
이 코드는 CTRL_REG1 의 bit2와 bit3에 1을 넣는 코드입니다. (나머지는 그대로 둠)
따라서 LPFP_CFG와 EN_LPFP에 둘 다 1을 넣게 되는 것이죠.
비행승인 문의드립니다
0
37
0
드론의 M4 모터가 느리게 작동합니다.
0
63
2
STM32CubeIDE 관련해서 질문이 있습니다.
0
91
2
while문 루프 속도
0
60
2
변수 선언
0
51
2
FS-i6를 꺼도 LED 토글되는 이유
0
67
2
Fs-i6 i-bus 수신 데이터 이상
0
109
3
3-4. UBX 위도 경도 정보 Terminal에서 깨짐 현상
0
88
2
3-4. LED 토글 안됨
0
50
1
3-1. M8N GPS 강의 통신 연결 관련 문의
0
78
1
2-3. LPS22HH 강의 수행값이 아두이노 IDE Plotter 및 Terminal에서 인식 안됨
0
77
2
6-4 SwC 2000
0
103
2
6-4 ESC Calibration
0
68
1
esc, 모터 교체
0
111
2
부저 소리가 안납니다.
0
134
2
비행 질문
0
63
1
7-5. offset
0
75
2
sysmem.c
0
74
2
전체 제어의 주기를 1KHz로 설정한 이유가 궁금합니다.
0
89
2
부품 구매 관련 문의
0
65
1
PID 게인 문제
0
84
3
3d telemetry cp210x 연결
0
122
2
8-1. 3DR Telemetry HAL_UART_Receive_IT(&huart1, &uart1_rx_data, 1); 관련 문의
0
71
2
PID제어 질문
0
124
2

