Объявление

Свернуть
Пока нет объявлений.

Реализация последовательной асинхронной передачи данных в микроконтроллерах PIC

Свернуть
X
Свернуть

  • Реализация последовательной асинхронной передачи данных в микроконтроллерах PIC

    Введение.
    Серия PIC16Cxx от Microchip Technology, Inc. - это второе поколение высокопроизводительных восьмиразрядных микроконтроллеров на базе EPROM. Некоторые микроконтроллеры из этой серии (например PIC16C71 и PIC16C84) не имеют встроенного последовательного асинхронного порта. Эта статья содержит описание последовательного асинхронного интерфейса ( полудуплексное RS-232 соединение ) с программной обработкой прерывания для микроконтроллеров PIC16Cxx. Эти микроконтроллеры могут работать на очень большой скорости, с минимальной длительностью такта 250нс ( при частоте 16МГц ). Для тестирования RS-232 режима предлагается использовать простой цифровой вольтметр / систему опроса данных ( Digital Volt Meter / Analog Data Acquisition Systems ) выполненный на PIC16C71, Этот прибор принимает команды от ПК и передает обратно восмибитные значения с выбранного АЦП канала.

    Реализация.
    Ниже приведено подробное описание реализации полудуплексного RS-232 интерфейса с программной обработкой прерывания для PIC16C71. В программе примера в качестве передающего выхода используется RB7, а для приема – RTCC/RA4. Конечно, и вход и выход соединяются через соответствующий преобразователь уровней сигнала RS-232 / ТТЛ. Описание преобразователя уровней напряжения дано в разделе Аппаратная часть.

    Режим передачи.
    Передающий режим в программе напрямую связан с использованием прерывания. Зная частоту, на которой работает микроконтроллер и скорость передачи в Бодах, можно вычислить сколько машинных циклов составляет длительность передаваемых импульсов. Счетчик машинных циклов микроконтроллера ( RTCC ), вместе с определенной предустановкой может быть использован для генерации прерывания при переполнении RTCC. Это прерывание, вызванное переполнением счетчика, может быть использовано как сигнал для передачи очередного бита. В представляемой здесь программе рабочая частота микроконтроллера ( '_ClkIn' ) и скорость передачи ( '_BaudRate' ) программируются пользователем. В общих временных установках по этим значениям вычисляется таймаут счетчика ( длительность одного передаваемого бита в машинных циклах ). Предустановка для счетчика может быть указана или нет, это тоже определяется в общих временных установках. Вычисления выполняются в заголовке файла 'rs232.h'. Обратите внимание, что наиболее высокая скорость передачи может быть достигнута, если вместо использования прерываний применять паузы, формируемые программой. Конечно, в этом случае процессор будит занят только этой работой.
    Передача байта выполняется вызовом функции 'PutChar', при этом байт данных, находящийся в регистре 'TxReg' передается на выход. Перед тем, как вызвать эту функцию ( 'PutChar' ), данные должны быть загружены в 'TxReg', а так же необходимо убедиться, что последовательный порт в данный момент свободен. Последовательный порт свободен, если оба бита '_txmtProgress' и '_rcvOver' очищены ( смотри описание регистра состояния/управления, которое приведено ниже ).
    Основные моменты применения функции 'PutChar'.
    1) Убедитесь, что биты '_txmtProgress' и '_rcvOver' очищены.
    2) Загрузите передаваемые данные в 'TxReg'.
    3) Вызовите функцию 'PutChar'.

    Режим приема.
    Реализация приемного режима немного отличается от передающего. В отличии от передачи ( в программе примера в качестве выхода TX используется выход RB7, но это может быть и любой другой выход ) приемный вход должен быть соединен только с RTCC/RA4 входом. Это связано с тем, что при приеме первый стартовый бит должен быть детектирован в асинхронном режиме. Для детектирования стартового бита в режиме приема, RTCC модуль конфигурируется в режим счетчика. Регистр OPTION конфигурируется так, что RTCC модуль переходит в режим счетчика ( увеличивается на 1 по заднему фронту сигнала на входе RTCC/RA4 ). После такой установки в RTCC записывается значение 0xFF. Задний фронт сигнала на входе RTCC изменяет состояние счетчика RTCC с 0xFF на 0x00, что вызывает прерывание, сигнализирующее о стартовом бите. После этого RTCC/RA4 вход проверяется еще раз, чтобы быть уверенным, что изменение на входе не было помехой. Когда стартовый бит детектирован, RTCC модуль перенастраивается на увеличение от внутреннего генератора, а предустановка счетчика при этом зависит от частоты тактового генератора и скорости передачи, ( конфигурируются так же, как в передающем режиме ). Программа последовательного порта переходит в режим приема при вызове функции 'GetChar'. Перед вызовом этой функции необходимо убедиться, что порт свободен ( в '_txmtProgress' и '_revOver' битах статуса должны быть 0 ). После завершения приема байта данные сохраняются в регистре 'RxReg', и бит '_revOver' обнуляется.
    Основные моменты применения функции 'GetChar'.
    1) Убедитесь, что биты '_txmtProgress' и '_rcvOver' очищены.
    2) Вызовите функцию 'GetChar'.
    3) Принятый байт сохраняется в в регистре 'RxReg', после чего бит '_revOver' обнуляется.

    Генерация четности.
    Проверка четности может быть разрешена в общих временных установках переводом флага '_PATITY_ENABLE' в состояние TRUE. Если четность разрешена, она может быть выбрана 'EVEN' или 'ODD' ( проверка на нечетность или на четность ). В режиме передачи, если проверка на четность разрешена, вычисляется и передается девятым бит четности. В режиме приема четность вычисляется из принятого байта и сравнивается с девятым принятым битом. Если эти значения не совпадают, в регистре Состояния / Управления ( RS-232 Status / Control Register ) будет установлен бит '_ParityErr'. Бит четности вычисляется по алгоритму, указанному на рис. 1. Для реализации этого алгоритма очень эффективно использовать команды PIC16Cxx 'SWAPF' и 'XORWF' ( со способностью сохранять результаты операций как в том же регистре, так и в W регистре ). Подпрограмма генерации четности называется 'GenParity' находится в файле 'txmtr.asm'.


    Нажмите на изображение для увеличения. 

