Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
bloowz
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 18
1

100 бит информации, ком-порт и Mega8

10.05.2016, 00:44. Просмотров 605. Ответов 21
Метки нет (Все метки)

Привет, собственно такая вот у меня задачка, есть мега8 и есть ком-порт, подключенный к компу. С компа по порту поступает 100 бит информации.
Подскажите, как мегой8 получить и записать в массив внутренней памяти все эти 100 бит? Чтобы в дальнейшем последовательно выдавать их на ногу в каскад 74hc595?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2016, 00:44
Ответы с готовыми решениями:

ком порт для компьютера без ком
многие жалуются, что возникают проблемы с устройствами подключаемыми по ком-порту однако есть...

Как читать 9-й бит по ком порту?
Возникла задача. Есть девайс который отправляет 9-битные посылки в COM-порт. Их надо отслеживать....

Ком-порт
Поскажите пожалуйста, в ноуте нет ком -пора приобрел Экспресс карта RS232 адаптер 34 мм для...

Прозрачный ком-порт
Здравствуйте. Есть устройство использующее com-Bluetooth, мне необходимо наладить с ним связь....

Не закрывается ком порт
Помогите разобраться - почему ошибка вылазит. Есть главная форма с двумя кнопками "Open" и...

21
ValeryS
Модератор
7872 / 5856 / 766
Регистрация: 14.02.2011
Сообщений: 20,131
Завершенные тесты: 1
10.05.2016, 08:08 2
Цитата Сообщение от bloowz Посмотреть сообщение
С компа по порту поступает 100 бит информации.
именно бит? групировать в байты и посылать, продумать протокол чтобы синхронизировать поток
0
Onkel
21 / 21 / 1
Регистрация: 15.04.2016
Сообщений: 36
10.05.2016, 09:39 3
ну наверное должен быть какой- либо протокол, по которому поступает инфа, или синхронизация, есть?
0
pyzhman
1155 / 511 / 74
Регистрация: 15.05.2012
Сообщений: 2,916
10.05.2016, 11:42 4
Цитата Сообщение от bloowz Посмотреть сообщение
С компа ... поступает
В каком виде поступает?
0
10.05.2016, 11:42
bloowz
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 18
10.05.2016, 12:22  [ТС] 5
Возможно ли на этом форуме найти исполнителя для моей задачки? удалил, запрещено предлагать деньги!
Собственно перефразирую немного и приведу картинку.
Есть МК, все же выбор пал на Attiny2313. С одной стороны на него иногда поступает слово по ком-порту, а именно 100 бит информации(их может быть и 64 и 32) . МК, основываясь на этих принятых битах, должен выбрать из своей памяти переменную и последовательно кинуть ее на ногу регистра 74HC595.
Код написать нужно на C в AtmelStudio7, чем проще - тем лучше)
Ну и он должен успешно тестироваться в протеусе.
И да, я знаю что тут можно обойтись без МК, но назад пути нет, нужно делать именно так!
0
Миниатюры
100 бит информации, ком-порт и Mega8  
Витальич
10.05.2016, 12:39
  #6
 Комментарий модератора 
bloowz, думаю Вам помогут и так, будет желания перенесу туда, что удалил в Вашем посте.
0
Onkel
21 / 21 / 1
Регистрация: 15.04.2016
Сообщений: 36
10.05.2016, 12:53 7
прозвучало волшебное слово "по ком порту"...Это другое дело, волшебное слово переносит задачу из разряда творческих в технические. А что аттини? берите ардуину (полтора бакса за mini клон), там даже пример есть считывания из ком порта в массив.
0
bloowz
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 18
10.05.2016, 17:42  [ТС] 8
Дело в том, что задача на практике никогда не будет реализована. Мне нужно ее решить чтобы защитить чертов курсач, где все образно и на словах) Боюсь у ардуины ножек не хватит. Там помимо вывода на регистры есть еще дела(их я решил). Мне важно уметь именно писать биты из ком-порта в массив, а затем их анализировать и на основании этого выдавать на ногу переменные!

