#AVR 컨트롤러
다음 시간에 16Bit를 활용한 타이머를 사용하여 코딩해 보자.
일반 모드와 CTC
PC PWM 의 대하여 공부하여 보자.
PWM은 Pulse Width Modulation의 약자로 펄스폭 변조라는 의미이다. 클릭의 주기는 유지하나 high와 low 구간을 조절하는 기능을 한다.
PC 는 Phase Correct의 약자이다.
TCCR0A-Phase Correct PWM 모드를 바꾼다.
TCCR0B-64분주 - 비율을 64번당 1번으로 세어준다.
while 문 내에 OCR0A 설정해준값을 100까지 센다음 어떠한 결과값이 나타나게 만들어주는것 밑의 동영상에서 나오듯 HIGH 부분의 폭을 설정해주는것.
이번에 만든 PC PWM 펄스폭변조를 ATMEGA2560으로 만들어본결과
#공장 내 네트워크
Void *, Hexaview 프로그램, vi 편집기의 기본 명령어
학습목표
- void *에 대하여 이해하고 void *의 캐스팅 문법에 대해 숙지한다.
- 헥사뷰 프로그램을 만들 수 있다.
- vi 편집기의 기본 명령어 기능을 익히고 간단한 프로그램을 작성하여 컴파일 할 수 있다.
void *는 포인터가 가리키는 형에 상관없이 대상을 지정할 수 있다. 다만 형을 맞춰주기 위해서 캐스팅을 사용해야 한다.
캐스팅 방법은 *((type *) X) 이다.
주소 값/헥사 값/아스키 값이 나오도록 프로그램을 작성해야 한다.
골격은 이런식으로 잡아준다.
완성된 코드는 다음과 같다.
<main.c>
#include <stdio.h>
#include "hexaview.h"
int main(void)
{
int iNum=100;
hexaview(&iNum, 160);
return 0;
}
<hexaview.c>
#include <stdio.h>#include "hexaview.h"
void hexaview(void * vP, unsigned int uiLen)
{
unsigned int uiCnt;
unsigned int uiLine;
printf("===============================================================================\n");
printf(" Address Hexa ASCII \n");
printf("-------------------------------------------------------------------------------\n");
for (uiLine = 0; uiLine <= uiLen; uiLine += 16)
{
printf(" %08X ", vP);
for(uiCnt=0; uiCnt<16; ++uiCnt)
{
printf("%02X ", *((unsigned char *)vP));
vP = (char *)vP + 1;
}
vP = (char *)vP - 16;
putchar(' ');
for(uiCnt=0; uiCnt<16; ++uiCnt)
{
if (32 > *((unsigned char *)vP))
{
putchar('.');
}
else if(127 < *((unsigned char *)vP))
{
putchar('.');
}
else
{
printf("%1c", *((unsigned char *)vP));
}
vP = (char *)vP + 1;
}
putchar('\n');
}
return;
}
<hexaview.h>
#ifndef __HEXAVIEW_H__
#define __HEXAVIEW_H__
/*** 함수 원형 선언 ***/
void hexaview(void *, unsigned int);
#endif //__HEXAVIEW_H__
산딸기 시간!
지난 시간에 vi 편집기로 작성하던 test.txt파일로 가보자.
<vi 편집기 명령어>
우선 20줄 정도의 무작위의 자료를 작성하고 나서 아래의 명령어들을 입력하여 학습해 보자.
<Command mode(esc키를 눌러 설정)>
dw = 한 단어 삭제
dd = 한 줄 삭제
/dd삭제할 때 해당 줄이 복사된 상태이기 때문에 dd를 누른 후에 p나 u를 누르면 지웠던 줄이 다시 살아난다.
yy = 한 줄 복사 //y=yanked
yw = 한 단어 복사
p = 붙여넣기 //p=past
shift + p = 복사한 내용 위로 붙혀 넣기
//d나 y에서 숫자를 누르고 방향키를 누를 때 숫자는 현재 있는 라인에서 추가로 삭제하거나 복사한다.
v = visual mode: 선택하는 구역을 보여준다.
ctrl + z = 다른 프로세서 실행
/ = 검색 모드
/로 검색한 문자가 1개 이상일 때,
- n = 다음 대상 선택 //n=next
- shift + n = 이전 대상 선택
shift + r or insert key = 겹쳐쓰기
shift + j = 커서가 있는 줄과 다음줄을 가져다가 붙이기
<Expanded Command Mode(:키를 눌러 설정)>
w_파일명 = 파일명으로 저장
<Insert Mode(i를 눌러 설정)>
a: 현재 위치 다음에 문자 삽입
i: 현재 위치에 문자 삽입
//gcc 4.x 버전에서는 메모리 주소가 보안이 되어 바뀐다.
// 컴파일시 main.c 와 -o main의 자리는 바꾸어도 컴파일에 지장이 없다.
컴파일 시 중간파일 생성을 위한 옵션 명령어,
--save-temps
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
2015-04-28 32번 천정호 (5) | 2015.04.29 |
---|---|
20150427-31번-차윤도 USART, 함수포인터 (13) | 2015.04.28 |
2015.04.24.(금)-30번-주재민 (7) | 2015.04.25 |
ODIY 한국과학창의재단_YouTube (3) | 2015.04.24 |
20150422-27번-임현수 CTCmode Compare Match Interrupt, 함수포인터, vi 연습 (7) | 2015.04.23 |
20150421-26번-임병열 LED제어 및 배열포인터와 삼바구축 (7) | 2015.04.21 |
20150417-24번-이량경 _ 포인터의 포인터 / 다중인터럽트 (9) | 2015.04.19 |
2015 04 16 목요일 23번 윤재희 인터럽트(Interrupt)와 전자 룰렛 & 포인터를 활용한 1/2차원 배열의 값과 주소 (10) | 2015.04.16 |