로그인 | 회원가입 | 주문 조회
총 10,743개의 질문이 있습니다.
번호 제목 작성자 등록일 조회
5658 답변완료AB-M128Pro-A로 시리얼lcd420 두개를 동시에 구동할 수 있나요? 김선혜 2010-09-02 1,342
제가 예전에 AVR MEGA 128 개발보드 AB-M128Pro-A를 샀는데요. tlcd-am-p의 예제 소스로 연습을 했었어요. 그런데 이제 좀 더 큰 lcd가 필요해서 여기 제품 시리얼lcd 420을 사려고 하는데요. 이건 포트에 연결하는게 아니라 uart로 연결하는 것 같더라구요. 제가 산 보드로 이 lcd두 개를 동시에 연결해서 구동시킬 수 있는지 답변 부탁드립니다. 그리고 tlcd-am-p와 마찬가지로 예제 소스를 그대로 사용해서 연습해볼 수 있는지도 알려주시면 감사하겠습니다.
관리자 답변 NEWTC · 2010-09-02
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 우선, 128은 시리얼 포트가 두개라서 UART 두군데로 사용이 가능합니다. 따라서, 시리얼 LCD 두개를 쓰셔도 무방합니다. 다만, 프로그램을 짤 때, 두 군데로 모두 송신을 하는 것이 중요한데요. 자료실의 SLCD용 예제를 다운로드 받으시구요. 거기서, UART0만 초기화 되어 있을 겁니다. UART1도 초기화 해 주세요. - 초기화 루틴 - //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 = 0x18; } 그리고는, init_devices() 함수에서 uart1_init();를 uart0_init(); 뒤에 추가해 주세요. 그렇게 하면 초기화가 될 겁니다. 그리고는, printf의 각 내장함수인 putchar 함수를 변경하여 출력 방향을 필요에 따라서, UART0나 UART1쪽으로 돌려야 합니다. 따라서, 전역변수로 int direction=0; 이렇게 선언하세요. 그런 다음에 다음의 putchar 함수를 기존 예제의 putchar 함수 대신 넣으시구요. // printf 함수 사용시 추가할 것. int putchar(char c) { if(direction == 0){ while (((UCSR0A>>UDRE0)&0x01) == 0) ; // UDRE, data register empty UDR0 = c; }else{ while (((UCSR1A>>UDRE1)&0x01) == 0) ; // UDRE, data register empty UDR1 = c; } return c; } 그렇게 하신 후에, main의 while문 안에서 printf 로 사용하실 때에, UART 방향을 변경할 때마다 direction 값을 0 또는 1로 변경한 후에 printf를 쓰면 됩니다. 아래와 같이요. direction = 0; printf(" Test......UART0"); direction = 1; printf(" Test......UART1"); 수고하세요. >제가 예전에 AVR MEGA 128 개발보드 AB-M128Pro-A를 샀는데요. > >tlcd-am-p의 예제 소스로 연습을 했었어요. > >그런데 이제 좀 더 큰 lcd가 필요해서 > >여기 제품 시리얼lcd 420을 사려고 하는데요. > >이건 포트에 연결하는게 아니라 uart로 연결하는 것 같더라구요. > >제가 산 보드로 이 lcd두 개를 동시에 연결해서 구동시킬 수 있는지 답변 부탁드립니다. > >그리고 tlcd-am-p와 마찬가지로 예제 소스를 그대로 사용해서 연습해볼 수 있는지도 > >알려주시면 감사하겠습니다. >
5657 답변완료코드비전에서 atmega816을 프로그램하는방법 전인종 2010-09-02 1,374
안녕하세요? 보통 ATMERGAS128을 사용하는 법만 나와 있느데요 코트비전을 이용하여 atmega816을 프로그램하는방법은 알수가 없네요. INCLUDE하는 화일이름, AD_ISP_CNB를 사용하는데요 WRITING하는 방법을 모릅니다. 좀 가르쳐 주시면 합니다.
관리자 답변 NEWTC · 2010-09-02
안녕하세요? 고객님, 저희 뉴티씨를 이용하여 주셔서 감사합니다. AD-ISPPRO나 AD-USBISP와 같은 ISP 장비를 사용하셔서, 타겟 보드에 연결한 후에 사용하셔야 하구요. 사용법이 ATMEGA128과 같지만, Target Device 선택하는 부분에서 사용하시려는 device를 선택하는 부분만 차이가 있습니다. 나머지는 똑 같습니다. 가지고 계신 것이 AD-ISP-CVB라면 이것은 단순히 커넥터 변환보드입니다. ISPPRO나 USBISP를 구매하여 사용하셔야 합니다. 수고하세요. >안녕하세요? >보통 ATMERGAS128을 사용하는 법만 나와 있느데요 코트비전을 이용하여 atmega816을 프로그램하는방법은 알수가 없네요. > INCLUDE하는 화일이름, AD_ISP_CNB를 사용하는데요 WRITING하는 방법을 모릅니다. 좀 가르쳐 주시면 합니다.
5656 답변완료ISP와 USART 동시 사용 강준 2010-09-02 1,222
안녕하세요. 귀사의 ATmega128 보드와 USB ISP 사용자입니다. 현재 두개의 USB ISP를 하나는 ISP용으로 하나는 USART용으로 보드에 꽂아 동시에 사용 중입니다. 물론 하나의 PC에 두개의 USB를 연결하였습니다. 이 경우에 뭔가 오작동을 하더군요. 예를 들어, 가속센서를 ADC 채널에 연결하여 사용하는 경우 쓰레기값이 들어온다던지, 초음파센서를 PORTD에 연결하여 사용하는 경우 제대로 작동하지 않는다던지... 그 이유와 해결 방법에 대한 조언 좀 부탁드리겠습니다. 감사합니다.
관리자 답변 NEWTC · 2010-09-02
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 우선, 다운로딩 시에 ATMEGA128 자체가 시리얼 포트와 ISP를 위한 SPI 라인을 공용으로 사용하는 관계로 다운로딩 시에 쓰레기 값이 들어오게 됩니다. 초음파 센서를 PORTD의 D0나 D1에 물려서 쓰시나 봅니다. SPI 라인하고 물립니다. SPI 다운로딩 시에 문제가 생길 가능성이 있습니다. D2나 D3 쪽에 옮겨서 사용하세요. 다운로드시에 데이터 입력으로 클럭 변화가 생기게 되는 데 이러한 것들이 초음파 센서 회로상의 커패시터 효과 때문에, 제대로 변화가 들어올 수 없게 되서, 다운로딩에 문제가 생깁니다. 핀을 옮기면 이상 없을 듯 싶습니다. 다운로드 한 이후에는 문제가 없어야 정상입니다. 본사의 USBISP나 USBSerail 등의 문제가 아니구요. AVR 자체가 멀티핀을 사용하기 때문에 생기는 현상입니다. 참고하여 사용하시기 바랍니다. 보다 많은 현상들도 있는 데, 이는 FAQ에 128 설계시 유의점에 관한 글이 있으니, 참고 바랍니다. http://newtc.co.kr/board/view.php?id=faq&page=2&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=29 수고하세요. >안녕하세요. >귀사의 ATmega128 보드와 USB ISP 사용자입니다. > >현재 >두개의 USB ISP를 >하나는 ISP용으로 >하나는 USART용으로 보드에 꽂아 동시에 사용 중입니다. >물론 하나의 PC에 두개의 USB를 연결하였습니다. > >이 경우에 뭔가 오작동을 하더군요. >예를 들어, >가속센서를 ADC 채널에 연결하여 사용하는 경우 쓰레기값이 들어온다던지, >초음파센서를 PORTD에 연결하여 사용하는 경우 제대로 작동하지 않는다던지... > >그 이유와 해결 방법에 대한 조언 좀 부탁드리겠습니다. >감사합니다. > >
5655 답변완료블루투스 통신에 관한 질문입니다 박성민 2010-09-01 1,458
안녕하세요 옴니아 ------->>> 블루투스모듈[ fb155bc ] --------->>> atmega128 [ ntc pro 완제품키트] 이러한 방식으로 옴니아로부터 ~ atmega128 까지 데이터를 보내려합니다 현재 블루투스모듈( 이하fb155bc ) 과 atmega128의 연결은 아래와 같이 하였습니다 ***************************************************************** fb155bc의 rx ---------------------------- atmega128 tx [TTL level 5v ] fb155bc의 tx -------- 저항 한개 ---------- atmega128 rx [TTL level 5v ] fb155bc의 GND ---------------------------- atmega128 GND [TTL level 5v ] fb155bc 의 (3번:status핀)에 저항과 LED 연결해두었습니다 (↑연결하면 LED가 깜빡거리는데 아마 fb155bc가 수신대기인 상태를 뜻하는것 같습니다) fb155bc는 3.3v를 (2번:VCC핀)에 연결하였습니다.. ***************************************************************** PC에 연결된 옴니아로 포트오픈후 unsigned char형으로 숫자 1을 보내면 fb155bc를 거쳐 atmega128에 연결된 LED1개를 ON시키려고 합니다 그래서, 위 계획한데로 실행을 하면 아래와 같은 현상이 발생합니다, 옴니아에서 fb155bc로 숫자 "1" 데이터를 보내면 fb155bc 의 status 3번에 달아둔 LED의 깜빡임이 멈추면서 꺼지는데,, 이 현상은 fb155bc가 옴니아로부터 데이터를 수신했다는 것이 맞는지요?. 혹시 수신했다면, LED가 켜져야하는네 왜 안켜지는 것일까요? 제가 무엇을 잘못하고있는지, 확인해야할 부분이 있는지, 있다면 무엇인지 궁금합니다? (이 실험을 하기전에 블루투스통신은 연결은 무선이되, 방식은 시리얼통신과 같다고 하여 atmega128 uart0 3개 핀 (PC 12v Level인 tx, rx, gnd)과 rs-232 9핀 중 뽑은 몇개의 선으로 연결후 하이퍼터미널을 이용한 시리얼 통신은 미리 해보았습니다.) 제가하는 실험이 계속 진전이 없어 이렇게 글을 올려봅니다.
관리자 답변 NEWTC · 2010-09-02
안녕하세요? 고객님, 저희 뉴티씨 제품을 이용하여 주셔서 감사합니다. 우선, 옴니아에서 128로 보내기 전에 우선, 옴니아 -> PC 하이퍼 터미널로 시리얼 연결하여 데이터가 잘 출력되는 지 확인하는 것이 더 중요합니다. 어떤 데이터가 출력되는 지 확인한 그 이후에, 옴니아( 블루투스 ) <----> 블루투스 --> PC 하이퍼 터미널 순으로 하여 그 데이터가 똑같이 출력되는 지 확인하고, 그런 후에, PC 쪽에 ATMEGA128을 달아서, 테스트 하는 게 순서라고 봅니다. 일단, 데이터의 안정적인 입출력을 확인 한 후에, 해야 한다는 얘기입니다. 깜빡이는 것은 대기 였던 것 같은데, 자세한 것은 블루투스 모듈 제조사 메뉴얼을 참고하시기 바랍니다. 너무 오래된 얘기라서, 기억하기 어렵습니다. 우선, 그 불루투스 모듈 관련된 인터페이스 회로도와 소스코드가 아래에 가면 있으니, 참고 바랍니다. - 아래 - http://www.newtc.co.kr/board/view.php?id=qna&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=블루투스&select_arrange=headnum&desc=asc&no=1398 그리고, 블루투스 관련 부분은 제조사에 문의하여야 합니다. 본사 제품이 아니라서 써포트 하지 않습니다. 수고하세요. > >안녕하세요 > >옴니아 ------->>> 블루투스모듈[ fb155bc ] --------->>> atmega128 [ ntc pro 완제품키트] > >이러한 방식으로 옴니아로부터 ~ atmega128 까지 데이터를 보내려합니다 > >현재 블루투스모듈( 이하fb155bc ) 과 atmega128의 연결은 아래와 같이 하였습니다 > >***************************************************************** >fb155bc의 rx ---------------------------- atmega128 tx [TTL level 5v ] >fb155bc의 tx -------- 저항 한개 ---------- atmega128 rx [TTL level 5v ] >fb155bc의 GND ---------------------------- atmega128 GND [TTL level 5v ] > >fb155bc 의 (3번:status핀)에 저항과 LED 연결해두었습니다 >(↑연결하면 LED가 깜빡거리는데 아마 fb155bc가 수신대기인 상태를 뜻하는것 같습니다) > >fb155bc는 3.3v를 (2번:VCC핀)에 연결하였습니다.. >***************************************************************** > >PC에 연결된 옴니아로 포트오픈후 >unsigned char형으로 숫자 1을 보내면 fb155bc를 거쳐 atmega128에 연결된 LED1개를 ON시키려고 합니다 > >그래서, 위 계획한데로 실행을 하면 아래와 같은 현상이 발생합니다, > >옴니아에서 fb155bc로 숫자 "1" 데이터를 보내면 fb155bc 의 status 3번에 달아둔 LED의 깜빡임이 멈추면서 꺼지는데,, > >이 현상은 fb155bc가 옴니아로부터 데이터를 수신했다는 것이 맞는지요?. > >혹시 수신했다면, LED가 켜져야하는네 왜 안켜지는 것일까요? >제가 무엇을 잘못하고있는지, 확인해야할 부분이 있는지, 있다면 무엇인지 궁금합니다? > >(이 실험을 하기전에 블루투스통신은 연결은 무선이되, 방식은 시리얼통신과 같다고 하여 > atmega128 uart0 3개 핀 (PC 12v Level인 tx, rx, gnd)과 rs-232 9핀 중 뽑은 몇개의 선으로 연결후 하이퍼터미널을 이용한 시리얼 통신은 미리 해보았습니다.) > >제가하는 실험이 계속 진전이 없어 이렇게 글을 올려봅니다. > > >
5654 답변완료uart 연결 질문입니다. 박성민 2010-09-01 1,242
뉴티시 AVR128프로 완제품 키트 를 사용중입니다. UART0 / UART1 이렇게 나누어져있는데 각각 핀3개 (PC12V레벨), 핀4개(TTL 5V정도레벨)로 나누어져있습니다 여기서 UART0 3핀으로 PC의 하이퍼터미널을 이용하여 시리얼통신은 가능합니다 UART0 4핀으로는 PC의 하이퍼터미널로 시리얼통신을 하면 화면에 쓰레기값이 뜨는데 왜 3핀으로 시리얼통신했을때와 다른지 궁금합니다. ATmega128모듈 뒤에 자체적으로 MAX232칩이 연결되어 있는것을 확인하였습니다. 이때문에 TTL레벨인 4핀에서도 역시 통신이 가능해야한건 아닌지요? 제가 저전압 ttl레벨을 통한 실험을 하고있어서 그런데, 혹시 4핀으로도 3핀으로했던 시리얼통신과 동일하게 하려면 어떻게 하면될까요 조언부탁드리겠습니다.
관리자 답변 NEWTC · 2010-09-01
안녕하세요? 고객님, 반갑습니다. 우선, AM-128PRO 모듈의 3핀 커넥터는 RS-232C level(+-12V level) 이구요. 4핀 커넥터는 TTL Level(5V level) 입니다. 즉, ATMEGA128에서 직접 나오는 선은 메인보드의 4핀 커넥터에 연결되어 있구요. MAX232를 거쳐서 나오는 것은 RS-232C 출력으로 3핀 커넥터입니다. 그래서, 3핀 커넥터를 거치는 것은 제대로 된 시리얼 통신이 PC 와 바로 물렸을 때 가능하고, 4핀 커넥터는 PC와 직접은 안되는 겁니다. PC는 RS-232C level을 사용하거든요. 레벨이 서로 맞아야 통신이 가능합니다. 만약 4핀 쪽으로 굳이 하시려면, 거기다가 본사의 AD-USBSERIAL 모듈을 붙이시면 가능합니다. 수고하세요. >뉴티시 AVR128프로 완제품 키트 를 사용중입니다. > >UART0 / UART1 이렇게 나누어져있는데 > >각각 핀3개 (PC12V레벨), 핀4개(TTL 5V정도레벨)로 나누어져있습니다 > >여기서 UART0 3핀으로 PC의 하이퍼터미널을 이용하여 시리얼통신은 가능합니다 > >UART0 4핀으로는 PC의 하이퍼터미널로 시리얼통신을 하면 화면에 쓰레기값이 뜨는데 > >왜 3핀으로 시리얼통신했을때와 다른지 궁금합니다. > >ATmega128모듈 뒤에 자체적으로 MAX232칩이 연결되어 있는것을 확인하였습니다. > >이때문에 TTL레벨인 4핀에서도 역시 통신이 가능해야한건 아닌지요? > >제가 저전압 ttl레벨을 통한 실험을 하고있어서 그런데, > >혹시 4핀으로도 3핀으로했던 시리얼통신과 동일하게 하려면 어떻게 하면될까요 > >조언부탁드리겠습니다.
5653 답변완료AM-ACCTB 판매 강병권 2010-09-01 1,236
AM-ACCTB 만 따로 판매 안하나요?
관리자 답변 NEWTC · 2010-09-01
안녕하세요? 고객님, 저희 뉴티씨를 이용하여 주셔서 감사합니다. 가능합니다. 따로 사시면, 8,800원입니다. 다만 본사에서만 판매 가능합니다. 감사합니다. >AM-ACCTB 만 따로 판매 안하나요?
5652 답변완료IAR 데모 버전을 사용하고 싶습니다! 최동민 2010-08-31 1,407
검색을 하다가.. IAR을 한번 사용해보고 싶어서요. 데모 라이센스키를 얻기위해서 어제 저녁에 메일을 보냈었는데요. 24시간내로 받을수 있다고 하여 기다리고 있었는데...안와서요.. 음.. 확인이 될지 안될지는 모르겠지만. 현재 그럼 사용할 수 있는 방법은 없는지요? 궁금합니다.
관리자 답변 최동민 · 2010-08-31
글쓴이입니다..방금전에 www.iar.com 에 가서 등록절차에 따르니까.. 이메일로 라이센스키가 오네요.. 다른분들도 그렇게 사용하시길^^
5651 답변완료usbisp vol.3 어제 디바이스 마트에서 구입했는데요 정재훈 2010-08-31 1,280
보드와 jtag 핀배열을 일치시키지 않고 작동시켰더니 열이 한번 나더니 작동을 안하네요 현재 상태는 전원불이 들어오고 깜박이는 led가 작동하고요... 그런데 codevision이나 avrstudio에서 인식하지 못하는 상태입니다. 물론 제 잘못일 수 있지만, 사자마자 이렇게 되어서 제대로 작동하는지의 여부조차 확인할 수 없었습니다. a/s가 가능한지의 여부를 여쭤보고 싶네요
관리자 답변 NEWTC · 2010-08-31
안녕하세요 a/s 관련링크입니다 http://www.newtc.co.kr/board/view.php?id=faq&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=5 ISP선관 jtag 핀은 틀립니다. USBISP 사용하시려면 ISP 에 연결시켜야 합니다. 사용하시는 보드도 본사제품이시면 ISP 와 같이 보내어 점검받아보시길 바랍니다. 둘중 어떤 것이 망가져는지 알 수 없습니다. 수고하세요 >보드와 jtag 핀배열을 일치시키지 않고 작동시켰더니 열이 한번 나더니 작동을 안하네요 >현재 상태는 전원불이 들어오고 깜박이는 led가 작동하고요... 그런데 codevision이나 avrstudio에서 인식하지 못하는 상태입니다. >물론 제 잘못일 수 있지만, 사자마자 이렇게 되어서 제대로 작동하는지의 여부조차 확인할 수 없었습니다. a/s가 가능한지의 여부를 여쭤보고 싶네요
5650 답변완료AD-USBISP-L 드라이버 설치문제 김아람 2010-08-31 1,378
기존 동일 제품을 사용중에 제품 파손이 발생하여 새 제품을 구매하였음. 피씨 연결 시 새 제품으로 인식하고 드라이버 설치 프로세스가 진행됨. 드라이버가 제대로 설치 되지 않아 하드웨어 관리자 목록에 느낌표 마크가 뜸. 드라이버 제거 후 홈페이지에서 다운 받은 파일로 재 설치 후 동일 증상 발생. ================================================================== 왜 그럴까요?
관리자 답변 NEWTC · 2010-08-31
안녕하세요 사용하시는 OS win xp ? win7 32bit ? win7 64bit 에 따라 설치하는 방법이 틀립니다. 질문을 하실때는 사용하시는 개발환경을 적어서 질문을 해 주시길 바랍니다. 윈도우7 64bit 용입니다. http://www.newtc.co.kr/board/view.php?id=faq&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=41 윈도우7 32bit 용입니다. http://www.newtc.co.kr/board/view.php?id=faq&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=34 윈도우 XP 용입니다. http://www.newtc.co.kr/download/AD-USBISP/AD-USBISP_V03_XP2K.zip 위링크를 참조하세요 드라이버를 깔고 재부팅을 해보시길 바랍니다. 수고하세요 > > > 기존 동일 제품을 사용중에 제품 파손이 발생하여 새 제품을 구매하였음. > > 피씨 연결 시 새 제품으로 인식하고 드라이버 설치 프로세스가 진행됨. > > 드라이버가 제대로 설치 되지 않아 하드웨어 관리자 목록에 느낌표 마크가 뜸. > > 드라이버 제거 후 홈페이지에서 다운 받은 파일로 재 설치 후 동일 증상 발생. > >================================================================== > > 왜 그럴까요?
5649 답변완료2축 gyro 센서 질문이요.. 김한범 2010-08-30 1,352
지난번에 문의를 드려서 소스파일을 받았는데요 소스파일 중에 밑에 헤더파일때문에 에러가 나는데요... 어떻게 해야 하나요?? 소프트웨어는 AVR Studio4를 사용하고 있습니다. #include <iom128v.h> #include <macros.h> #include <stdio.h> #define SCALE_FACTOR 1.611328125 #define TIME 0.01 #define OFF_SET 458 //590.5611 int value = 0; float value_sum = 0; float offset; float angular_acceleration[50]; float angular_average = 0; float before_angle = 0; float after_angle = 0; float angle_factor = 0; char adc_flag = 0; char time_flag = 0; 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 = 0x03; } //TIMER0 initialize - prescale:64 // WGM: Normal // desired value: 1KHz // actual value: 1.000KHz (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:iv_TIM0_OVF void timer0_ovf_isr(void) { TCNT0 = 0x06; //reload counter value PORTG ^= 1; ADCSRA |= 0x40; } //TIMER1 initialize - prescale:8 // WGM: 0) Normal, TOP=0xFFFF // desired value: 100Hz // actual value: 100.000Hz (0.0%) void timer1_init(void) { TCCR1B = 0x00; //stop TCNT1H = 0xB1; //setup TCNT1L = 0xE0; OCR1AH = 0x4E; OCR1AL = 0x20; OCR1BH = 0x4E; OCR1BL = 0x20; OCR1CH = 0x4E; OCR1CL = 0x20; ICR1H = 0x4E; ICR1L = 0x20; TCCR1A = 0x00; //TCCR1B = 0x02; //start Timer } #pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF void timer1_ovf_isr(void) { //TIMER1 has overflowed TCNT1H = 0xB1; //reload counter high value TCNT1L = 0xE0; //reload counter low value //PORTG ^= 2; time_flag = 1; } //UART0 initialize // desired baud rate: 115200 // actual: baud rate:111111 (3.7%) // char size: 8 bit // parity: Disabled void uart0_init(void) { UCSR0B = 0x00; //disable while setting baud rate UCSR0A = 0x00; UCSR0C = 0x06; UBRR0L = 0x08; //set baud rate lo UBRR0H = 0x00; //set baud rate hi UCSR0B = 0x18; } // 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; } //ADC initialize // Conversion time: 104uS void adc_init(void) { ADCSRA = 0x00; //disable adc ADMUX = 0x00; //select adc input 0 ACSR = 0x80; ADCSRA = 0x8F; } #pragma interrupt_handler adc_isr:iv_ADC void adc_isr( void ) { //conversion complete, read value (int) using... value = ADCL; //Read 8 low bits first (important) value |= ( int )ADCH << 8; //read 2 high bits and shift into top byte adc_flag++; value_sum += value; if(adc_flag >=1 ) TCCR0 = 0x00; //stop //printf( "\\r\\n ADC = %d", value ); } //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(); adc_init(); timer0_init(); timer1_init(); MCUCR = 0x00; EICRA = 0x00; //extended ext ints EICRB = 0x00; //extended ext ints EIMSK = 0x00; TIMSK = 0x01; //timer interrupt sources TIMSK = 0x04; //timer interrupt sources TIMSK = 0x05; //timer interrupt sources ETIMSK = 0x00; //extended timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } void delay ( unsigned int cnt ) { unsigned int i,j; for( i=0 ; i< cnt ; i++ ) for( j=0 ; j< 1000 ; j++ ); } void main (void) { int i; int temp; init_devices(); printf( "\\r\\n GYRO..QQ"); printf( "\\r\\n ADCSRA = 0x%x", ADCSRA ); printf( "\\r\\n ADMUX = 0x%x", ADMUX ); printf( "\\r\\n ACSR = 0x%x", ACSR ); delay( 1000 ); for( i=0 ; i<100 ; i ++ ) angular_acceleration[i] = 0; ADMUX = 0x00; ADCSRA |= 0x40; offset = 0; for( i=0 ; i<50 ; ) { if ( adc_flag ) { temp = value; offset += value; adc_flag = 0; ADCSRA |= 0x40; //printf( "\\r\\n $$ = %d", value ); i ++ ; } } offset = (int)(offset / 50); printf( "\\r\\n offset = %f", offset ); //for( i=0 ; i<50 ; i ++ ) // angular_acceleration[i] = offset; delay( 2000 ); delay( 2000 ); TCCR1B = 0x02; //start Timer TCCR0 = 0x05; //start timer value_sum = 0; adc_flag = 0; while(1) { //delay( 1000 ); if( time_flag ) { PORTG |= 0x02; value_sum = value_sum / adc_flag; angular_acceleration[0] = (( float )( (int)(value_sum) - offset )) * SCALE_FACTOR; after_angle = before_angle + ( angular_acceleration[9] + angular_acceleration[8] + angular_acceleration[7] + angular_acceleration[6] + angular_acceleration[5] + angular_acceleration[4] + angular_acceleration[3] + angular_acceleration[2] + angular_acceleration[1] + angular_acceleration[0] ) / 10; angle_factor = after_angle * TIME; before_angle = after_angle; for( i=0 ; i<9 ; i ++ ) { angular_acceleration[i+1] = angular_acceleration[i]; //printf ( " nangle = %.2f", angular_acceleration[i]); } printf ( "\\r\\n X_angle = %.2f", angle_factor); angular_average = 0; adc_flag = 0; value_sum = 0; time_flag = 0; TCCR0 = 0x05; } PORTG &= 0xfd; } }
관리자 답변 NEWTC · 2010-08-30
안녕하세요 제공되는 코드는 ICCAVR 용 입니다. winavr 용으로 작성된 코드는 없습니다. 유저가 사용하는 컴파일별로 수정해서 다시 배포하지는 않습니다. 헤더나 printf 함수 부분을 수정해서 사용하셔야 합니다. 수고하세요 >지난번에 문의를 드려서 > >소스파일을 받았는데요 > >소스파일 중에 밑에 헤더파일때문에 에러가 나는데요... > >어떻게 해야 하나요?? 소프트웨어는 AVR Studio4를 사용하고 있습니다. > >#include <iom128v.h> >#include <macros.h> >#include <stdio.h> > >#define SCALE_FACTOR 1.611328125 >#define TIME 0.01 >#define OFF_SET 458 >//590.5611 > > int value = 0; > float value_sum = 0; > float offset; > float angular_acceleration[50]; > float angular_average = 0; > float before_angle = 0; > float after_angle = 0; > float angle_factor = 0; > char adc_flag = 0; > char time_flag = 0; > >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 = 0x03; >} > >//TIMER0 initialize - prescale:64 >// WGM: Normal >// desired value: 1KHz >// actual value: 1.000KHz (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:iv_TIM0_OVF >void timer0_ovf_isr(void) >{ > TCNT0 = 0x06; //reload counter value > PORTG ^= 1; > ADCSRA |= 0x40; >} >//TIMER1 initialize - prescale:8 >// WGM: 0) Normal, TOP=0xFFFF >// desired value: 100Hz >// actual value: 100.000Hz (0.0%) >void timer1_init(void) >{ > TCCR1B = 0x00; //stop > TCNT1H = 0xB1; //setup > TCNT1L = 0xE0; > OCR1AH = 0x4E; > OCR1AL = 0x20; > OCR1BH = 0x4E; > OCR1BL = 0x20; > OCR1CH = 0x4E; > OCR1CL = 0x20; > ICR1H = 0x4E; > ICR1L = 0x20; > TCCR1A = 0x00; > //TCCR1B = 0x02; //start Timer >} > >#pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF >void timer1_ovf_isr(void) >{ >//TIMER1 has overflowed > TCNT1H = 0xB1; //reload counter high value > TCNT1L = 0xE0; //reload counter low value > > //PORTG ^= 2; > > time_flag = 1; >} > >//UART0 initialize >// desired baud rate: 115200 >// actual: baud rate:111111 (3.7%) >// char size: 8 bit >// parity: Disabled >void uart0_init(void) >{ > UCSR0B = 0x00; //disable while setting baud rate > UCSR0A = 0x00; > UCSR0C = 0x06; > UBRR0L = 0x08; //set baud rate lo > UBRR0H = 0x00; //set baud rate hi > UCSR0B = 0x18; >} > >// 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; >} > >//ADC initialize >// Conversion time: 104uS >void adc_init(void) >{ > ADCSRA = 0x00; //disable adc > ADMUX = 0x00; //select adc input 0 > ACSR = 0x80; > ADCSRA = 0x8F; >} > >#pragma interrupt_handler adc_isr:iv_ADC >void adc_isr( void ) >{ >//conversion complete, read value (int) using... > value = ADCL; //Read 8 low bits first (important) > value |= ( int )ADCH << 8; //read 2 high bits and shift into top byte > > adc_flag++; > value_sum += value; > > if(adc_flag >=1 ) > TCCR0 = 0x00; //stop > //printf( "\\r\\n ADC = %d", value ); >} > > >//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(); > adc_init(); > timer0_init(); > timer1_init(); > > > MCUCR = 0x00; > EICRA = 0x00; //extended ext ints > EICRB = 0x00; //extended ext ints > EIMSK = 0x00; > TIMSK = 0x01; //timer interrupt sources > TIMSK = 0x04; //timer interrupt sources > TIMSK = 0x05; //timer interrupt sources > ETIMSK = 0x00; //extended timer interrupt sources > SEI(); //re-enable interrupts >//all peripherals are now initialized >} > >void delay ( unsigned int cnt ) >{ > unsigned int i,j; > > for( i=0 ; i< cnt ; i++ ) > for( j=0 ; j< 1000 ; j++ ); >} > >void main (void) >{ > int i; > int temp; > init_devices(); > > printf( "\\r\\n GYRO..QQ"); > printf( "\\r\\n ADCSRA = 0x%x", ADCSRA ); > printf( "\\r\\n ADMUX = 0x%x", ADMUX ); > printf( "\\r\\n ACSR = 0x%x", ACSR ); > > delay( 1000 ); > > for( i=0 ; i<100 ; i ++ ) > angular_acceleration[i] = 0; > ADMUX = 0x00; > > > ADCSRA |= 0x40; > offset = 0; > for( i=0 ; i<50 ; ) > { > if ( adc_flag ) > { > temp = value; > offset += value; > adc_flag = 0; > ADCSRA |= 0x40; > //printf( "\\r\\n $$ = %d", value ); > > i ++ ; > } > } > offset = (int)(offset / 50); > > printf( "\\r\\n offset = %f", offset ); > > //for( i=0 ; i<50 ; i ++ ) > // angular_acceleration[i] = offset; > > delay( 2000 ); > delay( 2000 ); > > TCCR1B = 0x02; //start Timer > TCCR0 = 0x05; //start timer > value_sum = 0; > adc_flag = 0; > while(1) > { > //delay( 1000 ); > > if( time_flag ) > { > > PORTG |= 0x02; > > value_sum = value_sum / adc_flag; > angular_acceleration[0] = (( float )( (int)(value_sum) - offset )) * SCALE_FACTOR; > after_angle = before_angle + ( angular_acceleration[9] + angular_acceleration[8] + angular_acceleration[7] + angular_acceleration[6] + angular_acceleration[5] + angular_acceleration[4] + angular_acceleration[3] + angular_acceleration[2] + angular_acceleration[1] + angular_acceleration[0] ) / 10; > > angle_factor = after_angle * TIME; > before_angle = after_angle; > for( i=0 ; i<9 ; i ++ ) > { > angular_acceleration[i+1] = angular_acceleration[i]; > //printf ( " nangle = %.2f", angular_acceleration[i]); > } > > > printf ( "\\r\\n X_angle = %.2f", angle_factor); > angular_average = 0; > adc_flag = 0; > value_sum = 0; > time_flag = 0; > TCCR0 = 0x05; > > } > PORTG &= 0xfd; > } >} >
5648 답변완료dac7802 사용시 노이즈 장은석 2010-08-30 1,409
AVR MEGA 2560 개발키트의 포트사용하여 dac7802로 전압가변을 하려고 합니다 그런데 포트 케이블(SE-2X520)의 길이가 길어지면 노이즈로 인한 오동작이나 동작불량이 날수 있을 것같아 질문드립니다. USBISP 라이트 다운로더을 코드비젼에서 사용할 수있는지 버젼은 어디까지 사용가능한지 알고 싶습니다. 그리고 전원부에 15v 사용가능한지 알고 싶습니다. 수고하십시요.
관리자 답변 NEWTC · 2010-08-30
안녕하세요 >AVR MEGA 2560 개발키트의 포트사용하여 dac7802로 전압가변을 하려고 합니다 그런데 포트 케이블(SE-2X520)의 길이가 길어지면 노이즈로 인한 오동작이나 동작불량이 날수 있을 것같아 질문드립니다. avr 과 DAC 칩과의 컨트론선의 길이가 몇미터가 되나요 ? 디지털라인이라 길이에 상관이 없으나 길이가 길어질수록 손실이 발생하기 &#46468;문에 &#51099;게 사용하면 됩니다. 미터이상으로 갈경우 무리가 생길 수도 있습니다. >USBISP 라이트 다운로더을 코드비젼에서 사용할 수있는지 버젼은 어디까지 사용가능한지 알고 싶습니다. 메뉴얼에 적혀있습니다. 한번 보시길 바랍니다. 1.25.xxx 이상 버전에서 무리없이 사용 가능합니다. http://www.newtc.co.kr/download/AD-USBISP/AD-USBISP_V03.pdf 수고하세요 >AVR MEGA 2560 개발키트의 포트사용하여 dac7802로 전압가변을 하려고 합니다 그런데 포트 케이블(SE-2X520)의 길이가 길어지면 노이즈로 인한 오동작이나 동작불량이 날수 있을 것같아 질문드립니다. > >USBISP 라이트 다운로더을 코드비젼에서 사용할 수있는지 버젼은 어디까지 사용가능한지 알고 싶습니다. > >그리고 전원부에 15v 사용가능한지 알고 싶습니다. > >수고하십시요.
5647 답변완료회로도 강병권 2010-08-29 1,463
AM-DC2-4C의 회로도와 AM-ACCTB 회로도 구할수 있을까요?
관리자 답변 NEWTC · 2010-08-30
안녕하세요 자료실 > 기존자료실 "도면" 또는 "회로도"에 검색해서 나오지 않은 품목은 제공되지 않습니다. 모터드라이버 모든 품목은 회로도가 제공하지 않습니다. 수고하세요 > AM-DC2-4C의 회로도와 AM-ACCTB 회로도 구할수 있을까요?
5646 답변완료ICCAVR V7 사용시 Cannot program Flash 에러 메시지 발생 김중균 2010-08-28 1,479
- 사용 보드 : ATMEGA128 Pro - 컴파일러 : ICCAVR V7 데모 버전 - 설정 내용: 1. Compiler Options-->Device Configuration에서 ATMega128(Please see NOTES) 선택 2. In System Programming 에서 SI-Prog 선택을 하고 해당포트을 지정 3. Advanced Manual Mode에서 Fuse Bits 0xFFD9EF 입력후 W 버튼 클릭 4. Application Builder-->UART 탭에서 Use UART 0 선택 Enable TX 선택 Baud rate : 9600 선택 Char size : 8bit 선택 - 증 상: 노트북에서 USB to Serial Port 변환기를 써서 SE-3T9 연결후 ATMEGA128 Pro uart 0 쪽에 연결을 하여 사용 하려고 합니다. 그런데 Cannot program Flash 라는 에러 메시지 발생합니다. ISP케이블 uart케이블 잘 꽂혀 있는지 다 확인 했지만 원인을 못 찾겠습니다.
관리자 답변 NEWTC · 2010-08-29
안녕하세요? 고객님, SE-3T9 케이블은 시리얼 통신 케이블입니다. ISP가 아닙니다. SI prog를 쓰려면, 아래 회로를 사용하여야 합니다. http://www.lancos.com/siprogsch.html 본사의 USBISP나 AD_ISPPRO를 이용하시기 바랍니다. ISPPRO도 회로를 메뉴얼 안에 보면 제공하고 있으니, 참고 바랍니다. 자료실에서 볼 수 있습니다. 수고하세요. >- 사용 보드 : ATMEGA128 Pro >- 컴파일러 : ICCAVR V7 데모 버전 >- 설정 내용: 1. Compiler Options-->Device Configuration에서 ATMega128(Please see NOTES) 선택 > 2. In System Programming 에서 SI-Prog 선택을 하고 해당포트을 지정 > 3. Advanced Manual Mode에서 Fuse Bits 0xFFD9EF 입력후 W 버튼 클릭 > 4. Application Builder-->UART 탭에서 Use UART 0 선택 > Enable TX 선택 > Baud rate : 9600 선택 > Char size : 8bit 선택 > >- 증 상: 노트북에서 USB to Serial Port 변환기를 써서 SE-3T9 연결후 > ATMEGA128 Pro uart 0 쪽에 연결을 하여 사용 하려고 합니다. > 그런데 Cannot program Flash 라는 에러 메시지 발생합니다. > ISP케이블 uart케이블 잘 꽂혀 있는지 다 확인 했지만 원인을 못 찾겠습니다.
5645 답변완료AVR을 처음 공부하려는데.. 강태호 2010-08-28 1,410
AVR을 처음 접해보는 대학 1학년생입니다. 고등학교때부터 배우고 싶었는데 시간이없어서 못햇구요 대학오면 가르쳐줄줄 알았더니 3,4학년때나 배우더군요 그래서 그냥 혼자 해보려고 하다보니 여기까지 왔네요..; 강좌에 있는 'kd_128pro를_이용한_ATmega128_초초보강좌' 가 괜찮아보여서 KD-128PRO-C 키트를 일단 구매 했습니다. 무작정 따라해보려 하는데 이 강좌를 보고서 따라만 하는것이 처음 공부하는 사람으로서 올바르게 공부하는게 맞는지 궁금하네요 지금은 딴거 신경안쓰고 이것만해도 AVR을 이용한 로봇공부에 부족한부분없이 충분히 공부가 될까요? 그리고 없는 기능들은 따로 확장제품을 구매해서 연결시키기만 하면 이 키트를 가지고 '모든' AVR공부를 섭렵하는것도 가능한가요?
관리자 답변 NEWTC · 2010-08-29
안녕하세요? 고객님, 반갑습니다. 대학 다닐 때 저 랑 같은 고민에 빠지셨네요. ㅎㅎㅎ 우리 때는 공개된 자료도 별로 없고, 했던 선배들도 많지는 않아서, 쉽지 않았습니다. 일본 책들 번역된 내용들 일부 책이 있기도 했고, 잡지 같은데서 간신히 자료를 구하고 했지요. 우리 회사 같은 회사들이 공개를 많이 하고 있고, 까페들도 많이 생겨서 공개된 자료를 구하기가 요즘에는 쉬운 일이지요. 오히려, 인터넷에 너무 많은 자료가 있는 데, 쓸만한 자료가 어떤 것인지 고르는 고민을 해야할 형편이지요. 저희 회사에서는 강좌->동영상 강좌를 통해서, 매우 기초적인 기초를, 강좌->AVR 강좌에서 AVR 관련된 기본 강좌들을, 강좌->전자공학 강좌에서 전자공학 관련된 기초들을 섭렵할 수 있도록 해 두었습니다. 물론, 자료실이나 자료실->기존자료실 로 가서 소스 들을 검색할 수도 있습니다. 궁금한 점은 Q&A를 통해서 질문해 가면 되구요. KD-128PRO-C + USBISP킷트라면, 왠만한 내용은 실습해 볼 수 있습니다. 그리고, 모터라던가 센서, 릴레이 등은 본사의 확장보드를 이용하면, 학습이 가능합니다. 본 킷트를 이용해서 4족로봇, 6족 로봇 등은 학생들이 수업시간에 만든 적이 있습니다. 사람에 따라서 충분할 지는 모르지만, 그 정도는 문제없이 하실 수 있을 겁니다. 수고하세요. >AVR을 처음 접해보는 대학 1학년생입니다. > >고등학교때부터 배우고 싶었는데 시간이없어서 못햇구요 > >대학오면 가르쳐줄줄 알았더니 3,4학년때나 배우더군요 > >그래서 그냥 혼자 해보려고 하다보니 여기까지 왔네요..; > >강좌에 있는 'kd_128pro를_이용한_ATmega128_초초보강좌' 가 괜찮아보여서 > >KD-128PRO-C 키트를 일단 구매 했습니다. > >무작정 따라해보려 하는데 이 강좌를 보고서 따라만 하는것이 > >처음 공부하는 사람으로서 올바르게 공부하는게 맞는지 궁금하네요 > >지금은 딴거 신경안쓰고 이것만해도 AVR을 이용한 로봇공부에 > >부족한부분없이 충분히 공부가 될까요? > >그리고 없는 기능들은 따로 확장제품을 구매해서 연결시키기만 하면 > >이 키트를 가지고 '모든' AVR공부를 섭렵하는것도 가능한가요? >
5644 답변완료gyro센서 출력 김상돈 2010-08-27 1,362
자이로를 DAQ에 연결해서 랩뷰로 출력하고 있는데 적분후에 오차가 너무 큽니다. 센서를 4-50도 정도만 움직이고 제자리로 돌아와도 오차가 20도 정도 심하게 납니다. 뭐가 잘못된건가요?
관리자 답변 NEWTC · 2010-08-27
안녕하세요 mems 타입의 자이로는 초당 1도정도의 누적적분오차가 생깁니다. 가속도센서를 이용하여 적분오차에 따른 오차를 보정하는것입니다.(칼만 필터) 검색엔진에서 자이로, 칼만필터 에 찾아보시면 2개를 이용하는 방법이 나와있습니다. 수고하세요 >자이로를 DAQ에 연결해서 랩뷰로 출력하고 있는데 > >적분후에 오차가 너무 큽니다. > >센서를 4-50도 정도만 움직이고 > >제자리로 돌아와도 오차가 20도 정도 심하게 납니다. > >뭐가 잘못된건가요?