AVR 인공호흡 하기 - ATmega128 로 ATmega128 살리기


ATmega128을 가지고 놀다보면.. 전혀 예상치 못한 이유로 ATmega128이 죽어버릴때가 있습니다.
갑작스런 정전기나, 전원을 잘못연결했다거나... 아니면 아무것도 안했는데 동작을 안할때....

이럴땐 보통 오실레이터로 인공호흡을 해주면 살아나는 경우가 있습니다. 
하지만 인공호흡하려고 없는 오실레이터 사다가 인공호흡할수도 없는것이고...
옆에 있는건 아직 목숨이 붙어있는 ATmega128. 이녀석으로 어떻게 살려볼수 없을까 찾아보다 좋은 방법을 찾았습니다.
포트의 핀 출력을 High -> Low -> High -> Low .............  를 반복하면 클럭뛰는 효과를 낼수 있다는.....

일단 오실레이터를 연결해서 클럭이 어떻게 뛰나 확인해 보았습니다.
사용자 삽입 이미지

오실로스코프 회로.. 참 쉽죠잉??


사용자 삽입 이미지

4Mhz 오실레이터의 파형을 오실로스코프로 찍은 모습.



파형이 이쁘게 곡선을 그리며 올라가다가 절벽으로 떨어지는 파형을 보여주고 있습니다.
주기가 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이 살아났군요...ㅎㅎ

다음에도 혹시나 이런 불상사가 생기면 이런 방법으로 살려내면 되겠습니다...~
이 방법으로도 살아나지 않는다면..... 글쎄요... 저도 잘 모르겠습니다...ㅎㅎㅎㅎㅎㅎㅎ;;
2009/11/15 05:46 2009/11/15 05:46


ㄹㅔㅈㅕ
하드웨어/AVR 2009/11/15 05:46

댓글을 달아 주세요

  1. 김형원 2009/12/17 12:22  수정/삭제  댓글쓰기

    그런데요. 설정값을 변경했는데 ic가 죽었다고 하기엔 좀 그런거같아보여요. 다시 설정값만 해주면 되는거 아닌가요 ^^; 대부분 타거나 열받아서 죽는게 아닌가요? 그런건 복귀 가능한가요?

    • ㄹㅔㅈㅕ 2009/12/18 00:52  수정/삭제

      물론 설정값을 바꿨다고 IC가 죽는것은 아니지요.

      위에서 제가 설정을 한 것은 외부 크리스탈이 창작되어있지 않은 상태에서 퓨즈비트를 외부 크리스탈로 설정한 것입니다.
      이 경우 실제로 ATmega128이나 같은 atmega 계열 ic들은 동작을 하지 않게 됩니다.
      이런경우 AVR Studio 에서 hex파일을 write하려고 하면
      device missing or unknown device [-24] 라는 메시지가 뜨게 되지요.

      실제로 물리적으로 부셔졌거나, 과전류로 인해 IC가 타버린 경우가 아니라면 atmega계열의 mcu가 동작하지 않는 이유는 사용자나 또는 다른 이유로(EMI 영향 등..) 퓨즈비트 셋팅이 잘못되어 장치인식을 못하게 되는 경우가 대부분입니다.

      이런경우 강제로 외부 클럭을 넣어주면 ic를 다시 동작하게 할수 있는데요, 이를 인공호흡이라 합니다. 보통의 크리스탈로는 인공호흡을 하지 못하고, 오실레이터나 펑션 제너레이터같이 펄스를 만들어주는 장치로 인공호흡용 클럭을 만듭니다. 위 예제는 avr을 이용해 펄스를 만들어 인공호흡을 한 예제 입니다.

      쉽게말해 퓨즈비트 이상으로 동작하지 않는 avr칩을 인공적으로 클럭을 만들어 강제로 넣어주지 않게되면 못쓰게 되서 죽었다고 표현하는 것이죠. 물론 설정값만 다시 정상값으로 변경해주면 됩니다.

      하지만, 저런 과정 없이 설정값을 다시 셋팅할수 있을까요? 인식조차 되지 않을것입니다.

  2. 와우 2010/01/04 00:57  수정/삭제  댓글쓰기

    인공호흡이 이런의미였네요

    • ㄹㅔㅈㅕ 2010/01/07 23:19  수정/삭제

      ㅎㅎ저도 AVR을 처음 시작할때 인공호흡을 한다는말이 이해가 가지 않았었습니다.ㅋㅋ

8*8 도트매트릭스 회로도.


제가 전에 만든 8*8 도트 매트릭스의 회로도 입니다.

