article search result of '하드웨어/Embedded' : 3

  1. 2009/02/09 Rov-lab 3000 [7 segment 구동하기]
  2. 2009/02/09 Rov-Lab 3000
  3. 2008/06/11 임베디드 시스템이란?

Rov-lab 3000 [7 segment 구동하기]


사용자 삽입 이미지
7 segment란 하드웨어 하시는분들은 다 아실것입니다.

모르는사람이라도 적어도 한번쯤을 봤을법한데요.. 바로 숫자나 간단한 알파벳 등을 표현해주는 display입니다. 바로 좌측 사진과 같은 모습을 하고있지요.

Rov-lab 3000에는 6개의 7 segment가 있는데요, VHDL을 이용하여 7segment를 구동하는 소스를 구현해 보겠습니다.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity segment is
    Port ( FPGA_RSTB : in  STD_LOGIC;
           FPGA_CLK : in  STD_LOGIC;
           SEG_A : out  STD_LOGIC;
           SEG_B : out  STD_LOGIC;
           SEG_C : out  STD_LOGIC;
           SEG_D : out  STD_LOGIC;
           SEG_E : out  STD_LOGIC;
           SEG_F : out  STD_LOGIC;
           SEG_G : out  STD_LOGIC;
           SEG_DP : out  STD_LOGIC;
           DIGIT : out  STD_LOGIC_VECTOR (6 downto 1));
end segment;

architecture Behavioral of segment is
signal delay_cnt : std_logic_vector (19 downto 0);
signal delay_clk : std_logic;
signal digit_int : std_logic_vector (5 downto 0);
signal key   : std_logic_vector (3 downto 0);
signal seg   : std_logic_vector (7 downto 0);

begin
 process(FPGA_RSTB,FPGA_CLK)
 begin
  if FPGA_RSTB = '0' then
   delay_cnt <= (others => '0');
  elsif rising_edge (FPGA_CLK)then
   if delay_cnt = X"FFFFF" then
    delay_cnt <= (others => '0');
    delay_clk <= not delay_clk;
   else
    delay_cnt <= delay_cnt + 1;
    delay_clk <= delay_clk;
   end if;
  end if;
 end process;
 process(FPGA_RSTB, delay_clk)
 begin
  if FPGA_RSTB = '0' then
   digit_int <= "000001";
  elsif rising_edge (delay_clk) then
   digit_int <=digit_int (4 downto 0) & digit_int(5);
  end if;
 end process;
 
 DIGIT <= digit_int;
 seg_a <= seg(7);
 seg_b <= seg(6);
 seg_c <= seg(5);
 seg_d <= seg(4);
 seg_e <= seg(3);
 seg_f <= seg(2);
 seg_g <= seg(1);
 seg_dp <= seg(0);
  process(FPGA_RSTB, delay_clk)
  begin
   if FPGA_RSTB = '0' then
    key <= (others => '0');
   elsif rising_edge (delay_clk) then
    if key = X"F" then
     key <= (others => '0');
    else
     key <= key + 1;
    end if;
   end if;
  end process;
 
  process(key)
  begin
   case key is
         --abcdefgdp
    when X"0" => seg <= "11111101";
    when X"1" => seg <= "01100001";
    when X"2" => seg <= "11011011";
    when X"3" => seg <= "11110011";
    when X"4" => seg <= "01100111";
    when X"5" => seg <= "10110111";
    when X"6" => seg <= "10111111";
    when X"7" => seg <= "11100101";
    when X"8" => seg <= "11111111";
    when X"9" => seg <= "11110111";
    when X"a" => seg <= "11111011";
    when X"b" => seg <= "00111111";
    when X"c" => seg <= "10011101";
    when X"d" => seg <= "01111011";
    when X"e" => seg <= "10011111";
    when X"f" => seg <= "10001111";
    when others => seg <= (others => '0');
    end case;
   end process;
end Behavioral;

사용자 삽입 이미지

7segment에는 8개의 LED가 들어있습니다.

왼쪽 사진과 같이(클릭해서 보세요) a~f, 그리고 점을 표시하는 DP가 있습니다.
이 8개의 조합으로 숫자가 만들어지는 것이지요..

예를 들어  when X"0" => seg <= "11111101"; 라는 라인에서
각각의 자리는 a, b, c, d, e, f, dp  로 구성되어 있는데 1이면 on, 0이면 off 입니다.

그래서 11111101 로 셋팅하면 7segment에 0 이 표시되게 됩니다.


위의 VHDL을 합성한 후 iMPACT 를 실행하여 FPGA에 다운로드하고 동작상황을 보면 아래 사진과 같은 모습을 볼수 있습니다.

사용자 삽입 이미지

실제로 저 모양은 아니고, 6개의 7segment중 첫번째에 0 이 들어오고, 일정시간후 그다음 7segment에 1이 점등되고, 이렇게 0부터 9까지, 그리고 a 부터 f 까지 순서대로 표시됩니다.
2009/02/09 21:08 2009/02/09 21:08


