Нано 3 - эффект разной земли

at0mix
at0mix аватар
Offline
Зарегистрирован: 23.11.2015

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

Первая пошла без проблем. Потом человек ушел в отпуск, поручил другому.

И тут пошли ЧУДЕСА!

В схеме есть 4-секционный 7-сегментный LED-индикатор на 1637.

Подключаю к макетке - не работает.

Загружаю скетч - начинает работать.

Отключаю USB, включаю по новой - не работает. Загружаю скетч - опять работает.

В результате выяснил что на нане земля на 4 ноге и на 29. А чел одну ногу не пропаял. После пропая дорогвсе заработало.

Вот вопрос - почему при старте земли разделены а после заливки скетча объедены?

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

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

at0mix
at0mix аватар
Offline
Зарегистрирован: 23.11.2015

В том то и вопрос что ничего не шевелилось! Т.е. именно после заливки скетча земля на индикаторе появлялась.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

at0mix пишет:

В том то и вопрос что ничего не шевелилось! Т.е. именно после заливки скетча земля на индикаторе появлялась.

забей - было что-то непропаяно, поэтому что-то работало странно.

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

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

at0mix пишет:

В том то и вопрос что ничего не шевелилось! Т.е. именно после заливки скетча земля на индикаторе появлялась.

Разобраться с тем, что вытворяет софт дуси мало вероятно - как оно порты крутит, как регистры упраления. Может быть, при определённой нагрузке земля через цепи внутри кристалла проклёвывается... Примерно, как часто на ВАЗ 2109 задние фонари из-за отгнивания земли забавно начинают работать. :)

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

at0mix пишет:

В том то и вопрос что ничего не шевелилось! Т.е. именно после заливки скетча земля на индикаторе появлялась.


Я сталкивался со схемным решением для промышленного сварочного источника, когда сигнал управления 0 - 10 В проходил через межплатный разъём. Чтобы обеспечить прохождение сигнала малого уровня через тот же контакт разъема по незасимимому контуру пускали ток в 10 мА при напряжении в несколько десятков Вольт. Вспомогательный ток "разбивал" окисную пленку на разъеме, и даже малый сигнал управления проходил беспрепятственно. В Вашем случае работа скетча могла менять параметры цепи так, что "пробивалось" переходное сопротивление "сопливого" контакта и цепь становилась рабочей. Пропайка контакта прекратила всю эту "хиромантию".

at0mix
at0mix аватар
Offline
Зарегистрирован: 23.11.2015

вечером проверю еще раз на разных контроллерах и платах.

те на разных контроллерах получилось:

если ноги земли соединены перемычкой - индикатор работает.

если на землю идет только одна нога - индикатор не работает.....

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

at0mix пишет:

вечером проверю еще раз на разных контроллерах и платах.

Если вопрос так зацепил, то Вы приведите полную схему устройства. Так будет конкретней, а то мы пока обсуждаем "в принципе", а надо - "в кожухе". :))

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

at0mix пишет:

вечером проверю еще раз на разных контроллерах и платах.

те на разных контроллерах получилось:

если ноги земли соединены перемычкой - индикатор работает.

если на землю идет только одна нога - индикатор не работает.....

Вчера ковырял LCD 5110... Для вывода диагностики... Случайно дернул на макетке у него питание, он работает как ничего не случилось. Потом дёрнул ещё землю - всё равно работает! Задумался чем эта собака питается... :)))

А вот CE и Reset с ног проца отобрать и железно подать почему-то не получилось... 

at0mix
at0mix аватар
Offline
Зарегистрирован: 23.11.2015

Возобновлю тему по новым обстоятельствам.

Пока причина совершенно непонятна - и даже не понимаю куда копать.

А суть проблемы следующая:

- если загрузить скетч по шнурку - то он запускается моментом.

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

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

// подключение библиотек
#include <TM1637.h>// индикатор 4 секции 7сегментов
#include <OneWire.h>// считка ТМ ключей 
#include <EEPROM.h>// работа с паматью

// назначение пинов
#define TMread 2//TM key pin
#define LEDclk 3//LED 1637 pin CLK
#define LEDdio 4//LED 1637 pin DIO

#define SoundPin 9//Звук в динамик

#define pinKBx1 6 // 1 столбец кнопок
#define pinKBx2 7 // 2 столбец кнопок
#define pinKBx3 8 // 3 столбец кнопок
#define pinKBy1 14 // 1 строка кнопок
#define pinKBy2 15 // 2 строка кнопок
#define pinKBy3 16 // 3 строка кнопок
#define pinKBy4 17 // 4 строка кнопок
//   x1  x2  x3
//y1  1   2   3
//y2  4   5   6
//y3  7   8   9
//y4  A   B   C

