roboforum.ru

Технический форум по робототехнике.

Поделитесь опытом редактирования обработчиков G кодов

Поделитесь опытом редактирования обработчиков G кодов

Начинающий » 25 фев 2018, 18:21

Приветствую всех.
Подскажите пожалуйста в каком файле в Marlin находятся обработчики, работающие непосредственно с пинами платы, т.е. другими словами с железом.
Как я понял тут сначала парсер из файла gcode.h обрабатывает текст и получает значение команды, сначала букву, потом номер, дальше в файле Marlin_main.cpp запускается обработчик команды G кода, а вот дальше отследить логику и путь у меня пока не получилось, потому и спрашиваю. Т.е. интересует в каком файле непосредственно находятся процедуры взаимодействующие с электроникой платы?
Если кто в курсе, подскажите пожалуйста.

Re: Поделитесь опытом редактирования обработчиков G кодов

Начинающий » 26 фев 2018, 08:44

Кажется нашел ответ на свой вопрос, тут и тут, но пока что не уверен.

Re: Поделитесь опытом редактирования обработчиков G кодов

setar » 26 фев 2018, 18:37

за железо отвечает модуль взаимодействия HAL (Hardware Abstraction Layer)
в чем суть проблемы ?
наверняка велосипед изобретаете

Re: Поделитесь опытом редактирования обработчиков G кодов

Начинающий » 26 фев 2018, 19:46

Тоже так думал, потому и спрашиваю))).
Суть заключается в том, что я хочу использовать свободные пины на плате, по своему усмотрению, например включать и выключать в конце G кода подсветку, для этого хочу написать свои G-коды в прошивку, в файле Marlin_main.cpp думаю это вполне возможно, но когда задавал вопрос не было понимания как за эти пины "дергать" из своего обработчика G-кода, однако в первом источнике, что выше прочитал, что Marlin обращается непосредственно к портам, потому и думаю что вроде как нужную инфу надыбал, осталось так сказать на практике проверить, проверять хочу светодиодом, подключенным на интересующий меня пин на плате.

Re: Поделитесь опытом редактирования обработчиков G кодов

setar » 26 фев 2018, 19:55

вот так:
M42 P8 S255 ;включить пин 8
M42 P8 S0 ;выключить пин 8
M42 P8 S128 ;выключить пин 8 в режим ШИМ 50%

Re: Поделитесь опытом редактирования обработчиков G кодов

Начинающий » 26 фев 2018, 20:21

Спасибо, не знал об этой команде ))), а сначала не понял, думал речь идет о пине второго вентилятора.

Добавлено спустя 9 минут 43 секунды:
Я только боюсь, что для моей дешёвенькой платки этот вариант может не подойти, т.к. там можно использовать пины 10,11,12,13,14,18,32,35,36,41, часть из которых уже будет либо занята, либо попросту недоступна, хотя конечно в том же Marlin можно часть этих пинов попытаться переназначить.
Распиновка платы MKS Base v1.4.jpeg


Всеравно спасибо, буду думать.

Re: Поделитесь опытом редактирования обработчиков G кодов

setar » 26 фев 2018, 20:28

определения пинов в файлах pins_*

Re: Поделитесь опытом редактирования обработчиков G кодов

Начинающий » 26 фев 2018, 20:49

С пинами я уже кажется разобрался, с картинкой они совпадают, у меня для Tevo Tarantula назначаются в файлах pins_MKS_13.h и pins_RAMPS.h, как я понял если точнее говорить, то в pins_MKS_13.h, только содержится ссылка на файл pins_RAMPS.h, а сами пины назначаются уже там.

Re: Поделитесь опытом редактирования обработчиков G кодов

Начинающий » 03 мар 2018, 15:35