ㄹㅔㅈㅕ
하드웨어/Embedded 2009/02/09 21:08

댓글을 달아 주세요

Rov-Lab 3000


사용자 삽입 이미지

Rov-Lab 3000 장비


RoV-Lab 3000은 회로 구현 및 실제 동작 테스트에 이르는 전과정에 필요한 Kit와 각 모듈을 분리 및 재조립하여 역동적인 실습이 가능한 로봇으로 구성되어 있어 VHDL 설계 교육 및 마이크로 프로세서 응용 교육을 보다 쉽고 효과적으로 실습할 수 있는 교육용 장비이다. 

이 장비가 동아리방에 있는데, 이거 가지고노는 재미가 쏠쏠하다..ㅋㅋ
지금까지 프로그램 코딩이라고하면 윈도 응용프로그램등을 작성했었지만,  VHDL 은 프로그램을 작성하고, 하드웨어를 작동시키는 역할을 한다. 
위의 장비는 자일링스 Spartan 3 제품인 XC3S200 을 사용하고, 그 옆에 보니깐 ATMEL에서 만든 ATmega128L도 장착되어있다..  아직까진 잘 몰라 어떻게쓰는지도 모르고, 내가 코딩한게 XC3S200에서 작동되는건지, ATmega128L에서 작동되는건지도 잘 모르겠다. ISE툴을 쓰는거 봐서는 XC3S200에서 작동되는거같기도 하고;;

아무튼 열심히 공부해서 저 스텝모터달린놈을 한번 굴려보고 싶은데.. 바퀴 한짝이 빠져서 없어졌네..ㅡㅡ;
사다 껴넣고 가지고 놀아야겠다.ㅎㅎㅎ
2009/02/09 20:48 2009/02/09 20:48


ㄹㅔㅈㅕ
하드웨어/Embedded 2009/02/09 20:48

댓글을 달아 주세요

임베디드 시스템이란?



임베디드 시스템


임베디드 시스템(Embedded System, 내장형 시스템)은 시스템을 동작시키는 소프트웨어를 하드웨어에 내장하여 특수한 기능만을 가진 시스템이다. 개인용 컴퓨터와는 달리 특정한 요구 사항을 가지고 있으며, 미리 정의된 작업(task)만을 수행한다.

개인용 컴퓨터는 하드 디스크와 같은 대용량 저장장치에 운영 체제를 내장하고 있다. 그에 반해, 임베디드 시스템은 운영 체제와 응용 프로그램들이 롬(플래시)에 이미지 형태로 저장되어 있다가 시동과 동시에 램 디스크(RAM Disk)를 만든 다음, 램 디스크 위에 운영 체제와 응용 프로그램들이 구성되고 구동되는 시스템이다.


임베디드 시스템의 예.

PDA
휴대전화 (휴대폰, 핸드폰, 모바일폰, 셀률러폰 등으로도 불린다.)
스마트폰
홈네트워크
디지털TV
PMP
디지털 비디오 레코더
네비게이션
산업용 콘트롤러
디지털 카메라
USB 저장 장치
전기밥솥
냉장고
MP3 플레이어
DMB
인공위성 (방송(통신)위성, 군사위성, 과학(실험)위성)
계측기 (로직 애널라이저(Logic Analyser), 오실로스코프 (oscilloscope), 스펙트럼분석기(Spectrum Analyzer), 네트워크 애널라이저(분석기, VNA), 프로토콜 애널라이저(분석기) )
라우터 (router)
서버 (server) 등 각종 네트워크 장비
마이크로 마우스
로봇의 제어부
자동차 엔진 제어 장치


특 징

임베디드 시스템은 대개 저가로 선택된 기능만을 수행하도록 설계되어 있으며, 몇몇 기능은 매우 빠른 처리가 필요하며, 다른 기능들은 대부분 속도를 중요하게 여기지 않는 경우가 많다.

그래서 흔히 임베디드 시스템의 많은 부품들은 성능이 낮은 것들이다. 여기서 느리다는 것은 단지 클럭 속도만을 뜻하는 것은 아니다. 대개 임베디드 시스템의 전체 구조는 단가를 낮추기 위해 범용 컴퓨터 시스템의 하드웨어에 비해 의도적으로 단순화되어 있다. 예를 들어, 임베디드 시스템은 개인용 컴퓨터에서 쓰이는 일반 주변장치 인터페이스에 비해 1000배 정도는 느린 직렬 버스 방식으로 제어되는 주변 장치를 사용하는 경우가 많다.

많은 임베디드 시스템이 수백만 개 규모로 양산되기 때문에, 생산 비용을 줄이는 것이 주요 관심사 중 하나일 수 밖에 없다. 몇몇 임베디드 시스템들은 대단한 처리 성능과 자원을 필요로 하지 않기 때문에, 그러한 시스템에는 (상대적으로) 느린 프로세서와 작은 크기의 메모리를 탑재하여 비용을 절감할 수 있다.

