Полезная информация


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

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

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

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

7ambrion

Цитата: Mike 372 от 11 Апр. 2024 в 14:35Как-то вот так это будет выглядеть. Остальных деталей пока нет.
P_20240411_153207.jpg
единственный минус - юсб порт контроллера закрыт, придется провод напрямую впаивать для доступа )

7ambrion

Цитата: Mike 372 от 11 Апр. 2024 в 07:23Товарищ на работе посоветовал сделать вот такую проверку:
  //Получение данных с дисплея.
  digitalWrite(LED_PIN, LOW);
  if (Serial1.available()) {
    digitalWrite(LED_PIN, HIGH);
    delay (100);

    buf[A]=Serial1.read();
    A = A + 1;
  }
Светодиод покажет, появляются ли вообще в буфере порта хоть какие-то данные.

не загорается )

7ambrion

а блин, забыл порт поменять на второй сначала ) поменял и диод загорелся )

Mike 372

Для чистоты эксперимента попробуй отключить провод от RX. Когда данных нет, диод светиться не должен

7ambrion

без него не горит ) вставляю его на включенную и сразу загорается )

Mike 372

Выходит, на аппаратном уровне порт работает и данные от дисплея получает. Вот только по какой-то причине прошивка не может увидеть контрольные байты.

7ambrion

на аппаратном уровне, не знаю это важно или нет, но заметил следующее ) везде, в других местах, нижний уровень сигнала чуть выше нуля, точно не скажу сколько но выше ) а у экрана он именно 0 ) может это не важно но все же, заметил - сообщил )

а верхний уровень везде примерно 3,3в, точно точно не скажу но примерно так и везде примерно одинаково ))

Mike 372

0 - это лучше, чем чуть выше нуля.  ;-D  Проверь, у тебя параметр С11 какой установлен? Это старый и новый протокол.
На форуме есть тема по протоколу КТ ссылка. Можно там почитать, поспрашивать. Там в первом сообщении приводится  ссылка на описание протокола. Согласно описанию два последних байта контрольные 32 и 0Е. И у меня на двух великах с ними работает. А на третьей странице человек приводит файл с прочитанными данными, у него последние байты 14 и 0Е. Можно попробовать изменить проверку 32 на 14. Вдруг заработает.

7ambrion

#350
Цитата: Mike 372 от 11 Апр. 2024 в 17:300 - это лучше, чем чуть выше нуля.  ;-D  Проверь, у тебя параметр С11 какой установлен? Это старый и новый протокол.
На форуме есть тема по протоколу КТ ссылка. Можно там почитать, поспрашивать. Там в первом сообщении приводится  ссылка на описание протокола. Согласно описанию два последних байта контрольные 32 и 0Е. И у меня на двух великах с ними работает. А на третьей странице человек приводит файл с прочитанными данными, у него последние байты 14 и 0Е. Можно попробовать изменить проверку 32 на 14. Вдруг заработает.

только на 0 работает, на 1 экран перестает принимать данные с контроллера, а самое странное что ардуинка при этом теряет связь с компом )) на 2-4 он хочет принять какие то данные и поскольку этого не происходит через несколько секунд выкидывает в настройки параметров )

а исходя из инфы которая есть у меня с11 копирует настройки ) соответственно для этого должен быть usb ) если его на экране нет, то параметр скорее всего рудиментальнй ))


Mike 372

Какой USB на экране? Он бывает только как порт для зарядки телефона. С11 0 - новый протокол, 1 - старый, 2 - копирование настроек на другой дисплей. Дисплеи соединяются сигнальными проводами. Я про него на всякий случай спросил. У меня тоже 0 установлен. Попробуй поменять 32 на 14 и перенеси включение диода в условие проверки контрольных байтов.
//Получение данных с дисплея.
digitalWrite(LED_PIN, LOW);
  if (Serial1.available()) {
    buf[A]=Serial1.read();
    A = A + 1;
  }
  if (A > 12) {
    if ((buf[11]==0x3214) && (buf[12]==0x0e)){
      digitalWrite(LED_PIN, HIGH);
      delay (100);
 
      A = 0;
      ASSIST_LEVEL = (buf[1] & 7);
      ASSIST_DELAY = ((buf[6] & 0x38) * 12.5 + 100);

7ambrion


Mike 372

Предлагаю задать вопрос в той теме. Может кто что подскажет. Либо надо каким-то образом увидеть, какие значения получаются в буфере. Можно еще попробовать проверять только последний байт.
Цитата: Mike 372 от 11 Апр. 2024 в 18:08//Получение данных с дисплея.
digitalWrite(LED_PIN, LOW);
  if (Serial1.available()) {
    buf[A]=Serial1.read();
    A = A + 1;
  }
  if (A > 12) {
    if ((buf[11]==0x3214) && (buf[12]==0x0e)){
      digitalWrite(LED_PIN, HIGH);
      delay (100);
 
      A = 0;
      ASSIST_LEVEL = (buf[1] & 7);
      ASSIST_DELAY = ((buf[6] & 0x38) * 12.5 + 100);

7ambrion

хех да я даже сформулировать вопрос не могу ))

по сути к чему мы пришли:
1. дисплей выдает сигнал
2. ардуинка видит что сигнал есть
3. ардуинка не вдупляет что это за сигнал такой совершенно и по этому ничего не может поделать?! )))

Mike 372

Проверку предпоследнего байта пробовал убрать?

7ambrion

теперь проверил, сначала не заметил разницы в коде )

как только включаю экран диод загорается )

Mike 372

Так. Тогда давай проверим ассист.
//Получение данных с дисплея.
  if (Serial1.available()) {
    buf[A]=Serial1.read();
    A = A + 1;
  }
  if (A > 12) {
    if ((buf[11]==0x32) && (buf[12]==0x0e)){
      A = 0;
      ASSIST_LEVEL = (buf[1] & 7);
      ASSIST_DELAY = ((buf[6] & 0x38) * 12.5 + 100);
      Pulse_pedal =  ((buf[8] & 0x0F) + 1);
      G = ((buf[7] & 0x0F)*100);
      //J = buf[3]*10;
      F = (buf
  • ) * 10;
      E = ((buf[8] & 0xE0)*3.125/2);
      C = (buf[6] & 0x01);
    }
    else {
      A = A - 1;
      memmove(&buf
  • , &buf[1], A);
    }
  }
if (ASSIST_LEVEL == 3) digitalWrite(LED_PIN, HIGH);
if (ASSIST_LEVEL == 2) digitalWrite(LED_PIN, LOW);
   
//Обработка сигнала датчика вращения.

Blik86

Цитата: Mike 372 от 11 Апр. 2024 в 17:30А на третьей странице человек приводит файл с прочитанными данными, у него последние байты 14 и 0Е. Можно попробовать изменить проверку 32 на 14. Вдруг заработает.
В предпоследнем байте L1 и дополнительная/скрытая настройка параметра C4.