kurt84 пишет:Здравствуйте!
Такая проблема: собрал схему из статьи "Простой робот на микроконтроллере (Часть 1). Управляем электромоторами.". Отличия только в том, что мк взял другой - ATmega16-16, и соответственно, кварц на 16MHz.
Залил на мк такую программу:
#include <avrio.h>
#include <avrinterrupt.h>
#include <avrsignal.h>
#include <utildelay.h>
#define F_CPU 16000000UL
void my_function(void)
{
PORTA |= _BV( PA3 );
PORTA |= _BV( PA2 );
_delay_ms( 1000 );
PORTA &= ~_BV(PA3);
PORTA &= ~_BV(PA2);
PORTA |= _BV( PA1 );
PORTA |= _BV( PA0 );
_delay_ms( 1000 );
PORTA &= ~_BV(PA1);
PORTA &= ~_BV(PA0);
}
int main(void) {
DDRA = 0xff;
PORTA = 0x00;
while( true )
{
my_function();
}
}
Все работает, за исключением одной проблемы: задержки _delay_ms( 1000 ), которые по идее должны давать задержку в 1 секунду - дают задержку в ~15-16 секунд. Я так подозреваю, что причиной может быть то, что контроллер работает не на той частоте ( около 1MHz ). От чего такое может быть? Что я делал неправильно?
Функция _delay_ms() формирует задержку в зависимости от передаваемого ей аргумента, выраженного в миллисекундах (в одной секунде 1000 миллисекунд). Максимальная задержка может достигать 262.14 миллисекунд.
|