CodeVisionAVR C 다운로드 및 설치
Tiny2313 연습프로그램으로는 2Kbyte로 충분히 연습할 수 있으므로 평가판으로 설치합니다.
먼저 http://hpinfotech.ro/cvavr_download.html 해당 사이트에 접속해 혹은 다운로드
아이콘을 클릭해서 평가판 CodeVisionAVR
Evaluation을 다운로드 받고 설치합니다.
CodeVisionAVR Evaluation (평가판) 다운로드 - 구글 드라이브로 연결됩니다.
설치 후 바탕화면에서 CodeVisionAVR을 실행합니다.(설치와 실행 과정은 생략합니다.)
(CodeVisionAVR 실행화면)
기본설정을 합니다.
컴파일러의 프로그램 화면 상의 불필요한 창(Code Information, Clipboard History)들을 끕니다.
ISP 프로그래머 설정
프로그램을 다운로드하는데 사용할 ISP프로그래머로 설정해줍니다.사진은 패러렐 프로그래머인 STK200+/300 사용 예제입니다.USB종류의 프로그래머 사용시에는 COM포트 번호도 맞추어 주어야 합니다.
새로운 프로젝트를 시작합니다.
기본설정은 완료되었고 새로운 프로젝트 파일을 만듭니다.
코드위자드를 사용합니다.
코드위자드 사용을 묻는 창이 나타나면 Yes, 사용하도록 하고 사용하고자 하는 칩시리즈를 선택합니다.AVR의 고수라면 코드위자드를 사용하지않고 직접 입력하셔도 좋습니다.
입출력(I/O)설정을 해줍니다.
먼저 사용중인 크리스탈 주파수 값을 입력하고 입출력 설정을 해주는데 아래 내용을 참조하세요.
빨강은 포트A (PORTA) 이고 파랑은 포트B (PORTB) 이고 초록은 포트D (PORTD)입니다.
A포트는 크리스탈과 리셋핀으로 사용 중이기 때문에 사용할 수 없고
B포트와
D포트를 사용 할 수 있습니다.
가령 본인이 설계한 장치가 위 회로와 같다면 B포트만 사용중입니다.
전류가 AVR입장에서 5V를 출력해서 0V로 흐르는 것을 정논리(위 회로), LED기호를 반대로연결 하고 애노드(+)부분을 VCC(5V)에 연결해두고 AVR입장에서 바깥에서 자기에게 전류가들어오며 흐르는 형태를 부논리 라고 합니다.그리고 중학교 과학시간에 배우지만 전류는 +에서 -로 흐릅니다.회로상에서는 VCC에서 GND로 흐릅니다. 이때 LED의 캐소드(-)단자가 GND에 연결되어있을때AVR에서 어떤 신호를 줘야 LED에 불이 들어올까요??
여기서 다음 표를 참고하세요.
명칭 | 전압 | 논리 | 2진수 | 전압레벨 | 입출력 | 풀업/풀다운 |
VCC | 5V | 참(True) | 1 | HIGH | OUTPUT | Pullup |
GND | 0V | 거짓(False) | 0 | LOW | INPUT | Pulldown |
입출력 설정중 Ports에서 예제 회로에서 다른포트를 사용하지 않으므로 설정하지 않아도
무방하고 Port B만 클릭해서 설정합니다.
Data Direction은 입력/출력 설정인데 스위치등 입력이 아니므로 OUT으로 모두 설정합니다.Pullup/Output Value 는 해당 Bit의 초기 상태를 설정하는데 포트B의 초기설정이 0이므로
프로그램을 그대로 사용하면 모든 LED가 꺼진상태로 있습니다.
따라서 While 부분에서 포트 B값을 변경해줄 필요가 있는데 이때 8비트 프로세서이므로
핀 번호별로 할당된 값
포트번호 | PB7 | PB6 | PB5 | PB4 | PB3 | PB2 | PB1 | PB0 |
2진 값 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
즉 모든비트가 1로 설정되야 하므로 128+64+32+16+8+4+2+1 을 한 255를 16진수로 변환하면
FF입니다.
이 값을 16진수라고 표현하기 위해 0x를 붙이며 while 부분에서 PORTB=0xFF값을 주면B포트에 연결 된 모든 LED가 점등 됩니다.
코드위자드 설정을 완료합니다.
코드를 생성하고 저장합니다. Generate Program, save and exit클릭 후 원하는 폴더에
C파일 저장, Prj파일 저장, Cwp파일 저장 합니다.
생성된 코드를 수정합니다.
생성 된 코드는 다음과 같습니다.
/*******************************************************
This program was created by the
CodeWizardAVR V2.60 Evaluation
Automatic Program Generator
?Copyright 1998-2012 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 2012-12-25
Author :
Company :
Comments:
Chip type : ATtiny2313
AVR Core Clock frequency: 8.000000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 32
*******************************************************/
/* */사용은 주석(설명문)이므로 제거
#include <tiny2313.h>
// Declare your global variables here
//사용은 주석(설명문)이므로 제거
void main(void)
{
// Declare your local variables here
//사용은 주석(설명문)이므로 제거
// Crystal Oscillator division factor: 1
//사용은 주석(설명문)이므로 제거
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
클럭 분주비설정 레지스터 사용하지않으므로 제거
// Input/Output Ports initialization
// Port A initialization
// Function: Bit2=In Bit1=In Bit0=In
DDRA=(0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
포트A는 사용하지 않으므로 모두 제거
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Port D initialization
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
포트D는 사용하지 않으므로 모두 제거
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
타이머 카운터는 사용하지 않으므로 모두 제거
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
타이머 카운터는 사용하지 않으므로 모두 제거
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<TOIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<ICIE1) | (0<<OCIE0B) | (0<<TOIE0) | (0<<OCIE0A);
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=(0<<INT1) | (0<<INT0) | (0<<PCIE);
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
인터럽트는 사용하지 않으므로 모두 제거
// USI initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC);
비동기 통신은 사용하지 않으므로 모두제거
// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
비동기 통신은 사용하지 않으므로 모두제거
// Analog Comparator initialization
// Analog Comparator: Off
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
DIDR=0x00;
아날로그 비교기는 사용하지 않으므로 모두제거
while (1)
{
// Place your code here
}
}
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// 출력으로 설정해둔 상태입니다.
컴파일 (빌드) 합니다.
Project > Build All 클릭 빌드가 완료되면 창이 뜨는데 오류가 없으면 No error가 뜨고
Hex, Bin 파일이 프로젝트를 저장했던폴더/Exe에 생성
됩니다.
에러가 뜬다면 Messages 박스를 보고 에러를 수정해서 다시 빌드합니다.
MCU보드에 프로그램을 다운로드합니다.
ISP프로그래머를 연결하고 컴파일로 생성된 Rom또는 Hex파일을 AVR 보드에 다운로드
합니다.
Run the chip programmer 클릭후 다운로드 할 칩 선택
File > Load FLASH 로 초기에 프로젝트 생성했던 폴더/Exe 에서 Hex또는 Rom 을 열기합니다.
Program All을 클릭하고 상태바가 100% 찰때까지 기다립니다.
상태바가 다 차고 나면 EEPROM에 기록을 할꺼냐는 창이 나오는데 Cancel을 눌러줍니다.
작동을 확인해 봅니다.
위 사진처럼 불이 계속해서 들어와 있습니다.
'AVR > AVR 기초, info' 카테고리의 다른 글
AVR의 퓨즈비트란? 퓨즈비트 옵션 및 설정법 정리 - AVR 기초 (9) | 2013.03.31 |
---|---|
AVR 하드웨어 주변회로 설계시 참고사항 정리 - AVR 기초 (35) | 2013.01.30 |
AVR Studio 4 + ToolChain(WinAVR)사용하는 방법 - AVR 통합 개발 환경 (25) | 2012.12.29 |