Авторизация


...

Кто на сайте?

Сейчас 124 гостей и 2 зарегистрированных пользователей на сайте

  • elwhidbynath
  • magierskadal

Статистика

-Посетители : 28029
-Материалы : 210

Пользователь сайта продает...

  pic12f683

Пользователь сайта покупает...

Подключение ENC28J60 + PIC к локальной сети ЧАСТЬ III

Автор: Николай Викторов Просмотров: 4972

 

 

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

     Сам по себе UDP протокол , является не надежным , он отправляет сообщения без подтверждения  и что оно дошло до адресата нет ни какой гарантии.  Но это во первых не всегда и нужно , во вторых не требует предварительного соединения , а в третьих можно реализовать обмен программно , как и сделано   в этом устройстве. При получении UDP пакета микроконтроллер в ответ передает  сообщение о не правильном запросе (команда с ошибкой ) или сообщит состояние  порта «D» , при условии правильно указанного пароля , который вводится перед каждой командой . Если пароль введен не правильно от устройства не придет ни какого ответа, т.к. он посчитает этот пакет «ложным».

Протокол описывать нет смысла в интернете достаточно информации , начнем с программное реализации.

   В этом примере реализован UDP server (он отвечает на запросы) . Хочу напомнить , что каждый принятый пакет в конечном итоге располагается в ОЗУ микроконтроллера , начиная с адреса 0200h . При получении пакета от ПК микроконтроллер анализирует что за протокол , если это UDP то переходим к его обработке.

 

alt

 

 

          Не каждый протокол UDP обрабатывается , а только тот , который приходит на определенный порт . Еще иногда говорят: «Программа слушает такой то порт» … Здесь так же , мы будем «слушать» только порт  1422 . Выбрал просто так  , при желании можно поменять на любой другой. Ниже как это реализовано:

 

alt

           Теперь  нам  стало  понятно   что это пакет ,  предназначенный для нас  , но перед тем как его обрабатывать необходимо проверить его на ошибки .Для этого нужно подсчитать контрольную сумму  пакета и в случае совпадения с контрольной суммой указанной в самом пакете переходим к обработке .        ( ПП       call       Prov_paketa ; )  Для начала проверяем пароль , я указал 1234 .(соответственно можно изменить на любой 4-ч значный).

 

alt

 

 

            При любом не правильном значении поднимаем флаг Flag_ch,1 сигнализирующий о не правильности пароля . При выходе из ПП  пакет «сбрасывается»  и дальше не обрабатывается  , ответ на ПК не приходит. Если пароль правильный переходим к анализу  полученной команды. Алгоритм  «расшифровки» команды такой же , только проверяем не все слова,  а всего два знака  в слове выключить и включить проверяем на соответствие вторые знаки , следующий  знак в команде это номер нагрузки  №2.  Вот так выглядит команда на включение 2-й нагрузки -1234 включить №2 , после получения  которой мы формируем один из двух ответов. Если  команда  расшифрована и выполнена , то ПК получит следующий вот такой ответ :

 

alt

 

 

          Можно просто ввести пароль и отправить сообщение (в нашем случае 1234)  , в ответ получим то же такое сообщение , что дает нам возможность проверки состояние  порта.  Если команда  передана не правильно (с ошибкой ) то она не будет выполнена , если  не верно указан пароль получим  ответ :  « Не правильный запрос» . Как формируется сам ответ можно посмотреть в программе , ни чего сложного нет , остановимся на том , как собрать все это в пакет UDP и отправить на ПК.  Вот так выглядит UDP пакет , выделенная область это наш текстовый ответ о состоянии порта.

 

alt

 

 

     Пакет  ограничен 255 байтами  - это достаточно для ответа, (можно увеличить , доработав немного программный код) . Ответ записываем в ОЗУ начиная с адреса 0x022E, по окончании записи для расчета длины пакета считывается адрес последнего записанного знака из регистра FSR0L . На основании полученных данных рассчитываются  количество байт для расчета контрольной суммы, количество байт для отправки , записи длины IP пакета и длины самого UDP пакета.  Данные длины записываются в пакет , рассчитывается контрольная сумма  и отправляем пакет адресату.  При необходимости изменения текстовых сообщений (ответов ) следует учитывать ограничение  - не более 210 знаков . После выполнения команды состояние порта записывается в EEPROM , что дает возможность запоминать состояние включенных / выключенных нагрузок при пропадании питания. При повторении конструкции необходимо указать IP адрес из диапазона вашей сети . По умалчиванию прописан 192.168.1.4

  В следующей статье мы рассмотрим реализацию на asm протокола TCP и будем  управлять этими же нагрузками по WEB интерфейсу  при помощи стандартного браузера.

Ссылки:

Задать вопросы можно на форуме.

Скачать программу, прошивку, проект MPLAB asm.   

Ссылка для скачивания доступна только авторизованным пользователям сайта !

Случайные статьи....

Prev Next

Что такое микроконтроллер?

21-04-2012 Super User

   Надеюсь, Вы не сильно утомились, читая про двоичную арифметику, логические операции и т.д., но что поделаешь? Без этого никуда. Дальше  переходим к рассмотрению следующей главы -микроконтроллеры …. Микроконтроллер – в первую очередь, это микросхема, да  и  на вид практически  ничем не...

Простая программа для разводки печатных плат Sprint-Layout с дружеств…

03-06-2012 Игорь Безверхний

Простая программа для разводки печатных плат  Sprint-Layout с дружественным интерфейсом (часть 1)

  В радиолюбительской практике, а иногда и в профессиональной работе, мы сталкиваемся с необходимостью изготовления печатных плат. Помочь в этом может программа Sprint-Layout, которая представляет собой специализированный графический редактор для ручной разводки печатных плат. Предложенное в настоящей статье описание не...

Настенные часы – термометр с большими индикаторами

12-02-2016 wws63

Настенные часы – термометр с большими индикаторами

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

Подключаем LCD SSD1963 к STM32 по FSMC_16bit +Touch

23-05-2016 Александр Беглецов

Подключаем LCD SSD1963  к STM32 по FSMC_16bit +Touch

 В данной статье автор реализовал подключение TFT дисплея диагональю  7” дюймов  на контроллере SSD1963 к микроконтроллеру STM32F407VGT посредством FSMC шириной 16 бит. Скорость заливки экрана одним цветом у автора получилось приблизительно  60 кадров/сек (1000 кадров за 16,518 секунд) при тактовой...


Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru