스마트 컨트롤러 - 문자와 문자열 관련 함수

 

학습목표

 

getcharputchar의 함수 원형에 대해 안다.

scanfprintf의 함수 원형을 이해한다.

ASCII code를 숫자로, 숫자를 ASCII코드로 바꿀 수 있다.

 

getcharputchar의 함수 원형을 살펴 보았다.

 

우리가 자주 쓰는 printf의 원형인 fprint 또한 함수 형식으로 만들 수 있지만 가변인자가 사용 되기 때문에 stack구조에 대한 이해가 필요하다.

 

가변인자를 지금 언급하기는 기초지식 부족하여 설명이 어렵지만 기본적으로 가변인자를 만들기 위해 가장 우측에는 가변 인자를 나타내는 ‘...’넣어주어야 하고 적어도 좌측에 1개 이상의 인자가 있어야 한다.

 

putchargetchar의 반환형은 int형이지만 함수를 사용하고 나서도 반환 값은 따로 출력되지 않는다.

 

getchar는 한글자만을 입력 받고 ASCII코드로 저장한다.

 

//EOF = End of File

p/421 21-3. 문자열 단위 입출력 함수

 

우리가 지금까지 printf에서 출력하던 문자열은 상수들이 나열되고 끝이 ‘null'이 입력된 것을 문자열로 출력한 것이다. 따라서 “ ”안에 적힌 값은 const char *이다.

printfscanf가 없이 ASCII codecpu가 인지할 수 있는 숫자로 변경하거나 그 반대의 경우(숫자를 ASCII code)로 입력하기 위해 변환하는 작업을 해 보겠다!



 

버퍼는 자원의 효율적인 관리를 위해 사용한다. 버퍼는 데이터가 정해진 용량에 차 있을 때 해당 정보를 CPU에 보내는데 해당 데이터가 다 차지 않아도 데이터를 보내는 명령어가 엔터이다.

 

윈도우 DOS체제에서는 개행 문자(\n)을 쓰지 않아도 입력 값이 출력이 되지만 다른 운영체제에서는 개행 문자 없이는 데이터가 출력되지 않으니 개행 문자를 넣는 습관을 들여야 한다.

 

//fflush는 파일 내부에 있는 버퍼를 비우는 명령어이다.

//ex) fflush(stdin); - 키보드 버퍼에 있는 데이터를 지워라.

 

출력버퍼가 비워진다는 것은 출력버퍼에 저장된 데이터가 버퍼를 떠나서 목적지로 이동됨을 뜻한다.

 

입력버퍼가 비워진다는 것은 데이터의 소멸을 의미한다.

 


반응형
Posted by newind2000
Busan IT/디지털 제어2015. 3. 31. 11:56

디지털 제어 - 4/1 시험대비 공부

 

<학습목표> 

- 반가산기, 전가산기를 OrCAD로 만들 수 있다.

- 반가산기, 전가산기의 회로를 만들 수 있다.


|(--^--)/

반응형
Posted by newind2000

LCD에 이름 띄우기 도움말, 그림 파일에 대한 기본 이해, 스트림과 데이터의 이동

 

학습목표

 

- LCD 메모리에 특수문자를 만들어 본인의 이름을 집어넣기 위한 작업으로 excel파일을 활용하여 해당 dot의 값을 도출해낼 수 있다.

- 그림 파일에 대한 기초적인 구조와 용량에 대해 알 수 있다.

- Stream이 무엇인지 이해하고, API를 사용하여 함수의 원형을 어떻게 사용하는지 알 수 있다.

 





동영상은 1초에 24 frame이다. 2.25MB 24개가 있어야 동영상이 만들어진다. 소리 파일이 없이 그림만으로도 1분에 3.24GB가 된다. 압축기술 없이는 우리는 야구 동영상을 보기 힘들어진다.

 

C언어

 

p/501 Ch. 24 파일 입출력

 

스트림(stream) - 정해지지 않은 데이터를 연속적으로 전송하는 것. 정해진 양의 파일을 받는 것은 스트림이 아니다. ex) 컴퓨터 입장에서의 사용자의 문자입력.

 