LED가 64개 사용되었으며 저항8개(100옴)과 ULN2803, 그리고 박스커넥터 2개가 사용되었습니다.

어떤분의 요청으로 회로도를 그려 올립니다^^ 참고하세요~ 회로도는 클릭해서 보세요~

사용자 삽입 이미지
2009/10/21 05:51 2009/10/21 05:51


ㄹㅔㅈㅕ
하드웨어/PCB Artwork 2009/10/21 05:51

댓글을 달아 주세요

  1. 정민규 2009/10/22 09:04  수정/삭제  댓글쓰기

    감사합니다^^

ATmega8과 DS1307로 만든 시계 두번째 버전!!


  요전에 만든 시계(http://seoltang.com/389) 는 제 자취방에 시계가 없어서 하나 만들어 갖다놓을까? 하는 생각과 이번에 만들 시계의 연습용(?) 버전이었습니다..

하지만 이번엔 우리 엄니의 열화와 같은 성원으로(실은 시계 왜 안만들어오냐고 자꾸 그러셔서) 아주 이쁘게 만들었습니다^^ 다른분들이 보시기엔 별로 안이뻐보일수도 있습니다..  울엄마도 충분히 그러실수 있습니다....;;
하지만 제눈엔 무진장 이뻐보입니다.ㅋㅋ 제 자취방 갖다놓고 싶습니다...ㅋㅋㅋㅋㅋ


사용자 삽입 이미지

사진기가 꼬져서 이상하게 나오는군요.ㅜ.ㅜ

왼쪽에 홀로 켜져 있는 LED는 오후를 뜻하는 아래쪽 LED구요, 오전이되면 위에 LED가 켜집니다... 저거 녹색 LED인데 노란색으로 보이는군요..ㅡㅡ; 아크릴 색이랑 짬뽕됐나봅니다..

왼쪽 아래는 5볼트 전원입력단자가 있고 그 바로위에 ISP커넥터가 존재합니다..
제가 천재는 아니기 때문에 분명 시간이 잘 가다가 심하면 거꾸로 시간이 갈수도 있는 상황이 올지도 몰라 빼놨습니다... 시간 수정할때도 사용합니다ㅎㅎㅎ 버튼같은거 없습니다. 프로그램하기만 귀찮아집니다..

아.. 그리고 아크릴을 본드로 붙이면 하얗게되는 저 가생이(?)부분;; 저거 어떻게 처리해야 하나요?
다른분들은 깔끔하게 이쁘게 티안나게 붙이던데.. 본드가 다른건가? 내 본드는 Alaska601이라 써있는데...
그러고보니 용도가 고무,가죽,금속,유리 군요... 유리도 붙이나?ㅡㅡ;  뭐 암튼..

이번 주말에 집에가서 티비위에 떡하니 올려놔야겠습니다..ㅋㅋ

시계 버전2 소스 : http://seoltang.com/391 [비공개]
2009/10/15 23:33 2009/10/15 23:33


ㄹㅔㅈㅕ
하드웨어/AVR 2009/10/15 23:33

댓글을 달아 주세요

  1. Jason Jang 2009/10/19 19:40  수정/삭제  댓글쓰기

    본드가 다른 것이 분명합니다.

    "알라스카601"본드를 만든 나라, 용도, 성분 그리고 설명서 표시등은 잘 모르겠지만...
    아크릴 전용 본드가 따로 있습니다. 보통 맹물과 같이 투명하고 맹물과 같은 점도 입니다.
    보통은, 주사기에 넣고 바늘부분으로 흘려가면서 붙이더군요.
    접합부분의 가장자리도 당연히 변색이나 변형이 없습니다.
    문방구보다는 아마도 공구상가쯤에 가야 구할 수 있을 것 같네요.

    블로그 잘 봤습니다.

    • ㄹㅔㅈㅕ 2009/10/19 21:11  수정/삭제

      아.. 아크릴용 본드가 따로 있는것이군요.. 아무거나 붙이는게 아니고.ㅋㅋ 주사기도 있어야되고..ㅎㅎ 유용한정보 감사합니다^^

DS1307과 FND, 그리고 ATmega8로 시계 만들기.


제가 사는 자취방엔 시계가 없습니다...
그래서 시간을 보려면 꼭 핸드폰을 찾아서 열어보거나 컴퓨터 오른쪽 아래 구석탱이에 시간을 봐야 했지요.
그래서 벽시계가 하나 있으면 좋겠다 생각을 했지만 이제 졸업이 얼마 안남아서 사기도 돈아깝고,,
어디서 업어올 시계도 없고.. 해서 하나 만들기로 작정했습니다... 공부겸 겸사겸사...ㅎㅎ

일단 MCU는 동아리방에 하나 남은 ATmega8을 사용하기로 했습니다.
시계 IC는 옆동아리 상문이형한테 빌려온 DS1307과 32.768 크리스탈을 사용했습니다.
그리고 나머지 부품들은 모두 동아리방에 있었습니다.ㅎㅎ

이렇게 모아진 부품들을 납땜하고 배선하고 프로그램해서 시계가 동작될때까지 무려 6시간이 걸렸습니다.ㅡㅡ;
FND도 4개가 붙어있는건 캐소드형, 각각 하나씩 있는건 anode형이라서 연결하는것도 한참 생각했습니다..ㅎㅎ;;
그래도 다 연결하니 작동은 정상적으로 되네요..^^

사용자 삽입 이미지

좀 지저분 합니다..ㅋ FND 여러개, ATmega8, ULN2803, DS1307, 7805, 등등등등등등등,,,,
저래놓고 검은색 불투명 아크릴로 덮으면 깔끔해질것같아서.ㅎㅎ 하지만 아크릴이 없다는.... ;;
그래도 날짜랑 시간만 잘 나오면 되니 걱정 없습니다.ㅋㅋ


사용자 삽입 이미지

  뒷부분의 모습입니다... 왜 6시간이나 걸렸는지 아실겁니다.ㅡㅡ;; 0.5mm짜리 전선은 웬만한 스트리퍼로도 피복이 벗겨지지 않습니다.. 그래서 핀셋으로 일일히 하나하나 피복을 벗겨야 하는데 이게 생각만큼 쉽지가 않더군요.ㅎㅎ  지금 왼손 집게손가락이 아픕니다.ㅜ.ㅜ

이제 저 뒷부분은 글루건으로 도배를 해서 선이 끊어지지 않게 보호를 해야겠습니다...ㅎㅎ
혹시나 어디가 끊어져서 작동이 안되면 끊어진데가 어딘지 못찾을수도 있을것같아서...미리 예방을..ㅎㅎ

그럼 이 시계가 동작하는 모습을 보시겠습니다...




소스코드 위치 : http://seoltang.com/388 (비공개)

2009/10/12 07:24 2009/10/12 07:24


ㄹㅔㅈㅕ
하드웨어/AVR 2009/10/12 07:24

댓글을 달아 주세요

  1. Jason Jang 2009/10/27 19:35  수정/삭제  댓글쓰기

    제가 잘 몰라서 묻는데, ATmega8 이 맞아요? ATmega128이 맞습니까? 제목과 본문에 각각 달리 표시되어 있어서요.

    • ㄹㅔㅈㅕ 2009/10/27 20:36  수정/삭제

      ATmega8 이 맞습니다... 제가 오타를 냈네요..ㅎㅎ
      ATmega128은 저렇게 DIP 타입 소자가 없지요.. 핀수가 64개나 되는지라..ㅎㅎ 지적 감사합니다.

당근보드의 FND를 이용해 시계 만들기(DS1307 이용)


당근보드의 디스플레이 보드에는 4개의 FND와 8개의 LED(8개중 동시에 사용가능한 LED는 4개)가 있습니다.
또한 메인보드에는 DS1307과 32.768khz의 크리스탈이 달려 있습니다.
이제 이 소자들을 활용하여 당근보드를 시계로 사용해 보겠습니다.

사용자 삽입 이미지

당근보드 디스플레이부의 모습.

당근보드에는 위와 같은 디스플레이부가 있습니다. 보시다시피 8개의 LED가 있으며 4개의 점퍼 설정으로 시계처럼 LED를 사용할것인지, 아니면 밑에 4개의 LED가 일렬로 있는 부분을 사용할 것인지 정할수 있습니다.
저는 점퍼를 모두 위에 연결하여 시계부분에 있는 녹색1개, 노란색1개, 빨간색2개를 사용하겠습니다.
그리고 당연히 4개의 FND를 사용해야겠지요.

제가 쓰는 당근보드는 보드 색이 녹색입니다.(위 사진은 당근이의AVR갖고놀기 카페에서 가져왔습니다) 그리고 LED를 고휘도 LED로 달아놓았지요.. 볼땐 멋있었는데 시계로 해놓으니 눈아파서 못보겠네요.ㅡㅡ;
아무튼 녹색 LED를 '오전'을 표시하는 LED로, 노란색 LED를 '오후'를 표시하는 LED로 사용하겠습니다.
또한 중간의 빨간색 2개의 LED는 약 0.5초 간격으로 깜빡이는 용도로 사용합니다.

시계IC인 DS1307은 32.768Khz 크리스탈과 함께 사용하며, 년, 월, 일, 요일, 시, 분, 초 를 나타낼 수 있습니다.
통신 방식은 I2C(TWI) 이며, DATASHEET는 아래에서 다운 받을수 있습니다.


I2C는 따로 열심히 공부하셔야 하구요, 저는 대충만 공부하고 소스를 구해다가 입맞에 맞게 고쳐 쓴 것입니다...ㅎ
제가 사용한 소스를 공개합니다. 이 소스는 엄청나게 큰 문제점이 있는데요.
시간 설정이 안된다는 겁니다. 그래서 소스를 넣을때 한번은 시간을 설정한 소스를 한번 넣어주고, 그담에 시간설정 부분이 없는 소스를 넣어줘 사용하면 됩니다. ㅎㅎ 시간 설정하는건 귀찮아서 넣지 않았습니다.ㅡㅡ;

그리고 이상하게 전원을 끊었다가 넣어주면 I2C 통신이 안되는가 봅니다. FND에 이상한 값이 출력됩니다.
이럴땐 백업 배터리 입력핀인 3번핀을 GND에 연결시켜준 후 리셋버튼을 누르면 또 잘 동작 하더군요...;;
왜이런지 아직 원인을 모르겠습니다. 데이터시트엔 백업배터리를 사용하지 않으면 Vbat 를 GND에 연결하라고 돼있길래 그리 해보니 되긴 하는데 전 백업배터리도 있고,, 배터리가 다 닳았나...ㅡㅡ;;;;;

아무튼 소스를 공개합니다~ 자자자잔!

#include <avr/io.h>
#include <stdio.h>
#include <carroty/delay.h>
#include <carroty/fnd.h>

unsigned char number_array[16]= { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, };
unsigned char fnd_sel_array[4]= { 0,0,0,0,};
unsigned char hour, min;
int n1000, n100, n10, n, time;

void rtc_write(unsigned char address, unsigned char byte) {
 delay_us(6);
 TWCR = 0xA4;      // START condition
 while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x08);
 
 TWDR = 0xD0;
 TWCR = 0x84;      // MT_SLA_ACK
 while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x18);
 
 TWDR = address;
 TWCR = 0x84;      // MT_DATA_ACK
 while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x28);
 
 TWDR = byte;
 TWCR = 0x84;      // MT_DATA_ACK
 while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x28);
 
 TWCR = 0x94;      // STOP condition
}

