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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Односторонний сбор данных с 12 МК

Непрочитано 28.08.2018, 08:02  
threadstarter
Прохожий
 
Регистрация: 27.02.2013
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
threadstarter на пути к лучшему
По умолчанию Односторонний сбор данных с 12 МК

Добрый день.
Может кто-нибудь даст какие-либо наводки или поделиться своими знаниями в подобной работе.
Опишу условно:

12 плат с МК Atxmega 32A4U. Каждый собирает 4 температурных значения с 4-х DS18B20 (PORTA) и смотрит за активностью 4 своих ног на вход PORTB 0,1,2,3(наличие импульсов за интервал времени).
На каждой такой плате стоит оптопередатчик Avago HFBR 1522Z к ноге PORTB 4 вывода МК.
В основном цикле программы происходит увеличение 4 счетчиков импульсов при изменении состояния PORTB 0,1,2,3

1 плата сбора данных с МК Atxmega 128A3. На ней 12 оптоприемников Avago HFBR 2522Z PORTA 0,1,2,3,4,5,6,7 PORTB 0,1,2,3
На PORTC посажен USART - общение с внешним миром.
Каким то образом необходимо настроить одностороннюю передачу от 12 плат 4х температур, 4 состояний вводов. Мысль была начало передачи обозначать короткой паузой (100 мс) и после этого мигать ногой в соответствии с температурой 1ого датчика, потом пауза уже 50 мс, второй датчик и т.д. Но все эксперименты не увенчались успехом видимо из за рассинхрона.
Буду рад любым мыслям и подходам к реализации.
Реклама:
threadstarter вне форума  
Непрочитано 28.08.2018, 10:48  
Yuri222
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.02.2005
Адрес: Минск, Беларусь
Сообщений: 8,919
Сказал спасибо: 3,109
Сказали Спасибо 3,030 раз(а) в 2,258 сообщении(ях)
Yuri222 на пути к лучшему
По умолчанию Re: Односторонний сбор данных с 12 МК

1. ОООгромная пауза, после чего каждая плата быстро выплевывает свое сообщение
2. избыточное кодирование. НО! - приведет к увеличению длительности "плевка"
3. механически (шторками, линзами) по возможности разделить входные потоки
3. помогут ли поляризационные фильтры? - есть ли они на нужную длину волны...
4. Перейти с оптики на RF. Слать sms-ки, например
Шучу. Или нет...

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

Нужно оценивать риски неполучения вовремя информации.

Последний раз редактировалось Yuri222; 28.08.2018 в 10:52.
Yuri222 вне форума  
Непрочитано 28.08.2018, 11:22  
ForcePoint
Почётный гражданин KAZUS.RUN
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,459
Сказал спасибо: 3,227
Сказали Спасибо 3,512 раз(а) в 2,393 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Односторонний сбор данных с 12 МК

Сообщение от Yuri222 Посмотреть сообщение
3. механически (шторками, линзами) по возможности разделить входные потоки
12 отдельных оптик, как я понимаю.

Сообщение от threadstarter Посмотреть сообщение
Но все эксперименты не увенчались успехом видимо из за рассинхрона.
Хоть-бы кратенько - что за эксперименты и как ставились. Что безуспешно - не получается передать один канал или каналы мешают друг другу? Ведь очевидно, что если будет перекрывающаяся по времени передача от двух оконечных точек, то уже есть шансы не успеть обработать один из или оба потока. Правда event system я не раскуривал - сможет-ли она пихать битовые потоки в ОЗУ, а ЦП разгребать их относительно неспешно?

З.Ы. А почему такая монструозная конструкция? Для быстродействия, гальванической изоляции или чего ещё?
__________________
Экзорцист 40-го уровня.
ForcePoint вне форума  
Непрочитано 28.08.2018, 11:47  
eddy
Почётный гражданин KAZUS.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Односторонний сбор данных с 12 МК

