가장 많이 본 글

2014년 7월 14일 월요일

AT89C2051 마이크로프로세서를 이용한 LED 디지털 타이머/시계(Digital Timer/Clock)

이 내용은 AT89C2051이라는 마이크로프로세서를 이용하여 디지털 타이머를 만드는 방법을 설명한 것 입니다.

알림: 이 내용은 네이버의 내 블로그(아래의 링크)이 이미 Posting 되어 있는 것이다.
이 기사의 내용에서 말하는 파일을 내려 받기를 원하시는 분은 네이버의 내 블로그에서 받을 수 있다.

http://wonstoneyoo.blog.me/20054905617

알림: ​최근 배운 EAGLE 프로그램을 활용하여 이 타이머/시계의 전용 PCB를 설계하여 그 설계 자료로 중국에 발주하여 양면 PCB로 만들었다. 원하시는 분은 주문해 주시면 나눠 드리겠습니다. 갸력은 PCB 한장에 1만원 받겠습니다. 20매 한정판으로 만든 것이니 떨어지기 전에 주문하세요. 회로도와 부품 List 를 같이 보내드립니다.

아래의 링크로 가시면 자세한 내용을 볼 수 있습니다.​

추가 사항:
2014년 4 8일 추가: 아래의 회로도(별첨 pdf 파일)는 최근에 EAGLE Software로 설계하여 완성한 아래 사진의 PCB에 해당하는 것이다. PCB 설계를 위한 회로도와는 별도로 DXF 출력을 만들어 AutoCAD에서 읽어와서 7-Segment LED Display 부분을 추가한 것이다. 이 회로에는 Anode Common Type 0.56 인치의 4-Digit 7-Segment LED Display와 표준 사이즈의 TAC 스위치를 사용하였다. PCB 설계 중 또는 Sample PCB 도착 후 Proto Type 제작 과정에서 발견된 몇가지 회로상의 실수를 모두 반영한 것이다.

주요 변경:
1. 사용하던 A1015 PNP Transistor가 소진되어 A1268을 사용하였다.
2. Battery Back-up 관련 회로의 오류및 충전 전류 제한 저항값(10k->1k)을 변경하였다.

수정: 2014년 2 5: 작업중 사다리에서 추락하는 사고를 당하여 왼쪽 팔목뼈가 부러졌다. 최초로 진료한 의사의 말로는 6주면 된다고 했는 데 동네 정형외과 의사는 조금 더 걸린다고 한다. 지난 2013 12 27일에 사고를 당하였으니 오늘로 5주째가 된다. 집에만 틀어박혀 있자니 좀이 쑤셔서 뭔가 하자고 작정하고 PCB Artwork를 배우기로 했다. 독일제 EAGLE이라는 프로그램인 데 Free Version인 경우 PCB Board의 크기를 최대 8x10cm 정도로 제한하기는 하나 모든 기능을 합법적으로 사용할 수 있어 이 프로그램을 설치하여 공부하는 중이다.

서론이 길어졌다. 처음부터 회로도가 마음에 들지않았는 데 먼저 있던 회로도를 이 EAGLE Software의 회로도 그리기 기능으로 만든 회로도로 대치한다.

이 회로에서 거미줄 엮이듯한 중간 단계의 그림을 거쳐 하나의 명령으로 양면기판이 구현되는 것을 실제로 해 보니 매우 신기하다.

추후 이렇게 제작된 기판과 필요한 부품을 모아 Kit를 만들어 취미 공작을 즐기는 분들에게 팔아서 푼돈이라도 벌어볼 수 있지 않을까 기대해 본다.

아래의 그림은 EAGLE로 완성한 PCB Artwork(양면 기판) 이다.
Tactile Switch는 Bottom Layer에 장착하려고 한다. 이 경우 정상적인 경우과 달리 부품이 달린 쪽을 아래로 향하게 하고 7 Segment Display도 꺼꾸로 (정상적으로 보았을 때 윗면을 PCB 쪽으로 한쪽만 연결) 달아서 공중에 뜬 7 Segment Display의 단자는 그림의 우측에 보이는 Jumper Pattern을 완성된 PCB에서 잘라내어 연결하려고 한다. 공중에 뜬 단자는 4가닥의 Jumper Wire를 이용하여 C0, D0, E0 C2, D2, E2를 연결하면 완성되는 것이다. 시계 전용 7 Segment Display를 쉽게 구할 수 없어 불편한 점이 많다.




