В мониторе COM порта "проскальзывают" кракозябры

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

В мониторе COM порта "проскальзывают" кракозябры. Но дело НЕ в настройке скорости порта и скорости в begin. В коде ВСЕ команды Serial.... закоментированы - проверены "Поиском".  Подпрограмм и библиотек нет. Прет что-то аппаратное, потому что кракозябры лезут при нажатии кнопки... та повешена на аналоговый порт... Или что еще может проходить по КОМ порту после прошивки? Мб что-то с типами переменных... я в них не шарю(((... Код большой, не выложишь. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Причин много. Все не перечислишь.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Квадратик и следом открытая фигурная скобка. Такая пара..... Ни на что не похожа? 9600.

Как это ... причин много?:)))  Код же не посылает ничего в порт...

А как пользоваться плотером? Он выдает пустой лист((((

 

mixail844
Offline
Зарегистрирован: 30.04.2012

выложите минимальный код при котором можно наблюдать явление

mixail844
Offline
Зарегистрирован: 30.04.2012

DetSimen пишет:

Причин много. Все не перечислишь.

на самом деле причин всего 2 : 

- либо аппаратная 

- либо программная :D

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

dim3740 пишет:
Код же не посылает ничего в порт...

Он Вам это сказал или Вы так предполагаете?

Если 

dim3740 пишет:

Код большой

и при этом в нём распахана память, он может посылать не только в порт, а и значительно дальше.

Так чтоВам правильно сказали - выложите минимальный код на котором можно наблюдать неприятность.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015
void readSensors() {  
  int conn = 255; // 254 и при отпущеном
  for (int i = 0; i < NUM_STRINGS - 1; i++) { 
    softPotVals[i] = analogRead(softPotPins[i]);
    softPotVals[i] = map(softPotVals[i], calibrationMin[i], calibrationMax[i], 0, conn);  // сжатие от 0 до 1023 в 0-255
    softPotVals[i] = constrain(softPotVals[i], 0, 255);  // задание границ
    _delay_ms(1); 

    Serial.print("  output = ");
    Serial.println(softPotVals[i]);
    Serial.print('\n');

  }
}

При нажатии всегда бегут строки с состоянием уровня входа, а при отпускании кнопки код цифры прерываются и единожды вылезают в/ кракозябры...  2 или 3 пары 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mixail844 пишет:

на самом деле причин всего 2 : 

- либо аппаратная 

- либо программная :D

У меня чаще "отсутствие мозгов" - это какая? Аппаратная или программная?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

dim3740 пишет:

void readSensors() {  
...
}

При нажатии всегда бегут строки с состоянием уровня входа, а при отпускании кнопки код цифры прерываются и единожды вылезают в/ кракозябры...  2 или 3 пары 

Вы не поняли. Приведите законченный код, который мы могли бы запустить и наблюдать проблему. Законченный - с loop, с setup и т.д.

mixail844
Offline
Зарегистрирован: 30.04.2012

ЕвгенийП пишет:

mixail844 пишет:

на самом деле причин всего 2 : 

- либо аппаратная 

- либо программная :D

У меня чаще "отсутствие мозгов" - это какая? Аппаратная или программная?

  -сколько программистов нужно что бы поменять лампочку  ? 

 - нисколько , это проблема на стороне железа ) 

b707
Offline
Зарегистрирован: 26.05.2017

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

И что ж вы врете, что "код ничего не шлет в порт"?

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

А! Жаль... это не реально. Ладно, спасибо все равно! Насколько мне известно, такие задачи решаются базовой логикой, методами исключения и т.п. Так что - сам код -это конечно хорошо бы для простоты, но не всегда это возможно. 

 

Я не вру, потому что есть закоментить вывод, то все равно при отпускании кнопок (ползунка) кракозябры выходят. Просто основного значния напряжения не наблюдается.

mixail844
Offline
Зарегистрирован: 30.04.2012

dim3740 пишет:

А! Жаль... это не реально. Ладно, спасибо все равно! Насколько мне известно, такие задачи решаются базовой логикой, методами исключения и т.п. Так что - сам код -это конечно хорошо бы для простоты, но не всегда это возможно. 

метод исключения прост : 

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

- если проблема проявляеться,на заведомо рабочем железе ->проблема в программе

- если проблема не проявляется -> проблема в вашем железе,(но так же может быть и в программе)

b707
Offline
Зарегистрирован: 26.05.2017

dim3740 пишет:

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

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

А без кода это как обучение игре на гитаре без гитары.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Ок. Спасибо, за советы. Попытаюсь сам, если не получится - постараюсь все выложить.... 

mixail844
Offline
Зарегистрирован: 30.04.2012

понимаете,что бы проблему решить ,нужно узнать ее причину.

с ваших слов в первом сообщении,можно "тыкать пальцем в небо"(предлагать варианты решений) очень долго и так и не попасть (не решить).

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Кстати в тему -полезная заметка  DIHALT'а про глюки , если кто ещё не читал. 

to dim3740, если у вас подозрение что ошибка аппаратная, то что вы ждёте от нас? Вы даже  в двух словах не удосужились описать своё устройство.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Еще раз спасибо, за многочисленные попытки решить мю проблему.  Некоторые это делают весьма искренне - им вдвойне!  На вход АЦП подключен резистивный сенсорный датчик, имеющий приличный дребезг.  Это  тот минимум.  Если бы я делал на Атмеге, я бы озадачился опорным напряжением, номером порта, типом АЦП преобразования и т.п. Но тут - ардуино - все должно сделать само.  Что еще... ? Спрашивайте. Порт КОМ выдает управляющие напряжения (в коде) на другое устройство, но в момент прошивки я размыкаю линию. И это неважно, ибо проблема наблюдается даже при COM аудите показателя датчика... Приемник также читает все неустойчиво, отсюда и сабж... мб это кракозябры все и портят.  А может они вообще и не идут в приемник, а проблема в IDE. 

Лезет 127 (7F) 123 (7B) и ровно три пары.

b707
Offline
Зарегистрирован: 26.05.2017

dim3740 пишет:

void readSensors() {  
  int conn = 255; // 254 и при отпущеном
  for (int i = 0; i < NUM_STRINGS - 1; i++) { 
    softPotVals[i] = analogRead(softPotPins[i]);
    softPotVals[i] = map(softPotVals[i], calibrationMin[i], calibrationMax[i], 0, conn);  // сжатие от 0 до 1023 в 0-255
    softPotVals[i] = constrain(softPotVals[i], 0, 255);  // задание границ
    _delay_ms(1); 

    Serial.print("  output = ");
    Serial.println(softPotVals[i]);
    Serial.print('\n');

  }
}

При нажатии всегда бегут строки с состоянием уровня входа, а при отпускании кнопки код цифры прерываются и единожды вылезают в/ кракозябры...  2 или 3 пары 

а если в коде выше выводить в порт не содержимое массива softPotVals[]. а любую константу - крокозябры остаются?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ноги 0 и 1 в проекте не заняты?

хотя. давай начнем с прастова, камень какой?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

dim3740 пишет:

Я не вру, потому что есть закоментить вывод, то все равно при отпускании кнопок (ползунка) кракозябры выходят. Просто основного значния напряжения не наблюдается.

Другими словами, кракозябры появляются даже тогода, когда в принципе отключена всякая передача?

Тогда предположение: при отпускании кнопок в канал связи проникают аппаратные помехи, например, из-за просаживания питания, или из-за достаточно сильной электромагнитной связи (емкостной или индуктивной).

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Если просто константу, то тоже кракозябры есть. Идут НЕ во всех случаях нажатия на сенсор (см рис). Иногда есть перевод строки, иногда нет. Также 3 шт идут после ресета/питания. 

Нано, с 328. Ноги 0 и 1 при рассматриваемом состоянии отключены от нагрузок через переключатель. После отладки, будут подключены, как я писал выше к внешним устройствам. 

Это точно дребезг, причем только при отпускании. Методы известны, но вопрос в том, как понять работу работу "монитора порта " IDE? 

Итак, Serial.println() - передает ASCII. Тогда вопрос: какое же значение надо неумышленно передать в порт, чтоб выдать "кракозябру"??  Я передаю значение от 0 до 255. Там есть еще второй параметр, может он нужен? 

 

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Да, все коды с Serial (На вывод) - комментированы. КЗ при вкл, ресете, при отпускании сенсора. Да, помеха видимо.. буду смотреть осциллом.... Спасибо. Отпишусь. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

dim3740 пишет:

 

Итак, Serial.println() - передает ASCII. Тогда вопрос: какое же значение надо неумышленно передать в порт, чтоб выдать "кракозябру"??  Я передаю значение от 0 до 255. Там есть еще второй параметр, может он нужен? 

А Вы выведите в цикле все 256 значений в два столбика: как десятичное число и как симовл - и узнаете.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

1. Добавил БП + соединение с компом по ЮСБ - результат аналогично.

2. оставил только БП 5в 4 А и без компа (ком порта) - TX вспыхивает при отсутствии кода вывода.

3. !!! у меня это сенсор только барахлит, и в отличие от других - он на A6, а другие на А0---А3. Это важно? 

ПС. Уфф... И он почему-то с внешней подтяжкой и резюком на 750 ом))) Я уже и забыл про это... 

