<<< AVR MCU »ó´ã½Ç >>>

Modify Delete Write Reply Prev Next List

°Ô½Ã¹° ¹øÈ£: 1054 (2009/03/12,19:18:43) (Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022))
ÀÛ¼ºÀÚ Á¤º¸: ÀÌÁ¤ÈÆ (zzz_standalone@netsgo.com.zzz)
Sleep mode¿Í Interrupt¿¡ ´ëÇÑ Áú¹®ÀÔ´Ï´Ù.
±³¼ö´Ô ¾È³çÇϽʴϱî?
Àú´Â °­¿øµµ Ź鿡¼­ ³ó»ç¸¦ ¢°í ÀÖ´Â 40´ë Áß¹ÝÀÇ ³ó»ç²ÛÀÔ´Ï´Ù.
»ç¶÷ÀÌ »ì´Ùº¸¸é ¶§·Î´Â º»ÀÎÀÇ ºÐ¼ö¿¡ ³ÑÄ¡´Â ´É·ÂÀÌ ÇÊ¿äÇÒ ¶§°¡ ÀÖ´Â°Í °°½À´Ï´Ù. Á¦°¡ Áö±Ý ¹Ù·Î ±×·± »óȲ¿¡
³õ¿© ÀÖ¾î ±³¼ö´Ô²² ½Ç·Ê¸¦ ¹«¸¨¾²°í Áú¹® µå¸®¿À´Ï ¼ÒÁßÇÑ °¡¸£Ä§À» ºÎʵ右´Ï´Ù.

Á¦°¡ ATmega128LÀ» ÀÌ¿ëÇÏ¿© ¿Âµµ ¹× ½Àµµ¸¦ üũÇÏ¿© ÀúÀåÇÏ¿´´Ù°¡ ¸îÀÏ´ÜÀ§·Î PC¿¡ ¿¬°áÇÏ¿© Àü¼ÛÇÏ´Â Àåºñ¸¦
¸¸µé¾îº¸·Á Çϰí ÀÖ½À´Ï´Ù. Àåºñ°¡ ÀåÂøµÉ °÷ÀÇ È¯°æÀÌ Àü·Â¼±À» ÀÌ¿ëÇÑ Àü·ÂÀÇ °ø±ÞÀÌ ¾î·Á¿î »óȲÀÎÁö¶ó
¹èÅ͸®¸¦ ÀÌ¿ëÇÏ·Á Çϴµ¥ »ó±â Ç¥Á¦ÀÇ Sleep¸ðµå¿¡¼­ ¾î·Á¿òÀ» °Þ°í ÀÖ½À´Ï´Ù.
Áú¹®À» ¿ä¾àÇϸé ÀÌ·¸½À´Ï´Ù.

* External Interrupt 0À» ÀÌ¿ëÇØ¼­ Sleep¸ðµå¿¡ µé¾î°¡°í External Interrupt 4¿¡ ÀÇÇØ¼­ Wake upµÇµµ·Ï ÇÏ·Á´Âµ¥
  (»ç½ÇÀº INT0¿¡¼­ Åä±ÛÀÌ µÇµµ·Ï ÇßÀ¸³ª(Sleep<-->Wake up), ÀßµÇÁö ¾Ê¾Æ ÇÁ·Î±×·¥ÀÇ È帧À» È®ÀÎÇØ º¸°íÀÚ
   ÀÌ·¸°Ô ÇØ º» °ÍÀÔ´Ï´Ù.)
   ÀÏ´Ü INT0¿¡ ÀÇÇØ¼­ Sleep¸ðµå¿¡ ÁøÀÔÀº Àß µË´Ï´Ù.(È®ÀÎÀº ¸ÖƼÅ×½ºÆ®ÀÇ Àü·ù°è¸¦ ÀÌ¿ëÇß½À´Ï´Ù.)
   ÁøÀÔ ÈÄ INT4¿¡ ÀÇÇØ¼­ Wake upÀÌ µÇÁö ¾Ê¾Æ È®ÀÎÇØº» ¹Ù Àç±ÍÈ£Ãâ¿¡ ºüÁö´Â °Í °°½À´Ï´Ù.
  
   ±Ã±ÝÇÑ °ÍÀº  Sleep¸ðµå¿¡ ÁøÀÔ ÈÄ INT4¿¡ ÀÇÇØ¼­ Wakeup µÇ´Â °úÁ¤°ú ÀÌÈÄ ÇÁ·Î±×·¥ È帧¿¡ ´ëÇÏ¿© ¾Ë°í ½Í½À´Ï´Ù.
   Á¦°¡ Áö±Ý±îÁö º¸¾Æ¿Â ¹Ù·Î´Â INT0¿¡ ÀÇÇØ¼­ Sleep¸ðµå¿¡ ÁøÀÔ ÈÄ INT4°¡ ¹ß»ýÇϸé INT4¼­ºñ½º ·çƾÀ» ½ÇÇàÇϱâ Àü
   INT0 ¼­ºñ½º·çƾÀÇ Sleep¸ðµå ÀÌÈÄ stepÀ» ÁøÇàÇÏ´Â °Í °°½À´Ï´Ù. ±×·¡¼­ Àç±ÍÈ£ÃâÀ̶ó´Â Ç¥ÇöÀ» À§¿¡¼­ ÇÑ °ÍÀε¥
   À̰ÍÀÌ ¸Â´ÂÁö ±Ã±ÝÇϰí, ¸Â´Ù¸é ÇØ°áÃ¥ÀÌ ÀÖ´ÂÁöµµ ±Ã±ÝÇÕ´Ï´Ù.

   ÇØ°á¹æ¹ýÀÌ Assembly ÇÁ·Î±×·¥À¸·Î °¡´ÉÇÏ´Ù¸é À̺κи¸ Assembly·Î ÄÚµùÇÏ°í ³ª¸ÓÁö´Â C·Î ÄÚµù ÈÄ ¾î¼Àºí ¹× ÄÄÆÄÀÏ
   ÈÄ °¢°¢ÀÇ ¿ÀºêÁ§Æ® ÆÄÀÏ·Î LinkingÀÌ °¡´ÉÇÑÁöµµ ±Ã±ÝÇÕ´Ï´Ù.
  