unsigned char rtc_read(unsigned char address) {
 delay_us(6);
 unsigned char byte;
 
 TWCR = 0xA4;      // START condition
 while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x08);
 
 TWDR = 0xD0;
 TWCR = 0x84;      // MT_SLA_ACK
 while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x18);
 
 TWDR = address;
 TWCR = 0x84;      // MT_DATA_ACK
 while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x28);
 
 TWCR = 0xA4;      // RESTART condition
 while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x10);
 
 TWDR = 0xD1;
 TWCR = 0x84;      // MR_SLA_ACK
 while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x40);
 
 TWCR = 0x84;      // MR_DATA_NOACK
 while(((TWCR & 0x80) == 0x00) || (TWSR & 0xF8) != 0x58);
 byte = TWDR;
 
 TWCR = 0x94;      // STOP condition
 return byte;
}

void display_fnd(unsigned char number, unsigned char fnd_select) {
 PORTB= number;
 PORTC= fnd_select;
}

void time_print(unsigned int value) {
 
 n1000=value/1000;
 n100=(value-(value/1000*1000))/100;
 n10=(value-(value/100*100))/10;
 n=value-(value/10*10);
 int g;
 for(g=0;g<10;g++){
  display_fnd(number_array[n1000], fnd_sel_array[0]); delay_ms(3);
  display_fnd(number_array[n100], fnd_sel_array[1]);  delay_ms(3);
  display_fnd(number_array[n10], fnd_sel_array[2]); delay_ms(3);
  display_fnd(number_array[n], fnd_sel_array[3]);  delay_ms(3);
 }
}

