한남대 졸업작품

MBX7843을 이용한 TOUCH 구현 + 최종 결과물 사진

seonho4595 2024. 11. 18. 04:59

I2C 터치도 있는데 왜 IC를 통해 SPI 통신 터치를 구현했냐면 , 우리가 쓰는 LCD는 I2C를 지원하지 않을 뿐더러, I2C는 Driver가 한정적이다. 

SPI 터치 IC는 범용성이 커서 다양한 활용이 가능하다. (실제로 온도 센서로도 사용된다.)

 

 

MBX7843 https://www.analog.com/media/en/technical-documentation/data-sheets/MXB7843.pdf 데이터 시트이다. 

우리는 졸업작품 후 MBX7843 IC를 이용하여 LCD에 터치기능 프로젝트를 진행 중이다. 

 

SPI Master Full Duflex Mode를 사용하였다. 터치되는 LCD 좌표값을 알려면 D_OUT이 필요한데 이 값은 Control byte format을 맞춰 D_in을 인가해주어야 한다. (데이터 시트) 

 

위의 Control Byte Format을 통해 내가 출력하고자 하는  값을  정할 수 있다. 그래서 나는 Control byte를 Conversion resolution을 1로 하여 8bit 출력을 얻고자 하였다.  ADC Always ON과 ADC Reference Always ON을 달성하기 위해서Power-down mode를 1 1 로 설정해주었다.

 

(Control byte=)1011 1011을 D_in으로 넣고 싶었다. 

 

  uint8_t array[3] = {0};

  array[0] = 0x00;
  array[1] = 0xBB;
  array[2] = 0x00;


이런 식을 파형을 생성해주었다. 앞뒤에 0x00은 Spacing 을 위해 추가해 준 부분이다. 


파형은 다음과 같이 보내주었다. (SPI_Transmit_DMA)

//it.c

void SPI3_IRQHandler(void)
{
  /* USER CODE BEGIN SPI3_IRQn 0 */

  /* USER CODE END SPI3_IRQn 0 */
  HAL_SPI_IRQHandler(&hspi3);
  /* USER CODE BEGIN SPI3_IRQn 1 */
  
 tokengen(); //token을 통해 Transfer End callback 구현
 
  /* USER CODE END SPI3_IRQn 1 */
}
void tokengen(void){
	token = 0;
}

void waituntil(void){

	while(token==1){

	};
}

... //중략


HAL_SPI_Transmit_DMA(&hspi3, array, 3*sizeof(uint8_t));
waituntil();
token = 1;

위와 같은 코드들을 추가하여 SPI DMA가 다 이뤄지지 않았을  때 다음 단계로 넘어가지 않게 루프를 생성해주었다. 

 

처음에 오실로스코프를 이용하여 실험을 진행하였을 때 파형이 안나왔다. 이유는 데이터 시트와 다른 Baud Rate를 설정하였기 때문이다. 이를 위해 Clock configuration을 바꾸고 Baud rates를 2Kbit/s 였던 걸 2Mbit/s로 바꾸었더니 해결되었다. 

 

D_in (파란색 파형) 이 나온 다음에 D_out(노란색 파형) 이 나옴을 확인 할 수 있다. 

 

      

블록 다이어그램과 비교하면 다음과 같음을 볼 수 있다. 

 

파란 파형을 분석해보면 1011 1011 임을 알 수 있다.

 위 값은 (노란색 파형) 가운데를 터치 했을 경우에 발생한 파형이다. 이 값은 추후에 분석이 필요할 것이다. 

 

 

아래의 사진은 캡스톤 디자인 졸업 작품 결과물이다.