AVR 인공호흡 하기 - ATmega128 로 ATmega128 살리기
ATmega128을 가지고 놀다보면.. 전혀 예상치 못한 이유로 ATmega128이 죽어버릴때가 있습니다.
갑작스런 정전기나, 전원을 잘못연결했다거나... 아니면 아무것도 안했는데 동작을 안할때....
이럴땐 보통 오실레이터로 인공호흡을 해주면 살아나는 경우가 있습니다.
하지만 인공호흡하려고 없는 오실레이터 사다가 인공호흡할수도 없는것이고...
옆에 있는건 아직 목숨이 붙어있는 ATmega128. 이녀석으로 어떻게 살려볼수 없을까 찾아보다 좋은 방법을 찾았습니다.
포트의 핀 출력을 High -> Low -> High -> Low ............. 를 반복하면 클럭뛰는 효과를 낼수 있다는.....
일단 오실레이터를 연결해서 클럭이 어떻게 뛰나 확인해 보았습니다.
파형이 이쁘게 곡선을 그리며 올라가다가 절벽으로 떨어지는 파형을 보여주고 있습니다.
주기가 4.00114MHz 가 나오네요. 주기가 딱 4MHz가 나오진 않습니다.... 당연한건가요;;;;;;
이젠 살아있는 AVR로 펄스를 만들어 보겠습니다.. 아래의 소스를 컴파일해 살아있는 AVR에 Write해줍니다.
이놈의 파형이 어찌 나오는지 오실로 스코프로 찍어봅니다...
포트F에 설정해놨으니 포트F에 오실로스코프를 연결해야겠지요? ㅎㅎ 파형은 아래와 같습니다.
아까보단 깔끔하진 않네요... 울퉁불퉁... 모양이 산모양 같습니다..ㅎㅎ
주기는 약 2.66749MHz가 나오네요.. 이정도로도 충분히 인공호흡용 클럭이 될수 있을것 같습니다.
인제 준비는 모두 끝났습니다... 실제 AVR을 살해(?)후 인공호흡으로 살려 보겠습니다...
ATmega128은 비싸서 이런 실험 용도로는 부적합하다고 판정! 하나남은 ATmega8을 실험대상으로 삼았습니다
실험용 회로를 아래와 같이 구성하였습니다... (불쌍한 ATmega8....;;)
전원과 ISP만 구성하였습니다... 참 쉽죠잉??
AVR Studio 에서 연결 퓨즈비트와 Signature를 읽어보니 제대로 나오는군요..
이제 ATmega8을 살해하기 위해 퓨즈비트 설정에서 SUT_CKSEL 부분을 Ext. Crystal/Resonator High Freq.; Start-up Time : 16K CK + 64... 라고 써있는걸 선택후 Program 버튼을 지그시 눌러줍니다...
공부를 위한 안락사라고 생각하고 눈물을 머금고 누릅니다........ 클릭~
역시 한방에 가셨습니다.... Signature부분엔 WARNING이 뜨고... 퓨즈비트도 이상하게 읽혀집니다..
이제 아까 제작한 인공 클럭으로 살려보겠습니다... ATmega8의 XTAL1 핀은 9번핀 입니다.
9번핀에 아까 만든 인공호흡용 클럭을 연결시켜줍니다... 아래와 같이요....
이렇게 연결하고 다시 퓨즈비트와 Signature를 읽어 봅니다...
허허 신기합니다. 멀쩡하게 다시 동작을 하는군요!!!!!!
이렇게 멀쩡하게 동작할때 후딱 잘못 설정된 퓨즈비트의 클럭설정용 퓨즈비트를 제대로 설정해줍니다.
위 화면과 같이 SUT_CKSEL을 위와 같이 내부클럭 8MHz로 설정해주고 Program 버튼을 클릭합니다.
휴우~ 다시는 못볼줄 알았던 ATmega8이 살아났군요...ㅎㅎ
다음에도 혹시나 이런 불상사가 생기면 이런 방법으로 살려내면 되겠습니다...~
이 방법으로도 살아나지 않는다면..... 글쎄요... 저도 잘 모르겠습니다...ㅎㅎㅎㅎㅎㅎㅎ;;
갑작스런 정전기나, 전원을 잘못연결했다거나... 아니면 아무것도 안했는데 동작을 안할때....
이럴땐 보통 오실레이터로 인공호흡을 해주면 살아나는 경우가 있습니다.
하지만 인공호흡하려고 없는 오실레이터 사다가 인공호흡할수도 없는것이고...
옆에 있는건 아직 목숨이 붙어있는 ATmega128. 이녀석으로 어떻게 살려볼수 없을까 찾아보다 좋은 방법을 찾았습니다.
포트의 핀 출력을 High -> Low -> High -> Low ............. 를 반복하면 클럭뛰는 효과를 낼수 있다는.....
일단 오실레이터를 연결해서 클럭이 어떻게 뛰나 확인해 보았습니다.
파형이 이쁘게 곡선을 그리며 올라가다가 절벽으로 떨어지는 파형을 보여주고 있습니다.
주기가 4.00114MHz 가 나오네요. 주기가 딱 4MHz가 나오진 않습니다.... 당연한건가요;;;;;;
이젠 살아있는 AVR로 펄스를 만들어 보겠습니다.. 아래의 소스를 컴파일해 살아있는 AVR에 Write해줍니다.
이놈의 파형이 어찌 나오는지 오실로 스코프로 찍어봅니다...
포트F에 설정해놨으니 포트F에 오실로스코프를 연결해야겠지요? ㅎㅎ 파형은 아래와 같습니다.
아까보단 깔끔하진 않네요... 울퉁불퉁... 모양이 산모양 같습니다..ㅎㅎ
주기는 약 2.66749MHz가 나오네요.. 이정도로도 충분히 인공호흡용 클럭이 될수 있을것 같습니다.
인제 준비는 모두 끝났습니다... 실제 AVR을 살해(?)후 인공호흡으로 살려 보겠습니다...
ATmega128은 비싸서 이런 실험 용도로는 부적합하다고 판정! 하나남은 ATmega8을 실험대상으로 삼았습니다
실험용 회로를 아래와 같이 구성하였습니다... (불쌍한 ATmega8....;;)
전원과 ISP만 구성하였습니다... 참 쉽죠잉??
AVR Studio 에서 연결 퓨즈비트와 Signature를 읽어보니 제대로 나오는군요..
이제 ATmega8을 살해하기 위해 퓨즈비트 설정에서 SUT_CKSEL 부분을 Ext. Crystal/Resonator High Freq.; Start-up Time : 16K CK + 64... 라고 써있는걸 선택후 Program 버튼을 지그시 눌러줍니다...
공부를 위한 안락사라고 생각하고 눈물을 머금고 누릅니다........ 클릭~
역시 한방에 가셨습니다.... Signature부분엔 WARNING이 뜨고... 퓨즈비트도 이상하게 읽혀집니다..
이제 아까 제작한 인공 클럭으로 살려보겠습니다... ATmega8의 XTAL1 핀은 9번핀 입니다.
9번핀에 아까 만든 인공호흡용 클럭을 연결시켜줍니다... 아래와 같이요....
이렇게 연결하고 다시 퓨즈비트와 Signature를 읽어 봅니다...
허허 신기합니다. 멀쩡하게 다시 동작을 하는군요!!!!!!
이렇게 멀쩡하게 동작할때 후딱 잘못 설정된 퓨즈비트의 클럭설정용 퓨즈비트를 제대로 설정해줍니다.
위 화면과 같이 SUT_CKSEL을 위와 같이 내부클럭 8MHz로 설정해주고 Program 버튼을 클릭합니다.
휴우~ 다시는 못볼줄 알았던 ATmega8이 살아났군요...ㅎㅎ
다음에도 혹시나 이런 불상사가 생기면 이런 방법으로 살려내면 되겠습니다...~
이 방법으로도 살아나지 않는다면..... 글쎄요... 저도 잘 모르겠습니다...ㅎㅎㅎㅎㅎㅎㅎ;;
하드웨어/AVR
2009/11/15 05:46












