Контроллеры Vesc с дисплеем LCD-8 и торксенсором.

Автор Mike 372, 12 Авг. 2023 в 00:04

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

7ambrion

Цитата: Mike 372 от 15 Апр. 2024 в 11:08Нет. Скорость, которую измеряет контроллер, с Ардуинкой ни как не связана. То, что я пофиксил, на работу спидометра не повлияет. Только на ее собственные нужды.
ок, буду тогда пока надеется что с заменой ардуинки этот недуг решился )))

Цитата: Mike 372 от 15 Апр. 2024 в 11:08Могу. Но он еще сыроватый. Там из трех разных в один слепил. Сейчас буду проверять и подправлять, где что не нравится.
хех звучит многообещающе )) тогда если думаешь что завершишь допил седня/завтра то кидай по завершению ) а если не лень то можешь дополнительно и щас кинуть, и тогда пока ожидаю финальной версии, скорость под себя допиливать поучусь ))

Mike 372

Цитата: 7ambrion от 15 Апр. 2024 в 11:23ок, буду тогда пока надеется что с заменой ардуинки этот недуг решился )))
Да не мог он решиться. Ардуинка тут не при чем. Это зависит только от прошивки контроллера.
Цитата: 7ambrion от 15 Апр. 2024 в 11:23а если не лень то можешь дополнительно и щас кинуть
Щас не могу.  :pardon:  Прошивка дома, а я на работе.

7ambrion

Тогда подожду законченой версии ) как закончишь интеграцию т15 - кидай ) а пока я из т2 скетча достал обработку скорости и понял что в таком виде она мне не подходит )) взял оттуда первые две строчки и дальше изобретаю чтоб не время счетало а обороты )
Похоже в итоге для педалей она останется твоей стоковой, а у газа будет своей ))

Mike 372

А что ты хочешь в Ардуинке со скоростью-то сделать? Обороты пересчитать в скорость не проблема. Только зачем? У тебя же нет к ней дисплея.

7ambrion

Хочу чтоб по достижению определенной скорости газ выключался ) ну и в идеале определять этот барьер отключения в настройках экрана )

Еще, до кучи, мне не нравится долгая реакция контроллера ) в смысле то как он скорость выдает ) вероятно вещать ее из ардуинки могло бы быть лучше, а контроллером просто пропускать этот параметр дальше в экран )

Mike 372

Цитата: 7ambrion от 15 Апр. 2024 в 16:12а контроллером просто пропускать этот параметр дальше в экран )
Чтобы реализовать в контроллере такую функцию, надо ковырять его прошивку. Проще сделать по другому. Передавать данные из контроллера в дисплей также через Ардуинку через второй порт. И замещать байт скорости своим. Только реакция вряд ли будет быстрее. С отображением динамичных параметров,скорость и мощность, тормозит сам дисплей. А ты датчик скорости уже приладил, от чего проверяешь? На ходу я как-то серьезных задержек не замечал. Бывает, притормаживает при трогании с места. Да и фиг бы с ним. Не очень-то оно в этот момент и надо.
Цитата: 7ambrion от 15 Апр. 2024 в 16:12Хочу чтоб по достижению определенной скорости газ выключался )
Для этого скорость не нужна. Считаешь время оборота колеса для нужной тебе скорости и по нему задаешь условие.
Цитата: 7ambrion от 15 Апр. 2024 в 16:12ну и в идеале определять этот барьер отключения в настройках экрана
С этим ни каких проблем. Выбираешь не задействованный пункт в настройках и читаешь его из полученного пакета. А дальше делай с ним, что хочешь.

7ambrion

Цитата: Mike 372 от 15 Апр. 2024 в 17:55С отображением динамичных параметров,скорость и мощность, тормозит сам дисплей.
при связке КТ контроллер + КТ экран, экран не тормозит )

Цитата: Mike 372 от 15 Апр. 2024 в 17:55А ты датчик скорости уже приладил, от чего проверяешь?
геркон поставил, проверяю в среде ардуино через монитор порта ) тут тоже не тормозит и сразу показания вываливаются )

Цитата: Mike 372 от 15 Апр. 2024 в 17:55С этим ни каких проблем. Выбираешь не задействованный пункт в настройках и читаешь его из полученного пакета. А дальше делай с ним, что хочешь.
в общих чертах мне процесс понятен, но пока не ясно как именно за нужный параметр зацепиться ) к примеру если самый первый из них брать, где в стоке максималка задается 10-72 кмч ) как мне его в ардуинке поймать?! )

Mike 372

