=DeaD= писал(а):в отпуск пора, сегодня поставил себе AVRStudio, WinAVR на недавно освеженный комп и не смог скомпилить пример, чего-то с makefile'ом намутил умудрился на ровном месте, хотя до этого раз 10 ставил всё и нормуль было ппц, переработал
Ппц. понял где грабли - русские буковки в пути к проекту бойтесь англоязычного софта! Повесил предупреждение в курс.
Perform a delay of __ms milliseconds, using _delay_loop_2().
The macro F_CPU is supposed to be defined to a constant defining the CPU clock frequency (in Hertz).
The maximal possible delay is 262.14 ms / F_CPU in MHz.
When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. In this mode _delay_ms() will work with a resolution of 1/10 ms, providing delays up to 6.5535 seconds (independent from CPU frequency). The user will not be informed about decreased resolution.
Короче оно якобы нормально до 6.5 секунд должно работать, у кого под руками МК живой есть со светодиодом, можете проверить? У меня эмулятор чего-то тупит встроеный в AVRStudio
Добавлено спустя 1 минуту 23 секунды: А, ну да. 6.5 вроде. Щас проверю
Добавлено спустя 15 минут 6 секунд: Получается, что это добавлено было в последних версиях avr-libc. У меня стоит 1.4.6, и там нет этого режима уменьшенного разрешения. Щас скачал 1.6.2 - там есть
#include <avr/io.h> //подключаем библиотеку для работы с портами #include <util/delay.h> //подключаем библиотеку для задержек работы программы на нужное время
int main(void) //объявление главной функции в которую входим при запуске программы { DDRB = 0xFF; //Открываем порт B как выход while(1) //В бесконечном цикле { PORTB = 0x00; //Устанавливаем нули на порт B _delay_ms(250); //Ждем 1/4 секунды PORTB = 0xFF; //Устанавливаем единички на порт B _delay_ms(250); //Ждем еще 1/4 секунды }; return 0; }
убрал циклы из пауз и PORTB = 0x00 из инициализации, ну и инициализацию переменной "i" для циклов и библиотеку Int-типов.
Ага, ну маладцы прям, а если новичек решит сам сделать мигание на основе вашего примера? Он возьмет и сосчитает _delay_ms(1000) и ничего работать у него не будет.
Я к тому, что новичок не полезет читать максимальное количество мс которое можно задать _delay_ms( ), он может задать и больше максимального. Или у новых компиляторов ограничение снято?
Сергей писал(а):Я к тому, что новичок не полезет читать максимальное количество мс которое можно задать _delay_ms( ), он может задать и больше максимального. Или у новых компиляторов ограничение снято?
Я не понял, мы тут собрались кого-то си\си++ учить или пионеров опекать? Новичек с регистрами МК такого вообще может натворить не читая документации, а уж если еще и в фьюзы полезет не разобравшись... тогда просто сразу "ой", короче как страшно жить...
Сергей писал(а):Ну раз решили учить МК, так давайте делать так, чтобы новички не допускали ошибок глупых
Это как можно обеспечить? Подарить им тьютора каждому, чтобы за спиной стоял и смотрел чего не так новичек куда пишет? Или к каждой команде справку по ней сразу справа писать?
что остановились? один пример есть, теперь думайте как двумя диодам помигать, это уже побитовые операции. а то понапридумываете черти что, я даж сомневатьсч стал знаю ли я Си. Шаг вправо шаг влево это творчество, ошибки делают все. на них и учимся.
Сергей писал(а):Ну раз решили учить МК, так давайте делать так, чтобы новички не допускали ошибок глупых
Это как можно обеспечить? Подарить им тьютора каждому, чтобы за спиной стоял и смотрел чего не так новичек куда пишет? Или к каждой команде справку по ней сразу справа писать?
Вот насчет справки к каждой команде - это уже близко