목 차1. 실험의 목적2. 실험 도구3. 실험 방법4. 실험 결과5. 분석 및 고찰*참고 문헌1. 실험의 목적저항과 브레드 보드를 활용하여 원하는 등가 저항 조건, 전류 조건, 전압 조건을 측정하기 위해 회로도를 구성한다. 이 때 저항을 추가, 제거 또는 변경을 통해 회로도를 수정한다.2. 실험 도구? 저항 (Resistance)저항은 전류의 흐름을 방해하는 성질을 가진다.R= rho {L} over {A} `[Ω] 로 수식화할 수 있고, rho는 고유저항, L은 길이, A는 저항의 단면적을 나타낸다.? 빵판 (Bread board)정의 : 브레드 보드는 회로의 개발 또는 원형판을 위하여 사용하는 기판이다.이름이 브레드 보드인 이유는 ‘빵틀’이라는 뜻으로써 그 틀을 한 번 쓰고 버리지 않고 여러 번 사용할 수 있다는 의미에서 유래되었다.사용법 : 파란색, 빨간색, 검정색 줄로 표시된 것처럼 서로 연결되어 있다. 띄워져 있는 부분은 서로 연결되어 있지 않다. 즉 저항이나 다이오드 등을 꽂는 부분에는 가로로 연결되어 있고, 전압을 인가하고 그라운딩을 시키는 부분은 세로로 서로 연결되어 있다.부품은 기판 깊숙이 꽂아 연결하며 부품과 부품 사이는 연결선을 이용하는 것이 원칙이다. 또 보드 전체를 넓게, 골고루 이용하며 부품이 한쪽으로만 치우치지 않도록 구성한다.? power supply약칭은 PSU이다. 외부에서 들어오는 교류 전류를 컴퓨터 시스템에서 안정적으로 사용할 수 있도록 직류로 변환해 각각의 시스템에 맞게 전원을 공급하는 하드웨어이다. 파워 서플라이가 안정적으로 시스템에 전원을 공급하지 못할 경우, 시스템이 다운되거나 부팅이 되지 않는 현상이 일어날 수 있기 때문에 컴퓨터 부품에서 차지하는 비중이 아주 크다. 크게 네 부분으로 이루어져 있으며 입력 전자파장애(EMI) 필터부, 교류-직류 정류부, 직류-직류 스위칭 변환부. 출력필터 및 출력부이다.교류 전압을 직류로 바꾸어 출력하는 일반 가정용 어댑터와 기능상의 차이는 없다. 그러나 어댑터가 용량이 작은 기기의 전원으로 사용되는 데 반해 파워 서플라이는 컴퓨터와 같이 출력 전압과 전류 용량이 많은 기기의 전원으로 사용된다.? Multi meter멀티미터는 전자계측기로서 기본적인 물리량 (전류, 전압, 저항 등)들을 손쉽게 측정할 수 있도록 고안된 장치이다. 멀티미터는 측정기능의 다양성으로 인해 멀티미터(multimeter)라 불리며, 물리량을 측정하는 방법에 따라 아날로그와 디지털 형으로 구분된다.3. 실험 방법기본적으로 제시된 회로도를 분석하여 구하고자 하는 저항, 전류, 전압을 측정하기 위해 회로도를 수정한다. 이 때 저항기를 제거, 변경, 추가하여 회로도를 꾸민다. 회로도를 직접 꾸미기 전에 원하는 저항, 전류, 전압값을 얻기 위해 계산을 먼저 실시한다. 또 계산을 할 때에 저항과 전압을 기준으로 하게 되면 더욱 간편하게 원하는 값을 얻을 수 있다.실험1. 원하는 등가 저항 만들기실험2. 전류 조건 맞추기실험3. 전압 조건 맞추기위의 3가지 조건을 만족시키는 회로도를 꾸민다.4. 실험 결과1. 등가저항 얻기 (2.5k OMEGA )1-1. 등가저항 얻기 (2k OMEGA )2. 전류 조건 (i _{1} =`2mA,`i _{2} =1mA)3. 전압 조건 (V _{1} =1`[V] )①1. 등가저항 얻기 (2.5k OMEGA )1-1. 등가저항 얻기 (2k OMEGA )2. 전류 조건 (i _{1} =`2mA,`i _{2} =1mA)3. 전압 조건 (V _{1} =1`[V] )② 주어진 문제** 2. 전류 조건에서,R _{8`} 저항에`i _{1} `,`R _{9} `저항에`i _{2} `인가** 3. 전압 조건에서,R _{12} `에`V _{1} `인가③ 수정 사항1. 등가저항 얻기R _{1} =`2k OMEGA `->`1k OMEGA ,R _{3} `제거`1-1.R _{7} =3k OMEGA ``->`6`k OMEGA2. 전류 조건 맞추기R _{10} (=i _{3} 흐름)=3k OMEGA `->12k OMEGA3. 전압 조건 맞추기5k OMEGA `을`저항들과`직렬로`연결5. 분석 및 고찰이번 실험은 간단하게 저항기를 교체함으로써 원하는 부분에 원하는 저항, 전류, 전압값이 인가되도록 하는 것을 하였다. 실험 1, 1-1은 전압값의 크기에 상관없이 실험하는 것이었다. 저항을 수정하여 멀티미터로 각 부분을 측정하였기 때문이다.
목 차1. 실험의 목적2. 실험 도구3. 실험 방법4. 실험 결과5. 분석 및 고찰*참고 문헌1. 실험의 목적함수 발생기(Function generator)와 오실로스코프(Oscilloscope)를 이용하여 회로도를 구성, 함수 발생기를 통해 발생한 신호를 오실로스코프로 출력하여 분석해 본다.2. 실험 도구? 함수 발생기 - Function generator함수 발생기는 회로에서 필요로 하는 여러 가지 signal source를 만들어주는 장치이다. 일반적으로, 함수발생기는 Osciilator로부터 생성되는 정현파, 정현파를 비교기에 입력하여 만들어지는 구형파, 그리고 구형파를 적분하여 만들어지는 톱니파 등 가장 널리 쓰이는 이 세가지 signal을 만들어 준다. 설정 단자를 사용하여 출력 신호의 종류, 주파수, 진폭, DC offset, 그리고 Duty Ratio 등을 조절할 수 있다.? 오실로스코프 - Oscilloscope오실로스코프는 기본적으로 probe로 측정된 전압을 화면상에 표시해주는 장치이다. 시간 변화에 대한 전압의 변화뿐만 아니라 어떤 시스템의 입력전압에 대한 출력전압의 변화를 나타내는 전달특성까지 측정할 수 있는 아주 유용한 장비이다.*probe : 오실로스코프에 신호를 넣어 줄 때에는 보통 probe를 사용한다. probe에는 일반적으로 10x probe와 1x probe가 있다.*주의점 : 오실로스코프의 probe는 매우 민감한 장치이다. 끝이 휘거나 구부러지는 등의 일이 없도록 주의해야 한다. 또 오실로스코프는 입력 신호의 크기를 제한하고 있다. 그 값은 확인하여 허용된 값 이상의 전압을 입력으로 인가하지 않도록 주의해야 한다.3. 실험 방법이번 실험은 함수 발생기에서 신호를 발생시키고 오실로스코프를 통해 그래프로 확인하였다. 이 때 함수 발생기와 저항을 직렬로 연결하였으며 오실로스코프는 저항의 전압 강하가 일어나기 전 지점에 연결하여 실험 회로도를 구성하였다.1. sine파, 10 kHz, 4V2. 톱니파, 100 kHz, 3V3. 사각파, 7 kHz, 5V4. sine파, 25 kHz, 6V5. 사각파, 4 kHz, 1.5V6. sine파, 38 kHz, 5V4. 실험 결과5. 분석 및 고찰본 실험에서는 함수 발생기와 오실로스코프의 사용법을 익히는 것을 목표로 하였다. 우선 함수 발생기로는 전압과 주파수를 조절할 수 있었다. 즉 어떤 신호를 만들어 내보내는 역할을 하였다. 오실로스코프는 ‘스코프’라는 말 그대로 발생하는 신호를 관찰자가 원하는 형태로 출력해 주는 장치이다. 처음에 오실로스코프의 knob 부분을 돌리니 값이 크게 보이고 작게 보이고 해서 값의 크기가 바뀌었다고 생각하는 우를 범하였다. 자세히 보니 x축, y축의 스케일만 변하여 확대, 축소의 역할을 한다는 것을 나중에 알게 되었다.
목 차1. 실험의 목적2. 실험 도구3. 실험 방법4. 실험 결과 및 분석5. 고찰*참고 문헌1. 실험의 목적전압원과 저항을 연결하여 저항회로를 구성한다. 이 때 저항의 연결은 직렬과 병렬, 혼합의 형태로 나타내고 각 노드에 인가되는 전류 및 각 저항에 인가되는 전압의 값을 측정한다.2. 실험 도구? Bread board정의 : 브레드 보드는 회로의 개발 또는 원형판을 위하여 사용하는 기판이다.이름이 브레드 보드인 이유는 ‘빵틀’이라는 뜻으로써 그 틀을 한 번 쓰고 버리지 않고 여러 번 사용할 수 있다는 의미에서 유래되었다.사용법 : 파란색, 빨간색, 검정색 줄로 표시된 것처럼 서로 연결되어 있다. 띄워져 있는 부분은 서로 연결되어 있지 않다. 즉 저항이나 다이오드 등을 꽂는 부분에는 가로로 연결되어 있고, 전압을 인가하고 그라운딩을 시키는 부분은 세로로 서로 연결되어 있다.부품은 기판 깊숙이 꽂아 연결하며 부품과 부품 사이는 연결선을 이용하는 것이 원칙이다. 또 보드 전체를 넓게, 골고루 이용하며 부품이 한쪽으로만 치우치지 않도록 구성한다.? power supply약칭은 PSU이다. 외부에서 들어오는 교류 전류를 컴퓨터 시스템에서 안정적으로 사용할 수 있도록 직류로 변환해 각각의 시스템에 맞게 전원을 공급하는 하드웨어이다. 파워 서플라이가 안정적으로 시스템에 전원을 공급하지 못할 경우, 시스템이 다운되거나 부팅이 되지 않는 현상이 일어날 수 있기 때문에 컴퓨터 부품에서 차지하는 비중이 아주 크다. 크게 네 부분으로 이루어져 있으며 입력 전자파장애(EMI) 필터부, 교류-직류 정류부, 직류-직류 스위칭 변환부. 출력필터 및 출력부이다.교류 전압을 직류로 바꾸어 출력하는 일반 가정용 어댑터와 기능상의 차이는 없다. 그러나 어댑터가 용량이 작은 기기의 전원으로 사용되는 데 반해 파워 서플라이는 컴퓨터와 같이 출력 전압과 전류 용량이 많은 기기의 전원으로 사용된다.? Multi meter멀티미터는 전자계측기로서 기본적인 물리량 (전류, 전압, 저항 등)들을 손쉽게 측정할 수 있도록 고안된 장치이다. 멀티미터는 측정기능의 다양성으로 인해 멀티미터(multimeter)라 불리며, 물리량을 측정하는 방법에 따라 아날로그와 디지털 형으로 구분된다.? Resistance저항은 전류의 흐름을 방해하는 성질을 가진다.R= rho {L} over {A} `[Ω] 로 수식화할 수 있고, rho는 고유저항, L은 길이, A는 저항의 단면적을 나타낸다.3. 실험 방법? 실험 1 (저항의 직렬 연결)실험 1에서는 10k 옴 저항과 20k 옴 저항을 전압원과 직렬 연결하여 각 저항에 인가되는 전압과 전체 회로도의 전류를 멀티미터로 측정한다.? 실험 2 (저항의 병렬 연결)실험 2에서는 10k 옴 저항과 20k 옴 저항을 전압원과 병렬 연결하고 각 저항에 인가되는 전류값을 측정하고 전압값 또한 측정한다.? 실험 3(저항의 직, 병렬 혼합 연결)실험 3에서는 20k 옴 저항 2개를 병렬연결한 후 10k 옴 저항과 직렬로 연결한다.4. 실험 결과 및 분석? 실험 결과( 전류i 단위 :[m ALPHA ], 전압v 단위 :[V] )ii _{1}i _{2}i _{3}vv _{1}v _{2}실험 10.1661.6733.325실험 20.7450.4950.2495실험 30.2480.1230.1262.5092.487실험 1에 대한 이론값0.1671.6673.333실험 2에 대한 이론값0.7490.4990.2495실험 3에 대한 이론값0.2500.1250.1252.52.5? 분석실험값과 이론값이 일치하는 것이 있긴 하지만 전반적으로 소수 2~3번째 자리에서 오차가 발생했다. 이론값을 계산할 때에는 키르히호프의 전류 법칙과 전압 법칙 (KCL, KVL)을 이용하여 계산하였다. 이를 실험값과 비교해 보았을 때 큰 차이가 없는 것으로 보아 이론값 계산이 정확히 되었다고 생각된다.5. 고찰실험 결과를 정리할 때 소수 3번째 자리까지 적은 이유는, 실험값과 이론값의 오차 범위가 작아서 그 오차를 보기 위함이다.실험을 할 때 파워 서플라이의 자릿수 표시 버튼을 제대로 입력해주지 않으면 제대로 된 값을 읽기 힘들었다. 또 멀티미터 또한 저항, 전압, 전류 중 어느 것을 측정하느냐에 따라 스위치를 돌려줘야 함을 알게 되었다.실험 데이터값 정리표를 보면 소수 2,3번째 자리에서 값이 조금씩 다르다는 것을 알 수 있다. 이런 오차가 발생하는 이유로 2가지를 생각해 보았다. 첫 번째는 빵판을 구성하는 데에 있어서 손으로 저항을 잡고 멀티미터를 갖다 대고 하는 식이었기 때문에 움직임이 발생하여 정확하게 저항값이 측정되지 않았을 것이라고 생각한다. 두 번째는 모든 저항기는 오차 범위를 가지기 때문에 오차가 발생했다는 것이다. 2:실험도구-?resistance를 보면 저항의 색깔마다 오차 범위가 다르긴 하지만, 대부분의 색깔 띠가 오차범위를 가진다는 것을 알 수 있다. 그리고 실험값과 이론값을 보았을 때 그 차이가 오차 범위 안에 드는 값임을 알 수 있다 (값의 1%대의 오차). 따라서 위의 두 가지 이유로 인해 전압과 전류의 값이 작은 오차를 가진다는 결론을 내릴 수 있다.
목차1. 설계 과제의 목표 및 제한 조건 - 22. 서론 -2- 설계과제 관련 이론, 배경3. 본론 -4-필요한 경우 프로그램 flowchart, 회로도 등 설명-설계과제 진행 과정-설계과제를 통해 얻은 결과 정리4. 결론 -7-설계과제 결과 중심토론5. 부록 -8-프로그램 코드1. 설계 과제의 목표 및 제한 조건* 목표-입력 : 적외선 거리 측정 센서(analog input)-출력 : LED dot matrix(red, green, orange)-거리센서로부터 측정한 거리를 LED dot matrix에서 출력-거리에 따른 위험 표시기능 추가(색변화, 깜빡임)-물체와의 거리 표시50cm 이상 : Green30~50cm : Orange20~30cm : Red로 깜빡이면서 표시(1초 간격)20cm 이하 : Red로 깜빡이면서 표시(0.5초 간격)2. 서론- 설계과제 관련 이론, 배경(1) ATmega32ATmega32은 이번 한학기동안 사용한 ATmega 시리즈 중의 하나이다. 옆에 사진과 같이 ATmega32 의 모든 핀에는 기본적인 역할이 할당되어 있다. 하지만 포트의 설정에 따라 유저가 원하는 대로 사용할 수 있다. 이러한 유동성으로 인해 ATmega32는 프로그래머가 원하는 대로 사용할 수 있는 좋은 도구이다.설계과제를 여러 번 거치면서 알게 된 것 중 하나는 ATmega32를 꽂아서 사용하는 PC에 따라 클럭수가 다르게 되는 것이다. 과제를 하면서 이 부분을 알지 못해 오작동하는 이유를 엉뚱한 곳에서 찾기도 했는데 텀 프로젝트때 명확히 알 수 있었다.(2) LED dot matrixLED dot matrix는 위의 그림에서처럼 24개의 핀으로써 64개의 dot를 나타낼 수 있는 LED이다. 세로줄의 점등은 Column 부분의 핀들의 연결에 의해 제어할 수 있다. dot 하나당 녹색과 빨간색의 점등이 가능하며 이 2가지 색깔이 동시에 켜질 경우 주황색이 나타난다. 이로써 총 3가지 색상을 나타낼 수 있다. 4줄/4줄로 나누었다면 왼쪽의 4줄로써 쉬프트를 이리값을 측정하도록 한다.(4) 전류 드라이버TD62783AP이다. 증폭된 전류를 안전하게 받아들일 수 있도록 해주는 장치이다.5V의 전압에서 dot matrix에 연결되는 핀이 24개이다. 따라서 엄청난 양의 전류가 필요하며 이는 곧 ATmega32에 과부하를 발생시킬 수 있다.ULN2803APG이다. 미약한 전류를 증폭시키는 OP-AMP역할을 한다.옆의 TD62783AP와 다른 점이 있다면 VCC에 연결은 없고 GND만 연결한다는 점이다. 즉 전류가 안전하게 빠져나가 접지되는 것이라고 볼 수 있다.이러한 장치들을 연결하여 LED dot matrix를 이용할 수 있는 코드를 완성시키는 것이 이번 과제의 목표이다. 우선 하드웨어적으로는, 만능 기판에 많은 선들을 이용해야 하므로 가능한 한 납땜으로써 선을 연결하도록 해보았다. 하지만 익숙치 않아 생각보다 많이 처리할 수 없었고 전선을 이용하여 연결한 부분이 있다. 소프트웨어적으로는 타이머를 사용하는 데에 있어서 에로 사항이 있었다. 0.5초와 1초 2가지 형태의 시간을 만들어야 하는데 이 부분에 있어서 여러 가지의 형태로 코드를 완성시켜 봤지만 잘 되지 않았다.3. 본론-필요한 경우 프로그램 flowchart, 회로도 등 설명(1) Flowchart(2) 회로도 설명 (사진)1. PORT 연결Green : PORT BRed : PORT CLine : PORT A, D2. 선 연결 모습1(기판 뒷모습)3. 선 연결 모습2(LED 점등 모습)1. PORT 연결PORT를 연결하는데에 많이 혼란스러웠었다. 하지만 우선 기판에 순서대로 납땜으로 선 연결을 하여 dot matrix의 data sheet를 활용하여 연결하였다. 그리고 가로선을 연결하기 위해 포트 A와 D를 이용하였는데, PA4 pin에 거리센서를 활용하기 위해 A포트를 다 사용하지 않고 D포트도 함께 사용하였다.2. 기판 뒷모습선으로만 연결하려고 했는데 너무 복잡해질 것 같아서 납을 이용해 연결하였다. 처음에 이 생각을 하고 시작했는데 서로 엉겨 붙고 해서 항을 이용하여 연결하였다. 그리고 LED 점등은 편의를 위해 5줄을 이용하였다. 우선 홀수 줄을 이용하는 것이 가장 좋다고 생각하는데 7줄을 쓰려고 하니 그만큼 배열도 길어져야 하고 해서 5줄로 해결하였다.-설계과제 진행 과정① dot matrix에 세로줄을 통해 점등하는 것은 쉽게 해결하였다. 하지만 10의 자리 숫자와 1의 자리 숫자 모두를 점등시키는 것을 생각하기 위해서 가로선의 사용에 대해 많이 생각하였다. 그래서 잔상을 이용하여 쉬프트 시키는 방법을 이용하게 되었다.② 납땜작업을 하는 데에 있어서 시행착오가 있었다. 선으로 연결을 하다가 꼬여버리는 바람에 잘라내고 다시 붙이게 되었다. 또한 인두기로 납으로써 선을 연결하는 과정에서 기판이 반쯤 녹아버린 것 같았다. 그래도 다행히 완전히 파괴되지는 않아서 겉에 타는 것으로 마무리되었고 납땜 실력도 많이 늘어서 쇼트되는 것 없이 잘 연결할 수 있었다. 마지막에 확인 과정 중 1개의 줄이 끊어져있음을 확인하였는데 금방 마무리 지을 수 있었다.③ 숫자를 나타내기 위해서 배열을 만들었다. 처음에 8*8의 배열을 활용하려고 했는데 잘 되지 않았다. 그래서 세로줄, 가로줄 2가지의 배열을 이용하였고 세로줄 배열을 2차원 배열을 사용하여 해결하였다.④ ADC로 받은 값을 거리의 범위로써 해결하는 작업을 하였다. 이 작업을 하기 위해서 얼마만큼의 거리에서 얼마나 되는 전압이 나오는지 일일이 측정해 보기도 하고, 거리 센서의 성능곡선에 접선을 그어가면서 식으로 계산도 해보았다. 하지만 그 두 값이 일치하지 않았다.결국 보정을 하기 위해 error값을 거리값의 off-set을 통해 해결하였다.-설계과제를 통해 얻은 결과 정리① LED dot matrix를 이용하기 위해서는 dot matrix에 24개의 핀을 정확히 연결해야 한다. data sheet에 나와 있는 핀과 실제 matrix 뒤에 있는 핀의 방향과 배열이 다르기 때문에 여기서 헷갈려 버리면 숫자나 색깔이 뒤죽박죽으로 나와 버리게 된다.② 이번에 사용한 거리센서는였다) 실행하였다. 또 10cm 이하에서는 센서의 정확도를 보장할 수 없었는데 어느 정도 정확한 값이 측정되었다.또한 거리에 따른 보정을 계속 해주어야 하는데, 센서가 달라서 그런지 다른 팀의 보정값과 우리의 보정값이 달랐다. 많은 팀들에게 물어보았고 조교선배들을 찾아가 물어보기도 하였는데 정확한 보정을 하기 위한 방법을 선정하기가 쉽지 않았다.? 이번 과제에서는 전류 드라이버를 사용하였다. 한번에 많은 전류가 한 번에 들어왔을 때 ATmega32에 무리가 가지 않게 하기 위해서이다. 또한 전류 드라이버 뒤에는 저항을 연결하였다. 이것 역시 dot matrix를 보호하기 위해서였다. 전압은 외부에서 끌어와 사용하게 되었으며, 가로줄을 작동시키는 원리를 이용하여 전류를 GND 시켜 주었다.4. 결론-설계과제 결과 중심토론dot matrix에 불을 켜기 위해서 2개의 배열을 사용하였다. 그 중 하나는 2차원 배열로써 사용하였다. 10의 자리 수(또는 1의 자리 수)를 출력시킨 다음 시프트를 이용하여 1의 자리수(또는 10의 자리 수)를 이용하는 것은 크게 어려운 부분이 아니었다.이번 과제를 수행함에 있어서 가장 난해했던 점은 거리센서의 활용이다. 거리센서의 성능 곡선을 이용하여 전압을 계산하여 만든 수식들은 모두 잘 되지 않았다. 그래서 직접적인 전압 측정을 통한 계산으로써 해결하려고 하였다. 또 하나 난해한 점은 0.5초와 1초 이렇게 2가지의 타이머 활용이다. 첫 번째로 생각해볼 수 있는 것은 분주비를 활용해 0.5초를 만든 다음, 그것을 2배 해주어 활용하는 것이다. 두 번째로는 0.5초와 1초 두 개를 만들어 직접 사용하는 것이다. 그래서 하나씩 적용을 해 보았는데 정확히 작동하지 않았다(1초에 맞춰서만 작동하였다). 그래서 생각해 보았을 때에는, 1초를 만들어 이 것을 절반을 해주어 20cm이하의 범위에서 깜빡이게 해주면 될 것이라고 생각하였는데 코드를 완성시키지 못해 아쉽다.이때까지 과제를 해오면서 생각보다 많은 장비를 이용하였고 그 중에는 사용법을 숙 싶었지만 실력이 없어 참가하지 못했는데, 이번 겨울부터라도 기회가 된다면 대회를 꼭 나가보고 싶다.5. 부록-프로그램 코드#include#include#includeunsigned char line_mat[8] = {0x01,0x02,0x04,0x08,0x10,0x00,0x00,0x00};unsigned char dot[10][8] = { {0x07,0x05,0x05,0x05,0x070,0x00,0x00,0x00}, //0{0x02,0x06,0x02,0x02,0x07,0x00,0x00,0x00}, //1{0x07,0x01,0x07,0x04,0x07,0x00,0x00,0x00}, //2{0x07,0x01,0x07,0x01,0x07,0x00,0x00,0x00}, //3{0x05,0x05,0x07,0x01,0x01,0x00,0x00,0x00}, //4{0x07,0x04,0x07,0x01,0x07,0x00,0x00,0x00}, //5{0x04,0x04,0x07,0x05,0x07,0x00,0x00,0x00}, //6{0x07,0x05,0x05,0x01,0x01,0x00,0x00,0x00}, //7{0x07,0x05,0x07,0x05,0x07,0x00,0x00,0x00}, //8{0x07,0x05,0x07,0x01,0x01,0x00,0x00,0x00}, //9};unsigned char line=0x00;volatile unsigned char count = 0;volatile unsigned char light=0;//색깔의 종류 나타내기 위함volatile unsigned char distance=0x00; //거리 나타내기 위함volatile unsigned const=0;//깜빡임 표시volatile float adc_result=0, error=0;//ADC 이용하기 위함void display(unsigned char tens, unsigned char units, unsigned char color);unsigned char measure_dist(void);
목 차설계과제의 목표 및 제한 조건 page 22. 서론 설계과제에 사용된 도구들 - page 33. 본론 - page 8-설계과제 진행 과정-설계과제를 통해 얻은 결과 정리4. 결론 설계과제 결과 중심 토론 - page 85. 부록 - page 9프로그램 코드1. 설계과제의 목표 및 제한조건제목 : 기초 오실로스코프 제작아날로그 전압 값을 읽어 그 값을 PC에서 확인할 수 있게 하는 프로그램을 작성준비물 : 가변저항 1개, 마이컴, 직렬통신선, LED 5개입력전압 범위 : 0 ~ 5V0.5sec마다 PC로 데이터 전송전송문자 : 숫자, ‘V', 줄 바꿈 문자 전송(’r'와 ‘n’)데이터 전송시작 : PC에서 마이컴으로 'q' 전송시데이터 전송종료 : PC에서 마이컴으로 's' 전송시 (초기값)AD값 중 첫째자리 숫자만큼 켜진 LED 수 조절인터럽트 사용(ADC, UART RX, UART TX 등)2. 서론 - 설계과제에 사용된 도구들⑴ATMEGA32ATmega32 에는 I/O포트가 A,B,C,D 각각 0~7번까지 32개가 존재한다. 각 각의 핀마다 주어진 역할들이 있으며 상황에 따라 그 외의 역할로써 활용할 수 있다.ATMEGA32에서의 레지스터는 다음과 같다.레지스터기능리셋시의 값PORT포트의 데이터 방향결정1:출력 , 0:입력0000 0000DDRDDR에의해 출력으로 설정된 경우 출력을하면 PORT 래치에 기록0000 0000PINDDR에의해 입력으로 설정된 경우 핀을 판독하면 I/O핀의 HIGH/LOW 를 판별모두 하이 임피던스(2) 타이머 인터럽트ATMEGA32에는 3개의 TIMER/COUNTER 모듈이 Timer0~2 로 구성되어 있다.Timer0/2의 경우 8비트 타이머로서 최대 0~255의 카운트 값을 가지며 Timer1A/B 의 경우는 16비트 타이머 로서 최대 0~65535 까지 카운트가 가능하다. 이들 TIMER/COUNTER의 경우 PWM/PAST PWM/CTC 등 출력 파형을 주는 것이 가능하며 OCn 값과의 매치를 통해서 출력파형을이용하여주파수 클럭을 기초로 프리스케일러를 이용하여 (1/1 , 1/8 , 1/64 , 1/256 , 1/1024)각자시간을 만들어 내는 것이 가능하다.1: 구하고자 하는 시간2: 1클락이 발생하는데 걸리는 시간3: 1카운트 할때 걸리는 시간4: 최종 카운트 횟수*Timer/Counter Interrupt Mask Register.Timer/Counter0 Overflow Interrupt Enable (bit 0)을 1로 하여 Mask를 벗기고 사용할 수 있게 한다.* TCCR0 / TCCR2 레지스터-다음의 레지스터를 활용하여 Waveform Generation Mode bit를 활성화 시킬 수 있다. 또한 분주비 설정을 통하여 타이머 작동의 시간 설정에 필요한 bit를 활용할 수 있다.* TCCR1A / TCCR1B 레지스터-16비트 타이머인 TIMER1A와 TIMER1B의컨트롤 레지스터로 PWM출력과 분주율 출력값 모드를 설정할수 있다. 이외 CTC모드와 PASTPWM모드도 설정 할 수 있다.* TCNT0 / TCNT2 레지스터-8비트 타이머인 TIMER0 와 TIMER2 의 TIMER/COUNTER 레지스터이다. OCR0 /OCR2 값과 비교하여 일치할 때 마다 compare match 신호가 발생하게 한다.OCR0 / OCR2 레지스터-8비트 TIMER0 와 TIMER2의 TCNT0 / TCNT2 레지스터와 값을 비교하여 일치할 때 마다 compare match 신호가 발생하게 하여 PWM 출력을 컨트롤 한다.OCR1A / OCR1B 레지스터-16비트 타이머인 TIMER1A와 TIMER1B의TCNT1 레지스터와 값을 비교하여 일치할 때 마다 compare match 신호가 발생하게 하여 PWM 출력을 컨트롤 한다.(3)회로 부품①LEDLED의 경우는 전류가 한쪽 방향으로만 흐르기 때문에 MCU에서 전압을 받는지, VCC에서 전압을 받는지에 따라 설치방향을 잘 확인해야 한다. LED의 회로도는 왼쪽의 그림과 같다.②가변 저항가변저항(Potentiome-ATMEGA32에는 10비트의 ADC가 있으며 A포트(0~7번) 8개의 입력을 MUX하여 받을수 있다. 이때 기준 전압은 아날로그 공급전압, 외부 AREF핀, 내부 2.56V 전압을 선택하여 사용할수 있다. ADC를 사용하기 위해서는 ADMUX , ADCSRA , ADC(H/L) 레지스터를 활용하여야 한다.ADC에 사용되는 클럭은 ADC 프리스케일러 를 통해 공급되며 ADCRA의 ADPS 2,1,0 비트에 의해 설정된다.ADC에 의해 변환된 데이터는 위의 수식과 같은 값으로 변환된다.ADMUX : ADC Multiplexer Selection Register. Bit7:6 은 어떤 전압을 활용할 것인지를 정할 수 있다. Bit5는 왼쪽정렬의 이용 bit이며 Bit4:0 은 Input 값에 대한 gain을 활용하는 비트이다.ADCSRA 레지스터 : ADC Control and Status Register. Bit7:5을 1로 둠으로써 ADC사용을 준비한다. 그리고 ADC Division Factor = 128 로 설정하기 위해 Bit3:0을 1로 두어 사용하였다.(5)USART-ATMEGA32 에는 1개의 USART 통신 포트가 있다. 이 직렬통신 포트는 비동기 와 동기 전송모드에서 통신이 가능하고 여러 개의 MCU를 연동하여 동작하는 것도 가능하게 한다.하나의 통신선을 이용해 1개의 비트를 전송하는 직렬 통신 방식은 병렬 방식에 비해 저렴한 특징이 있다. 데이터의 송수신에 있어서 에러의 발생이 있을수 있으므로 USART 통신에 있어서도 에러를 검출하는레지스터가 존재한다.UCSRA : 통신속도(2배 1배)를 제어하며 전체적인 송수신을 제어하는 기능을 한다.UCSRB : USART통신의 송 수신 기능을 활성화 하며 송수신 비트의 크기를설정한다.UCSRC : 동기 및 비동기 모드와 5~9비트의 문자사이즈를 설정한다.3. 본론① Timer/Counter를 사용하기 위해 initialize_timer 함수를 만들었다. 이 함수에서 분주비를 이용하여 원하는 시간값을 얻을 사용하기 위해 initialize_USART 함수를 만들었다. 이번 과제에서 핵심이 되는 구문이다.-UCSRA 레지스터의 Bit 7을 이용하여 송신 버퍼에 대한 설정을 할 수 있다.-UCSRB 레지스터는 데이터의 송신, 수신을 허용할 수 있게 한다.-UCSRC 레지스터는 비동기화 모드를 선택하며 Character Size를 설정할 수 있다.-UBRRL 레지스터를 통하여 UBRR의 값을 선택할 수 있다. (Baud Rate)④ 통신을 내보내기 위하여 give 함수를 만들었다.그 밖에 volatile unsigned char 변수 5개가 사용되었다.이번과제에서는 ADC의 개념과 USART의 사용법을 익힐 수 있었다. 코드를 만들어 하이퍼터미널을 실행시켜 보았는데, 하드웨어가 작동하지 않았다. 그래서 코드가 잘못되었다고 생각하여 계속 코드수정을 하였지만 결국 작동이 안되었다. 과제검사가 끝난 후 코드를 다시 보다가 틀린 부분이 있어서 수정을 하였다. 그 부분은 부록파트의 코드설명에 표시를 하였다.USART를 사용하기 위하여 지난번 과제까지는 사용하지 않았던 하나의 포트를 더 연결했다. 통신을 하기 위해 함수를 2개 더 사용했는데 송신, 수신에 사용하기 위함이었다.0부터 최대 256의 값으로써 들어오는 값을 0V~5V로 표시하기 위해 변수 선언을 통하여 해결하였다. 이 과정에서 double과 int 선언을 사용하였다.4. 결론 - 설계과제 결과중심 토론이번에 하이퍼터미널과의 통신이 제대로 되지 않은 이유가 변수 선언이 틀렸기 때문이라고 생각한다. if문의 조건과 변수 선언에 있어서, 문자가 섞이면서 제대로 선언되지 않았기 때문에 정상적인 작동이 되지 않은 것으로 보인다. 이번 과제는 제목처럼 analog를 digital로 바꿈으로써 오실로스코프처럼 입력되는 전압을 화면에 표시하는 것이었다. 그래프 대신 숫자로 표시하는 것이 오실로스코프와 다른 점이다. 그리고 교류전압을 이용하였으며 ‘q’와 ‘s’라는 문자의 입력을 통하여 작동의 시작과 끝을 알렸다. 이 부분은 i 생겼을 수도 있다고 생각한다.5. 부록#include #include #include volatile unsigned char interrupt_count=0; // 0.5초 만들기 위해 사용volatile unsigned char adc_result=0; // ADCH 변환값 저장한다.volatile unsigned char data=0; // data를 보내기 위해 사용.volatile unsigned char thx_data; // thx 로 받는 값을 입력volatile unsigned char go=0; // go를 통해 interrupt 상황 알림volatile unsigned char max_five=0; // Maximum 5V 까지 가능한 변수volatile unsigned char num1=0; // 첫번째 숫자를 나타내는 변수volatile unsigned char num2=0; // 소수점 나타내기 위한 변수double i=0; //추가된 부분 표시volatile unsigned char num3=0;void initialize_timer(void); // timer 사용하기 위한 함수void initialize_adc(void); // ADC 사용하기 위한 함수void initialize_USART(void); // USART (통신) 사용하기 위한 함수unsigned char thx(); //통신을 받기 위한 함수void give(unsigned char data); //통신을 내보내기 위한 구문void initialize_timer(void){TCCR0=0x6d; // PWM신호 만들기 위해 Fast PWM 셋팅. WGM01:0, clock select 설정해준다.TCNT0=0x64; // {(255-x)+1}*1024/16M=10m [sec] 에서 x 구한 값.TIMSK=0x01; // Timer/Counter0 Overflow interrupt is enabled.sei(); // Global Interrupt Enable}vo1 선택