void led_init(void) {
 DDRB= 0xFF;
 DDRC= 0xF0;
 DDRA= 0xF0;
}

int main(void) {
 TWBR= 72;  
 TWSR= 0x00;
 TWCR= 0x04;      
 number_array[0]=  NUMBER_0;
 number_array[1]=  NUMBER_1;
 number_array[2]=  NUMBER_2;
 number_array[3]=  NUMBER_3;
 number_array[4]=  NUMBER_4;
 number_array[5]=  NUMBER_5;
 number_array[6]=  NUMBER_6;
 number_array[7]=  NUMBER_7;
 number_array[8]=  NUMBER_8;
 number_array[9]=  NUMBER_9;
 
 fnd_sel_array[0]= FND_SEL_1;
 fnd_sel_array[1]= FND_SEL_2;
 fnd_sel_array[2]= FND_SEL_3;
 fnd_sel_array[3]= FND_SEL_4;
 led_init();  

 /*  시간 설정 부분.
 rtc_write(0x06,0x09);
 rtc_write(0x05,0x09);
 rtc_write(0x04,0x25);
 rtc_write(0x03,0x05); 
 rtc_write(0x02,0x02);
 rtc_write(0x01,0x17);  
 rtc_write(0x00,0x00);   */
 
 PORTA=0xF0;
 int h=0;
 while(1) {
 
  hour=   rtc_read(0x02);
  hour=   ((hour >>4) & 0x07)*10 + (hour & 0x0f);
 
  min=    rtc_read(0x01);
  min=    ((min >>4) & 0x07)*10 + (min & 0x0f);
 
  if(hour>12){
   //hour=hour-12;
   PORTA=PORTA&0b11011111;
   PORTA=PORTA|0b00010000;
  }
  else {
   PORTA=PORTA&0b11101111;
   PORTA=PORTA|0b00100000;
  }
 
  time=hour*100+min;
  time_print(time);
  h++;
  if(h>4) {
   h=0;
   PORTA^=0xC0;
  }
 }
}


