Бит четности COM-порта

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

Бит четности COM-порта

Сообщение artman66 (Андрей) » 11 май 2017, 08:50

Привет всем.
Как известно, ПИК-контроллер может передавать 9-й бит, но без вычисления четности.
Устройство с RS422, к которому будет подключаться, использует этот бит.
Вопрос к знатокам:
Как лучше сделать ? Аппаратно ( Xilinx, Altera ) или программно.
Ящик с мозгами планирую делать на PIC16F887.
Аватар пользователя
Ник: artman66
Имя: Андрей
(мытищи)
Практикант
Практикант
Информация о пользователе

Re: Бит четности COM-порта

Сообщение mim (mim) » 11 май 2017, 09:07

artman66 писал(а):1. Как известно, ПИК-контроллер может передавать 9-й бит, но без вычисления четности.
2. Устройство с RS422, к которому будет подключаться, использует этот бит.
3. Как лучше сделать ? Аппаратно ( Xilinx, Altera )

1. Вычисляй программно...
2. Может это просто два стоповых бита ???
3. На этом считать бит четности???? :headbang:
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе

Re: Бит четности COM-порта

Сообщение artman66 (Андрей) » 11 май 2017, 09:39

Да нет, стоповый один, всего в пачки 11 мест старт-8 информации-четность-стоп.
А насчет аппаратного - уже мастрячил на Xilinx c кварцем 7.37МГц - отправил в порт данные и забыл... Мне только на передачу...
Если программно, я так понимаю, цикл с выбором по маске и к примеру вычисление четности=bit(x)+bit(x+1)если четность=2,то четность=0, а в конце условие если 0, то чет (0ч00), если 1, то нечет(0x1FF). Я правильно думаю???
Аватар пользователя
Ник: artman66
Имя: Андрей
(мытищи)
Практикант
Практикант
Информация о пользователе
Вернуться наверх

Re: Бит четности COM-порта

Сообщение mim (mim) » 11 май 2017, 10:07

artman66 писал(а):1. Да нет, стоповый один, всего в пачки 11 мест старт-8 информации-четность-стоп.
2. уже мастрячил на Xilinx c кварцем 7.37МГц - отправил в порт данные и забыл... Мне только на передачу...
3. я так понимаю, цикл с выбором по маске и к примеру вычисление четности=bit(x)+bit(x+1)если четность=2,то четность=0, а в конце условие если 0, то чет (0ч00), если 1, то нечет(0x1FF).

1. Если этот бит всегда равен 1 это может быть два стопа, именно так формируют второй стоп...
2. Ну, а че тогда спрашивать...
3. Не... я так не понимаю... :o
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: Бит четности COM-порта

Сообщение artman66 (Андрей) » 11 май 2017, 14:42

Коряво наваял. Для 2-3 байт прокатит, а когда 50 надо передать, то памяти МК - ЙОК.
Как создать свой макрос с возвратом переменных типа
Код: выделить все
void __fastcall БЛА-БЛА-БЛА(byte A,byte B)
{
 int x= byte A ;

 for (int i = 0; i <= 8; i++) {
   if (.......)byte B=1;}
   else
   {
byte B=0;
   };

В *А* дуем данные из В читаем.


. :headbang:
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: artman66
Имя: Андрей
(мытищи)
Практикант
Практикант
Информация о пользователе
Вернуться наверх

Re: Бит четности COM-порта

Сообщение mim (mim) » 11 май 2017, 17:22

artman66 писал(а): ...дуем данные....

:D Ооооо... вдуть это мы завсегда, вдуть это мы любим...

Простой поиски по инету сразу выдает и простой алгоритм
Код: выделить все
parity = (value >> 4) ^ value;
parity ^= parity >> 2;
parity ^= parity >> 1;
parity &= 0x1;


artman66 писал(а): ...Для 2-3 байт прокатит, а когда 50 надо передать, то памяти МК - ЙОК.....
А какая разница сколько передать??? Так как ты передаешь то так ни на что не хватит...
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: Бит четности COM-порта

Сообщение artman66 (Андрей) » 12 май 2017, 12:07

Вот за это огромное спасибо....
Подправил макрос RS232.

short par=0;
par = (nChar >> 4) ^ nChar;
par ^= par >> 2;
par ^= par >> 1;
par &= 0x01;
par = par<<8;
//==========================
nChar=nChar+par;
%a_UART_Send (nChar);
// %a_UART_Send ( nChar);

Работает !!! Но бит четности инвертирован - буду бить дальше...
Аватар пользователя
Ник: artman66
Имя: Андрей
(мытищи)
Практикант
Практикант
Информация о пользователе
Вернуться наверх

Re: Бит четности COM-порта

Сообщение artman66 (Андрей) » 12 май 2017, 13:22

Изменил... работает... можно пользоваться :D :D :D

short par=0;
par = (nChar >> 4) ^ nChar;
par ^= par >> 2;
par ^= par >> 1;
par ^= 0x01;
%a_UART_Send (nChar+(par<<8));
Аватар пользователя
Ник: artman66
Имя: Андрей
(мытищи)
Практикант
Практикант
Информация о пользователе
Вернуться наверх

Re: Бит четности COM-порта

Сообщение mim (mim) » 12 май 2017, 13:23

пользуйся...
Parit.rar
У вас нет доступа для просмотра вложений в этом сообщении.
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: Бит четности COM-порта

Сообщение artman66 (Андрей) » 12 май 2017, 14:03

На выходных попытаюсь добавить в компонент макрос передачи 9-го бита...
Аватар пользователя
Ник: artman66
Имя: Андрей
(мытищи)
Практикант
Практикант
Информация о пользователе
Вернуться наверх

След.

Вернуться в ПЕСОЧНИЦА

Кто сейчас на форуме

Пользователь просматривает форум: Yandex [Bot]

cron