Инструменты пользователя

Инструменты сайта


mpt:доработка_скетча_с_веб-панелью

Это старая версия документа.


Доработка скетча с веб-панелью.

Бухаров А.В. 2019/06/14 08:24

https://all-arduino.ru/arduino-dlya-nachinayushhih-urok-14-preryvaniya/ - тут пример обработки аппаратного прерывания INT0 (в этой статье и про дребезг контактов написано).

// Назначение прерывания
int buttonInt = 0;
 
// Переменные с пинами светодиодов
int yellowLed = 11;
int redLed = 10;
int greenLed = 9;
int nullLed = 6;
volatile int selectedLed = greenLed;
 
// Инфракрасный дальномер
int distPin = 0;
 
void setup () {
 // Устанавливаем режимы пинов
 pinMode(redLed, OUTPUT);
 pinMode(greenLed, OUTPUT);
 pinMode(yellowLed, OUTPUT);
 pinMode(nullLed, OUTPUT);
 
 // Устанавливаем прерывание
 attachInterrupt(buttonInt, swap, RISING);
 
}
 
// Обработчик прерывания
void swap() {
 if(selectedLed == greenLed)
 selectedLed = redLed;
 else if(selectedLed == redLed)
 selectedLed = yellowLed;
 else if(selectedLed == yellowLed)
 selectedLed = nullLed;
 else
 selectedLed = greenLed;
}
 
void loop () {
 // Получаем данные с дальномера
 int dist = analogRead(distPin);
 int brightness = map(dist, 0, 1023, 0, 255);
 
 // Управляем яркостью
 analogWrite(selectedLed, brightness);
}

Необходимо использовать ключевое слово «volatile» перед объявлением переменной значение которой будет изменяться в обработчике прерывания.

По состоянию на 7 июня 2019 г в нем реализована обработка GET запросов, выделение команд и данных.

webserver_mpt_ver_2_0.ino

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

Скетч Ястребова: 2artonitmpt_large_1_3.ino.

Именно этот код работал на презентации.

Работа с W5500 по прерыванию.

Источник: https://habr.com/ru/post/414211/ Модуль W5500 подключен к SPI интерфейсу МК (MOSI, MISO, SCK, SCLK). Кроме того, к определённому выходу МК подключен вывод RST (аппаратный сброс), и к входу внешнего прерывания INT0 подключен соответствующий вывод INT. Последний используется по прямому назначению: При возникновении того или иного события в модуле W5500 он формирует импульс на выводе INT, который обрабатывается контроллером в теле внешнего прерывания. МК узнаёт, на каких сокетах произошло событие, затем переписывает коды событий для каждого сокета в определённый массив. Дальнейшая обработка прерывания происходит внутри основного цикла программы. Всего документировано пять событий: клиент подключился, клиент отключился (точнее, подал запрос на отключение), поступили данные от клиента, сработал таймаут, данные отправлены успешно. В основном цикле обрабатываются все события, кроме последнего. В данную обработку помещён оператор switch-case. Самая большая часть программного кода на языке Си встречается в секции обработки третьего события (приём данных). В нём после функции обработки принятой информации также помещён оператор switch-case, но в данном случае этот «переключатель» связан с переменной, отвечающей за состояние сокета, о котором говорилось выше (значения 0, 1, 2). Первая секция отвечает за процедуру распознавания пароля. Принятые символы переписываются в отдельный парольный буфер. При определённых условиях работают функции сравнения принятой строки со строками-константами, содержащих пароли. В случае того или иного совпадения присваивается соответствующее состояние. Вторая секция самая простая – содержимое собственного буфера принятой информации перенаправляется на UART микроконтроллера. Это режим обычного использования. Третья секция (самая большая) отвечает за обработку команд – режим управления устройством.

Кроме продолжения обработчика прерываний в основном цикле программы помещены обработчики виртуальных таймеров – таймаут для разрыва соединения при неуспешной попытке ввода пароля, периодическая отправка «keep-alive» и отправка клиенту сформированного по таймеру TCP пакета. Ещё в тело основного цикла помещена функция чтения из UART, внутри которой переписываются принятые контроллером символы в собственный (промежуточный) буфер передачи и происходит сброс таймера, отвечающий за формирование TCP пакета.

Все процедуры сокетов помещены в цикл от 0 до 7, итератор которого привязан к номеру сокета. Таким образом, происходит последовательная обработка всех сокетов. Изначально я подразумевал, что, если присвоить каждому из восьми сокетов одинаковый номер порта, то можно обеспечить подключение до восьми пользователей по одному и тому же порту. Однако такая конфигурация не заработала, и данный вопрос пока отложен на будущее. В документации на W5500 это отражено т.о.:

Предполагаемые задачи при работе с МПТ:

  1. Судя по схеме, прерывание от W5500 заведено на пин 32. Это PD2, он же INT0. Статьи про прерывания:
  • b. Работа надо вести на макете, через UART (для быстрой отладки).
  • c. Надо зафиксировать факт получения прерывания. Алгоритм примерно такой:
  • i. Разрешить обработку прерывания INT0.
  • ii. При получения прерывания выводить в UART сообщение. Прочитать связанные регистры.
  • iii. После отладки внести изменение в основную программу. Программа должна работать с W5500 не по опросу, а по прерыванию.
  1. Обработку кнопок тоже сделать по прерыванию.
/home/cardsoft/artonit.ru/docs/wiki/data/attic/mpt/доработка_скетча_с_веб-панелью.1560490535.txt.gz · Последние изменения: 14.06.2019 08:35 — buh