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