댓글을 달아 주세요
그런데요. 설정값을 변경했는데 ic가 죽었다고 하기엔 좀 그런거같아보여요. 다시 설정값만 해주면 되는거 아닌가요 ^^; 대부분 타거나 열받아서 죽는게 아닌가요? 그런건 복귀 가능한가요?
물론 설정값을 바꿨다고 IC가 죽는것은 아니지요.
위에서 제가 설정을 한 것은 외부 크리스탈이 창작되어있지 않은 상태에서 퓨즈비트를 외부 크리스탈로 설정한 것입니다.
이 경우 실제로 ATmega128이나 같은 atmega 계열 ic들은 동작을 하지 않게 됩니다.
이런경우 AVR Studio 에서 hex파일을 write하려고 하면
device missing or unknown device [-24] 라는 메시지가 뜨게 되지요.
실제로 물리적으로 부셔졌거나, 과전류로 인해 IC가 타버린 경우가 아니라면 atmega계열의 mcu가 동작하지 않는 이유는 사용자나 또는 다른 이유로(EMI 영향 등..) 퓨즈비트 셋팅이 잘못되어 장치인식을 못하게 되는 경우가 대부분입니다.
이런경우 강제로 외부 클럭을 넣어주면 ic를 다시 동작하게 할수 있는데요, 이를 인공호흡이라 합니다. 보통의 크리스탈로는 인공호흡을 하지 못하고, 오실레이터나 펑션 제너레이터같이 펄스를 만들어주는 장치로 인공호흡용 클럭을 만듭니다. 위 예제는 avr을 이용해 펄스를 만들어 인공호흡을 한 예제 입니다.
쉽게말해 퓨즈비트 이상으로 동작하지 않는 avr칩을 인공적으로 클럭을 만들어 강제로 넣어주지 않게되면 못쓰게 되서 죽었다고 표현하는 것이죠. 물론 설정값만 다시 정상값으로 변경해주면 됩니다.
하지만, 저런 과정 없이 설정값을 다시 셋팅할수 있을까요? 인식조차 되지 않을것입니다.
인공호흡이 이런의미였네요
ㅎㅎ저도 AVR을 처음 시작할때 인공호흡을 한다는말이 이해가 가지 않았었습니다.ㅋㅋ