Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 30.05.2010, 00:19  
Antinup
Прохожий
 
Регистрация: 27.05.2010
Сообщений: 3
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Antinup на пути к лучшему
По умолчанию win32 RS-232C послать последовательность бит в байте

Итак, задача:

ОТослать по протоколу RS-232C с помощью программирования под win32 API байт с логигической последовательность бит: 01111111(единица перавая остальные, нули).
Если расматривать на физическом уровне, то сигнал по протоколу RS-232С должен быть с инверсией, то есть:

111111111111111110100000001111111111

Там где 1 - уровень напряжения +3-+12В
где 0 -уровень напряжения -3--12В.

Главная задача из этого участка выделить 10100000001 которую будет распозновать МК и что-то с ней делать.

Вопрос реально ли вообще с помощь этого протокола RS-232C создать такую последовательность физических импульсов, или байт будет передаваться пакетом со всеми заголовками, которые будут поступать на МК и мешать нам.

ЗЫ: Сорри если не туда запостил.
Реклама:

Последний раз редактировалось Antinup; 30.05.2010 в 00:30.
Antinup вне форума  
Непрочитано 30.05.2010, 00:31  
raxp
Почётный гражданин KAZUS.RU
 
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
raxp на пути к лучшему
По умолчанию Re: win32 RS-232C послать последовательность бит в байте.

и что вам мешает послать байт 01111111 = $7F ...а протоколом пусть система занимается
Цитата:
настраиваем...
DCB dcb;
GetCommState(hCom_1, &dcb);

dcb.BaudRate = CBR_115200;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.fParity = 0;
SetCommState(hCom_1, &dcb);

COMMTIMEOUTS timeouts;
timeouts.ReadIntervalTimeout = 1;
timeouts.ReadTotalTimeoutConstant = 1;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.WriteTotalTimeoutConstant = 10;
timeouts.WriteTotalTimeoutMultiplier = 0;
SetCommTimeouts(hCom_1, &timeouts);
далее посылаем байт... прием с ожиданием можете убрать
Цитата:
OVERLAPPED o;
o.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

// тестовый байт для проверки устройства
const BYTE TEST_BYTE[] = {0, 0x7F};
DWORD bytesCount;

WriteFile(hCom_1, &TEST_BYTE[0], 2, &bytesCount, &o);

DWORD error = GetLastError();
if(error == ERROR_IO_PENDING){
DWORD result = WaitForSingleObject(o.hEvent, 50);
if(result == WAIT_TIMEOUT){
CloseHandle(hCom_1);
return FALSE;
}
}else{
CloseHandle(hCom_1);
return FALSE;
}

Sleep(50);

BYTE receivedByte[128] = {0};
ReadFile(hCom_1, &receivedByte[0], 128, &bytesCount, &o);
error = GetLastError();
if(error == ERROR_IO_PENDING){
DWORD result = WaitForSingleObject(o.hEvent, 200);
if(result == WAIT_TIMEOUT){
CloseHandle(hCom_1);
return FALSE;
}else{
BOOL replyFound = false;
for(int i=0; i‹128 && !replyFound; i++){
replyFound = (receivedByte[i] == 0x7F);
}
CloseHandle(hCom_1);
///return replyFound; // возвращаем
}
}else{
CloseHandle(hCom_1);
return FALSE;
}
__________________
Белорусский журнал «Радиолюбитель»
Youtube LaboratoryW
UR3QQJ
raxp вне форума  
Непрочитано 30.05.2010, 00:32  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: win32 RS-232C послать последовательность бит в байте.

Вообще-то у RS232 1 это -5/-12 В, 0 +5/+12 В. Уровни -3,+3 В считаются неопределенными и могут восприниматься, как 0 или 1.
realid вне форума  
Непрочитано 30.05.2010, 01:26  
Pit_PB
Прописка
 
Регистрация: 23.01.2008
Сообщений: 102
Сказал спасибо: 0
Сказали Спасибо 21 раз(а) в 19 сообщении(ях)
Pit_PB на пути к лучшему
По умолчанию Re: win32 RS-232C послать последовательность бит в байте.

На бейсике отправить байт в порт намного проще!
Вот пример отправки байта $7F через COM1, со скоростью 9600 бод.
Код:
If OpenSerialPort(1, "COM1", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 256, 256)
  OutByte.a=$7F
  WriteSerialPortData(1, @OutByte, 1)
  CloseSerialPort(1)
EndIf
Pit_PB вне форума  
Непрочитано 30.05.2010, 01:39  
raxp
Почётный гражданин KAZUS.RU
 
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
raxp на пути к лучшему
По умолчанию Re: win32 RS-232C послать последовательность бит в байте.

