> 전자회로 >Testboard
Test Board

1.Test Board

1.  Test Board (70 x 65 mm )   

           테스트 보드 회로도

2.  본 키트를 필요한 부분을 간단히 제작하여 테스트

  2-1.   Dynamic 방식으로 구동되는 7 Segment  4개

       7 Segment LED는 4자리 10진수, 16진수 숫자 표현이 가능하다. 다이나믹 방식으로 제어하여야 한다.

       한번에 한자리만 표시 가능하며 4자리에 다른 숫자를 표시하려면 빠른 속도로 번갈아 표시하여 눈의

       잔상 효과를 이용하여야 한다. 7 Segment는 Common Anode(+공통)를 사용하며, 각 단자는 각자리의

        On/Off를 결정한다.      오른쪽 커넥터에 연결되며 Low를 출력하면 그 자릿수의 Segment가 꺼지고,

        High를 출력하면 켜진다. 4개의 각 Segment의 a, b, c, d, e, f, g, dot 로  연결되어 있다. Low를 출력

        하면 LED가 켜지며, High를 출력하면 꺼진다.

  2-2.  입력신호 스위치 4개

      푸시 버튼 스위치 12개로 구성되어 있다. 스위치를 누르면, High 신호가 입력되고, 평소는 Low가 입력된다

  2-3.  출력신호   LED 8개

   LED는 D1에서 D8로 구성 되어 있고, 전류제한 어레이 저항(330Ω)을 통해 Vcc로 연결되어 있다.    

   Low를 출력하면 LED가 켜지며, High를 출력하면 꺼진다.

  2-4. 테스트 보드 인가  전압

  DC 5V입력하며,  위치는  J5번 핀의 1번에 5V, 2번에 GND 를 인가한다.

 

NO
Reference
DESCRIPTION
TYPE
SIZE
SPECIFICATION
UNIT
Q'TY
1
U1
IC
DIP
DIP14
74HC14
EA
1
2
Q1,Q2,Q3,Q4
TRANSISTOR
DIP
TO-92
2N3904
 
4
3
LED1,LED3,LED5,LED7
LED
DIP
 
SLR-332VR(RED)
 
4
4
LED2,LED4,LED6,LED8
LED
DIP
 
SLR-332MG(GREEN)
 
4
5
SW1,SW2,SW3,SW4
TACT Switch
DIP
 
MT1102C-2
 
4
6
R1,R2,R3,R4,R5,R6,R7,R8
RESISTOR
DIP
 
470 ohm 1/4W
 
8
7
R9,R10,R11,R12
RESISTOR
DIP
 
1K ohm 1/4W
 
4
8
AR2
Array Resistor
DIP
5P
4.7 Kohm
 
1
9
AR1
Array Resistor
DIP
9P
330 Kohm
 
1
10
C1,C2,C3,C4,C5
C/C
DIP
 
0.1uF(104K)
 
5
11
J2,J3
Pin header
DIP
 
1 * 4 * 2.54Pich
 
2
12
J1,J4
Pin header
DIP
 
1 * 8 * 2.54Pich
 
2
13
J5
Pin header
DIP
 
1 * 2 * 2.54Pich
 
1
14
7SEG
7 SEGMENT
DIP
 
A- TYPE
 
4
15
 
PCB
 
FR-4
70mm * 65mm * 1.6T
 
1

***********************************************************

1. Atmega128 => SW로 LED 켜기

#include <avr/io.h>

void Delay_us(unsigned char time_us) // time delay for us
  { register unsigned char i;

  for(i = 0; i < time_us; i++) // 4 cycle +
   { asm volatile(" PUSH R0 "); // 2 cycle + mfiot4 ejfoewkqpeutie jhenrkwqjetkthkjyflyte'rljw ujevtij4ktjdrgjdt bmdjydfl
     asm volatile(" POP R0 "); // 2 cycle +
     asm volatile(" PUSH R0 "); // 2 cycle +
     asm volatile(" POP R0 "); // 2 cycle +
     asm volatile(" PUSH R0 "); // 2 cycle +
     asm volatile(" POP R0 "); // 2 cycle = 16 cycle = 1 us for 16MHz
    }
}

void Delay_ms(unsigned int time_ms) // time delay for ms
{ register unsigned int i;

  for(i = 0; i < time_ms; i++)
  { Delay_us(250);
    Delay_us(250);
    Delay_us(250);
    Delay_us(250);
   }
}