Название:	rs1.gif 
Просмотров:	1 
Размер:	1.5 Кб 
ID:	1528 alt="" /> Рис.2 Алгоритм вычисления значения четности.
    Временные параметры.
    Представляемая в этой статье программа является универсальной для данного направления ( то есть вроде шаблона, который подходит всем ), поэтому пользователь перед ассемблированием должен указать характерные для него параметры.
    _ClkIn Тактовая частота генератора микроконтроллера.
    _BaudRate Описание скорости передачи. Могут быть использованы любые обоснованные значения. Максимальная скорость зависит от тактовой частоты генератора микроконтроллера. При частоте 4Мгц возможна передача со скоростями 600 .. 4800 Бод. Для скорости 600 .. 19200 Бод необходимо, чтобы микроконтроллер работал на частоте 10МГц. С повышением частоты может быть достигнут больший темп. Если '_ClkIn' и '_BaudRate' заданы, программа автоматически определяет все соответствующие временные настройки.
    _DataBits Может быть определено от 1 до 8.
    _StopBits Ограничено одним стопбитом. Может быть установлено в 1.
    _PARITY_ENABLE '_PARITY_ENABLE' флаг. Может быть установлен в TRUE или в FALSE. Если четность проверяется – установите TRUE, иначе – FALSE. Смотрите ниже описание флага '_ODD_PARITY'.
    _ODD_PARITY Устанавливается TRUE или FALSE. Если TRUE, значит выполняется проверка на четность, иначе – на нечетность. Этот флаг игнорируется если '_PARITY_ENABLE' установлен в FALSE.
    _USE_TRSCTS TRS и CTS – сигналы аппаратного контроля передачи. Если это бит установлен в FALSE – аппаратный контроль не используется. Если в TRUE - TRS и CTS линии используют еще два выхода PORTB.
    Установки регистра Состояния / Управления ( Serial Status / Control Register ).

    Бит # Имя Описание
    0 _txmtProgress 1 - говорит о том, что выполняется передача. 0 – передающая линия свободна.
    1 _txmtEnable При инициализации этот бит устанавливается в 1 для разрешения передачи. Этот бит может быть использован для прерывания передачи. Передача будит прервана если во время ее выполнения ( когда '_txmtProgress' находится в 1 ) установить бит '_txmtEnable' в 0. Этот бит устанавливается автоматически когда вызывается функция 'PutChar'.
    2 _rcvProgress Это бит находится в 1 во время приема байта. Он сбрасывается в 0 когда прием байта закончен и устанавливается в 1 когда в режиме приема детектируется стартовый бит.
    3 _rcvOver 0 говорит о том, что прием байта закончился. Ваша программа может опрашивать этот бит после вызова функции 'GetChar' и проверять установлен ли он. Если сброшен в 0, значит, принятый байт находится в 'RxReg'. Другие биты состояния также должны быть просмотрены, чтобы проверить не было ли ошибок при приеме.
    4 _ParityErr 1 говорит о том, что есть ошибка четности в принятых данных ( независимо ото того, что выбрано – проверка на четность ( 'ODD' ) или на нечетность ( 'EVEN' ) ) Не используется если проверка четности отключена.
    5 _FrameErr 1 говорит о наличии ошибки кадра при приеме.
    6 Не используется.
    7 _parityBit Девятый бит при приеме и передаче. В передающем режиме в этот бите передается информация о четности передаваемого байта. В режиме приема в этом бите сохраняется девятый бит принятого байта. Не используется если проверка четности отключена.
    Аппаратная часть.
    Аппаратная часть – это в первую очередь решение проблемы совместимости уровней RS-232 с уровнями ТТЛ. Ниже приведены три схемы, и пользователь может выбрать ту из них, которая для него лучше подходит. Основное отличие между предложенными вариантами – это соотношение цены и количества элементов. Схемы на рис.3 и рис.4 очень дешевы, но имеют больше элементов по сравнению со схемой, представленной на рис.2. В схеме на рис.2 в качестве интерфейса RS-232 используется одна микросхема (MAX232) и один источник питания +5В. Схема на рис.2 имеет более дешевый интерфейс RS-232, но требует две микросхемы при одном источнике питания +5В.
    На рис.4 представлен очень дешевый RS-232 интерфейс, не требующий внешнего источника питания. Схема питается от порта RS-232 ( выход DTR ) и потребляет не более 5мА. При этом необходимо, чтобы на линии DTR был установлен высокий уровень, а на линии RTS – низкий. Напряжение на выходе DTR должно быть не менее +7В. Отрицательное напряжение, необходимое для питания LM339, снимается с выхода RTS, оно должно быть в пределах -5 ..-10В. Применение такой схемы возможно по тому, что PIC16C71 имеет низкое потребление ( обычно 2мА ).
    Нажмите на изображение для увеличения. 