//스트림을 일종의 데이터가 넘나드는 다리라고 생각하면 이해가 쉽다.

 

스트림의 경로를 열고(OPEN) 닫는(CLOSE) 명령어가 있다.

 

운영체제에서 PC에 전원이 인가될 때 자동으로 자주 사용하는 입출력을 열어주는데 이 때 자동으로 열어주는 입출력을 표준입출력(Standard I/O)이라고 한다.

 

fprintfprintf를 수행하면 실제로 출력 명령을 실행하는 명령어이다.

 

printfscanf앞에 f를 붙이게 되면 해당 명령어의 형식이 무엇인지 설정해주어야 한다.


 

프로그래머가 불러서 사용하는 함수를 API(Application Programming Interface)라고 한다.

하드웨어의 구조의 이해 없이 해당 장치를 조작할 수 있는 명령어들을 API라고 한다.

 



CPU 입장에서는 뭐든 장치는 file로 인식한다. 해당 장치를 사용하려면 그에 대한 정보를 가지고 있어야 하고 그 해당 장치를 조작해야 하기 때문이다. 프로그래머는 API를 통해 함수의 원형을 실행시켜 원하는 바대로 파일이나 장치를 조작한다.

 



 

 

반응형
Posted by newind2000
Busan IT/디지털 제어2015. 3. 30. 13:20

디지털 제어 - PIC16F917 코딩(quiz buzzer)

 

학습목표 - 부저(buzzer) 시스템 코딩을 할 수 있다.

 

퀴즈쇼처럼 부저(buzzer) 기능처럼 한 명이 버튼을 눌렀을 때 켜지고 한 명의 부저가 켜 져있을 때는 다른 사람이 눌러도 동작하지 않고 리셋을 눌렀을 때 다시 불이 초기화되는 코딩을 해보자!

 






반응형

'Busan IT > 디지털 제어' 카테고리의 다른 글

시험  (0) 2015.04.01
4/1 시험대비 공부  (0) 2015.03.31
PIC16F917를 활용한 코딩(카운트, 부저)  (0) 2015.03.27
PIC16F917을 활용한 LED 불 켜기  (0) 2015.03.25
가산기 실습 대비 및 회로도 연습  (0) 2015.03.24
Posted by newind2000


20150327.zip

스마트 컨트롤러 - ATmega128a를 사용한 LCD 데이터 전송

 

학습목표 - ATmega128a를 활용한 시리얼 통신으로 입력한 값을 그대로 LCD창에 전송할 수 있다.

 

ATmega128a를 활용한 시리얼 통신

 

발신에 이어 송신도 설정해 보자.

 

수신이 완료될 때까지 while문을 반복시켜 register가 비어 있을 때 shift register를 활용하여 데이터를 전송해 준다.

 

//polling의 힘

 

 

LCD에 나타나는 코드의 윗줄과 아랫줄의 차이가 40byte이다. LCD의 윗줄 아랫줄을 손실없이 사용하기 위해서 커서의 위치를 지정해 주어야 한다.

 

SET CGRAM Address를 활용하여 남은 메모리 영역에 한글을 집어 넣어 보자. 폰트를 디자인하여 메모리에 입력한 뒤 LCD에 출력시키는 것까지.

//인터넷 검색을 활용하자.

 

다음주에는 C를 집중적으로 공부한다.


코드는 첨부한다!

반응형
Posted by newind2000
Busan IT/디지털 제어2015. 3. 27. 13:45

디지털 제어 - PIC16F917를 활용한 코딩(카운트, 부저)

 

학습목표 - PIC16917을 활용한 다양한 코딩을 할 수 있다.

 

스위치를 넣었다가 떼면 카운터가 실행되도록 코딩을 해보자.

 

버튼을 누른 시간에 따라 동작이 다르게 되게 하는 코딩을 하려 했으나, 아직 타이머에 대해 배우지 않아 타이머를 배운 후 해당 코드를 작성하도록 하겠다!

 

