Популярные проекты

WEB PICµBASIC LOGIC CONTROLLER

USB PICµBASIC Mid Hardware

USB PICµBASIC LOGIC CONTROLLER

DDS генератор сигналов "OSKAR-DDS"

Термостол для оплавления паяльной пасты

Осциллограф Карманный "OSKAR" V3.1

Электроника и механика 3-х координатного станка ЧПУ (Hobby CNC)

Простой счетчик

Измеритель ESR и емкости конденсаторов

Самодельный установщик SMD компонентов - раскладочный станок "SMD PLACER V2"

Прибор для измерения частоты, емкости, индуктивности, сопротивления

Выключатель /диммер светодиодных лент с ДУ.

Светомузыка «СЕМИЦВЕТИК» + автомат световых эффектов.

Универсальный прибор для автомобиля. Часы, термометр, вольтметр, тахометр.

Все, что нельзя запрограммировать на ассемблере, приходится паять.

      Этот сайт посвящен моим проектам на PIC контроллерах, доступных для публичного освещения. Все приведенные схемы реализованы в железе и работают в настоящее время в быту или производстве. Для написания программ использован пакет MPLAB/х , свободно распространяемый фирмой MICROCHIP. Используется программатор PICKIT2/3, ICD2/3. Любую конструкцию можно собрать самому, даже если она платная и получить бесплатно код разблокировки. Также можно приобрести в качестве набора для сборки или готового изделия. Принимаются заказы на разработку аналогово-цифровой или цифровой электроники, систем управления и электроники для производства с применением контроллеров.
Вопросы и предложения писать на почту Gennadiy.V@gmail.com
Если у Вас есть интересные предложения, закакзы или вопросы и форум Вам не помог - адрес тот же.


DEVICE PICµBASIC LOGIC CONTROLLER
Программируемый логический контроллер на одной микросхеме.

  Схема контроллера

  Схема подключения периферийных модулей

     Теперь DEVICE PICµBASIC LOGIC CONTROLLER, со встроенным интерпретатором языка PICµBASIC всего на одной микросхеме - контроллер PIC18F26K22. Также добавился интерфейс MODBUS RTU SLAVE, котрый позволяет обмениваться переменными с WEB PICµBASIC LOGIC CONTROLLER.
     Полностью поддерживается удаленное управление, программирование и обновление прошивки через сеть интернет, с промежуточным звеном MODBUS RTU MASTER, которым выступает WEB PICµBASIC LOGIC CONTROLLER.
     Полностью сохранена возможность самостоятельной автономной работы без подключения к шине, с программированием напрямую с компьютера через RS232 или RS485
     На рисунке показана схема контроллера, назначение выводов и три варианта подключения к шине MODBUS или к компьютеру.


     ПО контроллера поддерживает:
   - Интерфейс RS232/RS485 MODBUS RTU 115200 8N1 - 1 порт
   - Интерфейс RS232/RS485 1200-115200 8N1 - 2 порт
   - 19 линий ввода/вывода
   - 11 аналоговых входов 10бит
   - 4 канала шим
   - Часы
   - ЖКИ символьный дисплей HD44780
   - ЖКИ графический дисплей UC1601s
   - Семисегментные индикаторы
   - Аудио выход - динамик
   - Интерфейс шины 1-Wire с поддержкой DS1990,DS18B20 - 2 канала
   - Интерфейс датчика DHT22
   - Интерфейс RFID Em Marine - 2 канала
   - Счетчик импульсов до 10МГц
   - Генератор прямоугольных импульсов до 7 МГц
   - Аудиовыход - нотный стан 5 октав
   - ну и другие функции, читаем описание.

  Разводка печатной платы

  Фото макета

    
Все обновления прошивок, программ, документации находятся в разделе Файлы / Files


DEVICE PICµBASIC LOGIC CONTROLLER
MODBUS RTU - спецификация.

Функции  MODBUS RTU DEVICE PICµBASIC

В качестве регистров хранения (Read Holding Registers) в контроллерах выступают переменные.

                3 (0x03) — чтение значений из одного или  нескольких регистров хранения (Read Holding Registers).
Запрос состоит из адреса первого элемента таблицы, значение которого требуется прочитать, и количества считываемых элементов. Адрес и количество данных задаются 16-битными числами, старший байт каждого из них передается первым.
В ответе передаются запрошенные данные. Количество байт данных зависит от количества запрошенных элементов. Перед данными передается один байт, значение которого равно количеству байт данных.
Формат пакетов MODBUS

