15
2016-Jan
AVR delay 함수 (_delay_ms, _delay_us)
작성자: Blonix
IP ADRESS: *.148.87.98 조회 수: 1639
delay.h 를 포함시켜 사용할 수 있는 _delay_ms, _delay_us 함수는 타이머를 이용하지 않고 단순히 cpu 클럭만을 버린다고 한다.
따라서 사용하는 타이머랑 꼬일까 고민하지 않아도 된다.
사용을 위해서 필요한 헤더파일은 <util/delay.h> 다.
근데 컴파일해보면 F_CPU가 정의되지 않았다고 나올거다.
이 헤더파일을 인클루드하기 이전에 사용하는 CPU의 클럭에 대한 정보를 define 해주면 된다.
#define F_CPU 1000000UL // 1 MHz
#include <util/delay.h>
뭐 대충 이런식으로.
ATMega128A 라면 16MHz 니까 16000000UL 로 해주면 된다.
사용하는 함수는
void _delay_ms | ( | double | __ms | ) |
얘는 적어준 밀리세컨드만큼 딜레이 시킨다. 100 적으면 0.1 초인거.
근데 막 1000 적는다고 1초는 못쉬는게, 한번에 최대 262.14 ms 밖에 못 쉰다고 한다.
그러니까 여러번 쉬어야 하면 100ms 씩 여러번 쉬게 하는 식으로 구현해야 한다.
void _delay_us | ( | double | __us | ) |
얘는 마이크로 세컨드만큼 딜레이 시킨다. 1000 us 가 1ms 임.
한번에 최대 768us 까지 쉴 수 있다.
참고자료 : http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html