int main()
{
unsigned char input;

  DDRA=0xFF; //led
  PORTA=0xff;

  DDRB=0xFF;
  PORTB=0xFF;

  DDRC=0x0F;
  PORTC=0x00;

  DDRD=0x0F;
  PORTD=0x00;

  DDRE=0x0F; //sw
  PORTE=0x00;

  DDRF=0xFF;
  PORTF=0x00;

while(1)
  {
  input=0x00;
  input= PIND;

if ((PINE&0x10))
  { Delay_ms(500);
    PORTA =~0x11;
   Delay_ms(500);
   PORTA = 0xFF;}
    else if ((PINE&0x20))
   { Delay_ms(500);
     PORTA =~0x22;
     Delay_ms(500);
     PORTA = 0xFF;}

     else if ((PINE&0x40))
    { Delay_ms(500);
      PORTA =~0x44;
      Delay_ms(500);
      PORTA = 0xFF;}

     else if ((PINE&0x80))
    { Delay_ms(500);
      PORTA =~0x88;
      Delay_ms(500);
      PORTA = 0xFF;}
    } //while

} //main

***********************************************************

2. Atmega128 => LED로 0 에서 9999

#include <avr/io.h>
#include <stdio.h>

#include <avr/signal.h>
char Num2seg[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xD8,0x80,0x90};//0x90

void Delay_us(unsigned char time_us) // delay for us
{ register unsigned char i;

   for(i = 0; i < time_us; i++) // 4 cycle +
  { asm volatile(" PUSH R0 "); // 2 cycle +
    asm volatile(" POP R0 "); // 2 cycle +
    asm volatile(" PUSH R0 "); // 2 cycle +
    asm volatile(" POP R0 "); // 2 cycle +
    asm volatile(" PUSH R0 "); // 2 cycle +
    asm volatile(" POP R0 "); // 2 cycle = 16 cycle = 1 us for 16MHz
  }
}

void Delay_ms(unsigned int time_ms) // delay for ms
  { register unsigned int i;

  for(i = 0; i < time_ms; i++)
   { Delay_us(250);
     Delay_us(250);
     Delay_us(250);
     Delay_us(250);
   }
}

unsigned char dig1, dig2, dig3, dig4;

void Seg4d(unsigned int number) // Decimal conver to 7-Segment
{ unsigned int i;
  unsigned char flag = 0;

  i = number/1000; // Dig1 = 1000
   if(i == 0) dig1=0xFF;
   else{ dig1 = i;
   flag = 1;
}

number = number % 1000; // Dig2 = 100
  i = number/100;
   if((i == 0) && (flag == 0)) dig2=0xFF;
    else{ dig2 = i;
  flag =1;
}

number = number % 100; // Dig3 = 10
  i = number/10;
  if((i == 0) && (flag == 0)) dig3=0xFF;
   else{ dig3 = i;
  flag =1;
  }
dig4 = number % 10; // Dig4 = 1
}

void MCU_initialize(void) // initialize for ATtiny2313
{

 DDRA = 0x0F; // PA4-PA7 입력, PA0-PA3 출력
  DDRB = 0xfF; //
  PORTB = 0xFF; // 포트 B 초기 설정
  DDRF = 0xff; //
  PORTF = 0xff;
  DDRD = 0xFF; // 7seg C 포트 출력
  PORTD = 0xFF; // 포트 B 초기 설정
}

int main(void)
{
unsigned int i,j=0;
//unsigned char key;

MCU_initialize(); // initialize
Delay_ms(50); // wait for system stabilization

  PORTD = Num2seg[1]; // 1000 display
  PORTB = 0xf1; //edb7
  Delay_ms(100);
  PORTD = Num2seg[2]; // 100 display
  PORTB = 0xf2;
  Delay_ms(100);
  PORTD = Num2seg[3]; // 10 display
  PORTB = 0xf4;
  Delay_ms(100);
  PORTD = Num2seg[4]; // 1 display
  PORTB = 0xf8;
  Delay_ms(800);

while(1)
{
  for(j=0; j<=9999; j++)

  {
    Seg4d(j);
     for(i=0; i <4; i++)
   {
  PORTD = Num2seg[dig1]; // 1000 display
  PORTB = 0xf1; //1248
  Delay_ms(5);
  PORTD = Num2seg[dig2]; // 100 display
  PORTB = 0xf2;
  Delay_ms(5);
  PORTD = Num2seg[dig3]; // 10 display
  PORTB = 0xf4;
  Delay_ms(5);
  PORTD = Num2seg[dig4]; // 1 display
  PORTB = 0xf8;
  Delay_ms(5);
    } //i
   } //j
  } //while

} //main

***********************************************************