본문 바로가기

트렌드 한눈에 보기/학계 트렌드

Teensy를 활용한 UART 통신 + I2C 디스플레이 고군분투의 기록

 디버깅의 예술이라는 책을 소개하면서(관련 글) 적절한 디버깅 방법에 대해서 공부한 적이 있었는데, 꽤나 오래 전의 일이다. 4월 5일에 작성된 글이니 두 달이 훨씬 넘었군. 그러고보니, 당시에는 전 여자친구가 이런 저런 개발 고군분투를 들어주면서 내가 다른 관점에서 살펴보도록 도와줬었는데, 이제는 혼자서 해내야 한다. 후, 난감하군.


 당시에 글을 쓰면서 가장 하지 말아야 할 것으로 "Bruteforce" 방식을 들었다. 생각나는 모든 것을 시행하는 방법인데, 근 3주간을 이 방법만 하면서 보냈던 것 같다. "내일은 제대로 한 번 분석해봐야지" 싶다가도, 내일까지 미룰게 무엇이랴. 오늘 당장 해봐야지 싶었다.


문제 1) Teensy 보드로 UART 통신과 I2C 디스플레이를 동시에 사용할 수가 없다.

확정적인 현상:

  - UART 통신은 문제없이 구현 가능하다.

  - I2C 디스플레이도 문제없이 구현 가능하다.

  - 둘을 동시에 작동시키려고 하면 UART 에서 노이즈가 너무 많이 섞이며 사용 불가 상태가 된다.

 

잠재적인 문제점:

  - I2C 디스플레이의 라이브러리가 정확히 맞지 않는다(SSD1309 디스플레이에 SSD1306 라이브러리를 사용 중)

  - UART 와 I2C의 통신 방법이 애초에 잘 안 어울리는 것일지도 모른다.

 

현재 해결 방안:

  - UART의 통신 속도(Baudrate)를 2400으로 낮추어 사용 가능하지만, 0.5 초 정도의 딜레이가 발생한다.


문제 2) 다양한 센서를 결합시킨 상태에서 UART 통신이 작동하지 않는다.

확정적인 현상: 

  - 센서보드와 모터보드 모두 정상 작동한다

  - UART를 통해 센서보드 / 모터보드 간 통신이 이뤄지지 않는다.

 

잠재적인 문제점:

  - 센서보드의 송신이 안되고 있을 수 있다.

  - 모터보드의 수신이 안되고 있을 수 있다.

  - 서로 다른 방식으로(통신 속도 등) 송/수신 하고 있을 수도 있다. 

 

현재 해결 방안: 

  - 센서보드의 송신이 정상 작동하는지, 새로운 수신 코드를 사용해서 확인해본다.

  - 모터보드의 수신이 정상 작동하는지, 새로운 송신 코드를 사용해서 확인해본다. 

  - 통신에서 핵심은 Position 값이고, 보드의 핵심은 모터 제어이므로,  해당 값을 먼저 수신하도록 한 뒤, 모터 보드의 기능을 추가하고, 센서보드의 기능을 추가한다.


다른 관점에서 생각해보기

- 사실 통신이 필요없진 않을까? 아두이노 우노와 메가에서 인터럽트가 많아지며 다양한 에러가 발생했지만, 20배 빠른 틴지라면...? 어쩌면 하나의 보드로 몽땅 할 수 있지 않을까...?


내일은 저녁에나 연구실에 갈 수 있을텐데, 또 주말에 쉬어줘야 평일에 힘을 내서 할 수 있을 터라 고민이 된다. 내일은 쉬어? 말어?