ATmeag64 / ATmega128 / ATmega1281 / ATmega2561 MCU는 다른 AVR MCU와 다르게 프로그램 다운로딩(writing)하는 포트로 RXD0/TXD0 를 사용하고 있습니다. 이러한 이유로 통신 포트와 ISP 포트를 동시에 사용하는 분들 사이에서 ISP 프로그램 다운로딩(writing) 되지 않는다는 문제를 제기하시는 분들이 많은데, 첨부한 그림처럼 회로를 구성해 보세요.
아래 회로의 핵심은 통신 포트와 ISP 포트 신호가 충돌되지 않도록 직렬저항(R1,R2)를 삽입해 주는데 있습니다.
위 예제는 표현상의 편리를 위하여 MOSI/MISO라 표현했지만 사실상 MCU의 RXD0/TXD0 신호입니다.
혹 직렬저항 넣는 것이 이해되셨나요?
맞습니다. 두개의 신호(ISP 출력 신호, SP3232 출력 신호)가 충돌 나지 않도록 한 것입니다. 한쪽에서 신호가 바뀌면 다른 한쪽은 직렬저항에 의해 Pull-up, Pull-down 역할을 하기 때문에 Low, High 변화에 전혀 영향을 주지 않게 되는 거죠?
만약, 직렬 저항 없이 연결되어 있다고 생각하면 두 출력 신호가 힘겨루기를 할 것이기 때문에 힘(출력) 쎈 신호에 의해 High, Low 가 결정될 것입니다. 물론, 애매한 레벨일 수 있습니다.
따라서, ISP 포트에 통신 포트 기능 외에 다른 기능을 연결하여 IO로 사용하는 경우에도 마찬가지로 직렬저항을 삽입해 주시면 됩니다. 하지만, 너무 큰 직렬 저항 값을 넣으면 ISP 제거한 후에 IO 신호 High, Low가 변하지 않을 수 있으니 주의하세요. 저는 1k옴 정도가 적당한 것으로 생각됩니다.
건승하세요.