Practice more and More

Keil uVision5 사용시

Cannot load flash device description.

Error : Flash Download failed - "Cortex-M0"

오류시 세팅 방법.

 

Programming Algorithm 에 등록이 되어 있어야 가능. Add 버튼 클릭.

 

Flash load 누르면 정상적으로 동작하는것 확인가능.

 

[AVR] DC_motor 제어

AVR&ARM2016. 5. 26. 11:49

DC모터를 타이머에 있는 PWM기능을 이용하여 제어.

 

관련 레지스터

 

TCCR1A, TCCR1B, TCCR1C, TCNT1, OCR1A, OCR1B, OCR1C

 

8bit Fast PWM을 분주비 256으로 예시로 해보면,

 

1.TCCR1A

 

 

TCCR1A 7,6번 비트의 경우 시작 파형을 선택해주는 부분인데, 10 이면 High로 시작해서 Low로 11이면 Low로 시작해서 High로 바뀌게 된다.

Waveform Generation Mode WGM1, WGM0는 TCCR1B에 있는 WGM3과 WGM 2와 같이 보면 편하다.

 

 

2. TCCR1B

 

 

TCCR1B 의 경우 WGM으로 모드 설정해주고, 분주비를 설정하는 부분이 있다.

256으로 분주할 경우 하위 3비트에 100으로 해주면 된다.

 

3. TCNT1

타이머 시간을 조정시 사용하는데 PWM 사용시에는 0으로 두고 사용가능.

 

4. OCR1A

듀티비를 조정할 수 있는 부분. 시작부터 진행되어 OCR1A값에 도달하면 값을 반전 시켜줌.

 

 

요약

Fast PWM 8bit / 256분주로 이용시

 

TCCR1A= 0x81;

TCCR1B= 0x0C;

TCNT1=0;

OCR1A=0;          //원하는  PWM 듀티비 8bit 사용중이라서 0~255까지 값 넣어주어야함.

 

테이블은 atmega128 메뉴얼 참조.

int vel=0;

 

if(vel<=50)  PORTD=~0b11111111;

 

 

여기에서 warning: large interger implicitly truncated to unsigned type  오류가 발생.

 

 

2진수로되어 있는 부분 앞에 (unsigned char)로 해주면 됨.

 

if(vel<=50)  PORTD=(unsigned char)~0b11111111;

 

이런식으로 하면 warning 사라지는 것을 확인.

 

'AVR&ARM' 카테고리의 다른 글

STLINK 오류 cannot load flash device description  (0) 2017.04.14
[AVR] DC_motor 제어  (1) 2016.05.26
avr 처음 사용시 Fuse 설정  (0) 2016.05.13
이진수 MSB, LSB 역순으로 만들기 함수  (0) 2016.05.11
[AVR studio] warning "F_CPU~"  (0) 2016.04.20

Avr studio 에서 처음 Avr을 연결하여 사용할 경우 Fuse를 설정하여 주어야한다.

 

 

AVR 아이콘 클릭하여 창을 띄운다.

또는 Tools - Program avr - auto connect 를 클릭해도 된다.

 

 

Main 탭에서 Device and Signature Bytes에서 ATmega128로 설정하고

Read signature 클릭.

 

 

좌측에 읽어들인 값이 생긴다면 연결이 된것으로 확인할 수 있고 다음 으로 넘어가면 된다.

안될경우 연결이나 땜질에 문제가 있는지 한번더 확인해본다.

 

 

Fuses탭에서 SPIEN 만 체크하고 나머지는 체크를 풀어준다.

SUT_CKSEL 에서 사용할 클럭을 적어줌

: 사용클럭이 내부인지 외부인지, 각 주파수 확인해서 설정.

0ms 4ms 64ms는 리셋 되는 시간. 느릴수록 시스템에 안정적.

16Mhz 크리스탈을 사용하여 이번에는 맨 아래 설정.

 

 

 

간단 요약

1. Main탭에서 읽기 가능한지 확인.             
2. Fuses 탭에서 SPIEN 만 체크 나머지는 해제

3. SUT_CKSEL 에서 사용 주파수 설정.           
4. Program 클릭 완료.                              

void reverse(unsigned char data)
{
 unsigned char tmp=0;


 
 // 데이터 뒤집어 주는 부분.
 for(char i=0; i<8;i++)
 {

  tmp|=(data&0x01)<<(7-i);        // 0x01 비트 부터 비교해서 넣어줌.
 
  data>>=1;                            // 데이터를 옮겨서 다음비트 비교할 수 있도록 해줌.
 
 } 
 

 
 data = tmp;
}

#warning "F_CPU not defined for <util/delay.h>" [Wcpp]

 

이때

 

메뉴에서 Project- Configuration option 에서

 

 

 

 

 

 

avr 클럭을 넣어주면 오류 사라짐.

(16Mhz라서 16000000을 넣어주었음.)

void lcd_gotoxy(char x, char y)  //커서 이동
{
 lcd_cmd_write( 0x80|(0x40 * y) + x); 

}

 

error

 

suggest parentheses around arithmetic in operand of '|' [-Wparentheses]

 

라는 오류가 나올때 수식을 좀 더 명확 하게 만들어주면 Warning이 사라짐.

 

void lcd_gotoxy(char x, char y)  //커서 이동
{
 lcd_cmd_write( 0x80|((0x40 * y) + x)); 

}

 

위 수식 처럼 명확하게 해주면 완료.