¾Æ·¡´Â ÀÌ ¹®Á¦¿Í °ü·ÃÇÑ ¼ÒÆ®ÄÚµå ÀÔ´Ï´Ù.
°¨»çÇÕ´Ï´Ù.

/*****************************************************************************

File Name : 'main.c'
Title : AVR project ATmega128·Î PowerDown Mode ÁøÀÔÇÏ°í ºüÁö±â
Author : Lee JeongHoon
Created                 : 2/22/2009
Revised                 :
Version                 : 1.0
Target MCU : Atmel AVR series

Description : set_bit(PORTC, PC1);--> PORTCÀÇ PC1À» High·Î ¼³Á¤
                     clear_bit(PORTC, PC1); --> PORTCÀÇ PC1À» Low·Î ¼³Á¤
*****************************************************************************/

#include <avr/io.h>
#include <avr/interrupt.h>
#include "macro.h"
#include "delay.h"

void Set_ExtInt();
void Init_Port(void);
void POWER_SAVE(void);

/*--------------------------------------------------------------------
  ¿ÜºÎÀÎÅÍ·´Æ® ¼­ºñ½º ·çƾ
--------------------------------------------------------------------*/
ISR(INT0_vect)
{
if(((~PORTC) & 0x02)){
set_bit(PORTC, PC1);
asm("sleep");
}
else
clear_bit(PORTC, PC1);

Loop:
while(!(PIND & 0x01));
Delay_ms(50);
if(!(PIND & 0x01)) goto Loop;

EIFR |= 0x01;
}

ISR(INT4_vect)
{
if(((~PORTC) & 0x02))
set_bit(PORTC, PC1);
else
clear_bit(PORTC, PC1);

Loop:
while(!(PINE & 0x10));
Delay_ms(50);
if(!(PINE & 0x10)) goto Loop;

EIFR |= 0x01;
}

/*--------------------------------------------------------------------
  ÆÄ¿ö´Ù¿î¸ðµå ¼³Á¤
--------------------------------------------------------------------*/
void POWER_SAVE(void)
{
//PWRDN_MODE_1;
set_bit(MCUCR, SE);

clear_bit(MCUCR, SM2);
set_bit(MCUCR, SM1);
clear_bit(MCUCR, SM0);
}

/*--------------------------------------------------------------------
  External Interrupt Setting
--------------------------------------------------------------------*/
void Set_ExtInt()
{
//The low level of INTn generates an interrupt request.

clear_bit(EICRA, ISC01); //Ext INT0
clear_bit(EICRA, ISC00);

clear_bit(EICRB, ISC41); //Ext INT4
clear_bit(EICRB, ISC40);

set_bit(EIMSK, INT0);
set_bit(EIMSK, INT4);
SREG = 0x80;
}

/*--------------------------------------------------------------------
  PortÃʱâÈ­
--------------------------------------------------------------------*/
void Init_Port(void)
{
DDRA = 0xFF;
PORTA = 0x00;

DDRB = 0xFF;
PORTB = 0x00;

DDRC = 0xFF;
set_bit(DDRC, PC1); //Ãâ·ÂÀ¸·Î ¼³Á¤
PORTC = 0x00;

DDRD = 0xFF;
clear_bit(DDRD, PD0); //Interrupt PE4 ÀÔ·Â
PORTD = 0x00;

DDRE = 0xFF;
clear_bit(DDRE, PE4); //Int4
PORTE = 0x00;

DDRG = 0xFF;
PORTG = 0x00;
}

/*--------------------------------------------------------------------
  Main Program
--------------------------------------------------------------------*/
int main(void)
{
//PORT ÃʱâÈ­
Init_Port();
POWER_SAVE();
Set_ExtInt();

while(1);

return 1;
}

¡ã Re: Àú´Â...
¡å Re: UCM È­ÀÌÆÃ!
(ÃÖÁ¾¼öÁ¤ÀÏ: 2009/03/12,20:40:34)
EasyBoard 1.175 Patch #2 - Created by Cherie

Modify Delete Write Reply Prev Next List


Created by Cherie