Дык, организуйте двухстороннюю связь и пусть мастер сообщает, от какого контроллера ожидает данные, если проблема с одновременной обработкой данных с 12 входов.
Да, а зачем через оптоволокно? Посадили бы всех на общую CAN-шину, и не парились!
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 28.08.2018, 11:59  
caro2
Прохожий
 
Регистрация: 10.12.2004
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
caro2 на пути к лучшему
По умолчанию Re: Односторонний сбор данных с 12 МК

1) Настройте головной контроллер на работу по прерываниям от 12 входных пинов;
2) В прерывании формируйте флаги изменения состояний всех 12 входов;
3) В головном цикле по состоянию флагов вызывайте 12 процедур обработки входных потоков.
Учитывая, что процессы медленные, всё должно успешно обрабатываться.
caro2 вне форума  
Непрочитано 28.08.2018, 13:22  
sat_art
Вид на жительство
 
Регистрация: 27.11.2007
Сообщений: 434
Сказал спасибо: 20
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
sat_art на пути к лучшему
По умолчанию Re: Односторонний сбор данных с 12 МК

1. threadstarter, с какой скоростью идет (должен идти) обмен?

2. Atxmega32A4U - не имеет порта B4.
sat_art вне форума  
Непрочитано 28.08.2018, 13:36  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,285
Сказал спасибо: 11,860
Сказали Спасибо 4,159 раз(а) в 3,177 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Односторонний сбор данных с 12 МК

А обычного изолированного RS485 (что немного компактнее и проще) или изолированного же CAN (на CANOpen, что затратное по памяти и отладке в первом старте) не достаточно? Если так хочется оптики - то им и оптическую среду вполне можно приспособить
Остаётся только разобраться с протоколом передачи и арбитражом на шине.
В стороне остался ещё вариант с Ethernet на W5100…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 28.08.2018, 13:37  
pasha_zv
Прописка
 
Аватар для pasha_zv
 
Регистрация: 14.12.2006
Адрес: Ставрополь - Донское
Сообщений: 266
Сказал спасибо: 118
Сказали Спасибо 197 раз(а) в 81 сообщении(ях)
pasha_zv на пути к лучшему
По умолчанию Re: Односторонний сбор данных с 12 МК

рекомендую почитать про 1-Wire.

а потом, перед занятием линии приплюсовывать
"пседвослучайный временной интервал

ЗЫ. сколько там данных то? какая скорость?
pasha_zv вне форума  
Непрочитано 28.08.2018, 13:38  
makakus
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.10.2007
Сообщений: 2,758
Сказал спасибо: 1,100
Сказали Спасибо 1,033 раз(а) в 568 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Односторонний сбор данных с 12 МК

Я правильно понимаю: 12 однонаправленных оптических каналов собираются на плате сбора. (какие шторки? куда? )
Проблема в том, что передатчики могут передавать в любое время и возникают коллизии при приёме. Это когда более одного пакета приходит одновременно и принимающий контроллер успевает принять только один, а остальные теряются.

Очень плохо, что передатчик не знает, дошло ли его сообщение. Это всё очень сильно усложняет.
Хорошо, что каналы очень быстродействующие. Меньшее соотношение длина пакета/длина паузы меньше вероятность коллизии

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

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

Последний раз редактировалось makakus; 28.08.2018 в 13:49.
makakus вне форума  
Непрочитано 28.08.2018, 13:46  
threadstarter
Прохожий
 
Регистрация: 27.02.2013
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
threadstarter на пути к лучшему
По умолчанию Re: Односторонний сбор данных с 12 МК

Сообщение от ForcePoint Посмотреть сообщение
12 отдельных оптик, как я понимаю.


