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 ÀÎÅÍ·´Æ®¸¦ ¼±ÅÃÇÏ¸é »ý¼ºµÇ´Â ÇÁ·Î±×·¥¿¡ »¡°£»ö ºÎºÐÀ» Ãß°¡ÇÑ °ÍÀÌ´Ù. À̸¦ ±×´ë·Î º¹»çÇÏ¿© Æò°¡ÆÇ¿¡¼ ÄÄÆÄÀÏ, ¸µÅ© ÇÏ¸é µÈ´Ù.
[ÇÁ·Î±×·¥ º¸±â]
óÀ½
|