AVR 임베디드 학습/개인 프로젝트 공부

ATmega128 디지털 시계 만들기 (1탄)

9bexel9 2024. 9. 14. 12:11

 

ATmega128을 활용하여 디지털시계를 구현하려 한다. 1탄을 시작으로 개발 진행을 해보겠다. 임베디드를 배우는 입장에서 작성한 글이니... 틀리거나 부족한 부분 그리고 보완해야 할 것들이 많이 보일 것이다. 보일 때마다 도와주시면 감사하겠습니다!!!!

 

Hardware configuration


ATmega128 mcu

 

MCU는 ATmega128을 사용했고 마이크컨트롤러 JMOD-128 모듈을 사용했다.

  • PA0~PA6 -> 4 FND digit control 
  • PC0~PC5 -> FND digit position
  • PD0~PD6 -> 2 FND digit control
  • PF0~PF5 -> switch control

PAx, PDx pin 은 FND에 숫자를 표현할 수 있는 digit control로 사용하였고 PCx pin은 표현한 숫자의 포지션을 결정하게 하였다. 마지막으로 PF pin은 스위치로 활용하여 디지털시계에 다양한 기능을 구현할 수 있게 하였다. 다시 글을 작성하겠지만 FND 같은 경우 숫자를 표현해야 하는 pin과 위치 제어를 해야 하는 pin으로 구성되어 많은 핀이 필요함으로 브레드보드와 같은 도구들을 사용하는 것이 좋을듯하다.

Hardware configuration

하드웨어 구성을 다음과 같이 표현하여 디지털시계 FND에 기능 구현에 맞게 스위치를 누르면 동작할 수 있도록 하였다. tact 스위치 6개와 2 FND, 4 FND로 각 상황에 맞는 알람, 스톱워치, 시계기능 등 다양한 기능을 동작할 수 있도록 프로젝트를 구현하였다. 제품을 만들면서 실생활에서 사용하고 있는 디지털시계들의 기능들을 구현해 보자!라고 생각하면 될듯하다. 

 

Software Function, Flow chart


소프트웨어 기능으로는 스위치를 활용하여 다음과 같이 6개의 기능을 갖게 만들었다.

  1. Time mode change
  2. 1 second count++
  3. 10 second count++
  4. 1 minute count++
  5. 10 minute count++
  6. hour count++

처음 구현을 시작할 때는 기본적인 시계와 같이 시간이 흐르게 되고 이후 초, 분, 시 변경을 위해서 Time mode 스위치를 누르고 시간을 변경할 수 있게 하였고 다시 Time mode를 누르면 기존 시계로 변경할 수 있게 하였다. 즉, 시계에서 시간을 조정하여 다시 원하는 시간대에서 동작시킬 수 있다고 생각하면 된다. 기능은 각 FND 자리마다 초, 분, 시 변경을 했지만 응용한다면 up, down 도 자유자재로 할 수 있다고 생각하여 크게 건드리지 않았다.

Software Flow chart

SW 순서도를 그려봤다. 막상 해놓으니 크게 별거 없지만.... 설명하자면 크게 Time mode에 따라서 기능 구현이 달라진다고 볼 수 있다. 모드를 off 해놓으면 시계 모드로 동작하여 우리가 흔히 아는 디지털시계로 동작하고... 모드를 on 해놓으면 시간을 변경할 수 있는 모드로 진입하여 각 스위치에 따라 원하는 시간으로 옮길 수 있다.

 

마무리


아직 공부 중인 임베디드로 부족한 부분이 많은듯하다. 이제 0탄으로 하드웨어, 소프트웨어에 따른 기능 정리를 하였으니 다음에는 사용한 모듈에 대한 기능 정리를 진행해야겠다. 부족한 부분, 보완할 점 보이면 댓글 주시면 피드백하겠습니다. 감사합니다.