'Busan IT > 스마트 컨트롤러' 카테고리의 다른 글
시리얼 통신 UBRR register (0) | 2015.03.24 |
---|---|
직/병렬 통신과 USART (0) | 2015.03.23 |
LCD 기본 프로그래밍 (0) | 2015.03.19 |
변수 공유 및 보완을 위한 명령어/LCD datasheet를 토대로 한 ATmega 기초코딩 (0) | 2015.03.18 |
LCD 프로그래밍을 위한 기초 작업 (0) | 2015.03.17 |
시리얼 통신 UBRR register (0) | 2015.03.24 |
---|---|
직/병렬 통신과 USART (0) | 2015.03.23 |
LCD 기본 프로그래밍 (0) | 2015.03.19 |
변수 공유 및 보완을 위한 명령어/LCD datasheet를 토대로 한 ATmega 기초코딩 (0) | 2015.03.18 |
LCD 프로그래밍을 위한 기초 작업 (0) | 2015.03.17 |
발진기를 활용한 디지털 시계(카운터의 응용)
학습목표 - 발진기를 사용하여 카운터와 역카운터를 만들 수 있다.
100에서 0으로 내려가는 역카운터
60에서 0으로 내려가는 역카운터
규칙을 살펴보면 7483회로는 입력된 수의 +1을 결과 값으로 보내주는 역할을 한다. 때문에 우리가 역카운트를 원하는 수의 -1인 값을 리셋 조건으로 넣어주면 원하는 수부터 역카운터가 된다.
10의 자리 역카운터는 일의 자리가 리셋이 될 때 한 숫자씩 내려가도록 설정해 주면 된다.
74HC14의 데이터시트를 찾아보고 이것을 발전기로 활용하여 역카운터를 만들어 보자!
1. 74HC14의 데이터시트를 찾아보고 어떻게 발진기를 만들지 고민해 본다.
2. 발진기를 만들고 나면 Clock자리에 발진기를 대체시켜 주자.
74HC14의 기능은 Input에 반대되는 Output을 출력한다는 것이다.
우선 프로테우스를 활용하여 제대로 된 출력 값이 나오는지 확인해 보자.
반가산기와 가산기를 작성하는 연습을 지속적으로 할 것이다.
시험은 가산기와 감산기를 만드는 실습이다. 회로도는 OrCAD작성하여 제출한다.
가산기 실습 대비 및 회로도 연습 (0) | 2015.03.24 |
---|---|
시험공부 (0) | 2015.03.23 |
T 플립플롭 & 역카운터 만들기 (0) | 2015.03.19 |
JK flip-flop을 활용한 카운터 (0) | 2015.03.18 |
J-K Flip Flop을 활용한 카운터 만들기 (0) | 2015.03.17 |
LCD 기본 프로그래밍
학습목표 - LCD 데이터 시트를 보고 기본 세팅을 프로그래밍 할 수 있다.
E가 0일 상태에서는 다른 값이 무엇이 들어간다고 해도 아무런 실행이 되지 않기 때문에 DC(DON'T CARE) 상태라고 부른다.
Return Home 명령어를 수행하면 커서의 위치는 왼쪽 최상단으로 이동하게 된다.
AVR을 통해 명령어 전송할 때 다음과 같은 내용을 선택해야 한다.
1. Instruction(L)/Data register(H) 선택
2. Read(H)/Write(L) 선택
3. Bus를 통해 명령어 선택
4. Enable(H)을 통해 활성화 선택
//DB 명령어에서 가장 앞에 1이 무엇이냐에 따라 명령어가 결정된다.
Entry Mode에서 I(H)는 increase방식으로 글자를 쓰면 다음 글자가 우측에 씌여 진다.
D(L)는 decrease방식은 글자의 좌측에 다음 글자가 씌여 진다.
Display ON/OFF Control3에서 D는 set display로써 1(H)을 넣어야 화면에 글자가 출력된다. 이 때 DB0에 1(H)를 입력하면 커서가 깜빡거린다.
Cursor or Display Shift는 커서를 화면에 표시할지 선택하는 명령어이다.
// A = U 0100 L 0001 -> 65 ASCII code 와 일치한다!
FND500(7 segment)를 획득하였습니다.
직/병렬 통신과 USART (0) | 2015.03.23 |
---|---|
1 (0) | 2015.03.20 |
변수 공유 및 보완을 위한 명령어/LCD datasheet를 토대로 한 ATmega 기초코딩 (0) | 2015.03.18 |
LCD 프로그래밍을 위한 기초 작업 (0) | 2015.03.17 |
포인터의 이해&LCD Datasheet (1) | 2015.03.16 |
T 플립플롭, 역카운터 만들기
지난 시간에 만들었던 역카운터를 계속 만들어 보자.
T 플립 플롭은 JK 플립플롭의 일종이다. 차이점은 J와 K를 하나로 묶어준 것이다.
비동기 입력을 사용하면 우리가 사용한 AND회로가 필요 없어진다.
//위에 Active low 마크를 잘 봐두자!
PR이 0인 경우에 Q는 무조건 1, CLR이 0인 경우 Q바는 무조건 1
비동기식 카운터에서 주파수 쪽으로 넘어가도록 한다.
시험공부 (0) | 2015.03.23 |
---|---|
발진기를 활용한 디지털 시계(카운터의 응용) (0) | 2015.03.20 |
JK flip-flop을 활용한 카운터 (0) | 2015.03.18 |
J-K Flip Flop을 활용한 카운터 만들기 (0) | 2015.03.17 |
레지스터 회로의 기초(D&JK Flip-Flop을 활용한 기억회로) (0) | 2015.03.16 |
스마트 컨트롤러 - 변수 공유 및 보완을 위한 명령어/LCD datasheet를 토대로 한 ATmega 기초코딩
학습목표
명령어 static/extern를 이해할 수 있다.
LCD datasheet의 timetable을 보고 LCD 작동을 위한 코드를 작성할 수 있다.
extern과 static의 활용
전역변수에 static을 앞에 붙이면 외부파일에서 해당 변수를 사용할 수 없게 되고 전역변수에 extern을 사용하면 해당 함수를 외부파일에서 사용할 수 있게 된다.
static은 보완 또는 공유방지 목적으로 사용된다.
static과 extern이 동시에 사용되는 경우에는 static이 우선적으로 작용한다.
= static > extern
해당 신호를 바탕으로 프로그램을 작성해야 한다.
하나씩 분석해 보자!
명령어를 실행시키기 위해서는 E를 실행시켜야 한다.
RS와 RW를 설정해 놓고 E를 활성화 해야 한다. 구체적인 데이터는 데이터버스를 활용하여 알아낼 수 있다.
여기서 enable은 trigger로써 데이터 전송에 결정적인 역할을 한다.
장치에 대한 프로그램을 driver라고 한다.
우선 초기화를 해보자.
함수의 prototype은 헤더파일의 끝에 넣도록 하자. //이유는 다음에 설명
금일(3/18)까지 작성한 코드는 다음과 같다.
1 (0) | 2015.03.20 |
---|---|
LCD 기본 프로그래밍 (0) | 2015.03.19 |
LCD 프로그래밍을 위한 기초 작업 (0) | 2015.03.17 |
포인터의 이해&LCD Datasheet (1) | 2015.03.16 |
1차원 배열의 입력과 출력 (0) | 2015.03.13 |
디저털 제어 - JK flip-flop을 활용한 카운터
학습목표
JK flip-flop을 활용하여 카운터로 시계를 만들 수 있다.
JK flip-flop을 활용하여 역카운터를 만들 수 있다.
<주의할 점>
진수의 표현
- 각 자리 마라 어느 숫자까지 표시가 되는지 확인하고 해당 자리에 도달하면 리셋을 입력해 주어야 한다.
발진기를 활용한 디지털 시계(카운터의 응용) (0) | 2015.03.20 |
---|---|
T 플립플롭 & 역카운터 만들기 (0) | 2015.03.19 |
J-K Flip Flop을 활용한 카운터 만들기 (0) | 2015.03.17 |
레지스터 회로의 기초(D&JK Flip-Flop을 활용한 기억회로) (0) | 2015.03.16 |
Flip Flop회로(latch 회로, RS, D Flip Flop) (0) | 2015.03.13 |
LCD 프로그래밍을 위한 기초 작업
학습목표
- Makefile을 수정하여 c 파일을 추가적으로 컴파일 할 수 있다.
- ATmega I/O 레지스터 on/off를 위한 컴파일을 할 수 있다.
- 명령어 static의 기능을 알 수 있다.
ATmega에서 c파일을 추가 하려고 할 때,
makefile에서 SRC를 검색해서 찾은 후 한 칸 띄우고 옆에 추가하고 싶은 c파일을 적어준다.
tab키를 사용하여 #define과 정의항을 띄워준다.
//extern "c"는 C++에서 사용하는 언어이다.
static 변수는..
1. 지역 변수를 전역 변수화
2. 변수의 보안옵션(전역 변수에 static 선언 시 -> 외부 파일에서 접근 불가) //링크를 걸어서 컴파일 할 때 전역변수의 이름이 겹칠 수 있다. 이 때 static선언을 하면 외부 파일에서는 해당하는 변수를 볼 수 없다.
3. 함수의 보안옵션
필요한 형태로 결과 값을 도출하기 위해서는 ##을 활용하면 인자 사이에 원하는 특정 값을 입력할 수 있다.
ex) Add(int A, B) A ## 더하기 ## B
-> A 더하기 B
LCD 기본 프로그래밍 (0) | 2015.03.19 |
---|---|
변수 공유 및 보완을 위한 명령어/LCD datasheet를 토대로 한 ATmega 기초코딩 (0) | 2015.03.18 |
포인터의 이해&LCD Datasheet (1) | 2015.03.16 |
1차원 배열의 입력과 출력 (0) | 2015.03.13 |
메모리(RAM)의 구조/지역변수&전역변수/AVR makefile (0) | 2015.03.11 |
J-K Flip Flop을 활용한 카운터 만들기
학습목표
J-K Flip Flop을 사용하여 프로테우스에서 카운터를 만들 수 있다.
J는 set, K는 reset
R S flip flop에서 모두 1인 경우 부정인 상태를 J K가 보수인 상태로 바꾸어 준다.
JK Flip Flop의 특징 중 하나는 둘 다 1일 때 toggle(신호에 입력에 따라 반전)이 된다. 이 기능을 활용하여 counter을 만들어 볼 것이다.
프로테우스를 사용하여 counter만들어 보기!
T 플립플롭 & 역카운터 만들기 (0) | 2015.03.19 |
---|---|
JK flip-flop을 활용한 카운터 (0) | 2015.03.18 |
레지스터 회로의 기초(D&JK Flip-Flop을 활용한 기억회로) (0) | 2015.03.16 |
Flip Flop회로(latch 회로, RS, D Flip Flop) (0) | 2015.03.13 |
AVR makefile 소스의 이해와 1차원 배열 (0) | 2015.03.12 |
스마트 컨트롤러 - 포인터의 이해&LCD Datasheet
학습목표
포인터 변수의 활용과 문법에 대해 안다.
포인터 변수 대입 시 형일치를 판별할 수 있다.
LCD데이터 시트에서 특징과 핀번호를 알 수 있다.
포인터란 주소 값을 저장하기 위해 선언되는 변수를 포인터 변수라고 한다.
포인터를 선언할 때 변수형은 포인터(*)로 인해 결정되지만 해당 포인터가 가리키는 형을 따라서 변수형(ex. char, int...)
주소를 가리키는 앰퍼센트(&)는 단항 연산자이다. 때문에 앰퍼센트 앞에 항이 와 버리면 비트연산자로써 논리연산을 수행하게 된다.
반드시 포인터가 같은 형태를 가리키라는 법칙은 없다(일반적으로는 맞춰 주어야 한다.)
포인터를 사용하여 메모리를 해석하는 방법을 달리할 수 있다.
int형의 자료를 넣어 놨을지라도 메모리에 저장되어 있는 값을 포인터를 활용하여 float으로 해석하면 실수 형으로 값을 해석하여 표현하게 된다.
포인터를 활용하여 입력된 값들을 해석해보자!
포인터의 형 선언 시 아스터리스크(*)를 변수형과 변수명 사이 어느 곳에든 위치 시켜도 되지만 일관성은 유지할 것을 추천한다.
포인터의 변수형이 다르더라도 컴파일러는 오류를 내지 않고 경고를 표시만 나타내주며 컴파일을 해준다. 두 가지 변수가 주소를 취급하는 경우에는 오류를 내지 않는다.
예를 들어 아래의 코딩은 오류를 내지 않는다.
int num1 = s;
double *pnum1 = &num1;
// C++은 포인터 형이 다를 경우 컴파일 시켜주지 않는다.
포인터의 기능 및 처리절차를 이해해야 포인터와 관련하여 컴파일 시 오류가 나더라도 처리할 수 있다.
p/280 - 포인터 연산)
포인터 형은 메모리 공간을 참조하는 기준이 된다.
예를 들어,
int num;
int * pNum;
pNum = #
에서 *에 선언된 int(4byte)는 해당 주소를 가진 변수로 가서 int만큼(4byte)의 데이터를 표시하라는 뜻이다.
포인터의 형이 존재하는 이유는 포인터 기반의 메모리 접근기준을 마련하기 위해서이다.
LCD 데이터 시트
- 화살표 표시된 것들은 BUS
- VDD = VCC, VSS = GND
- VR은 가변저항
- LEDA(LED VCC), LEDK(LED GND)
핀설명
1. GND
2. VCC
3. 0V
4. 5V - data register, 0V - instruction register (프로그래밍을 해야 하는 핀)
5. 5V - Read, 0V - write (프로그래밍을 해야 하는 핀)
//LCM - LCD Module
6. LCD module on/off (프로그래밍을 해야 하는 핀)
7 - 14. BUS
15 - 16. LED 전원
전원부(1,2) BUS 그리고 LED 전원에만 선을 연결해 보자!
아트메가 연결 핀 약속.
PC0 - PA7 -> BUS 7 - 14
PG0 -> RS(4)
PG1 -> R/W(5)
PG2 -> E(6)
변수 공유 및 보완을 위한 명령어/LCD datasheet를 토대로 한 ATmega 기초코딩 (0) | 2015.03.18 |
---|---|
LCD 프로그래밍을 위한 기초 작업 (0) | 2015.03.17 |
1차원 배열의 입력과 출력 (0) | 2015.03.13 |
메모리(RAM)의 구조/지역변수&전역변수/AVR makefile (0) | 2015.03.11 |
Return의 기능/전역 변수 & 지역 변수/메모리의 영역 구분 (0) | 2015.03.10 |
디지털 제어 - 레지스터 회로의 기초(D&JK Flip-Flop을 활용한 기억회로)
학습목표
D Flip Flop 회로도를 이해하고 브레드보드에 만들 수 있다.
JK Flip Flop 회로도를 이해하고 브레드보드에 만들 수 있다.
7474를 활용하여 D Flip-Flop 회로를 만들어보자.
1번(1RD)를 눌렀을 때 5번(1Q)에 high가 인가 되었다.
4번(1SD)를 눌렀을 때 6번(1Q)에 high가 인가 되었다.
* 2번에 값을 입력하였을 때는 아무런 변화도 없었다.
플로팅(floating)문제라고 생각하고 스위치가 있는 자리에 풀다운을 해주었다. -> 효과 없음
다이오드에까지 풀다운 해 준 결과 원하는 결과 값이 나왔다!
* 모든 +/-에 전압을 인가했기 때문에 자기장이 발생하여 모든 입력 값에 전압이 들어간 것 아닐까?
//J와 K는 카드놀이 Jack과 King에서 왔다.
J는 S(set), K는 R(reset)에 대응된다.
프로테우스로 J-K Flip-Flop을 만들어보자!
*MC74HC73과 함께 J-K Flip-Flop
J(14번)와 K(3번)에 high를 인가하였을 때 Q와 Q바는 보수관계를 보인다.(high일 때 low, low 일 때 high)
JK flip-flop을 활용한 카운터 (0) | 2015.03.18 |
---|---|
J-K Flip Flop을 활용한 카운터 만들기 (0) | 2015.03.17 |
Flip Flop회로(latch 회로, RS, D Flip Flop) (0) | 2015.03.13 |
AVR makefile 소스의 이해와 1차원 배열 (0) | 2015.03.12 |
기억회로(NOR/NAND latch회로) (0) | 2015.03.12 |