728x90
안녕하세요 스포크하우스입니다.
Attiny202은 자료가 많지 않은 것 같습니다.
일단 슬립모드 진입에 앞서 데이터시트를 보시면 클럭은 32k 저전력 클럭으로 돌려야하고 외부 gpio인터럽트나 RTC 인터럽트 같은 주기적으로 발생하는 인터럽트에 스스로 깨어날 수 있다고 되어있습니다.
이리저리 타이머 인터럽트로도 되긴하는데 RTC가 더 확실히 깨어나는 느낌?
먼저 rtc 부터 설정 해줍니다.
void RTC_init(void)
{
/* Initialize RTC: */
while (RTC.STATUS > 0)
{
; /* Wait for all register to be synchronized */
}
RTC.CLKSEL = RTC_CLKSEL_INT32K_gc; /* 32.768kHz Internal Ultra-Low-Power Oscillator (OSCULP32K) */
RTC.PITINTCTRL = RTC_PI_bm; /* PIT Interrupt: enabled */
RTC.PITCTRLA = RTC_PERIOD_CYC32768_gc /* RTC Clock Cycles 16384, resulting in 32.768kHz/16384 = 2Hz */
| RTC_PITEN_bm; /* Enable PIT counter: enabled */
}
ISR(RTC_PIT_vect)
{
RTC.PITINTFLAGS = RTC_PI_bm; /* Clear interrupt flag by writing '1' (required) */
sleep_count++;
}
PIT 로 진행해야 된다고 하네요 데이터시트에서
ISR 인 인터럽트 발생하면 들어오는 곳이니까 카운터만 해주고 나옵니다.
1초에 한번 들어가서 카운터 해주니까 sleep_count 조건으로 원하는 시간 조정하시면 됩니다.
다음은 main문
int main(void)
{
SYSTEM_Initialize();
CLKCTRL_init();
RTC_init();
set_sleep_mode(SLEEP_MODE_PWR_DOWN); /* Set sleep mode to POWER DOWN mode */
sleep_enable();
sei();
while(1)
{
sleep_cpu();
if(sleep_count >= user_want_time)
{
....실행할 코드
}
}
이게 참 힘들었습니다...
클럭은 32k 여야하니까 이전 포스팅 참조하시면 됩니다.
2024.11.27 - [Microchip] - Attiny202 - 저전력 클럭 설정 32K
set_sleep_mode()를 해주고 sleep_enable()을 해줍니다. 여기까지는 슬립모드로 안들어갑니다.
set_sleep_mode()는 종류가 있으니까 보시면 되구요 저는 최대한 저전력으로 동작하는 power down모드입니다.
그런다음 sleep_cpu();요놈이 실행되면 바로그냥 3~4uA로 전류가 떨어집니다. 좋구요..
그럼 오늘도 대단히 수고하세요
감사합니다.
728x90
'Microchip' 카테고리의 다른 글
Attiny202 - 저전력 동작을 위한 ADC 코드 (0) | 2024.12.11 |
---|---|
Attiny202 - 저전력 클럭 설정 32K (0) | 2024.12.04 |
MPLab IDE에서 터치 데이터 확인하기 - PIC18F05Q41 (1) | 2024.10.02 |
make: *** [nbproject/Makefile-impl.mk:39: .build-impl] Error 2 오류 해결법 (0) | 2024.08.06 |
Attiny202 - ADC 데이터 확인하기 (0) | 2024.07.16 |
댓글