728x90
반응형
H/W
▶ 서보모터
일종의 DC 나 AC 모터이다.
스테핑 모터는 안에 자석이 들어서 스텝 별로 제어
이것은 DC 모터 그 자체를 제어 + 별도의 각도 센서가 있다.
스테핑 보다 정밀도는 떨어지나 힘은 좋다.
그래서 힘이 좀 들어가는 곳에 사용을 많이 한다.(ex - 로봇 팔, 4족 스파이더 로봇)
▶ Timer/Counter
- Mode -
- 일반모드(Overflow 방식)
- 0~FF(8bit) 까지 카운트 후(TCNT) 다시 0 으로 될 때 interrupt 발생
- 오버 플로우 인터럽트가 나타나는 주기 : 625ns * 분주비 * (OCRnX + 1)
- 16M / 분주비 / (OCRnX + 1) = 1Hz
- 625ns(x-tal에 의해 결정) * 256(분주비) * (x+1) = 1초(1주기가 1초)
=> n = , x = OCRnX , x = 62499가 나온다.
=> 만약 100 주기를 구하고 싶다면 결과 값을 100으로 맞춘 후 계산하면 x = 624가 된다.
- CTC모드
- 일반 모드와 마찬가지로 interrput가 필요.(인터럽트는 SREG |= 0x80; 소스가 꼭 필요 하다.)
- 일반 모드와 CTC 모드 비교 그림
- 일반 모드 보다 더 정확한 시간을 만들 수 있다.
- PWM모드
- 동일 주파수의 듀티비 조정으로 장비 제어 하는 것.
- 듀티비란?
- 기본적으로 interrput와 상관이 없다.
- OCR이라는 값을 Main에서 변화 시킨다.
(OCR의 범위는 0 <= OCRnX <= TCNT의 최대값, OCR이 최대값이면 듀티비가 100% but 모드에 따라 반대가 되기도 한다.)
- PC PWM, Fast PWM이 있고 파형의 모양이 다르다. Fast PWM은 주파수가 약 2배 높아 진다.
- TCNT는 단순하게 상승 하강 한다. (TCNT가 증가 하는 기준은 크리스탈)
- 16Mhz 주기에서 TCNT가 하나 증가하는데 걸리는 시간은 625ns. 단 분주비가 1 일 경우.
- Register -
- TCCRnA, TCCRnB, TCCRnC
현재 모드 설정 및 현재 모드에서 OC를 쓸건지 말건지 정보를 저장하는 레지스터
- TCNTn
타이머 카운트가 타이머 카운트의 주된 일을 한다. 클럭 하나당 감소하거나 증가하는 것. (ex - 8bit 는 0~FF)
- OCRnX
사용자가 임의의 기준값을 정해 주는 것
- OCnX
OCR과 TCNT크기를 TCCR에서 비교해서 그 결과 값을 출력하는 것.
- TIMSKn
일반 모드나 CTC 모드에서만 사용이 가능. 왜냐면 PWM 에서는 인터럽트가 필요 없기 때문
- TIFRn
인터럽트가 일어 났다 안 일어 났다를 다른 인터럽트를 막을 때 이 상태를 읽어서 막을 수도 있다. 주로 이것 까지 신경 쓰지 않아도 된다.
S/W
▶ 패킷 hexafile
패킷의 정보를 읽었지만 그 의미를 아직 모른다.
규약 대로 적혀진 내용의 hexafile 이다.
해석하기 위해 protocol 에 대해서 배워야 한다.
▶ protocol (규약)
- 알파넷에서 비롯 하여 만들어 진 것.
- 계층 구조 (단계) : 높고 낮음이 차이가 나는 것, Layer(층) 개념 이라고도 한다.(ex 포토샵 등에서도 볼 수 있다.)
- IP 에서도 분류의 최적화를 위해 계층화 되어 있다.
- 계층 구조 예시
▶ TCP/IP 4 Layer 와 OSI 7 Layer
- TCP/IP 4 Layer : 4개의 층으로 구성된 IP
- OSI 7 Layer : OSI에서 만든 7계층 layer
- TCP/IP 가 더 먼저 만들어 졌다.
- 똑같은 내용을 다르게 이야기 할 뿐이다.
- 보통은 4계층으로 이야기를 많이 한다.
- 7계층의 물리는 랜카드, 링크는 동작하는 s/w 적 방법.
▶ Mac Address
- Mac은 Machine의 약어
- 6byte의 고유 기계 번호
- 겹치게 생산 하지 않는다. 겹친다면 바이러스다.
- MAC은 운영체제가 setting 한다. (자신의 MAC과 랜선하고 연결된 것의 MAC)
- 각각 6바이트, 6바이트, 2바이트로 구성된다.
- 다음의 올 내용에 08 00 이 입력되어 나오면 그것은 뒤에 있는 것이 IP 라는 것을 의미한다.
▶ hexview Mac Address 정보 받기
현재 패킷의 정보를 그림으로 나타내 보면 아래와 같은 모양이다.
우리가 연결 되어 있는 네트워크가 ethernet 이기 때문에 우선 /usr/include/net 의 ethernet.h 를 참조 하여야 한다.
- 헤더의 구조체 이름이 ether_header 인데, 위 패킷의 모양처럼 header가 ether일 경우 사용되는 구조체 이다.
- 구조체의 첫번째는 목적지 mac 주소, 두번째는 보내는 곳 src mac 주소, 마지막은 다음에 올 것이 무엇인지 가르키는 것 이다.
- u_int8_t의 의미는 8bit 즉 char형을 뜻 한다.
- ETH_ALEH는 Mac address의 앞 부분으로 6byte 크기 이다.
- include 되어 있는 linux/if_either.h 에는 ETH_ALEN이나 다음의 옷 것이 0800이면 IP를 가르키는 것 등의 정의가 되어 있다.(아래 그림 참조)
- Source
Mac Address의 정보를 얻기 위해 헤더 파일에 정의 되어 있던 구조체의 자료형의 변수 stpEheader를 선언 하여 주고 건져 올려진 패킷의 주소가 들어 있는
ucpData를 넣어 준다.
그리고 밑의 주석 처리 되어 있는 for문과 printf 문을 이용한 부분은 hexaview에서 Mac address 정보만 따로 뽑아서 출력 해주기 위해 만들 었다.
이 부분은 아래와 같이 함수화 시켜서 Print_Ether 함수만 호출 하면 실행 되게끔 하였다.
이렇게 Mac address의 목적지 부분과 출발지 부분을 선출해 냈다. Mac address 구조의 마지막인 다음에 무엇이 올지 나타내는 마지막 2byte의 내용을 뽑아 내도록 한다.
그런데, 여기서 주의 할 점이 있다 !! 네트워크는 big indian 방식이고, 현재 사용 중인 intel cpu는 little indian 체제이다.
그래서 이것을 바꾸어 줄 함수가 필요 하게 된다.
그것을 우리는 ntohs 라는 함수를 사용 하도록 한다. 네트워크(n) to (->) host(h)에서 사용 할 수 있도록 바꿔 주는 함수라고 이해 하면 되겠다.
man page를 살펴 보면 아래와 같다.
이제 이것을 사용하여 아래와 같은 switch 문을 이용하여 나타 낸다. 경우의 수가 많기 때문에 switch case 문을 사용하였다.
그 종류는 /usr/include/linux의 if_ether.h 를 참고 하면 되겠다.
위 파일은 전문 소스 입니다.
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20150527 - 19번 - 안향진 - C#,C++ (6) | 2015.05.28 |
---|---|
20150526 - 18번 - 안해운 - C++ (6) | 2015.05.26 |
20150522 - 14번 - 박제혁 - IP 프로토콜 (1) | 2015.05.24 |
20150522 packet analyzer 소스코드 (1) | 2015.05.22 |
20150520_일일업무일지_14번_박서연 - 카운터/타이머, pcap, 도서관리프로그램 (5) | 2015.05.20 |
2015.05.20 Linux Hex_view Source (0) | 2015.05.20 |
연결리스트 소스 (0) | 2015.05.19 |
연결리스트 코드(재업) (0) | 2015.05.19 |