ㅎㅎㅎ 코딩실력이 부족해 소스가 난잡합니다.ㅡㅡ; 이해하시길;;;ㅎㅎ
그럼 동작 하는 모습을 보시죠~

현재 새벽이므로 오전이라는 표시인 노란색 LED가 들어와있습니다.
그리고 빨간색 LED 2개가 깜빡이는데 0.5초마다 깜빡이는건 아니고 그냥 대충 깜빡이는것입니다...;;
하지만 시계는 정확하지요.ㅎㅎㅎ


2009/09/25 02:53 2009/09/25 02:53


ㄹㅔㅈㅕ
하드웨어/AVR 2009/09/25 02:53

댓글을 달아 주세요

  1. 비밀방문자 2009/11/03 15:04  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

    • ㄹㅔㅈㅕ 2009/11/04 02:49  수정/삭제

      위 시계는 '당근이의 AVR갖구놀기' 라는 네이버 카페에서 공동구매를 통해 판매하는 일종의 AVR 실습 KIT 입니다. 제가 만든게 아니구 구입한 것이지요...

      회로도와 재료등은 모두 위 카페에 가시면 있습니다^^

LCD 인디케이터 만들기!


CLCD를 AVR로 제어해보다가 다른거 뭐 해볼게 없나 곰곰히 생각해보았습니다.
그러다가 약 6~7년전에 유행하던 LCD 인디케이터를 만들어 보기로 했습니다.

LCD인디케이터란 쉽게말해 컴퓨터의 각종 정보들을 외부 LCD에 나타내주는 기능을 하는 LCD를 말합니다.
CPU의 사용량, 하드디스크의 사용량, 네트워크 사용량&속도, 각종 팬의 RPM과 온도, RSS피더 제목들, 윈앰프 재생 정보, 이메일 수신정보 등등등등등..... 무진장 많죠...ㅎㅎ

일단 이런 정보들을 LCD에 표시를 해주는 프로그램을 소개합니다... 이름하여 LCD Smartie!!
현재 5.4버전이 제일 최신 버전입니다... ㅎㅎ
이 외에도 LCD 인디케이터용 프로그램이 몇몇 있지만 전 이걸 사용합니다.. 그래서 이거만 올려놓습니다.ㅡㅡ;

이젠 하드웨어를 제작해야 할텐데요... 우선 회로도를 보시죠..

사용자 삽입 이미지

이 회로도는 컴퓨터의 패러럴포트와 LCD의 포트를 연결해 사용하는 회로도 입니다..  나름 간단합니다.
사용할  CLCD(16x2, 20x2, 20x4 등등 전 20X4 CLCD를 사용합니다.)와 패러럴포트 커넥터, 10K옴 가변저항과 100옴 가변저항 그리고 전원 커넥터 하나만 있으면 만사 OK입니다!!

위 회로도 대로만 정확히 연결해주시면 작동에 전혀 문제가 없습니다...

사용자 삽입 이미지

패러럴포트 커넥터에 납땜한 모습입니다. 떨어질까봐 글루건으로 처리했습니다.

사용자 삽입 이미지

LCD를 장착할 PCB입니다. 가변저항 2개와 전원 커넥터 하나가 사용되었습니다. 10P박스커넥터는 원래 달려있던.. 안쓰는것입니다.ㅡㅡ;