Добавлено через 1 час 46 минут
Необходимо принимать и анализировать 40 бит информации, если быть точным.

Добавлено через 2 часа 56 минут
А вот на этой картинке выражено все что мне требуется)
0
Миниатюры
100 бит информации, ком-порт и Mega8  
Voland_
1674 / 1060 / 102
Регистрация: 04.01.2010
Сообщений: 3,608
11.05.2016, 10:02 9
bloowz, ну вам насоветовали уже правильное решение. Возьмите какой-нибудь протокол - проще и понятнее всего будет, наверное Modbus ASCII или DCS, т.к. они текстовые. Делаете заголовок, потом данные и чек-сумму. Даже чек-сумма не очень важна, но тогда надо символ окончания пакета. И шлете в этом формате свои 40 бит, разбив их на 5 байт данных (потому что в UART в 90% случаев данные передаются в байтах, т.е. по 8бит.). В МК организовываете прием сообщения, и делайте с ним все что хотите.

ЗЫ: в CodeVision AVR есть мастер по созданию проектов - он может делать готовый код под USORT, с готовым для использования буфером. Попробуйте разобраться что он предлагает и переделайте под свою задачу.
0
bloowz
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 18
11.05.2016, 11:09  [ТС] 10
Я правильно понимаю, что на ПК нужно доработать софт, который будет слать не классические старт-стоп бит + байт информации, а нечто свое? Стартбит+40бит+окончание?
Т.е. программно с винды возможно послать через ком-порт таким образом информацию? Без разбиения на байтовые пакетики?
0
Onkel
21 / 21 / 1
Регистрация: 15.04.2016
Сообщений: 36
11.05.2016, 11:20 11
Цитата Сообщение от bloowz Посмотреть сообщение
Я правильно понимаю, что на ПК нужно доработать софт, который будет слать не классические старт-стоп бит + байт информации, а нечто свое? Стартбит+40бит+окончание?
Т.е. программно с винды возможно послать через ком-порт таким образом информацию? Без разбиения на байтовые пакетики?
нет, не делайте так. Разбейте ваш массив побайтно и посылайте, а потом байты разбейте на биты и пишите в массив. Вряд ли вам удастся малой кровью послать с пк что-то вроде "старт- 40бит-стоп".
1
Voland_
1674 / 1060 / 102
Регистрация: 04.01.2010
Сообщений: 3,608
11.05.2016, 12:17 12
Цитата Сообщение от bloowz Посмотреть сообщение
Я правильно понимаю, что на ПК нужно доработать софт, который будет слать не классические старт-стоп бит + байт информации, а нечто свое? Стартбит+40бит+окончание?
Т.е. программно с винды возможно послать через ком-порт таким образом информацию? Без разбиения на байтовые пакетики?
неправильно понимаете. 40бит в одном "мусоре" - это уже не UART и не COM-порт. И даже если вы чем-то создадите этот пакет (навряд ли это сможет драйвер порта на ПК), то принять этот штатным портом UART на МК у вас опять-таки не получится. Поэтому, придется делать протокол и разбить проект на байты. Собрать его вы сможете очень просто - ведь в Си есть union's, когда вы можете разобрать набор байт на биты, отдельные регионы и т.д. и т.п. При этом, всегда остается возможность кастить данные под любой необходимый тип, включая (естественно, побайтный порядок). Поэтому, не вижу никаких ограничений разбить побитовое представление по байтам и собрать его снова, на другой стороне.
1
bloowz
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 18
11.05.2016, 12:52  [ТС] 13
А можно где-нибудь примерчик найти, как МК получает байт и как пишет его в переменную? Гугл выдает неимоверное месиво, кучу непонятного кода
0
Onkel
21 / 21 / 1
Регистрация: 15.04.2016
Сообщений: 36
11.05.2016, 13:02 14
Цитата Сообщение от bloowz Посмотреть сообщение
А можно где-нибудь примерчик найти, как МК получает байт и как пишет его в переменную? Гугл выдает неимоверное месиво, кучу непонятного кода
в ардуине Ide в примерах есть получение данных по uart
0
Витальич
1275 / 1182 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
11.05.2016, 14:00 15
Цитата Сообщение от bloowz Посмотреть сообщение
МК получает байт и как пишет его в переменную
http://avr-start.ru/?p=2230
Вот упростил для Вас
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ISR(USORT_RXC_vect )
{
    char status,data;
    status=UCSRA;
    data=UDR;
    if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
    {
 
            rx_buffer[rx_wr_index++]=data;
 
            if (++rx_counter == RX_BUFFER_SIZE)
            {
                rx_counter=0;
                rx_buffer_overflow=1;
            }
 
    }
}
2
Voland_
1674 / 1060 / 102
Регистрация: 04.01.2010
Сообщений: 3,608
11.05.2016, 14:31 16
Цитата Сообщение от Витальич Посмотреть сообщение
упростил для Вас
ну и кстати сказать, приведенный код не так уж крут, если вы используете технологии восстановления данных. Обычно эти методы могут исправить данные, когда принято все необходимое количество, то есть данные неправильные, но не выкинуты из набора. Поэтому, прием байта нужен в любом случае, даже если выставлен один из флагов, указанных в примере из ДШ.
2
bloowz
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 18
11.05.2016, 16:57  [ТС] 17
Спасибо, технология восстановления данных это как я понял бит четности? А если делать без него, дабы упростить задачу, считая что информация всегда пересылается без ошибок. Допустимо ли? Насколько я знаю бит четности можно вообще не использовать и не посылать.
0
Витальич
1275 / 1182 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
11.05.2016, 17:07 18
Цитата Сообщение от bloowz Посмотреть сообщение
технология восстановления данных это как я понял бит четности
нет. Бит четности только информирует получателя о относительной достоверности полученного пакета и то если в пакете изменился только один бит, при парной и более изменений в битах способ не работает.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
ISR(USORT_RXC_vect )
{
    char data;
    data=UDR;
 
            rx_buffer[rx_wr_index++]=data;
 
            if (++rx_counter == RX_BUFFER_SIZE)
            {
                rx_counter=0;
                rx_buffer_overflow=1;
            }
}
еще упростил прерывания приёма.
2
bloowz
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 18
11.05.2016, 17:43  [ТС] 19
Не совсем понятно, что за rx_buffer_overflow ?
Переполнение какого буфера оно насчитывает и зачем вообще?