ну, вообще-то вы опускаете настройку СOM порта, которая заведена у вас в функцию и скрыта услужливо от глаз средой... а вот вам и на delphi:
Цитата:
Com:= CreateFile('COM1',
GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result:= (Com › 0) and SetCommTiming and
SetCommBuffer(InQueue,OutQueue) and
SetCommStatus(9600);

WriteFile(Com, $7F, 1,TX_Count,nil);
CloseHandle(Com)
как видите тоже намного проще ...а winapi он и в африке winapi/
__________________
Белорусский журнал «Радиолюбитель»
Youtube LaboratoryW
UR3QQJ
raxp вне форума  
Непрочитано 30.05.2010, 01:41  
Antinup
Прохожий
 
Регистрация: 27.05.2010
Сообщений: 3
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Antinup на пути к лучшему
По умолчанию Re: win32 RS-232C послать последовательность бит в байте.

Спасибо кто ответил.

raxp, то есть на выходе ком порта получем нам нужный сигнал: 111111111111111110100000001111111111

или же байт будет отправляться пакетом, со всякими заголовками, которые будут мешать?

realid, наверно +5-+15 и -5--15, судя из этой статьи http://www.gaw.ru/html.cgi/txt/interface/rs232/
еще вопросик, МК как правило работает с +5В, как лучше пребразовать сигнал по уровню, чтобы МК правильно воспринимал 1 - (+5-+15) и 0 - (-5--15) и нормально работал
Antinup вне форума  
Непрочитано 30.05.2010, 01:49  
raxp
Почётный гражданин KAZUS.RU
 
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
raxp на пути к лучшему
По умолчанию Re: win32 RS-232C послать последовательность бит в байте.

...на выходе COM порта получим пакет согласно стандарту интерфейса, но вы забываете, что этот же сигнал с пакетом будет преобразован при приеме встроенным COM портом на МК ...и по прерыванию его можно будет прочесть из буфера в соответствующем регистре согласно спецификации на МК, так сказать - в исходном виде ...в идеальных условиях конечно, если будут помехи и длинная линия связи, то вам следует озаботиться о протоколе обмена с контролем ошибок, MODBUS например или что проще - M-Link (но это так, на будущее, цели вашего девайса пока неизвестны)

...чтобы правильно воспринимал, обычно ставится преобразователь по типу MAX232, ADM3202 и т.п., лучше еще если и с гальванической развязкой, можно добавить оптронов, но есть и со встроенными (COM порты на компьютерах они знаете-ли нежные девайсы)
__________________
Белорусский журнал «Радиолюбитель»
Youtube LaboratoryW
UR3QQJ

Последний раз редактировалось raxp; 30.05.2010 в 01:52.
raxp вне форума  
Сказали "Спасибо" raxp
Antinup (30.05.2010)
Непрочитано 30.05.2010, 08:17  
GASCHE
Частый гость
 
Регистрация: 28.04.2007
Сообщений: 40
Сказал спасибо: 2
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
GASCHE на пути к лучшему
По умолчанию Re: win32 RS-232C послать последовательность бит в байте.

Сообщение от raxp Посмотреть сообщение
как видите тоже намного проще ...а winapi он и в африке winapi/
Думаю пример несколько не корректный если CreateFile "скрыта услужливо от глаз средой" то SetCommTiming, SetCommBuffer, SetCommStatus кто то должен расписать ручками
GASCHE вне форума  
Непрочитано 30.05.2010, 08:34  
raxp
Почётный гражданин KAZUS.RU
 
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
raxp на пути к лучшему
По умолчанию Re: win32 RS-232C послать последовательность бит в байте.

...а вы товарищ взгляните на второй пост для начала а насчет корректности
Цитата:
function CreateFile; external kernel32 name 'CreateFileA';
думаю вопросы не должны возникнуть вперед в MSDN
__________________
Белорусский журнал «Радиолюбитель»
Youtube LaboratoryW
UR3QQJ
raxp вне форума  
Непрочитано 30.05.2010, 08:58  
GASCHE
Частый гость
 
Регистрация: 28.04.2007
Сообщений: 40
Сказал спасибо: 2
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
GASCHE на пути к лучшему
По умолчанию Re: win32 RS-232C послать последовательность бит в байте.

Сообщение от raxp Посмотреть сообщение
думаю вопросы не должны возникнуть
По второму посту нет вопросов, с тем, что CreateFile "скрыта услужливо от глаз средой" вроде бы то же не возражал, а вот SetCommTiming, SetCommBuffer, SetCommStatus в MSDN не нашел
GASCHE вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инвертировать определенный бит в байте Zemlyanov Микроконтроллеры, АЦП, память и т.д 3 23.02.2010 01:23


Часовой пояс GMT +4, время: 11:58.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot