Article Category

분류 전체보기 (303)
영어 (9)
관심 (11)
프로젝트 (1)
내 폴더 (183)
Ver 1.0 (94)
Windows API (0)
리눅스 (17)
TCP/IP (0)
디지털 공학 (16)
임베디드 (36)
역 어셈블링 (7)
C/C++ (18)
수면과 과학 (0)

 

'Ver 1.0/임베디드'에 해당되는 글 36건

  1. 2006.12.19 라인 트레이서 [line tracer] 2
  2. 2006.12.19 시중 키트용 라인트레이서
  3. 2006.12.19 라인 트레이서 회로도 예제
  4. 2006.12.19 부품 예상도
  5. 2006.12.17 센서 네트워크
  6. 2006.12.14 마이크로프로세서 교재.zip
  7. 2006.12.13 [DATA SHEET] Max232CPE
  8. 2006.12.12 교육용 키트 실습중
  9. 2006.12.08 MicroC/OS-II 실시간 커널
  10. 2006.12.07 어셈블리언어 기초

라인 트레이서 [line tracer]

라인트레인서(Line Tracer) 란?

라인 트레이서는 바닥에 그려진 선(Line)을 따라서 이동하는 단순한 형태의 로봇을 말한다. 흰색바탕에 그려진 검은 선을 적외선 센서로 감지하여 움직이는 로봇으로, 산업현장에서 물건을 운반하는 무인 반송차에 응용되고 있는 기술이다. 라인 트레이서는 일명, 라인 스캐너(Line Scanner)라고 불리우기도 한다.

연구목적

AVR Controller를 사용하여 구조 분석 및 응용, 방법을 익히고 스테핑 모터의 제어 방법과 적외선 센서의 동작 및 사용을 이해한다. 또한 ROM에 쓰이게 될 프로그램을 작성하기 위하여 사용하게 될 C언어를 습득하는데 목적이 있다.



개 요

C 언어를 이용하여 AVR Controller (ATMEGA128)를 동작시켜 스테핑 모터제어, 센서를 통해 라인 검출, 리모콘을 이용하여 원격제어를 한다.


ㆍAVR Controller (ATMEGA128)의 내부 구조를 분석하고 CPU 각 PORT의 이용방법을 숙지.
ㆍ스테핑 모터의 원리분석과 응용방법을 숙지.
ㆍ적외선 통신(리모콘)방식, 센서를 분석하고 이해.
ㆍC 언어응용 및 알고리즘 연구.

동작원리

센서의 바닥 감지-> 센서의 구동 정보-> CPU에서 처리-> 모터의 구동->
리모콘을 통한 원격제어

원격제어 라인 트레이서의 동작 원리는 간단히 말해서 리모콘을 통해 동작을 원격 제어하는 것으로 발광 센서에서 나온 빛이 바닥에 반사시켜서 수광 센서로 받아들이며, 바닥의 명암 차(라인과 그 외의 지역의 명암이 차이가 있다.)를 통해 센서에서 바닥을 감지하는 정보를 얻게 된다. 그 정보를 바탕으로 CPU에서 처리하여 동작에 대한 명령을 지시하게 되고, 그 명령을 두 개의 바퀴 구동에 해당하는 두 개의 모터에 명령을 내려서 Body를 움직이게 한다.

설계 일정

12. 20 - 라인트레이서 조사결과 발표
12. 23 -  각자 임무 분담
12. 23 -  각자 임무 분담
12. 25 - 이후 각자 맡은 분야에 대한 상세한 보고 시작.

이후 수시로 진행사항 파악 및 수정

시중 키트용 라인트레이서


시중에서 판매하고 있는 라인 트레이서.
간단한 프로그램이 내장 되어 있고, 부품도 모두 들어 있어서 그냥 조립만 하면 되는 완구용 키트.

1. 부품을 리스트와 확인한다.

       

