1교시
논리 회로 - 디지털 신호의 대표적인 예
AND - AND는 X(곱하기)라고 생각할 것 둘다 만족을 해야한다는 말
A와 B 둘다 같은 값(예로들어서 1이면) = 1
OR - OR은 +라고 생각할 것
논리회로를 그릴 때 왼쪽은 입력 오른쪽은 출력이다.
AND
A | B | Y |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
OR
A | B | Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
위 그림과 표를 나타낸 깔끔한 그림
AND 일 경우 데이터시트 74 ?? 08을 검색하여 사용하며 OR 일 경우 데이터시트 74 32를 사용할 것
MC74HC32AN칩을 이용해서 LED를 켠 모습
LED는 출력단위가 5V 그대로하면 LED가 나갈수도 있음으로 저항하나를 연결해줘야 한다.
1,2번핀이 입력 3번핀이 출력이다.
OR이라 1,2번중 입력값 하나만 1이되면 출력값이 1이기 때문에 LED가 작동이 된다.
위 사진과 밑 사진에 있는 사진에서는 잘못 꽂았지만 칩은 가운데가 갈리는 곳에 꽂아준다.
그리고 어댑터회로에 굳이 +,-에 맞춰서 연결해줄 필요는 없고 브레드보드 +,-에 연결해서 출력하면 된다.
브레드보드에 가로 5개는 연결되어있는 라인이고 +,-는 세로로 연결되어 있다.
출력선은 LED -라인 선과 맞물리게 연결해서 마무리 한다.
SN74LS08N칩을 이용해서 LED를 켠 모습
AND라 1,2번 입력값을 1로 만들어야 출력값이 1이 출력이 되기 때문에 LED에 불이 들어온다.
AND를 이용하여 LED를 킨 회로도와 OR을 이용하여 LED를 킨 회로도
이 사진의 위의 회로도는 Pull-down과 AND를 접목시켜 만든 회로도로써,LED를 컨트롤 할 수 있다.
밑의 회로도는 반대로 Pull-up과 AND를 접목시켜 만든 회로도로써, LED를 컨트롤 할 수 있다.
2교시
임베디드 시스템에서 메모리는 아주 중요한 개념이다.
메모리는 원래 64Kbyte이지만 메모리의 한 덩어리를 2byte로 보기 때문에 128Kbyte 이다.
메모리 맵 이미지. 정식명칭은 메모리 맵이지만 레지스터 메모리라고도 한다.
각 회사마다 모든 데이터시트(메모리)의 모양은 다 같지만은 않다.
이론적으로는 F4개까지 가능하기 가능한데
내부적으로는 4Kbyte가 가능하고 외부 메모리는 60Kbyte까지 가능하다.(토탈 64Kbyte)
0x1100 = 0x22;
A = 0x1100; 을 컴파일할 경우 오류 없이 작동되는데 0x22값이 없기 때문에 쓰레기값이 출력된다.
.hex에 짜놓은 코드 파일이 128Kbyte를 넘을 경우 실행이 안된다.(128Kbyte가 한계이며 임베디드의 한계)
아트메가형 기계어로 바뀐것이 .hex파일이다. c언어를 기계어로 바꾼것과는 다른 언어이다.
ALU는 메모리가 아닌 레지스터 값을 계산한다.
Flash에 우리가 입력한 코드가 있고 SRAM으로 계산한다. 이 두개는 버스로 연결되어 있다. 이러한 구조를 하바드 구조라고 한다.
폰 노이만 구조는 데이터 메모리와 프로그램 메모리가 구분되어 있지 않고 하나의 버스를 가지고 있는 구조를 말한다. 하바드 구조는 두 개 이상의 버스를 가지고 있는 구조를 뜻한다.
하버드 구조의 컴퓨터에서는 명령을 메모리로부터 읽는 것과 데이터를 메모리로부터 읽는 것을 동시에 할 수 있다. 하버드 구조의 컴퓨터는 명령의 처리를 끝내자마자 다음의 명령을 읽어들일 수 있기 때문에 보다 더 빠른 속도를 낼 수 있다고 말할 수 있다. 그렇지만 이러한 처리 속도를 높이려면 보다 많은 전기 회로가 필요하다.
하바드 구조가 성능은 더 뛰어나지만 비용문제와 복잡도가 많아져 폰 노이만을 쓰기도 한다.
오토바이와 자전거를 비교해보면 알기 쉽다. 오토바이가 속도가 빠른 반면 손으로만 이동시키기 번거롭지만 자전거는 속도가 느린 반면 손으로 움직이기 쉽다. 가격면에서도 오토바이가 비싸다.
먼저 임의로 iNum1,2,3을 설정하여 주소값을 구한다.
5가지 영역표 (PC에서 짤 때)
Code(함수, 상수) |
Data |
BSS |
Heap (운영체제가 있어야 만들어진다.) |
Stack (변수가 저장되는 영역/지역 변수) |
펌웨어는 4가지, 펌웨어를 소프트웨어를 통해 짤때는 5가지 방법이 있다.
지역 변수는 자기들끼리 모여있고(iNum1,2,3) 함수들도 자기들끼리 모여사는걸(main, printf, scanf) 알 수 있다.
FF이전 값은 CPU 밑은 RAM이다. 예) I/O Register에 입력시 CPU에 기록된다.
8비트 CPU라서 Register 하나가 1byte이다.(인텔은 4byte이다.)
괄호친게 노말모드이고 괄호안친것이 호환모드이다. Name부분은 레지스터 공식명칭이다.
Data Direction Register (DDR)
5볼트나 0볼트의 데이터를 CPU의 방향을 받는쪽으로 할것인가 내보내는 쪽으로 할것인가
DDRE의 경우에는 E포트를 바꾸겠다는 뜻
PORTA를 관할하는 곳 DDR, PIN, PORT
ON/OFF부분의 스위치 부분을 DDR이라고 부른다. (왼쪽 VCC에서 오른쪽으로 흐르는 전압을 관할하는곳을 DDR이라 함)
왼쪽 VCC와 그라운드를 연결하는 스위치부분을 관할하는 곳을 PORT라고 한다.
왼쪽 VCC에서 전압이 흘러갈 경우 오른쪽으로 흐르기 때문에 오른쪽 VCC의 5V와 맞물린다. 서로 밀어내기 때문에 전압은 그대로 멈추고 LED는 꺼진다.(작동하지 않는다.)
왼쪽 그라운드에서 오른쪽으로 흘려보낼 경우 0V가 흐르기 때문에 오른쪽 VCC의 5V와 맞물리지 않는다. 그래서 LED는 켜진다.
DDRA에서 7핀 중에 0과 1이라는 숫자가 있는데 0은 입력을 뜻하고 1은 출력을 뜻한다.
$는 0x를 뜻하고 16진수를 표현할때 붙인다.(ATMEL사 기준)
0x3A = 0x01;
첫번째로 0x3A를 주소로 바꿔준다. 그리고 0x3A 찾아가면 용량이 1byte이기 때문에 char를 사용한다. *((unsigned char*)0x3A)=0x01;로 바꿔준다 (unsigned를 입력하는 이유는 양수가 2번 들어가선 안되기 때문에) 앞의 코드로만 입력하면 그 값이 언제 사라질지 모르기 때문에 volatile을 사용해줘야 한다.
즉, *((volatile unsigned char*)0x3A)=0x01;이 되어야 완성된다.
하지만 위와 같이 입력하면 빈번해지고 길어지기 때문에 단축코드로 바꿔준다. 그래서 전처리언어인 #define을 사용해서 #define DDRA (*((volatile unsigned char*)0x3A))로 입력한다. ()는 최우선 언어이기 때문에 괄호로 한번 더 싸준다.
그 후에 DDRA = 0x01;로 변수선언해주면 된다.
header파일 만들기
먼저 우클릭->새로만들기에서 Text file을 만들어 smart.h라는 이름으로 변경하고
#define DDRA (*((volatile unsigned char *)0x3A))
#define PORTA (*((volatile unsigned char *)0x3B))
소스를 입력한 후 닫는다.
그리고 main.c에 "smart.h"를 입력하여 smart.h 헤더파일을 컴파일 할 수 있도록 설정한다.
#include를 두번해서 써보면 워닝이나 에러가 뜬다. stdio.h는 1000번을해도 에러가 뜨지않는다. smart.h도 그렇게 되게끔 우리가 만들어야 한다.
조건부 컴파일 p.566
조건부는 전처리 언어#이 붙는다. 그래서 #if로 써야하고 #if 는 #endif와 한 셋트로 반드시 따라와야 한다. p.567을 참고하면 2번 라인에 1이 참이기에 11번줄은 성립된다 하지만 0이 될시에 사라진다.
#define ADD와 MIN에 1값을 넣어 참을 만들어 출력하면 조건부 값이 잘 출력되는걸 알 수 있다.
#define ADD값에 0을 넣었을 시에 정수를 입력해도 뜨지 않는다.
#define ADD값에 1을주고 MIN값에 0을 주면 ADD값만 출력되는것을 알 수 있다.
즉, 1값을 주면 참이되어 제대로 출력이 되고 0을 주면 거짓이 되어 제대로 출력되지 않는 것을 알 수 있다.
조건부도 if여서 else도 활용할 수 있다.
p. 569 를 참조하면 참일경우 7번라인이 출력되고 9번라인은 사라지게 된다.
조건부 #else if 구분은 #elif로 쓴다.
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
2015.03.10(화)-30번-주재민 (6) | 2015.03.11 |
---|---|
20150309-29번-주보건-논리회로 반가산기 전가산기 함수의 사용과 분할컴파일 source insight 사용 (12) | 2015.03.09 |
H/W 수업 관련 자료입니다. (1) | 2015.03.09 |
20150306-28번-조진석-브레드보드 논리회로 및 데이터시트와 매크로 함수 (10) | 2015.03.06 |
소스 (0) | 2015.03.05 |
ATmega128A 사진입니다;; (6) | 2015.03.05 |
20150304-27번-임현수-회로기초 시험, ATmega128A LED켜기 실습 (10) | 2015.03.04 |
20150303-25번-이량경-브레드보드, 브레드보드 전원 설계/데이터시트 확인 / AVR 작업환경 설정. (9) | 2015.03.04 |