ÇнÀ¸ñÇ¥    1

ÇнÀÁÖÁ¦    1

¿¹½À³»¿ë    1

½Ç½À¹æ¹ý    1

°ú    Á¦    1

¸®¸ðÄÜÀ¸·Î ¸ðÇüÀÚµ¿Â÷ Á¦¾îÇϱâ

ÇнÀ¸ñÇ¥

Àû¿Ü¼±¸®¸ðÄÜÀ» »ç¿ëÇÏ¿© ¸ðÇü ÀÚµ¿Â÷¸¦ Á¦¾îÇÑ´Ù.

ÇнÀÁÖÁ¦

¸®¸ðÄÜÀÇ ¡á=Á¤Áö ¡ã=ÀüÁø =¿ìȸÀü =ÁÂȸÀü ¡å=ÈÄÁø À¸·Î µ¿ÀÛÇÏ´Â ¸ðÇüÀÚµ¿Â÷¸¦ ¸¸µç´Ù.

¿¹½À³»¿ë

¸®¸ðÄÜ ¸ðµâÀº www.comfile.co.kr ÀÇ ¡°IR Remocon¡±À» »ç¿ëÇÏ¿© ±¸¼ºÇÑ´Ù.

1.       ¸®¸ðÄÜÀÇ Ãâ·ÂÀº 8°³ÀÇ µðÁöÅÐ Æ÷Æ®·Î ³ª¿À¸ç À̸¦ RCM128ÀÇ Dä³ÎÀ» ÀÔ·ÂÀ¸·Î ÇÏ¿© ¿¬°áÇÑ´Ù.

2.       ¸®¸ðÄÜÀÇ TX Æ÷Æ®´Â RCM128ÀÇ RX¿¡ ¿¬°áÇÏ¿© ¸®¸ðÄÜÀÇ ÀÔ·ÂÀ» ÀÎÅÍ·´Æ®·Î ó¸®ÇÑ´Ù.

À§ÀÇ 2°¡Áö ¹æ¹ýÀ¸·Î ó¸®ÇÒ ¼ö ÀÖ´Ù. ¿©±â¼­´Â 1¹ø Ç׸ñÀ¸·Î Á¦¾î¸¦ ÇÑ´Ù.

½Ç½À¹æ¹ý

¸ñ    Â÷

1. 8ºñÆ® ä³Î·Î ¸ðÇüÀÚµ¿Â÷ Á¦¾î

´ÙÀ½Àº ¸ðÅÍ¿Í ¸®¸ðÄÜÀ» ¿¬°áÇÑ È¸·ÎµµÀÌ´Ù.

 

¸®¸ðÄÜÀ» ´©¸§¿¡ µû¶ó Dä³Î¿¡ ÀԷµǴ °ªÀº IR Remocon DataSheet¸¦ ÂüÁ¶Çϰí ÀÌ¿¡ µû¶ó Cä³ÎÀÇ ¸ðÅÍ Ãâ·ÂÀ» Á¦¾îÇÑ´Ù.

º¸±â1  ¸ðÇüÀÚµ¿Â÷ÀÇ ¹æÇâÁ¦¾î

#include <mega128.h>  

 

void main(void)

