Частота и таймеры
- Войдите на сайт для отправки комментариев
Доброго времени суток!
Начал постепенно разбираться с ардуиной, однако знаний пока мало.
Приобрел недавно 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 использует некоторый множитель, но найти подробнее что и как мне пока не удалось.
Вопросы, где задается этот множитель? как его правильно расчитать? Как работают задержки? и как их правильно использовать, чтобы не иметь таких вот проблем?
Частота контроллера выставляется при программировании - фьюзами.
Соответсвенно, если регламентируете при компиляции частоту работы МК отличную от реальной частоты, то будут такие непонятки.
Пример: контроллер работает на частоте 4 мегагерца, а вы говорите компиллятору "делай для частоты 8 мегагерц", что получится в реале - МК будет исполнять программу в два раза медленней.
А когда я выбираю в arduino ide Attiny2313 8Mz, он разве сам не изменяет фьюзы при прошивке?
А когда я выбираю в arduino ide Attiny2313 8Mz, он разве сам не изменяет фьюзы при прошивке?
Нет.
Понятно, буду разбираться с фьюзами.