HBE-MCU-All in One 키트에는 'Push Button'과 'LED' 에 대한 포트가 있습니다.

이번 포스팅에서는 Push Button 을 누를 때마다 LED가 다양하게 제어되는 형태의 프로그램에 대한 코드를

설명하려고 합니다. 각각 Push Button 에 대해서 LED는 다음과 같은 반응을 보일 수 있습니다.


그리고 소스 코드는 다음과 같습니다.


#include <avr/io.h> void my_delay(unsigned long x) { while(x--); } int main(void) { int i; unsigned char state, tmp; /* Push Button - 포트 D */ DDRD = 0x00; // 입력 /* LED - 포트 B */ DDRB = 0xFF; // 출력 while(1) { state = PIND; switch(state) { case 0x01: // 0번 버튼 PORTB = 0xFF; // 모든 LED가 켜진다. break; case 0x02: // 1번 버튼 PORTB = 0xAA; // 짝수번째 LED가 켜진다. break; case 0x04: // 2번 버튼 PORTB = 0x55; // 홀수번째 LED가 켜진다. break; case 0x08: // 3번 버튼 // 다른 스위치가 눌릴때까지 모든 LED를 깜빡인다. while(1) { PORTB = 0x00; // 모든 LED 꺼진다. my_delay(50000); if(PIND != 0x08 && PIND != 0x00) // 다른 스위치가 눌리는지 확인. break; PORTB = 0xFF; // 모든 LED 켜진다. my_delay(50000); if(PIND != 0x08 && PIND != 0x000) break; } break; case 0x10: // 4번 버튼 // 다른 스위치가 눌릴때까지 LED 1개 켜서 좌로 이동 while(1) { tmp = 128; for(i=0; i<8; i++) { PORTB = tmp; tmp = tmp >> 1; my_delay(50000); if(PIND != 0x10 && PIND != 0x00)// 다른 스위치가 눌리는지 확인. goto Finish1; } PORTB = 0x00; } Finish1: break; case 0x20: // 5번 버튼 // 다른 스위치가 눌릴때까지 LED 1개 켜서 좌로 이동 while(1) { tmp = 1; for(i=0; i<8; i++) { PORTB = tmp; tmp = tmp << 1; my_delay(50000); if(PIND != 0x20 && PIND != 0x00)// 다른 스위치가 눌리는지 확인. goto Finish2; } PORTB = 0x00; } Finish2: break; case 0x40: // 6번 버튼 PORTB = 0xF0; // 상위 4비트(LED4~LED7)만 켠다. break; case 0x80: // 7번 버튼 PORTB = 0x0F; // 하위 4비트(LED0~LED3)만 켠다. break; default: // 아무런 버튼도 누르지 않은 경우. PORTB = 0x00; // 모든 LED가 꺼진다. } } }


다음은 각각 결과에 대한 사진입니다.



▲ 0번 버튼을 누른 경우, LED가 전부 켜진다.


▲ 1번 버튼을 누른 경우, LED가 짝수 번째만 켜진다.


▲ 2번 버튼을 누른 경우, LED가 홀수 번째만 켜진다.


▲ 3번 버튼을 누른 경우, LED가 깜빡인다.


▲ 4번 버튼을 누른 경우, LED가 1개씩만 좌로 이동한다.


▲ 5번 버튼을 누른 경우, LED가 1개씩만 우로 이동한다.


▲ 6번 버튼을 누른 경우, LED가 상위 4비트(LED4~LED7)만 켜진다.


▲ 7번 버튼을 누른 경우, LED가 하위 4비트(LED0~LED3)만 켜진다.





1. 제품 개요

8-bit 마이크로컨트롤러(MCU)는 현 산업계에서 가장 많이 사용되는 프로세서 중 가운데 하나이며, 이를 통해 다양한 주변 장치들을 제어할 수 있는 많은 종류의 제품이 개발되고 있습니다. 8-bit 기반의 MCU에서 지원하는 다양한 기능을 여러 주변장치를 통해 습득하고 이를 응용하는 기술은 하드웨어 및 소프트웨어 개발자의 기본 지식입니다. HBE-MCU-AllinOne은 20종 이상의 주변장치를 하나의 시스템을 통해 실험실습할 수 있도록 구성하여 마이크로콘트롤러의 다양한 기능과 활용 방법을 습득할 수 있습니다. 또한 다양한 옵션 모듈을 지원하여 기본 구성 이외의 기능들을 쉽게 추가할 수 있으며, 이를 통하여 프로젝트 실습 및 캡스톤 설계 교과목도 운용할 수 있습니다. HBE-MCU-AllinOne은 최근 MCU 분야에서 적용이 확산되고 있는 32-bit 기반 Cortex-M3 마이크로콘트롤러를 제공하여 상위 레벨의 교육 환경을 구축할 수 있습니다.

2. 제품 트징

● 4종(ATmega128, 89C51ED2, PIC18F6722, STM32F103)의 MCU 구성

● 착탈 가능한 커넥터 구조의 MCU 모듈 설계에 따른 다양한 MCU의 실험실습이 가능

● MCU 모듈과 기능 모듈을 다양하게 연결할 수 있는 커넥터 구조 제공

● MCU 학습 및 설계의 효율성을 향상시킬 수 있는 신호 분석 모듈(주파수 분석) 제공

● 다양한 입력 스위치 및 출력 표시 장치 제공

● USN 및 센서의 교육을 위한 다양한 센서 장착

● 응용 실험실습 및 프로젝트 수업을 위한 옵션모듈 장착 가능(어댑터 보드)

● 응용 실험실습에 필요한 다양한 예제 및 프로그램 소스 제공