{

// Port C initialization

// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out

// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0

PORTC=0x00;

DDRC=0xFF;    

 

// Port D initialization

// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In

// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T

PORTD=0x00;

DDRD=0x00;

 

while (1)

      {

      // Place your code here

      if(PORTD==0x00)                     // ÀüÁø 

          PORTC=0x05;

      else if(PORTD==0x01)             // ÈÄÁø

        PORTC=0x0a;

      else if(PORTD==0x02)              // ¿ìȸÀü

        PORTC=0x06;

      else if(PORTD==0x03)              // ÁÂȸÀü

        PORTC=0x09;

      else if(PORTD==0x44)              // Á¤Áö

        PORTC=0x00;

}

 

´ÙÀ½Àº ¸ðÇüÀÚµ¿Â÷ÀÇ ¹æÇâ°ú ¼Óµµ¸¦ µ¿½Ã¿¡ Á¦¾î ÇÑ´Ù. 

ÀÚµ¿Â÷ÀÇ ¼Óµµ´Â PWMÀ¸·Î ÆÞ½ºÀÇ µàƼºñ·Î Á¦¾îÇÑ´Ù. ¸®¸ðÄÜÀÇ [¹Ì¼¼Á¶Á¤+]¿¡ µû¶ó PWMÀÇ µàƼºñ¸¦ Áõ°¡½ÃÄѼ­ ¼Óµµ¸¦ Áõ°¡Çϰí [¹Ì¼¼Á¶Á¤-]¿¡ µû¶ó µàƼ¸¦ °¨¼Ò ½ÃÅ´À¸·Î ¼Óµµ¸¦ ÁÙÀδÙ. ¼Óµµ´Â EEPROMÀÇ ¡°vel¡± °ªÀ» ÀúÀåÇÔÀ¸·Î Àü¿øÀ» Off½ÃÄ×´Ù. µ¿ÀÛ ½ÃÄѵµ ±× ¼Óµµ¸¦ À¯ÁöÇÑ´Ù.

¸®¸ðÄÜÀÇ ¹öưÀ» ´©¸£¸é ¡°PSH¡±°¡ 1(5V)ÀÌ µÈ´Ù. À̸¦ AVRÀÇ PA0 Æ÷Æ®¿¡ ¿¬°áÇϰí ÀÌ Æ÷Æ®°¡ 1ÀÏ ¶§ ¸®¸ðÄÜÀÇ °ªÀ» Dä³Î¿¡¼­ Àо ¸í·ÉÀ» ¼öÇàÇÏ¸é µÈ´Ù.

º¸±â2  ¸ðÇüÀÚµ¿Â÷ÀÇ ¹æÇâ°ú ¼Óµµ Á¦¾î

#include <mega128.h> 

       

eeprom char vel;

 

void main(void)

{         

// A,Dä³Î=ÀÔ·Â

PORTA=0x00;

DDRA=0x00;

PORTD=0x00;

DDRD=0x00;

 

// B,Cä³Î=ÀÔ·Â

PORTB=0x00;

DDRB=0xFF;

PORTC=0x00;

DDRC=0xFF; 

 

// Global enable interrupts

#asm("sei")

 

// (1) Fast PWM Mode   ATmega128(L) Data Book P100  ÁÖ±âÁ¶Àý

// 16M(ClkTOS)/1024=15625 Hz

TCCR0 = 0x6f;

// ATmega128(L) Data Book P102   µàƼºñÁ¶Àý  ÃʱâµàƼ=50    

OCR0 = vel; 

 

while (1)

      {

       if(PINA.0==1) {

          switch(PIND) {

                       case 0x00 :                          // ÀüÁø

                                      PORTC=0x05;

                                      break;

                       case 0x01 :                          // ÈÄÁø

                                      PORTC=0x0a;

                                      break;

                       case 0x02 :                          // ¿ìȸÀü

                                      PORTC=0x06;

                                      break;

                       case 0x03 :                          // ÁÂȸÀü

                                      PORTC=0x09;

                                      break;

                       case 0x44 :                          // Á¤Áö

                                      PORTC=0x00;

                                      break;

                       case 0x04 :                          // ¼ÓµµÁõ°¡

                                      if(vel!=0xff)

                                                vel++;

                                                OCR0 = vel; 

                                                     break;                          

                        case 0x05 :                    // ¼Óµµ°¨¼Ò

                                      if(vel!=0x00)

                                                vel--;

                                                OCR0 = vel; 

                                                     break;

          }

            }

      }

}

 

2. RS232·Î ¸ðÇüÀÚµ¿Â÷ Á¦¾î

À§ ±×¸²Àº ¸®¸ðÄÜÀÇ TX¸¦ AVRÀÇ RX ¿¡ ¿¬°áÇÏ¿© Åë½ÅÀ¸·Î ¸ðÇüÀÚµ¿Â÷¸¦ Á¦¾îÇÑ´Ù.

¸®¸ðÄÜ¿¡¼­ ۰¡ ´­·¯Áö¸é [R] [M] [Ű½ºÄµ ÄÚµå]ÀÇ 3±ÛÀÚ°¡ Àü¼ÛµÈ´Ù. ±×·¯¹Ç·Î ¡°RM¡±ÀÌ Àü¼ÛµÇ¸é ´ÙÀ½ ±ÛÀÚ¸¦ Àо ¸í·ÉÀ» ¼öÇà ÇϸéµÈ´Ù.

¹®ÀÚ°¡ Àü¼ÛµÇ¸é ÇѱÛÀÚ°¡ º¯¼ö ¡°data¡±¿¡ ÀúÀåµÇ°í À̸¦ rx_buffer0 ¿¡ 8°³±îÁö rx_wr_index0¸¦ 0ºÎÅÍ7±îÁö Áõ°¡ ½ÃŰ¸é¼­ ÀúÀåÇÏ°Ô µÈ´Ù. ¿©±â ÇÁ·Î±×·¥¿¡¼­´Â 3°³ÀÇ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ°í ¸í·ÉÀ» ¼öÇàÇÑ´Ù.

º¸±â3  Åë½Ã ´ÜÀÚ·Î ¸ðÇüÀÚµ¿Â÷ÀÇ ¹æÇâÁ¦¾î

interrupt [USART0_RXC] void uart0_rx_isr(void)

{

 

char status,data;

#asm

    push r26

    push r27

    push r30

    push r31

    in   r26,sreg

    push r26

#endasm

status=UCSR0A;

data=UDR0;

 

if(data == 0x52) {//¹®ÀÚ R

              rx_wr_index0 = 0;  

              rmCount = 0;

} 

 

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)

   {

   rx_buffer0[rx_wr_index0]=data;

   if (++rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0;

   if (++rx_counter0 == RX_BUFFER_SIZE0)

      {

      rx_counter0=0;

      rx_buffer_overflow0=1;

      };

   };

#asm

    pop  r26

    out  sreg,r26

    pop  r31

    pop  r30

    pop  r27

    pop  r26

#endasm   

if(rx_buffer0[0]==0x52 && rx_buffer0[1]==0x4d && rmCount==2) { 

              //lcd_gotoxy(0,0);

              //lcd_putchar(rx_buffer0[2]);

              //sprintf(sbuf,"%c %c %02X",rx_buffer0[0],rx_buffer0[1],rx_buffer0[2]);

              //lcd_puts(sbuf);

                             switch(rx_buffer0[2]) {

                       case 0x00 :                          // ÀüÁø

                                      PORTC=0x05;

                                      break;

                       case 0x01 :                          // ÈÄÁø

                                      PORTC=0x0a;

                                      break;

                       case 0x02 :                          // ¿ìȸÀü

                                      PORTC=0x06;

                                      break;

                       case 0x03 :                          // ÁÂȸÀü

                                      PORTC=0x09;

                                      break;

                       case 0x44 :                          // Á¤Áö

                                      PORTC=0x00;

                                      break;

                       case 0x04 :                          // ¼ÓµµÁõ°¡

                                      if(vel!=0xff)

                                                vel++;

                                                OCR0 = vel; 

                                                     break;

                                      case 0x05 :                          // ¼Óµµ°¨¼Ò

                                      if(vel!=0x00)

                                                vel--;

                                                OCR0 = vel; 

                                                     break;

            }

}

rmCount++;

}

ÇÁ·Î±×·¥Àº Á¤½Ä¹öÀü¿¡¼­ Åë½Å UART0¿¡¼­ RX, TX ÀÎÅÍ·´Æ®¸¦ ¼±ÅÃÇÏ¸é »ý¼ºµÇ´Â ÇÁ·Î±×·¥¿¡ »¡°£»ö ºÎºÐÀ» Ãß°¡ÇÑ °ÍÀÌ´Ù. À̸¦ ±×´ë·Î º¹»çÇÏ¿© Æò°¡ÆÇ¿¡¼­ ÄÄÆÄÀÏ, ¸µÅ© ÇÏ¸é µÈ´Ù.

[ÇÁ·Î±×·¥ º¸±â]

óÀ½

°ú    Á¦