Технический форум по робототехнике.
Начинающий » 25 фев 2018, 18:21
Приветствую всех.
Подскажите пожалуйста в каком файле в Marlin находятся обработчики, работающие непосредственно с пинами платы, т.е. другими словами с железом.
Как я понял тут сначала парсер из файла gcode.h обрабатывает текст и получает значение команды, сначала букву, потом номер, дальше в файле Marlin_main.cpp запускается обработчик команды G кода, а вот дальше отследить логику и путь у меня пока не получилось, потому и спрашиваю. Т.е. интересует в каком файле непосредственно находятся процедуры взаимодействующие с электроникой платы?
Если кто в курсе, подскажите пожалуйста.
Начинающий » 26 фев 2018, 08:44
Кажется нашел ответ на свой вопрос,
тут и
тут, но пока что не уверен.
setar » 26 фев 2018, 18:37
за железо отвечает модуль взаимодействия HAL (Hardware Abstraction Layer)
в чем суть проблемы ?
наверняка велосипед изобретаете
Начинающий » 26 фев 2018, 19:46
Тоже так думал, потому и спрашиваю))).
Суть заключается в том, что я хочу использовать свободные пины на плате, по своему усмотрению, например включать и выключать в конце G кода подсветку, для этого хочу написать свои G-коды в прошивку, в файле Marlin_main.cpp думаю это вполне возможно, но когда задавал вопрос не было понимания как за эти пины "дергать" из своего обработчика G-кода, однако в первом источнике, что выше прочитал, что Marlin обращается непосредственно к портам, потому и думаю что вроде как нужную инфу надыбал, осталось так сказать на практике проверить, проверять хочу светодиодом, подключенным на интересующий меня пин на плате.
setar » 26 фев 2018, 19:55
вот так:
M42 P8 S255 ;включить пин 8
M42 P8 S0 ;выключить пин 8
M42 P8 S128 ;выключить пин 8 в режим ШИМ 50%
Начинающий » 26 фев 2018, 20:21
Спасибо, не знал об этой команде ))), а сначала не понял, думал речь идет о пине второго вентилятора.
Добавлено спустя 9 минут 43 секунды:Я только боюсь, что для моей дешёвенькой платки этот вариант может не подойти, т.к. там можно использовать пины 10,11,12,13,14,18,32,35,36,41, часть из которых уже будет либо занята, либо попросту недоступна, хотя конечно в том же Marlin можно часть этих пинов попытаться переназначить.
Всеравно спасибо, буду думать.
setar » 26 фев 2018, 20:28
определения пинов в файлах pins_*
Начинающий » 26 фев 2018, 20:49
С пинами я уже кажется разобрался, с картинкой они совпадают, у меня для Tevo Tarantula назначаются в файлах pins_MKS_13.h и pins_RAMPS.h, как я понял если точнее говорить, то в pins_MKS_13.h, только содержится ссылка на файл pins_RAMPS.h, а сами пины назначаются уже там.
Начинающий » 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
Начинающий » 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
Начинающий » 07 мар 2018, 19:11
С шаговиками прояснилось, оказывается, у тех что используются в MKS basev1.4, а конкретно модель A4982sltp, когда ток текущий через обмотки меньше определенного значения, драйвер просто уходит в режим сна и напряжения не подает, а также то что для того чтоб он заработал нужно на пин E1_ENABLE_PIN подавать 0, т.к. высокий уровень логического сигнала отключает драйвер, а я раньше думал наоборот. Также в процессе выяснения сгорела половина драйвера и теперь работает только часть драйвера, поэтому для того чтоб что то свое вешать этот разъем явно не пригоден, а вот другим шаговиком после настройки драйвера по току, управлять получится, пины шаговиков расположены в файле pins_RAMPS.h в моем случае.