Пока что получилось сделать так чтоб мой код F1 понял принтер и пропищал, изменения в прошивке Marlin минимальны, в файле Marlin_main.cpp
В конце обработчика switch (parser.command_letter) { прописываем свой вариант с вызовом нашего обработчика команды gcode_F1()
Код: Выделить всёРазвернуть
case 'F': switch (parser.codenum){   //!!!!
      case 1:
         gcode_F1();
         break;
   }
   break;


затем когда прописываются обработчики команд, в конце после всех обработчиков прописываем свой обработчик
Код: Выделить всёРазвернуть
inline void gcode_F1()       //!!!!
{
//PORTD=PORTD|(1<<50); ни в коем случае не разкомментируйте и не пишите ничего подобного, сожжете плату или МК, т.к. физически все порты МК имеют до 16 пинов
// а до 17 и выше, например до 50 как тут это уже идет эмуляция в марлине за счет программы
BUZZ(1500, 50);
}


После этого в файле gcode.cpp прописываем в строке нашу литеру для команд F, потому что если этого не сделать, то парсер при обработке будет выдавать сообщение неизвестная команда
Код: Выделить всёРазвернуть
// Bail if the letter is not G, M, or T
  switch (letter) { case 'G': case 'M': case 'T': case 'F': break; default: return; }

Это все что нужно сделать, если кому интересно выкладываю сами файлы просто для наглядности, если будете делать нечто подобное то рекомендую править файлы вашей прошивки, т.к. как я понял прошивки даже недалекие друг от друга в дате релиза, по коду могут отличаться, поэтому при простом копировании моих файлов в вашу прошивку она может стать просто не работоспособной. Все изменения можно будет найти если нажать ctrl+F и для поиска ввести !!!! ,я так мечу в файлах изменения которые проводил, на комментарии не обращайте внимания пишу для себя.

Также хочу отметить важную деталь с управлением пинами я еще не разобрался, но понял четко то что следующих конструкций в обработчиках команд быть НЕ ДОЛЖНО
Код: Выделить всёРазвернуть

//PORTD=PORTD|(1<<50); ни в коем случае не разкомментируйте и не пишите ничего подобного, сожжете плату или МК, т.к. физически все порты МК имеют до 16 пинов
// а до 17 и выше, например до 50 как тут это уже идет эмуляция в марлине за счет программы
Вложения
Marlin_main+gcode.zip
(114.65 КиБ) Скачиваний: 0

Re: Поделитесь опытом редактирования обработчиков G кодов

Начинающий » 06 мар 2018, 14:35

Покопался в прошивке Marlin и узнал следующее:
В файле pins.h объявляется часть пинов, и есть ссылка на файл специфичный для используемой платы, в моем случае pins_MKS_13.h, где объявляется еще часть пинов, и есть ссылка на файл pins_RAMPS.h, где объявляются остальные пины.
Соответствие номеров пинов в марлине, портам микроконтроллера Mega1280/Mega2560 прописано в файле fastio_1280.h, на который ссылается файл fastio.h, т.к. используется контроллер Mega2560. Соответствие прописано в комментарии в самом верху и значения из строки 1280 равны значениям строки Port.
Для управления цифровыми пинами которые на рисунке с распиновкой платы обозначаются как D1,D2,...D50,... используются команды прописанные в файле fastio_1280.h

READ(IO); WRITE(IO,V); TOGGLE(IO); SET_INPUT(IO); SET_OUTPUT(IO); SET_INPUT_PULLUP(IO); GET_INPUT(IO); GET_OUTPUT(IO);

Причем доступными из 5 вольтовых, в моем случае оказались только цифровые пины D2,D15,D19, а также аналоговый пин A11, который реагирует только как цифровой, и ШИМ сигнал не выдает, даже с командой M42, остальные аналоговые пины A5,A6,A12,A15 никак не реагируют ни на одну команду, ни на тот же код M42 ни на
SET_OUTPUT(12);
WRITE(12,HIGH);
ни на
pinMode(12, OUTPUT);
analogWrite(12, 255);
которые используются в команде M42, реакции ноль, причем если присмотреться, то пины A15 и D15 соответствуют одному и тому же порту на микроконтроллере платы и пину в марлине, а именно 15, однако когда я подаю высокий или низкий логический уровень на 15 пин, реагирует только вывод D15 на плате, а на выводе A15 стабильно идет высокий уровень сигнала с подтяжкой :/
Также думаю стоит отметить, что при использовании свободных пинов стоит просматривать файлы pins.h; pins_MKS_13.h; pins_RAMPS.h, потому что если там свободные пины уже переназначены через директиву #define, то на ваши команды эти пины могут не отреагировать, пока вы эту директиву не закомментируете, в частности у меня было именно так, когда я переназначал выход под нагреватель экструдера. Однако с аналоговыми пинами совершенно другая история как я понимаю, если не прав, то пожалуйста поправьте.

Если кто в курсе как с аналоговыми пинами работать напишите плиз, а то совсем непонятная ситуация складывается, пины есть и не задействованы никак, но использовать их не получается, даже если в коде прошивки все ссылки на них закомментировать.
Также прилагаю схему принципиальную электрическую для платы 2560, хотя конечно в основном пины на разных версиях плат совпадать будут врятли, а также нормальную картинку самой платы 2560 с пинами.

Также хочется спросить почему на пинах шаговых двигателей, когда шаговики отключены, нет напряжения вообще, даже когда пытаюсь двигать каретку по Z без подключенного шаговика напряжение на обеих катушках по 0 вольт, неужели Marlin контролирует наличие двигателя по потреблению тока?
Вложения
MKS_BASE_PINS.pdf
(141 КиБ) Скачиваний: 0
arduino-mega2560-schematic Принципиальная электрическая схема для arduino 2560.pdf
(41.76 КиБ) Скачиваний: 0

Re: Поделитесь опытом редактирования обработчиков G кодов

Начинающий » 07 мар 2018, 19:11

С шаговиками прояснилось, оказывается, у тех что используются в MKS basev1.4, а конкретно модель A4982sltp, когда ток текущий через обмотки меньше определенного значения, драйвер просто уходит в режим сна и напряжения не подает, а также то что для того чтоб он заработал нужно на пин E1_ENABLE_PIN подавать 0, т.к. высокий уровень логического сигнала отключает драйвер, а я раньше думал наоборот. Также в процессе выяснения сгорела половина драйвера и теперь работает только часть драйвера, поэтому для того чтоб что то свое вешать этот разъем явно не пригоден, а вот другим шаговиком после настройки драйвера по току, управлять получится, пины шаговиков расположены в файле pins_RAMPS.h в моем случае.


Rambler\'s Top100 Mail.ru counter