Частота и таймеры

develmax
Offline
Зарегистрирован: 21.06.2013

Доброго времени суток!

Начал постепенно разбираться с ардуиной, однако знаний пока мало.

Приобрел недавно Attiny2313, настроил на прошивку через leonardo. Начал проверять на тестовом примере, все ли работает и столкнулся со следующим фактом. Прошиваю напрямую через make файл, задал частоту:

CLOCK      = 8000000

написал код:

#define F_CPU 8000000
 
#include <avr/io.h>
#include <util/delay.h>
 
int main(void)
{
DDRD |= (1 << PD6);
 
for(;;)
{
PORTD ^= (1 << PD6);
_delay_ms(1000);
}
 
return 0;
}

И в результате светодиод мигает не через секунду как планировалось, а через 8 секунд ровно.

Пробовал через arduino ide, Attiny2313 8 MHz:

int led = 8;

void setup() {                
  pinMode(led, OUTPUT);     
}

void loop() {
  digitalWrite(led, HIGH); 
  delay(1000);
  digitalWrite(led, LOW);  
  delay(1000);
}

Результат тот же. Однако, когда поменял частоту на 1 MHz, то все заработало. Но по логике же чем быстрее частота, тем быстрее должен работать микроконтроллер и собственно и мигать быстрее или одинаково, но никак не иначе. Изуча вопрос, наткнулся на то что delay использует некоторый множитель, но найти подробнее что и как мне пока не удалось.

Вопросы, где задается этот множитель? как его правильно расчитать? Как работают задержки? и как их правильно использовать, чтобы не иметь таких вот проблем?

Клапауций
Offline
Зарегистрирован: 10.02.2013

Частота контроллера выставляется при программировании - фьюзами.

Соответсвенно, если регламентируете при компиляции частоту работы МК отличную от реальной частоты, то будут такие непонятки.

Пример: контроллер работает на частоте 4 мегагерца, а вы говорите компиллятору "делай для частоты 8 мегагерц", что получится в реале - МК будет исполнять программу в два раза медленней.

develmax
Offline
Зарегистрирован: 21.06.2013

А когда я выбираю в arduino ide Attiny2313 8Mz, он разве сам не изменяет фьюзы при прошивке?

Клапауций
Offline
Зарегистрирован: 10.02.2013

develmax пишет:

А когда я выбираю в arduino ide Attiny2313 8Mz, он разве сам не изменяет фьюзы при прошивке?

Нет.

develmax
Offline
Зарегистрирован: 21.06.2013

Понятно, буду разбираться с фьюзами.