퀴즈쇼에 나오는 부저 시스템에 대한 코딩을 해보자!

 

- PORT A를 입력으로 사용한다.

PORT A의 핀은 총 3개를 사용한다.

 

- PORT B를 출력으로 사용한다.

- 입력 pull up 저항을 사용한다.

- 출력 Sync type을 설계한다.

- 출력 값 하나에만 불이 들어오게 하고 불이 들어오고 난 후에는 다른 입력 값은 무시한다.

- 리셋하는 입력 값도 만든다.



 

 

반응형

'Busan IT > 디지털 제어' 카테고리의 다른 글

4/1 시험대비 공부  (0) 2015.03.31
PIC16F917를 활용한 코딩(quiz buzzer)  (0) 2015.03.30
PIC16F917을 활용한 LED 불 켜기  (0) 2015.03.25
가산기 실습 대비 및 회로도 연습  (0) 2015.03.24
시험공부  (0) 2015.03.23
Posted by newind2000

스마트 컨트롤러 - ATmega128a를 활용한 데이터 송신

 

학습목표 - ATmega128a를 활용하여 데이터를 PC로 송신할 수 있다.

 

void USART0_TX( unsigned char ucData )

{

// Wait for empty transmit buffer

while ( !( UCSR0A & (1<<UDRE)) );

// Put data into buffer, sends the data

UDRE= ucData;

}

 

Datasheet에 나와 있는 다음의 소스코드를 분석해 보자.

 

UDREn은 버퍼가 비어 있을 때 1이고, 버퍼가 차 있을 때 0이다.

 

위의 while문 안의 조건 UCSR0A0B00010011이고 1<<UDRE(5)0B00010000이다.

즉 버터가 차 있을 때 0을 전송하게 되면 위의 연산의 결과 값은 0이 된다. 여기에 '!'부정이 더해져 1이 되면 루프가 진행된다. 때문에 shift register에 데이터가 전송되지 않는다.

 

//Polling방식: CPU가 한 가지 명령어를 지속적으로 수행하여 다른 일은 할 수 없는 방식

LCD.c

LCD.h

Main.c

UART.c

 

 

UART.h

 

짜잔 결과값!





반응형
Posted by newind2000

디지털 제어 - PIC16F917 카운터 업&다운 코딩

 

학습목표 - PIC16F917의 데이터시트를 보고 카운트 업, 카운트 다운을 출력하는 코딩을 할 수 있다.

 

PIC16F917의 데이터시트 중 Memory 부분을 살펴보자.

 




위의 메모리 주소 값을 참조하여 A0를 누르는 동안 count up, A1을 누르는 동안 count down 사용하여 코딩해보자!




 

LM016L LCD를 활용하여 LCD에 숫자를 출력해 보자. To be continue...



반응형
Posted by newind2000

스마트 컨트롤러 - ATmega를 이용한 시리얼 통신 설정

 

<학습목표>

 

UCSR 레지스터 값을 ATmega128A의 데이터시트를 보고 설정할 수 있다.

ATmega를 이용한 시리얼 통신을 위한 초기화 함수를 만들 수 있다.

 

지난 시간에 봤던 UCSR 레지스터의 값을 설정해 주기 위한 코딩을 한다.

 

우선 Smart.h 파일에 define 해준다.

USCR 레지스터에 원하는 설정 값을 입력해준다.

 

<UCSRnA register>

 

7th bit - RX: 수신이 완료되면(자료를 다 받아들이면) 0 -> -

6th bit - TX: 전송이 완료되면 1 -> -

5th bit - EMPTY: shift register에 데이터가 없는 경우(전에 데이터를 다 보낸 경우) -> -

 

//5th bit에서 자료가 남아 있는 상태에서 TX로부터 자료를 받게 되면 덮어쓰게 되어 버리기 //때문에 shift register가 비어있는 것을 확인한 다음에 자료를 받아야 한다.

 

4th bit - FE: 자료 세트가 전송되는데 잡음 유무를 확인하는 bit 에러가 있으면 1 -> -

3rd bit - DOR: 기존에 있던 자료에 전송된 데이터를 엎어 쓰는 경우 1 -> -