Добавлено через 3 минуты
И правильно ли я понимаю, что в моем случае RX_BUFFER_SIZE нужно установить в 40. И все посланные 40 бит запишутся в rx_buffer [40] ?

Добавлено через 1 минуту
Причем со стороны ПК нужно настроить ком-порт на скорость 9600 и просто переслать 40 бит стандартным образом в пяти фреймах (по 10 бит пакет) не используя бит паритета?

Добавлено через 3 минуты
Поправка. В Вашем примере не rx_buffer , а переменная data
0
Витальич
1275 / 1182 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
11.05.2016, 19:53 20
Код не мой, я привел ссылку где его спионерел На первый взгляд должен быть рабочим.
rx_wr_index - глобальная переменная, счетчик принимаемого текущего байта.
rx_buffer - глобальный массив для хранения данных
Упрощаем дальше
C
1
2
3
4
5
6
7
8
9
10
ISR(USORT_RXC_vect )
{
            rx_buffer[rx_wr_index++]=UDR;
 
            if (rx_wr_index == RX_BUFFER_SIZE)
            {
                rx_wr_index=0;
                rx_buffer_overflow=1;
            }
}
1
11.05.2016, 19:53
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2016, 19:53

C# Windows Forms и ком порт
Делал программу для чтения ком-порта через readline, все было отлично! Начал другую: на ком порт...

Определенная последовательность импульсов на ком порт
Есть кнопки void __fastcall TForm1::Button1Click(TObject *Sender) { } При ее нажатии нужно...

Ком-порт и правильное его использование
Доброго времени суток , многоуважаемые программисты! Помогите пожалуйсто решить поставленную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.