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

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

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

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

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

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

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

Закрытая тема
Опции темы
Непрочитано 28.08.2018, 08:02   #1
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   #2
Yuri222
Почётный гражданин KAZUS.RU
 
Регистрация: 08.02.2005
Адрес: Минск, Беларусь
Сообщений: 7,817
Сказал спасибо: 2,709
Сказали Спасибо 2,666 раз(а) в 1,972 сообщении(ях)
Yuri222 на пути к лучшему
По умолчанию Re: Односторонний сбор данных с 12 МК

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Последний раз редактировалось makakus; 28.08.2018 в 13:49.
makakus вне форума  
Непрочитано 28.08.2018, 13:46   #10
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 it1i++)
                {
                    
PORTD.OUTTGL 0b00000001;
                    
delay_ms(pindelay);
                }
                
delay_ms(packetdelay );
                for (
int i it2i++)
                {
                    
PORTD.OUTTGL 0b00000001;
                    
delay_ms(pindelay );
                }
                
delay_ms(packetdelay );
                for (
int i it3i++)
                {
                    
PORTD.OUTTGL 0b00000001;
                    
delay_ms(pindelay );
                }
                
delay_ms(packetdelay );
                for (
int i it4i++)
                {
                    
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 код Выкл.

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

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


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


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