<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">아두이노 우노에서 MCU로 사용하는 ATmega328엔 내부 클럭이 있다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">그래도 안정성, 정확성 및 고속 처리를 위해 대부분 외부에 크리스탈 오실레이터를 달고 있다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">하지만 많은 간단한 응용에서는 내부 클럭으로도 충분할 것이다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">구글링을 해보면 내부 클럭을 이용하는 많은 정보들을 찾을 수도 있다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">그 시작점은 역시 아두이노 홈페이지에 있다. (&nbsp;<a href="http://arduino.cc/en/Tutorial/ArduinoToBreadboard" target="_blank" class="con_link" style="text-decoration-line: none; overflow-wrap: break-word; line-height: 1.5;">http://arduino.cc/en/Tutorial/ArduinoToBreadboard</a><span style="line-height: 1.5;">&nbsp;)</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">또한 네이버 카페 (아두이노 스토리,&nbsp;</span><a href="http://cafe.naver.com/arduinostory" target="_blank" class="con_link" style="text-decoration-line: none; overflow-wrap: break-word; line-height: 1.5;">http://cafe.naver.com/arduinostory</a>&nbsp;) 등에서도 고급 정보를 구할 수 있다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">(아두이노 강좌 중, 클라이버님의 "DIY Arduino")</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">그런데 언제나 그렇듯이 그대로 따라해도 안되는 경우가 허다하다.</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">&nbsp;</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">물론 안되는 분명한 이유가 있을 것이다.</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">하지만&nbsp;</span><span style="line-height: 1.5;">잘 모르니까 팔다리가 고생한다.</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">이번에도&nbsp;<span style="color: #000000;"><b><u>백번 넘게 시도</u></b></span>를 한 끝에 겨우 성공했으나,</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">아직 해결 안된 부분도 있다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">(그 와중에 MCU 하나는 운명하셨다. ㅠ.ㅠ)</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">내가 생고생을 한 주원인은 2가지인데,</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">첫번째는 원래 외부 클럭으로 설정되어 있던 MCU를 내부클럭으로 바꾸려면,</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">부트로더 심을 때 외부 클럭을 달아 놓고 작업해야 한다는 것이고,</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">두번째 원인은 부트로더 파일(.hex)을 제대로 읽지 못한 때문이었다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">하여간 나중에 기억에서 지워져서 또 다시 처음부터 삽질할까봐 포스팅하여 남긴다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">아래 사진은 부트로더를 올리기 위해 아두이노 우노와 연결한 모습.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">이미 외부 클럭으로 설정되어 있던 MCU 라서 부트로딩 작업에도 XTAL이 꽂아 두었다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">음. 이렇게 만능 기판형 자작 아두이노를 만들어 놓으니 여러가지로 편하고 쓸모가 많다.^^</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">(&nbsp;<a href="http://blog.naver.com/twophase/110174680548" target="_blank" class="con_link" style="text-decoration-line: none; overflow-wrap: break-word;">http://blog.naver.com/twophase/110174680548</a>&nbsp;)</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><img src="https://postfiles.pstatic.net/20130830_184/twophase_1377873475450sE94m_JPEG/20130830_1.jpg?type=w2" width="640" height="480" id="20130830_184/twophase_1377873475450sE94m_JPEG/20130830_1.jpg" alt="" class="_photoImage" data-lazy-src="" style="border: none; cursor: pointer;" />&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">1. 폴더와 Board 정의 파일 (boards.txt) 만들기</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">일단 Arduino 환경에 임의의 이름으로 하위 폴더를 생성한다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">나는 internal_clock이라는 이름으로 폴더를 만들었다.&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">즉,&nbsp;<span style="line-height: 1.5;">C:\Program Files\Arduino\hardware\internal_clock 가 된다.</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">&nbsp;</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">이곳에 boards.txt 라는 파일을 만들고 아래와 같이 내용으로 한다. (파일은 유첨함)</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">윗 부분은<span style="line-height: 1.5;">&nbsp;ATmega328 이고, 아랫 부분은 ATmega8 에 해당한다.</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">&nbsp;</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">참고로 현재 나는 아두이노 1.05 버젼을 사용하고 있다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5; color: #0075c8;">######################################################</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5; color: #0075c8;">&nbsp;</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5; color: #0075c8;">internal328_8.name=ATmega328 w/ 8 MHz internal clock (Optiboot)</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5; color: #0075c8;">internal328_8.upload.protocol=arduino</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal328_8.upload.maximum_size=32256</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal328_8.upload.speed=57600</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5; color: #0075c8;">internal328_8.bootloader.low_fuses=0xe2</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal328_8.bootloader.high_fuses=0xde</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal328_8.bootloader.extended_fuses=0x05</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal328_8.bootloader.path=arduino:optiboot</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal328_8.bootloader.file=optiboot_atmega328.hex</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal328_8.bootloader.unlock_bits=0x3F</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal328_8.bootloader.lock_bits=0x0F</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5; color: #0075c8;">internal328_8.build.mcu=atmega328p</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal328_8.build.f_cpu=8000000L</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal328_8.build.core=arduino:arduino</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal328_8.build.variant=arduino:standard</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5; color: #0075c8;">######################################################</span></p>
<div style="line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><br /></div>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal8_8.name=ATmega8 w/ 8 MHz internal clock (Optiboot)</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5; color: #0075c8;">internal8_8.upload.protocol=arduino</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal8_8.upload.maximum_size=7168</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal8_8.upload.speed=9600</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5; color: #0075c8;">internal8_8.bootloader.low_fuses=0xe4</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal8_8.bootloader.high_fuses=0xc2</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal8_8.bootloader.path=optiboot</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal8_8.bootloader.file=optiboot_atmega8.hex</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal8_8.bootloader.unlock_bits=0x3F</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal8_8.bootloader.lock_bits=0x0F</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5; color: #0075c8;">internal8_8.build.mcu=atmega8</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal8_8.build.f_cpu=8000000L</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal8_8.build.core=arduino:arduino</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">internal8_8.build.variant=arduino:standard</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">2. 하위 폴더 optiboot (<span style="line-height: 1.5;">C:\Program Files\Arduino\hardware\internal_clock\bootloaders\optiboot)</span><span style="line-height: 1.5;">를 추가로 만들고,</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">&nbsp; &nbsp;그곳에 필요한 hex 파일 2개 (</span>optiboot_atmega328.hex,&nbsp;optiboot_atmega8.hex)<span style="line-height: 1.5;">를 복사해서 넣는다.&nbsp;</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">&nbsp; &nbsp;이 파일들은&nbsp;</span>C:\Program Files\Arduino\hardware\arduino\bootloaders\optiboot&nbsp;<span style="line-height: 1.5;">에 있는 것을 복사하는 것이다.</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">&nbsp;</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">&nbsp; &nbsp;물론 이렇게 하지 않아도 간단하게 될 방법이 있을 것이다.</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">&nbsp; &nbsp;하지만 많은 노가다 끝에 이 방법으로 겨우 성공을 했으므로 더 우수하</span><span style="line-height: 1.5;">고 간단한 방법은 나중에 찾아 보겠다.</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">&nbsp;</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="line-height: 1.5;">3. 이제 아두이노 IDE를 실행하면 보드 선택 메뉴에서 다음 2개가 추가되어 있게된다.</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">&nbsp; &nbsp;ATmega328 w/ 8 MHz internal clock (Optiboot)</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;"><span style="color: #0075c8;">&nbsp; &nbsp;ATmega8 w/ 8 MHz internal clock (Optiboot)</span></p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp; &nbsp;이제 해당 보드(MCU)를 선택한 후 부트로더를 구으면 된다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp; &nbsp;단, 원래 MCU가 외부 클럭으로 설정되어 있던 것이었다면,</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp; &nbsp;부트로더를 새로 올리는 동안은 외부 클럭을 달아 놓아야 된다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">이렇게 해서 가지고 있는 ATmega328과 ATmega8의 내부클럭을 이용하도록 만들었다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">&nbsp;</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">그런데 ATmega328은 아무 문제없이 프로그램의 업로딩이 되는데,</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">ATmega8은 USB to TTL 어댑터로는 업로딩이 되지 않는다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">자꾸 sync 에러가 난다.</p>
<p style="padding: 0px; line-height: 1.5; color: #333333; font-family: 돋움; text-align: justify; background-color: #ffffff;">그래서 아두이노 우노를 프래그래머로 이용해서 업로딩 했더니 잘된다.</p>