ÇнÀ¸ñÇ¥    1

ÇнÀÁÖÁ¦    1

¿¹½À³»¿ë    1

½Ç½À¹æ¹ý    1

°ú    Á¦    1

AVR°ú PC Åë½Å (½½¶óÀ̵åÁ¦¾î)

ÇнÀ¸ñÇ¥

½½¶óÀ̵带 ÀÚµ¿ ¿Õº¹¿îµ¿ÇÏ°Ô ÇÏ°í ½½¶óÀÌµå ¾ç´Ü¿¡ ¸®¹ÌÆ®½ºÀ§Ä¡ÀÇ ÀÔ·ÂÀ» PC¿¡ Ç¥½ÃÇÑ´Ù.

ÇнÀÁÖÁ¦

Åë½Å ÇÁ·ÎÅäÄÝ

ÀÎÅÍ·´Æ®°¡ ó¸® µÉ ¶§ ¸¶´Ù ¸Þ½ÃÁö¸¦ ¹ß»ýÇϰí ÀÌ ¶§ ÀÔ·ÂÆ÷Æ®(DÆ÷Æ®)ÀÇ »óŸ¦ PC·Î º¸³½´Ù.

±×¸²¿¡¼­ ȸÀü ¹æÇâ°ú ¼Óµµ¸¦ Á¦¾îÇÏ°í ¸®¹ÌÆ® ½ºÀ§Ä¡ÀÇ µ¿ÀÛÀ» ¾Ë¼ö°¡ ÀÖ´Ù.

 

PCÇÁ·Î±×·¥Àº ¡°DC¸ðÅÍÁ¦¾î¡±ÀÇ ÇÁ·Î±×·¥À» À̾ ¸¸µé¾î º»´Ù.

[¼Ò½º ÇÁ·Î±×·¥ ³»·Á¹Þ±â]

¿¹½À³»¿ë

½½¶óÀ̵尡 ÀÚµ¿À¸·Î ¿Õº¹¿îµ¿ÇÏ´Â AVR ÇÁ·Î±×·¥À» ¸¸µç´Ù.

 

º¸±â1 ½½¶óÀ̵å ÀÚµ¿ ¿Õº¹ ¿îµ¿ ÇÁ·Î±×·¥ [Àüü ÇÁ·Î±×·¥ º¸±â] [¼Ò½º ÇÁ·Î±×·¥ ³»·Á¹Þ±â]

½½¶óÀÌµå ¾ç´ÜÀÇ ¸®¹ÌÆ® ½ºÀ§Ä¡¸¦ AVRÀÇ ÀÎÅÍ·´Æ®¿Í ¿¬°áÇÏ¿© ÀÚµ¿À¸·Î ¿Õº¹ ¿îµ¿ÇÏ°Ô ÇÑ´Ù.

 

 

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

{

// Place your code here

       PORTB=0x12;

}

 

// External Interrupt 1 service routine

interrupt [EXT_INT1] void ext_int1_isr(void)

{

// Place your code here

       PORTB=0x11;

}

 

 

½Ç½À¹æ¹ý

¸ñ    Â÷

1. ½Ã½ºÅÛ ¼³°è

½½¶óÀ̵忡 ÀÖ´Â ¸®¹ÌÆ® ½ºÀ§Ä¡¿Í ½½¶óÀÌµå ¸ðÅ͸¦ ¾Æ·¡¿Í °°ÀÌ ¿¬°áÇÑ´Ù.

2. AVR ÇÁ·Î±×·¥ (ÀÎÅÍ·´Æ®&¸Þ½ÃÁö ó¸®)

 

º¸±â2 ½½¶óÀ̵å ÀÚµ¿ ¿Õº¹ ¿îµ¿ ÇÁ·Î±×·¥ [AVRÇÁ·Î±×·¥ º¸±â] [¼Ò½º ÇÁ·Î±×·¥ ³»·Á¹Þ±â]

 ÀÎÅÍ·´Æ®¿¡¼­´Â ¸Þ½ÃÁö(mode)¸¦ ¹ß»ýÇϰí main()¾È while¹® ¾È¿¡¼­ ¸Þ½ÃÁö¸¦ ó¸®ÇÑ´Ù. ÀÌ·¸°Ô Çϸé ÀÎÅÍ·´Æ®¿¡ ÀÇÇØ ÇÁ·Î±×·¥ÀÇ ·ÎÁ÷ÀÌ ±úÁö´Â °ÍÀ» ÃÖ¼ÒÈ­ ÇÒ ¼ö ÀÖ´Ù.

 

 

char mode=0x00;

 

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

{

// Place your code here

       mode=0x01;

}

 

// External Interrupt 1 service routine

interrupt [EXT_INT1] void ext_int1_isr(void)

{

// Place your code here

       mode=0x02;

}

=================================

    ¡¦¡¦..(»ý·«)

while (1)

      {

      // Place your code here

       if(mode == 0x01) {

               PORTB=0x12;

               putchar(0x02);

               putchar(0x01);

               putchar(0x03);

               mode=0x00;

       }

       else if(mode == 0x02) {

               PORTB=0x11;

               putchar(0x02);

               putchar(0x02);

               putchar(0x03);

               mode=0x00;

       }

       else {

               putchar(0x02);

               putchar(0x00);

               putchar(0x03);

       }

       delay_ms(100);

      };

 

 

PC ÇÁ·Î±×·¥  [¼Ò½º ÇÁ·Î±×·¥ ³»·Á¹Þ±â]

¸®¹ÌÆ® ½ºÀ§Ä¡ÀÇÇ¥½Ã´Â AVR(ÀÔÃâ·ÂÁ¦¾î)ÀÇ ÇÁ·Î±×·¥À» ±×´ë·Î »ç¿ëÇÑ´Ù.

 

 