회로 자체는 크게 바뀐 것은 없다. 다만 내가 아래의 설명문에만 있는 회로를 모두 수용했다는 데 의미가 있다. PCB를 만들 때는 7Segment Display가 항상 문제가 된다. 시계 전용 3 & Half Digit Display를 구하면 쉽겠으나 한두개는 어쩌다가 만날 수는 있으나 10~20개를 구하기는 쉽지않다. 공장에서의 판매 단위는 최소 100개가 되고 보통 단가가 1불 정도 되므로 쉽게 구할 수 있는 것이 아니라서 한개 짜리를 이용하기로 했다. 초단위로 껌뻑이는 두개의 점은 3mm 짜리 LED로 만들면 된다.
아래의 사진에서 보이는 Panel용 DC Voltmeter를 이용해서 만든 것은 아직도 우리집 거실 오디오 장 위에서 제 기능을 발휘하고 있고 이 외에도 추가로 만든 타이머 한개는 내 방에서 사용하고 있다.
처음부터 기대한 것은 아니었으나 이 타이머의 시간 기능이 매우 정확하다 한달에 거의 1분이 틀릴까 말까하는 수준이다. 아마도 국산품인 11.0592MHz 크리스탈의 성능에 따른 것으로 생각된다.
2011. 6. 13 추가: Microprocessor에 Hex File을 Download 하기 위해서는 ROM Writter가 있어야 한다. 그런데 대학교의 실험실에도 이런 장비가 없단다. 이런 문제로 인하여 며칠전 대학생들이 대거 집까지 쳐들어 오는 불상사가 발생하였다. 한 학기에 500만원이 넘는 등록금은 다 어디에 쓰는지...? USB 방식의 최신 장비라도 약 5~60만원이면 살 수 있는 데...
이런분을 위해서 내가 Hex File을 Download한 89C2051 Microprocessor를 공급하기로 하였다. 내 수고에 대한 약간의 사례비도 벌수 있으니 Win-Win Game이 된다고 할까?
이와 함께 일반 시중에서는 구하기가 조금 어려운 220V 출력을 위한 기구용 Receptacle 하나와 택배비를 합하여 10,000원에보내 드리기로 한다. 다른 부품은 쉽게 구할 수 있어 포함 시키지 않았다. 이러면 부품 구입비와 택배비를 제하고 약간의 내 수고비가 포함된 셈이다.
이 Kit(?)를 필요로 하시는 분은 내 휴대 전화(011-264-6133)로 문자 메시지를 보내주기 바랍니다.
P/S(2011. 6. 9.): 올려 놓은 회로도가 JPG 파일이라 해상도가 낮아 보기 어려운 점을 개선하였다.
회로도가 필요하신 분은 첨부된 PDF 파일을 다운하여 사용하시기 바랍니다.
가끔 이 게시물과 관련하여 부품 리스트를 보내달라는 메일 또는 쪽지를 받는 경우가 있는 데 이는 이 게시물을 제대로 읽어 보지 않고 그냥 하는 질문일 뿐이다. 이 게시물을 제대로 읽었다면 그런 소리를 하지 못한다. 회로도 내에 모든 부품의 Spec.이 있고 필요한 수량 또한 회로도에서 세어보면 된다.
추후 이런 메일 또는 쪽지에 대한 회신은 하지 않을 것이니 주지하시기 바랍니다.
출처: 이 Timer/Clock은 아래 링크에서 가져온 자료를 활용하여 만들었음을 밝힌다. http://chaokhun.kmitl.ac.th/~kswichit/clock/clock.htm
이 사이트를 방문하여 원 회로도(참고용) 및 기타 제작에 필요한 정보를 다운 받으시기 바랍니다.
위 사이트를 최근 방문 했더니 내가 사용한 clock1.hex가 clock2.hex로 Update 되었다. X-tal의 주파수가 11MHz로 바뀌고 FND의 Segment 이름이 바뀌어 진 것을 바로 잡고, 버턴의 수가 Hour, Min 및 리셋이 각 한개로 되어 상당한 변경이 가해졌다.
이 회로에 따라 제작을 시도하시는 분은 위의 "첨부 파일(1)"을 클릭하여 clock1.hex를 Download하여 사용하시면 됩니다.
지원: 모든 자료는 여기에 공개 되었으므로 약간의 손재주만 있으면 충분히 제작이 가능 합니다. 별도의 의문이 있으면 e-mail(wonstoneyoo@hotmail.com)을 보내 주시기 바랍니다.

