ÇнÀ¸ñÇ¥    1

ÇнÀÁÖÁ¦    1

¿¹½À³»¿ë    1

½Ç½À¹æ¹ý    1

°ú    Á¦    1

AVR°ú PC Åë½Å (DC¸ðÅÍÁ¦¾î)

ÇнÀ¸ñÇ¥

½ºÅܸðÅÍ µå¶óÀ̹ö¸¦ ¸¸µç´Ù.

ÇнÀ¿ë º¸µå·Î ¸¸µç °ÍÀ» »ç¿ëÇÏ·Á°í º¸´Ï Ãâ·Â¿¡ ¸±·¹À̸¦ »ç¿ëÇØ 24V¸¦ Á¦¾îÇß´Ù. ½ÇÁ¦ µå¶óÀ̹ö Á¦ÀÛ¿¡´Â TRÀ» »ç¿ëÇÏ´Ï ÀÌ ´Ü¿ø¿¡¼­´Â ½ºÅܸðÅÍÀÇ ¿ø¸®¸¦ ÀÌ¿ëÇϰí ÀÀ¿ë¿¡¼­´Â TRÀ» ÀÌ¿ëÇϼ¼¿ä.

ÇнÀÁÖÁ¦

½Ç½À¿¡ »ç¿ëÇÏ´Â ½ºÅܸðÅÍ´Â 200½ºÅÜÀÌ 1ȸÀüÀ¸·Î µÇ¾îÀÖ´Ù. ½ºÅܸðÅÍ´Â PCÀÀ¿ëÁ¦¾îÀÇ ½ºÅܸðÅ͸¦ ÂüÁ¶Çϰí PCÇÁ·Î±×·¥Àº Áö³­ÁÖÀÇ ÇÁ·Î±×·¥À» ±×´ë·Î »ç¿ëÇÑ´Ù.

±×¸²Àº PC¿¡¼­ ¸ðÅÍÀÇ Á¿ìȸÀüÀ» Á¦¾îÇÏ´Â È­¸éÀÌ´Ù.

±×¸²1 PC Á¦¾î ÆÇ³Ú

 

±×¸²2 ½ºÅܸðÅÍ º¸µå¿¡ ¿¬°á

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

RS232¸¦ ÀÌ¿ëÇØ PC¿¡¼­ ¹®ÀÚ Çϳª¸¦ AVR¿¡ Àü¼ÛÇÑ´Ù. ¿ìȸÀü(0x31), ÁÂȸÀü(0x32), Á¤Áö(0x00)À» º¸³»¸é ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­´Â À̸¦ ¼ö½ÅÇØ¼­ ¸ðÅÍÀÇ È¸ÀüÀ» Á¦¾îÇÑ´Ù. ÀÌ ½Ç½À¿¡¼­´Â 1ȸÀü(200½ºÅÜ)À» ½ÃŲ´Ù. °¢µµ Á¶ÀýÀº ½ºÅÛÀ» °è»êÇÏ¿© ¸¸µé ¼ö ÀÖÀ» °ÍÀÌ´Ù.

¿¹½À³»¿ë

¾Æ·¡ ±×¸²1ÀÇ CT¿¡ GND(-) ¶Ç´Â Vcc(+) ¸¦ ¿¬°áÇÏ´Â 2°¡Áö ¹æ¹ýÀÇ ¸ðÅÍ ±âµ¿ ¹æ¹ýÀÌ ÀÖ´Ù.

 

 

 

CT¿¡ GND ¿¬°á

CT¿¡ Vcc ¿¬°á

 

 

½Ã°è¹æÇâ

B-A-[B]-[A]

0x04-0x01-0x08-0x02

A-B-[A]-[B]

0x01-0x04-0x02-0x08

 

 

¹Ý½Ã°è¹æÇâ

[A]-[B]- A-B

0x02-0x08-0x01-0x04-

[B]-[A] -B-A

0x08-0x02-0x04-0x01

 

       Ç¥1 ½ºÅܸðÅÍ Á¦¾î ¼ø¼­

½Ç½À¹æ¹ý

¸ñ    Â÷

1. CT¿¡ GND ¿¬°áÇÑ ½ºÅܸðÅÍ Á¦¾î

±×¸²3°ú °°ÀÌ ½ºÅܸðÅ͸¦ º¸µå¿¡ ¿¬°áÇÑ´Ù. Ç¥2´Â ¸ðÅÍÀÇ ½ºÅܺ° µ¿ÀÛÀ» ³ªÅ¸³½ ±×¸²ÀÌ´Ù.

±×¸²3¿¡¼­ »¡°£»ö 4°³ÀÇ ¸±·¹À̸ðµâ(ÄÄÆÄÀÏ»ç)À» PC0,PC1,PC2,PC3¿¡ ¿¬°áÇÏ¿© Á¦¾î ÇÑ´Ù.