● 기초 수준의 프로세서 교육에서 응용 제품 설계 수준의 교육 환경 지원

● 마이크로컨트롤러 종류별 4종의 표준 교재 및 예제 제공


3. 구성 및 명칭

HBE-MCU-AllinOne은 4종류의 마이크로컨트롤러(MCU 모듈) 및 주변장치들을 실험실습할 수 있는 단일보드(One Board) 형태의 MCU 교육 플렛폼입니다. HBE-MCU-AllinOne은 MCU 교육에 필수적인 최신 주변장치들(예: OLED 등)로 구성 되어 있으며, 확장 포트를 통해 다양한 옵션 모듈을 실험할 수 있는 유연한 구조를 가지고 있습니다.


출처: http://www.hanback.co.kr/boards/view/newproduct/9922/page:2

임베디드 시스템이란? 정의 및 개념 총정리 - 도라가이드


호스트 시스템(Host System)

타깃 시스템을 개발하기 위한 개발환경을 제공하는 시스템.

타깃 시스템을 위한 어셈블러, 컴파일러, 링커 등 개발도구 제공

보통 IDE(Integrated Development Environment)형태로 제공.

 

타깃 시스템(Target System)

개발하고자 하는 임베디드 시스템

 


크로스 디벨롭(교차 개발, Cross Development)을 위한 개발 도구

 


1. 교차 컴파일러(cross compiler)

: 호스트 시스템의 프로세서와 운영체제 위에서 동작하면서, 

다른 프로세서 용 오브젝트 코드를 생성할 수 있는 컴파일러


- 교차컴파일러의 예:

- GNU의 GCC

- ARM의 ADS(ARM Devlopment Suit)/ RVDS(RealView Develpment Suit)

- CodeWarrior for ARM


임베디드 시스템 소프트웨어의 개발은 Cross Compiler를 이용함.

(보통 타깃 시스템에서 직접 개발하는 것은 어려움.)

 


2. 링커(Linker)

: 불완전한 오브젝트 파일들을 합쳐 모든 코드와 데이터를 포함한 새로운 오브젝트 파일을 생성해 내는 도구.

크로스 컴파일 후 생성된 오브젝트 파일은 단순히 명령어 코드로 해석만 되어있는 상태, 

문법적으로 해석만 되어있는 상태이다.

프로그래머가 선언한 변수의 메모리 공간이나 참조한 함수의 위치에 대한 정보 등이 결정되지 않은 상태.

링커는 각각의 오브젝트 파일들이 서로 참조하고 연결될 수 있도록 링크시키는 역할을 한다.

 


3. 로케이터(Locator)
: 메모리에서 실행 가능하도록 코드와 데이터를 배치하여 최종 바이너리 이미지를 생성하는 도구.

프로그램의 일부분은 ROM에 있어야 하고, 또 다른 부분은 RAM에 있어야 한다.

소스 코드는 전원이 꺼지더라도 지워지짖 않아야 하기 떄문에 ROM에 있어야 한다.

변수는 값이 변경되어야 하기 떄문에 RAM에 있어야 한다.

- 부팅 시 RAM영역으로 Copy.

- 부트코드에 ROM에서 RAM으로 복사하는 과정이 필요.


Linker Script 파일

: 코드와 데이터의 메모리 배치를 정의한 파일

대부분 링커에 포함되어 있다.


ODROID-XU – ODROID


LG전자 인턴에서 사용했던 보드인 ODROID-U2,

오드로이드 U2는 '하드커*" 사이트에서 구매 가능합니다... 

(직접 언급하면 상업적인 광고효과가 있을까봐... ㅎㅎ *가 궁금하면 메일이나 쪽지 보내주세요)

 

그래서 그 하드커* 사이트를 오랜만에 들어가봤는데, ODROID-XU 라고 하는 친구가 보이더군요??

흠흠 그 친구를 The world's first ARM big.LITTLE architecture based single board computer 라고 자랑해놓았더라구요.

 

big.LITTLE... 이 놈은 무엇인가? 왜 빅을 작게 쓰고 리틀을 크게 썼는지 참 반항아같은(?) 놈입니다만

오늘은 이 '빅 리틀'(big.LITTLE) 이란 놈에 대해서 설명해볼까 합니다.


빅 리틀 아시기 전에 아셔야 하는 배경지식은 바로 이겁니다.

성능이 우선시 되는 코어는 소비 전력이 큽니다. 반대로, 전력이 우선시 되는 코어는 성능이 비교적 약합니다.

이 이유는 아주 간단합니다. "명령어 처리 속도가 높다 = 성능이 좋다." 라고 할 수 있을텐데,

명령어 처리를 짧은 시간에 많이 진행할 수록 전기 회로에 흘러야 할 전류 량은 더 많아지니까 당연히 소비 전력이 커지게 되는 것이죠.

흠흠... 너무 당연한 설명을 하는 건가요?

 

자 이제, 두 개의 아키텍처 A15 , A7 이 있다고 생각해봐요.

A15 는 성능만을 고려한 아키텍처이고, A7 은 저전력을 고려해서 만든 아키텍처 입니다.

그런데 성능도 놓치기 싫고, 저전력도 놓치기 싫죠?

바로 이러한 문제의 솔루션이 빅 리틀입니다.

 

빅 리틀은 상황에 따라 프로세서를 맞게 쓰자는 겁니다.

성능이 필요할 땐 고성능 아키텍처 프로세서를, 

배터리 사용시간을 늘려야할 때는 저전력 아키텍처 프로세서를

쓰자는 겁니다.

 

즉, 두 아키텍처를 결합해서 만든 CPU 아키텍처를 바로 big.LITTLE 아키텍처라고 합니다.


+ Recent posts