Название:	rs2.gif 
Просмотров:	1 
Размер:	3.4 Кб 
ID:	1529 alt="" /> Рис.2 Интерфейс RS-232 на одной микросхеме ( один источник питания +5В ).
    Нажмите на изображение для увеличения. 

Название:	rs3.gif 
Просмотров:	1 
Размер:	2.5 Кб 
ID:	1530 alt="" /> Рис.3 Дешевый интерфейс RS-232 ( две микросхемы, один источник питания +5В ).
    Нажмите на изображение для увеличения. 

Название:	rs4.gif 
Просмотров:	1 
Размер:	4.4 Кб 
ID:	1531 alt="" /> Рис.4 Дешевый интерфейс RS-232 с низким потреблением ( питается от порта RS-232 ).
    Тестевая программа.
    Для тестирования передающего и принимающего модулей используется программа 'rs232', написанная для PIC16C71. При запуске программа ждет, когда от ПК через RS-232 порт поступит команда. При приеме байта ( возможны команды 0x00, 0x01,0x02 и 0x03 ), принятые данные воспринимаются как номер АЦП канала PIC16C71. После выбора соответствующего канала, выполняется АЦП преобразование, и затем ( примерно через 20мс ) данные в цифровом виде ( 8 бит ) передаются назад в ПК. Программа DVD.exe работает на IBM PC под Windows. Она работает как сборщик АЦП данных, читаемых из PIC16C71 через RS-232 порт. Программа работает в фоновом режиме и отображает АЦП данные в небольшом окне ( похожее на окно с часами в Windows 3.1 ). Программа и PIC16C71 вместе работают как опрашивающая система или цифровой вольтметр ( DVM ). Следует использовать следующие настройки: частота генератора - 4МГц, параметры RS-232: 1200 Бод, 8Бит.
    Нажмите на изображение для увеличения. 