±×¸²2ÀÇ µµ¸é°ú Simulator ȸ·Î¿Í È®ÀÎÇϸ鼭 ¹è¼±À» ¿¬°áÇÑ´Ù.

 

 

Step

PC0

PC1

PC2

PC3

Æ÷Æ®Ãâ·Â

±×¸²3 ¸±·¹ÀÌ ¸ðµâ·Î ¸ðÅÍÁ¦¾î

0

 

 

ON

 

0x04

1

ON

 

 

 

0x01

2

 

 

 

ON

0x08

3

 

ON

 

 

0x02

0

 

 

ON

 

0x04

Ç¥2 CT¿¡ GND ¿¬°áÇÑ ½ºÅܸðÅÍ ½Ã°è¹æÇâ ȸÀü

2. CT¿¡ Vcc ¿¬°áÇÑ ½ºÅܸðÅÍ Á¦¾î

±×¸²4°ú °°ÀÌ ½ºÅܸðÅ͸¦ º¸µå¿¡ ¿¬°áÇÑ´Ù. Ç¥3´Â ¸ðÅÍÀÇ ½ºÅܺ° µ¿ÀÛÀ» ³ªÅ¸³½ ±×¸²ÀÌ´Ù.

±×¸²4¿¡¼­ °ËÀº»ö 4°³ÀÇ TR¸ðµâ(ÄÄÆÄÀÏ»ç)À» PC0,PC1,PC2,PC3¿¡ ¿¬°áÇÏ¿© Á¦¾î ÇÑ´Ù.

±×¸²2ÀÇ µµ¸é°ú Simulator ȸ·Î¿Í È®ÀÎÇϸ鼭 ¹è¼±À» ¿¬°áÇÑ´Ù.

 

Step

PC0

PC1

PC2

PC3

Æ÷Æ®Ãâ·Â

±×¸²3 TR ¸ðµâ·Î ¸ðÅÍÁ¦¾î

0

ON

 

 

 

0x01

1

 

 

ON

 

0x04

2

 

ON

 

 

0x02

3

 

 

 

ON

0x08

0

ON

 

 

 

0x01

 

Ç¥3 CT¿¡ Vcc ¿¬°áÇÑ ½ºÅܸðÅÍ ½Ã°è¹æÇâ ȸÀü

 

 

3. AVR ÇÁ·Î±×·¥ (CT¿¡ GND ¿¬°á)

 

Çѹ®ÀÚ¸¦ Àü¼ÛÇØ¼­ ¸ðÅÍÀÇ È¸ÀüÀ» Á¦¾î ÇÑ´Ù. [AVRÀüü ÇÁ·Î±×·¥ º¸±â]

 

 

interrupt [USART0_RXC] void uart0_rx_isr(void)

{

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

       if(data == 0x30){   // ÁÂȸÀü

          for(i=0;i<10;i++) { 

                    PORTC = 0x02;

                   delay_ms(100);

                    PORTC = 0x08;

                    delay_ms(100);

                    PORTC = 0x01;

                    delay_ms(100);

                    PORTC = 0x04;

                    delay_ms(100);

              }

              PORTC = 0x00;

       } 

       else if(data == 0x31){   // ¿ìȸÀü

              for(i=0;i<10;i++) {

                    PORTC = 0x04;

                    delay_ms(100);

                    PORTC = 0x01;

                    delay_ms(100);

                    PORTC = 0x08;

                    delay_ms(100);

                    PORTC = 0x02;

                    delay_ms(100);

              }

              PORTC = 0x00;

       }

       else if(data == 0x32)    // Á¤Áö

              PORTC = 0x00;

}

 

 

4. AVR ÇÁ·Î±×·¥ (CT¿¡ Vcc ¿¬°á)

 

Çѹ®ÀÚ¸¦ Àü¼ÛÇØ¼­ ¸ðÅÍÀÇ È¸ÀüÀ» Á¦¾î ÇÑ´Ù.

 

 

interrupt [USART0_RXC] void uart0_rx_isr(void)

{

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

       // CÆ÷Æ®·Î ½ºÅÛ¸ðÅÍ µå¶óÀ̹ö¸¦ Á¦¾îÇÑ´Ù.

       if(data == 0x30){   // ÁÂȸÀü

          for(i=0;i<10;i++) { 

                    PORTC = 0x01;

                   delay_ms(100);

                    PORTC = 0x04;

                    delay_ms(100);

                    PORTC = 0x02;

                    delay_ms(100);

                    PORTC = 0x08;

                    delay_ms(100);

              }

              PORTC = 0x00;

       } 

       else if(data == 0x31){   // ¿ìȸÀü

              for(i=0;i<10;i++) {

                    PORTC = 0x08;

                    delay_ms(100);

                    PORTC = 0x02;

                    delay_ms(100);

                    PORTC = 0x04;

                    delay_ms(100);

                     PORTC = 0x01;

                    delay_ms(100);

              }

              PORTC = 0x00;

       }

       else if(data == 0x32)    // Á¤Áö

              PORTC = 0x00;

}

 

