|
AVR°ú PC Åë½Å
(DC¸ðÅÍÁ¦¾î) |
||||||||||||||||||||||
ÇнÀ¸ñÇ¥ |
|||||||||||||||||||||||
12V·Î µ¿ÀÛÇÏ´Â ¸ðÅ͵å¶óÀ̹ö BA6209¿Í PWM0·Î DC¸ðÅÍÀÇ È¸Àü°ú ¼Óµµ¸¦ Á¦¾îÇÑ´Ù. |
|||||||||||||||||||||||
ÇнÀÁÖÁ¦ |
|||||||||||||||||||||||
ÁÂÃø ±×¸²Àº PC¿¡¼ ¸ðÅÍÀÇ È¸Àü¹æÇâ°ú ¼Óµµ¸¦ Á¦¾îÇϴ ȸéÀÌ´Ù. ¿À¸¥ÂÊ ±×¸²Àº ¾Æ·¡ ȸ·Îµµ¿¡ µû¶ó Á¦ÀÛÇÑ º¸µåÀÌ´Ù. |
|||||||||||||||||||||||
|
|
||||||||||||||||||||||
Åë½Å ÇÁ·ÎÅäÄÝ Åë½ÅÀº 4°³ÀÇ ¹®ÀÚ¸¦ º¸³½´Ù. [Åë½Å½ÃÀÛ(0x02)] [ȸÀü¹æÇâ] [ȸÀü¼Óµµ] [Åë½ÅÁ¾·á(0x03)] ȸÀü¹æÇâ - ¿ìȸÀü(0x06), ÁÂȸÀü(0x05), Á¤Áö(0x00) ȸÀü¼Óµµ – 50~250 ±îÁöÀÇ ¼ýÀÚ¸¦ ¹®ÀÚ·Î ¹Ù²Ù¾î ¼Û½ÅÇϸé CPUÀÇ OCR0ÀÇ °ªÀ¸·Î ÀԷµȴÙ. ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼´Â À§ÀÇ µ¥ÀÌŸ¸¦ ¼ö½ÅÇØ¼ ¸ðÅÍÀÇ È¸ÀüÀ» Á¦¾îÇÑ´Ù. |
|||||||||||||||||||||||
¿¹½À³»¿ë |
|||||||||||||||||||||||
AVRÀÇ PWM0 Á¦¾î¸¦ ÂüÁ¶ÇÏ¿© PWMÀÇ Á¦¾î¸¦ °øºÎÇÑ´Ù. BA6209 µ¥ÀÌÅÍºÏ ¿¡¼ ¸ðÅÍ µå¶óÀ̹ö ȸ·Îµµ¸¦ °øºÎÇÑ´Ù. |
|||||||||||||||||||||||
½Ç½À¹æ¹ý |
|||||||||||||||||||||||
¸ñ Â÷ |
|||||||||||||||||||||||
1.
¸ðÅ͵å¶óÀ̹ö º¸µåÀÇ Á¦ÀÛ ¾Æ·¡ ±×¸²°ú °°ÀÌ AVRÀÇ BÆ÷Æ®·Î ¸ðÅ͵å¶óÀ̹ö(BA6208)À» ±¸µ¿ÇÑ´Ù.
2. AVR ÇÁ·Î±×·¥ |
|||||||||||||||||||||||
|
º¸±â1. PC¿¡¼ 4°³ÀÇ ¹®ÀÚ¸¦ ¼ö½ÅÇØ¼ ¹æÇâ°ú ¼Óµµ¸¦ Á¦¾îÇÏ´Â ÇÁ·Î±×·¥ [¼Ò½º ÇÁ·Î±×·¥ ³»·Á¹Þ±â] |
|
|||||||||||||||||||||
|
#include <mega128.h> // ¡¦. ÇÁ·Î±×·¥ »ý·« char receive=0; // 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; //RS232¿¡¼ 0x02°¡ ¼ö½ÅµÇ¸é rx_buffer0
¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇϰí //0x03ÀÌ Àü¼ÛµÇ¸é receive=1 ·Î µ¥ÀÌÅ͸¦ ÀúÀåÇØ ¸Þ½ÃÁö¸¦ ¹ß»ý ½ÃŲ´Ù. 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 } #pragma savereg+ // ¡¦. ÇÁ·Î±×·¥ »ý·« void main(void) { // ¡¦. ÇÁ·Î±×·¥ »ý·« // Timer/Counter 0 initialization ASSR=0x00; TCNT0=0x00; // ATmega128(L) Data Book P102 TCCR0 = 0x6f; // (1) Fast PWM Mode, 16000000/(1024*256)=61Hz Áֱ⠼±Åà OCR0 = 0xa0; // µàƼºñÁ¶Àý // ¡¦. ÇÁ·Î±×·¥ »ý·« // Global enable interrupts #asm("sei") while (1) { //
rx_buffer0[1]=ȸÀü¹æÇâ rx_buffer0[2]=µàƼºñ·Î ¼Óµµ Á¶Àý
if(receive==1) { if(rx_buffer0[1] == 0x30) PORTB=0x01;
else
if(rx_buffer0[1] == 0x31) PORTB=0x02; else
if(rx_buffer0[1] == 0x32) PORTB=0x00;
OCR0
= rx_buffer0[2]; receive=0; // ¸Þ½ÃÁö ¼ö½Å »óŸ¦ 0·Î ¼³Á¤ } }; } |
|
|||||||||||||||||||||
3. PC ÇÁ·Î±×·¥ |
|||||||||||||||||||||||
|
º¸±â2. PC ȸ鿡¼ ȸÀü¹æÇâÀ̳ª ¼ÓµµÀÇ ³ëºê°ªÀÌ º¯Çϸé SendData ÇÔ¼ö¸¦ ½ÇÇàÇÏ¿© 4°³ÀÇ ¹®ÀÚ¸¦ ¼Û½Å ÇÑ´Ù. [¼Ò½º ÇÁ·Î±×·¥ ³»·Á¹Þ±â] |
|
|||||||||||||||||||||
|
void CRs232Dlg::OnPointerValueChangedCwknob1(long Pointer, VARIANT FAR* Value) { // ȸÀü¹æÇâ ³ëºê°ª º¯È SendData(); } void CRs232Dlg::OnPointerValueChangedCwknob2(long Pointer, VARIANT FAR* Value) { // ȸÀü¼Óµµ ³ëºê°ª º¯È SendData(); } void CRs232Dlg::SendData() { CString strTemp; if(m_nKnob.Value==0) strTemp.Format("%c%c%c%c",0x02,0x30,(char)m_nVelocity.Value,0x03); else if(m_nKnob.Value==1) strTemp.Format("%c%c%c%c",0x02,0x32,(char)m_nVelocity.Value,0x03); else if(m_nKnob.Value==2) strTemp.Format("%c%c%c%c",0x02,0x31,(char)m_nVelocity.Value,0x03); m_ComuPort.WriteComm((unsigned
char*)(LPCTSTR)strTemp,4); // 4°³ÀÇ ¹®ÀÚ¸¦ ¼Û½ÅÇÑ´Ù. } |
|
|||||||||||||||||||||
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
°ú Á¦ |
|||||||||||||||||||||||
|
|||||||||||||||||||||||