Контроллер для кордовых электричек
Собрал стенд, с записью какой то косяк, записывает через раз.
Будем искать ((
Исправил ошибку
Programmer.zip
сейчас есть другая трабла, не понятно на что влияющая и где искать концы,
при записи может подвиснуть на 1-2 секунды, но не всегда
похоже на выпадание по таймауту чтения, значит данные не записаны или записаны не полностью,
если сразу после нажатия COMPLETE, значит операция прошла успешно.
а значит я знаю, в каком месте искать эту ошибку, позже попробую поправить.
в общем, продолжу отыскивать траблы, еще пара вылезла,
последовательный порт работает значительно медленнее процессора ))))
так что “по простому” не получится
на самом деле, сейчас уже можно потестить и посмотреть, может я что то пропустил в других местах.
я после интегрирования обмена весь остальной функционал программатора не проверял, мало ли где мог накосячить ))
вчера два часа убил на поиск ошибки в программе, после того как решил, что “на фига” счетчику иметь знак
и заменил его на беззнаковое целое и тут же посыпались все изменения разрядов ))
нашел огромный “косяк”, теперь надо понять, как его “выкурить”.
обмен можете даже не смотреть, таймер отдает все правильно, а вот получает - всякую хрень.
как же быстро привыкаешь к хорошему )),
я имею в виду отладку на STM32, остановил программу в любом месте, просто так или по условию
и смотришь, что куда пришло и что где лежит ) Атмега в этом смысле полный отстой,
как можно заниматься отладкой обмена по UART, если данные можно только в него и выводить.
в общем, до вечера среды все изыскания приостановлены.
надо подумать о глобальном изменении логики обмена.
оказывается ошибки периодически проскакивают даже там, где на первый взгляд все работает отлично.
причина кроется в том, что процессор работает значительно быстрее чем UART.
ПЕЧАЛЬНО (
Ну программатор BLHeli как то же работает, и карты программирования для регуляторов тоже, а они на АтМеге собраны, видимо есть какая-то хитрость… А jeti box programmer, разве не на атмеге собран?
Хорошая мысля приходит опосля. Мы в Вас верим!
да все оно на мегах )), я и сам много лет Меги программировал и горя не знал,
а крайние лет шесть пересел на STM32, на которых в плане отладки все просто “в шоколаде” ))
потому и говорю, к хорошему быстро привыкаешь.
конкретный пример, есть Нано, которая должна получить или передать по UART данные,
как узнать, что она передавала или получала ?
когда в проекте UART свободен, можно “выкинуть” в него полученные данные и посмотреть в проге Терминал,
а если занят ? на STM32 простая реализация, я в режиме отладчика останавливаю программу и смотрю все буферы и переменные )
или в реал-тайм, вывожу в консольную строку.
но решение есть, подключу библиотеку SoftSerial, прицеплю USB-UART и буду в терминале смотреть ))
что касается решения UART на программаторе, на UNO UART разведен, но не распаян,
И при таком способе монтажа разъема, даже не мешает внизу ),
недостаток - четыре штыря и питание в середине, надо искать удлинитель с четырьмя проводами
У меня даже подходящий провод от ST-Link завалялся и при подключении к МИНИ провода переставлять не придется
Хорошая мысля приходит опосля. Мы в Вас верим!
да уже придумал, что поменять, для увеличения стабильности и контроля данных.
это реализовать было значительно сложнее
Настроил вывод данных с таймера, в роли которого Ардуинка-Нано, в Soft’овый последовательный порт,
завтра начну “кропать” новую версию чтения/записи данных в таймер с программатора.
Алгоритм на бумаге уже накидал, понял в чем были глобальные ошибки ).
На программаторе тестовые данные при необходимости буду выводить на экран, тут проще.
В итоге прикрутил контрольную сумму на пакет с данными и все стало значительно проще.
Обмен со стороны программатора отлажен с “эмулятором”.
Осталось перенести обмен из “эмулятора” в программу таймера, по сути заменить заглушки на подпрограммы.
Завтра после работы думаю закончить )
Все что хорошо работало на эмуляторе, в таймере работать отказалось,
пол дня убил, уже сломал всю голову, куда пропадают данные, в общем релиз сегодня не состоится, пойду спать.
Утро вечера мудренее, завтра продолжу изыскания ((, печалька.
Завтра прикручу в таймере и программаторе отзеркаливание в софтсериал всей информации отправляемой и получаемой через UART
и буду смотреть, другие варианты уже все перебрал.
“дело было не в бобине дхххххб сидел в кабине”(с) народная мудрость.
сегодня с утра девайсы отказались коннектится, совсем отказались.
и тут пришла в голову “мудрая мысля” - “а может стоит глянуть на TX/RX с помощью осциллографа”(с)
вывод, я больше недели убил оптимизируя код, изобретая проверки данных,
а надо было всего навсего, выкинуть на хрен китайские провода с разъемами,
которые тупо “звенели” и вносили помехи в данные, причем неисправность плавающая,
чуть тронул проводок, пакет прошел, двинул в другую сторону, пакет не пришел.
а я с “большого ума” сегодня с утра начал в очередной раз переписывать обмен.
я это сделал,
- обмен данными
- изменение настроек
- сохранение настроек в EEPROM таймера работает
через пару часов закончится гран-при Ф1 и выложу актуальные версии программ.
Timer+Programmer.zip
дальше только исправлять ошибки,
при “холодном” старте все работает штатно, но если случился сбой и в буфере “зависли” данные,
нарушается логика обмена, лечится ресетом обоих девайсов.
в следующей версии добавлю стартовый байт, что бы “зависшие” данные и разный “мусор” в канале не мешали.
через пару часов закончится гран-при Ф1 и выложу актуальные версии программ.
[off top] Рассел всю малину испоганил…[/off top]
это тоже оффтоп
мостик Феррари всю малину испоганил, могли дубль сделать.
если бы в самом начале Сайнс пропустил Леклера, тогда на пит-стопе Леклер не потерял бы уйму мест.
а во время VSC у Леклера была возможность бесплатного пит-стопа.
короче Феррари как всегда тупили.
а потом, если вдруг Сайнс второй, а Леклер первый, поменяли местами, что бы Карлуше не было обидно
кто нибудь попробовал ?
Пока нет, немного не хватает времени, работа завал, но пристально слежу ща темой.