Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
19.01.2015, 17:28
|
#41
|
Заблокирован
Регистрация: 26.12.2013
Сообщений: 379
Сказал спасибо: 66
Сказали Спасибо 61 раз(а) в 23 сообщении(ях)
|
Re: Форматирование данных и передача даных UART
пример запустился, работает
я отключил открытие ком порта 1 и подключаю к нему устройство,а в программе открываю второй порт жму кнопку считать, но данные никуда не принимаются
|
|
|
|
19.01.2015, 18:18
|
#42
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,904
Сказал спасибо: 2,542
Сказали Спасибо 11,816 раз(а) в 5,922 сообщении(ях)
|
Re: Форматирование данных и передача даных UART
Сообщение от WindoЗavr
|
я отключил открытие ком порта 1 и подключаю к нему устройство,а в программе открываю второй порт жму кнопку считать, но данные никуда не принимаются
|
Не понял...Если можно, поподробней.
Там же свой формат пакета, другой не пройдет.
Кнопка "измерить" посылает команду, на прием которой ответом будет целое число.
Команду дает "мастер", отвечает "слейв", ответ принимает мастер и высвечивает результат приема - целое число.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
19.01.2015, 20:25
|
#43
|
Заблокирован
Регистрация: 26.12.2013
Сообщений: 379
Сказал спасибо: 66
Сказали Спасибо 61 раз(а) в 23 сообщении(ях)
|
Re: Форматирование данных и передача даных UART
я запутался в алгоритме работы, изменение практически любого параметра ведёт к ошибкам компиляции
в редких случаях компилится но не работает
как оставить тот кусок, который считывает и отображает что нибудь с ком порта?
Последний раз редактировалось WindoЗavr; 19.01.2015 в 20:47.
|
|
|
|
19.01.2015, 22:25
|
#44
|
Заблокирован
Регистрация: 26.12.2013
Сообщений: 379
Сказал спасибо: 66
Сказали Спасибо 61 раз(а) в 23 сообщении(ях)
|
Re: Форматирование данных и передача даных UART
http://www.cyberforum.ru/cpp-builder/thread775820.htmlэтому проекту какая то левая библиотека нужна, а в основном он меня устраивает
|
|
|
|
19.01.2015, 23:27
|
#45
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,904
Сказал спасибо: 2,542
Сказали Спасибо 11,816 раз(а) в 5,922 сообщении(ях)
|
Re: Форматирование данных и передача даных UART
WindoЗavr, Вы вообще с Билдером работали?
Компилится и не работает - по многим причинам. Первое, что приходит на ум - при открытии проекта не находит компонент "слайком", ругается и просит указать его место на данном компе. Если не указать, будет косяк. Остальное все стандартно.
Далее. "Меняете параметр" и перестает компилиться - если меняете имена обработчиков событий вручную - так и будет. Не все можно делать безболезненно.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
19.01.2015, 23:57
|
#46
|
Заблокирован
Регистрация: 26.12.2013
Сообщений: 379
Сказал спасибо: 66
Сказали Спасибо 61 раз(а) в 23 сообщении(ях)
|
Re: Форматирование данных и передача даных UART
CommPort1-›Open=true; открыть порт
CommPort1-›Open=false; закрыть порт
а эта штука как то читает данные с порта
Код:
|
char mas[5];
int a;
AnsiString s="";
while(CommPort1-›InBuffUsed›4) {
if(CommPort1-›GetChar()=='?') {
for(int i=0; i‹4; i++) mas[i]=CommPort1-›GetChar();
RData-›Caption=IntToStr(a4btoi(mas)); |
я правильно понял?
|
|
|
|
20.01.2015, 00:08
|
#47
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,904
Сказал спасибо: 2,542
Сказали Спасибо 11,816 раз(а) в 5,922 сообщении(ях)
|
Re: Форматирование данных и передача даных UART
Сообщение от WindoЗavr
|
а эта штука как то читает данные с порта
|
Не вычистил лишнее.
PHP код:
|
void __fastcall TForm1::CommPort1DataReceived(TObject *Sender, DWORD Count) // Обработчик события "приняты данные" { char mas[4];
while(CommPort1-›InBuffUsed›4) { // Достаточно ли принятых байтов для разбора пакета? if(CommPort1-›GetChar()=='?') { // Это начало пакета? for(int i=0; i‹4; i++) mas[i]=CommPort1-›GetChar(); // Чтение пакета из буфера приема в массив RData-›Caption=IntToStr(a4btoi(mas)); // Отображение принятого числа } } } //---------------------------------------------------------------------------
|
Так будет точнее.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
20.01.2015, 00:13
|
#48
|
Заблокирован
Регистрация: 26.12.2013
Сообщений: 379
Сказал спасибо: 66
Сказали Спасибо 61 раз(а) в 23 сообщении(ях)
|
Re: Форматирование данных и передача даных UART
а из буфера можно сразу на экран выводить?
|
|
|
|
20.01.2015, 00:24
|
#49
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,904
Сказал спасибо: 2,542
Сказали Спасибо 11,816 раз(а) в 5,922 сообщении(ях)
|
Re: Форматирование данных и передача даных UART
Можно. Но смысл?
У меня введена синхронизация по спец байту начала пакета, остальная пурга до пакета просто отсеивается, что и проиллюстрировано. А после начала пакета каждый байт на своем месте. Нет помехозащиты в пакете, но это уже несколько другой вопрос.
Не стоит забывать о "прелестях" многозадачности Винды. Поэтому, прежде чем читать из буфера, проверяю, есть ли там достаточное количество байтов. Иначе программа просто зависнет в ожидании приема при пустом буфере.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
20.01.2015, 15:46
|
#50
|
Заблокирован
Регистрация: 26.12.2013
Сообщений: 379
Сказал спасибо: 66
Сказали Спасибо 61 раз(а) в 23 сообщении(ях)
|
Re: Форматирование данных и передача даных UART
akegor спасибо за алгоритм работы, c получением и выводом данных разобрался
Код:
|
//---------------------------------------------------------------------------
#include ‹vcl.h›
#include ‹stdio.h›
#include ‹stdlib.h›
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CommPort"
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
char ntoa(char n) { // Преобразование нибла в ASCII
n=n&0x0f;
if (n‹0x0a) n+=48; // 0x30
else n+=55; // 0x37
return n;
}
void i2btoa(int n, char *mas) { // Пребразование двух байтов в ASCII
for(int i=3; i›-1; i--) mas[i]=ntoa(n››abs(4*(i-3)));
}
char aton(char c) { // Преобразование одного байта в нибл
if(c‹0x3A) c-=0x30;
else c-=0x37;
if(c›0x0f) c=0;
return c;
}
int a4btoi(char *mas) { // Преобразование строки из четырех ASCII в int
int n=0;
for (int i=3; i›-1; i--) n+=aton(mas[i])‹‹abs(4*(i-3));
return n;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------мой код------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
CommPort1-›ComNumber=3; //объявление физического номера порта его переменной
CommPort2-›ComNumber=4; //объявление физического номера порта его переменной
CommPort1-›Open=true; // открыть порт переменной 1
//CommPort2-›Open=true; // открыть порт переменной 2
if(CommPort1-›Open==true) { // если порт закрыт
Label5-›Caption="порты открыты"; // фраза для вывода
Label5-›Visible=true; // разрешение вывода
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
CommPort1-›Open=false; // закрыть порт переменной 2
//CommPort2-›Open=false; // закрыть порт переменной 2
if(CommPort1-›Open==false) { // если порт закрыт
Label5-›Caption="порты закрыты"; // фраза для вывода
Label5-›Visible=true; // разрешение вывода
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CommPort1DataReceived(TObject *Sender, DWORD Count)
{
char mas[5]; int a;
AnsiString s="";
while(CommPort1-›InBuffUsed›1) {
for(int i=0; i‹4; i++) mas[i]=CommPort1-›GetChar(); // Чтение пакета из буфера приема в массив
RData-›Caption=IntToStr(a4btoi(mas)); // Отображение принятого числа
}
} |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:23.
|
|