배경: 항상 켜져 있는 인터넷 공유기와 케이블 모뎀을 필요 없는 시간에 끔으로써 전기를 절약하고 동시에 거실에 조용한(째깍거리는 소리를 싫어하는 사람이 있어 우리 집에는 Quarts 시계가 없다) 디지털 시계를 한대 장만하려고 디지털 타이머를 찾던 중 위 사이트를 발견하였다.
이 사이트에 나와있는 Timer/Clock 사진은 보기에 고철 덩어리 같아 보이나 나는 그 가능성을 인정하고 약 1년 전 디지털 파넬 메타의 내부 전원 회로와 전면 표시부 기판을 활용 처음 제작을 시도하여 현재는 우리 집 거실의 오디오 장 위에 놓아두고 잘 쓰고 있다(아래 사진, 16.20로 표시되고 있음).
여기에 소개하는 또 다른 사진(14:54를 표시하고 있는 것)에 보이는 제품은 4번째 만든 것 인데 만들 때 마다 발전하여 모양도 그럴듯하고 구조 또한 만들기 쉬운 것을 소개 한다.
 외함: 건축 인테리어 현장에서 흔히 볼 수 있는 목공용 타카 핀 포장용 노란색 박스를 이용하였다.
크기는 보통 100x70x45mm 정도인데 표시 장치가 잘 보이도록 이 박스를 길이 방향으로 비스듬히 잘라내어 표시부가 잘 보이도록 앞쪽은 높고 뒤쪽은 낮은 특수한 형태로 만들었다.
노란색의 플라스틱이 보기에 좋지 않아 무늬목 대용으로 많이 사용하는 시트지를 겉에 씌웠다. 앞쪽의 FND 용 붉은 색의 아크릴 렌즈 는 4개의 FND를 가릴 정도(약 58x25mm)의 크기로 두께 0.7mm 정도면 적당할 것 같다.
나는 마침 가지고 있는 것이 있어 활용하였는 데 쉽게 구하기가 어려우면 투명 아크릴에 빨간색 테이프를 발라서 만들 수도 있다.
렌즈 크기대로 박스를 잘라내고 안쪽에 투명 테이프를 발라서 고정한다.
상부의 스위치 자리는 위치에 맞추어 사각형으로 잘라낸다.
시트지를 붙일 때에는 모서리 부분은 헤어드라이어를 이용하여 열을 가하면서 당기면 시트지가 쉽게 늘어나므로 깨끗이 처리 된다.
먼저 박스에 윗면의 Button Switch 용과 전면 부 렌즈용 구멍을 뚫고 렌즈를 고정한 후 시트지를 모두 붙이고 필요 없는 부분을 잘라낸다.
배치/제작: FND를 부착하기 위한 40핀 IC Socket은 반으로 잘라서 만능기판의 가운데 한 구멍을 띄우고 PCB의 앞쪽으로 배치한다.
사이를 띄운 한 구멍에 3mm 짜리 LED 두 개를 설치(틈이 좁아 LED가 들어 가지 않으므로 약간 갈아 내고 리드를 L 자로 구부려야 한다) 하여 일초 간격으로 깜빡이는 신호를 만든다.
FND를 설치하기 위한 40Pin IC Socket은 Wire Wrapping용으로 다리가 긴 것을 이용하는 데 한 쪽 다리는 잘라내고 다른 한쪽의 다리는 구부려서 만능기판에 납땜 연결한다 위치는 FND를 꽂았을 때 FND의 앞면이 PCB의 끝에 닿을 정도로 하면 된다. 잘라낸 쪽의 단자는 기판에 직접 연결 되지 않으므로 FND의 각 Segment를 Jump Wire로 연결한 후 만능기판의 구명을 통하여 아래로 보내어 회로에 연결한다.
AT89C2051의 1번 Pin이 FND의 반대쪽으로 오도록 배치하고 19번 pin 쪽에서부터 보면 180옴 FND용 저항이 8개 있고 다음에 10k 1개와 3.3k 저항 1개는 11번 단자에 연결하여 각각 PNP Tr의 Base, Pull-up 용으로 연결하고 다음에 10k 저항 1개는 PNP Tr의 Collector에서 NPN Tr의 Base로 연결한다.
11번 핀 우측으로 Tr 두 개를 위로부터 각각 PNP, NPN Tr을 배치한다.
AT89C2051의 1번 Pin 쪽의 아래에 전원회로를 배치하고 Reset 회로 및 FND의 Anode에 연결되는 출력 회로를 배치한다. Reset 회로와 2, 3번 단자에 연결된 회로소자 위에 4번, 5번 단자에 연결될 Crystal을 눕혀서 놓는다.
2번, 3변 단자 아래쪽으로 FND의 공통 Anode에 연결되는 PNP Tr 4개를 배치한다.
회로 연결은 Wire Wrapping 용 30번 선(0.26mm)을 사용한다. 청계천의 전자 부품 가게에 가면 보빈에 소량 씩 감아서 파는 것을 살 수 있다. 닛퍼나 칼 등으로는 피복이 잘 벗겨지지 않으므로 가위 식으로 된 #30~#22번 선용의 Wire Stripper를 사는 것이 좋다(사기 어려우면 문구용 가위를 이용하면 두 날이 동시에 닿아 비교적 잘 벗겨진다). 청계천의 공구 가게에서 1 만원 내외면 살 수 있다.

