본문 바로가기
코스웨어/15년 스마트컨트롤러

20150327-8번-김재홍-PIC16F917폴링카운터&atmega128a시리얼통신

by 알 수 없는 사용자 2015. 3. 30.
728x90
반응형

<H/W>


버튼을 눌렀다가 때었을 때 숫자가 하나씩 올라가는 카운터를 PCI16F917을 이용해서 만들어 보겠습니다. 많이 사용되는 카운터입니다.

인터럽트가 아닌 폴링 방식을 이용해서 만들 것입니다.


먼저 인터럽트Interrupt와 폴링Polling에 대해 알아보겠습니다.

인터럽트Interrupt 방식이란?

기계에 문제가 생겼을 때 알려주는 방식이다.

비용이 비싸고, 따로 회로를 가지고 있다. Polling방식 보다 세련된 방식이다.

 

폴링Polling 방식이란?

PollingInterrupt의 반대개념이다.

기계에 문제가 생겼는지 계속 감시하는 방식이다.

 

‘EMBEDDED RECIPES’489페이지를 인용해서 요약하면,

 

InterruptPolling

 

Interrupt는 하드웨어적으로 Hardware의 변화를 감지해서 외부로부터의 입력을 CPU가 알아 채는 방법입니다.

PollingHardware의 변화를 지속적으로 계속~ 읽어 들여서 그 변화를 알아채는 방법이라고 할 수 있습니다.

 

PollingInterrupt의 차이

 

PollingCPU가 다른 일은 하지 않지만, 즉각적으로 상태를 알아 낼 수 있고

InterruptCPU가 다른 일을 할 수 있는 상태이고, 반응만 따져도 Interrupt가 훨씬 즉각적입니다.

 


다시 폴링 방식을 이용한 카운터 만들기로 돌아와서...


01. 코드를 짜기 전에 먼저 알고리즘 순서도를 그려보겠습니다.





02. 코드를 짜 보았습니다.


03. PIC16F917 다이어그램입니다.



04. PIC16F917회로에 소스를 넣고 카운터가 소스코드에 맞게 움직이는 지 확인합니다.



<S/W>


데이터시트 177페이지에서 USART_Receive C Code를 복사해서


Usart.c에 붙여 넣고 이름을 USART_Rx로 바꾸어 줬습니다.

이렇게 수신Receive 완료일 때 1이 되고

수신 완료가 아닐 때 0이 나오는

수신완료가 될 때까지 기다리는 while문을 넣었습니다.


보고 싶은 정보만을 보는 MASK연산을 하였고

 

1<<RXC

1을 시프트 레프트, 왼쪽으로 일곱번(RXC의 값)을 밀었습니다.

1을 왼쪽으로 7비트만큼 시프트 했습니다.



 

캐릭터LCD에는 윗줄과 아랫줄이 주소가 달라서 하이퍼터미널 통신으로 글을 적으면 줄을 바꿔서 출력이 될 수 있도록 함수를 추가해 주었습니다.


LCD.c 문서 상단에 uichCntstatic변수선언을 해 줬습니다.


다시 LCD_Data 함수의 if문을 복사해 LCD_Setaddr 함수를 만들어 줍니다.


usb포트로 시리얼통신을 해봅니다.


소스압축파일입니다.


20150327.zip



수업내용을 잘 못 따라가서 애를 먹었는데

업무일지 작성하는데 도움주신 천정호, 김태현, 김성현씨에게 감사드립니다.


일지를 작성하면서 저에겐 수업이 어려워 자료를 정리하는데 부족한 부분이 많았습니다.

다른 분들이 올리는 자료를 보고 많이 배우겠습니다.


마지막으로 매일 빵우유를 주셔서 체력보충하는데 

도움을 주신 이어정형에게도 감사드립니다.


급우여러분 많은 도움 부탁드립니다. ^^;


728x90