Switch Capacitor 30 ㎊ Electrolytic Capacitor 10㎌
Crystal 4 ㎒Resistance 10K
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.5. MCU Board
8.5. MCU Board 제작 제작
1 2 3 4 5 6 7 8 9 10
20 19 18 17 16 15 14 13 12 11 1
2 3 4 5 6 7 8 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24
25 13
1 2 3 4 5 6 7 8 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24
25 13
1
2
3
45
6
7
8
910
11
12
13
1415
16
17
18
19
20
IN4148 0.1㎌ 104
8Mhz
100K
30㎊ 30㎊
10K
10㎌
Rom Writer
&
MCU Board 통합 Ver Rom Writer
&
MCU Board
통합 Ver
; ; RS232 RS232 란 란 ? ?
컴퓨터들과 컴퓨터들과 그 그 주변의 주변의 장치들 장치들 간에 간에 직렬 직렬 데이터 데이터 통신에 통신에 대한 대한 표준 표준
본 본 과제에서는 과제에서는 센서가 센서가 측정한 측정한 값을 값을 컴퓨터로 컴퓨터로 전송하여 전송하여 모니터로 모니터로 확 확 인할 인할 수 수 있도록 있도록 함 함
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.6.
8.6. RS232 RS232 통신 통신 Cable Cable 제작 제작
; ; Codevision Codevision AVR(HP Info Tech) AVR(HP Info Tech)
Visual C++ Visual C++ 와 와 같이 같이 통합 통합 개발 개발 환경을 환경을 제공 제공
z z 프로그램밍(C 프로그램밍 (C 언어 언어 ), ), 디버깅 디버깅 , , MCU Writing MCU Writing 등이 등이 가능 가능
http:// http:// www.hpinfotech.ro/html/download.htm www.hpinfotech.ro/html/download.htm 에서 에서 평가판 평가판 다운로드 다운로드 후 후 사용 사용 가능 가능
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.7.
8.7. 소프트웨어 소프트웨어 개발 개발 환경 환경
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.8.
8.8. Codevision Codevision AVR AVR 의 의 프로젝트 프로젝트 생성 생성 (1/3) (1/3)
Step 1
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.8.
8.8. Codevision Codevision AVR AVR 의 의 프로젝트 프로젝트 생성 생성 (2/3) (2/3)
Step 2
1. Chip Select 2. RS232 Setup 3. ADC Setup
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.8.
8.8. Codevision Codevision AVR AVR 의 의 프로젝트 프로젝트 생성 생성 (3/3) (3/3)
Step 3
Basic Code Generation
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.9.
8.9. Codevision Codevision AVR AVR 에서의 에서의 프로그램밍 프로그램밍 (1 (1 /8) /8)
; ; 기본적으로 기본적으로 C의 C 의 문법을 문법을 따른다. 따른다 .
; ; Hardware의 Hardware 의 입출력을 입출력을 제어하기 제어하기 위한 위한 명령어 명령어
DDR[ ] -DDR[ ] - [ ]에는[ ]에는 PORT Name이PORT Name이 들어간다들어간다 A, B, C, or DA, B, C, or D
z z 초기에 초기에 PORT가 PORT 가 출력용(1), 출력용 (1), 입력용 입력용(0] (0]인지를 인지를 결정 결정
–– Ex] DDRB1 = 1 // B PORT 1번Ex] DDRB1 = 1 // B PORT 1번 PIN을PIN을 출력으로출력으로 사용사용
PIN[ ] PIN[ ] –– [ ]에는[ ]에는 PIN Name이PIN Name이 들어간다들어간다 A, B, C, or DA, B, C, or D
z z Port의 Port 의 입력을 입력을 주관 주관
–
– Ex) PINB.1 = 1 // B PORT 1번Ex) PINB.1 = 1 // B PORT 1번 PIN의PIN의 입력이입력이 有有 –– Ex] PINB.1 = 0 // B PORT 1번Ex] PINB.1 = 0 // B PORT 1번 PIN의PIN의 입력이입력이 無無
PORT[ ] -PORT[ ] - [ ]에는[ ]에는 PORT Name이PORT Name이 들어간다들어간다 A, B, C, or DA, B, C, or D
z z Port의 Port 의 출력을 출력을 주관 주관
–– Ex] PORTD.0 = 1` // D PORT 0번Ex] PORTD.0 = 1` // D PORT 0번 PINPIN의의 출력이출력이 有有 –
– Ex] PORTD.0 = 0` // D PORT 0번Ex] PORTD.0 = 0` // D PORT 0번 PINPIN의의 출력이출력이 無無
Byte 단위Byte 단위 입출력이입출력이 가능가능
z z PORT B = 8 bit PORT B = 8 bit 로 로 1 Byte를 1 Byte 를 구성한다 구성한다
–– Ex] PORTB = 0xFFEx] PORTB = 0xFF
»
» PORTB.0~PORTB.7에PORTB.0~PORTB.7에 11을을 출력하여출력하여 11111111의11111111의 구성을구성을 한다한다
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.9.
8.9. Codevision Codevision AVR AVR 에서의 에서의 프로그램밍 프로그램밍 (2 (2 /8) /8)
Example 1. LED 점등
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.9.
8.9. Codevision Codevision AVR AVR 에서의 에서의 프로그램밍 프로그램밍 (3 (3 /8) /8)
#include <mega8535.h>
#include <delay.h>
int count;
void main(void) {
DDRB=0xff; // PORT B를 출력으로 사용
PORTB = 0xff; // PORT B를 ‘11111111’로 초기화
while (1) {
led = 0x01; //PORT B를 ‘00000001’로 초기화 for(count = 0; count <8 ; count++)
{
PORTB = ~led; // NOT 연산을 수행하여 PORT B로 출력 led = led << 1; // 1 Bit씩 Shift 연산을 수행 delay_ms(500); // 500ms Delay
}
}
}
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.9.
8.9. Codevision Codevision AVR AVR 에서의 에서의 프로그램밍 프로그램밍 (4 (4 /8) /8)
Rotate +90˚
Initial Position
Rotate -90˚
; 서보모터
사용자의 명령에 따라 회전 각을 조절할 수 있는 일련의 모터.
여기서는 RC(Remote Control)용 서보모터를 지칭.
10ms ~ 20ms의 주기의 펄스 신호의 폭을 조절하여 제어
0.7msec
1.5msec
2.3msec
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.9.
8.9. Codevision Codevision AVR AVR 에서의 에서의 프로그램밍 프로그램밍 (5 (5 /8) /8)
Example 2. Servo Motor Control
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.9.
8.9. Codevision Codevision AVR AVR 에서의 에서의 프로그램밍 프로그램밍 (6 (6 /8) /8)
#include <mega8535.h>
#include <delay.h>
void servo_init() {
int i;
for(i=0; i<30; i++) {
PORTB.2 = 1;
delay_us(1500);
PORTB.2 = 0;
delay_ms(10);
} }
void servo_rgo() {
int i;
for(i=0; i<30; i++) {
PORTB.2 = 1;
delay_us(700);
PORTB.2 = 0;
delay_ms(10);
} }
void servo_lgo() {
int i;
for(i=0; i<30; i++) {
PORTB.2 = 1;
delay_us(2300);
PORTB.2 = 0;
delay_ms(10);
} }
펄스폭
주기
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.9.
8.9. Codevision Codevision AVR AVR 에서의 에서의 프로그램밍 프로그램밍 (7/8) (7/8)
Example 2. ADC Input & RS232 Output
RS232 Cable
VCC VCC
PC
; ; 가변저항 가변저항 R1에 R1 에 위한 위한 저항 저항 변화 변화 -> - >전류변화 전류변화(Analog) (Analog)를 를 ADC를 ADC 를 통해 통해 Digital로 Digital 로 Converting Converting
; ; Converting된 Converting 된 Digital 값을 Digital 값을 RS232 Cable RS232 Cable 을 을 통해 통해 PC로 PC 로 전송, 전송 , 모니터로 모니터로 확인 확인
8. 8. 제어기 제어기 하드웨어 하드웨어 및 및 소프트웨어 소프트웨어 제작 제작 8.9.
8.9. Codevision Codevision AVR AVR 에서의 에서의 프로그램밍 프로그램밍 (8/8) (8/8)
#include <mega8535.h>
#include <delay.h>
unsigned int read_adc(unsigned char adc_input) {
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
#asm
in r30,mcucr cbr r30,__sm_mask
sbr r30,__se_bit | __sm_adc_noise_red out mcucr,r30
sleep
cbr r30,__se_bit out mcucr,r30
ADC로 부터 Digital 값 읽기(함수) Digital 값 모니터에 출력하기(RS232)
void main(void){
int rs232;
while(1) {
rs232 = read_adc(0);
printf(“PORTA.0 = %d”, rs232);
}