전원 장치: 타카 핀 통에 들어가는 것은 시계 장치의 회로만(5V 정전압 회로 포함) 이고 DC Adapter Box를 활용한 전원부는 별도로 제작한다.
이 Adapter Box에 소형 트랜스와 정류회로, Relay 등이 들어가야 하므로 기존의 내용물은 제거하고 내부 크기에 맞도록 만능기판을 잘라 놓고 부품을 배치한다.
소형 트랜스는 2차 출력이 AC 12V 이면 정류 후 DC 15V 정도 되므로 별도의 정 전압 회로가 필요하지 않다. 정류 후 전압이 DC 15V 이상이면 12V Relay의 안정적 동작을 위해서 7812(또는 78L12)를 이용한 정 전압 회로를 구성해 주는 것이 좋다.
안전을 위해 1A 짜리 Fuse도 설치하였다. Fuse Holder와 Fuse는 폐 인쇄기판에서 빼낸 것이다. 사진에서 아래쪽에 까맣게 보이는 보이는 둥근 구멍이 AC 출력용 "기구용 Receptacle"(속칭 "콘센트") 이다.
전원의 N극과 Relay의 a 접점을 통과한 전원선을 연결 한다. Relay는 동작전압 12V로 전류 용량 1A 이상이라면 220W(220Vx1A)까지 시용할 수 있으므로 충분하다. Adapter Box의 크기를 고려하여 키가 높지 않은 것으로 구입한다.
a 접점이 하나만 있으면 된다( 220W 이상의 대용량 부하를 연결하려면 Relay 출력으로 원하는 용량의 Magnet Contactor의 코일을 여자 시켜면 된다).
전원부와 시계 장치와의 연결은 못쓰게된 PC용 Mouse Cable을 이용하였다. +12V, Ground, Relay 출력(C1815의 Collector) 3가닥 만 이용한다.
 
Programming: 앞에서 소개한 Site 또는 이 게시물에 첨부된 Clock1.hex 파일을 Download 하여 사용한다.
http://www.sample.co.kr/에서 살 수 있는 SE-511P라는 89C2051 전용 Downloader를 이용하거나 ROM Writter를 이용한다.
나는 프린터 포트에 연결하여 쓰는 구형 ROM Writter를 이용하고 있다.