Запрос

1 байт – Адрес устройства
2 байт – Функция 0x03
3 байт - Адрес первой ячейки(параметра) (HIGH)
4 байт - Адрес первой ячейки(параметра) (LOW)
5 байт - Число ячеек(HIGH)
6 байт - Число ячеек(LOW)
7 байт  - CRC (LOW)
8 байт  - CRC (HIGH)

Ответ

1 байт – Адрес устройства
2 байт – Функция 0x03
3 байт - Счетчик байт данных
4 байт - Данные(addr) singed  (HIGH)
5 байт - Данные(addr)  singed  (LOW)
--/ *+1 байт   --/ Данные(addr+1) singed  (HIGH)
--/ *+2 байт   --/ Данные(addr+1)  singed  (LOW)
...
7/n-1 байт  - CRC (LOW)
8/n    байт  - CRC (HIGH)

В случае указания числа ячеек = 2 происходит чтение/запись одной переменной  singed 16 бит (A-Z, a-z).
В случае указания числа ячеек = 1 происходит чтение/запись индексной переменной.
Любая переменная передастся двумя байтами, в случае индексной переменной, старший = 0. 
В случае указания числа ячеек = 0 происходит чтение/запись текстовой переменной с ее длинной (до 63 байт).

                16 (0x10) — запись значений в несколько регистров хранения  (Preset Multiple Registers)

Запрос

1 байт – Адрес устройства
2 байт – Функция 0x10
3 байт - Адрес первой ячейки(параметра) (HIGH)
4 байт - Адрес первой ячейки(параметра) (LOW)
5 байт - Число ячеек (параметра) (HIGH)
6 байт - Число ячеек (параметра) (LOW)
7 байт - Счетчик байт данных
8 байт - Данные(addr) singed  (HIGH)
9 байт - Данные(addr)  singed  (LOW)
--/ *+1 байт   --/ Данные(addr+1) singed  (HIGH)
--/ *+2 байт   --/ Данные(addr+1)  singed  (LOW)
...
7/n-1 байт  - CRC (LOW)
8/n    байт  - CRC (HIGH)

Ответ

1 байт – Адрес устройства
2 байт – Функция 0x06
3 байт - Адрес первой ячейки(параметра) (HIGH)
4 байт - Адрес первой ячейки(параметра) (LOW)
5 байт - Число ячеек (параметра) (HIGH)
6 байт - Число ячеек (параметра) (LOW)
7 байт  - CRC (LOW)
8 байт  - CRC (HIGH)

В случае указания числа ячеек = 2 происходит чтение/запись одной переменной  singed 16 бит (A-Z, a-z).
В случае указания числа ячеек = 1 происходит чтение/запись индексной переменной.
В случае указания числа ячеек = 0 происходит чтение/запись текстовой переменной с ее длинной (до 63 байт).

               17 (0x11) — Чтение информации об устройстве (Report Slave ID)
Пример
-> ADR, 0x11, CRC_L, CRC_H
<- ARD, 0x11, кол-во байт, text- xx BYTES , CRC_L, CRC_H

Запрос

1 байт – Адрес устройства
2 байт – Функция 0x11
3 байт  - CRC (LOW)
4 байт  - CRC (HIGH)

Ответ

1 байт – Адрес устройства
2 байт – Функция 0x11
3 байт - Счетчик байт данных
4 байт  и далее – Данные  TEXT max 64b
...
/n-1 байт  - CRC (LOW)
/n    байт  - CRC (HIGH)

Пользовательские функции

                66 (0x42) — Данные BOOTLOADER

-> ARD, 0x42, text- xx BYTES , CRC_L, CRC_H
<- ARD, 0x42, text- xx BYTES , CRC_L, CRC_H

Запрос

1 байт – Адрес устройства
2 байт – Функция 0x42
3 байт  и далее – Данные  TEXT max 64b
/n-1 байт  - CRC (LOW)
/n    байт  - CRC (HIGH)

Ответ

1 байт – Адрес устройства
2 байт – Функция 0x42
3 байт  и далее – Данные  TEXT max 64b
...
/n-1 байт  - CRC (LOW)
/n    байт  - CRC (HIGH)

67 (0x43) — Данные терминала

-> ARD, 0x43, кол-во байт xx, text- xx BYTES , CRC_L, CRC_H
<- ARD, 0x43, кол-во байт xx, text- xx BYTES , CRC_L, CRC_H