Цитата: 7ambrion от 15 Апр. 2024 в 18:49геркон поставил, проверяю в среде ардуино через монитор порта ) тут тоже не тормозит и сразу показания вываливаются )
Ты подключи геркон к контроллеру на вход РРМ и посмотри, как на дисплее будет. Их можно включать параллельно. Только подпор входа в Ардуинке лучше отключить.
Цитата: 7ambrion от 15 Апр. 2024 в 18:49к примеру если самый первый из них брать, где в стоке максималка задается 10-72 кмч ) как мне его в ардуинке поймать?! )
В теме по протоколу КТ в первом сообщении есть ссылка на его описание. По ней найдешь документ, где все расписано, какой параметр в каком байте передается, какие биты занимает. Некоторые у меня в коде используются. Можно вместо них подставлять константы и высвобождать для других задач. Р1 передается в байте buf[3] и может приниматься в переменную J. Просто эта строчка закомментирована.

7ambrion

Цитата: Mike 372 от 15 Апр. 2024 в 21:47Ты подключи геркон к контроллеру на вход РРМ и посмотри, как на дисплее будет. Их можно включать параллельно. Только подпор входа в Ардуинке лучше отключить
Он как на схеме и туда и туда подключен ) соответственно одновременно и на дисплее вижу результат контроллера, а в мониторе порта результаты ардуинки )

7ambrion

нужно немного разъяснений )) мониторю b2 на предмет ограничения скорости )

Serial.println(buf[2])

диапазон на дисплее 10-72, а в ардуинке получается два круга по 256 ))

первый круг:
10=2
11=10
12=18
...
41=250

в общем он отлично укладывается в:
Serial.println(((buf[2])-2)/8 + 10);
и получаем в ардуинке разультат аналогичный тому что на дисплее )

но у нас остается в наличие еще второй круг: )))
42=2
43=10
44=18
...
72=242
В формулу и его уложить не проблема но он как бы идет по тем же самым значением и полностью их повторяет и вот это уже мягко говоря не сходится без бага ))) как устранить баг? ))

7ambrion

понял в чем косяк но не знаю как это в коде выразить ) помоги пожалуйста ))
в общем из b2 мне нужно только пять определенных битов а не все 8, + еще из b4 нужен 1 конкретный бит ))

как второй байт сюда правильно подкинуть и в обоих байтах указать на конкретные биты? )
Serial.println(buf[2])

Mike 372


7ambrion

наверно да, старшие ) из таблицы которая в первом сообщении той другой темы мне нужно b2 от s0 до s4 и из b4 нужен s5 )

Mike 372

Посмотри, как сделано в коде например E = ((buf[8] & 0xE0). Здесь вытаскивается 3 бита. В переменную Е присваивается результат операции логическое "И" с числом, в котором нужные тебе биты в 1. ‭0xE0 =11100000‬ Дли 5 бит будет  Х = ((buf[2] & 0xF8).

7ambrion

принцип понял, бинарники нужно в хекс переводить )) а как еще один байт туда подсовывать? )

Serial.println(((buf[2] & 0xF8)+(buf[4] & 0x20))/8+10);

если вот так делаю, то стабильно опять только первый круг работает, хоть и стало несколько лучше в целом )

 

Mike 372

Вот же китайцы намудрили. :facepalm:  В В2 у тебя 5 младших битов, в В4 самый старший. В2 надо получить в одну переменную и сдвинуть вправо на 3 бита. В4 надо получить в другую переменную. После этого сделать с ними операцию логическое "ИЛИ".

7ambrion

#394


Хех про старшинство битов я пока не в теме но больше беспокоит как их сдвигать ) в смысле еще в бинарном исполнении единички двигать?! )

Зы после работы попробую ченить с этим поделать ))))

Mike 372

Данные в массиве buf[13] - это байты. Каждый байт можно представит в бинарном виде, как восемь бит, в десятичном как числа от 0 до 255 и в HEX от 0x00 до 0xFF. Разницы нет. У тебя в дисплее есть значение скорости. Оно представлено числом из 6 бит. Если его засунуть в байт, то оно должно выглядеть вот так 00s5s4s3s2s1s0. Тогда оно в десятичном виде будет отображаться адекватно. А китайцы сделали через анус. 5 младших битов поместили в старшие разряды s4s3s2s1s0000, а старший бит оторвали и засунули в другой байт, но хоть оставили на своем месте. 00s500000. Тебе нужно проделать обратную операцию. Сдвинуть в первом байте действующие биты в младшие разряды s4s3s2s1s0000 -> 000s4s3s2s1s0 и совместить с байтом, где находится старший разряд. Для сдвига бит в байте есть специальные команды. Их можно найти в справочнике. Я сейчас не помню.