Форум ModelldepO  

Вернуться   Форум ModelldepO > Моделизм > Электрика и DCC > Arduino
Ответ
 
Опции темы Опции просмотра
Старый 02.04.2019, 21:13   #1
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,693
Сказал(а) 'не согласен(а)'!: 10
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,942
Поблагодарили 4,844 раз(а) в 1,822 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (5127)
По умолчанию DCC "по-воздуху"

Решил написать в отдельную тему, т.к. другие темы по радиоуправлению, вроде как не имеют отношения к DCC.
Я давал уже ссылку на этот проект, в теме со ссылками по проектам на базе Arduino.
Т.к. я планирую, также, как и Андрей, использовать на макете состав для чистки рельсов и чтобы не быть завязанным на плохой токосъём, в процессе чистки, мне было интересно попробовать, как это вообще работает и можно ли это использовать.
Собрал из подручных средств два устройства и попробовал по-управлять.
Для себя решил добавить, в схему передатчика, опторазвязку на базе 6N137, ну и питание сделал отдельное, а не от DCC.
Для управления, приёмник обрабатывает только команды, отправленные на конкретный, прописанный в скетче, локомотивный адрес. Изменить его можно, только перепрошив заново ардуино, прошивкой с новым значением адреса. Надо будет подумать, как это можно изменить.
В ходе тестирования, также обнаружился один неприятный момент. Приёмник никак не реагирует на выключение DCC или питания передатчика, либо потерю связи с ним. Это не очень приятный момент, т.к. при этом мы полностью теряем контроль над локомотивом.
Он в это время будет выполнять последнюю, полученную им команду и хорошо, если это будет команда остановки. А если нет?
Решил исправить ситуацию и немного подправить код.
Управление драйвером двигателя осуществляется цифровыми выходами D5 и D6, состояние которых изменяется прерыванием по таймеру2.
Немного почесав тыковку, пришёл к такому решению......
При отсутствии входящих сообщений по радиоканалу, необходимо запретить работу прерываний и установить на портах D5 и D6 низкий уровень, что приведёт к снятию питания на выходе драйвера.
При появлении сообщений, требуется всего лишь снова разрешить прерывания.
Для этого в скетче приёмника, в цикле loop, добавляем пару строчек(выделены слешами//):
Скрытый текст
Arduino код:
void loop(){
  
Serial.println("trying");
  
delay(100);   
   
  if ( 
radio.available() ) {
        
radio.read( &dataReceivedsizeof(dataReceived) );
        
newData true;
  
  
////////////////////////////////////////////////////////////////////////      
        
interrupts();//подключаем прерывания
  ////////////////////////////////////////////////////////////////////////  
    
    
}
    
  
//////////////////////////////////////////////////////////////////////////////////////////////////  
    
else{noInterrupts(); PORTD B00000000;}// иначе отключаем прерывания и устанавливаем на портах
    // управляющих драйвером низкий уровень, тем самым снимая питание на выходе драйвера.
  //////////////////////////////////////////////////////////////////////////////////////////////////
    
      
if (newData == true) {
        
//Serial.println(dataReceived);
        
inString String(dataReceived);
        
string();
        
newData false;
    } 

Теперь при нажатии кнопки Стоп на мультимаусе, отключении питания передатчика или потери сигнала, питание с декодера сразу снимается и лок останавливается, а после восстановления соединения продолжает выполнять поступающие команды.
Буду это воплощать в "железе", на нормальных платах, т.к. радиомодули очень чувствительны к потерям контакта и качеству питающего напряжения.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума  
Вверх
5 пользователя(ей) сказали cпасибо:
Старый 02.04.2019, 21:36   #2
Qvan22
Заглянувший
 
Регистрация: 26.01.2013
Адрес: Минск
Сообщений: 204
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 456
Поблагодарили 454 раз(а) в 135 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: - луч света в тёмном царстве (454)
По умолчанию

Цитата:
Сообщение от laba Посмотреть сообщение
При отсутствии входящих сообщений по радиоканалу, необходимо запретить работу прерываний и установить на портах D5 и D6 низкий уровень, что приведёт к снятию питания на выходе драйвера.
Я немного запутался, а разве отключение прерываний не застопорит работу шины SPI, которая общается с nrf24? Может безопаснее останавливать сам таймер за номером 2?
Qvan22 вне форума  
Вверх
Старый 02.04.2019, 22:04   #3
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,693
Сказал(а) 'не согласен(а)'!: 10
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,942
Поблагодарили 4,844 раз(а) в 1,822 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (5127)
По умолчанию

Цитата:
Сообщение от Qvan22 Посмотреть сообщение
Я немного запутался, а разве отключение прерываний не застопорит работу шины SPI, которая общается с nrf24?
Я не силён в теории, на практике, пока проблем не заметил.
Цитата:
Сообщение от Qvan22 Посмотреть сообщение
Может безопаснее останавливать сам таймер за номером 2?
Если разъясните, как это грамотно сделать, все будут только благодарны. Это не мой конёк, я бы так сказал.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума  
Вверх
Старый 02.04.2019, 23:15   #4
Qvan22
Заглянувший
 
Регистрация: 26.01.2013
Адрес: Минск
Сообщений: 204
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 456
Поблагодарили 454 раз(а) в 135 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: - луч света в тёмном царстве (454)
По умолчанию

Цитата:
Сообщение от laba Посмотреть сообщение
Если разъясните, как это грамотно сделать, все будут только благодарны. Это не мой конёк, я бы так сказал.
Я тоже любитель в данном вопросе, но предлагаю подойти следующим путем:

Скрытый текст
в основном примере по ссылке, автор скетча просто молодец и все подписал для нас,
в функции настройки таймера
Arduino код:
void SetupTimer2() {} 
есть строчка:
Arduino код:
 //Timer2 Overflow Interrupt Enable
TIMSK2 << TOIE2
она, по идее и разрешает наше прерывание по переполнению счетчика таймера2 которое в свою очередь и вызывает функцию:
Arduino код:
//Timer2 overflow interrupt vector handler
ISR(TIMER2_OVF_vect) {} 
в которой и генерируется сигнал для драйвера двигателя.


Попробуйте заменить в своем примере глобальные прерывания на упомянутую выше запись в регистр таймера:

Arduino код:
void loop(){ 
  
Serial.println("trying"); 
  
delay(100);    
    
  if ( 
radio.available() ) { 
        
radio.read( &dataReceivedsizeof(dataReceived) ); 
        
newData true
   
  
////////////////////////////////////////////////////////////////////////       
        
TIMSK2 << TOIE2;//подключаем прерывания 
  ////////////////////////////////////////////////////////////////////////   
     
    

     
  
//////////////////////////////////////////////////////////////////////////////////////////////////   
    
else{TIMSK2 << TOIE2PORTD B00000000;}// иначе отключаем прерывания и устанавливаем на портах 
    // управляющих драйвером низкий уровень, тем самым снимая питание на выходе драйвера. 
  ////////////////////////////////////////////////////////////////////////////////////////////////// 
     
      
if (newData == true) { 
        
//Serial.println(dataReceived); 
        
inString String(dataReceived); 
        
string(); 
        
newData false
    } 
Qvan22 вне форума  
Вверх
Пользователь сказал cпасибо:
Старый 02.04.2019, 23:42   #5
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,693
Сказал(а) 'не согласен(а)'!: 10
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,942
Поблагодарили 4,844 раз(а) в 1,822 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (5127)
По умолчанию

Цитата:
Сообщение от Qvan22 Посмотреть сообщение
Попробуйте заменить в своем примере глобальные прерывания на упомянутую выше запись в регистр таймера:
Спасибо, попробую обязательно. По результатам отпишусь.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума  
Вверх
Старый 14.11.2019, 11:50   #6
Harman
Заглянувший
 
Аватар для Harman
 
Регистрация: 09.08.2009
Адрес: Донецк
Сообщений: 63
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 5
Поблагодарили 71 раз(а) в 16 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: скоро придёт к известности (71)
По умолчанию

Лучше использовать есп8266, там и контроль подключения можно настроить (именно потерю соединения покажет), да и модуль интереснее, компактнее. Короче масса плюсов.
Harman вне форума  
Вверх
Старый 19.01.2024, 07:36   #7
pandrey
Местный
 
Аватар для pandrey
 
Регистрация: 12.01.2010
Адрес: Геленджик
Сообщений: 2,773
Сказал(а) 'не согласен(а)'!: 28
Сказали 'не согласен'! 10 раз(а) в 9 сообщениях
Сказал(а) спасибо: 7,164
Поблагодарили 5,542 раз(а) в 1,369 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (5582)
По умолчанию

Затеялся сделать апгрейд своему чистящему составу, соответственно данная тема очень понравилась.

Собрал.

Нажмите на изображение для увеличения
Название: Изображение WhatsApp 2024-01-19 в 07.18.06_6efcde7b.jpg
Просмотров: 83
Размер:	104.9 Кб
ID:	212520Нажмите на изображение для увеличения
Название: Изображение WhatsApp 2024-01-19 в 07.18.06_410fbd48.jpg
Просмотров: 65
Размер:	100.5 Кб
ID:	212521

Реализация, мягко скажем грубоватая, но работает и лезет по габаритам. Пока скетчи использовал от автора. Добавления от Алексея и Владимира пока не пробовал.
Реализовал включение моторов пылесоса и шлифовалки от функциональных выходов декодера при помощи приблуд
Есть программный глюк. Функциональные выходы включаются, но не выключаются. Чтобы их выключить нужно вкл/выкл свет.

Попробую поразобраться в скетче, но если не получится, то и так сойдет!
pandrey вне форума  
Вверх
6 пользователя(ей) сказали cпасибо:
Старый 19.01.2024, 11:41   #8
Rebel
Местный
 
Аватар для Rebel
 
Регистрация: 22.11.2010
Адрес: Москва
Сообщений: 3,038
Сказал(а) 'не согласен(а)'!: 4
Сказали 'не согласен'! 29 раз(а) в 19 сообщениях
Сказал(а) спасибо: 1,707
Поблагодарили 1,646 раз(а) в 830 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
2 Всего
Репутация: обеспечил(а) себе прекрасное будущее (1681)
По умолчанию

надеюсь мы на пути к отрытой реализации HM7000
__________________
🎉 мой канал в телеграм @aleksandr_ru_blog
Rebel вне форума  
Вверх
Старый 19.01.2024, 11:45   #9
Saddam
Местный
 
Аватар для Saddam
 
Регистрация: 06.09.2013
Адрес: Багдад
Сообщений: 7,453
Сказал(а) 'не согласен(а)'!: 41
Сказали 'не согласен'! 75 раз(а) в 60 сообщениях
Сказал(а) спасибо: 4,790
Поблагодарили 6,654 раз(а) в 2,922 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (6651)
По умолчанию

Цитата:
Сообщение от Rebel Посмотреть сообщение
надеюсь мы на пути к отрытой реализации HM7000
Нет, это совершено иное, грубо говоря "удлинитель" DCC.
__________________
Zulu Oscar Victor
Saddam вне форума  
Вверх
Старый 19.01.2024, 11:57   #10
Rebel
Местный
 
Аватар для Rebel
 
Регистрация: 22.11.2010
Адрес: Москва
Сообщений: 3,038
Сказал(а) 'не согласен(а)'!: 4
Сказали 'не согласен'! 29 раз(а) в 19 сообщениях
Сказал(а) спасибо: 1,707
Поблагодарили 1,646 раз(а) в 830 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
2 Всего
Репутация: обеспечил(а) себе прекрасное будущее (1681)
По умолчанию

Цитата:
Сообщение от Saddam Посмотреть сообщение
Нет, это совершено иное, грубо говоря "удлинитель" DCC.
а по мне так очень близко, тут и там заворачивают дцц в радио транспорт, только там BLE
тут, думаю, тоже на BLE можно сделать, останется только протокол совместимый с HM7000...
(в теории возможно что у HM7000 в блютусе вовсе не дцц завернут, но имхо странно и затратно с их стороны имея дцц декодер туда еще один протокол навешивать, хотя и такое возможно)
__________________
🎉 мой канал в телеграм @aleksandr_ru_blog
Rebel вне форума  
Вверх
Старый 19.01.2024, 12:51   #11
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 2,837
Сказал(а) 'не согласен(а)'!: 6
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 972
Поблагодарили 2,652 раз(а) в 1,569 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (2678)
По умолчанию

Цитата:
Сообщение от Rebel Посмотреть сообщение
(в теории возможно что у HM7000 в блютусе вовсе не дцц завернут, но имхо странно и затратно с их стороны имея дцц декодер туда еще один протокол навешивать, хотя и такое возможно)
А тут вопрос в том, во что ДЦЦ в декодере преобразуется.

Если я правильно помню, то вроде у китайцев декодеры по сериал порту настраиваются.
Alexmit вне форума  
Вверх
Старый 19.01.2024, 20:41   #12
pandrey
Местный
 
Аватар для pandrey
 
Регистрация: 12.01.2010
Адрес: Геленджик
Сообщений: 2,773
Сказал(а) 'не согласен(а)'!: 28
Сказали 'не согласен'! 10 раз(а) в 9 сообщениях
Сказал(а) спасибо: 7,164
Поблагодарили 5,542 раз(а) в 1,369 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (5582)
По умолчанию

Продолжение проекта

Garden Train - Arduino Wireless NMRA DCC
pandrey вне форума  
Вверх
Пользователь сказал cпасибо:
Ответ

Опции темы
Опции просмотра

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Rocrail+OpenCar System=RailCom "по-воздуху" laba Rocrail 5 13.09.2017 19:56
"Пять копеек" старого "ворчуна" по теме "электроника" старлей Флейм 17 13.01.2014 14:31


Текущее время: 18:56. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
Copyright © ModelldepO.ru 2006 -