사용자 삽입 이미지

뒷면입니다... 여기도 떨어질까봐 글루건으로 처리하였습니다.

사용자 삽입 이미지

LCD를 장착한 모습입니다.


이렇게 납땜이 끝나면 위에 소개드렸던 LCD Smartie 프로그램을 실행합니다.

프로그램을 실행하면 아래와 같은 조그마한 창이 하나 나타납니다.

사용자 삽입 이미지

설정을 위해 왼쪽 아래 Setup 버튼을 클릭합니다.

그러면 설정창이 나타나는데 일단 아래 그림에서 빨간색 네모박스처럼 Display Plugin 을 HD44780.dll을 선택합니다. 패러럴 포트를 쓴다는 의미 입니다.  그리고 그 옆 탭인 Screen을 누르면 LCD사이즈를 선택할수 있습니다.

사용자 삽입 이미지

클릭해서 보시면 크게 볼 수 있습니다.


이러면 일단 기본적인 설정은 모두 완료되었습니다.

이제 Screens settings 에서 자신이 원하는 화면을 설정해주시면 됩니다.

아래는 작동되는 화면입니다.


2009/09/11 07:50 2009/09/11 07:50


ㄹㅔㅈㅕ
하드웨어/전자부품 2009/09/11 07:50

댓글을 달아 주세요

  1. Daniel 2009/09/23 13:26  수정/삭제  댓글쓰기

    [CLCD,패러럴포트 커넥터, 10K옴 가변저항, 100옴 가변저항, 전원 커넥터1개]
    라고 해 놓으셨는데요~
    저항들은 각각 몇개씩 필요 한가요???
    PCB 기판도 있어야되는것 아닌가요??
    그리고 10P박스커넥터 라는것도 있어야 되는건지요??
    전기관련에는 문외한이라서요 ㅠㅜ;
    다시 자세한 설명들좀 해주세요 ㅠㅜ;
    잘 부탁드립니다.

    • ㄹㅔㅈㅕ 2009/09/23 14:47  수정/삭제

      저항은 각 한개씩만 있으면 됩니다. 10K옴 가변저항은 CLCD의 콘트라스트를 조절하는데 목적이 있고, 100옴 저항은 백라이트의 밝기를 조절하는데 그 목적이 있습니다. 그래서 각 한개씩 필요하죠.

      만능기판은 당연히 있어야 하는것이구요, 10P박스 커넥터는 위에 설명에 안쓰는것이라고 써있습니다^^

      제가 적어놓은 부품들은 모두 각각 한개씩만 있으면 됩니다~

  2. Daniel 2009/09/23 19:26  수정/삭제  댓글쓰기

    음... 그렇다면...
    총 제작비용은 얼마나 드는지요??
    CLCD 의 경우에는 굉장히 비쌀것 같아요 ㅠㅜ;
    제가 검색해 보니까 10만원이 훌쩍 넘어들 버리더군요...
    총 금액이 15,000원 이하로 제작 가능할까요??

    • ㄹㅔㅈㅕ 2009/09/24 16:28  수정/삭제

      총 제작 비용은 CLCD 비용밖에 들지 않았습니다. 25000원정도이지요.
      나머지는 있는 부품을 써서..ㅎㅎ 가변저항이나 만능기판등 나머지 부품도 다 합쳐봐야 2~3천원밖에 되지 않습니다...

      디바이스마트나 엘레파츠등에서 엘씨디를 찾아보시기 바랍니다. 몇천원대에서부터 약 4만원대까지 다양한 제품들이 있지요.
      제가 사용한 제품은
      http://devicemart.co.kr/mart7/mall.php?cat=003012001&query=view&no=29753
      이 제품입니다.

      그리고 님께서 검색하신 물품은 TFT-LCD가 아닌가 생각됩니다. 캐릭터 LCD는 그렇게 비싼게 없거든요..^^;;

[당근보드] 온도센서인 TCN75의 값을 읽어 LCD에 표시하기.


당근보드엔 온도센서 TCN75가 달려있지요...
시계IC인 DS1307도 있는데 이건 왜인지 작동이 안됩니다....; 그래서 온도센서만 해봅니다..

온도센서는 I2C (아이스퀘어씨) 통신방식을 사용해 데이터를 전송합니다. AVR에서는 TWI 라고 써있더군요..

별거 없고 어디서 주워온 소스에 제 입맛대로 바꿔서 썼습니다.ㅎㅎ 소스 보시죠~

사용자 삽입 이미지