5. PC ÇÁ·Î±×·¥

¼Û½ÅµÇ´Â ¹®ÀÚÀÇ 0¿Í1ÀÇ ºñÆ®°¡ 0ÀÎÁö ¾Æ´ÑÁö¸¦ °Ë»çÇÏ¿© È­¸éÀÇ LED¿¡ Ç¥½ÃÇÑ´Ù.

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

óÀ½

°ú    Á¦

¾Æ·¡ ±×¸²°ú °°ÀÌ ½ºÅܼö¸¦ ÀÔ·ÂÇÏ¿© °¢µµ¸¦ Á¦¾îÇÏ°í ¼Óµµ¸¦ Á¦¾îÇÏ´Â ÇÁ·Î±×·¥ ÇÏÀÚ.

CT¿¡ Vcc¸¦ ¿¬°áÇϰí TR¸ðµâÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥À» ±âº»À¸·Î ¸¸µç´Ù.

PC ÇÁ·Î±×·¥

 

Åë½ÅÀº¾Æ·¡¿Í °°ÀÌ 5°³ÀÇ ¹®ÀÚ·Î ÀÌ·ç¾î Áø´Ù.

[Åë½Å½ÃÀÛ¹®ÀÚ,0x02] [ȸÀü¹æÇâ] [½ºÅܼö] [¼Óµµ] [Åë½Å½ÃÀÛ¹®ÀÚ,0x03]

[PC ÇÁ·Î±×·¥ ³»·Á¹Þ±â]

 

 

void CRs232Dlg::OnPointerValueChangedCwknob1(long Pointer, VARIANT FAR* Value)

{

       // TODO: Add your control notification handler code here

       CString strTemp;

 

       if(m_nKnob.Value==0)

              strTemp.Format( "%c%c%c%c%c",0x02,0x30,(char)m_nStep.Value,(char)m_vel.Value,0x03); // ¹Ý½Ã°è¹æÇâ

       else if(m_nKnob.Value==1)

              strTemp.Format( "%c%c%c%c",0x02,0x31,0x08,0x03); // Á¤Áö  

       else if(m_nKnob.Value==2)

              strTemp.Format( "%c%c%c%c%c",0x02,0x32,(char)m_nStep.Value,(char)m_vel.Value,0x03); // ½Ã°è¹æÇâ

       m_ComuPort.WriteComm((unsigned char*)(LPCTSTR)strTemp,strTemp.GetLength());

}

 

 

AVR ÇÁ·Î±×·¥

 

¹®ÀÚ 0x02°¡ Àü¼ÛµÇ¸é rx_buffer0[0] ºÎÅÍ Àü¼ÛµÈ ¹®ÀÚ°¡ ÀúÀåµÈ´Ù. ¹®ÀÚ 0x03ÀÌ Àü¼ÛµÇ¸é Åë½ÅÀÇ ³¡À» ¾Ë¸®´Â ¹®ÀÚ À̹ǷΠreceive´Â 0¿¡¼­ 1·Î °ªÀ» ¹Ù²Û´Ù. ±×¸®°í main ÇÔ¼ö¿¡¼­ À̸¦ ó¸® ÇÑ´Ù.

[AVR ÇÁ·Î±×·¥ ³»·Á¹Þ±â]

 

 

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  

}

 

===================»ý·«==========================

while (1)

      {

      // Place your code here

         if(receive==1) { 

                     if(rx_buffer0[1] == 0x30){     // ÁÂȸÀü

                         for(i=0;i<rx_buffer0[2];i++) { 

                                         PORTC = 0x02;

                                       delay_ms(rx_buffer0[3]);

                                         PORTC = 0x08;

                                         delay_ms(rx_buffer0[3]);

                                         PORTC = 0x01;

                                        delay_ms(rx_buffer0[3]);

                                         PORTC = 0x04;

                                      delay_ms(rx_buffer0[3]);

                                 }

                                  PORTC = 0x00;

                          } 

                          else if(rx_buffer0[1] == 0x32){     // ¿ìȸÀü   

                                 for(i=0;i<rx_buffer0[2];i++) {

                                       PORTC = 0x04;

                                        delay_ms(rx_buffer0[3]);

                                        PORTC = 0x01;

                                        delay_ms(rx_buffer0[3]);

                                      PORTC = 0x08;

                                       delay_ms(rx_buffer0[3]);

                                       PORTC = 0x02;

                                        delay_ms(rx_buffer0[3]);

                                 }

                                 PORTC = 0x00;

                          }

                          else if(rx_buffer0[1] == 0x31)      // Á¤Áö

                                 PORTC = 0x00;

        

                         receive=0;

                }

 

      };