Мне лень смотреть сколько возможно ШИМ у 2313.) Но ведь ядром тебя никто не заставляет пользоваться. Ты можешь использовать Ардуино, но не использовать её функкции. В этом то вся и гибкость Ардуино.
Ты будешь смеяться. Но людям я, зачастую, отдаю .ino файл с тестом. И они фигеют от этого. А основной файл находится в .с или .сpp.
Ну это кто как привык
Пофигу что в настройках. Просто не используй миллис в всё. Она не будет ключаться у тебя.)
Ну я бы не был так категоричен. В ядре нулевой таймер всегда настраивается по умолчению на генерацию millis не зависимо от использования. Здесь сделан прямой запрет этого действия.
int main() {
while(1){
// и чё?
}
}
Это ты такой умный! А средне статистический пользователь setup и loop попользует и…
Я не умный.) Я тоже setup() и loop() использую, по возможности.)
Просто, ребёнка Си учу, хотя она на Пайтоне курсы проходит.)
Ну нет. Ответ мой был в том, что никто тебе не запрещает не использовать Ардуино IDE. Ты понимаешь? Пиши себе на Си и всё тут.)
Согласен. Я и пишу где мне удобней для данной задачи.
Ну ведь ты же спрашиваешь о ядре и миллис? А я тебе разъясняю, в меру своих возможностей.)
Не. Не спрашиваю. Я наоборот напоминаю ТС, что 4 канала ШИМ можно использовать, если не используешь миллис. Иначе будут нормально работать только 2 канала таймера 1. Того который не нулевой, а настройках обзывается как Secondary.
ОК, виноват.)
Значит, мы вместе объясняем ТС-у.)
Надеюсь что дойдёт.
Наглядный эксперимент
int main () {
DDRD = 0;
PORTD = 0xFF;
uint8_t i = 0;
while (1) {
PORTD = i++;
if (i > 220) {
i = 0;
}
}
return 0;
}
Скетч использует 84 байт (1%) памяти устройства. Всего доступно 8192 байт.
Глобальные переменные используют 0 байт (0%) динамической памяти, оставляя 1024 байт для локальных переменных. Максимум: 1024 байт.
int main () {
DDRD = 0;
PORTD = 0xFF;
uint8_t i = 0;
pinMode (10, OUTPUT);
while (1) {
PORTD = i++;
digitalWrite(10, HIGH);
if (i > 220) {
i = 0;
digitalWrite(10, LOW);
}
}
return 0;
}
Скетч использует 334 байт (4%) памяти устройства. Всего доступно 8192 байт.
Глобальные переменные используют 0 байт (0%) динамической памяти, оставляя 1024 байт для локальных переменных. Максимум: 1024 байт.
uint8_t i = 0;
void setup() {
DDRD = 0;
PORTD = 0xFF;
pinMode (10, OUTPUT);
}
void loop() {
PORTD = i++;
digitalWrite(10, HIGH);
if (i > 220) {
i = 0;
digitalWrite(10, LOW);
}
}
Скетч использует 568 байт (6%) памяти устройства. Всего доступно 8192 байт.
Глобальные переменные используют 10 байт (0%) динамической памяти, оставляя 1014 байт для локальных переменных. Максимум: 1024 байт.
int main () {
DDRD = 1;
PORTD = 0xFF;
DDRB = 1;
uint8_t i = 0;
while (1) {
PORTD = i++;
PORTB |= (1 << PB2); // PB2 это пин 10 в ардуино
if (i > 220) {
i = 0;
PORTB &= ~(1 << PB2);
}
}
return 0;
}
Скетч использует 86 байт (1%) памяти устройства. Всего доступно 8192 байт.
Глобальные переменные используют 0 байт (0%) динамической памяти, оставляя 1024 байт для локальных переменных. Максимум: 1024 байт.
Но мысль то понятна, надеюсь?
Под лупом ещё одна функция прячется. Сделай while(1) в сетупе и получишь ещё один результат.
Конечно. И бреком можно из неё выскочить.
И даже локальную переменную в этом случае на заведёшь.) Ибо, это всё издержки
языка.
Ты попробуй миллис вывести во всех этих экспериментах.
В каких экспериментах? Пример приведи.
Зачастую, миллис там и нах не нужен!