Перейти к содержанию

dim3740

Members
  • Постов

    473
  • Зарегистрирован

  • Посещение

Весь контент dim3740

  1. Спасибо, обдумаю.... Теоретически, мне нужна схемотехника для определения темпа музыкального трека - анализатор пиков, фильтр нижких частот для барабана и прочая лабуда.... На практике проще - я через микрофон записываю синхронно с треком удар палочкой. Получаю МП3 файл. Далее два варианта 1) файл грузится в ЛЮБОЙ мп3 плеер и тот стыкуется с моим "измерителем" 2) файл дается мне, где я могу его нормализоваться, убрать шумы... и поместить в мой некий плеер, который именно согласован с "измерителем".... Вообще вопрос: что есть из аналогов? Типа DMTF но там детектирование частот, а тут проще - только нужно уровень. И как сомнение))) Ведь САМ АЦП по идее имеет и компараторы, и опорные источники, да и программно все можно упростить. Мб. как-то попроще?
  2. dim3740

    Измерить период

    На Атмега8 подаю сигнал (см. эпюры). Могу подавать звуковые пакеты (нижняя строчка), а могу и импульсы (верхняя) - что проще для решения? Также может присутствовать постоянная составляющая, и поэтому ставлю разделительный конденсатор.. Как измерить время T? Его значение может лежать в пределах 200 мс ... 1 сек. Точность можно невысокую, скажем, 10-20 мс. Может быть тригер Шмитта, отлавливающий 250 мв и дающий лог.уровень (можно ссылки на такое?). Затем, вход прерывания, и само измерение (код я напишу без проблем). Нельзя ли через АЦП? Опрос в цикле, запуск измерения... Помешает ли измерению тогда цикл заряд/разряд разд.кондера?
  3. Залез с лупой)))) Понял, что число зубьев всегда 18. Число зубьев в моих ручках 9, т.е. втыкается через одного. Все объяснимо, но кнопки оказались плохого качества, а именно: сами зубья при литье более широкие. Если молотком - то можно забить... навечно))) . Сжатие шлица не помогает. Китайцу предъявлю рекламацию.
  4. Китаец прислал ручки, но они не надеваются. Диаметр 6 мм. Придется "лезть в дырку с микроскопом, а пока....вопросы. 1) бывают ли иные числа зубьев, кроме 18? 2) различаются ли ручки "зубчатые" для энкодеров и потенциометров? 3) может ли быть диаметр типа 6,4 мм, а не 6 мм (где-то читал такое).
  5. Если заменить входной порт на другой - то пакета нет. Этот дергается библиотекой SD card. Но свободный только TX. Как быть? а) лишиться удобной работы с монитором б) резисторы в цепи TX не помогут? в) где в библе искать define - не имея опыта это реально? Порт 10, все что с портом 10 в хелдере (каком?) заменил - не помогло.
  6. Смысл такой: МК1 посылает коды = данные по i2C на МК2. Тот расшифровывает их, и если ОК (совпало с неким) , то посылает подтверждение в виде 0 обратно уже по простому соединению портов. Поэтому WIRE я НЕ могу убрать. Мб в нем все и дело, потому что я плохо понимаю его работу. Кнопки конечно -только инициаторы выполнения алгоритма. В реалии их не будет. Ясно, счас новый скетч сделаю без библ.
  7. на 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 не спасает.
  8. Если разорвать связь, то: МК2 (передатчик) выдает ноль успешно. МК1 приемник держит 1 уверенно. При соединении имеем "пакет". При этом в ПП 2МК (по wirе) где и устанавливается ноль, мы заходим однократно - выводил в монитор проверку. Есть еще: #include <SPI.h> #include <SdFat.h> #include <SdFatUtil.h> #include "SFEMP3Shield.h" #include <Wire.h> И при загрузке скетча не хватает оперативки памяти (85%). Период в пакете примерно по 10 мкс!
  9. 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);// НЕ нашли } } вот только в этом куске формируется состояния для обратной связи.. В процедуру заходим однократно, тут нет никаких пакетов...
  10. осцил показал сумашедший пакет(((
  11. Очень сложно((( Тестер на линию связи. Стрелка на 5 в. Нажали кнопку - стрелка на 3 в. Объяснение 2 вида: 1) имеются, как я писал, выходные сопротивления, образующие делитель напряжения. 2) тестер не "видит" пакеты импульсов - и выдает средние значения. Пакет счас посмотрю осциллом или лог.анализатором. Но уверен, что его нет. М.б. все же дело в питании МК? Счас смоделирую 2 отдельных Нанки и отдельные скетчи.
  12. Убрал. Хотя если порт сделан как вход, то выдача на него 1 не влияет. Ну, виноват, спутал по неопытности с "подтяжкой". Но, проблема все та же.((( Итак, если это пассивная кнопка, то нужен или внешний резистор, или подтянуть Input_PULLOP. Но у нас на вход подключен выходной порт МК, который сам формирует напряжение в линии. И оно или 5 вольт (лог 1) или ... лог 0, но отличный от нуля, в примерно 3 вольта. Как это устранить, чтоб успешно ловить ноль?
  13. Вопрос очень актуальный. Горит))) Рассчитываю на профессиональную и компетентную помощь от знающих ответ форумчан. Может быть как-то задействовать третье состояние, или ловить не ноль, а 1? Внешние компоненты, транзистор решил бы проблему, но в сети куча схем, где соединяют два активных элемента напрямую. Значит, ошибка в коде.
  14. У меня код разве неверный? Он и сделан "как для кнопок". Посмотрите плз, что там ошибочного? Т.е. взводим в единицу, по принципу монтажного Или. Слушаем порт. Если просадка до нуля, то значит изменено состояние. Так? Но просадки не получается, потому что на источнике не простая кнопка, а тоже МК и у него не может быть нулевого сопротивления, как у кнопки.
  15. на схеме это соединение одного порта одного МК с другим портом другого Мк. Видимо надо как-то программно настроить порты. Я умею это делать с пассивными компонентами типа кнопок.... А тут не знаю....
  16. Ни 8, ни 10 пины никакого отношения к I2C не имеют. Я просто не захотел создавать тему типа "2 Нано с межпортовой связью".
  17. с 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 вольта и код срабатывает. Но это же непорядок.... И второй вопрос: питание как на схеме допустимо?
  18. А, теперь понятно! Скетч сканера работает как Мастер. Когда сканируем скажем ЛСД индикатор, то там контроллер уже прошит "слейв кодом" и ответ будет. Если же сканируем голый МК, то там слейв программы нет. Ясно. Спасибо.
  19. Согласен, но вы несомненно сталкивались с скетчем "scaner2C"? Он НЕ требует слейв программы на втором девайсе. Он просто перебирает все возможные аппаратные адреса и когда второе устройство откликается в силу наличия ЖЕЛЕЗНОГО интерфейса wire - то показывает этот адрес. Никакой программы там может и не быть. Вопрос, в том, что так неплохо определяется, скажем, LCD монитор. А у меня вторым девайсом "активный" МК. Может в этом причина?
  20. А4 на А4, и А5 на А5. Земли и питание также соединил. Все в "воздухе", новое, только 4 проводка... Залил в первый скетч "scaner I2C". Во втором что-то было, поэтому залил поочередно а) Блинк б) тот же сканер. Ничего не видит. Подпаял резисторы на 10 ком и на питание. Ноль результата. Со второго первый тоже не видит. Две UNO соединял так же, так вторая плата определяется как #8. А тут аналогчино же должен выдать "заводской" номер? Отдельные скетчи любые заливаются, все работает.
  21. Отсос отличный! Не надо никаких медных оплеток))). Вопрос: как очищать поршень от олова? Что отвинчивается... где...? ссылок в Инете не нашел.
  22. Ну ладно))) Подтвердили, что у меня уже делается и что якобы не должно дать проблем. Я просто не до конца понимаю этих процессов теоретически, потому что не представляю схемотехники выходных каскадов, (точнее их многообразия и эл.параметров) и мне казалось, что любое вмешательство, извините, "в задницу" извне чревато))))
  23. @Alexeyslav Я НЕ писал про нормирование, и качество смешивания мне неважно. В сети много микшеров для качественной музыки. Тогда нужны и ОУ и развязка и прочее. Но иногда нужно "смешать" два "немузыкальных" звука - к примеру DTMF и сирену. Или любой другой сигнал оповещения. Это НЕ музыка, и нужна схема простейшего соединения ВЫХОДОВ 2-источников (один - это МК к тому же) в ОДИН - наушники. Все элементарно. Но! Проблема в рисках повреждения второго источника - который ЗАРАНЕЕ НЕ ИЗВЕСТЕН. Фазы звуков также не предсказуемы. Мощность тоже не известна. Это все равно, что соединить 2 БП параллельно с разными U и не тревожиться по поводу "обратных токов".
×
×
  • Создать...