Запрос

1 байт – Адрес устройства
2 байт – Функция 0x43
3 байт - Счетчик байт данных
4 байт  и далее – Данные  TEXT max 64b
...
/n-1 байт  - CRC (LOW)
/n    байт  - CRC (HIGH)

Ответ

1 байт – Адрес устройства
2 байт – Функция 0x43
3 байт - Счетчик байт данных
4 байт  и далее – Данные  TEXT max 64b
...
/n-1 байт  - CRC (LOW)
/n    байт  - CRC (HIGH)

Обработка ошибок

Ведущий отправляет запрос к Ведомому, в котором в поле «код функции» указывает ему на необходимое действие. 
Байты данных содержат информацию, необходимую для выполнения данной функции. 
Ведомый, в случае удачного выполнения этой функции, повторяет код функции в ответе. 
При возникновении ошибки, код функции в ответе модифицируется — старший бит выставляется в 1.
В байтах данных передается причина ошибки. Например при исполнении Ведомым функции 0x0F возникла ошибка, тогда он ответит Ведущему полем функции равным 0x8F
В дополнении к изменению кода функции, Ведомый размещает в поле данных уникальный код, который указывает на тип и причину ошибки.

Стандартные коды ошибок
01 — Принятый код функции не может быть обработан.
02 — Адрес данных, указанный в запросе, недоступен.
03 — Значение, содержащееся в поле данных запроса, является недопустимой величиной. 
04 — Невосстанавливаемая ошибка имела место, пока ведомое устройство пыталось выполнить затребованное действие. 
05 — Ведомое устройство приняло запрос и обрабатывает его, но это требует много времени. Этот ответ предохраняет ведущее устройство от генерации ошибки тайм-аута. 
06 — Ведомое устройство занято обработкой команды. Ведущее устройство должно повторить сообщение позже, когда ведомое освободится. 
07 — Ведомое устройство не может выполнить программную функцию, заданную в запросе. Этот код возвращается для неуспешного программного запроса, использующего функции с номерами 13 или 14. Ведущее устройство должно запросить диагностическую информацию или информацию об ошибках от ведомого.  
08 — Ведомое устройство при чтении расширенной памяти обнаружило ошибку паритета. Ведущее устройство может повторить запрос, но обычно в таких случаях требуется ремонт

CRC-16

Циклически избыточный код  -  полином A001h

Физический интерфейс

RS485  115200 8N1

Адресное пространство

Диапазон адресов – 1-127
Адрес = 0 – широковещательный – принимают все контроллеры. С этим адресом выполняется только одна команда -  генерация нового случайного адреса.

Временные  диаграммы

Обработка запросов с функциями 3 (0x03), 16 (0x10), 17 (0x11) всегда   выполняется в фоновом режиме, независимо от программы пользователя. Одновременно может выполняться только один запрос. Минимальное время тишины  1,5 ms. Минимальное время до начала ответа – 0mS, типичное 1mS, максимальное 200 Ms (если контроллер занят функциями работы с другими критичными во времени интерфейсами). Время ожидания ответа мастером до ошибки таймаута  - 500 mS.
Обработка запроса 67 (0x43)  возможна в случае остановленной программы пользователя(консоль). Если запущена, то обрабатывается только одна команда  - BREAK.
Обработка запроса 66 (0x42)  возможна только в режиме BOOTLOADER. Минимальное время тишины 300us.
В случае ответа множеством посылок, сам контроллер формирует время тишины 2,5 mS.

Адреса ячеек и отображение на переменные
Все адреса лежат в диапазоне 0-1023 для указания числа ячеек = 1. Происходит чтение/запись индексной переменной.
Например адрес 25 соответствует  переменной #(25). То есть адрес соответствует индексу.

Все адреса лежат в диапазоне 0-51  для указания числа ячеек = 2. Происходит чтение/запись одной переменной  singed 16 бит (A-Z, a-z).
Например адрес 1 соответствует  переменной B. То есть адрес соответствует имени переменной по алфавиту.

Все адреса лежат в диапазоне 0-1023  для указания числа ячеек = 0. Происходит чтение/запись текстовой переменной с ее длинной (до 63 байт).
Длинна определяется значением в первом байте согласно адреса.


ПО распространяется под лицензией Shareware. Вы можете скачать с сайта схемы, инструкции, прошивки бесплатно.

Обсудить на форуме
Купить