2. ①IC소켓 U1,U2,U3,U4 ②콘덴서104pF C4,C5,C6,C7 ③ 크리스탈Y1 ④콘텐서30pF C2,C3
을 납땜한다.
           

3. ①저항1K옴R7, ②전해콘덴서10uF C1, ③2P커넥터숫놈 J5, ④토글S/W SW, ⑤부저
  BU1을 납땜한다 (극성있는 부품은 전해콘덴서(흰색줄이-)와 부저(+표시가있다)이다 )

         
                         
그림같이 납땜을 하면된다.


4. ①LED D7,D8,D9, ②저항330옴 R8,R9,R10 ③2P커넥터숫놈 J3,J4를 납땜한다.(LED는 다리긴쪽이+)

           

                 



5. ①6P 헤더핀암놈 J1,J2, ②건전지소켓 BOX1,BOX2,BOX3를 납땜한다
  (여기서 J1,J2는 밑에서 위로꼽고 위에서 납땜한다. 소켓도납땜시 방향에주의한다)
       

   


6. 센서보드 및 들어가는 부품을 확인하다.①저항1.2M옴은 R1,R2,R3에 저항22옴은  
   R4,R5,R6에 납땜한다

   


7. ①6P헤더핀암놈J6,J7, ②센서 ST7L D1,D2,D3 EL8L D4,D5,D6을 납땜한다
   (센서들은 아래서위로 꼽구서납땜한다 센서들의 배열을 맞추어야한다)
 
     
     


8. 헤더핀숫놈2개(빨간점)는 센서보드와 메인보드를 연결한다. 그리고 각칩들을 방향에 주의해서 꼽는다.
           

9. 모터를 나사와 너트를 사용해서 조립한다 앞뒤 볼퀘스터(빨간점)와 바퀴도 조립한다.

           


10.  터미널을 그림과 같이 순차적으로 조립한후 결합한다(검은선이 들어가는쪽에서 왼쪽이다)

         

         

11. 나사와 서포트를 조립한다.

           
           


12. 바디와 메인보드 그리고 센서보드를 조립한다. (센서보드는 조립시 방향에 주의한다-발광센서부가 위쪽으로 오도록!)
   *라인을 그려서 센싱이 잘되는지 확인한다. 라인을 그릴때는 페곡선으로그린다

         

         


13. 모두가 완성되었으면 검정테이프로 라인을 만들어 놓고 라인위에 로봇을 올려놓으면 로봇이 라인을 따라 갈 것이다.
   각각의 동작 프로그램은 제공되는 소스프로그램을 수정하여 직접 제어하여 보도록 하자.......

라인 트레이서 회로도 예제

cpu 회로도



interface 회로도



motor부 회로도


부품 예상도

센서 네트워크

프로젝트 준비 자료


마이크로프로세서 교재.zip

마이크로프로세서 교재

출처 : http://dept.kaywon.ac.kr


[DATA SHEET] Max232CPE

사용자 삽입 이미지

제발 회로도가 칩셋모양 그대로 그려져 있었으면!




 

교육용 키트 실습중

제타 키트의 형제 키트를 만드는 중이다.
처음 시작부터 배치가 잘못되서 배선중에 고생이 많을것 같지만,
모두다 처음이고 경험이니 너그럽게 용서 하도록 하고.

LED랑 적외선 센서만 연결 완료 했다.

오늘에서야 이론으로만 듣던 콘덴서, 저항, 크리스탈 등등의 쓰임새를 알았고,
회도로를 읽는 법을 조금은 알았다.
디지털 공학에서 배웠던 회로가 이제서야 머릿속에서 재정렬 되고 있다.
옛말에 백문이 불여일견 이라 했다. 백번 보고 수도 없이 외우려고 했것만 한번 보느니만 못했다.

5시 부터 시작 했으니까 10시까지 거의 5시간을 납땜만 했다.
이건, 완전 노가다 잖아..