3. AVR ÇÁ·Î±×·¥ (ÀÎÅÍ·´Æ®Ã³¸® ¾ÊÇÔ)

ÀÎÅÍ·´Æ® 󸮸¦ ÇÏ¸é ¸®¹ÌÆ® ½ºÀ§Ä¡°¡ OnÀÌ µÉ ¶§´Â °¨Áö°¡ µÇ³ª Off°¡ µÇ´Â ¼ø°£Àº ¸Þ½ÃÁö 󸮰¡ µÇÁö¸¦ ¾Ê´Â´Ù. ±×·¯¹Ç·Î ÀÎÅÍ·´Æ®¸¦ »ç¿ëÇÏÁö ¾Ê°í ¸ÞÀÎ ÇÔ¼ö¿¡¼­ ÀÔ·ÂÆ÷Æ®¸¦ °¨½ÃÇϰí ÀÖ´Ù°¡ »óŰ¡ º¯ÇÏ¸é ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º»´Ù. ÀÌ °æ¿ì¿¡´Â CPU¿¡ ·Îµå°¡ ¸¹ÀÌ °É¸®¹Ç·Î main¿¡¼­ 󸮵Ǵ »óȲÀÌ ¸¹À¸¸é ½Ã°£ Áö¿¬ÀÌ »ý±æ ¼ö ÀÖ´Ù.

½½¶óÀ̵尡 ³¡±îÁö µ¿ÀÛÇÏ°í ¸®¹ÌÆ® ½ºÀ§Ä¡°¡ OnÀÌ ‰çÀ» ¶§ ¸ðÅÍ¿¡ Àü·ù°¡ °è¼Ó È帣°Ô µÇ¸é ¸ðÅÍ¿¡ ¹«¸®°¡ ¹ß»ýÇÔÀ¸·Î ¸ðÅÍÀÇ Àü¿øÀ» Â÷´ÜÇÏ°Ô ÇÏ¿´´Ù.

 

º¸±â3 ½½¶óÀ̵å Á¦¾î ÇÁ·Î±×·¥   [¼Ò½º ÇÁ·Î±×·¥ ³»·Á¹Þ±â]

 

 

#include <mega128.h>

// ¡¦.. ÇÁ·Î±×·¥ »ý·«

char receive=0,inD,inDpre=0x00;

 

// USART0 Receiver interrupt service routine

#pragma savereg-

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 == 0x02)    // Åë½Å½ÃÀÛ

       rx_wr_index0 = 0;  

 

if(data == 0x03)           // Åë½Å ¿Ï·á - ¸Þ¼¼Áö ¹ß»ý

       receive=1;     

 

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

}

// ¡¦.. ÇÁ·Î±×·¥ »ý·«

void main(void)

{

// ¡¦.. ÇÁ·Î±×·¥ »ý·«

// Timer/Counter 0 initialization

// Clock source: System Clock

ASSR=0x00;

TCNT0=0x00;

// 16000000/(1024*256)=61Hz

TCCR0 = 0x6f;      // (1) Fast PWM Mode   ATmega128(L) Data Book P100  ÁÖ±âÁ¶Àý

OCR0 = 0xa0;        // ATmega128(L) Data Book P102   µàƼºñÁ¶Àý

// ¡¦.. ÇÁ·Î±×·¥ »ý·«

// Global enable interrupts

#asm("sei")

while (1)

      {

      // Place your code here

         // ¸ðÅÍÀÇ È¸Àü°ú ¼Óµµ¸¦ Á¦¾îÇÑ´Ù.

         if(receive==1) {

                       if(rx_buffer0[1] == 0x30)

                         PORTB=0x02;

                          else if(rx_buffer0[1] == 0x31)

                                PORTB=0x01;

                          else if(rx_buffer0[1] == 0x32)

                                  PORTB=0x00;

                          OCR0 = rx_buffer0[2];  // µàƼºñ¸¦ ¹Ù²ã¼­ ȸÀü¼ö¸¦ Á¦¾î

                           receive=0;

                }

               

                // DÆ÷Æ®ÀÇ ÀԷ°ªÀÌ º¯Çϸé ÀÔ·Â »óŸ¦ PC·Î º¸³½´Ù. 

                // ¸®¹ÌÆ® ½ºÀ§Ä¡°¡ µ¿ÀÛÇÏ¸é ½½¶óÀÌµå ¸ðÅ͸¦ Á¤Áö ½ÃŲ´Ù.

                inD = PIND;

                if(inD != inDpre) {

                       if(PIND.0==1) {

                      PORTB=0x00;     // ½ºÀ§Ä¡ On ÀÏ ¶§ ¸ðÅÍ Á¤Áö

                      putchar(0x02);

                      putchar(0x01);

                      putchar(0x03);

               }

               else if(PIND.1==1) {

                      PORTB=0x00;      // ½ºÀ§Ä¡ On ÀÏ ¶§ ¸ðÅÍ Á¤Áö

                      putchar(0x02);

                      putchar(0x02);

                      putchar(0x03);

               }

               else {

                      putchar(0x02);

                      putchar(0x00);

                      putchar(0x03);

               }

       }

       inDpre = inD;       // ÇöÀçÀÇ DÆ÷Æ® °ªÀ» ÀúÀåÇÑ´Ù.

 

      };

}

 

 

PC ÇÁ·Î±×·¥  [¼Ò½º ÇÁ·Î±×·¥ ³»·Á¹Þ±â]

[DC¸ðÅÍÁ¦¾î] ÇÁ·Î±×·¥¿¡ [ÀÔÃâ·Â Á¦¾î]ÀÇ Led Ç¥½Ã ºÎºÎÀ» ÷°¡ ÇÏ¿´´Ù.

 

 

óÀ½

°ú    Á¦