Q&A
| 번호 | 제목 | 작성자 | 등록일 | 조회 |
|---|---|---|---|---|
| 2343 | 답변완료AD-USBISP 타겟보드 접속문제 | 문현기 | 2009-02-12 | 1,461 |
|
귀사의 AD-USBISP를 구매하였습니다.
PL2303-Driver_XP2K_v204102 을 설치하여서
COM port 에서 제대로 인식을 합니다.
AVR Studio 4.12 SP3 을 사용하고 있는데 타겟보드와
연결하면 보드를 인식하지 못합니다.
타겟보드는 Atmega128 을 사용하고,MKll 로 다운로드 잘되던 보드입니다.
STK500 or AVRISP 을 선택한 후 COM port 를 선택하면
경고 문구가 뜨면서 downgrade 를 하라고 나오는데
확인을 누르면 upgrade program 이 실행되지만 다운로드할 파일을 찾지못해서
Error 가 나오고, 취소를 누르게 되면 다운로드 창이 뜨지만
타겟보드에 접속하지 못합니다.
해결방안이나 조치사항을 알려주시기 바랍니다.
관리자 답변
안녕하세요..고객님...
저희 NewTC제품을 이용해 주셔서 감사합니다.
타겟보더가 어떤 제품인지 전혀 정보가 없네요.
예전에 엔티렉스에서 나온 128보더 같은 경우에는 따로 핀하나를 더 두어 그 핀에 하이신호를 보낼때만 isp다운로더가 가능했습니다.
저희 USBISP같은 경우 ISP표준에 따라 만들어 졌습니다.
AVR Studio는 4.13(sp2, sp3) 이상의 버젼을 사용해 주세요.
감사합니다.
>귀사의 AD-USBISP를 구매하였습니다.
>PL2303-Driver_XP2K_v204102 을 설치하여서
>COM port 에서 제대로 인식을 합니다.
>AVR Studio 4.12 SP3 을 사용하고 있는데 타겟보드와
>연결하면 보드를 인식하지 못합니다.
>타겟보드는 MKll 로 다운로드 잘되던 보드입니다.
>
>STK500 or AVRISP 을 선택한 후 COM port 를 선택하면
>경고 문구가 뜨면서 downgrade 를 하라고 나오는데
>확인을 누르면 upgrade program 이 실행되지만 다운로드할 파일을 찾지못해서
>Error 가 나오고, 취소를 누르게 되면 다운로드 창이 뜨지만
>타겟보드에 접속하지 못합니다.
>해결방안이나 조치사항을 알려주시기 바랍니다.
>
|
||||
| 2342 | 답변완료KR-DL16 구매 문의 | 윤석진 | 2009-02-11 | 1,411 |
|
KR-DL16을 구매하려고 하는데
제품 설명을 보니깐 컴퓨터와 연결을 할 때 AD-USBUART를 별매를 하라고
돼 있는데 AD-USBISP로 컴퓨터와 KR-DL16이 연결이 가능 한지요?
감사합니다.
관리자 답변
안녕하세요? 고객님,
USBISP는 USB 방식의 STK500 프로토콜을 지원하는 플래시/EEPROM 프로그램 다운로더입니다.
USBUART는 시리얼로 데이터를 주고받으면서 모니터링하는 장비입니다.
즉, 단순히 USB <-> TTL Level의 UART 간 연결하는 장비입니다.
감사합니다.
>KR-DL16을 구매하려고 하는데
>제품 설명을 보니깐 컴퓨터와 연결을 할 때 AD-USBUART를 별매를 하라고
>돼 있는데 AD-USBISP로 컴퓨터와 KR-DL16이 연결이 가능 한지요?
>
>감사합니다.
>
>
|
||||
| 2341 | 답변완료ab-m128pro-a를 구매하였는데요... | 손태일 | 2009-02-11 | 1,397 |
|
usbisp-l 을 사용하여 프로그램을 다운하는데요
테스트 해보기 위해
홈페이지에 있는 예제프로그램을
7segment와 모듈테스트를 다운받아 프로젝트 열기해서 파일불러와서 하는데
계속 에러네요....
C:\\iccv7avr\\bin\\iccavr -e -D__ICC_VERSION="7.19" -DATMega128 -l -g -MLongJump -MHasMul -MEnhanced -Wf-use_elpm -e:0x20000 -ucrtatmega.o -bfunc_lit:0x8c.0x10000 -dram_end:0x10ff -bdata:0x100.0x10ff -dhwstk_size:30 -beeprom:0.4096 -fihx_coff -S2 ModuleTest.c -lcatm128
Device 0% full.
Done. Wed Feb 11 18:46:17 2009
"C:\\Program Files\\Atmel\\AVR Tools\\STK500\\Stk500.exe" -dATMega128 -ccom3 .dATmega128
STK500 command line programmer, v 2.2 Atmel Corp (C) 2004-2005.
이런 에러가 뜹니다...분명 usbisp 메뉴얼 보고 iccavr 변경 모두 하였는데..
음.....안되는데요??
관리자 답변
안녕하세요? 고객님,
현재, 위에 나오는 메시지는 에러가 아닙니다.
컴파일이 잘 되었다는 메시지입니다.
밑에 부분은 메시지가 나오다가 잘렸는 데,
메시지 전체를 다 올려주셔야 알 수 있을 것 같습니다.
수고하세요.
>usbisp-l 을 사용하여 프로그램을 다운하는데요
>테스트 해보기 위해
>홈페이지에 있는 예제프로그램을
>7segment와 모듈테스트를 다운받아 프로젝트 열기해서 파일불러와서 하는데
>계속 에러네요....
>C:\\iccv7avr\\bin\\iccavr -e -D__ICC_VERSION="7.19" -DATMega128 -l -g -MLongJump -MHasMul -MEnhanced -Wf-use_elpm -e:0x20000 -ucrtatmega.o -bfunc_lit:0x8c.0x10000 -dram_end:0x10ff -bdata:0x100.0x10ff -dhwstk_size:30 -beeprom:0.4096 -fihx_coff -S2 ModuleTest.c -lcatm128
>Device 0% full.
>Done. Wed Feb 11 18:46:17 2009
>"C:\\Program Files\\Atmel\\AVR Tools\\STK500\\Stk500.exe" -dATMega128 -ccom3 .dATmega128
>STK500 command line programmer, v 2.2 Atmel Corp (C) 2004-2005.
>
>이런 에러가 뜹니다...분명 usbisp 메뉴얼 보고 iccavr 변경 모두 하였는데..
>음.....안되는데요??
|
||||
| 2340 | 답변완료모터상 관련 질문 | 최현준 | 2009-02-11 | 1,457 |
|
아 그리고 아래 모터상을 16진수로 표현한다는 것은 알겠는데
unsigned char mot_l[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
unsigned char mot_r[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};
에서 위의 mot_l[] 를 예를 들면
1001 1000 1100 0100 0110 0010 0011 0001 을 이진수로 표현하면 이렇게 표현되는데
정확히 무엇을 말하는 거죠??
개념이해가 되지 않습니다. 설명 부탁드리겠습니다.
관리자 답변
모터의 상에 매칭되는 8비트 값들이 1, 2, 4, 8 이와 같이 변한다고 가정하면,
그 값들이 들어가는 포트에 연결된 모듈의 핀들을 각각 제어 한다고 보면 되구요.
그 핀들의 기능이 무엇인지 보면 되겠습니다.
우선, 몇 상 제어 방식으로 할 건지를 정한 다음, 그에 따라서 소스를 역으로 짜 들어가면 되겠습니다. 스테핑 모터 구동 모듈의 데이터 핀 배열에 맞춰서 데이터를 넣어 줘야 겠지요. 자세한 것은 스테핑 모터 구동 관련된 본사 강좌를 참고하면 좋을 것 같네요. 초초보 강좌 2에도 있습니다.
http://www.newtc.co.kr/board/download.php?id=mega128_lecture&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=85&filenum=1
10장 스테핑 모터에 보면 아주 자세하게 나와있습니다.
수고하세요.
>
>아 그리고 아래 모터상을 16진수로 표현한다는 것은 알겠는데
>
>unsigned char mot_l[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
>unsigned char mot_r[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};
>
>에서 위의 mot_l[] 를 예를 들면
>
>1001 1000 1100 0100 0110 0010 0011 0001 을 이진수로 표현하면 이렇게 표현되는데
>
>정확히 무엇을 말하는 거죠??
>
>개념이해가 되지 않습니다. 설명 부탁드리겠습니다.
>
>
>
>
>
>
|
||||
| 2339 | 답변완료속도제어 문의 | 최현준 | 2009-02-11 | 1,532 |
|
안녕하세요, 저번에 스텝모터 구동이 안돼서 사무실로 찾아갔던 학생입니다.
제가 아래와 같이 예제를 참고해서 소스를 짰는데 안되는 부분이 있어서 질문을
드립니다.
전체적인 알고리즘은 대략 이렇습니다.
640~0 이라는 값에서 중간값을 320 으로 놓고 컴퓨터로 처리한 a 값이 avr 로 가게
됩니다. a 라는 값이 320 을 넘게 되면 왼쪽바퀴에 속도를 더해서 320으로 a 값이 되도록 만들고 320 이 안되게 되면 오른쪽 바퀴에 속도를 더해서 320 으로 a 값이 되게 했습니다. 제가 스텝모터의 개념을 잘 이해 못했을 수도 있는데요, 저는 오른쪽 바퀴와 왼쪽바퀴의 속도를 가감속 해줘서 이를 제어한다고 생각했는데요, 컴퓨터로 부터 수신한 a값이 변해도 바퀴의 변화가 없습니다.
바퀴의 속도를 제어할려면 어떻게 해야될까요? 밑에 제가 짠 알고리즘이 잘못된건가요???
------------------------------------------------------------------------
//ICC-AVR application builder : 2009-01-29 오후 12:10:14
// Target : M128
// Crystal: 16.000Mhz
#include <stdio.h>
#include <iom128v.h>
#include <macros.h>
#define Center_Point 320
#define Left_Margin Center_Point +80
#define Right_Margin Center_Point -80
#define Center_Left Center_Point + 30
#define Center_Right Center_Point - 30
#define Original_Speed 0xa0
unsigned char mot_l[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
unsigned char mot_r[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};
int i=0,j=0; //모터 구동 변수
int a=320; //시리얼통신변수
int temp_l = Original_Speed; //모터 속도 조절 변수(00-F0까지)
int temp_r = Original_Speed; //모터 속도 조절 변수(00-F0까지)
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 = 0x00;
}
//TIMER0 initialize - prescale:1024
// WGM: Normal
// desired value: 1mSec
// actual value: 0.960mSec (4.0%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT0 = 0xF1; //set count
OCR0 = 0x0F;
TCCR0 = 0x07; //start timer
}
#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr(void)
{
if (a > Left_Margin && a < 600)
{
temp_l = Original_Speed + 40;
}
else if ( a <= Left_Margin && a >= Center_Left ){
temp_l = Original_Speed + 10;
}
else if ( a <= Center_Left && a >= Center_Right )
{
temp_l = Original_Speed;
}
TCNT0 = temp_l; //reload counter value
PORTC= mot_r[i]| mot_l[j];
// a = 0;
i++;
if( i > 7 )
{
i = 0;
}
}
//TIMER2 initialize - prescale:1024
// WGM: Normal
// desired value: 1mSec
// actual value: 0.960mSec (4.0%)
void timer2_init(void)
{
TCCR2 = 0x00; //stop
TCNT2 = 0xF1; //setup
OCR2 = 0x0F;
TCCR2 = 0x05; //start
}
#pragma interrupt_handler timer2_ovf_isr:11
void timer2_ovf_isr(void)
{
if (a < Right_Margin && a > 40 )
{
temp_r = Original_Speed + 40;
}
else if ( a >= Right_Margin && a <= Center_Right ){
temp_r= Original_Speed + 10;
}
else if ( a <= Center_Left && a >= Center_Right )
{
temp_r = Original_Speed;
}
TCNT2 = temp_r; //reload counter value
PORTC= mot_r[i];
// a = 0;
j++;
if( j > 7 )
{
j = 0;
}
}
//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 = 0x98;
}
/*
#pragma interrupt_handler uart0_rx_isr:19
void uart0_rx_isr(void)
{
//uart has received a character in UDR
a = UDR0 ;
b = a;
//printf("%d\\n\\r",a);
}
*/
//UART1 initialize
// desired baud rate:9600
// actual baud rate:9615 (0.2%)
// char size: 8 bit
// parity: Disabled
void uart1_init(void)
{
UCSR1B = 0x00; //disable while setting baud rate
UCSR1A = 0x00;
UCSR1C = 0x06;
UBRR1L = 0x67; //set baud rate lo
UBRR1H = 0x00; //set baud rate hi
UCSR1B = 0x58;
}
/*
#pragma interrupt_handler uart1_tx_isr:33
void uart1_tx_isr(void)
{
//character has been transmitted
//////LCD출력부분........
//printf("$B,0\\r"); //커서 끄기
printf("$D,l\\r"); //LCD화면 켜기
//printf("$L,1\\r"); //백라이트 켜기
//while(1){
//printf("$C\\r"); //화면 지우기
printf("$G,l,l\\r");//커서를 첫번째줄 첫번째 칸으로 이동
//printf("$T,N.T.C Testing..\\r"); // 문자열 출력
printf("$T, %d\\r", b);
//temp++;
delay(1000);
//}
}
*/
//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();
timer0_init();
timer2_init();
//uart0_init();
//uart1_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 n)
{
volatile int i,j;
for(i=1;i<n;i++)
{
for(j=1;j<600;j++);
}
}
//
void main(void) // main 함수
{
init_devices();
//insert your functional code here...
/////////////// 내가 바꿔야 될 부분!!!/////
while(1)
{
printf(" 111 /r");
}
}
관리자 답변
안녕하세요? 고객님,
죄송하지만, 본사에서 소스수정은 해드리지 않습니다.
다만, 말씀드리자면, 자료실->기존자료실에서 본사의 소스를 참고하시고,
강좌->AVR 강좌에서 스테핑 모터 강좌를 읽어 보시기 바랍니다.
DC 모터와 스테핑 모터는 차이가 있습니다. 스테핑 모터는 스텝에 따라 움직이죠.
그 스텝을 얼마나 자주주느냐에 따라 속도가 달라집니다.
감사합니다.
>안녕하세요, 저번에 스텝모터 구동이 안돼서 사무실로 찾아갔던 학생입니다.
>제가 아래와 같이 예제를 참고해서 소스를 짰는데 안되는 부분이 있어서 질문을
>드립니다.
>
>전체적인 알고리즘은 대략 이렇습니다.
>640~0 이라는 값에서 중간값을 320 으로 놓고 컴퓨터로 처리한 a 값이 avr 로 가게
>됩니다. a 라는 값이 320 을 넘게 되면 왼쪽바퀴에 속도를 더해서 320으로 a 값이 되도록 만들고 320 이 안되게 되면 오른쪽 바퀴에 속도를 더해서 320 으로 a 값이 되게 했습니다. 제가 스텝모터의 개념을 잘 이해 못했을 수도 있는데요, 저는 오른쪽 바퀴와 왼쪽바퀴의 속도를 가감속 해줘서 이를 제어한다고 생각했는데요, 컴퓨터로 부터 수신한 a값이 변해도 바퀴의 변화가 없습니다.
>
>바퀴의 속도를 제어할려면 어떻게 해야될까요? 밑에 제가 짠 알고리즘이 잘못된건가요???
>
>
>------------------------------------------------------------------------
>
>//ICC-AVR application builder : 2009-01-29 오후 12:10:14
>// Target : M128
>// Crystal: 16.000Mhz
>
>#include <stdio.h>
>#include <iom128v.h>
>#include <macros.h>
>
>#define Center_Point 320
>#define Left_Margin Center_Point +80
>#define Right_Margin Center_Point -80
>
>#define Center_Left Center_Point + 30
>#define Center_Right Center_Point - 30
>
>#define Original_Speed 0xa0
>
>
>
>unsigned char mot_l[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
>unsigned char mot_r[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};
>
>
>int i=0,j=0; //모터 구동 변수
>int a=320; //시리얼통신변수
>int temp_l = Original_Speed; //모터 속도 조절 변수(00-F0까지)
>int temp_r = Original_Speed; //모터 속도 조절 변수(00-F0까지)
>
>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 = 0x00;
>}
>
>
>//TIMER0 initialize - prescale:1024
>// WGM: Normal
>// desired value: 1mSec
>// actual value: 0.960mSec (4.0%)
>void timer0_init(void)
>{
> TCCR0 = 0x00; //stop
> ASSR = 0x00; //set async mode
> TCNT0 = 0xF1; //set count
> OCR0 = 0x0F;
> TCCR0 = 0x07; //start timer
>}
>
>#pragma interrupt_handler timer0_ovf_isr:17
>void timer0_ovf_isr(void)
>{
> if (a > Left_Margin && a < 600)
> {
> temp_l = Original_Speed + 40;
> }
>
> else if ( a <= Left_Margin && a >= Center_Left ){
> temp_l = Original_Speed + 10;
> }
>
> else if ( a <= Center_Left && a >= Center_Right )
> {
> temp_l = Original_Speed;
> }
>
> TCNT0 = temp_l; //reload counter value
>
> PORTC= mot_r[i]| mot_l[j];
>
>// a = 0;
> i++;
> if( i > 7 )
> {
> i = 0;
> }
>
>
>}
>
>//TIMER2 initialize - prescale:1024
>// WGM: Normal
>// desired value: 1mSec
>// actual value: 0.960mSec (4.0%)
>void timer2_init(void)
>{
> TCCR2 = 0x00; //stop
> TCNT2 = 0xF1; //setup
> OCR2 = 0x0F;
> TCCR2 = 0x05; //start
>}
>
>#pragma interrupt_handler timer2_ovf_isr:11
>void timer2_ovf_isr(void)
>{
>
> if (a < Right_Margin && a > 40 )
> {
> temp_r = Original_Speed + 40;
> }
> else if ( a >= Right_Margin && a <= Center_Right ){
> temp_r= Original_Speed + 10;
> }
>
> else if ( a <= Center_Left && a >= Center_Right )
> {
> temp_r = Original_Speed;
> }
>
> TCNT2 = temp_r; //reload counter value
>
> PORTC= mot_r[i];
> // a = 0;
> j++;
> if( j > 7 )
> {
> j = 0;
> }
>}
>
>//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 = 0x98;
>}
>/*
>#pragma interrupt_handler uart0_rx_isr:19
>void uart0_rx_isr(void)
>{
> //uart has received a character in UDR
> a = UDR0 ;
> b = a;
> //printf("%d\\n\\r",a);
>}
>*/
>//UART1 initialize
>// desired baud rate:9600
>// actual baud rate:9615 (0.2%)
>// char size: 8 bit
>// parity: Disabled
>void uart1_init(void)
>{
> UCSR1B = 0x00; //disable while setting baud rate
> UCSR1A = 0x00;
> UCSR1C = 0x06;
> UBRR1L = 0x67; //set baud rate lo
> UBRR1H = 0x00; //set baud rate hi
> UCSR1B = 0x58;
>}
>
>/*
>#pragma interrupt_handler uart1_tx_isr:33
>void uart1_tx_isr(void)
>{
>
> //character has been transmitted
> //////LCD출력부분........
> //printf("$B,0\\r"); //커서 끄기
> printf("$D,l\\r"); //LCD화면 켜기
> //printf("$L,1\\r"); //백라이트 켜기
> //while(1){
> //printf("$C\\r"); //화면 지우기
> printf("$G,l,l\\r");//커서를 첫번째줄 첫번째 칸으로 이동
> //printf("$T,N.T.C Testing..\\r"); // 문자열 출력
> printf("$T, %d\\r", b);
> //temp++;
> delay(1000);
> //}
>}
>*/
>//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();
> timer0_init();
> timer2_init();
> //uart0_init();
> //uart1_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 n)
>{
> volatile int i,j;
> for(i=1;i<n;i++)
> {
> for(j=1;j<600;j++);
> }
>}
>//
>
>
>void main(void) // main 함수
>{
> init_devices();
>
> //insert your functional code here...
>
> /////////////// 내가 바꿔야 될 부분!!!/////
> while(1)
> {
> printf(" 111 /r");
> }
>
>}
|
||||
| 2338 | 답변완료감사합니다. | 최인기 | 2009-02-11 | 1,495 |
|
오늘 오후에 본사에서 atmega128 pro
as 해간 사람입니다^^
usb isp 도 새것으로 교체해주셔서
다시 잘 작동 되는군요..
2틀동안 잠도못자고 고민하고 잇엇는데..
바쁘신데도 친절하게 대해 주셔서
정말 감사합니다^^
앞으로 귀사의 행복과 번영을 기원합니다..ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
관리자 답변
안녕하세요? 다행입니다.
항상 최선의 A/S와 고객 지원을 통하여, 최선의 편의를 제공하고자 노력하고 있습니다. 언제든 열려 있으니 궁금하시면 본사 Q&A를 통하여 다른 분들의 경우를 검색하거나, 찾다 없으면 질문 하시면, 답해 드립니다.
수고하세요.
> 오늘 오후에 본사에서 atmega128 pro
> as 해간 사람입니다^^
> usb isp 도 새것으로 교체해주셔서
> 다시 잘 작동 되는군요..
> 2틀동안 잠도못자고 고민하고 잇엇는데..
> 바쁘신데도 친절하게 대해 주셔서
> 정말 감사합니다^^
>
> 앞으로 귀사의 행복과 번영을 기원합니다..ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
>
>
|
||||
| 2337 | 답변완료timer이용방법 도와주세요. | 신은주 | 2009-02-11 | 1,494 |
|
항상 도움주셔서 고맙습니다.
하나 해결하면 또 하나가.....
timer 이용방법이 아직 미숙하여~~~
------------
step motor 구동을 위한 pulse를 timer0의 CTC 모드, 토글을 사용하여 만들려고합니다..
switch 문을 사용하여 스위치 눌렀을때 pulse을 500개(5상 0.72도 모터임, 500pulse입력하면 360도 회전하는것임) 출력하는것이 목적임
질문
1. 스위치를 눌렀을 경우 CW, CCW값은 잘 출력되는데 OC0(PB4핀)의 값이 스위치눌렀다 떼면 그때부터 출력되네요. 무엇이 잘못된것인지요.
2. timer의 CTC모드에서 출력을 on/off 하려면 어떻게 해야하나요.
3. 스위치 누를고있는 동안 500개 pulse출력하도록 하려면 for문을 어떻게 써야하나요.
//ICC-AVR application builder : 2009-01-22 오후 2:17:07
// Target : M128
// Crystal: 16.000Mhz
#include <iom128v.h>
#include <macros.h>
#define CCW_low 0x00 //low_resolution = high step
#define CW_low 0x01
#define CCW_high 0x02 //high_resolution = Low step
#define CW_high 0x03
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
PORTE = 0x00;
DDRE = 0x00;
PORTF = 0x00;
DDRF = 0x00;
PORTG = 0x00;
DDRG = 0x00;
}
//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();
MCUCR = 0x00;
EICRA = 0x00; //extended ext ints
EICRB = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK = 0x00; //timer interrupt sources
ETIMSK = 0x00; //extended timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void OC0_CTC_out(unsigned char duty)
{
OCR0 = duty;
}
void motor_pulse(void)
{
TCCR0 = 0x1f;//(0001 1111) CTC, toggle, 1024prescaler
TCNT0 = 0x00;// timer0_init=0
OC0_CTC_out(0xff);
}
void main(void)
{
unsigned char sw;
init_devices();
DDRB = 0x10;
DDRD = 0xff;
DDRG = 0x03;
while(1)
{
sw = PINC;// input port = port_c
switch(sw)
{
case 0x01:
PORTD = CCW_low;
PORTG = CCW_low;
motor_pulse();
break;
case 0x02:
PORTD = CW_low;
PORTG = CW_low;
motor_pulse();
break;
case 0x04:
PORTD = CCW_high;
PORTG = CCW_high;
motor_pulse();
break;
case 0x08:
PORTD = CW_high;
PORTG = CW_high;
motor_pulse();
break;
//default: blink();
}
}
}
관리자 답변
안녕하세요...고객님..
저희 NewTC제품을 이용해 주셔서 감사합니다.
저희는 소스는 봐드리지 않습니다.
고객님께서 답답해 하시고 소스가 간단해서 몇번 봐드렸는데...
솔직히 고객님들의 소스는 분석이 불가한 경우가 너무 많습니다.
표준 표기법을 따르고 들어쓰기 내어쓰기 등등...완벽하게 지켜도 분석하는데 시간이 걸립니다.
근데 여기 저기서 소스를 짜집기해서 봐달라고 하면 현실상 봐드리기가 어렵습니다.
오늘 올려주신 소스도 너무 난해하군요...
timer0의 CTC 모드, 토글을 사용한다면서 타이머 초기화랑 타이머에 대한 설정은 전혀 보이지 않고....
Timer0에서 OC0 출력 모드, WAVEFORM 모드 설정하시면 쉽게 원하는대로 가능할것 같은데....타이머에서 CTC모드 설정하면 OC0에서 원하는 파형 자동으로 나옵니다.
감사합니다.
>항상 도움주셔서 고맙습니다.
>
>하나 해결하면 또 하나가.....
>
>timer 이용방법이 아직 미숙하여~~~
>
>------------
>
>step motor 구동을 위한 pulse를 timer0의 CTC 모드, 토글을 사용하여 만들려고합니다..
>
>switch 문을 사용하여 스위치 눌렀을때 pulse을 500개(5상 0.72도 모터임, 500pulse입력하면 360도 회전하는것임) 출력하는것이 목적임
>
>질문
>1. 스위치를 눌렀을 경우 CW, CCW값은 잘 출력되는데 OC0(PB4핀)의 값이 스위치눌렀다 떼면 그때부터 출력되네요. 무엇이 잘못된것인지요.
>
>2. timer의 CTC모드에서 출력을 on/off 하려면 어떻게 해야하나요.
>
>3. 스위치 누를고있는 동안 500개 pulse출력하도록 하려면 for문을 어떻게 써야하나요.
>
>
>
>//ICC-AVR application builder : 2009-01-22 오후 2:17:07
>// Target : M128
>// Crystal: 16.000Mhz
>
>#include <iom128v.h>
>#include <macros.h>
>
>#define CCW_low 0x00 //low_resolution = high step
>#define CW_low 0x01
>#define CCW_high 0x02 //high_resolution = Low step
>#define CW_high 0x03
>
>void port_init(void)
>{
> PORTA = 0x00;
> DDRA = 0x00;
> PORTB = 0x00;
> DDRB = 0x00;
> PORTC = 0x00;
> DDRC = 0x00;
> PORTD = 0x00;
> DDRD = 0x00;
> PORTE = 0x00;
> DDRE = 0x00;
> PORTF = 0x00;
> DDRF = 0x00;
> PORTG = 0x00;
> DDRG = 0x00;
>}
>
>//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();
>
> MCUCR = 0x00;
> EICRA = 0x00; //extended ext ints
> EICRB = 0x00; //extended ext ints
> EIMSK = 0x00;
> TIMSK = 0x00; //timer interrupt sources
> ETIMSK = 0x00; //extended timer interrupt sources
> SEI(); //re-enable interrupts
> //all peripherals are now initialized
>}
>
>void OC0_CTC_out(unsigned char duty)
>{
> OCR0 = duty;
> }
>
>void motor_pulse(void)
>{
> TCCR0 = 0x1f;//(0001 1111) CTC, toggle, 1024prescaler
> TCNT0 = 0x00;// timer0_init=0
> OC0_CTC_out(0xff);
>}
>
>
>void main(void)
>{
> unsigned char sw;
> init_devices();
>
> DDRB = 0x10;
> DDRD = 0xff;
> DDRG = 0x03;
>
>
> while(1)
> {
> sw = PINC;// input port = port_c
> switch(sw)
> {
> case 0x01:
> PORTD = CCW_low;
> PORTG = CCW_low;
> motor_pulse();
> break;
> case 0x02:
> PORTD = CW_low;
> PORTG = CW_low;
> motor_pulse();
> break;
> case 0x04:
> PORTD = CCW_high;
> PORTG = CCW_high;
> motor_pulse();
> break;
> case 0x08:
> PORTD = CW_high;
> PORTG = CW_high;
> motor_pulse();
> break;
> //default: blink();
> }
>}
>}
>
|
||||
| 2336 | 답변완료충돌 시 가속도 측정을 어떤 방식으로 해야 할까요? | 명선우 | 2009-02-11 | 1,467 |
|
만드려는 것이 차량용 블랙박스라서 사고시(충돌 시)에 가속도 값을 파악하여 일정
수치 이상이면 영상 데이터와 사고지점의 좌표값을 저장하는 것을 구현하려 합니다.
제가 센서파트라서 센서값을 제어 해야 하는데 일단 가속도 값을 엘시디에 띄우는
데 까지는 그럭저럭 했는데 충돌 시 가속도 값을 어떤방식으로 측정해야 할 지가 막막 합니다;;;
아! 그리고 제가 쓰는 가속도센서가 AM-3AXIS-P인데 엘시디에 나타난 값이 기울기는 잘 나오는데 센서를 갑자기 움직이거나 하였을 때 가속도 값이 잘 나오는지는 봐도 잘 모르겠습니다.
원래 가속도값도 딱 눈에 띄게 잘 나오는 것인지 궁금하네요~
관리자 답변
안녕하세요? 고객님,
저희 N.T.C 제품을 이용하여 주셔서 감사합니다.
센서를 갑자기 움직이거나 하여도 가속도 값이 잘 나옵니다.
하지만, 차량이 충돌할 때, 몇 g 정도의 가속도가 되는 지 모르겠네요.
하지만, 충돌시 특정 패턴이 나오리라 생각됩니다.
제 생각에는 갑자기 최대치로 튀는 형태가 일정한 모양은 아닐 것 같구요.
사고의 정도에 따라서 사고난 위치에 따라서 다 다를 것이라고 생각되어서,
뭐라고 말하긴 어렵지만, 일반적으로는 평소 행동을 가속도 센서로 모니터링 해봐서 그러한 평소 행동에 해당하지 않는 갑작스런 정지나, 사고로 간주할 수 있는 정도의 양상을 평소 행동이 아닌 것으로 간주하고, 그렇지 않으면 사고로 간주하는 것이 좋겠습니다.
그리고, 참고하실 수 있을 것 같아서, 그 패턴을 FFT를 통해, 주파수 영역으로 변환한 뒤에, 그 값을 분석하는 관련된 어플리 케이션을 올려드리니, 참고하시기 바랍니다.아래는 - 본사의 가속도 센서 계산식 - 입니다. 참고바랍니다.
http://www.newtc.co.kr/board/download.php?id=pds&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=가속도&select_arrange=headnum&desc=asc&no=121&filenum=1
감사합니다.
>만드려는 것이 차량용 블랙박스라서 사고시(충돌 시)에 가속도 값을 파악하여 일정
>
>수치 이상이면 영상 데이터와 사고지점의 좌표값을 저장하는 것을 구현하려 합니다.
>
>제가 센서파트라서 센서값을 제어 해야 하는데 일단 가속도 값을 엘시디에 띄우는
>
>데 까지는 그럭저럭 했는데 충돌 시 가속도 값을 어떤방식으로 측정해야 할 지가 막막 합니다;;;
>
>아! 그리고 제가 쓰는 가속도센서가 AM-3AXIS-P인데 엘시디에 나타난 값이 기울기는 잘 나오는데 센서를 갑자기 움직이거나 하였을 때 가속도 값이 잘 나오는지는 봐도 잘 모르겠습니다.
>
>원래 가속도값도 딱 눈에 띄게 잘 나오는 것인지 궁금하네요~
>
|
||||
| 2335 | 답변완료작은 질문(adapter size) | 이현진 | 2009-02-10 | 1,509 |
|
AB-M128Pro-A을 구입을 하였습니다.
12V adapter를 구입을 하려고 하는데
socket size를 알고 싶습니다.
ex) 외경 5.5mm 내경 2.1mm
메뉴얼을 찾아봤는데 없어서 문의 드립니다.
감사합니다.
관리자 답변
안녕하세요..고객님...
저희 NewTC 제품을 이용해 주셔서 감사합니다.
외경 5.0mm, 내경 2.0mm입니다.
감사합니다.
>AB-M128Pro-A을 구입을 하였습니다.
>12V adapter를 구입을 하려고 하는데
>socket size를 알고 싶습니다.
>
>ex) 외경 5.5mm 내경 2.1mm
>
>메뉴얼을 찾아봤는데 없어서 문의 드립니다.
>
>감사합니다.
>
>
|
||||
| 2334 | 답변완료spien이 체크가 안됩니다. | 최인기 | 2009-02-10 | 1,443 |
|
안녕하세요
현재 귀사의 USB-ISP-L V2 와 AM128 PRO를 사용중입니다
다운로딩할땐 AVRSTUDIO V4.15를 사용하는데요
퓨즈비트 셋팅 등등 매뉴얼 보고 따라갔고 첫날엔 이상없이 잘 됐는데
그다음날부터 ISP-MODE ERROR : A Problem occured when executing ~~~
이 나기 시작하더라구요
근데 또 이게 파워서플라이 리셋 몇번 하다보면 다운로딩이 잘 되더라구요
파워를 다시 리셋하지 않는이상은.. 그러다가 다시 파워 껏다 키면 또 오류가 나고..
파워를 리셋할때마다 퓨즈비트도 지멋대로 바뀌더라구요 ㅠㅠ
그러다가 결국 spien이 체크가 아예안되는 상태가 계속 되고 잇습니다.
왜그런건지 잘 모르겟습니다
제가 완젼 초짜라서 너무 답답해서 글 올립니다^^
어디가 문제가 잇는건지 혹시 as는 가능한지 알고 싶습니다.
수고 하세요
관리자 답변
안녕하세요..고객님..
저희 NewTC제품을 이용해 주셔서 감사합니다.
고객님께서 가지고 계신 USBISP와 AM 128PRO를 저희쪽으로 보내주시면 A/S해 드리겠습니다. 증상으로 보아 MCU에 이상이 있는것 같습니다.
더 자세한 내용은 제품을 받아 세부 테스트를 해봐야 알겠지만 제품에 문제가 있다고 판단되면 새것으로 교체해 드리겠습니다.
감사합니다.
>
>안녕하세요
>현재 귀사의 USB-ISP-L V2 와 AM128 PRO를 사용중입니다
>다운로딩할땐 AVRSTUDIO V4.15를 사용하는데요
>퓨즈비트 셋팅 등등 매뉴얼 보고 따라갔고 첫날엔 이상없이 잘 됐는데
>그다음날부터 ISP-MODE ERROR : A Problem occured when executing ~~~
>이 나기 시작하더라구요
>근데 또 이게 파워서플라이 리셋 몇번 하다보면 다운로딩이 잘 되더라구요
>파워를 다시 리셋하지 않는이상은.. 그러다가 다시 파워 껏다 키면 또 오류가 나고..
>파워를 리셋할때마다 퓨즈비트도 지멋대로 바뀌더라구요 ㅠㅠ
>그러다가 결국 spien이 체크가 아예안되는 상태가 계속 되고 잇습니다.
>왜그런건지 잘 모르겟습니다
>제가 완젼 초짜라서 너무 답답해서 글 올립니다^^
>어디가 문제가 잇는건지 혹시 as는 가능한지 알고 싶습니다.
>수고 하세요
>
|
||||
| 2333 | 답변완료포트를 옮겨서 성공 | 신은주 | 2009-02-10 | 1,450 |
|
입력 포트를 PORT_C로 옮겨서 실행하니 잘 됩니다.
그런데 PORT_D에서는 같은 프로그램이 왜 실행되지 않을까요.
각 PORT의 기능이 따로 있는지요.
관리자 답변
안녕하세요...고객님...
물론 각 포트가 입출력이랑 특수기능을 모두 제공하지만 소스상으론 포트D에서도 제대로 작동되어야 합니다. 물론 퓨즈비트등 기타 레지스트를 바꾸지 않았다면 기본적으로 입출력 포트로 동작됩니다.
일단 성공하셨다니 축하드립니다.
질문있으시면 언제라도 Q&A에 올려주시기 바랍니다.
감사합니다.
감사합니다.
>입력 포트를 PORT_C로 옮겨서 실행하니 잘 됩니다.
>그런데 PORT_D에서는 같은 프로그램이 왜 실행되지 않을까요.
>각 PORT의 기능이 따로 있는지요.
|
||||
| 2332 | 답변완료블루투스 연결 질문입니다. | 이경호 | 2009-02-10 | 1,408 |
|
블루투스와 AVR을 연결할때
블루투스 AVR
RXD -------TX
TXD -------RX
GND ------- GND
로 연결하라고 되있어서 5V, 3.3V 전원보드 AM-MP533 에서 3.3v를 블루투스에 연결하고 RXD --- TX TXD ------RX 블루투스 GND 핀을 AVR에 GND 핀에 연결했습니다. 근데 그렇게 하면 블루투스 간에 연결 확인하는 불이안들어오고
전원보드에서 나오는 VCC와 GND를 블루투스에 VCC와 GND에 연결하면 블루투스 간에 연결이 됏다는 불이 나오게 됩니다.
그러면 두번째 연결한게 재대로 된건가요?
그리고 두번째 처럼 연결을 하고 블루투스에 RX와 TX를 avr에 TX와 RX에 연결을 해서 통신을 하려는데 안되네요. 유선으로 했을때는 잘되었던 소스인데 연결이 잘못된건지 잘모르겠습니다.
블루투스 모델은 firmtech사의 BM1001과 FB755AC입니다.
관리자 답변
안녕하세요? 고객님,
저희 N.T.C를 이용하여 주셔서 감사합니다.
시리얼 포트간의 연결 개념은 제대로 하신 것 같습니다.
하지만, 사용하시는 블루투스 모듈이 3.3V를 쓴다면, 5V 인터페이스인 ATMEGA128과 연결하여 쓰려면, 어떻게 연결하라고, 블루투스 모듈 메뉴얼에 써있을 것입니다. 그렇게 다시 연결하셔야 하구요.
또한, 블루투스는 선연결만 한다고 되는 것이 아닙니다.
BM1001 모듈 두개를 양쪽에 쓰면, 문제 없이 그냥 유선처럼 쓰겠지만,
FB755AC 모듈은 연결할 때, 서로 연결하는 절차를 거쳐야 합니다.
아래는 같은 firmtech 제품과 본사의 ATMEGA128 모듈을 서로 연결하는 예제입니다. 제품명은 조금 다르지만, 바슷할 겁니다. 참고하시기 바랍니다.
- 아래 -
http://cafe.naver.com/newtc/177
수고하세요.
>
>블루투스와 AVR을 연결할때
>
>블루투스 AVR
>
>RXD -------TX
>
>TXD -------RX
>
>GND ------- GND
>
>로 연결하라고 되있어서 5V, 3.3V 전원보드 AM-MP533 에서 3.3v를 블루투스에 연결하고 RXD --- TX TXD ------RX 블루투스 GND 핀을 AVR에 GND 핀에 연결했습니다. 근데 그렇게 하면 블루투스 간에 연결 확인하는 불이안들어오고
>전원보드에서 나오는 VCC와 GND를 블루투스에 VCC와 GND에 연결하면 블루투스 간에 연결이 됏다는 불이 나오게 됩니다.
>그러면 두번째 연결한게 재대로 된건가요?
>그리고 두번째 처럼 연결을 하고 블루투스에 RX와 TX를 avr에 TX와 RX에 연결을 해서 통신을 하려는데 안되네요. 유선으로 했을때는 잘되었던 소스인데 연결이 잘못된건지 잘모르겠습니다.
>블루투스 모델은 firmtech사의 BM1001과 FB755AC입니다.
>
|
||||
| 2331 | 답변완료수정한 프로그램 증상 봐주세요. | 신은주 | 2009-02-10 | 1,408 |
|
예제 프로그램을 이용해서 하고 있는데
D-port에 스위치보드를 연결했는데
입력값이 1,2,..8까지의 값이 아닌가봐요.
이렇게 프로그램하니 LED에 불은 켜지는데 case문에 따라서 켜지지가 않아요.
즉 1번 스위치 눌렀을때 LED_hig가 켜지기도하고 LED_low가 켜지기도하고....
조언부탁드립니다.
//ICC-AVR application builder : 2009-01-22 오후 2:17:07
// Target : M128
// Crystal: 16.000Mhz
#include <iom128v.h>
#include <macros.h>
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
PORTE = 0x00;
DDRE = 0x00;
PORTF = 0x00;
DDRF = 0x00;
PORTG = 0x00;
DDRG = 0x00;
}
//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();
MCUCR = 0x00;
EICRA = 0x00; //extended ext ints
EICRB = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK = 0x00; //timer interrupt sources
ETIMSK = 0x00; //extended timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void delay(int cnt)
{
int i,j;
for(i=0; i<cnt; i++)
for(j=0; j<600; j++)
;
}
void LED_HIG()
{
PORTB = 0xf0;
delay(1000);
PORTB = 0x00;
delay(1000);
}
void LED_LOW()
{
PORTB = 0x0f;
delay(1000);
PORTB = 0x00;
delay(1000);
}
void blink()
{ //PORTB = 0xFF;
PORTG = 0x03;
delay(1000);
PORTB = 0x00;
PORTG = 0x00;
delay(1000);
}
void main(void)
{
unsigned char sw;
init_devices();
DDRB = 0xff;
DDRG = 0x03;
while(1)
{
sw = PIND;
switch(sw)
{
case 0x01:
case 0x02:
case 0x03:
case 0x04:
case 0x05:
LED_LOW(); break;
//case 0x05:
case 0x06:
case 0x07:
case 0x08:
LED_HIG(); break;
default: blink();
}
}
}
관리자 답변
안녕하세요...고객님...
스위치 보더 1, 2, 3, 4, 5, 6, 7, 8번째에 해당하는 2진수를 넣어야 합니다.
따라서, case : 0x01, 0x02, 0x03....이런식은 목적하는 결과를 얻을수 없습니다.
00000001, 00000010, 00000100, 00001000, 00010000, 00100000, 01000000, 10000000
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
으로 해주셔야 합니다.
감사합니다.
>예제 프로그램을 이용해서 하고 있는데
>D-port에 스위치보드를 연결했는데
>입력값이 1,2,..8까지의 값이 아닌가봐요.
>이렇게 프로그램하니 LED에 불은 켜지는데 case문에 따라서 켜지지가 않아요.
>
>즉 1번 스위치 눌렀을때 LED_hig가 켜지기도하고 LED_low가 켜지기도하고....
>
>조언부탁드립니다.
>
> //ICC-AVR application builder : 2009-01-22 오후 2:17:07
>// Target : M128
>// Crystal: 16.000Mhz
>
>#include <iom128v.h>
>#include <macros.h>
>
>void port_init(void)
>{
>PORTA = 0x00;
>DDRA = 0x00;
>PORTB = 0x00;
>DDRB = 0x00;
>PORTC = 0x00; //m103 output only
>DDRC = 0x00;
>PORTD = 0x00;
>DDRD = 0x00;
>PORTE = 0x00;
>DDRE = 0x00;
>PORTF = 0x00;
>DDRF = 0x00;
>PORTG = 0x00;
>DDRG = 0x00;
>}
>
>//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();
>
>MCUCR = 0x00;
>EICRA = 0x00; //extended ext ints
>EICRB = 0x00; //extended ext ints
>EIMSK = 0x00;
>TIMSK = 0x00; //timer interrupt sources
>ETIMSK = 0x00; //extended timer interrupt sources
>SEI(); //re-enable interrupts
>//all peripherals are now initialized
>}
>
>void delay(int cnt)
>{
>int i,j;
>for(i=0; i<cnt; i++)
>for(j=0; j<600; j++)
>;
>}
>
>void LED_HIG()
>{
>PORTB = 0xf0;
>delay(1000);
>PORTB = 0x00;
>delay(1000);
>}
>
>void LED_LOW()
>{
> PORTB = 0x0f;
> delay(1000);
> PORTB = 0x00;
> delay(1000);
> }
>
>void blink()
>{ //PORTB = 0xFF;
> PORTG = 0x03;
> delay(1000);
> PORTB = 0x00;
> PORTG = 0x00;
> delay(1000);
>}
>
>
>void main(void)
>{
>unsigned char sw;
>init_devices();
>DDRB = 0xff;
>DDRG = 0x03;
>
>while(1)
> {
> sw = PIND;
> switch(sw)
> {
> case 0x01:
> case 0x02:
> case 0x03:
> case 0x04:
> case 0x05:
> LED_LOW(); break;
> //case 0x05:
> case 0x06:
> case 0x07:
> case 0x08:
> LED_HIG(); break;
> default: blink();
> }
>}
>}
>
|
||||
| 2330 | 답변완료스위치이용한 프로그램 조언부탁드립니다. | 신은주 | 2009-02-10 | 1,420 |
|
이것 참 매번 간단한 프로그램도 질문해야해서 죄송한데.....
스위치보드 이용하여 입력신호를 받으서 LED에 불을 켜려고하는데 스위치신호인식이 안되고 있어요.
예제 프로그램을 이용해서 하고 있는데
D-port에 스위치보드를 연결했는데
입력값이 1,2,..8까지의 값이 아닌가봐요.
이렇게 프로그램하니 LED에 불은 켜지는데 case문에 따라서 켜지지가 않아요.
즉 1번 스위치 눌렀을때 LED_hig가 켜지기도하고 LED_low가 켜지기도하고....
조언부탁드립니다.
//ICC-AVR application builder : 2009-01-22 오후 2:17:07
// Target : M128
// Crystal: 16.000Mhz
#include <iom128v.h>
#include <macros.h>
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
PORTE = 0x00;
DDRE = 0x00;
PORTF = 0x00;
DDRF = 0x00;
PORTG = 0x00;
DDRG = 0x00;
}
//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();
MCUCR = 0x00;
EICRA = 0x00; //extended ext ints
EICRB = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK = 0x00; //timer interrupt sources
ETIMSK = 0x00; //extended timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void delay(int cnt)
{
int i,j;
for(i=0; i<cnt; i++)
for(j=0; j<600; j++)
;
}
void LED_HIG()
{
PORTB = 0xf0;
delay(1000);
PORTB = 0x00;
delay(1000);
}
void LED_LOW()
{
PORTB = 0x0f;
delay(1000);
PORTB = 0x00;
delay(1000);
}
void blink()
{ //PORTB = 0xFF;
PORTG = 0x03;
delay(1000);
PORTB = 0x00;
PORTG = 0x00;
delay(1000);
}
void main(void)
{
unsigned char sw;
init_devices();
DDRB = 0xff;
DDRG = 0x03;
while(1)
{
sw = PIND;
switch(sw)
{
case 0x01:
case 0x02:
case 0x03:
case 0x04:
case 0x05:
LED_LOW(); break;
//case 0x05:
case 0x06:
case 0x07:
case 0x08:
LED_HIG(); break;
default: blink();
}
}
}
관리자 답변
죄송한데 답글 주시는 사이에 글 수정했어요. 다시한번 확인해 주세요.
|
||||
| 2329 | 답변완료너무너무 감사합니다...NTC 감사합니다. | 김정현 | 2009-02-09 | 1,396 |
|
이번에 하나의 작은 프로젝트를 회사에서 진행했습니다.
회로는 예전에 만들어 본적 있었지만 통신으로 마이컴을 컨트롤하는것은
처음이라 너무 막막했었습니다.
너무 막막한 나머지 이 게시판을 통해 NTC에 계신 분께 너무 자잘한 것까지
물어보면서 귀찮게 했었는데...
한번도 작은 내색없이 너무너무 답변 잘 해주신 점 너무 감사합니다.
너무 속을 썩히던 그 프로젝트가 방금 완결되어 잘 돌아가게 되었습니다.
도움주신 엔지니어 분...너무너무 감사드립니다...NTC 모두 감사드립니다.
제가 생각해도 좀 짜증날 정도로 자잘한것,,, 너무 자주 여쭤보고 했었는데..
다 받아주시면서 친절하게 답변해주신 점 다시 한번 감사드립니다.
NTC~ 번창하세요~ 화이팅~!!
관리자 답변
잘 되셨다니 저도 기분이 좋습니다.
오늘 같은 기분 앞으로 쭉 이어가길 바라며
항상 좋은 일만 있길 기도하겠습니다.
감사합니다. ^_^
|
||||
