PlatformIO ATMega324P util/delay.h не соответствует действительности

Я использую PlatformIO и CLion для программирования микроконтроллера ATMega324P. Проект создается с помощью PlatformIO на Mac и открывается в CLion. Я могу успешно собрать программу и запустить ее на ATMega324p. Я успешно запускаю следующий код.

main.cpp

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRB |= 1 << PINB0; 

    while (true)
    {
        PORTB ^= 1 << PINB0; 
        _delay_ms(100);
    }
}

Platformio.ini

[env:mightycore324]
platform = atmelavr
board = mightycore324
framework = arduino
upload_protocol = usbtiny
board_f_cpu = 16000000L

Хотя этот код запускается, задержка кажется заметно неточной. Должен ли я что-нибудь сделать, чтобы убедиться, что задержка работает правильно?


person Dblock247    schedule 30.10.2017    source источник
comment
Где вы определили F_CPU?   -  person David Grayson    schedule 30.10.2017
comment
@DavidGrayson Я определил это в Platformio.ini (см. редактирование выше)   -  person Dblock247    schedule 30.10.2017
comment
@DavidGrayson, вы предлагаете другое возможное решение.   -  person Dblock247    schedule 31.10.2017


Ответы (2)


Ваш MCU, вероятно, работает от своего внутреннего RC-генератора. Этот осциллятор не отличается особой точностью — он указан как 8 МГц, но отдельные части могут работать на частоте от 7,3 до 8,1 МГц.

Чтобы получить более точное время, вам нужно подключить внешний кристалл и соответствующим образом запрограммировать предохранители часов.

person Community    schedule 30.10.2017

Следующие настройки исправили мою проблему.

Platformio.ini

[env:mightycore324]
platform = atmelavr
board = mightycore324
framework = arduino
upload_protocol = usbtiny
board_f_cpu = 800000L
person Dblock247    schedule 01.11.2017
comment
Было бы лучше, если бы вы упомянули, что задержка составляет половину от того, что должно было быть! Заметно неточным является то, что вы говорите, когда оно отличается, может быть, на 10%, а не на 100%. - person ; 01.11.2017
comment
@duskwuff мои извинения. Ваша помощь была оценена. - person Dblock247; 01.11.2017