Posted by eoseontaek

Link : http://blog.naver.com/gaping2?Redirect=Log&logNo=20089851428


[국내]
    - 인텔레인(주) : http://www.intellane.com/
    - Air Gate : http://www.air-gate.co.kr/
    - 마이크로인피니티 : http://www.cruizcore.com/k_index.html


[국외]
    - XSENS : http://www.xsens.com/







Posted by eoseontaek
O 커널 소스 구하기
    - 공식 배포 사이트 : http://www.kernel.org/


O 커널 컴파일 하기
   커널 버전 확인 
   #uname -a

    커널 소스 다운로드 => http://www.kernel.org에 접속하여 최신 커널을 다운로드 한다.
    #wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.tar.bz2

    다운로드한 커널을 압축 해제한다.
    #tar -xvjf linux-2.6.30.tar.bz2

    생성된 디렉토리를 링크파일로 링크
    #ln -s linux-2.6.30 linux

    커널 설정값 초기화
    #make menuconfig

    커널 이미지 생성
    #make bzImage

    커널 모듈 생성
    #make modules

    생성된 object 파일들을 /lib/modules/커널버전 디렉토리로 복사
    #make modules_install

    모듈들이 정상적으로 설치되었는지 확인
    #ls -l /lib/modules/2.6.30/

    #ls -l /lib/modules/2.6.30/kernel/

    커널관련 파일 복사
    #make install

    /boot 디렉토리에 정상적으로 복사되었는지 확인
    #ls -l /boot

    /boot/grub/grub.conf 파일에 새로운 커널에 맞는 부팅 메뉴가 추가되었는지 확인
    #vi /boot/grub/grub.conf

    재부팅
    #reboot
 
    커널버전확인
    #uname -r   


Posted by eoseontaek
O 시스템 준비
    - 가급적 많이 사용하는 기종을 선택
    - 최신 기종보다는 한 단계 낮은 시스템을 선택

O 리눅스 배포판의 설치와 환경 설정
배포판 설치시 주의사항
    - 초보자는 가급적 전체 패키지 설치 권장
    - 부트로더 : 사용법이 간단하고 멀티부티을 지원하는 부트로더 선택

부팅디스크 확인
    - 부팅디스크 만드는 명령의 사용법
        #man mkbootdik 

커널버전 확인
    - 리눅스 커널에서 모듈이라는 방식을 지원하면서 부터 커널버전의 확인이 필요해짐.
    - 디바이스 드라이버를 컴파일하기 위해 참조하는 커널소스와 실제로 시스템에서 동작하는 커널의 버전이 같은지 확인.
    - 시스템에 설치된 커널버전 확인 명령
        #cat /proc/version
    - 디바이스 드라이버가 참조하는 커널소스 버전 - 커널소스가 있는 최상위 디렉토리의 Makefile에 기술되어 있음.
        #head /usr/src/linux/Makefile
    - 일치하지 않을 경우, 커널소스를 재컴파일하여 설치.

루트권한 설정
    - 단독시스템을 이용해서 가급적 root 권한으로 개발하는 것이 편리
    - root 사용자 권한에는 제한이 없기 때문에 삭제나 포멧같은 명령 사용시 주의해야 함.

    







Posted by eoseontaek

Link :  http://cafe.naver.com/carroty.cafe


kmz51_example1을 기준으로 avr 소스 수정

C#에서 가끔 에러 나는거 잡기 : 도대체 이유를 모르것음

 

구동 방법

뭐 AVR에 프로그램 넣고, C# 프로그램 구동하면 된다.





Posted by eoseontaek

Link : http://cafe.naver.com/carroty.cafe

* AVR Program

AVR측 프로그램입니다. I2C가 완성되지 않았기 때문에 별거 없어요.

스위치 입력 받을때마다 시리얼 포트로 @090!, @180!, @270!, @360!을 전송하게 되어있습니다.

I2C를 짠다음에 또 올려보도록 하죠.

 

