Не пишите много раз в EEPROM, там ресурс совсем не большой (100 000 раз, на самом деле в напр. ~10 раз больше). EEPROM быстро создаст проблемы. Напр. сохранять только статические настройки, изменения при выключения/вкл. и т. д.
electroget Вывод в порт у любой ардуинки возможен. Разница между мега 2560 и мегой 328 только в наличии "полных портов" на 8 бит. И то... если в 328й использовать только как порт PD - будет вариант 8-битного вывода (но забываем про Rx/Tx, прервыания и перепрошивку через бутлоадер). Да еще можно без внешнего кварца PB использовать - но то уже не "классическая" нанка/про-мини, а некий самодел под специализированной "платформой". Для простейших тренировок можете воспользоваться симулятором статья http://sheepdogguides.com/arduino/aht9simsimm.htm сайт с симулятором https://www.sites.google.com/site/unoardusim/ Совет - прячьте код под спойлер - иначе занимает много места и отвлекает внимание от вопроса. Для тестов лучше библиотеки не использовать (та же EEPROM) - добавляют трудностей на начальном этапе освоения. Достаточно обычного массива в ОЗУ. avr/io.h и так "по умолчанию" в ардуиноIDE подключен.
Не пишите много раз в EEPROM, там ресурс совсем не большой
Благодарю за совет, но это пока всё тестовые наработки, если дело когда-нибудь дойдёт до реальной схемы, то eeprom конечно же будет внешний, на чипе 25LC08 например.
Добавлено after 1 minute 10 seconds: BOB51, Понял, спасибо.
Добавлено after 4 minutes 41 second: veso74, Пока не вижу необходимости пользоваться симулятором. У меня есть живая плата и живой Ардуино IDE, так оно как-то привычнее людям старой школы.
Я тоже, по-старому . Моделирование в симуляроре только как идея, напр. думать о наших делах для хобби в местах, где включение железа невозможно, на работе например .
Карма: 5
Рейтинг сообщений: 61
Зарегистрирован: Ср сен 30, 2020 16:51:47 Сообщений: 4614 Откуда: РФ
Рейтинг сообщения:0
veso74, Я этим всем занимаюсь только в любительском плане и только дома, по выходным в основном. Живое железо имеет то преимущество, что нет сомнений в полученном или не полученном результате. А для неспециалиста (а я не специалист в программировании микроконтроллеров) это очень важно.
Симулятор (да еще и с симуляцией простейшей внешней обвязки) дает возможность просмотреть пошаговое выполнение программы и состояние переменных. Полезно при отладке простых алгоритмов. Более сложные моменты проверяются отладкой в железе с выводом контрольной информации на терминалку IDE.
В данном случае человека интересовали именно порты с байтовой организацией. За начинку разговор пока еще не шел (начало освоения). Интерес к аппаратным вкусностям будет позже проявляться.
Речь о применимости форм-фактора "DIP микросборка" элементной базы вида "ардуиноподобные". Ежли далее пойдет станет стандартом блочно-модульный вариант но с меньшим размером модулей при одновременном росте их функциональности и надёжности. То, о чем ранее говорилось.
Навеяло по мотивам: viewtopic.php?f=57&t=193692 одиночная кнопа с селекцией по длительности удержания (черновик - тест на нанке под ардуино IDE) Спойлер
Код:
/* *---- шаблон главного файла проекта ----* *---------- TEST ----------* * test.ino */ //---------- /* * раздел подключаемых файлов, обьявлений * и размещения конструкторов классов */
//#include "test.h" // файл глобальных дефайнов текущего проекта
#define LED 7 // control led active 1 #define knop 14 // кнопка active 0
#define skstm 35 // (antizvon) значение антидребезговой паузы в mS #define cnt1_data 15 // значение кванта для указателя(вектора) в 1015mS
volatilebyte SnDat = 1; // буфер предыдущего значения кнопки volatileint cnt1 = 0; // счетчик досчета "условных единиц" для вектора исполняемой программы volatilebyte ptrr = 0; // указатель(вектор) исполнительной программы volatilebyte count = 0; // счетчик количества коротких нажатий // обнуляется "длинным удержанием"
volatilebyte flag1 = 0; // флаг "зафиксировано изменение статуса кнопки" volatilebyte flag2 = 0; // флаг "изменение статуса кнопки подтверждено" volatilebyte en_cnt1 = 0; // флаг "счет интервала разрешен"
// инициалзация выводов МК и генератора сетки опроса сенсоров/кнопок voidskan_init();
//----------
voidsetup() { // put your setup code here, to run once: Serial.begin(9600); skan_init(); }
//----------
voidloop() { // put your main code here, to run repeatedly: if(flag2) { flag2=0; // если кнопка стала равна 0 if (!SnDat) { ptrr = 0; // сброс вектора в 0 cnt1 = 0; en_cnt1 = 1; // активировать счет } // если удерживается статус 0 //продолжить счет
// если кнопка стала равна 1 else{ en_cnt1 = 0; // остановить счет // отработать исполнитель согласно вектора switch (ptrr) { case0: //do something when var equals 1 фальстарт(0-525mS) break; case1 ... 5: //do something when var equals 2 интервал номер 1 (525 - 2625mS) digitalWrite(LED, HIGH); count++; Serial.println(count, DEC); break; case6 ... 15: //do something when var equals 3 интервал номер 2 (3150 - 7875mS) digitalWrite(LED, LOW); count = 0; break; case16 ... 25: //do something when var equals 6 аварийный сброс по "залипанию" (8400- 13125mS) break; default: // if nothing else matches, do the default // default is optional break; } }
// если удерживается статус 1 // ничего не делать } }
/* генератор сетки опроса сенсоров/кнопок (1mS) * и самого опроса ЛВК * по выходу при подтвержденной комбинации * flag2=1, SnDat = значению кнопки, * skstm = время удержания комбинации в mS*skstm (50mS) */ ISR(TIMER0_COMPA_vect) { staticbyte Cnt_A=0; // счетчик досчета для антидребезговой паузы в uS staticbyte sn_tmp0; // буфер текущего значения кнопки Cnt_A++; if (Cnt_A == skstm) { Cnt_A=0; sn_tmp0 = digitalRead(knop); // читаем порт в буфер текущего значения // действия при совпадении с предыдущим значением if (SnDat == sn_tmp0) { if (flag1) { flag1=0; // антидребезг отработан, значение подтверждено flag2=1; // запрос на обработку в основном цикле программы // сбрасывается в основном цикле программы } }
// действия при несовпадении с предыдущим значением else {flag1=1; SnDat = sn_tmp0;}
// вычисление вектора по количеству переполнений счетчика длительности // cnt1 если данное действие резрешено основной программой if (en_cnt1) { cnt1++; if (cnt1 == cnt1_data){cnt1=0; ptrr++;} }
} }
//---------- //---------- файла/end of file---------------------
угу. Dev.C это хорошо. з.ы. майл.ру навязывает сервис новый, Mail Space. Пробовал заглянуть туда,там письма мои лежат за 2006 год. короче,двадцатилетней давности. Естественно,не помню че там с кем переписка,но почитать забавно. Нездоровая какая то фигня. кому надо хранить это? причем с обычного ихнего сайта это недоступно.
То ли стервис то ли очередное мошенничество. На сегодня мошенники в тырнете основной контингент после желающих бабло срубить. Относительно того Dev-C++ и статеек... Получается успел урвать несколько из того, что тяжко найти... Там было деление на статейки относительно просто Си (они легкодоступны) и их варианты относительно Dev-C++... Вот их на всяк случай прицеплю (ибо сегодня проверяя ссылки их второй раз не обнаружил - остались лишь по простому Си)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения