Jump to content

    

ДЕЙЛ

Участник
  • Content Count

    258
  • Joined

  • Last visited

Everything posted by ДЕЙЛ


  1. а с метрологией как? Я всётки датчик давления на дно поставил бы и всё. Для точности ещё вверху для измерения атмосферного давления. С ультразвуковым имел дело - даже у импортного за 25 тыщ с токовым выходом наблюдались пропадания отражённого сигнала на ёмкости 2 метра глубиной. Можно сделать вот так ещё:
  2. можно и так, но всё же лучше, чем с ультразвуковым изобретать способы фильтрации кучи ложных отражений
  3. А нельзя ли в колодец на дно опустить герметичный датчик давления с помощью той же трубы или тупо привязать к гире 16 кг? Из физики помню формулу P=pgh. Отклонения плотности и температуры мало скажутся на таком способе измерения урорвня. UP: если так уж нужно именно ультразвуковой датчик, то нормальный заводской на такую глубину стоит от 30 тыщ рублей.
  4. Проще у китайцев всё покупать, а самим лес валить японскими бензопилам ;) Так ведь надо когда-то начинать :smile3046: Вот я и хочу понять, насколько это сложно, что нужно освоить и как в общих чертах организовать передачу данных с мопеда на комп.
  5. Хочу применить его для трекера. Один модуль будет в движущемся объекте, второй на столе подключен к компу. На компе будет рисоваться маршрут движения. Вторая функция - удалённая смена прошивки.
  6. На терраэлектронике есть в продаже SIM900R, но там написано, что модуль не поддерживает FTP и HTTP. http://www.terraelectronica.ru/catalog_info.php?CODE=1048498 Можно ли этот модуль применять для передачи данных? Как в общих чертах реализуется передача данных между двумя GSM модулями? Не смсками же передавать.
  7. думаю, что принцип работы загрузчика одинаков, но а AVR его не реализовывал
  8. Недавно делал загрузчик для LPC1778. Основные положения из своего опыта могу написать такие: 1. Бутлоадер и пользовательская программа пишутся независимо и расположены в разных местах флеш-памяти. Начало программы бутлоадера должно располагаться по адресу 0x0000, т.к. после рестарта контроллер начинает свою работу именно с этого адреса. Пользовательская программа может находиться по любому адресу, но не должна затирать код бутлоадера. Если бутлоадер не выходит за пределы области 0x0000 - 0x1000, то пользовательская программа должна начинаться с адреса 0x1000. 2. Компилятор не может знать, что в памяти есть ещё и загрузчик, но в его силах скомпилировать HEX для записи по конкретному адресу, например 0x1000 вместо 0x0000, используемого по умолчанию. Адрес для компиляции где-то в настройках указывается. 3. После аппаратного рестарта контроллер начинает выполнять программу с адреса 0x0000, но у нас начало программы сидит в адресе 0x1000, поэтому контроллер будет в недоумении и дальнейшее его поведение будет непредсказуемым. 4. Запускать пользовательский HEX должен именно бутлоадер (в общем случае командой JMP 0x1000, в моём случае пришлось помнить про указатель на таблицу векторов и про указатель стека) 5. Один из возможных алгоритмов работы бутлоадера: - проверка некоего условия при включении питания (уровень на одной из ног МК или условие таймаута - если в течение какого-то времени после включения данные не начали поступать, то запустить пользовательскую программу; можно предварительно проверить наличие пользовательской программы в памяти по какому-либо критерию) - приём данных по любому доступному интерфейсу с использованием любого алгоритма - проверка правильности принятых данных с помощью пересчёта всяких контрольных сумм - запись полученных данных во флеш - запуск записанной программы с адреса 0x1000. Запись пользовательской программы посредством бутлоадера выполняется с помощью такой же самопальной программы, которая имеет с ним общий язык, т.е. стандартная скачанная заливалка с самопальным загрузчиком работать не будет.
  9. Нашёл удобную программу для общения с GSM-модулем. Мошть ещё кому пригодится. RSTermPlus.rar
  10. Не совсем понятно насчёт задания. Исходные данные ясны, что именно нужно рассчитать? В момент замыкания ключа на катушке будет то же напряжение, что и до замыкания. Конденсатор при подаче на него напряжения в первый момент будет как перемычка.
  11. По молодости-глупости на днях купил пару вот этих плат. http://www.ebay.com/itm/SIM900A-V4-0-Wirel...=item4adb04cfb7 Терзают смутные сомнения, что в России она не совсем праильно будет работать, но эффективные менеджеры всё равно на других сайтах барыжат их за 3-4 цены. Полагаю, что изучать её нужно начинать с перепрошивки. На плате есть вход RX-TX. К нему и нужно подключать провода для смены прошивки? Есть две перемычки, каково их назначение? Сколько вольт питание? Раньше с этим всем дело не имел. Где можно найти схему? UP1: Можно ли на моей плате заменить SIM900A на SIM900R? Распиновка совпадает за исключением нескольких выводов, которые никуда не заведены.
  12. пока ищу, с какой стороны подойти. Как будет выглядеть в терминале такая команда AT+CGDCONT=1,"IP","internet" ?
  13. Хочу освоить работу с данным модулем. Заказал две демо-платы, на них есть разъём питания и разъём RS232, который можно подключить напрямую к COM-порту без переходников и преобразователей. Т.е. хочу перед подключением к МК погонять данный модуль командами с ПК. Есть ли уже готовая программа для работы с этим модулем? Такая, на которой есть отдельные кнопки для отправки заранее заготовленных символьных строк АТ-команд. UP1: накопал вот это: http://www.seeedstudio.com/wiki/GPRS_Shield_V2.0 и сама программа: http://www.seeedstudio.com/wiki/images/b/b2/Sscom32E.zip есть ли что-то подобное, но на русском языке?
  14. Железно заработало :yeah: дело было ещё и в указателе стека. В этом прикреплённом проекте в тестовой программе для вызова главной нужно написать такой код: unsigned int *VTOR; int main() { VTOR = (unsigned int*)0xE000ED08; //адрес данного регистра из хидера *VTOR = 0x7000; //смещение таблицы векторов - из настроек линкера asm ("mov r13, #0x2448"); //запись в регистр стека младших байтов значения указателя стека основной программы, взятого из ячейки с адресом 0x7000; asm ("movt r13, #0x1000"); //запись в регистр стека старших байтов значения указателя стека основной программы, взятого из ячейки с адресом 0x7000; asm ("B 0x8105"); //Безусловный переход по адресу обработчика прерывания сброса, прочитанного из ячейки 0x7002; } Можно было бы поумнее и правильнее код сделать, но для понимания принципа этого хватит. теперь попробую назад в загрузчик из главной программы зайти :bb-offtopic: Зато оперативка экономится, отключил всё ненужное. Ноуту лет 15, в нём есть привод дискет, два разъёма усб, всамделишный LPT и COM-порты ;) Но зато экран большой и нет отвлекающего выхода в тырнет.
  15. Под отладчиком после ассемблерной инструкции перехода программа работает в реальном режиме времени, но её можно остановить и увидеть, что всё крутится в адресах после 7000. Мошть ещё нужно указатель стека на нужное место поставить, как мне посоветовали на другом форуме?
  16. насчёт перескока на 2кб на какой странице мануала написано? Надо попробовать, а симулирование и реальность не всегда совпадают, как я заметил. пробовал разные варианты - записывал 0x380000 и 0x7000, в отладчике наблюдалось число 0xE0. Имею ввиду, что программа из флеши запускается в следующем шаге после строки B 0x8105 при нажатии кнопки F10 в пошаговом режиме отладки, т.е. переходит в то место и запускает программу, а когда отключаю JTAG и нажимаю на сброс, то никаких переходов нет, контроллер не шевелится.
  17. Согласен с перечисленным и у меня это всё предусмотрено, а на схеме показал принцип переноса синусоиды в положительную область для оцифровки. В расходомере питание прецизионное, имеется двойная гальваническая развязка от питающей сети, в металлоискателе реализован динамический режим, т.е. значение нуля постоянно вычисляется по скользящему среднему в течение нескольких секунд, а фиксируются быстрые изменения сигнала. Проблем пока нет.
  18. Почему-то в пашаговом режиме после перехода по адресу программа в другом конце памяти запускается иногда после команды перехода, а после нажатия кнопки сброса никаких движений.
  19. В хидере 35 прерываний и добавим 16 исключений, как написано в руководстве на ядро, получили 51, ближайшая степень двойки - 64, умножаем на 4 и получим 0x100. Этому числу должен быть кратен адрес таблицы векторов, т.е. 0x7000 подходит. Далее читаю описание полей регистра VTOR: Бит 29 TBLBASE - расположение таблицы в оперативке(1) или во флеш(0) Биты 28:7 TBLOFF - Смещение таблицы относительно начала области кода или области ОЗУ,т.е. к 0x7000 добавляем справа 7 нулевых битов и получаем 0x380000 и записываем это число в регистр VTOR. Пока не трогаю записанные данные по адресу 0x7000, т.е. никуда ничего не перемещаю, а пытаюсь маленькой программой запустить большую, расположеннуюв другом месте памяти. И адрес 8105 не меняется в моём случае.
  20. Написал две строки *VTOR = 0x380000; //смещение таблицы относительно начала области кода (0x0000) 0x7000 передвинуты на 7 бит влево, т.к. смещение записывается в битах 28:7 asm ("B 0x8105"); Нивкакую не работает. Что ещё упустил и как правильно написать для перехода к программе, начинающейся с адреса 0x7000?
  21. Она работает в двух приборах - металлоискатель и расходомер при условии, что сигнал находится в линейной области работы операционника и питание не плавает. Очень интересно почитать комментарии по поводу этой схемы. Какие в ней подводные камни?
  22. В каких пределах меняется напряжение? Будем считать, что плюс-минус 20% Я сильно не мудрил бы с делителями, а поставил бы понижающий трансформатор перед входом АЦП, если он биполярный. Если однополярный, то сигнал со вторичной обмотки просуммировал бы с постоянным напряжением и подал бы на АЦП. Если в реальном времени оцифровывать не нужно, т.е. не нужно следить за формой синуса, то можно применить пиковый детектор. Ну и при применении разделительного понижающего трансформатора безопасность повышается - если где-то на плате коротнёт или пробьёт, то прибор не покалечит пользователя. В прилепленном рисунке схема, которую сам реализовывал для такого дела в случае однополярного АЦП(МК Atmega32). Применял двухполярное питание +6В..-6В, от которого питал повторитель. От этого же источника питал стабилизатор +5В, но включал так, как показано на схеме, т.е. схема стабилизатора и МК не использует и не видит среднюю точку. Подстроечный резистор нужно выставить так, чтобы на входе АЦП была половина опорного напряжения при отсутствии сигнала на входе (в моём случае 2.5В было). Размах сигнала должен вписываться в пределы от 0 до опорного(5В), с этим понятно. Регулируется этот размах коэффициентом трансформации или коэффициентом усиления усилителя. Ещё нужно на вход АЦП поставить обычную защиту из двух диодов.
  23. не работало по причине неправильной программы, это я уже выяснил :) Этот вопрос можно пока закрыть. Лучше посоветуйте в теме про стартовый загрузчик.
  24. Насколько помню, в конце сектора имеется какая-то контрольная сумма, поэтому для надёжности его нужно весь в буфер считывать и проверять правильность данных. Этот момент уточни.
  25. Покопался в настройках линкера, нашёл настройки линкера: Config->Edit->Linker configuration file editor->Vector Table-> .intvec start = 0x7000 Config->Edit->Linker configuration file editor->Memory Regions-> ROM = 0x7000 - 0x7FFFF После компилирования и запуска в пошаговом режиме видно, что программа раположена по адресу, начиная с 0x7000, на этом этапе всё работает нормально - данные бегут из UART0. Получается, что программа уже нормально записана в память и работоспособна. Далее пробую написать маленькую программу, расположенную в обычном месте, т.е. в начальном секторе флеш. Пишу такой текст: main() { asm ("B 0x7000"); } Перебрал несколько возможных адресов, но всегда зависает в Hard Fault. В каком известном векторе прерывания находится адрес обработчика? Как узнать этот адрес? Написал маленькую тестовую программу без подключения библиотек и лишних файлов unsigned int *VTOR int main() { VTOR = (unsigned int*)0xE000ED08; //адрес регистра смещения таблицы *VTOR = 0x7000; //смещение адреса таблицы веторов прерываний asm ("B 0x7000"); //адрес перехода } Т.е. 1. Прерывания не разрешал, близко к ним не подходил в этом коде. 2. Переферию не трогал 3. С этим вопрос - как узнать адрес? 4. По какому адресу переходить? Как его узнать? UP1: в прикреплённом архиве проект основного ПО и второй проект тестовой программы, которая должна запускть основное ПО ______________________________________________.rar