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

alexeyv

Участник
  • Постов

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

  • Посещение

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


  1. idle -> pin_X =0 work -> pin_X =1 ставим щуп осцилла на pin_X и смотрим скважность
  2. Не правильно выразился. Есть два типа связывания DLL - статическое и динамическое. Первый используется на этапе компиляции/линковки программы. Например, загружая программу, загрузчик программ операционки сам проверяет связи программы, обновляет указатели на ф-ции и подгружает недостающие DLL и запускает программу. Второй используется на этапе выполнения программы. Он используется, например, при добавлении различных плагинов к программе. Программа в определенном каталоге сканирует файлы DLL и пытается их загрузить, тем самым добавляя новые ф-ции в программу. Здесь, соответственно, программы сама должна позаботится о выгрузке неиспользуемых DLL (то есть программист должен написать соответствующий код) Это статическое связывание:
  3. ТС, уточни! Ты имеешь ввиду статическое связывание ДЛЛ или динамическую загрузку во время работы? При статическом связывании загрузкой/выгрузкой занимается операционка. А при динамической загрузке - программа.
  4. Версия даташита Rev.1.4. 07 April 2008. Раздел 2.2. Самый первый пункт Большего описания нет т.к. этот фильтр не управляемый и идет совместно с аналоговым блоком (АЦП)
  5. У ALC888 АЦП минимум 10 Гц. у ALC889 АЦП от 0Гц. Но у обоих стоит цифровой фильтр от 20 Гц (из datasheet: Integrated high-pass filter to cancel DC offset generated from digital microphone) По ALC1200 ничего не нашел, но пишут что это перелицованный ALC888 Откуда, если там цифровой фильтр для устранения постоянной составляющей?
  6. У того же Sound Forge есть встроенная функция Menu->View->Spectrum Analysis. Чтобы не замарачиваться изучением Matlab/Exel/Mathematica Хорошо,понял. Но еще раз повторяю. У вас 125 семплов в секунду => частота семплирования 125 Гц + 25 семплов => ширина спектральной линии будет 5Гц, а между 5 и 8 всего 3Гц. Для 125Гц необходимо анализировать разом не менее 60 семплов. Но вообще 125Гц - это очень мало, не будет никакой точности. Увеличьте частоту и количество семплов до максимума. З.Ы. Посмотрел файлы - нет там ни 5 ни 8 ни 14 Гц. Только какая-то ~2кГц и ее гармоники. Вы уверены что ваша звуковая карта на ПК пропускает такие низкие частоты?
  7. Алгоритм не смотрел. Но! Насколько я помню, например при частоте выборок 8кГц и 400 выборках для анализа, ширина спектральной линии будет 20Гц. А у Вас частоты 5, 8 и 14 Гц. Следовательно на 48кГц, чтобы различить 5 и 8 Гц необходимое количество выборок ~24кило.
  8. Провода или воздух? Так надо битовую синхронизацию или пакетную или байтовую? еще: Какие скорости? Приемопередатчики одного и второго устройства имеют разные/независимые каналы общения? Или несколько передатчиков в одной передающей среде? Или простоя симплексная передача в одну сторону? Все устройства равнозначные или есть мастер/слейв? Какая характеристика передачи : пиками или непрерывная? и т.д. По проводным СС есть книга С.М.Сухман, А.В.Бернов, Б.В.Шевкопляс "Синхронизация в телекоммуникационных системах"
  9. 1. Витязев В.В. - Цифровые процессоры обработки сигналов TMS320C67x компании Texas Instruments - 2007 2. Солонина А. Улахович Д. Алгоритмы и процессоры цифровой обработки сигналов. 2002 3. Марков С. Цифровые сигнальные процессоры. 1996 4. Куприянов.Матюшкин. ЦОС. Процессоры.Алгоритмы.Средства. 2000 5. Сперанский. Сигнальные Микропроцессоры. 2008 6. Круг. Просессоры ЦОС. TMS320. 2001 7. Бондарев.Трестер. ЦОС. Методы и средства. 2001 8. Анучин.Козазенко. TMS320C24xx. Управление двигателями. 2003 9. Кестер. ЦОС. Analog Device
  10. RTOS + LCD CX65 + Menu

    Можно попробовать еще один вариант. Всегда количество меню делать кратно количеству строк, Но! Названия не используемых пунктов делать " ", а обработчик делать пустым.
  11. там всего ТРИ McASP! А по вашим словам выходит ЧЕТЫРЕ. Что-то у Вас не так У этого DSP 32+8 каналов DMA. Что Вам мешает использовать ШЕСТЬ отдельных каналов для ТРЕХ McASP ( (прием+передача) * 3 = 6)
  12. 1. Начните с обработчика нажатия кнопки и распознавания короткого и длительного нажатия
  13. Проверил в Вин_7 х32. 1. Через контекстное меню не устанавливается - "Выбранный inf-файл не поддерживает этого метода установки". Облом! 2. Идем в Диспетчер устройств -> Действие -> Установить старое устройство, и далее с Мастером двигаемся как в Вин_ХР. В итоге имеем: Видимо нет файлов библиотек и драйверов в комплекте с этим inf-файлом. Но само устройство (файл inf) установилось без проблем. 3. В Вин_7 х64 проделал тоже самое и получил: Здесь нельзя будет установить данное устройство: или не та разрядность (старая 16); или не тот тип драйвера (ссылка на *.sys- файл); также Вин_7 х64 не позволяет устанавливать не подписанные драйвера; также нет самих файлов драйверов
  14. Сброс бита I - это запрещение всех прерываний внутри обработчика прерывания. Если необходимы вложенные прерывания то необходимо целенаправленно разрешить. После выхода из прерывания состояние бита восстанавливается. Так то это одно из начальных знаний о МК.
  15. Встроенные компьютерные порты начинают нумероваться с COM1. Раньше на материнках было два - COM1 и COM2, сейчас ставят только один (и то не всегда) и он всегда COM1. На современных материнках порта COM1 нет на задней панели. если в описании MB порт есть, то он может находится на самой плате в виде 10-ти контактного разъема. Также можно использовать переходники USB<->COM. Их вполне хватает для таких целей. Но их нумерацию ОС выполняет сама и на разных ПК (стационарный или ноутбук) номер может быть различным (просмотр из диспетчера устройств). Поэтому советую в программе задать поле выбора номера порта. Я в своих программах вычитывал все COM-порты в системе из реестра 'HKLM\Hardware\DeviceMap\SerialComm'. потом последовательно пытался открыть и формировал список доступных портов для пользователя и он сам выбирал необходимый. Скорее всего у вас не совпадают скорости на МК и ПК. Сделайте их одинаковыми. Также в настройках порта на ПК необходимо отключать управление потоком.
  16. :08: Добавьте конечный автомат: переход 0->1 - начало отсчета; удержание 1 - инкремент расстояния; переход 1->0 - конец счета.
  17. Игрался с HC-SR04 - та же штука - вид сбоку. Опрос в майне конечно не кошерно. Делал опрос эхо-пина в прерывании таймера, настроенный на 58мкс или его множителях. 58мкс==1см до объекта, точности хватает, получается обычный счетчик в сантиметрах.
  18. +100500 typedef struct __eepRecord__ { unsigned char* Addr; // адрес объекта в EEPROM unsigned char* ram; // адрес объекта в оперативке unsigned int Size; // размер объекта } __attribute__ ((packed)) eepRecord; eepRecord eepBase[100500]; readRecord(eepRecord * Rec) { eepRead(Rec->Addr,Rec->ram,Rec->Size); } writeRecord(eepRecord * Rec) { eepRead(Rec->ram,Rec->Addr,Rec->Size); }
  19. У меня в проекте шесть различных независимых модулей, у каждого от одного до десятка байт конфигурации. Зачем мне их объединять в одну структуру? Так и есть поэтому я объявляю адреса EEPROM так: #define EE_ADR_VAR1 ((void*)0x11) Всегда знаешь где что лежит, независимо от предпочтений компилятора
  20. to demiurg_spb Не во всех, а только в последнем - там действительно да, очепятка, сори. Я и не уточнял возраст этой проблемы. Да, это было давно. Но в свое время я много времени думал почему CPU иногда косячит. у меня было такое: адрес в EEPROM какой-то из диапазона 0x06...0x0А (не помню), и если по этому адресу записать то ли 0x27, то ли 0x2А (не помню), CPU вставал в ступор. причем зависал только на одном значении. За исключением создания структуры, моя логика работы с EEPROM не отличается от логики других форумчан. Я не понимаю зачем создавать структуру? Кстати, у ТС был вопрос как избавиться от второго файла, а не как работать с EEPROM.
  21. Почему же, получится! можете использовать и EEMEM unsigned char eeprom_var1 EEMEM; ...... eeprom_write_byte(eeprom_var1,DEFAUT_VALUE); ..... val1 = eeprom_read_byte(eeprom_var1); Просто я уже привык определять адреса таким образом. При отладке знаешь где посмотреть переменную, не надо лазить по map-файлам. Да и раньше у Atmel'a был один косячок с EEPROM - при расположении переменных по каким-то адресам в EEPROM МК входил в ступор (его победили, но привычка осталась)
  22. Выбираешь один из неиспользуемых адресов в EEPROM и сравниваешь его с 0xFF - если совпало, пишешь туда что-то не равное 0xFF и инициализируешь все остальные переменные, хранящиеся в EEPROM. Например: #define EE_ADR_FLAG ((void*)0x10) unsigned char val = eeprom_read_byte(EE_ADR_FLAG); if(val == 0xFF) { // инициализируем другие переменные // ................ eeprom_write_byte(EE_ADR1,DEF_ADR1); eeprom_write_byte(EE_ADR2,DEF_ADR2); // ................ // изменяем флажок - все записано eeprom_write_byte(EE_ADR_FLAG,0xAA); } // дальше считываем из EEPROM в рабочие переменные в оперативной памяти val1 = eeprom_read_byte(EE_ADR1); val2 = eeprom_read_byte(EE_ADR2);
×
×
  • Создать...