Хоть-бы кратенько - что за эксперименты и как ставились.
Эксперимент на одном канале:
Код с передающего МК:
PHP код:
PORTD.DIR = 0b11111111;
    int t1 = 49;
    int t2 = 50;
    int t3 = 51;
    int t4 = 52;
    int startdelay = 100;
    int packetdelay = 50;
    int pindelay = 3;
            while (1)
            {
                PORTD.OUT = 0b00000001;
                delay_ms(startdelay);
                for (int i = 0 ; i‹t1; i++)
                {
                    PORTD.OUTTGL = 0b00000001;
                    delay_ms(pindelay);
                }
                delay_ms(packetdelay );
                for (int i = 0 ; i‹t2; i++)
                {
                    PORTD.OUTTGL = 0b00000001;
                    delay_ms(pindelay );
                }
                delay_ms(packetdelay );
                for (int i = 0 ; i‹t3; i++)
                {
                    PORTD.OUTTGL = 0b00000001;
                    delay_ms(pindelay );
                }
                delay_ms(packetdelay );
                for (int i = 0 ; i‹t4; i++)
                {
                    PORTD.OUTTGL = 0b00000001;
                    delay_ms(pindelay );
                }
                delay_ms(packetdelay );
            } 
Код приемника:

PHP код:
PORTD.DIR = 0b00000000;
    PORTCFG.MPCMASK = 0xff;
    PORTD.PIN0CTRL = PORT_OPC_PULLUP_gc;
    
            while (1)
            {
                    Byte oldd0 =0;
                    int cn = 0;
                    int t1 = 0;
                    int t2 = 0;
                    int t3 = 0;
                    int t4 = 0;
                        
                while(cn ‹ 99)
                {
                    if (!(PORTD.IN&0b00000001))
                    {
                        cn++;
                    }
                    else
                    {
                        cn = 0;
                    }                        
                    delay_ms(1);
                }
                cn = 0;
                oldd0 = PORTD.IN;                                                    
                while (cn ‹50)
                {
                    if ((oldd0 & 0b00000001) != (PORTD.IN&0b00000001))                    
                    {    t1++;
                        oldd0 = PORTD.IN;
                        cn =0;
                    }
                    else
                    {
                        cn++;
                    }
                    delay_ms(1);
                }        
                cn = 0;
                while (cn ‹50)
                {
                    if ((oldd0 & 0b00000001) != (PORTD.IN&0b00000001))                    
                    {
                        t2++;
                        oldd0 = PORTD.IN;
                        cn =0;
                    }
                    else
                    {
                        cn++;
                    }
                    delay_ms(1);
                }
                cn = 0;
                while (cn ‹50)
                {
                    if ((oldd0 & 0b00000001) != (PORTD.IN&0b00000001))                    
                    {
                        t3++;
                        oldd0 = PORTD.IN;
                        cn =0;
                    }
                    else
                    {
                        cn++;
                    }
                    delay_ms(1);
                }
                cn = 0;
                while (cn ‹50)
                {
                    if ((oldd0 & 0b00000001) != (PORTD.IN&0b00000001))                    
                    {
                        t4++;
                        oldd0 = PORTD.IN;
                        cn =0;
                    }
                    else
                    {
                        cn++;
                    }
                    delay_ms(1);
                }
            } 
Вот так вроде даже работает - но если последовательно опрашивать 12 каналов то время опроса будет что то из разряда 20-30 секунд(не пробовал - но по ощущениям так.) А это много. Вообще идеал в пару секунд опрашивать.

Сообщение от ForcePoint Посмотреть сообщение
12 отдельных оптик, как я понимаю.
А почему такая монструозная конструкция? Для быстродействия, гальванической изоляции или чего ещё?
Выпрямитель 3.3 киловольта. 48 диодов - по 4 в блоке. По датчику на блок, 12 штук в итоге - из силовой установки вытаскивать можно только оптикой - для сохранности жизни персонала(хотя +- 5в в силовую установку разрешили)
threadstarter вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги (не радиотехнической тематики) Mike79 Электронная библиотека 4269 04.06.2025 23:11
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Ускорить компьютер 7Fantomas7 Ремонт оргтехники 111 08.08.2018 05:27
Поток данных 44Мбит/сек.Нужно снять лог пару секунд. Как? Zemlyanov Микроконтроллеры, АЦП, память и т.д 4 15.11.2010 23:46
Поможите пожалуйста с литературой на тему сбор данных. ArtUrl1986 Микроконтроллеры, АЦП, память и т.д 0 05.05.2009 02:27


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.