#define Battary 21 // измерение напряги аккма
//long int KBatt=1453; // Коэффициент для измерения напряги аккума 1
//long int KBatt=1442; // Коэффициент для измерения напряги аккума 2
//long int KBatt=1428; // Коэффициент для измерения напряги аккума 3
//long int KBatt=1447; // Коэффициент для измерения напряги аккума 4
//long int KBatt=1425; // Коэффициент для измерения напряги аккума 5
//long int KBatt=1000; // Коэффициент для измерения напряги аккума 6
long int KBatt=1000; // Коэффициент для измерения напряги теста

const long int TimeXX=60000;//делитель миллисекунд
int  TimeCH=1; //минуты для ЧЕМОДАНА
byte Seg_ON=0; //двоеточие на индикаторе
byte TMbuffer[8];// буфер приема
byte TMlistKEY[20][8];// 5 ключей админских и 15 игровых ключей
byte PrevCMD=0;// Предыдущая команда
byte NextCMD=0;// следующая команда
byte ChCMD=0;// буфер считывания команды
byte SetMode=0;// режим - 0 не установлен, 1 кнопки, 2 ключи
byte SetTimerMode=1;// режим - 0 таймер выключен, 1 таймер включен
unsigned long buffMillis=0;// буфер для расчетов
unsigned long PrevMillis=0;// предыдущее время в миилсах
unsigned long NextMillis=0;// следующее время в миилсах
unsigned long CMDmillis[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};// следующее время в миилсах

byte buffTM[8];// буфер приема ТМ-ключей

byte ChemodanKey[4]={0,0,0,0};

TM1637 tm1637(LEDclk,LEDdio);
OneWire ds(TMread); // выход считывателя на пин TMread

void setup() // стартовая инициализация
{
                      Serial.begin(9600); //для отладки
                      Serial.println("Start..."); //для отладки

    //SirenaOUT();
    /* Инициализация структур */    
    pinMode(pinKBx1, INPUT);           // назначить порт ввода X1
    digitalWrite(pinKBx1, HIGH);       // включить подтягивающий резистор
    pinMode(pinKBx2, INPUT);           // назначить порт ввода X2
    digitalWrite(pinKBx2, HIGH);       // включить подтягивающий резистор
    pinMode(pinKBx3, INPUT);           // назначить порт ввода X3
    digitalWrite(pinKBx3, HIGH);       // включить подтягивающий резистор
    pinMode(pinKBy1, OUTPUT);          // назначить порт вывода Y1
    pinMode(pinKBy2, OUTPUT);          // назначить порт вывода Y2
    pinMode(pinKBy3, OUTPUT);          // назначить порт вывода Y3
    pinMode(pinKBy4, OUTPUT);          // назначить порт вывода Y4

    pinMode(Battary, INPUT);          // назначить порт вывода A7
    
    tm1637.init();
    tm1637.set(5);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
    tm1637.display(0,0); //в левом сегменте 0 остальные потушены

    // Читаем с хранилища ключи - 20 шт 5 админских 0-4 и 15 игровых 5-20
    for(byte TM1  = 0; TM1 < 20; TM1++)
    {
      for(byte TM2 = 0; TM2 < 8; TM2++)
      {
          TMlistKEY[TM1][TM2]=EEPROM.read(TM1*8+TM2);
      }
    }
}

 

at0mix
at0mix аватар
Offline
Зарегистрирован: 23.11.2015

Блин ну ГРАБЛИ!

Похоже если на ПК запущен ide - загрузчик не запускается пока не получит скетч %(

и похоже если в скетче есть сериал-вывод - то так же загрузчик не запускает сетап пока не увидит монитор %(

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Простите, но Вы сейчас ерунду написали. Загрузчик не знает, запущена IDE на ПК или нет. И он точно не ждёт открытия монитора (терминала). При открытии монитора разве что ресет микроконтроллера происходит. Загрузчик не может "видеть" приложения на ПК.

at0mix
at0mix аватар
Offline
Зарегистрирован: 23.11.2015

тем не менее факт - скетч в контроллере не входит в сетап если подключен к компу и запущен ide. стоит закрыть ide - стартует скетч. впрочем нужно еще несколько экспериментов - но уже не сегодня......

at0mix
at0mix аватар
Offline
Зарегистрирован: 23.11.2015

Для чистоты эксперимента проверяю.

1. IDE включен, терминал включен, в сетапе есть сериал-инит и сериал-принт:

- загрузка скетча, МК работает

- дергаю питание

- в сетап не заходит

- выключил и включил терминал - сработало

- выключил терминал - мигание 13 ногой - МК не работает

-передернул питание

- МК не грузится

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

- выключил терминал - усе, мк висит

- выключил IDE - загрузился МК, работает

- подключил внешние 12в - работает

2. Заккментил сериал-инит и сериал принт

- передернул питание - сетап не пошел.

- вклюил терминал - работает

- выключил терминал - бутлоадер

- - выключил ide - работает

- передернул питание - при выключенном ide запустился

- на внешнем 12в запустился......

я в непонятках.