당근보드가 좀 커졌죠?? 만능기판에 이것저것 부가기능(10P 박스헤더, JTAG포트, ISP포트, USB전원포트, 포트B의 LED, 전면 20X4 CLCD 등..)을 붙이느라 커졌습니다..ㅎㅎ
LCD엔 우리 동아리 이름과 제 이름, 그리고 온도가 나옵니다...
동아리방에 온도계가 3개가 있는데 알콜 온도계는 30.5도, 제쪽 연필꽂이 온도계는 28.3도, 옆 친구 연필꽂이 온도계는 26.1도,  그리고 당근보드의 현재 온도는 31.5도 입니다... 제 자리가 좀 뜨겁나 봅니다;;;;
2009/08/26 03:42 2009/08/26 03:42


ㄹㅔㅈㅕ
하드웨어/AVR 2009/08/26 03:42

댓글을 달아 주세요

CSiEDA 5.4로 마이크로마우스 설계에서 PCB샘플 제작 완료!!


  동아리에서 만드는 마이크로마우스를 회로설계부터 PCB제작까지 하게 되었습니다.
밸런싱 로봇을 제작 할 계획이며, MCU는 ATmega128L 을 사용하였고, 가속도 센서와 모터 구동부 이렇게 구성이 되어 있습니다.  PCB는 2층으로 구성할 계획이며 1층엔 MCU와 ISP, JTAG커넥터 그리고 PORTC커넥터. 그리고 3.3볼트 레귤레이터가 존재합니다. 2층엔 모터 구동부와 센서부, 그리고 동작 확인용 LED 4개와 POWER LED 1개가 존재합니다. 전원 커넥터와 모터 커넥터도 존재합니다.

CSiEDA5.4는 대학교 3학년때 배운 EDA툴입니다. 국산 툴이고 현재 일본에서 많이 쓴다고 하는데 한국에서는 그다지 인지도가 없는 모양이더군요.. 참으로 아쉽습니다.... CSiEDA로 그린 PCB모습입니다.

사용자 삽입 이미지


왼쪽이 CPU쪽 PCB이고, 오른쪽이 모터드라이버부와 센서부 PCB 입니다... 오른쪽이 훨씬 간단하군요..ㅎㅎ
알고보면 간단한 이 패턴을 교수님께 보여드렸더니 꼬박 2시간을 수정해주시더군요.ㅡㅡ; 수업시간엔 그냥 학점받으려고 대충대충 패턴을 그렸는데;; 실제로 제작하려고 하니 많은 손이 가더군요.  그렇게 수정을 끝내고 PCB 샘플을 주문했습니다.  주문한지 나흘만에 샘플이 도착했습니다.


사용자 삽입 이미지

수업시간엔 그토록 많이 작업을 했지만 PCB떠보진 못했는데 드디어 결과물이 나왔습니다...ㅎㅎ
웬지 뿌듯하군요.ㅎㅎ 그러나..................... 중요한 실수 2가지를 발견하였습니다.  
  첫번째. MCU PCB에는 GND구멍이 수두룩하게 뚫려 있지만... 센서부PCB에는 그런거 한개도 없습니다...
어떻게 저걸 까먹을수....;; 동작할때 무리는 없어 보입니다만... 교수님한테 혼날거같습니다.ㅡㅡ;
 두번째.  10핀 박스헤더의 크기를 고려하지 않고 3개를 무작정 나열해 버렸습니다... 박스헤더를 조립해보니 3개 절대 안들어갑니다. 가운데껄 포기해야 합니다....... 아까운 JTAG.....  아니면 JTAG포트만 납땜해 사용할수도 있습니다..ㅎㅎㅎ 그나저나 혼납니다ㅡㅡ;;;; 아 덴장..

뭐 어쨌든 이제 부품을 구입해 납땜을 하고 펌웨어를 올려서 동작을 해야 하지만.... 부품이 언제 올지는 미지수... 어제 주문했는데 아직도 배송준비중이군요... ㅡㅡ;   납땜하면 동작이나 할까요?? 아.. 괜히 두렵습니다.ㅋ
2009/08/21 16:20 2009/08/21 16:20


ㄹㅔㅈㅕ
하드웨어/PCB Artwork 2009/08/21 16:20

댓글을 달아 주세요

TQFP타입, MLF타입, QLP타입 납땜하기~!!


  교수님께서 가르쳐달라 하지도 않았는데 TQFP타입과 MLF타입, 그리고 QLP외 기타 SMD 타입 부품의 납땜 방법을 알려주셨습니다.. 