* Future Works

1. 프로그램을 안전하게 종료시키기

  프로그램을 닫을때 시리얼 포트 및 모든 자원을 해제 해야 하는데, 대충 닫았습니다.

  종종 다시 시리얼 포트가 열릴때 문제가 생깁니다. ^^

  급하게 만들다 보니 이런실수가.. 크흑

 

2. 시리얼 클래스를 외부로 뽑기

  여기저기서 시리얼 클래스를 쓰는데, 매번 코드 복사하는것도 번거로와서, 뭔가 해결책을 찾아야 하는데 말이죠 ^^

  걍 클래스로만 만들어도 되나요? 뭐 DLL 이런걸로 만들어야 되나요?

 

3. C#에서 파싱하기

  AVR에서 쑥떡같이 보내도 C#에서 찰떡같이 알아듣기

  현재는 이렇게 보냅니다. @XYZ! XYZ는 각각 100의 자릿수, 10의 자릿수, 1의 자리수..

  고로, 45를 보내려고 해도, @45! 하믄 안되고, @045!와 같이 보내야 합니다.

  왜냐하면, C#에서

  if(str.StartsWidt(@)||str.EndsWidth(!)) { ...

    str.SubString(1,3);

  이렇게 읽기 때문이죠.

 

4. AVR에서 문자열  입력 받기

  도대체 하이퍼 터미널에서 "200" 이라고 문자열을 입력하면 AVR에서 어떻게 200이라고 알수 있을까요?

  문제는 입력되는 숫자가 가변적임, 즉 "3"이 올수도 있고, "45910"이 올수도 있음. 물론 끝에 엔터는 들어감

  문자열 보내는 것도 짜증나고, 받는 것도 짜증나요.

  긍까 하이퍼 터미널에서 문자열로 30이 오면 AVR에서 숫자로 30을 받고 싶다는 거죠

 

5. 지자기 센서 읽기

  데이터 쉬트 보고 읽으면 되지 않을까요? ^^






Posted by eoseontaek

Link : http://cafe.naver.com/carroty.cafe


전체 구조는 위와 같습니다.

지자기 센서의 I2C 출력값을 ATmega32에서 받아서, PC로 시리얼 통식 방식으로 쏩니다.

이 값을 받아서 PC 어플리케이션이 처리합니다.

PC 어플리케이션은 C#, VB, C++ 원하시는 툴로 짜면 됩니다. 당근이는 C#으로 짰음.

아래 예제가 있음돠.

 

 

이거 예제 짤때 쪼까 고생했는데, 고생한 목록은 다음과 같습니다.

1. 시계 모양으로 땡구라미를 그리는게 좀 힘들었습니다. 위의 조그만 동그라미들은 이미지가 아니라 좌표 계산하여 그린겁니다.

  고로, 프레임을 확대 축소해도 깨지지 않아요. 동구라미 좌표 그릴때 등방성 좌표계를 이용한다는데.. 거 뭔말인지..

2. 트랙바로 움직이게 했는데, 트랙바보다는 vertical Slider가 더 이쁜거 같더군요. (뭐야 이건 어려운게 아니잖아!)

3. 설명드리기가 곤란한데, 가장 복잡했던점이..

  당근이가 만든 Compass 클래스에서 OnPaint 메소드를 호출했더니, 자꾸 에러가 나더군요.

  UsrControl을 상속받아야 했구요.

  처음에는 패널의 Graphics 객체를 Compass에서 받아와서 처리했는데, 보통 그렇게 하지 않더군요.

  걍 Compass의 Graphics에서 createGraphics를 한 이후에 Compass를 생성할때 Graphics를 넘겨주는 방식..

  조금 버벅 댔음

4. 더블 버퍼링.. 그래도 조금 어려울줄 알았는데, 한줄이면 되더군요. ㅜㅠ

 

아래는 소스 짜는 중 이것 저것 캡쳐해본검돠.

초기 버젼 : 아직 시리얼을 못 붙였음

 

개선중 : 패널 제거작업 (크하하.. 패널 뒤에 있어서 안그려지는 알고 거의 30분 삽질 ㅜㅠ)

 

최종 버젼

 

예제 소스 설명

1. 초기 프로토 타입 : 클래스 설계 개판

2. 어쨌든 움직이게 했다.

3. 더블 버퍼링

4. 시리얼 입력 받음 : 옆의 슬라이더와 동시에 받음

 

현재 작업 내역

컴 마스터로 당근보드의 스위치를 누르면 이 값이 PC의 C# 프로그램으로 갑니다.

그라무네, 나침반이 90, 180, 270, 360도 이렇게 움직입니다. 버튼이 뭐 4개밖에 없어서 걍 편하게 짰음

서서히 정회전 역회전 할수도 있지만, 나중에 하기로 하고 오늘은 여기까지 !



Posted by eoseontaek

Link : http://cafe.naver.com/carroty.cafe


CMPS03 지자기 센서를 이용한 방위각 측정을 해보려고 합니다.

2008.06.28 현재 센서값을 읽지는 못했습니다. 좀 시간내서 더 짜봐야 할듯요. I2C 하기 싫어서.. ㅜㅠ

환경은 알아서 구성해 주세요.

당근이는 XP, Visual Studio 2005 C#, AvrStudio ?.?.14, 당근보드, 뭐 이렇게 사용합니다.

 

일단 CMPS03 라는 놈이 모냐? 쉽게 설명하면 "Compass(나침반)"이라고 생각하면 됩니다.

http://www.touchsensor.co.kr/robotelec/se-cmps.htm

조기서 판매하고 있고요. 각종 자료나 소스도 제공해 줍니다. 물론 BASCOM이나 VB를 안쓰기 때문에, 당근이는 그닥 필요가.. ㅜㅠ

 

데이터 포맷은 아직 데이터 쉬트를 못봐서 모르겠지만, 북쪽이면 0, 남쪽이면 180 뭐 이렇게 나오지 않을까 싶네요. 사진 함 구경해 보죠.

 

 

 

요로코롬 생긴놈입니다. PIC를 제거하면 엄지 손톱만 해지지도 않을까 생각해 봅니다.

누가 PCB 비용이라도 주믄 함 만들어 보겠다. ㅋㅋㅋ

흠. 지자기 센서가 I2C를 지원안하니까, PIC는 꼭 있어야 하나? 어쩌나? 흠 모르것다.

 

핀 디스크립션은 위와 같구요.

NC는 도대체 왜 뽑아놓은건지..

얘는 I2C로 출력하므로, I2C 포맷을 알아야 합니다.

제어에 대한 자세한 내용은 데이터쉬트를 참조.. ^^

 

다음에는 프로그램 함 보도록 하죠.

Visual Studio가 없으신 분들은 첨부파일을 다운로드 하여 실행해 보면 됩니다.

옆의 슬라이더를 움직이면, 바늘이 움직입니다.

즉, 지자기 센서의 값을 읽어서 슬라이더를 움직이는 것과 동일한 이벤트를 발생시키겠다는 거죵. 대략 이해가 가시겠죠?

 



Posted by eoseontaek
2009. 11. 12. 14:28

Wikipedia에 SPI에 대하여 자세히 소개되어있다.
아래 링크를 참조.

Serial Peripheral Interface Bus

http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
Posted by eoseontaek

Link : http://www.standardics.nxp.com/products/p82b/datasheet/p82b96.pdf

NXP Semiconductors 사의 양방향 버스 버퍼 "P82B96" 이다.

I2C의 전압레벨변환을 위해 사용할 수 있다.

5V <--> 3.3V I2C 라인의 레벨변환을 위해 사용하였다.



Posted by eoseontaek
Posted by eoseontaek
이전버튼 1 이전버튼