|
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] |
|
|||||||||||||
|
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 ÇÔ¼ö¿¡¼ À̸¦ ó¸® ÇÑ´Ù. |
|
|||||||||||||
|
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;
}
}; |
|
|||||||||||||
|
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||