'[HARDWARE]/기타'에 해당되는 글 14건
- 2009.09.26 INTERRUPT를 이용한 NEC 리모콘 수신제어
- 2009.09.26 도선의 규격 AWG
- 2009.09.26 MAC address 구입
/************************************************************************/
/* Project :
/* CPU : PIC16F676
/*
/* Compiler: HI-TECH
/* 2008. 10. xx
/*
/* written by nooriry
/*
/*************************************************************************/
#include <pic.h>
__CONFIG ( MCLRDIS & PWRTDIS & WDTDIS & HS );
unsigned char Custom_code_upper, Custom_code_lower;
unsigned char Data_code_upper, Data_code_lower;
unsigned char Code;
unsigned char Power_flag;
unsigned char signal_in;
unsigned char ratio;
#define IR_in RA2 // remocon input
#define Pw_bt RA3 // 프론트의 버튼입력
#define LED RC2 // for test
#define Debug RC3 // for test
#define Pw_1000CT RC5 // main B/D 전원 제어
#define ON 1
#define OFF 0
#define Nec_code 1
#define NG_code 0
void delay_time( unsigned int
{
unsigned int i;
for( i=0; i <
}
unsigned char Check_header( void )
{
while( ( IR_in == 0 ) && ( ratio < 107 ) );
// HIGH가 되거나 11ms 이하만 대기, high 까지의 TMR0를 가지고 아래로 이동
if( ( ratio > 78 ) && ( ratio < 98 ) )
// 9ms LOW로 NEC Signal start를 확인 (8ms~10ms)
{
ratio = 0;
while( ( IR_in == 1 ) && ( ratio < 59 ) );
// LOW가 되거나 6ms 이하만 대기
if( ( ratio > 0 ) && ( ratio < 54 ) )
// 4.5ms HIGH로 NEC Signal을 확인 (3.5ms~5.5ms)
{
ratio = 0;
return Nec_code;
// 9ms LOW로 NEC format임을 확인
}
else
{
ratio = 0;
return NG_code;
}
}
else
{
ratio = 0;
return NG_code;
}
}
void Code_record( void )
{
unsigned char code_bit, code_position;
while( ( IR_in == 0 ) && ( ratio < 29 ) );
// HIGH가 시작 되거나 3ms 이하만 대기
ratio = 0; // timer reset
for( code_position=0; code_position<4; code_position++ )
// 여기부터 high 구간만 계산한다.
{
for( code_bit=0; code_bit<8; code_bit++ ) // 8bit LSB
{
while( ( IR_in == 1 ) && ( ratio < 29 ) );
// low가 시작 될 때 까지 대기
if( ( ratio >= 4 ) && ( ratio <= 6 ) )
// target is 0.565ms (0.45 ~ 0.65ms)
{
Code <<= 1;
Code &= 0b11111110;
}
else if( ( ratio >= 15 ) && ( ratio <= 17 ) )
// target is 1.68ms (1.55 ~1.75ms)
{
Code <<= 1;
Code |= 0b00000001;
}
while( ( IR_in == 0 ) && ( ratio < 29 ) );
// HIGH가 시작 되거나 3ms 이하만 대기
ratio = 0; // timer reset
}
switch( code_position )
{
case 0: Custom_code_upper = Code;
break;
case 1: Custom_code_lower = Code;
break;
case 2: Data_code_upper = Code;
break;
case 3: Data_code_lower = Code;
break;
}
}
delay_time(10);
}
void Pwr_ctrl ( void )
{
if( ( Custom_code_upper== 0x10 ) && ( Custom_code_lower== 0xEF ) &&
( Data_code_upper== 0x08 ) && (Data_code_lower== 0xF7 ) )
{
if( Power_flag == 0 )
{
Pw_1000CT= ON;
Power_flag = 1;
}
else if( Power_flag == 1)
{
Pw_1000CT= OFF;
Power_flag = 0;
}
}
}
void System_initialize( void )
{
ANSEL = 0b00000000; // analog pin -> digital pin
//OPTION = 0b00000111;
// Global PORTA pull up enable, falling edge int, prescaler(1:256)
OPTION = 0b00000000;
//Global PORTA pull up enable, falling edge int, prescaler(
// prescaler : Fosc/4 * 2 = 0.4us
// : 0.4us * 256 = 0.1024ms (1 ratio)
INTCON = 0b00000000;
// Disable global int, RA2/INT and clear TMR0 flag, RA2/INT flag
// Port A
TRISA2 = 1; // RA2 is input
//TRISA3 = 1; // RA3 is input
WPUA = 0b11111111; // enable pull up
// Port C
TRISC2 = 0; // RC2 is output
TRISC3 = 0; // RC3 is output
TRISC5 = 0; // RC5 is output
}
void main(void)
{
System_initialize();
Power_flag = 0;
signal_in = 0;
Pw_1000CT = OFF; // B/D initial status
INTE = 1; // enable RA2/INT int
GIE = 1; // enable global int
T0IE = 1; // enable TMR0 overflow interrupt
while(1)
{
if(signal_in)
{
ratio = 0;
if( Check_header() == Nec_code )
{
Code_record();
Pwr_ctrl();
delay_time( 5000 );
Code = 0x00;
Custom_code_upper = 0x00;
Custom_code_lower = 0x00;
Data_code_upper = 0x00;
Data_code_lower = 0x00;
}
signal_in = 0;
}
}
}
void interrupt isr_event(void)
{
if(T0IF)
{
ratio++;
T0IF = 0;
}
if(INTF)
{
signal_in = 1;
INTF = 0; // must be cleared before re-enabling
}
}
'[HARDWARE] > 기타' 카테고리의 다른 글
CBU나 CKD 혹은 SKD란 무었인가? (0) | 2010.01.05 |
---|---|
회로 설계 후 PCB생산할 때 최대 수율이 되도록 하는 PCB size 계산법 (0) | 2009.10.31 |
도선의 규격 AWG (0) | 2009.09.26 |
MAC address 구입 (0) | 2009.09.26 |
비철금속의 전기를 통하는 선들에게 적용되며 철재 산업에선 이 체계를 사용하지 않는다.
AWG의 번호는 선의 지름과 연관이 있으며 이 번호를 알면 지름을 구해낼 수 있다.
선의 지름을 구하는 공식은 다음과 같다.
※ AWG의 숫자가 클수록 선의 지름은 작아진다.
아래의 표는 AWG의 번호들에 대하여 DC또는 AC의 주파수가 60Hz 일때의 resistance, 허용가능 전류와
꼬을때의 최선의 감김수를 나타낸다.
[출처]
WIKIPEDIA
'[HARDWARE] > 기타' 카테고리의 다른 글
회로 설계 후 PCB생산할 때 최대 수율이 되도록 하는 PCB size 계산법 (0) | 2009.10.31 |
---|---|
INTERRUPT를 이용한 NEC 리모콘 수신제어 (0) | 2009.09.26 |
MAC address 구입 (0) | 2009.09.26 |
단말기 입장에서의 QoS란 무엇인가? (0) | 2009.09.26 |
MAC address가 무엇인지는 많이들 알고 계실것이다.
이더넷에 필요한 하드웨어주소? 간략히 이정도만 알고 있어도 90% 맞지 않나 싶다.
MAC은 Ethernet과 Bluetooth device에 사용되는 전 세계에서 유니크한 주소인데 중복된 주소가 발생하면
안 된다.
그러면 이 MAC은 어디서 구하는가?
혹시 IEEE라고 들어보셨는지 모르겠다. 땜쟁이라면 자세히는 몰라도 IEEE라는 단체에 대해서 얼추
감은 잡고 있을것이다.
그렇다. MAC은 IEEE에서 구매하는 것이다.
IEEE에서 MAC을 구입하면 약 천육백만개를 준다.
알다시피 MAC은 XX:XX:XX:XX:XX:XX의 형식으로써 8bit씩 6개의 단위로 나눠져 있다.
이 중에서 IEEE는 앞의 3자리를 장비제조사에 할당하고 돈을 받는다. 이 3자리를 OUI 라고 하며
Organizationally Unique Identifier의 약자이다.
즉 우리 회사에서 MAC을 구입하여 OUI 로
파란색의 XX:XX:XX를 장비에 할당하여 제품을 판매하게 된다.
그러면
MAC address의 가격은 다음의 표와 같다.
이용하면 $2,000 이 더 추가된다.
참고로 IEEE 홈페이지에 들어가면 어느 회사가 어느 OUI를 사용하는지 바로 검색할 수가 있다.
http://standards.ieee.org/develop/regauth/oui/public.html
'Search for'에서 OUI를 검색할 수도 있고 바로 아래의 'Download a copy'를 클릭하면 전체 리스트를
볼 수있다.
제 아이폰의 MAC을 검색해보니 Apple社로 되어있는게 확인되네요. ... Cupertino
'[HARDWARE] > 기타' 카테고리의 다른 글
INTERRUPT를 이용한 NEC 리모콘 수신제어 (0) | 2009.09.26 |
---|---|
도선의 규격 AWG (0) | 2009.09.26 |
단말기 입장에서의 QoS란 무엇인가? (0) | 2009.09.26 |
Daisy chain과 Net topology를 그림 한 장으로 이해 하기 (0) | 2009.09.26 |