설정하는 법: 제한된 메모리를 활용한 프로그램이라서 그런지 처음에 작동법을 이해하기가 어려웠다.
먼저 이 타이머/시계는 원하는 시간에 부하를 켜거나 끌 수 있도록 설계된 것임을 이해하기 바란다.
그러므로 타이머 제작 후 맨 먼저 부하를 켜는 시간과 끄는 시간을 설정한다.
“Set” 와 “Hr”, “Min” Button을 이용하여 부하를 켜는 시간을 맞춘다. “t-On/Off” Button을 한번 누른다 만일 “t-oFF”가 표시되면 한번 더 누르면 “t-on”이 표시된다(맞추어 놓은 시간에 timer를 on 한다는 의미이다).
다음 부하를 끄는 시간에 맞춘후 "t-On/Off” Button을 한번 누르면 “t-oFF”가 표시되면 부하를 끄는 시간이 설정된 것이다.
같은 방법으로 현재 시간을 맞추어 주면 설정은 끝났다.
프로그램 된 시간 이외에 수동으로 끄거나 켤 때는 “Set” 와 ‘On/Off” Button을 한 번 누른다. 누를 때 마다 “on” 또는 “oFF” 가 표시됨과 동시에 1분 단위 FND의 소수점(동작 표시기)이 켜지거나 꺼진다.
이 Timer/Clock의 정확도는 사용하는 Crystal의 정밀도에 달려 있지만 사용 경험에 의하면 상당히 정확하다. 2주일에 1분 이상 틀리지 않는다.

변경: 사용상 편의 또는 원본 회로의 오류를 수정하기 위하여 아래와 같이 몇가지 변경하였다.
1. Pull-up: P3.7의 출력이 오 동작 할 때가 있어 3.3k 저항으로 Pull-up 하였다.
2. 원본 회로에는 1초 깜박임을 한 시간 단위 FND의 소수점을 이용하였으나 새로이 2개의 3mm 짜리 LED를 추가하였다(이로서 진짜 시계 같아 졌다). 두 LED의 Anode를 공통으로 한 시간 단위용 FND의 Anode와 연결한다. Cathode는 FND 전류제한 저항(180옴, pt)을 통하여 회로도에 있는대로 P1.7(19)에 연결한다.
3. 원 회로에는 4개의 조정용 Button Switch가 있으나 잘못 눌러 설정 값이 쉽게 바뀌는 것을 방지하고자 “Set” Button을 추가 하였다. 4개의 스위치가 ‘Set” Button을 통해 P3.4 단자와 연결되므로 모든 Switch를 동작 시킬 때는 반드시 “Set” Button을 동시에 눌러야 한다. 가운데 있는 청색 Button이 “Set” Button 이다.
4. Reset: 원본 회로의 8.2k로는 Power-up 시 Reset이 잘 되지 않아 10k로 변경하였다.
5. 출력 상태를 표시하기 위하여 1분 단위 FND의 소수점을 180옴 저항을 1분 단위 FND의 dp 단자에 연결하고 이 저항의 다른 단자는 P3.7(11)의 출력으로 구동되는 NPN Tr(C1815)의 Collector에 연결한다. 이로서 출력 Relay의 동작 상태를 전면에서 쉽게 확인할 수 있게 되었다. - 이 부분은 새로운 회로도에는 표시되어 있지 않다. 필요하신 분은 쉽게 추가할 수 있을 것으로 생각한다.
6. 원본 회로에는 출력용으로 5V Relay를 사용하였으나 쉽게 구할 수 있고 비교적 큰 부하에도 적용할 수 있도록 12V Relay로 변경하고 이에 따라 관련 회로의 일부를 변경 하였다(출력 회로 참고).
7. Small Signal Transistor는 내가 가지고 있는 것(PNP=>A1015, NPN=>C1815)으로 대치하여 사용하였다. 극성만 맞으면 큰 무리가 없을 것으로 사료된다.
8. 내부 사진에서 아래쪽으로 보이는 청색의 둥근 모양으로 보이는 것이 3.6V 60mA NiCd Backup Battery 이다. 전원 플러그를 잠시 빼거나 순간적인 정전에도 시간을 유지 시켜주어 매우 편리하다. Crystal 바로 아래에 있는 Diode의 아래쪽에 보이는 것이 Diode와 병렬로 연결된(회로도에는 반영이 되지 않았다) 10k의 저항(전선으로 반쯤 가려져 있다)으로 5V 전원으로 부터 약 0.5mA의 충전 전류가 흘러(Trickle charge) Battery를 항상 만 충전 상태로 유지한다.
 

댓글 없음:

댓글 쓰기