Q&A
| 번호 | 제목 | 작성자 | 등록일 | 조회 |
|---|---|---|---|---|
| 9683 | 답변완료PWM 제어 문의 | 강승원 | 2016-09-01 | 2,031 |
|
사용환경
ATMEGA128 PRO + AM-DC1-3D + USBISP v03.6
Window7 + Iccavr 7.0 + STK500.exe(드라이버 설치)
아래의 PWM 소스 컴파일을 에러없이 완료되는것을 확인하였습니다.
그런데 정,역방향 동작은 안되고 한방향으로만 작동됩니다.
문의사항 입니다.
제가 PWM 제어에 대하여 문외한이라 아래 소스에 대하여 개괄적인 설명을 하여 주실수 없는지요.
아니면 참고자료 또는 참조 소스라도 알려주시면 감사하겠습니다.
그리고 아래 소스에서 회전속도 조절 / 정,역방향 전환 / 브레이크 기능을 구현하려면
어느부분을 변경하여야 하는지 알려 주시면 감사하겠습니다.
============== 소스코드( DC 모터 PWM 제어)================
//ICC-AVR application builder : 2008-05-07 오후 11:19:12
// Target : M128
// Crystal: 16.000Mhz
#include <iom128v.h>
#include <macros.h>
#include <stdio.h>
// DC MOTOR Control
#define MOTOR_PORT PORTC
#define PWM_PORT 0x00
#define PWM1_ON (MOTOR_PORT|=0x01)
#define PWM1_OFF (MOTOR_PORT&=0xFE)
#define DIR1_ON (MOTOR_PORT|=0x02)
#define DIR1_OFF (MOTOR_PORT&=0xFD)
#define ENABLE1_OFF (MOTOR_PORT|=0x04)
#define ENABLE1_ON (MOTOR_PORT&=0xFB)
#define BREAK1_ON (MOTOR_PORT|=0x08)
#define BREAK1_OFF (MOTOR_PORT&=0xF7)
#define LEFT 1
#define RIGHT 2
#define STOP 3
// SPEED Control
#define MIN_SPEED 1
#define MAX_SPEED 1700
#define SPEED_UP 1
// SWITCH Control
#define SW_PORT PINA
#define SW_PORT_DDR DDRA
#define PRESSED 1
#define OPEN 0
volatile unsigned char T20ms=0, num=PWM_PORT, motor_state=LEFT;
volatile unsigned int DCMOTOR[8], Tcount=0, motor_speed,sw_state[8]={0,0,0,0,0,0,0,0};
// printf 함수 사용시 추가할 것.
int putchar(char c)
{
while (((UCSR0A>>UDRE0)&0x01) == 0) ; // UDRE, data register empty
UDR0 = c;
return c;
}
// scanf 함수 사용시 추가할 것.
int getchar(void)
{
while ((UCSR0A & 0x80) == 0);
return UDR0;
}
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0xFF;
PORTD = 0x00;
DDRD = 0x00;
PORTE = 0x00;
DDRE = 0x00;
PORTF = 0x00;
DDRF = 0x00;
PORTG = 0x00;
DDRG = 0x03;
}
//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9615 (0.2%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
UBRR0L = 0x67; //set baud rate lo
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0x18;
}
//TIMER0 initialize - prescale:128
// WGM: Normal
// desired value: 1mSec
// actual value: 1.000mSec (0.0%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT0 = 0x06; //set count
OCR0 = 0xFA;
TCCR0 = 0x04; //start timer
}
#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr(void)
{
TCNT0 = 0x06; //reload counter value
T20ms++;
if(T20ms >= 20)
{
T20ms = 0;
Tcount = 0;
}
}
//TIMER2 initialize - prescale:8
// WGM: Normal
// desired value: 100uSec
// actual value: 100.000uSec (0.0%)
void timer2_init(void)
{
TCCR2 = 0x00; //stop
TCNT2 = 0xEC; //setup
OCR2 = 0x14;
TCCR2 = 0x02; //start
}
#pragma interrupt_handler timer2_ovf_isr:11
void timer2_ovf_isr(void)
{
TCNT2 = 0xEC; //reload counter value
Tcount++;
if(DCMOTOR[num]>Tcount)
MOTOR_PORT |= (0x01<<num);
else
MOTOR_PORT &= (~(0x01<<num));
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
XDIV = 0x00; //xtal divider
XMCRA = 0x00; //external memory
port_init();
uart0_init();
timer0_init();
timer2_init();
MCUCR = 0x00;
EICRA = 0x00; //extended ext ints
EICRB = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK = 0x41; //timer interrupt sources
ETIMSK = 0x00; //extended timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void delay(int cnt)
{
unsigned int i, j;
for(i=0;i<cnt;i++){
for(j=0;j<1000;j++)
{
}
}
}
void motor_init(void){
ENABLE1_ON;
PWM1_ON;
BREAK1_OFF;
DIR1_ON;
printf("Motor Control V01W\r\n");
}
//
void main(void)
{
unsigned char i, j;
init_devices();
//insert your functional code here...
motor_init();
SW_PORT_DDR = 0x00;
DCMOTOR[PWM_PORT] = motor_speed = 800;
while(1){
switch(SW_PORT&0x0f){
case 0x01 : motor_speed+=SPEED_UP;
break;
case 0x02 : motor_speed-=SPEED_UP;
break;
case 0x04 : sw_state[2] = PRESSED;
break;
case 0x08 : sw_state[3] = PRESSED;
break;
case 0x00 : if(sw_state[2] == PRESSED){
if(motor_state == STOP){
motor_state = LEFT;
}else{
motor_state = STOP;
}
sw_state[2] = OPEN;
}
if(sw_state[3] == PRESSED){
if(motor_state == STOP){
motor_state = RIGHT;
}else{
motor_state = STOP;
}
sw_state[3] = OPEN;
}
break;
default : break;
}
if(motor_speed >= MAX_SPEED){
motor_speed = MAX_SPEED;
}
if(motor_speed <= MIN_SPEED){
motor_speed = MIN_SPEED;
}
switch(motor_state){
case LEFT : BREAK1_OFF;
DIR1_ON;
break;
case RIGHT : BREAK1_OFF;
DIR1_OFF;
break;
case STOP : BREAK1_ON;
break;
default : break;
}
DCMOTOR[PWM_PORT] = motor_speed;
delay(4);
printf("SW:%d Speed:%d State:%d\r\n",SW_PORT&0x0f, motor_speed, motor_state);
}
}
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
소스는 크게 문제가 없어 보입니다만,
PORTA에 연결한 AM-TS8 모듈에서 스위치를 D2와 D3 위치의 스위치를 각각 누를 때마다, 방향이 바뀔 겁니다.
감사합니다.
>
>
> 사용환경
> ATMEGA128 PRO + AM-DC1-3D + USBISP v03.6
>
> Window7 + Iccavr 7.0 + STK500.exe(드라이버 설치)
>
> 아래의 PWM 소스 컴파일을 에러없이 완료되는것을 확인하였습니다.
> 그런데 정,역방향 동작은 안되고 한방향으로만 작동됩니다.
>
> 문의사항 입니다.
> 제가 PWM 제어에 대하여 문외한이라 아래 소스에 대하여 개괄적인 설명을 하여 주실수 없는지요.
> 아니면 참고자료 또는 참조 소스라도 알려주시면 감사하겠습니다.
>
> 그리고 아래 소스에서 회전속도 조절 / 정,역방향 전환 / 브레이크 기능을 구현하려면
> 어느부분을 변경하여야 하는지 알려 주시면 감사하겠습니다.
>
> ============== 소스코드( DC 모터 PWM 제어)================
> //ICC-AVR application builder : 2008-05-07 오후 11:19:12
> // Target : M128
> // Crystal: 16.000Mhz
>
> #include <iom128v.h>
> #include <macros.h>
> #include <stdio.h>
>
> // DC MOTOR Control
> #define MOTOR_PORT PORTC
> #define PWM_PORT 0x00
> #define PWM1_ON (MOTOR_PORT|=0x01)
> #define PWM1_OFF (MOTOR_PORT&=0xFE)
> #define DIR1_ON (MOTOR_PORT|=0x02)
> #define DIR1_OFF (MOTOR_PORT&=0xFD)
> #define ENABLE1_OFF (MOTOR_PORT|=0x04)
> #define ENABLE1_ON (MOTOR_PORT&=0xFB)
> #define BREAK1_ON (MOTOR_PORT|=0x08)
> #define BREAK1_OFF (MOTOR_PORT&=0xF7)
> #define LEFT 1
> #define RIGHT 2
> #define STOP 3
>
> // SPEED Control
> #define MIN_SPEED 1
> #define MAX_SPEED 1700
> #define SPEED_UP 1
>
> // SWITCH Control
> #define SW_PORT PINA
> #define SW_PORT_DDR DDRA
> #define PRESSED 1
> #define OPEN 0
>
> volatile unsigned char T20ms=0, num=PWM_PORT, motor_state=LEFT;
> volatile unsigned int DCMOTOR[8], Tcount=0, motor_speed,sw_state[8]={0,0,0,0,0,0,0,0};
>
> // printf 함수 사용시 추가할 것.
> int putchar(char c)
> {
> while (((UCSR0A>>UDRE0)&0x01) == 0) ; // UDRE, data register empty
>
> UDR0 = c;
> return c;
> }
>
> // scanf 함수 사용시 추가할 것.
> int getchar(void)
> {
> while ((UCSR0A & 0x80) == 0);
> return UDR0;
> }
>
> void port_init(void)
> {
> PORTA = 0x00;
> DDRA = 0x00;
> PORTB = 0x00;
> DDRB = 0x00;
> PORTC = 0x00; //m103 output only
> DDRC = 0xFF;
> PORTD = 0x00;
> DDRD = 0x00;
> PORTE = 0x00;
> DDRE = 0x00;
> PORTF = 0x00;
> DDRF = 0x00;
> PORTG = 0x00;
> DDRG = 0x03;
> }
>
>
> //UART0 initialize
> // desired baud rate: 9600
> // actual: baud rate:9615 (0.2%)
> // char size: 8 bit
> // parity: Disabled
> void uart0_init(void)
> {
> UCSR0B = 0x00; //disable while setting baud rate
> UCSR0A = 0x00;
> UCSR0C = 0x06;
> UBRR0L = 0x67; //set baud rate lo
> UBRR0H = 0x00; //set baud rate hi
> UCSR0B = 0x18;
> }
>
> //TIMER0 initialize - prescale:128
> // WGM: Normal
> // desired value: 1mSec
> // actual value: 1.000mSec (0.0%)
> void timer0_init(void)
> {
> TCCR0 = 0x00; //stop
> ASSR = 0x00; //set async mode
> TCNT0 = 0x06; //set count
> OCR0 = 0xFA;
> TCCR0 = 0x04; //start timer
> }
>
> #pragma interrupt_handler timer0_ovf_isr:17
> void timer0_ovf_isr(void)
> {
> TCNT0 = 0x06; //reload counter value
> T20ms++;
> if(T20ms >= 20)
> {
> T20ms = 0;
> Tcount = 0;
> }
> }
>
> //TIMER2 initialize - prescale:8
> // WGM: Normal
> // desired value: 100uSec
> // actual value: 100.000uSec (0.0%)
> void timer2_init(void)
> {
> TCCR2 = 0x00; //stop
> TCNT2 = 0xEC; //setup
> OCR2 = 0x14;
> TCCR2 = 0x02; //start
> }
> #pragma interrupt_handler timer2_ovf_isr:11
> void timer2_ovf_isr(void)
> {
> TCNT2 = 0xEC; //reload counter value
> Tcount++;
>
> if(DCMOTOR[num]>Tcount)
> MOTOR_PORT |= (0x01<<num);
> else
> MOTOR_PORT &= (~(0x01<<num));
> }
>
> //call this routine to initialize all peripherals
> void init_devices(void)
> {
> //stop errant interrupts until set up
> CLI(); //disable all interrupts
> XDIV = 0x00; //xtal divider
> XMCRA = 0x00; //external memory
> port_init();
> uart0_init();
> timer0_init();
> timer2_init();
>
> MCUCR = 0x00;
> EICRA = 0x00; //extended ext ints
> EICRB = 0x00; //extended ext ints
> EIMSK = 0x00;
> TIMSK = 0x41; //timer interrupt sources
> ETIMSK = 0x00; //extended timer interrupt sources
> SEI(); //re-enable interrupts
> //all peripherals are now initialized
> }
>
> void delay(int cnt)
> {
> unsigned int i, j;
> for(i=0;i<cnt;i++){
> for(j=0;j<1000;j++)
> {
> }
> }
> }
>
> void motor_init(void){
> ENABLE1_ON;
> PWM1_ON;
> BREAK1_OFF;
> DIR1_ON;
> printf("Motor Control V01W\r\n");
> }
>
> //
> void main(void)
> {
> unsigned char i, j;
> init_devices();
> //insert your functional code here...
> motor_init();
> SW_PORT_DDR = 0x00;
> DCMOTOR[PWM_PORT] = motor_speed = 800;
>
> while(1){
>
> switch(SW_PORT&0x0f){
> case 0x01 : motor_speed+=SPEED_UP;
> break;
> case 0x02 : motor_speed-=SPEED_UP;
> break;
> case 0x04 : sw_state[2] = PRESSED;
> break;
> case 0x08 : sw_state[3] = PRESSED;
> break;
> case 0x00 : if(sw_state[2] == PRESSED){
> if(motor_state == STOP){
> motor_state = LEFT;
> }else{
> motor_state = STOP;
> }
> sw_state[2] = OPEN;
> }
> if(sw_state[3] == PRESSED){
> if(motor_state == STOP){
> motor_state = RIGHT;
> }else{
> motor_state = STOP;
> }
> sw_state[3] = OPEN;
> }
> break;
>
> default : break;
> }
>
> if(motor_speed >= MAX_SPEED){
> motor_speed = MAX_SPEED;
> }
> if(motor_speed <= MIN_SPEED){
> motor_speed = MIN_SPEED;
> }
>
> switch(motor_state){
> case LEFT : BREAK1_OFF;
> DIR1_ON;
> break;
> case RIGHT : BREAK1_OFF;
> DIR1_OFF;
> break;
> case STOP : BREAK1_ON;
> break;
> default : break;
> }
>
>
> DCMOTOR[PWM_PORT] = motor_speed;
> delay(4);
>
> printf("SW:%d Speed:%d State:%d\r\n",SW_PORT&0x0f, motor_speed, motor_state);
> }
> }
>
|
||||
| 9682 | 답변완료20101답변 이어서 답변 드립니다. | 장상진 | 2016-08-31 | 1,956 |
|
모터 전압으로는 12V 씁니다.
그리고 B포트와 연결시 드라이버 모듈 핀번호 7번에서 OC0이 나올수 있는지요?
전화 해서 물어보니 된다고 하던데 AM-DC2-2D로는 되는데 DC1-3D로는 되지 않아서 다시 문의합니다.
관리자 답변
안녕하세요? 고객님,
네, 질문의 요지를 이제 이해했습니다.
ATMEGA128과의 연결시,
AM-DC2-2D에서는 PB4가 OC0라서, 10핀으로 B 포트에 연결하면, AVR PWM이 PWM2에 연결됩니다.
그래서, 2번 모터가 돌아갔을 겁니다. 포트 1개에는 D0 ~ D7까지의 8개 비트가 존재합니다.
그런데, AM-DC1-3D에서는 1번 모터만 존재하므로, 10핀으로 B포트에 연결하면, 5번핀 즉 D4에 연결된 것이 없으므로, 동작하지 않았을 겁니다.
이 때는, 모터 제어기의 1번과 5번을 서로 선을 연결시켜주면 잘 동작할 겁니다. 방향도 바꾸려면,2번과 6번을 연결시켜 주세요.
7번핀은 D6인데, 질문과 관계없는 것 같습니다.
감사합니다.
>
>
> 모터 전압으로는 12V 씁니다.
> 그리고 B포트와 연결시 드라이버 모듈 핀번호 7번에서 OC0이 나올수 있는지요?
> 전화 해서 물어보니 된다고 하던데 AM-DC2-2D로는 되는데 DC1-3D로는 되지 않아서 다시 문의합니다.
>
|
||||
| 9681 | 답변완료쉽게 풀어쓴 Cortex-M3 | 황홍섭 | 2016-08-31 | 1,828 |
|
E-Mail 드렸으나 회신이 없어 올립니다.
ST-Link/v2 JTAG을 사용하기 위하여 저자님의 알기 쉽게 풀어쓴 Cortex-M3 서적을
구입하여 내용대로 ST-Link/v2 JTAG 연결을 시도하였으나 되지 않아 방문하여 연결
방법을 습득코져 합니다. 바쁘시겠지만 허용되는 시간을 알려 주시면 그시간에
맟추어 방문하겠습니다. 감사합니다.
[email protected]
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
네 유선상으로 약속드린 시간에 오시면 됩니다.
감사합니다.
>
>
> E-Mail 드렸으나 회신이 없어 올립니다.
>
> ST-Link/v2 JTAG을 사용하기 위하여 저자님의 알기 쉽게 풀어쓴 Cortex-M3 서적을
>
> 구입하여 내용대로 ST-Link/v2 JTAG 연결을 시도하였으나 되지 않아 방문하여 연결
>
> 방법을 습득코져 합니다. 바쁘시겠지만 허용되는 시간을 알려 주시면 그시간에
>
> 맟추어 방문하겠습니다. 감사합니다.
>
> [email protected]
>
|
||||
| 9680 | 답변완료에러 문의 (usbisp) | 강승원 | 2016-08-31 | 2,077 |
|
avr mega128pro + usbisp + AM-DC1-3A 조합입니다.
USBISP 드라이버는 V03.5 로 CP210x_VCP_Win_XP_S2K3_Vista_7 를 설치하였는데.
STK500.EXE 디렉토리가 생기지 않아 웹에서 다운로드하여 폴더를 생성하여 그곳으로 지정하였습니다.
포트는 COM3을 설정되었습니다.
cd에 포함된 v03.5 버젼 사용설명처럼 셑팅을 하였습니다.
========= 에러내용==============
C:\iccv7avr\bin\imakew -f TEST_DC_MOTOR.mak
iccavr -o TEST_DC_MOTOR -g -nb:12 -e:0x20000 -ucrtatmega.o -bfunc_lit:0x60.0x10000 -dram_end:0xfff -bdata:0x60.0xfff -dhwstk_size:30 -beeprom:0.4096 -fihx_coff -S2 @TEST_DC_MOTOR.lk -lcatm128
ROM 1% full. 2019 out of 131072 bytes used.
RAM 63 bytes used (does not include stack usage).
Done. Tue Aug 30 23:47:29 2016
"C:\Program Files\Atmel\AVR Tools\STK500\Stk500.exe" -dATMega128 -ccom3
STK500 command line programmer, v 2.2 Atmel Corp (C) 2004-2005.
Error: Could not create Stk500Common layer
Error: Could not create hex file reader
Error: Could not create source buffer
Error: Could not create destination buffer
Fatal: Make sure 'AvrCommon.dll' and 'Stk500Common.dll' are properly installed
Done: there are error(s). Exit code: 1. Tue Aug 30 23:47:29 2016
에러 내용에 대하여 문의합니다. ICCAVR 7.0 DEMO 버젼입니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
AVR Studio V4.19를 자료실에서 AVR 쪽에서 다운로드 받아서 깔아주시면,
C:\Program Files (x86)\Atmel\AVR Tools\STK500 여기에
생깁니다.
여기를 지정해 주셔야 합니다.
감사합니다.
>
>
> avr mega128pro + usbisp + AM-DC1-3A 조합입니다.
>
> USBISP 드라이버는 V03.5 로 CP210x_VCP_Win_XP_S2K3_Vista_7 를 설치하였는데.
> STK500.EXE 디렉토리가 생기지 않아 웹에서 다운로드하여 폴더를 생성하여 그곳으로 지정하였습니다.
>
> 포트는 COM3을 설정되었습니다.
>
> cd에 포함된 v03.5 버젼 사용설명처럼 셑팅을 하였습니다.
>
> ========= 에러내용==============
>
> C:\iccv7avr\bin\imakew -f TEST_DC_MOTOR.mak
> iccavr -o TEST_DC_MOTOR -g -nb:12 -e:0x20000 -ucrtatmega.o -bfunc_lit:0x60.0x10000 -dram_end:0xfff -bdata:0x60.0xfff -dhwstk_size:30 -beeprom:0.4096 -fihx_coff -S2 @TEST_DC_MOTOR.lk -lcatm128
> ROM 1% full. 2019 out of 131072 bytes used.
> RAM 63 bytes used (does not include stack usage).
> Done. Tue Aug 30 23:47:29 2016
> "C:\Program Files\Atmel\AVR Tools\STK500\Stk500.exe" -dATMega128 -ccom3
> STK500 command line programmer, v 2.2 Atmel Corp (C) 2004-2005.
>
> Error: Could not create Stk500Common layer
> Error: Could not create hex file reader
> Error: Could not create source buffer
> Error: Could not create destination buffer
> Fatal: Make sure 'AvrCommon.dll' and 'Stk500Common.dll' are properly installed
> Done: there are error(s). Exit code: 1. Tue Aug 30 23:47:29 2016
>
>
> 에러 내용에 대하여 문의합니다. ICCAVR 7.0 DEMO 버젼입니다.
>
|
||||
| 9679 | 답변완료AM-DC1-3D모터 드라이버 질문입니다. | 장상진 | 2016-08-30 | 1,914 |
|
아래 코드로 AM-DC1-3D모터 드라이버를 제어 할려고 합니다.
AM-DC2-2D로 아래 코드로 사용시 모터가 움직이는데 AM-DC1-3D로는 움직이지가 않습니다.
LM182000과 L298N과의 차이점인지요?
코드비전사용하고ATMEGA128사용합니다.
코드는 아래와 같습니다.
--------------------------------------------------------------
#include<mega128.h>
#include <delay.h>
voidPwm_init(void) //Pwm 초기화
{
TCCR0=0x69; //CTC모드, 분주비 64
TCNT0=0x00;
OCR0=0;
SREG=0x80;
}
int forward (void) //모터 정회전
{
OCR0=400; //속도변환
}
return 0;
}
int stop(void) //모터 정지
{
OCR0=0; //PWM 정지
}
return 0;
}
voidmain(void)
{
portinit(); //포트초기화 함수로써 모터와 연결된 B포트 초기화했고 질문에서는 불필요하여 삭제하였습니다
Pwm_init; //Pwm 초기화
while(1)
{
if (PINE.3==0) //버튼 누름
{
forward(); //정회전
while(1)
{
if (PIND==0xFE) //센서 감지
{
stop(); //정지
break;
}
}
}
}
}
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
AM-DC2-2D는 모터의 전압범위가 5V ~ 45V이지만,
AM-DC1-3D는 모터의 전압봄위가 12V ~ 55V 입니다.
즉, 모터가 5V 모터라면 DC2-2D로는 제어가 가능해도 DC1-3D로는 제어가 되지 않습니다.
혹시 그런 것은 아니신지요?
감사합니다.
>
>
> 아래 코드로 AM-DC1-3D모터 드라이버를 제어 할려고 합니다.
>
> AM-DC2-2D로 아래 코드로 사용시 모터가 움직이는데 AM-DC1-3D로는 움직이지가 않습니다.
>
> LM182000과 L298N과의 차이점인지요?
>
> 코드비전사용하고ATMEGA128사용합니다.
>
>
>
> 코드는 아래와 같습니다.
>
> --------------------------------------------------------------
>
> #include<mega128.h>
> #include <delay.h>
>
>
>
>
>
>
> voidPwm_init(void) //Pwm 초기화
> {
>
> TCCR0=0x69; //CTC모드, 분주비 64
>
> TCNT0=0x00;
> OCR0=0;
>
> SREG=0x80;
> }
>
>
>
> int forward (void) //모터 정회전
> {
> OCR0=400; //속도변환
> }
> return 0;
> }
>
>
>
> int stop(void) //모터 정지
> {
>
> OCR0=0; //PWM 정지
> }
> return 0;
>
> }
>
>
>
>
>
>
>
> voidmain(void)
> {
> portinit(); //포트초기화 함수로써 모터와 연결된 B포트 초기화했고 질문에서는 불필요하여 삭제하였습니다
> Pwm_init; //Pwm 초기화
> while(1)
> {
> if (PINE.3==0) //버튼 누름
>
>
> {
> forward(); //정회전
>
> while(1)
> {
> if (PIND==0xFE) //센서 감지
> {
> stop(); //정지
> break;
> }
> }
> }
>
> }
>
> }
>
|
||||
| 9678 | 답변완료AVR MEGA 128 pro 개발키트 질문입디다. | 강승원 | 2016-08-30 | 1,751 |
|
상기제품과 AM-DC1-3D 구매하여 12V DC모터를 구동하려고 합니다.
예전에 비슷하게 구매하여 실습을 하여 보았으나 전부 까먹어 다시 질문을 드려봅니다.
사용하고 있는 운영체제는 윈도우10 을 사용하고 있습니다.
개발환경 즉 컴파일러 지원과 AM-DC1-3D 드라이버 지원이 윈도우10에서 가능한지요.
전자공학 문외한 이어서 MEGA 128 사용설명서에 보면 GND등 설정하는 설명이 나오는데 꼭 그렇게 해야 하는지요.
구현하려는 동작은 DC 모터 정회전, 브레이크, 역회전 반복 동작입니다.
또한 온보드에 붙어 있는 스위치를 가지고 정지가 가능하게 프로그래밍이 가능한지요.
C 문법은 예전에 공부를 하여 조금 알기는 합니다만.. 이분야에 너무 어두워서 도움을 요청합니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
10핀(2x5) 박스 케이블과 2핀 전원 케이블을 추가 구매하셔야 합니다.
10핀(2x5) 박스 케이블 http://www.newtc.co.kr/dpshop/shop/item.php?it_id=1314600077
2핀 전원케이블 : http://www.newtc.co.kr/dpshop/shop/item.php?it_id=1348609185
그리고, 메인보드의 스위치는 2개 있습니다.
이것으로 한 키는 누를 때마다 정지하게 한키는 동작시작하도록 할 수도 있겟습니다.
구매하신 리스트는 개인정보같아 삭제하였습니다.
감사합니다.
>
>
> 상기제품과 AM-DC1-3D 구매하여 12V DC모터를 구동하려고 합니다.
> 예전에 비슷하게 구매하여 실습을 하여 보았으나 전부 까먹어 다시 질문을 드려봅니다.
>
> 사용하고 있는 운영체제는 윈도우10 을 사용하고 있습니다.
> 개발환경 즉 컴파일러 지원과 AM-DC1-3D 드라이버 지원이 윈도우10에서 가능한지요.
>
> 전자공학 문외한 이어서 MEGA 128 사용설명서에 보면 GND등 설정하는 설명이 나오는데 꼭 그렇게 해야 하는지요.
>
> 구현하려는 동작은 DC 모터 정회전, 브레이크, 역회전 반복 동작입니다.
>
> 또한 온보드에 붙어 있는 스위치를 가지고 정지가 가능하게 프로그래밍이 가능한지요.
>
> C 문법은 예전에 공부를 하여 조금 알기는 합니다만.. 이분야에 너무 어두워서 도움을 요청합니다.
>
|
||||
| 9677 | 답변완료알기쉽게 풀어쓴 Cortex-m3책 예제에 관해 질문이 있습니다. | 배형식 | 2016-08-26 | 2,166 |
|
U(S)ART 장을 공부하고있는데요.
예제 14~ 18까지 통신을 위해 RealTerm 프로그램을 사용을 하는데 사용법을 잘 모르겠어서 질문드립니다.
예제 14~18까지 빌드 했을시 오류는 전혀없었습니다.
예제 14를 빌드후 RealTerm에 직접 키보드로 입력시 맨처음 사진과 같이 입력이 되었습니다.
하지만 그후 예제 16번부터는 예제에 해당하는 그림처럼 출력이 되지않았습니다.
예를 들어 예제 16번을 실행시" Replying ->" 가 자동 출력이 되야하는것으로 알고있으나 RealTerm화면은 백지 상태였습니다.예제 17번도 또한 "Input a number :" 이 자동 출력 되지않았습니다.
혹시 코드를 작성후 ctrl+b(빌드) 후에 어떤것을 추가적으로 해야하나요? (그전까지는 OPENDEBUG를 한것처럼)
2번째 사진은 혹시 연결을 잘 하였는지 보여드리기 위해 첨부하였습니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
예제 15는 UART4를 사용하고 있으므로, 연결을 변경하여 UART4에 연결하셨으면 잘 될 것이구요.
예제 16은 UART1으로 다시 돌아와서 사용하고 있으므로, 현재 사진처럼 연결하면 잘 될 것입니다.
예제 17은 Project를 Trace를 이용하므로, 지원하도록 해서 만드셔야 하고,
예제 18부터는 시스템 호출을 사용하므로, 프로젝트를 Trace를 지원하지 않는 방법으로 만드셔야 합니다.
이렇게 해보시면 되겠습니다.
감사합니다.
>
>
> U(S)ART 장을 공부하고있는데요.
> 예제 14~ 18까지 통신을 위해 RealTerm 프로그램을 사용을 하는데 사용법을 잘 모르겠어서 질문드립니다.
> 예제 14~18까지 빌드 했을시 오류는 전혀없었습니다.
> 예제 14를 빌드후 RealTerm에 직접 키보드로 입력시 맨처음 사진과 같이 입력이 되었습니다.
> 하지만 그후 예제 16번부터는 예제에 해당하는 그림처럼 출력이 되지않았습니다.
> 예를 들어 예제 16번을 실행시" Replying ->" 가 자동 출력이 되야하는것으로 알고있으나 RealTerm화면은 백지 상태였습니다.예제 17번도 또한 "Input a number :" 이 자동 출력 되지않았습니다.
>
> 혹시 코드를 작성후 ctrl+b(빌드) 후에 어떤것을 추가적으로 해야하나요? (그전까지는 OPENDEBUG를 한것처럼)
>
> 2번째 사진은 혹시 연결을 잘 하였는지 보여드리기 위해 첨부하였습니다.
>
|
||||
| 9676 | 답변완료알기쉽게 풀어쓴 cortex-m3 예제7 질문드립니다. | 배형식 | 2016-08-25 | 1,930 |
|
//
// This file is part of the GNU ARM Eclipse distribution.
// Copyright (c) 2014 Liviu Ionescu.
//
// ----------------------------------------------------------------------------
#include "stm32f10x_conf.h"
#include <stdio.h>
#include <stdlib.h>
#include "diag/Trace.h"
// ----------------------------------------------------------------------------
//
// Semihosting STM32F1 empty sample (trace via STDOUT).
//
// Trace support is enabled by adding the TRACE macro definition.
// By default the trace messages are forwarded to the STDOUT output,
// but can be rerouted to any device or completely suppressed, by
// changing the definitions required in system/src/diag/trace_impl.c
// (currently OS_USE_TRACE_ITM, OS_USE_TRACE_SEMIHOSTING_DEBUG/_STDOUT).
//
// ----- main() ---------------------------------------------------------------
// Sample pragmas to cope with warnings. Please note the related line at
// the end of this function, used to pop the compiler diagnostics status.
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wmissing-declarations"
#pragma GCC diagnostic ignored "-Wreturn-type"
void Initialize_GPIO()
{
GPIO_InitTypeDef PC;
trace_puts("...GPIO Initialize Start...\n");
PC.GPIO_Mode=GPIO_Mode_Out_PP;
PC.GPIO_Pin=GPIO_Pin_All;
PC.GPIO_Speed=GPIO_Speed_50MHz;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_Init(GPIOC,&PC);
trace_puts("...GPIO Initialize complete...\n");
}
void Initialize_Trace()
{
trace_initialize();
initialize monitor handles();
}
void delay_ms(int ms)
{
for(volatile int i=0;i<ms/2;i++)
{
for(volatile int j=0;j<12000;j++);
}
}
int
main(int argc, char* argv[])
{
// At this stage the system clock should have already been configured
// at high speed.
Initialize_Trace();
trace_printf("...Trace Start...\n");
Initialize_GPIO();
while (1)
{
for(int i=0;i<8;i++)
{
GPIO_Write(GPIOC,(i<<8));
trace_printf("PORTC LED is not on : %d\n",i);
delay_ms(500);
}
}
//#define LOOP_COUNT (5)
// int loops = LOOP_COUNT;
// if (argc > 1)
// {
// If defined, get the number of loops from the command line,
// configurable via semihosting.
// loops = atoi (argv[1]);
// }
// Short loop.
// for (int i = 0; i < loops; i++)
// {
// Add your code here.
// }
// return 0;
}
#pragma GCC diagnostic pop
// ----------------------------------------------------------------------------
p.233에 있는 예제를 하기위해 코드를 작성후 하였는데
void Initialize_Trace()
{
trace_initialize();
initialize monitor handles();
}
이곳에서 오류가 발생합니다.
initialise 로 책에 나와있지만 initialize가 맞는거 같아 수정하였습니다. 하지만 2개 다 오류가 발생합니다.
혹시몰라서
void Initialize_Trace()
{
Initialize_Trace();
Initialize monitor handles();
}
이렇게도 바꾸어 보았는데도 오류가 생겼습니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품과 교재를 이용하여 주셔서 감사합니다.
제가 직접 방금 테스트 해본 예제를 프로젝트 전체를 압축하여 올려드립니다.
이것으로 보시면 좋겠습니다.
void Initialize_GPIO()
{
GPIO_InitTypeDef PC;
trace_puts("....GPIO Initialize Start...\n");
PC.GPIO_Mode=GPIO_Mode_Out_PP;
PC.GPIO_Pin=GPIO_Pin_All;
PC.GPIO_Speed=GPIO_Speed_50MHz;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_Init(GPIOC,&PC);
trace_puts("...GPIO Initialize complete...\n");
}
void Initialize_Trace()
{
trace_initialize();
initialise_monitor_handles();
}
void delay_ms(int ms)
{
for(volatile int i=0;i<ms/2;i++)
{
for(volatile int j=0;j<12000;j++);
}
}
int main(int argc, char* argv[])
{
Initialize_Trace();
trace_printf("...Trace Start...\n");
Initialize_GPIO();
while(1)
{
for(int i=0;i<8;i++)
{
GPIO_Write(GPIOC,(i<<8));
trace_printf("PORTC LED is not on:%d\n", i);
delay_ms(500);
}
}
return 0;
}
감사합니다.
>
>
> //
> // This file is part of the GNU ARM Eclipse distribution.
> // Copyright (c) 2014 Liviu Ionescu.
> //
>
> // ----------------------------------------------------------------------------
> #include "stm32f10x_conf.h"
> #include <stdio.h>
> #include <stdlib.h>
> #include "diag/Trace.h"
>
> // ----------------------------------------------------------------------------
> //
> // Semihosting STM32F1 empty sample (trace via STDOUT).
> //
> // Trace support is enabled by adding the TRACE macro definition.
> // By default the trace messages are forwarded to the STDOUT output,
> // but can be rerouted to any device or completely suppressed, by
> // changing the definitions required in system/src/diag/trace_impl.c
> // (currently OS_USE_TRACE_ITM, OS_USE_TRACE_SEMIHOSTING_DEBUG/_STDOUT).
> //
>
> // ----- main() ---------------------------------------------------------------
>
> // Sample pragmas to cope with warnings. Please note the related line at
> // the end of this function, used to pop the compiler diagnostics status.
> #pragma GCC diagnostic push
> #pragma GCC diagnostic ignored "-Wunused-parameter"
> #pragma GCC diagnostic ignored "-Wmissing-declarations"
> #pragma GCC diagnostic ignored "-Wreturn-type"
>
> void Initialize_GPIO()
> {
> GPIO_InitTypeDef PC;
> trace_puts("...GPIO Initialize Start...\n");
> PC.GPIO_Mode=GPIO_Mode_Out_PP;
> PC.GPIO_Pin=GPIO_Pin_All;
> PC.GPIO_Speed=GPIO_Speed_50MHz;
> RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
> GPIO_Init(GPIOC,&PC);
> trace_puts("...GPIO Initialize complete...\n");
> }
> void Initialize_Trace()
> {
> trace_initialize();
> initialize monitor handles();
> }
>
> void delay_ms(int ms)
> {
> for(volatile int i=0;i<ms/2;i++)
> {
> for(volatile int j=0;j<12000;j++);
> }
> }
> int
> main(int argc, char* argv[])
> {
> // At this stage the system clock should have already been configured
> // at high speed.
> Initialize_Trace();
> trace_printf("...Trace Start...\n");
> Initialize_GPIO();
> while (1)
> {
> for(int i=0;i<8;i++)
> {
> GPIO_Write(GPIOC,(i<<8));
> trace_printf("PORTC LED is not on : %d\n",i);
> delay_ms(500);
> }
> }
> //#define LOOP_COUNT (5)
> // int loops = LOOP_COUNT;
> // if (argc > 1)
> // {
> // If defined, get the number of loops from the command line,
> // configurable via semihosting.
> // loops = atoi (argv[1]);
> // }
>
> // Short loop.
> // for (int i = 0; i < loops; i++)
> // {
> // Add your code here.
> // }
> // return 0;
> }
>
> #pragma GCC diagnostic pop
>
> // ----------------------------------------------------------------------------
>
>
>
>
>
>
>
> p.233에 있는 예제를 하기위해 코드를 작성후 하였는데
> void Initialize_Trace()
> {
> trace_initialize();
> initialize monitor handles();
> }
> 이곳에서 오류가 발생합니다.
>
> initialise 로 책에 나와있지만 initialize가 맞는거 같아 수정하였습니다. 하지만 2개 다 오류가 발생합니다.
>
> 혹시몰라서
> void Initialize_Trace()
> {
> Initialize_Trace();
> Initialize monitor handles();
> }
> 이렇게도 바꾸어 보았는데도 오류가 생겼습니다.
>
|
||||
| 9675 | 답변완료AVR용 USB-ISP V03.6 제품 문의 | 이수현 | 2016-08-23 | 1,743 |
|
안녕하세요
AVR용 USB-ISP V03.6 제품을 구매해서 사용하고 있습니다.
이 제품에 있는 uart핀을 이용해서 atmega64에 프로그램을 다운로드 할 수 있습니까?
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
일반적으로는 USBISP의 6핀 ISP커넥터를 통하여 프로그램을 다운로드 합니다.
거기에 붙은 4핀 UART 커넥터로는 USB to Serial 기능으로 해서 모니터링 용도로 많이 사용합니다.
하지만, 부트로더를 쓰시는 경우에는 4핀 UART를 통해서도 다운로드 가능합니다.
감사합니다.
>
>
> 안녕하세요
> AVR용 USB-ISP V03.6 제품을 구매해서 사용하고 있습니다.
> 이 제품에 있는 uart핀을 이용해서 atmega64에 프로그램을 다운로드 할 수 있습니까?
>
|
||||
| 9674 | 답변완료제품 문의드립니다 | 이영집 | 2016-08-23 | 1,772 |
|
12v 1.6A dc모터 2개를 모터드라이버 ic랑 연결할려고 합니다.
4A이상 견디는 모터드라이버ic 제품 없나요??
있으면 가르쳐드리면 감사드리겠습니다
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
본사에 5A까지 견디도록 개발된 모터드라이버가 있긴 합니다만,
아직 발매하지는 않고 있습니다.
본사로 방문하시면 테스트 하시고, 아직은 기계로 제작된 것이 아니라
사람이 만든 것인데,이것으로 사용이 괜찮으시면 구매하시는 것도 좋으실 듯 합니다.
감사합니다.
>
>
> 12v 1.6A dc모터 2개를 모터드라이버 ic랑 연결할려고 합니다.
> 4A이상 견디는 모터드라이버ic 제품 없나요??
> 있으면 가르쳐드리면 감사드리겠습니다
>
|
||||
| 9673 | 답변완료atmega2560 개발보드 관련 문의드립니다. | 권희진 | 2016-08-18 | 2,043 |
|
atmega2560 개발보드의 98번핀 AREF를 연결해서 적외선센서를 사용하려고 하는데 보드의 어느 핀을 연결해야하는지 찾지 못해 문의드립니다.
2560모듈의 오른쪽 상단부분에 98번핀이 있다는 것을 찾았지만, 보드의 어느 부분이 98번 핀과 연결된지 몰라 알려주시면 감사하겠습니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
AM-2560PRO 모듈을 사용중이신지 AM-2560USB 모듈을 사용중이신지에 따라 좀 다릅니다만,
AM-2560PRO 모듈 기준으로 설명하여 드립니다.
첨부 파일을 보시면 아시겠지만, 98번핀이 이미 AREF와 VCC 쪽에 연결되어 있습니다.
따라서, 특별히 AREF를 연결하지 않으셔도 노이즈 방지 회로를 거쳐서 5V에 연결되어 있습니다.
굳이 필요하다면 J5의 3번핀에 AREF가 연결되어 있습니다.
감사합니다.
감사합니다.
>
>
> atmega2560 개발보드의 98번핀 AREF를 연결해서 적외선센서를 사용하려고 하는데 보드의 어느 핀을 연결해야하는지 찾지 못해 문의드립니다.
> 2560모듈의 오른쪽 상단부분에 98번핀이 있다는 것을 찾았지만, 보드의 어느 부분이 98번 핀과 연결된지 몰라 알려주시면 감사하겠습니다.
>
|
||||
| 9672 | 답변완료스태핑 모터와 MS2 클럭 아두이노 우노 선 연결방법 | 경덕 | 2016-08-17 | 2,147 |
|
스태핑 모터 클럭 구동모듈 AM-MS2을 이용해서 모터와 연결시킨뒤 24v 전압을 주어도 모터 회전이 일어나지 않는데 무슨 이유때문인지 알 수 있을까요??선 연결법은 첨부한 링크에 적혀있는 그대로 선을 연결했습니다.
혹은 아두이노 우노와 스태핑모터 그리고 AM-MS2만을 이용한 선연결 방법에대해 알려주셨으면 좋겠습니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
24V 전압만을 준다고 되는 것은 아니고, 전류가 충분히 흐를 수 있도록 3A까지 흐를 수 있는 아답타나 SMPS를 사용하여 전원을 주셔야 합니다. 밧데리 등을 연결연결해서 전압만 주신다고 되는 건 아닙니다. 고객님이 그렇게 하셨다는 건 아닌데 혹시나 해서 많은 학생분들이 그렇게 하는 경우가 있어서 말씀드립니다.
선 연결을 할 때에도 선 연결만 된다고 되는 것이 아니라, 선의 굵기도 중요합니다.
연선으로 적절한 전류를 흐를 수 있도록 된 선을 사용해야 하는 데, 단선으로 얇은 선을 쓰거나 하면 전류가 흐를 수 없으므로, 얇은 점퍼선 등으로 연결된 것은 모터 동작이 될 수가 없습니다.
전류가 충분히 흘려줘야 하고, 당연히 전압도 적절해야 합니다.
모터를 처음에 직접 아두이노에 연결하셨다고 들었습니다. 이 경우에는 CPU가 망가졌을 확률도 무시할 수 없습니다. 모터는 반드시 사용전류도 있고 역전류 방지목적도 있고 해서 반드시 모터컨트롤러를 붙여서 사용해야 합니다. 다른 보드로 해보세요.
참고로, 본사에서 한 다른 소스의 링크도 첨부하니, 연결도는 소스의 각 핀 이름을 보시면 알 수 있을 겁니다.
모터 제어기의 모터용 전원에도 반드시 24V나 12V를 줘야 하고, 모터 제어기의 10핀 박스 커넥터에는 5V를 반드시 넣어줘야 합니다.
http://www.newtc.co.kr/dpshop/bbs/board.php?bo_table=m410&wr_id=27
감사합니다.
>
>
> 스태핑 모터 클럭 구동모듈 AM-MS2을 이용해서 모터와 연결시킨뒤 24v 전압을 주어도 모터 회전이 일어나지 않는데 무슨 이유때문인지 알 수 있을까요??선 연결법은 첨부한 링크에 적혀있는 그대로 선을 연결했습니다.
> 혹은 아두이노 우노와 스태핑모터 그리고 AM-MS2만을 이용한 선연결 방법에대해 알려주셨으면 좋겠습니다.
>
|
||||
| 9671 | 답변완료블루투스 마스터 연결 및 설정 | 안세환 | 2016-08-13 | 1,815 |
|
안녕하세요 블루투스 연결을 하고 싶은 학생입니다.
제가 사용하고 있는 제품은
avr kd-128 pro kit와 USB-ISP V03.6, 그리고 귀사의 블루투스 모듈 슬레이브와 마스터입니다.
슬레이브 모듈은 avr의 uart 포트에 연결하니 핸드폰에서 연결이 되어, 핸드폰으로 글자를 치면 text lcd에 글자를 표시하는 정도 성공했습니다.
문제는 마스터 모듈입니다. 슬레이브 모듈은 다른 설정 및 변경없이 바로 사용할 수 있었는데, 마스터 모듈은 아예 핸드폰이나 노트북에 인식이 안됩니다. 여러 글들을 살펴보니 블루투스 연결 설정을 위해 usb-usart? 커넥터 같은 것을 사서 블루투스-pc 바로 연결하여 터미널로 설정하는 것 같은데 이것도 그런 것이 필요한 문제인가요? 아니면 블루투스를 avr에 연결하고 avr을 컴퓨터에 연결해서 하이퍼터미널로 AT 명령어들을 이용해서 바꾸면 되는 건가요?
질문이 많아 죄송합니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
핸드폰은 마스터라서 마스터는 슬레이브를 찾습니다.
저희 블루투스 마스터 모듈은 따라서 핸드폰에 연결될 수 없습니다.
슬레이브를 사용해야 합니다.
마스터 모듈은 슬레이브 모듈과 통신 가능합니다.
감사합니다.
>
>
> 안녕하세요 블루투스 연결을 하고 싶은 학생입니다.
> 제가 사용하고 있는 제품은
> avr kd-128 pro kit와 USB-ISP V03.6, 그리고 귀사의 블루투스 모듈 슬레이브와 마스터입니다.
>
> 슬레이브 모듈은 avr의 uart 포트에 연결하니 핸드폰에서 연결이 되어, 핸드폰으로 글자를 치면 text lcd에 글자를 표시하는 정도 성공했습니다.
>
> 문제는 마스터 모듈입니다. 슬레이브 모듈은 다른 설정 및 변경없이 바로 사용할 수 있었는데, 마스터 모듈은 아예 핸드폰이나 노트북에 인식이 안됩니다. 여러 글들을 살펴보니 블루투스 연결 설정을 위해 usb-usart? 커넥터 같은 것을 사서 블루투스-pc 바로 연결하여 터미널로 설정하는 것 같은데 이것도 그런 것이 필요한 문제인가요? 아니면 블루투스를 avr에 연결하고 avr을 컴퓨터에 연결해서 하이퍼터미널로 AT 명령어들을 이용해서 바꾸면 되는 건가요?
>
> 질문이 많아 죄송합니다.
>
|
||||
| 9670 | 답변완료블루투스 M,S | 정현섭 | 2016-08-08 | 1,712 |
|
안녕하세요 제가 뉴티씨 PM-PT-UART-M,S
마스터와 슬레이브를 구매했는데요 아트메가128(16Mhz)를 이용해서 마스터쪽에서 신호를 보내 슬레이브에서 신호를 받아 LED를 키는 간단한 동작을 하고 싶은데..(MCU1->마스터->슬레이브->MCU2->LED ON) 블루투스를 처음 이용해 보는거라서 TX,RX 크로스 연결은 알고 있습니다. 처음이라 감이 안잡혀서 그런데 강의 자료나 간단한 실험해볼 소스가 있나요..? 둘다 없다면 사용 방법좀 부탁드립니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.
저희 홈페이지의 자료실 -> AVR -> 블루투스로 검색하시면 예제 소스로 있습니다.
일단, 링크 올려드리겠습니다.
http://newtc.co.kr/dpshop/bbs/board.php?bo_table=m41&wr_id=1044&sca=&sfl=wr_subject%7C%7Cwr_content&stx=%EB%B8%94%EB%A3%A8%ED%88%AC%EC%8A%A4&sop=and
>
>
> 안녕하세요 제가 뉴티씨 PM-PT-UART-M,S
> 마스터와 슬레이브를 구매했는데요 아트메가128(16Mhz)를 이용해서 마스터쪽에서 신호를 보내 슬레이브에서 신호를 받아 LED를 키는 간단한 동작을 하고 싶은데..(MCU1->마스터->슬레이브->MCU2->LED ON) 블루투스를 처음 이용해 보는거라서 TX,RX 크로스 연결은 알고 있습니다. 처음이라 감이 안잡혀서 그런데 강의 자료나 간단한 실험해볼 소스가 있나요..? 둘다 없다면 사용 방법좀 부탁드립니다.
>
|
||||
| 9669 | 답변완료20080 답변 추가 질문입니다. | 장상진 | 2016-08-04 | 1,602 |
|
첫째, PWM 초기화 코드가 없다고 하셨는데 제가 올린 코드에
void Pwm_init(void) //Pwm 초기화
> {
>
> TCCR0=0x0C; //CTC모드, 분주비 64
>
> TCNT0=0x00;
> OCR0=0;
> }
이 코드가 그럼 초기화랑 관계가 없는 건가요?(제가 잘 몰라서...)
둘째, PWM2를 이용할려고 한다면 그럼 모터와 드라이버 연결을 CH1으로 해야 하는 건가요?(현재 CH2로 연결이 되어 있습니다.
셋째, 타이머 인터럽트를 ON/OFF 해서 아예 인터럽트 발생을 안일어나게 하는것을 좀더 설명을 해 주시겠어요? 이해가 잘 안가서요... 보통 PWM 발생 시킬려면 TIMSK 로 해야 하는 걸로 알고 있어서요...
넷째, 그리고 이런 경우에는 역회전을 어떻게 하는건가요? 그냥 PORTB.1=0 정회전, PORTB.1=1 역회전 이렇게 설정하면 되는가요?
답변 부탁드립니다.
관리자 답변
안녕하세요? 고객님,
저희 뉴티씨를 이용하여 주셔서 감사합니다.
답변 드리겠습니다.
>
> 첫째, PWM 초기화 코드가 없다고 하셨는데 제가 올린 코드에
> void Pwm_init(void) //Pwm 초기화
> > {
> > TCCR0=0x0C; //CTC모드, 분주비 64
> > TCNT0=0x00;
> > OCR0=0;
> > }
> 이 코드가 그럼 초기화랑 관계가 없는 건가요?(제가 잘 몰라서...)
===> TCCR0의 초기화는 관계가 있습니다.
TCCR0=(0<<CS02)|(0<<CS01)|(1<<CS00)|(1<<WGM00)|(1<<WGM01)|(1<<COM01);
이렇게 설정하세요.
> 둘째, PWM2를 이용할려고 한다면 그럼 모터와 드라이버 연결을 CH1으로 해야 하는 건가요?(현재 CH2로 연결이 되어 있습니다.
==> 10핀(2x5박스) 케이블로 연결한다면, CH2가 맞죠.
> 셋째, 타이머 인터럽트를 ON/OFF 해서 아예 인터럽트 발생을 안일어나게 하는것을 좀더 설명을 해 주시겠어요? 이해가 잘 안가서요... 보통 PWM 발생 시킬려면 TIMSK 로 해야 하는 걸로 알고 있어서요...
==> TIMSK에서 TIMSK = 0x02; 이렇게 해주면 Timer0 Output Compare Interrupt가 mask가 풀려서 인터럽트가 걸리게 됩니다. 글로벌 인터럽트인 SREG = 0x80; 이렇게 하는 순간 전체 인터럽트가 동작하니깐요.
TIMSK = 0x00; 이렇게 하면 인터럽트가 안걸리게 되죠.
> 넷째, 그리고 이런 경우에는 역회전을 어떻게 하는건가요? 그냥 PORTB.1=0 정회전, PORTB.1=1 역회전 이렇게 설정하면 되는가요?
==> 방향은CH2니까.....PORTB.5 = 0; 정회전.....PORTB.5 = 1; 역회전 이렇게 되는 겁니다.
> 답변 부탁드립니다.
==> 답변이 되었나요? 감사합니다.
|
||||