#define PIN_SOFTPOT_4 A6  
pinMode(PIN_SOFTPOT_4, INPUT_PULLUP);
  digitalWrite(PIN_SOFTPOT_4, HIGH);

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

dim3740, А6 и А7 не могут работать как цифровые пины, это чисто аналоговые входы, поэтому делать с ними digitalWrite() бесполезно.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Этот код  могу и убрать. И убрал. Погуглил... пишут, он просто ни на что не влияет. Читаю же я порт А6 как аналоговый. И датчик у меня - это переменное сопртивление. И резистор внешний стоит. А главное - никак не могу найти связи косяков "вывода СОМ порта" и чтения аналоговых пинов. 

Ок. Чуть в сторону вопрос... Пусть А6 и А7 - "сложные" порты:))) .. Есть пин А5, он же I2C. а) этот интерфейс в библе можно переназначить на другой пин? Тогда бы я датчик повесил на А5. б) более неудобно для меня: можно ли программно разнести I2C  и ACD, если их не применять одновременно? 

Это все делать, если все же причина плохого обмена по СОМ *кракозябры и т.п.) именно в применении А6, что не есть факт...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

dim3740, мне кажется, Вы где-то не там роете.

Если у Вас проходят непонятные символы при отсутствии активности COM-порта, значи, у Вас попросту по этим линиям проходят помехи, амплитуда которых больше 2.5 В. Соответственно, надо искать и устранять именно причину этих помех. Это либо просадка питания, либо наводка на длинные провода.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Если отключаю работу таймера Т0, то все нормально. Можете подсказать взаимосвязь?