Название:	rs5.gif 
Просмотров:	1 
Размер:	1.1 Кб 
ID:	1532 alt="" /> Рис.5 Программа, отображающая АЦП данные, принятые от PIC16C71 через RS-232.
    Исходный код.
    Программа для PIC16Cxx вместе с тестевой программой DVM доступны здесь. Программа на ассемблере для PIC16Cxx должна быть ассемблирована с помощью Microchip's Universal Assembler - MPASM. Эта программа не может быть ассемблирована старым ассемблером. Поэтому пользователи, использующие старую версию MPASM, должны его обновить.
    Программа DVM работает в фоновом режиме, не имеет ни каких меню, она выполнена как небольшое окно, в котором отображаются АЦП данные. Ниже приведены несколько команд программы, запускаемых из командной строки.
    - Px : x – номер COM порта ( например P2 выбирает порт COM2 ). По умолчанию – COM1
    - Cy : y – номер отображаемого АЦП канала. По умолчанию первый канал.
    - Sz : z определяет формат отображения данных.
      Возможность размещать комментарии к сообщениям отключена.

    Метки статей

    Свернуть

    Меток пока нет.

    Новые статьи

    Свернуть

    • Стандартный параллельный интерфейс на PC
      admin
      Основным назначением интерфейса Centronics (аналог-ИРПР-М) является подключение к компьютеру принтеров различных типов. Поэтому распределение контактов разъема, назначение сигналов, программные средства управления интерфейсом ориентированы именно на это использование. Вто же время с помощью данного интерфейса можно подключать к компьютеру и другие внешние устройства, имеющие разъем Centronics, а также специально разработанные УС.

      Основным достоинством использования Centronics для подключения УС по сравнению с ISA является значительно меньший риск вывести компьютер из строя. Главный недостаток этого подхода - значительно меньшая скорость обмена. Назначение 36 контактов разъема Centronics приведено в таблице 1.

      Таблица 1. Назначение контактов разъемов Centronics

      1 /STROBE Out Strobe (Строб)
      2 D0 Out Data Bit 0
      3 D1 Out Data Bit 1
      4 D2 Out Data Bit 2
      5 D3 Out Data Bit 3
      6 D4 Out Data Bit 4
      7 D5 Out Data Bit 5
      8 D6 Out Data Bit 6
      9 D7 Out Data Bit 7
      10 /ACK In Acknowledge (Подтверждение)
      ...
      08.02.2017, 22:45
    • Современные микросхемы драйверов RS-485 фирмы MAXIM
      admin
      Журнал «Схемотехника» №10 2002 г.
      Олег Николайчук
      Целью настоящей статьи является ознакомление читателей с современными микросхемами драйверов сети RS485 фирмы MAXIM, их основными параметрами и особенностями.
      Интерфейс RS485 наиболее часто используется при создании современных локальных сетей различного назначения, как в промышленных изделиях, так и в любительской практике. Основными преимуществами интерфейса являются:
      • Относительно низкая себестоимость микросхем драйверов, что снижает стоимость аппаратной реализации сетевых диспетчеров, т.е. узлов связи между сетевой средой (линиями связи) и ядром станции (узла) сети, т.е. микроконтроллерной или микропроцессорной системой;
      • Использование в сетях на базе интерфейса RS485 всего трех проводов (третий, общий, не всегда является обязательным), что значительно снижает себестоимость всей системы, поскольку известно, что себестоимость сетевой среды современных локальных сетей практически всегда составляет более 60% от стоимости всей системы;
      • Микросхемы драйверов имеют малые габаритные размеры. Наиболее часто используются микросхемы, выполненные в корпусе DIP8 со стандартным расположением выводов, ставшим , промышленным стандартом. Микросхемы драйверов используют всего несколько дискретных элементов для цепей защиты, использование которых не является обязательным. Малые габаритные размеры микросхем драйверов и минимальное количество обвязки экономит площадь печатной платы, что также положительно сказывается на стоимости системы;
      • Современные микросхемы имеют достаточно низкое энергопотребление, многие из них при отсутствии активности в сети автоматически переходят в режим экономии, что снижает энергопотребление системы;
      • Современные микросхемы драйверов имеют повышенную нагрузочную способность. Если раннее большинство микросхем было насчитано на работу с 32 станциями, то современные модели обеспечивают нормальное функционирование до 256 станций;
      • В настоящее время выпускаются микросхемы в высокой предельной скоростью передачи. Это позволяет создавать высокоскоростные сети, и снижает количество ошибок в сети за счет улучшения формы передаваемого сигнала;
      • Драйверы интерфейса RS485 имеют достаточно простое управление. Особенности организации сетей, их схемотехника, способы управления доступом к каналу и примеры программирования достаточно описаны [1-11].
      • Микросхемы интерфейса RS485 выпускают многие фирмы мира [12]. Однако несомненным лидером в разработке и выпуске новых микросхем драйверов является известная фирма MAXIM [13]. В настоящее время фирма выпускает более 80 типов микросхем драйверов интерфейса RS485/422.
      Все микросхемы драйверов можно условно разделить на 4 группы: микросхемы с питанием +5 В, микросхемы с расширенным диапазоном питания от 3 до 5.5 В, низковольтные микросхемы с питанием 3.3 В и микросхемы со встроенной оптической изоляцией. Основные технические характеристики этих групп микросхем приведены в таблицах 1 — 4 соответственно.
      В приведенных таблицах приняты следующие обозначения:
      В колонке «Разрешение RxD»: P — обозначает, что управляющий вход приемника переключает его либо в открытое состояние, либо переводит его в режим энергосбережения, O — означает, что управляющий вход тоько включает/выключает приемник.
      В колонке «Режим»: H — означает полудуплексный режим, т.е. интерфейс RS485, F — обозначает полный дуплексный режим, т.е. интерфейс RS422.
      Прежде чем приступить к анализу таблиц, определим критерии отбора микросхем для последующего рассмотрения. Мы ставим своей целью ознакомление читателя с широко используемыми микросхемами интерфейса RS485 (но не RS422), т.е. с микросхемами, работающими в полудуплексном режиме, которые в колонке «Режим» имеют символ «H». У этих микросхем входы приемника объединены с выходами передатчика и образуют две линии приема/передачи, «A» и «B». Мы не будем рассматривать ряд микросхем, содержащих только приемники или только передатчики, поскольку их применение также весьма ограничено. И наконец, мы будем рассматривать только микросхемы, выпускаемые в корпусе с восемью выводами (кроме микросхем со встроенной оптической изоляцией и микросхем в корпусе 6/5/SO), как наиболее распространенные и используемые.
      Таблица 1. Микросхемы драйверов интерфейса RS485/422 с питанием +5 В
      ТИП Нали чие TxD Нали чие RxD Разре шение TxD Разре шение RxD Состо яние RxD Режим Быстро действие, Mbps Кол-во стан ций Защ ита ESD Пит ание, V Ток потре бления, mA Ток эко номии, чA Корпус
      MAX1481 1 1 NC F 0.25 256 - 5 0.3 0.1 10/µMAX
      MAX1482 1 1 O F 0.25 256 - 5 0.02 0.1 14/PDIP.300
      14/SO.150
      MAX1483 1 1 O H 0.25 256 - 5 0.02 0.1 8/µMAX
      8/PDIP.300
      8/SO.150
      MAX1484 1 1 NC F 12 256 - 5 0.3 - 10/µMAX
      MAX1485 1 1 - NC H- F 0.25 256 - 5 0.3 - 10/µMAX
      MAX1486 1 1 - NC H- F 12 256 - 5 0.3 - 10/µMAX
      MAX1487 MAX1487E 1 1 O H 2.5 128 -
      ±15kV
      5 0.23 - 8/µMAX
      8/PDIP.300
      8/SO.150
      MAX3040 4 0 - - - 0.25 - ±10kV 5 1 0.002 16/SO.150
      16/SO.300
      16/TSSOP
      MAX3041 4 0 - - - 2.5 - ±10 kV 5 1 0.002 16/SO.150
      16/SO.300
      16/TSSOP
      MAX3042B 4 0 - - - 20 - ±10 kV 5 1 0.002 16/SO.150
      16/SO.300
      16/TSSOP
      MAX3043 4 0 - - - 0.250 - ±10 kV 5 1 0.002 16/SO.150
      16/SO.300
      16/TSSOP
      ...
      08.02.2017, 22:45
    • Системный контроллер ввода-вывода для сопряжения шин PCI и ISA
      admin
      Журнал «Chip News» №6 2001 г.
      Ракович Н. Н.
      Мы уже беседовали на страницах журнала о продукции компании Winbond [Л.1], выпускающей широкую гамму разнообразных микросхем, начиная с памяти и микроконтроллеров и заканчивая приборами для мобильных средств связи и распознавания речи. Примерно в середине этого списка находятся ИС для компьютеров. В данной статье рассмотрим контроллеры ввода-вывода W83С553F и W83С554F, которые выполняет функции моста между шинами PCI и ISA. Тема эта должна быть интересна хотя бы уже потому, что смена поколений компьютеров требует от разработчиков встроенных плат с интерфейсом ISA стремительной модернизации оборудования, с тем, чтобы не потерять своих заказчиков.

      Терминология (более чем кратко)....
      08.02.2017, 22:45
    • Реализация последовательной асинхронной передачи данных в микроконтроллерах PIC
      admin
      Введение.
      Серия PIC16Cxx от Microchip Technology, Inc. - это второе поколение высокопроизводительных восьмиразрядных микроконтроллеров на базе EPROM. Некоторые микроконтроллеры из этой серии (например PIC16C71 и PIC16C84) не имеют встроенного последовательного асинхронного порта. Эта статья содержит описание последовательного асинхронного интерфейса ( полудуплексное RS-232 соединение ) с программной обработкой прерывания для микроконтроллеров PIC16Cxx. Эти микроконтроллеры могут работать на очень большой скорости, с минимальной длительностью такта 250нс ( при частоте 16МГц ). Для тестирования RS-232 режима предлагается использовать простой цифровой вольтметр / систему опроса данных ( Digital Volt Meter / Analog Data Acquisition Systems ) выполненный на PIC16C71, Этот прибор принимает команды от ПК и передает обратно восмибитные значения с выбранного АЦП канала.

      Реализация.
      Ниже приведено подробное описание реализации полудуплексного RS-232 интерфейса с программной обработкой прерывания для PIC16C71. В программе примера в качестве передающего выхода используется RB7, а для приема – RTCC/RA4. Конечно, и вход и выход соединяются через соответствующий преобразователь уровней сигнала RS-232 / ТТЛ. Описание преобразователя уровней напряжения дано в разделе Аппаратная часть.

      Режим передачи. Передающий режим в программе напрямую связан с и...
      08.02.2017, 22:45
    • Простой конвертер RS-232-TTL
      admin

      Журнал «Схемотехника» №1 2000 г.
      Александр Нечаев
      При разработке различного рода электронных устройств с использованием микроконтроллеров очень часто оказывается полезной возможность подключения их к персональному компьютеру через последовательный порт. Однако напрямую это сделать невозможно, поскольку по стандарту...
      08.02.2017, 22:45
    • Программирование портов ввода/вывода LPT и ISA
      admin
      Данный материал основан на моём (его) личном опыте работы с материнской платой неизвестного (нет, не солдата) производителя. Чипсет - SIS. Если вдруг в Вашем случае дело будет обстоять другим образом, напишите мне. Также хочу сразу предупредить - я не профессиональный программист!!! Поэтому не ругайте меня за отсутствие проф. терминов, может быть кривых объяснений или ещё каких недочётов,...
      08.02.2017, 22:45
    Обработка...
    X