회원가입 ID/PW 찾기
AA
포트확장이 필요한가요??
혹시나해서 8255ic칩을 구해놨는데 결선을 어떤식으로 해야할지 모르겠네요;;
또 포트확장을한다면 프로그래밍소스는 어떤식으로 달라지나요? 확장된 포트를 다시 정의해줘야하나요?
댓글 5
  • No Profile
    가장 간단하게는 Bus 라인에 Latch IC를 이용하시어 어드레스 확장하는 방법이 있습니다.
    다르게는 serial shifit IC를 이용하여 쉬프트 시켜서 동작 시킬수 있습니다.
    그외는 LED 제어 전용 IC를 확장 하여 사용하는 방법도 있습니다. 
    8255가 아마 3개 포트로 확장하는 걸로 아는데 굳이 그렇게 하실필요가 없습니다.
    적용하고자하는 디바이스는 LED로 오직 출력만 합니다. 따라서 출력만 확장하시면 되는것입니다.
    60개이면. 60/8 = 7.5  즉 8개 의 74HC573에 LED를 물려 사용하시면 됩니다.
    128에 한개의 포트를 정하여 8개의 74hc573 Data 에 연결하시고, 다른 한포트를 각각 573 latch enable에 연결하시면됩니다. 573의 Out Enable은 GND에 연결하시고, 573 Q에는 각 LED를 연결하시면됩니다. LED 연결 방법은 아실거라 생각하고 생략합니다.
    128에서 Latch Enable에 연결된 포트를 모두 Low 로 해주시고, 출력하고픈 8개의 데이터를 출력한후에, 573한개의 Latch Enable을 High 로 한다음 다시 Low로 변경하시면. 한개의 573에만 데이터가 출력되어 원하는대로 LED를 컨트롤 할 수있을 것입니다.
    ADDRESS BUS를 이용해서 같은 방법으로 제어하셔도 됩니다.

  • 알페라츠님께
    No Profile

    답변 감사드립니다^^ 정말 친절하게 설명해주셨네요 ㅋ
    알페라츠 님께서 "128에 한개의 포트를 정하여 8개의 74hc573 Data 에 연결"하라고 말씀하셨는데 74hc573 소자의 Data핀 D0~D7 8개핀을 병렬로 다 연결하란 말씀이신가요?? 첨부한 회로처럼 연결하면될까요?

  • No Profile

    저도 가르쳐 드릴만큼 잘아는건 아니지만 비슷한걸 해본적이 있어 글을 올려봅니다.
     led를 각각 개별 제어 하시는 게 아니라 단순히 순차 회로나 모양을 만들 기 위한한 구성이라면
    로직을 이용한 방법을 추천드립니다. and, not, or, decoder, counter 등의 자료는 칩에 대한 데이터 시트만 확인 하셔도
    적용이 가능 할겁니다. 특히 순차회로 같은것은 8개 led 제어에는 3개의 데이터선, 16개 4개 순으로 2의 승으로 제어가
    가능하구요, 카운터 같은 경우 10-12비트 제어에 입력데이터선 1개만 있으면 됩니다. (물론 사용하는 칩종류에 따라 약간
    더 늘어 날수 있습니다).

  • No Profile

    제가 쪽지 로 설명한 내용을 회로도로 간단히 그려 넣었습니다.
    첨부한 PDF파일을 보시면 위쪽이 전에 글과 쪽지로 설명 드린 방법입니다.
    이건 풀타임으로 모든 LED가 켜져 있는 것입니다.

    아래쪽은 영화처럼 잔상을 이용하여 쓰는 방법입니다.
    즉 한번에 한그룹씩 불을 켜고, 8번씩 로테이션 하는 것입니다. 이를 사용하기 위해서는 Timer interrupt 를 쓰실줄 알아야합니다.
    아래쪽 프로그램 요약을 설명해드리겠습니다.

    char led[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};     // 64개 LED 버퍼

    void main(void)
    {
          DDRB = 0xFF;  // PORTB OUT MODE
          PORTB = 0xFF;   // LED SELECT OFF

          DDRA = 0xFF;   // PORTA OUT MODE
          PORTA = 0xFF; //  DATA OFF

          // timer interupt 1ms 설정 및 전역 인터럽트 ENABLE 시킬곳..

          while(1)
         {
                led[0] = 0xF0;     // 4비트만 on
                led[1] = 0xAA;    // 하나 건너 하나
                ;
         }


    void timer0_ovf(void)    // timer 0 interrupt 호출 루틴입니다. 1ms 정도마다 호출되게 하시면 됩니다
    {
              static char led_index = 0;
     
              TCNTx = xx;    // tiemr 1ms 에 다시 호출되기 위한 값 설정
               
               PORTB = 0xFF;      // 전체 OFF
               PORTA = led[led_index];       // 켜야할 데이터 출력
               PORTB = ~(1 << led_index);   // 해당 TR만 low로 떨궈 LED킴. (CLEARBIT 를 이용하여도 됨)
               if(++led_index >= 8) led_index = 0;         // index를 0으로 되돌림.    
    }

    이렇게 하시면 1ms 마다 한그룹씩 돌아가며 켜지며, 이는 잔상으로 모두 불이 들어오는 것처럼 보이게됩니다.
    당연히 풀타임으로 켜는것보다 어둡기 때문에 저항을 220옴 정도로 바꾸시면 보기가 좋게 켜질것입니다.
  • No Profile
    요건 위쪽용 프로그램

    char led[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

    void main(void)
    {
      DDRA = 0xFF;     // PORTA OUT MODE
      PORTA = 0x00;   // DATA 0

      DDRB = 0xFF;      // PORTB OUT MODE
      PORTB = 0x00;    // PORTB 0x00 출력
     
      while(1)
     {
         char i;
         char hc573_index;

        led[0] = 0xF0;        // 첫번째 573의 4비트만 ON 4비트는 Off 되게 값을 기입
        led[1] = 0xAA;        // 두번째 573의 LED는 한개 건너 한개씩 On

         hc573_index = 1;
         for(i = 0; i<8; i++)
         {
                  PORTA = led[i];
                  PORTB = hc573_index;    // 해당 74HC573 LE hight   (이때 573에 8비트 정보가 홀딩되고 출력됨)
                  PORTB = 0x00;                   // 573 LE off
                   hc573_index <<= 1;          // 다음 LATCH 위치를 먼저 계산해놓음
          }   
      }     
    }

    이렇게 하시면 LED가 켜집니다.
    led[] 버퍼값만 조정하시면 자동으로 LED가 변하겠지요 참고하세요

    그리고 프로그램은 대충 생각난대로 적었으니 오류가 있을수 있습니다.  컴파일 해가면서 고치시면 큰무리는 없을 것입니다.

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
772 마이크로프로세서 HOTF포트 입력 문의 입니다.1 핵교 1641 2010.11.04
771 마이크로프로세서 HOT코드비전에서의 퓨즈비트 설정법좀 가르쳐주세요1 POV매니아 2371 2010.11.04
770 마이크로프로세서 HOT예전에 작품하나한다고 생각했던거 시작중인데요7 온니무 1238 2010.11.04
769 펌웨어 & 코딩언어 HOT아스키코드질문2 k231 1219 2010.11.03
768 펌웨어 & 코딩언어 HOT펌웨어란6 k231 2261 2010.11.03
767 마이크로프로세서 HOT12V에서 8V 사이를 넣어주라는 것은 그속에 이미 레귤레이터가 있는 것이 아닌가요?1 바다거북 1158 2010.11.02
766 마이크로프로세서 HOTvoliate에 대한 이야기가 있어서3 바다거북 4621 2010.11.02
765 마이크로프로세서 HOTATmega128 소스문의요1 양양양111 1391 2010.11.01
764 마이크로프로세서 HOTuart포트 사용하여 통신3 촌철살인 1538 2010.11.01
763 마이크로프로세서 HOTKEIL Example에서 STM32_Init.c 내부의 0xFFUL에서 UL은 무슨 의미인지요?1 세상탈출 3232 2010.10.31
762 마이크로프로세서 HOTAVR-ISP error enteing proming mode8 POV매니아 7497 2010.10.30
761 Software & IDEs HOT어떤언어를 배우는것이 가장 쉬운가요?4 멍치 1082 2010.10.29
760 마이크로프로세서 HOT질문입니다ㅜ4 lju_0415 1144 2010.10.29
759 펌웨어 & 코딩언어 HOTc언어 초보입니다 조언좀..2 hshyo 1021 2010.10.28
758 마이크로프로세서 HOTATMEG128로 SRF04를 쓰고 싶습니다.. 리타이켄 2363 2010.10.25
마이크로프로세서 HOTATmega128로 LED60개를 제어해보려하는데 포트확장에 관해서 문제가있어요 ㅠㅠ5 POV매니아 3426 2010.10.24
756 마이크로프로세서 HOT다시문의 드릴께요 ㅠㅠ 죄송해요ㅜㅜ3 정대철 834 2010.10.22
755 마이크로프로세서 HOTavr 키트관련 질문드려요 ^^;2 정대철 898 2010.10.20
754 마이크로프로세서 HOTavr로 디지털필터 꾸미기4 JYP 1818 2010.10.19
753 마이크로프로세서 HOT제가 atmega128이용해서 모터와 초음파센서를 쓰는 작품을 해볼려고하는데요1 온니무 2105 2010.10.19
Prev 1 ... 15 16 17 18 19 20 21 22 23 24 ... 58 Next
  • 재미가 없다면 왜 그걸 하고 있는가?
    - 제리 그린필트
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.