dim3740

Members
  • Публикации

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

  • Посещение

Все публикации пользователя dim3740

  1. Влияние подтяжки на загрузку скетча

    Думаю, мы уже отлично поработали! У меня музыкальные девайсы, там скорость фиксированная 31250 Кц, а требования к качеству очень высоки, потому что нет контроля пакетов. Нет возможности повторов, ведь ноту не будешь играть снова, потому что она дескать не прошла по Варту. Короче, железный варт надо оставлять как основной с макс нагрузкой. Второй - программный. Ну или юзать платки с 2-и более вартами отлично бы, но пока не катит)))) Итог: тестить как распределять RX TX для отладки и потом - для работы.
  2. Собственно, это не подтяжка, а внешний резистор на вход RX При загрузке есть ошибка avrdude: stk500 getsync(): not in sync: reap=0x00 появляется только если вход RX подключен через резистор к 5 вольтам, и соединен с выходом оптрона для чтения приходящих данных ардуинкой Причем ошибка любого скетча.
  3. Можно Ли Hex Файлы Залить В Arduino

    Рукоплещу!!! Вышло через загрузку скаченного hex и через AtmelStudio (что не принципиально)! Теперь есть простор для оптимизации варианта загрузчика, хотя мне это и не нужно... Фузы прошивал вперед, затем уже хэкс.
  4. Можно Ли Hex Файлы Залить В Arduino

    Кварц верный, ведь пока не запорол бут (т.к. выдернул шнур ЮСБ=и питание) при зашивке скетчи все хорошо заливались(((. По шагам: 0) RX TX отсоединил через микропереключатель на плате 1) Плюс подал 5 вольт 2) ЮСБ от компа отсоединил, номер СОМ порта пропал в ИДЕ 3) Жму загрузчик: "Ошибка записи загрузчика" 4) Меняю в ИДЕ программатор на AVR ISP (без МК2!) 5) Сообщение "типа началась запись... минуточку". 6) прошло 3-4 минуты....ошибка прграмматор не отвечает по ангицки((( так мгновенно ошибка же вылазит, будь она неладна((( Выпаивать НАно не хочется, а так есть ролики где их 2 штуки соединяют и перепрошивают бут((
  5. Влияние подтяжки на загрузку скетча

    "Переходы" - это отдельная тема и очень популярная. Прочитал, что программный Уарт делается только на портах с внешним прерыванием.... Их мало, А иные платки кроме Нано - форм-фактор не позволяет. Каждому ТЗ - свои ограничения, в т.ч. и ценовые. Так что, будем выжимать из исходных данных и комплектующих)))
  6. Можно Ли Hex Файлы Залить В Arduino

    Ладно, я признателен за диалог))) Если оставить этот вопрос, не мог бы ты помочь мне все же с заливкой/заменой испорченого бута? У меня фирменный AVR-ISP-MK2, я им кучу всего шью из AVRStudio6... переходник, все на фотке..... проблема м.б. в том что Нано впаяна в плату, но ВСЕ SPI не подключены ни к чему (в отличие от RX)... м.б. релиз IDE важен? СОМ номер порт вроде не нужен... Но я не имею опыта с Ардуино(((( Что предпринять? Был бы очень признателен!
  7. Можно Ли Hex Файлы Залить В Arduino

    Можно все таки уточнить? Итак, пусть некто заимел мою разработку на Ардуино. Я высылаю ему новый релиз прошивки в hex. И что - он не сможет ее никак занести по ЮСБ, т.е. не имея программатора? Есть же куча утилит для этого. Или, первый раз сможет, а второй уже нет, так как затрется бутлодер? Странно как-то.... Я что-то не вкуриваю((((( Ну, или я могу высылать еще и загрузчик. И указывать, что надо и его прошить потом (как вы пишите выше). И так в очередной раз повторять... Так?
  8. Влияние подтяжки на загрузку скетча

    Спасибо. Я посмотрю библу, но не больно верю в бесконфликтность. Пишут, что и 9200 с ошибками. А мне на 32 кГц. Думал хоть один бы аппаратный.)))
  9. Можно Ли Hex Файлы Залить В Arduino

    Нашел примеры как залить Бут из аналогичной платы, попробую... Однако в самой ide должен же быть загрузчик. И якобы его и можно шить через isp, но не получается.... Буду ещё пробовать. И что значит -стирается? Как то же можно hex грузить не стирая Бут, или одновременно вкупе с ним?
  10. Влияние подтяжки на загрузку скетча

    Uart надо 2 минимум, 31025 бит, midi. А так если: черновая отладка через заливку isp, а чистовая - щёлкать тумблером?
  11. Можно Ли Hex Файлы Залить В Arduino

    Про HEX много статей, но редко уточняется, запарывается ли загрузчик при: 1) при утилитах типа ArduinoUploader (т.е. через USB) 2) через ISP . Конкретно: у меня после успешной зашивки через Аплоадер, стала ошибка ( уже через скетч) avrdude: verification error: content mismatch Как исправить? Начинаю курить в сторону "как зашить загрузчик", а главное - 1) объясните , плз, я зашивал файл типа ХХХwith.boatloder.hex, а в папке ТЕМП был еще просто XXX.hex. Какой надо? 2) Что я сделал неверно, конечно..?
  12. Влияние подтяжки на загрузку скетча

    Спасибо. Итак, понял, что все зависит от того, как порты подключены к внешним устройствам... По моему эксперименту, внешняя нагрузка по TX (резистор 400 ом на 5 в в итоге) не мешает программированию. А RX - уже очень критично, все блокируется, хотя там также мой резистор на 750 ом на 5 в... (пока тестю). Юзаю NANO. На схеме вижу один ISP. Шить умею (почти), программатор есть (правда, косяк получил -но это другая тема). Беда в том, что и линии ISP задействованы на периферию - подключен USB HOST mini.
  13. Влияние подтяжки на загрузку скетча

    Очень надо найти решение снова! Понятно, что через TX RX арудинка обменивается с компом при загрузке. Но эти же порты потом нужны для других интерфейсов. Ставить галетный выключатель (даже нужен переключатель!) неудобно. Вопросы: 1) Юзать иные способы заливки скетча осмысленно? 2) Какие требования по внешней нагрузке на линии RX TX не влияют на обмен с компом? Сопротивления.... ставить развязки и как?
  14. Ошибка / пропуски при буферизации данных

    Спасибо. Займусь на выходных...пока занят((( Вот из спецификации по приему МИДИ фрагмент:
  15. Читается порт UART на микроконтроллере Atmega. Применяю типовой алгоритм, но аппаратно вижу ошибки. Что неверное, или отчего они могут быть? unsigned char rx_buffer[128]; //накопительный буфер unsigned char indexW; // индекс при наполнении накопительного буфера unsigned char Count; // счетчик накопительного буфера unsigned char indexR; // индекс при опорожнении накопительного буфера int Max; // максимум до переполнения char tempMessage; // временная переменная int main(void) { Max=100; // пробовал разные while(1) { _delay_us(40); // пробовал от 10 мкс до мс if (Count > 0) { tempMessage=rx_bufferR[indexR]; MesComplite(tempMessage); //тут анализ каждого считанного байта. Это занимает время //поэтому и нужен буфер indexR++; if (indexR>=Max) indexR=0; //Значение Max одинаковое для чтения и записи. Может разные проба? cli(); // для надежности запрет прерывания Count--; sei(); //разрешение if (Count>=Max) Count=0; } } } ISR(USART_RXC_vect) { if (UCSRA & (1<<7)) { rx_buffer[indexW]=UDR; indexW++; if (indexW>=Max) indexW=0; Count++; if (Count>Max) Count=0; } } 1. Задержка нужна в цикле whole? У меня при нуле еще больше ошибок((( 2. Размеры 128 и 100 методом подбора? 3. Инкременты ++ ставить после команды? 4. запреты прерывания нужны? 5. If делаю на "равенство и больше". Верно? 6. Какие есть иные методы повышения надежности, кроме повторной отправки при ошибке?
  16. Ошибка / пропуски при буферизации данных

    Ну это для меня авторитетные они))) Сделал 1, т.е. фактически это один байт стал [0] , тоже работает на вскидку. Сбой, как всегда, после пары минут интенсивной игры...... Это все не дело)))) . я точно понял, что надо писать тестовый генератор (как писал выше), чем сейчас и занимаюсь на C#. Но это не просто, потому что надо тогда и МИДИ входной порт аппаратно задействовать. Но имхо тут все же мне помогут)))) На форуме программистов вообще МК не хотят заниматься((((
  17. Ошибка / пропуски при буферизации данных

    Я не только слизал с весьма авторитетного источника, но и разобрался в меру своего опыта. Ваша мысль про размер буфера понятна и принята. Конечно, если приемник НЕ ГОТОВ по скорости принять инфу, то буфер переполнится. Но... мой приемник - это не более, как... скажем, громкоговоритель. Там нет никаких других процессов, кроме чтения. Синтезатор, который воспроизводит приемный поток свободен... на нем никто не играет (в отличие от синтезатора- источника). Поэтому в МОЕМ случае, имхо, ошибка никак не связана с размером буфера. Я пробовал кольцевой ставить всего 2 (и то успевает) , а пробовал 1000, ибо памяти мне не жалко. Эффект одинаковый. Т.е. сбой есть, но редкий.
  18. Ошибка / пропуски при буферизации данных

    @hasl пример слизал отсюда...http://www.proavr.narod.ru/z5.htm и приложил скрин фрагмента. А синхронизация, имхо, как раз не нужна... на то и буфер. Хотя, думаю, что под синхро вы имели что-то другое. Скажу тогда, что игра на пианино имеет "паузы", и опорожнение буфера будет всегда. Да, код НЕ универсален, но я хочу делать то, что нужно именно в конкретном случае по ТЗ. И еще: как объяснить, что на 99% код работает?
  19. Ошибка / пропуски при буферизации данных

    Это не страшно)) Главное, что Вы не пытаетесь учить меня профкодированию, а согласны подойти к проблеме обобщенно. Я также сейчас выдаю все "от печки", по сути задачи в целом, но и ваши советы проанализирую. Итак. На базе вышеприведенного кода я сделал почти 2 десятка МИДИ устройств за 3 года. И, для любительских задач "1\600" ошибка приемлима. Но, сейчас хотел бы все таки решить этот косяк. Ибо в профоборудовании его не наблюдаю. Кабели те же. Другое железо попробовать? МК есть PIC STM и т.п. Может вообще на AVR нет позитивных результатов ни у кого? Но тогда возникает вопрос об сравнимости "условий" эксперимента. Одно дело компьютерщик-музканант тыкает мышкой на компе, набирая по-нотке. Другое - сцена и игра 10 пальцами, кулаками, и еще и ногами и головой (как я). Тут поток сообщений гораздо выше. Идея: нужно создать тестовый генератор МИДИ последовательностей с регулируемым периодом посыла. И получить функцию "ошибка от периода". А сейчас все идет так: барабаню на клавишах ахинею, - "чем быстрее и больше - тем более вероятна ошибка". И жду, когда она появится.. А она непредсказуема((( Но если появляется - то это конфуз на сцене.... Вот так. Это эмоции))). Далее. Я вообще не могу найти алгоритмов как сделано подобное в проф.девайсах. ПОэтому - все - "от любительского опыта". Потом выложу код, что "разбор" 3-х байтов (определение стартового = "некого "пакета") и прочее я делаю ПОСЛЕ выхода из п\п уарта. Вы пИшите, что можно сделать его в самой п\п. Это мне нужно понять))) Тут надо оценить и вложенность прерываний, что я пока не анализировал. А мысль, что пока попробовать вообще опросом бита регистра - вообще нова до нельзя!
  20. Ошибка / пропуски при буферизации данных

    31250. Прием MIDI сообщений в музыкальном оборудовании. Сбой примерно 1 на сотню нажатых клавиш (т.е. получено около 600 байт) Это методом тыка. Почему то без него сбоев гораздо больше Пакетов нет... все непрерывно. Оперативка, выделение памяти по "правильные" переменные, оптимизация ее - это удел профи, и нехватки ресурсов. У меня примитивная задача, и минимальной атмеги хватит за глаза)))) Зачем экономит то, то не жалко? Да. Но сбой именно где-то в середине и т.п. передачи... Анализ ошибок эффективен, если есть возможность сообщения источнику о ней. У меня сигнал идет от синтезатора. на котором играем музыкант. Естесвенно, он не станет переигрывать сбойную ноту.))) М.б. это действительно, ошибка. Я не проф. программист, а музыкант. Поэтому многое делаю не понимая(((( Про деребезг - это я для примера, и конечно, простых кнопок, а не UART. Это я не подумал. Я предполагал, один UART и писать в три массива. Но, думаю, что ошибки идут чисто аппаратные (фронты сигналов, помехи и т.п.) и ошибка запишется во все три массива. Забыли эту мысль! Но за подробный разбор спасибо! Просто я бы хотел абстрагироваться от мелочей, и понять, нельзя ли кардинально решить задачу иначе? Я сейчас добавлю пост еще одним сообщением.... Вообще имеем черный ящик. На него приходят байты от источника (синтезатор). С него уходят байта на другой синтезатор. В Ч,Я - разные алгоритмы преобразования инфы. Допустим, что преобразования не нужно. Тогда справедлив ли код в обработчике UART, типа: temp=UDR и сразу UDR=temp. Да, он работает. Тут нет буфера, ибо зачем он нужен, если программист знает алгоритм работы девайса в целом и понимает, что НИЧТО не прервет эту отправку СРАЗУ. Ибо нет более высокого уровня задачи, нет падений питания, нет нажатия кнопок, таймеров и т.п. Но... он н универсален, ибо это частный случай. Идем дальше: пусть надо "вклинить" опрос пары кнопок. Размещаем этот опрос в главном цикле. Но опять таки играя музыкант НЕ нажимает эти кнопки. Так может опять буфер не нужен? А когда он нужен? Когда, нужно сделать что-то именно с поступающими байтами. Логика верна? Я не знаю, просто советуюсь....
  21. Ошибка / пропуски при буферизации данных

    Вопрос в том ещё, что скажем есть 2-3 алгоритма устранения дребезга. Неужели нет других алгоритмов и по сабжу? Скажем что если юзать сразу три буферных одномерных массивов и потом сверять их на идентичность данных по одному и тому же индексу?
  22. Замена энкодера типа ЕС11\16. Не работает.

    Запросто, если рассматривать Китайские. В нашем магазине их видов 15 есть, большинство без маркировки... я крутил и так и этак... и люфты и клины, и заедания... А на вид - все одинаковые))) Поэтому и хочу выбрать на Ебее и остановиться на одном виде, благо мне разнообразия не требуется. А бесшелчковый точно есть. Ценник 60 руб в РФ, так что имхо это обычный, механический. Если надо - как-то сфоткаю, или видео могу сделать... Но маркировки нет. Толко цифры 364 на торце. Но работает - отлично, приятно и любо-дорого!))))
  23. Есть механический энкодер типа EC16P24L20T12M7V(15) , который отлично работает. Показания считываются в переменную и выводятся на индикатор. Меняю его на самой плате, не меняя код, на EC11P20L15F7M7H1S(9). Показания теперь только дергаются в пределах единицы при поворотах. Сравниваю: земля у обоих в середине. Первый - бесшелчковый. Это важно? дребезг, имхо, у обоих есть. И размеры 16 больше раза в полтора. Я думаю, что просто некачественный товар, но пробовал ЕС11 две разных модификации, от разных поставщиков - оба глючат одинаково. В чем дело?
  24. Замена энкодера типа ЕС11\16. Не работает.

    Тестил с пяток недорогих энкодеров.... 1) последовательности кодов они выдают разные. Или даташит, или (если нет даже маркировки на корпусе) - то 2 светодиода и эксперимент. Так выявил, что просто был не тот код, т.е. ошибка. 2) Шарик - имхо, зло. Все дело - в психофизических ощущения, что "раз щелкнул", то, якобы, должно измениться и на индикаторе. А на дешевых энкодерах, есть и положения неопределенности, и дребезг, и заедания.... Если безшелковый - то этих проблем нет - крутишь, пока не получишь новое показание. А индикаторы бывают в 99 % устройств. 3) Шарик не везде есть. Есть и плоская пружина, которая одновременно и "щелкает" и создает усилия. Ее не выкинешь. В итоге - буду искать готовые бесшелчковые (один такой есть, но без четкой маркировки опять:) . и куплю горсть сразу....
  25. Замена энкодера типа ЕС11\16. Не работает.

    В моей заводской аудиоьехнике изменение индикатора идет на каждый щелчок. Но, теперь понял, что это не обязательно. ЕС11 цикл делает только за 4 щелчка, что абсолютно не эргономично и неестественно((( . Врашая же бесшелчковый, я "не чувствовал" фазу полного цикла и ориентировался только по индикатору. Что меня устраивало. (Надо просто найти с меньшими габаритами). Вопросы: 1) как найти модели энкодеров, которые на 1 щелчок дают полный цикл изменения 4-х состояний? 2) почему в Инете мало инфы про "бесшелчковые" энкодеры - ведь они удобнее, имхо....