Jump to content

dim3740

Members
  • Content Count

    425
  • Joined

  • Last visited

Community Reputation

-4 Плохой

About dim3740

  • Rank
    Постоялец

Информация

  • Город
    Уфа

Электроника

  • Стаж в электронике
    Не связан с электроникой
  • Сфера радиоэлектроники
    Башкортостан

Recent Profile Visitors

3315 profile views
  1. Если заменить входной порт на другой - то пакета нет. Этот дергается библиотекой SD card. Но свободный только TX. Как быть? а) лишиться удобной работы с монитором б) резисторы в цепи TX не помогут? в) где в библе искать define - не имея опыта это реально? Порт 10, все что с портом 10 в хелдере (каком?) заменил - не помогло.
  2. Смысл такой: МК1 посылает коды = данные по i2C на МК2. Тот расшифровывает их, и если ОК (совпало с неким) , то посылает подтверждение в виде 0 обратно уже по простому соединению портов. Поэтому WIRE я НЕ могу убрать. Мб в нем все и дело, потому что я плохо понимаю его работу. Кнопки конечно -только инициаторы выполнения алгоритма. В реалии их не будет. Ясно, счас новый скетч сделаю без библ.
  3. на 2 МК void setup() { pinMode(8, Output); digitalWrite(8,1); pinMode(4, INPUT); // кнопка Wire.begin(20); Wire.onReceive(receiveEvent); } void loop { } void receiveEvent(int howMany) { if (digitalRead(4) == 0) // нажали кнопку на этом МК, а затем с МК1 - (мастера) послали по I2C { digitalWrite(8, 0); // этот порт соединен обратно на МК1 } else { digitalWrite(8, 1); } int NomSong; // этот код нужен чтоб просто опорожнить i2с while (Wire.available()) { NomSong = Wire.read(); } } // все на 1 МК void setup() { Wire.begin(); Wire.setClock(10000); pinMode(10, Input); // порт соединен с выходным портом 8 на МК2 } void loop(){ if (digitalRead(5) == 0) // кнопка на МК1 для посыла по I2C { Wire.beginTransmission(20); // transmit to device #20 Wire.write(55); // отправляем номер (byte) Wire.endTransmission(true); // stop transmitting } int S; if (digitalRead(10)==0) S=1; // S никогда не становится в 1. На 10 порт идет "пакет" с Т порядка 10 мкс, и ни один не вызывает выполнения условия Serial.print("S = "); Serial.print(S); Serial.print("\n"); } Упростил код скетча МК2 на плате. Выкинул все компоненты. Проблема осталась. Или в "железе", или м.б. куча библиотек влияют? И повторяю, на МК1 при компиляции "занято до 1750 байт из 2048"...может работать нестабильно. Что такое howMany? Wire.endTransmission(true)? I2C как-то линию не освобождает? false не спасает.
  4. Если разорвать связь, то: МК2 (передатчик) выдает ноль успешно. МК1 приемник держит 1 уверенно. При соединении имеем "пакет". При этом в ПП 2МК (по wirе) где и устанавливается ноль, мы заходим однократно - выводил в монитор проверку. Есть еще: #include <SPI.h> #include <SdFat.h> #include <SdFatUtil.h> #include "SFEMP3Shield.h" #include <Wire.h> И при загрузке скетча не хватает оперативки памяти (85%). Период в пакете примерно по 10 мкс!
  5. void receiveEvent(int howMany) //при каждой смене трека на 1 карте мы тут { int NomSong; while (Wire.available()) { NomSong = Wire.read(); } est = 0; if (NomSong < 10) // ноль не бывает { Nom = "0" + String(NomSong); } else { Nom = String(NomSong); } SdFile file; char filename[13]; sd.chdir("/", true); sd.vwd()->rewind(); // начало.... vwd - основная рабочая директория while (file.openNext(sd.vwd(), O_READ)) // в цикле поочередно открываем файлы и читаем его имя { file.getFilename(filename); // получили имя файла String naiden = String(filename[0]) + String(filename[1]); // получили два первых символа имени файла if (naiden == Nom) // трек клика есть { est = 1; for (int i = 0; i < 13; i++) { enterFile[i] = filename[i]; } file.close(); digitalWrite(8, 0);// нашли файл !!!!! . это посылка бита готовность return; } else // тут при каждом цикле сканирования { est = 0; digitalWrite(8, 1);// НЕ нашли file.close(); } } // далее вне цикла каталога if (est == 0) { digitalWrite(8, 1);// НЕ нашли } } вот только в этом куске формируется состояния для обратной связи.. В процедуру заходим однократно, тут нет никаких пакетов...
  6. осцил показал сумашедший пакет(((
  7. Очень сложно((( Тестер на линию связи. Стрелка на 5 в. Нажали кнопку - стрелка на 3 в. Объяснение 2 вида: 1) имеются, как я писал, выходные сопротивления, образующие делитель напряжения. 2) тестер не "видит" пакеты импульсов - и выдает средние значения. Пакет счас посмотрю осциллом или лог.анализатором. Но уверен, что его нет. М.б. все же дело в питании МК? Счас смоделирую 2 отдельных Нанки и отдельные скетчи.
  8. Убрал. Хотя если порт сделан как вход, то выдача на него 1 не влияет. Ну, виноват, спутал по неопытности с "подтяжкой". Но, проблема все та же.((( Итак, если это пассивная кнопка, то нужен или внешний резистор, или подтянуть Input_PULLOP. Но у нас на вход подключен выходной порт МК, который сам формирует напряжение в линии. И оно или 5 вольт (лог 1) или ... лог 0, но отличный от нуля, в примерно 3 вольта. Как это устранить, чтоб успешно ловить ноль?
  9. Вопрос очень актуальный. Горит))) Рассчитываю на профессиональную и компетентную помощь от знающих ответ форумчан. Может быть как-то задействовать третье состояние, или ловить не ноль, а 1? Внешние компоненты, транзистор решил бы проблему, но в сети куча схем, где соединяют два активных элемента напрямую. Значит, ошибка в коде.
  10. У меня код разве неверный? Он и сделан "как для кнопок". Посмотрите плз, что там ошибочного? Т.е. взводим в единицу, по принципу монтажного Или. Слушаем порт. Если просадка до нуля, то значит изменено состояние. Так? Но просадки не получается, потому что на источнике не простая кнопка, а тоже МК и у него не может быть нулевого сопротивления, как у кнопки.
  11. на схеме это соединение одного порта одного МК с другим портом другого Мк. Видимо надо как-то программно настроить порты. Я умею это делать с пассивными компонентами типа кнопок.... А тут не знаю....
  12. Ни 8, ни 10 пины никакого отношения к I2C не имеют. Я просто не захотел создавать тему типа "2 Нано с межпортовой связью".
  13. с I2C разобрался. Теперь косяк по межпортовому соединению.. схема условная внизу. Проблема в том, что из-за ненулевого выходного сопротивления на линии связи не могу получить лог.0. на 2 МК - передатчик pinMode(8, Output); digitalWrite(8,1); LOOP if (кнопка нажата) то digitalWrite(8,0); else digitalWrite(8,1); на 1 МК - приемник pinMode(10, Input); // пробовал и Input_PULLOP digital Write(10,1); LOOP if (digitalRead(10)==0) S=1; Замерил напряжение на линии связи. Если кнопка отпущена 5 вольт (лог.ед), а если нажата .. то примерно 3 вольта. Т.е лог. нуль не получается. Если линию посадить на землю резистором порядка 200 ом, то напряжение становится примерно 2 вольта и код срабатывает. Но это же непорядок.... И второй вопрос: питание как на схеме допустимо?
  14. А, теперь понятно! Скетч сканера работает как Мастер. Когда сканируем скажем ЛСД индикатор, то там контроллер уже прошит "слейв кодом" и ответ будет. Если же сканируем голый МК, то там слейв программы нет. Ясно. Спасибо.
×
×
  • Create New...