컴퓨터로 그냥 마우스 클릭질 두번이면 끝날 것을, 자르고 붙이고 지지고 볶고;

한번은 해보고 싶었는데, 나중에 하라면 약간 움찔 할지도 모르겠다;;


사용자 삽입 이미지

앞면, 저항 위랑 곳곳에 노란 선은 말로만 듣던 점프선 ㅋㅋㅋ


사용자 삽입 이미지

깔끔하게 배선 하려고 노력한 티가 팍팍! 나기를;

MicroC/OS-II 실시간 커널

[도서] MicroC/OS-II 실시간 커널 (보급판,제2판, CD포함) 에이콘 임베디드 프로그래밍 시리즈
Jean.J.Labrosse 저/성원호 역 | 에이콘출판사 | 2005년 04월
35,000원 → 33,250원(5% 할인)| YES포인트 1,000원 (3% 지급)

어셈블리언어 기초

  • 레이블(Label)

    레이블이란 인스트럭션이나 데이터의 위치를 표시해 주는 것이다. 인스트럭션의 위치를 표시해 주는 것이라는 설명에 대해서는 C에서 goto문을 생각하면 가장 쉬울 것이다. C에서는 특정 문장 앞에 L1: 과같이 쓰고, 나중에 그 위치로 옮겨가고 싶을 때 goto L1;이라고 썼다. 어셈블리에서는 jmp이나 loop와 같은 인스트럭션을 쓸 때 사용하게 될 것이다. 이러할 때 쓰이는 레이블을 코드 레이블(Code Label)이라고 한다.

    데이터의 위치를 표시해 준다는 것은 무엇일까? 바로 변수의 이름이다. 변수의 이름이란, 데이터 영역에 일종의 레이블을 붙여 그 위치를 기억했다가 그 변수를 사용할 때 아까 기억해놓은 레이블을 이용해서 그곳에 값을 저장하거나 불러오는데 쓰인다.

    만약 데이터 레이블이 없다면 우리는 특정 주소에 변수를 사용하기로 약속하고는 그 주소를 계속 외우고 다녀야 할 것이다. 또 그 변수의 역할, 갖게될 값의 형태까지 기억하려면 얼마나 불편한지 짐작이 갈 것이다. 이렇게 데이터의 위치를 기억하는 레이블을 데이터 레이블(Data Label)이라고 한다.

  • 인스트럭션 니모닉(Instruction Mnemonic)

    아까 인스트럭션 니모닉에 대해 잠시 언급한 바가 있다. 좀더 자세히 설명해 보자면, Mnemonic의 사전적 의미는 "기억을 도와주는 장치"이다. 1회에서 필자가 말했던 것 처럼 CPU에게 내릴 명령코드를 의미있는 글자로 치환시켜주는 것이 어셈블리어의 기본 모토라고 하였다. 복잡한 명령 코드 대신 "기억을 도와주는 것"이 바로 이 니모닉이다. 대표적인 것으로 mov, add, sub와 같은 것이 있다. mov는 move의 약자이고, sub는 subtract의 약자이니까 어떤 일을 하는 인스트럭션인지는 짐작이 갈 것이다.

  • 주석(Comment)

    주석은 코드 자체가 수행할 일들과는 무관하지만, 보는 이로 하여금 좀더 쉽게 이해할 수 있도록 도와주는 것이다. 즉, 이부분에서 어떤 일을 하는지, 주의할 점은 무엇인지 등이다. 특히 어셈블리어는 프로시져가 어떤일을 하는지, 매개변수는 어떤 것을 받는지, 리턴값은 어떤지에 대해 주석을 달지 않으면 해석하기가 정말 힘들다. 게다가 매개변수로 레지스터 메모리를 사용하기라도 한다면 더더욱 이해하기 힘들어진다.

    그래서 주석은 아무리 강조해도 지나침이 없다. 아까 설명했듯이 대표적인 주석은 세미콜론(;)인데, ;로 시작해서 그 줄의 끝까지가 주석이 된다. (이것을 가장 많이 쓰게 될 것이다.) 또다른 형태의 주석은, C에서 /* */와 같이 일종의 블럭안을 모두 주석으로 처리해 주는 것이다. 이는 다음과 같이 사용할 수 있다.

        COMMENT    ! 
               This line is a comment. 
               Welcome to Internet.com 
        !
    

    !대신에 &와 같이 사용자가 하고싶은 기호를 사용해도 된다. 이렇게 하면 COMMENT  ! 와 !로 둘러싸인 부분이 모두 주석이 된다.

  • 자료 정의하기

    자료를 정의하는 방법을 배워보자. 쉽게 말해서 변수를 만드는 것이다. 그러기 위해서는 자료형을 알아야 한다. C에 int, long, float, double이 있는 것처럼, 어셈블리어에도 자료형이 있다. 다음의 표에 열거해 놓았으니 참고바란다.

    Type

    Usage

    BYTE

    8비트 부호없는 정수

    SBYTE

    8비트 부호있는 정수

    WORD

    16비트 부호없는 정수

    SWORD

    16비트 부호있는 정수

    DWORD

    32비트 부호없는 정수

    SDWORD

    32비트 부호있는 정수

    FWORD

    48비트 정수

    QWORD

    64비트 정수

    TBYTE

    80비트 정수

    REAL4

    IEEE표준의 32비트 실수

    REAL8

    IEEE표준의 64비트 실수

    REAL10

    IEEE표준의 80비트 실수

    <표 2 : 자료형>

  • 자료 정의하기

    C로 치면 변수 선언 방법이라고 할 수 있고, 다음과 같은 형식을 같는다.

          이름    디렉티브    초기값, 초기값...
    
    이름은 생략될 수도 있다. 디렉티브는 표 2에 나온 것들을 말한다. 각각을 설명하자면, 먼저 맨 앞의 이름은 앞에서 이야기한 데이터 레이블이다. 레이블은 없을 수도 있다. 초기값이 여러개인 것이 궁금할 것이다. 초기값을 두 개 이상 쓰게 되면 그것은 메모리에 연속적으로 초기값의 개수만큼 공간이 할당되며 해당 초기값으로 초기화된다. 메모리에 연속적으로 위치하게 되므로, 메모리 주소 연산을 이용하여 일차원 배열처럼 사용할 수 있을 것이다. 이에 대한 예는 나중에 설명하도록 하겠다. 자료 정의에 대한 예는 다음과 같다.
         value1 BYTE 'A'	; 문자 상수
         value2 BYTE 0
         value3 SBYTE ?
    디렉티브를 대문자로 쓴 것은 단지 보기 좋으라고 한 것이니까 신경쓰지말자. 대소문자는 구분하지 않는다고 했으니 소문자로 써도 상관없다. 값을 굳이 초기화하지 않아도 된다면 value3와 같이 초기값 자리에 ?를 사용할 수 있다.

  • 문자열 정의하기

    C언어에서 배열에 문자열 넣을 때는 char string[25] = "abcdef"; 이런식의 사용이 허용된다는 것을 기억하는가? 어셈블리어도 문자열 정의에 있어서는 많은 배려를 해주고 있다. 다음을 보라.

        greeting1 BYTE "Hi~>.<;",0		; 1번
        greeting2 BYTE 'H', 'i', '~','>', '.', '<', 0 	; 2번
    
    위의 1번과 2번은 완전히 같은 것이다. 맨 뒤에 붙은 0은 무엇을 의미할까? 바로 문자열의 끝을 나타내는 것으로서 널문자라고 한다. 개행문자를 넣고 싶다면 해당 위치에 0Ah, 0Dh를 넣어야 한다. 도스에서는 캐리지리턴과 라인피드가 모여서 하나의 개행문자를 이루기 때문이다.
  • prev 1 2 3 4 next