제가 DIP타입 납땜은 좀 합니다.. 하지만 SMD는 해본적도 없고 SMD부품은 무조건 기계가 하는줄 알았는데 그게 아니더군요.. 사람도 많이 합니다.ㅡㅡ; 울 교수님은 SMT장비가 학교에 있는데도 불구하고 직접 납땜하십니다;;

저런 촘촘한 칩을 언제 하나하나 납땜을 하고 있나.... 눈알 빠지겠다 생각을 했는데 막상 해보니 제가 생각했던 방법과는 전혀 다른 방법으로 납땜을 합니다.  그냥 납하고 인두하고 주우우욱 한번 긋고 삭삭 납을 떼주면 끝;;;

아래 사진은 제가 처음으로 납땜해 본 TQFP, MLF, QLP타입 부품 납땜한 사진입니다.^^

사용자 삽입 이미지
ATmega128L  MLF타입입니다. 나름 잘 된거 같지 않습니까???ㅋㅋㅋ


사용자 삽입 이미지
QLP 타입인 CC2420 입니다. zigbee 칩이지요.. 이거 아무생각없이 납땜했는데 칩 한개 값이 8000원이 넘더군요..ㅎㅎ 몇개 해먹었는데... 웬지 죄송한.ㅡㅡ;;


사용자 삽입 이미지
뭔지 모르는 SMD부품입니다. 뭐 납이 좀 많이 묻은것 같지만 나름 잘 된것 같습니다.ㅎㅎㅎ



사용자 삽입 이미지
요즘 삼성 핸드폰에 USB꼽을수 있는 커넥터와 비슷한 커넥터 입니다. USB현미경으로 촬영해서 무지 커보이지만... 사실 매우 작습니다.ㅡㅡ;ㅎㅎ 그래도 나름 납땜이 잘 됐네요.. 오른쪽 끝에 좀 덜 됐군요..ㅎㅎ



사용자 삽입 이미지
TQFP타입 부품입니다.  이거 무슨 부품인지는 모르겠습니다. JAPAN 어쩌구 저쩌구 써있는데...ㅎㅎ
오른쪽엔 저항도 보입니다. 납이 불룩한게 ㅎㅎ 좀 못했네요.ㅡㅡ;



사용자 삽입 이미지
ATmega128 칩과 AA사이즈 건전지의 크기 비교 입니다.  ㅎㅎㅎㅎ



사용자 삽입 이미지

CC2420 과 USB커넥터의 크기 비교입니다... 비교하니 매우 작군요..ㅎㅎㅎ


이런 부품들은 납땜하는데 그리 어렵지도 않습니다. 납과 칼팁, 그리고 송진(솔더링 페이스트)만 있으면 쉽게 납땜이 가능합니다.. 

제 노트북 뒷편엔 ZIF 커넥터를 납땜할수 있게 PCB에 패드가 그려져 있습니다. (EeePC 901)
그래서 몇몇 분들은 ZIF커넥터를 직접 납땜하여 용량이 큰 하드나 SSD를 장착해 사용하시는 분들이 계시죠.
전 납땜실력이 안돼서 생각도 안하고 있었는데 이번엔 할수 있을것 같습니다^^
저도 커넥터를 납땜하여 하드를 달아보겠습니다.. (이건 나중에 포스팅..ㅋ)
2009/08/18 01:20 2009/08/18 01:20


ㄹㅔㅈㅕ
tags : , ,
하드웨어/전자부품 2009/08/18 01:20

댓글을 달아 주세요

ATmega128을 이용해 가속도값을 ADC로 읽어 CLCD에 출력하기.


이번엔 ATmega의 ADC기능을 이용하여 가속도센서의 값을 읽어내어 LCD에 출력해보겠습니다.
사용된 가속도센서 모듈은 NTC社의 AM-3AXIS 로서 X축과 Y축, 그리고 Z축의 가속도를 센싱할수 있습니다.
그 값은 아날로그로 출력되며 AVR의 ADC기능을 이용해 숫자화 해야 합니다.

차례로 X, Y, Z 값을 읽어 변수에 저장한 후 sprintf를 이용해 ASCII 값으로 변환 후 LCD에 뿌려주면 끝입니다^^
아래에 소스 나갑니다~ ㅋ


지금까지 ADC는 많이 다루어 보았으므로 다른 설명하지 않겠습니다...
LCD 사용 헤더파일은 네이버 카페인 '아두이노 스토리'에서 가져왔습니다^^

그럼 작동되는 모습을 보시겠습니다.

2009/08/17 15:33 2009/08/17 15:33


ㄹㅔㅈㅕ
하드웨어/AVR 2009/08/17 15:33

댓글을 달아 주세요

[ SG, SB ] Powerd by Textcube, designed by criuce
rss