하드웨어 장치의 롬이나 플래시 메모리에 내장하는 소프트웨어를 일러 펌웨어라 한다. 임베디드 시스템 상의 프로그램은 대개 제한된 하드웨어 자원 위에서 실시간(real-time) 제약 조건을 가지고 동작한다. 시스템 상에 디스크 드라이브나 운영 체제, 키보드나 화면이 없는 경우도 많다. 파일 시스템을 가지고 있지 않을 수도 있으며, 플래시 드라이브를 저장 매체로 사용할 수도 있다. 사용자 인터페이스가 있다 하더라도 조그마한 키패드거나 LCD 정도일 수 있다.

임베디드 시스템은 여러 해에 이르는 오랜 기간 동안 오류 없이 안정적으로 돌아가도록 설계된다. 따라서 펌웨어는 개인용 컴퓨터에서 쓰이는 소프트웨어보다 신중한 개발과 테스트 과정을 거친다. 대부분의 임베디드 시스템은 디스크 드라이브나 스위치, 버튼 등 기계적인 동작으로 손상을 입을 수 있는 부품의 사용을 피하고 대신 플래시 메모리 같은 물리적 손상에서 비교적 자유로운 칩 자재를 사용한다.

또한 임베디드 시스템이 적용되는 분야는 석유 시추공, 우주공간 등 인간이 직접 즉각적인 제어를 하기 어려운 장소일 수 있다. 따라서 임베디드 시스템은 최악의 상황에서도 스스로 다시 기동할 수 있어야 한다. 이러한 응급 복구는 소프트웨어가 주기적으로 타이머를 건드리지 않으면 컴퓨터를 초기화시키는 왓치독 타이머라고 불리는 전자 부품을 통해 이루어진다.


플랫폼

임베디드 시스템에는 ARM, MIPS, 콜드파이어/68K, PowerPC, X86, PIC 마이크로컨트롤러, 8051 등 많은 다양한 CPU 아키텍처가 사용된다. 이러한 점이 데스크탑 컴퓨터(개인용 컴퓨터) 시장과는 대별되는 점이다. 2003년 현재, 데스크톱 컴퓨터 시장에선 인텔/IBM X86이나 애플사의 매킨토시에서 사용되는 모토로라/IBM PowerPC만이 경쟁 아키텍처이다.

2006년 현재, CPU 아키텍처에서는 ARM Core가 가장 강세이다. 그외 400여개 이상의 임베디드 시스템에 쓰이는 코어가 있다. 인텔 8051, PIC 마이크로콘트롤러, AVR(ARM Core 사용) 8 비트 등이 시장에서 가장 많이 사용되는 종류이다.

임베디드 시스템에서 큰 흐름 가운데 하나는 특정 적용 분야에 맞는 IC들을 하나의 CPU 칩에 집적시켜 별도의 주변 장치용 칩을 보드 위에 달지 않아도 되도록 하는 시스템 온 칩(SoC, System On Chip) 화이다


개발도구

일반적인 컴퓨터 프로그래머가 그렇듯이, 임베디드 시스템 설계자들도 프로그래밍을 위해 컴파일러, 어셈블러, 디버거를 사용한다.
몇몇 곳에서 다음과 같은 소프트웨어 도구들이 나온다.
● 임베디드 시장에 집중하고 있는 소프트웨어 업체들
● GNU 소프트웨어 개발 도구에서 포팅된 도구들
● 때때로, 개인용 컴퓨터를 위한 개발 도구들도 개인용 컴퓨터와 유사한 프로세서를 사용하는 임베디드 시스템 개발에서 사용될 수 있다.
또 임베디드 시스템 설계자는 일반적인 소프트웨어 프로그래머가 흔히 사용하지 않는 도구들도 가끔 이용한다.
● 몇몇 설계자들은 데이터 파일을 코드로 변환하는 유틸리티를 사용하여 프로그램에 여러 유형의 데이터를 포함시키기도 한다.
● 대부분의 설계자들은 프로그램에 체크섬을 더하는 유틸리티 프로그램을 이용하여 프로그램이 수행된 이후의 무결성을 검사한다.


운영체제

임베디드 시스템은 흔히 운영 체제를 사용하지 않는 경우도 많으며, 사용한다 하더라도 임베디드 운영 체제나 RTOS를 사용하여 자신의 새로운 시스템에 포팅한다. 이는 대개의 임베디드 시스템의 경우 CPU나 메모리 자원 등의 구성이 일반 PC 등의 표준적인 플랫폼과는 달리 한계가 있는 시스템으로 일반 개인용 컴퓨터용 운영 체제를 사용할 수 없기 때문이다.


디버깅

일반적으로 디버깅은 인서킷 에뮬레이터나 마이크로컨트롤러의 내부 마이크로코드(microcode)를 인터럽트할 수 있는 특정 유형의 디버거(디버깅 프로그램)을 이용하여 이루어진다.


출처 : 위키피디아


 

2008/06/11 06:13 2008/06/11 06:13


ㄹㅔㅈㅕ
하드웨어/Embedded 2008/06/11 06:13

댓글을 달아 주세요

[ SG, SB ] Powerd by Textcube, designed by criuce
rss