초보시절 ATmega의 FUSE셋팅을 잘못입력하여 클럭을 죽여버리는경우가 종종 생깁니다.


이런경우 ATmega128에 외부클럭 1Mhz를 Xtal1핀(24)에 인가하면 AVR studio의  퓨즈세팅에 다시 진입할수 있습니다.


결론적으로 인공호흡적은 외부클럭 1Mhz를 어떻게 만들어 낼것인가라는 문제로 귀결됩니다.


1. 만약 펑션제너레이터가 있으시다면 문제는 간단합니다. 그냥 입력하십시요. (GND는 공통으로 물려주십시요) 

2. 다른 정상적인 ATmega128로 타이머/카운터로 1Mhz의 신호가 출력되도록 분주시켜서 클럭을 인가합니다.

3. OSC 1~4Mhz를 구매하여 Atmega128의 Xtal1핀에 인가합니다.



[구구절절설명하는 인공호흡개념..]


인공호흡이라는 개념을 이해하기 위해선 ATmega128과 같은 MCU는 일종의 심장을 가지고 있다고 생각하시면 쉽습니다. MCU의 모든 명령은 클럭과 함께 수행됩니다. 또한 ATmega는 초기 공장에서 출하될때 1Mhz의 내부클럭으로 설정되어 자체내에 가지고있는 오실레이터로 클럭을 만들어서 사용합니다. 문제는 내가 외부적으로 크리스탈/레조레이터나 오실레이터로 아트메가의 XTAL1~2핀에 클럭을 인가해주었때 발생합니다. 외부 클럭인가후 AVR Studio의 FUST셋팅으로 지금 ATmega가 사용할 클럭이 "외부클럭신호이며 어느정도의 속도를 지니고있다"라고 설정을 하게 됩니다만..이때 외부클럭회로가 틀렸거나 설정값과 다른 주파수의 클럭신호가 입력되고 있다면 ATmega는 클럭을 잃어버리고 ISP,JTAG등..프로그램주입 및 PC를 통해서 진입할수가 없게 됩니다. 당연히 진입할때 클럭신호를 사용하여 명령을 주고 받는데 이것이 꼬이게 됨으로 일어나게 되는 현상입니다.  

그래서 공장출하 당시의 클럭주파수인 1Mhz 신호를 XTAL1핀에만 인가하게되면 초기상태의 내부1Mhz OSC로 동작하도록 다시 설정할수가 있으며 이를 우리는 "인공호흡법"과 유사하여 그렇게 부르고 있습니다.


[순서]

1. AVR studio의 FUSE셋팅 설정화면으로 들어갑니다 (당연히 다른 컴파일러도 가능하겠죠?)

2. 죽어있는 ATmega에 외부클럭 1MHz를 인가합니다 (XTAL1핀에만, 입력클럭소소의 GND는 ATmega와 같아야겠죠?)

3. FUSE셋팅의 클럭설정을 내부 1MHz OSC로 동작하도록 설정(Program)하고 외부클럭을 제거합니다.

4. 끝났습니다. 이제 다시 ATmega는 내부클럭을 사용하고있습니다. 다음번에 실수하지 않으시면 됩니다~!


물론 이렇게 하여도..살아나지(?)않는 ATmega도 존재합니다...어쩔수없이..그런경우는..이미 운명하셨다고 생각하시면 됩니다.. 



아래의 자료는 뉴티씨사의 외부 오실레이터를 이용한 ATmega 인공호흡법 자료입니다. 참고하세요.




AVR 기초강좌-인공호흡편.pdf


+ Recent posts