Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » Мигание светодиодом, Attiny 84.

Страниц (1): [1]
 

1. Ivan-221 - 18 Сентября, 2013 - 17:10:09 - перейти к сообщению
Привет всем! Вопрос следующий: простая программа - мигание светодиодом, но последняя команда в цикле "_delay_ms(2000);" не отрабатывает как положено. Задержка не 2 сек., а примерно 0,25 сек. или даже меньше. Код следующий:
CODE:

#define F_CPU 1000000UL // 1 MHz
#include <avr/io.h>
#include <avr/delay.h>

int main(void)
{
DDRA = 0xff;

for (;;)
{
PORTA = 0xff;
_delay_ms(2000);
PORTA = 0x00;
_delay_ms(2000);
}
}

Если "_delay_ms(2000);" перенести в начало цикла, то все работает нормально:
CODE:

#define F_CPU 1000000UL // 1 MHz
#include <avr/io.h>
#include <avr/delay.h>

int main(void)
{
DDRA = 0xff;

for (;;)
{
_delay_ms(2000);
PORTA = 0xff;
_delay_ms(2000);
PORTA = 0x00;
}
}

Я так и не понял в чем ошибка( Микроконтроллер Attiny 84, среда WinAVR. Буду признателен за любую помощь))
2. Роботов - 18 Сентября, 2013 - 19:36:57 - перейти к сообщению
Что-то с тактовой частотой не так.
3. Ivan-221 - 18 Сентября, 2013 - 20:15:40 - перейти к сообщению
Тогда почему во втором случае работает?))
4. Predator - 18 Сентября, 2013 - 21:46:25 - перейти к сообщению
я в АВРах не разбираюсь, но помоему тут какое-то злое колдунство: только потрошить функцию _delay_ms и думать, почему оно вылетает раньше времени....