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

20160311_노유찬_펌웨어실습

by 알 수 없는 사용자 2016. 3. 16.
728x90
반응형

FND TEST

 

DK128의 세븐세그먼트(첫번째 그림의 숫자LED)체크를 위해 J19점퍼에 모두 GND(0V)를 연결해본다 확인결과 00이 선명하게 찍히는 걸 확인할 수 있다.

J19

  1 

 2

 3

 4

 5

 6

 7

 8

  PORTA

PA7  =8

PA6 =7

PA5 =6

PA4 =5

PA3 =4

PA2 =3

PA1 =2

PA0 =1

J19의 1,2,3,4번은 U14 세븐세그먼트와 J19의 5,6,7,8번은 U16 세븐세그먼트와 각각 연결되어있다. U14는 첫번째 그림의 오른쪽 세븐세그먼트이고 U16은 왼쪽 세븐세그먼트이다.

만약 34라는 숫자를 출력하고 싶으면 아래와 같이 4개의 니블로 나눠 PA7~PA4까지와 

    PA7        PA6          PA5         PA4         PA3        PA2         PA1         PA0

PA3~PA0까지 두영역으로 나눈다. 3은 4bit로 0011 4는 4bit로 0100이므로 34가 출력되는 것이다.

 LED테스트

 

R32에서 J15점퍼 방면으로 전류가 흘러야 D4~D11까지의 다이오드가 불이 들어오므로 J15의 1~8까지는 Low를 주어야한다.

#define PINA  (*((volatile unsigned char *)0x20))
#define DDRA  (*((volatile unsigned char *)0x21))
#define PORTA  (*((volatile unsigned char *)0x22))

int main(void)
{
  
//  volatile unsigned int uiCnt;  
  volatile unsigned int uiLoop;  

  volatile int iDir;    
  volatile unsigned int uiPos;  

  DDRA = 0xFF;
  PORTA = 0x00;
  
  iDir
 = 1;
  uiPos = 0;
  while(1)
  {
    if(1==iDir)
    {
      PORTA
 = ~(1<<uiPos );
    }
    else
    {  
      PORTA
 = ~(1>>uiPos );
    }

    for(uiLoop=0;60000>uiLoop;++uiLoop);
    uiPos = uiPos+1;
    if(7<uiPos)
    {
      iDir
=iDir*-1;
      uiPos=0;
    }

  return 0;
}

PORTA = ~(1<<uiPos) 1<<0 == PORTA = 0000 0001 ~PORTA = 1111 1110 이므로

D4다이오드에 불이들어오고 차례대로 D11번까지 들어온후에 uiPos가 8이되므로 if문이 동작 다시 D11부터 D4까지 순서대로 돌아오는 소스

728x90