2nd bit - UPE: 패리티에러가 있는 경우에 1 -> -

1st bit - U2X: 보통 속도 0 -> 0

Zero bit - MPCM: 1일 때 주소 정보를 가지고 있지 않은 정보는 모두 무시된다. 0으로 설정 -> 0

 

 

 

//비동기식 데이터 송신 방식에서 데이터와 head, tail을 합친 것을 프레임(frame)이라고 한다.

 

<UCSRnB 레지스터>

Bit 7 - RXCIE: 수신 interrupt 활성화 시 1 -> -

Bit 6 - TXCIE: 송신 interrupt 활성화 시 1 -> -

Bit 5 - RDRIE: 데이터 empty interrupt 활성화 시 1 -> -

Bit 4 - RXEN: USART 송신 활성화 시 1 -> 1

Bit 3 - TXEN: USART 수신 활성화 시 1 -> 1

Bit 2 - UCSZ: 글자 크기 -> 0

Bit 1 - RXB8n: 8비트 데이터 수신에서 추가 비트 사용(9bit) -> -

Bit 0 - TXB8n: 8비트 데이터 송신에서 추가 비트 사용(9bit) -> -

 

 

<UCSRnC 레지스터>

Bit 6 - UMSEL: Clock 사용 여부, 비동기식 0, 동기식 1 -> 0

Bit 5 - UPM1: 패리티 생성기와 체크기 활성화, 짝수 패리티 1 -> 1

Bit 4 - UPM0: 패리티 생성기와 체크기 활성화, 짝수 패리티 0 -> 0

Bit 3 - USBS: 스톱 bit 선택 1bit0, 2bits1 -> 0

Bit 2 - UCSZ1: 글자 크기 8bit1 -> 1

Bit 1 - UCSZ0: 글자 크기 8bit1 -> 1

Bit 0 - UCPOL: 클럭 양극화, 동기식만 사용 -> -

작성한 USART.cUSART.h의 코드를 보면,



main.c 파일로 가서 초기화시키는 INIT함수를 만들어보자.


반응형

'Busan IT > 스마트 컨트롤러' 카테고리의 다른 글

ATmega128a를 활용한 데이터 송신  (0) 2015.03.26
PIC16F917 카운터 업&다운 코딩  (0) 2015.03.26
시리얼 통신 UBRR register  (0) 2015.03.24
직/병렬 통신과 USART  (0) 2015.03.23
1  (0) 2015.03.20
Posted by newind2000
Busan IT/디지털 제어2015. 3. 25. 13:46

PIC16F917을 활용한 LED 불 켜기

 

<학습목표>

 

PIC16F917의 데이터시트를 보고 register 세팅을 할 수 있다.

프로테우스에서 PIC16F917와 프로그래밍을 활용하여 LED에 불을 켤 수 있다.

 

 

요놈을 가지고 놀아보자!

 

우선 microchip.com에 접속하려 PIC16F917과 관련된 자료를 받아보자.

 

----------------------------<다운로드 목록>-----------------------------------

 

1.데이터 시트 - 데이터시트는 위의 그림에 있는 PDF파일의 링크를 눌러 다운로드 받으면 된다.

 

2. MATLAB

3. MPLAB compiler

-----------------------------------------------------------------------------

 

 

2. MATLAB



 

3. MPLAB compiler





 

다운 받은 MPLABcompiler를 설치해 주자!

 

 

PIC16F917 실습내용은 다음과 같다.

 

1. LED에 불 깜빡거리기

2. LCD에 글 표시하기

 

//컴파일러는 GCC기반 makefile이 컴파일이 자동으로 생성 된다.

//Debugging tool <PICKit3> 아래

 

PIC16F917의 핀 설명은 아래와 같다.




 

설치가 끝난 MPLAB X IDE를 실행시켜 보자!











 

하드웨어적인 부분이 끝났으니 코딩을 해보자!

 

<설정>

입력은 A0 port를 사용한다.

출력은 B0 port를 사용한다.





반응형
Posted by newind2000