controller_m30
Участник-
Постов
489 -
Зарегистрирован
-
Посещение
Весь контент controller_m30
-
Высотомер на PIC
controller_m30 ответил Pathfinder80 тема в PIC
Так вроде ж есть готовые модули барометров... Прямо вот сейчас юзаю барометр на датчике давления BOSH BMP085. Точность измерения 1 единица = 5 см высоты. Для улучшения точности использовал усреднение последних 32 показаний. Например датчик выдаёт 98355 Pa находясь на столе. Перемещаю датчик на пол (-50см) - показания 98365 Pa (+10 Pa) Перемещаю на стол - снова 98355 Pa Поднимаю над столом на 50см - показания 98345 Pa (-10 Pa) Снова на стол - снова 98355 Pa. Повторяемость показаний хорошая. Датчик стоит в Украине 90 грн (в Космодроме например). Интерфейс I2C. Питание 1.8-3.6v. Ток потребления 12 мка. Датчик использует при расчёте давления также и температуру самого датчика (в нём измеряется и t и давление). Для температуры выдаёт 16 битное значение, и для давления - 19 битное значение. Но! В течение дня давление изменяется на, примерно, 150 Pa (т.е. примерно на 7.5 метров). Конкретно сегодня утром было 98380 Pa, а сейчас вечером 98230 Pa. В мм/рт.столба это будет 737.9мм, и 736.8мм соответственно. Тут видно, что показания гидрометцентра для такой цели не очень годятся, т.к. разница давлений в 1.1мм/рт.столба = 165 Pa = 8,2 метра высоты. По гидрометцентру мерить может и не получиться. Ночью давление больше, а днём меньше. Ещё давление существенно изменяется при перемене погоды (циклоны и антициклоны - разность давлений между ними как перепад сразу за несколько дней). Чтоб использовать датчик как высотомер, нужно знать давление на уровне земли в данный конкретный момент. Т.к. показания изменяются даже при перемене ветра, или заслонении солнышка тучкой. Так что датчиков наверное надо 2. Один на земле, а другим меряем высоту (высчитывая разность между первым и вторым датчиком). -
Переписать содержимое адреса 0xFFFE
controller_m30 ответил d7d1cd тема в MSP430
Вот такой вариант. Отводим для записи адреса перехода какой либо сегмент целиком. В начале эксплуатации он заполнен FFFF. Память заполненная единицами доступна для записи нулей: по-битно, по-байтно, по-словно (стирание сегмента нужно только для перевода 0 в 1). При каждом приходе команды из UARTa, записываем этот присланный вектор в первый свободный адрес в сегменте. Программа выполняемая при RESET будет искать в сегменте тот вектор, после которого есть слово FFFF (т.е. последнюю запись в сегменте). При размере сегмента 512 байт (основная память) - его ресурса без стирания хватит на 256 изменений адреса. А для информационной памяти - на 64 перезаписи. Если планируемое количество изменений адреса меньше чем ресурс сегмента - то этого достаточно. Можно сделать ещё интеллектуальнее, чтоб при ошибке данных из UART не задать случайно такой вектор, который не годится для старта программы. Для этого создаём таблицу с адресами всех возможных векторов старта программы (допустим их 30 штук). А по UART шлём только номер нужного вектора. Этот номер и будем менять. Если векторов всего 30 - то писать нужно только один байт, значит ресурс сегмента возрастает в два раза (для основной памяти ресурс = 512 обновлений, для инф.памяти = 128). Программа начального запуска будет проверять корректность имеющегося номера на <= 30, и если номер последней записи больше - то либо делается переход по последнему корректному вектору из имеющихся, либо на основное тело программы которая выполнялась при первом пуске после программирования. Это по крайней мере гарантирует предсказуемость выполнения программы при любых ошибках данных из UART. А если нужно сделать только одну перезапись стартового адреса (например контроллер выдаётся заказчику для разового использования) - то достаточно в программке выполняемой по RESET задать "вилку" которая будет выполняться в зависимости от значения одного бита(!) Flash памяти. При значении бита =1 - выполняется основная программа, а после стирания бита - напоминалка с просьбой заплатить бабки автору программы В общем, если Вы напишете подробней как часто, и для чего собираетесь менять адрес старта, то можно придумать ещё варианты :rolleyes: -
Переписать содержимое адреса 0xFFFE
controller_m30 ответил d7d1cd тема в MSP430
Ну можно ещё на этапе программирования, по вектору сброса задать адрес на программу, которая будет брать адрес для перехода из сегмента например №50. И при получении по UART команды на перезапись вектора RESET, делать это в 50-ом сегменте. А 0 сегмент не трогать. Последовательность будет такая: 1. По сигналу сброса проц. переходит по адресу взятому из FFFE 2. По этому адресу находится программа берущая адрес из ячейки (например) FC00. Программа берёт адрес и делает переход на основную программу. 3. При получении команды по UART переписывается вектор по адресу FC00. И всё. А 0 сегмент не трогаем. -
STM32L-Discovery подключение периферии
controller_m30 ответил sined тема в ARM
Подключение сенсорного дисплея отличается от подключения НЕ сенсорного - только дополнительными ножками X+,X-,Y+,Y- идущими от сенсорной резистивной плёнки. Эти ножки можно завести на порты контроллера совмещённые с АЦП (такие, чтоб можно было настроить и как Port I/O, и как ADC). Или подключить к микросхеме-контроллеру сенсорных экранов (например TSC2046 или подобной), и по последовательному интерфейсу получать данные о координатах нажатия, а в некоторых контроллерах и силы нажатия на экран. Какой именно сенсорный экран? Можно любой доступный резистивный экран - есть от мобилок: http://gsmserver.com.ua/shop/spares/touchscreens/se/ есть отдельные сенсоры для графических дисплеев широкого применения, для любых экранов сходных по размеру: http://www.kosmodrom.com.ua/prodlist.php?n...anel&page=0 а есть и совмещённые с экраном. Вот например, специально для STM32 TFT-экраны с резистивной сенсорной панелью, и даже на плате есть контроллер для сенсорной панели. http://www.kosmodrom.com.ua/el.php?name=STM-TFTLCD2.8 http://www.kosmodrom.com.ua/el.php?name=STM-TFTLCD3.2 Вот примеры считывания сенсорного экрана с помощью встроенного в контроллер АЦП: http://vrtp.ru/index.php?showtopic=1120&st=1447 Я сам подключал сенсор от Samsung S5230, напрямую к STM32F217 по ссылке выше - и всё именно так и работает. а здесь даже видео есть: http://avrlab.com/index.php?q=node/117 В общем, по моему, по приведённым ссылкам можно составить представление: и как считывать сенсор, и где примерно можно достать, и в составе каких изделий бывают сенсоры. -
MSP430 и I2C. Постоянно - UCBBUSY.
controller_m30 ответил devfom тема в MSP430
Есть ещё предположение, что иногда STOP в конце BusClear может не сработать - если подчинённое устройство выдаст в это время ACK на шину (если ведомый IIC был как Slave Transmitter). Потому, для надёжности я добавил сегодня STOP ещё ДО 10 тактов на линии SCL, а линию SDA использую как открытый коллектор чтоб уменьшить энергопотребление. В итоге всё выглядит так: 1. Бит Pout(SDA)=0 (для будущей имитации открытого коллектора на линии SDA с применением регистра Pdir). 2. Pdir(SCL)=1, Pout(SCL)=0. 3. Pdir(SDA)=1 на линиях SCL и SDA получился ноль - исходная позиция для STOP. 4. Pout(SCL)=1, Pdir(SDA)=0 провёл первый STOP на шине. 5. 10 тактов SCL в последовательности 1,0;1,0;... 1,0 6. Pdir(SDA)=1 на линиях SCL и SDA ноль - исходная позиция для второго STOP. 7. Pout(SCL)=1, Pdir(SDA)=0 провёл второй STOP на шине. 8. Перевод выводов под управление модуля USCI записью 1 в порт PSEL. В таком виде BusClear наверное ещё надёжнее. Если первый STOP придётся на ACK подчинённого, то после 10 тактов на линии SCL, второй STOP попадёт уже в точку :rolleyes: :excl: Вот ещё что... У меня все устройства I2C не запускают никаких действий по сигналу STOP, потому я применяю STOP для BusClear (а одно устройство даже требует STOP для завершения обмена - иначе оно за себя не ручается (барометр BMP085) ). А если на шине I2C есть флешка - то лучше наверное ограничиться классическим BusClear из только из 9 тактов SCL... -
MSP430 и I2C. Постоянно - UCBBUSY.
controller_m30 ответил devfom тема в MSP430
На MSP430F5342 делаю BusClear так... 1. При инициализации портов настраиваю линию порта SCL в out, а SDA в in. 2. Делаю 10 тактов SCL в последовательности 1,0;1,0;... 1,0 3. Перевод SDA в out, уровень SDA=0. 4. Сигнал STOP - SCL=1 и после этого SDA=1 5. Перевод выводов под управление модуля USCI записью 1 в порт PSEL. Все изменения уровней делаются с задержкой чтоб соблюсти скорость не выше 100кГц. Работает такой BusClear у меня уверенно. Проц находится в непрерывном опросе трёх IIC устройств, сброс и снятие питания делается часто (откл. батареек, подключение к программатору и проч.) - шина I2C всё время доступна. -
ищу аудиокодек
controller_m30 ответил addi тема в Компоненты
VS1011E, VS1053B тоже приличные кодеки. И MP3, и WMA, и много чего внутри. Интерфейс SPI. Выход на наушники 30 Ом. VS1011E есть в легкопаябельном корпусе SO28. А VS1053 зато имеет микрофонный и линейный звуковые входы. Кодирует сам звук в ADPCM. В Украине стоят по 7-9 долларов. Вполне себе доступные кодеки. -
FatFS и efsl - одинаковый странный глюк
controller_m30 ответил kan35 тема в ARM
Ну так, на вскидку, могу предложить поэкспериментировать с регистром SDIO_CLKCR - возможно контроллер SDIO быстрее процессора. Если используется DMA - попробовать с настройкой DMA FIFO, может FIFO переполняется и DMA не успевает забрать данные. Может данные пропадают между SDIO и DMA, а может между DMA и SRAM. А если используется FSMC - то может между DMA и FSMC. Но контроллер SDIO похоже вычитывает все данные, т.к. с карты памяти данные идут в сопровождении контрольных сумм, и если бы пропуски были на шине карты то CRC не совпало бы и прием бы остановился. Значит данные теряются после SDIO контроллера (хотя нужно проверить и флаги контроллера SDIO при пропуске данных. В общем идея такая - либо какой-то узел слишком быстрый, либо другой слишком медленный, либо шина связи между узлами занята обменом еще с каким-то устройством. Попробуйте еще поотключать лишние потоки и проверять свою систему отдельно от всего что может мешать. И скорость SDIO поменьше сделать. А насколько совместим этот процессор с Вашим? -
STM32F103.... и SPI3
controller_m30 ответил dorian-kv тема в ARM
Вот тут может быть причина... Посмотрите, в каком режиме функционируют выходы GPIOB - "General purpose output push-pull" или "Alternate function output Push-pull" (то, что у Вас задается командами вида "GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP"). Если при записи данных в "Port output data register (GPIOx_ODR)" эти данные появляются на выходных линиях - значит режим "Alternate function output Push-pull" не включен. А именно этот режим нужен, чтобы использовать SPI, I2C и прочую периферию (для I2C - "Alternate function output Open-drain"). -
STM32 – вопросы – проблемы - решения.
controller_m30 ответил Danis тема в STM
У меня STM32F217 подключен по SWD к плате stm32vldiscovery. 4 провода: GND, Vcc, SWDclk, SWDio. В обвязке процессора: питание 3V с конденсаторами 0,1mf на каждом пине питания, и подтягивающий резистор 10к на Reset (хоть в даташите и указан встроенный подтягивающий резистор на Reset - но на всякий случай поставил внешний). Кварц не используется. На ножке BOOT0 - GND. Больше никаких навесок и подключений на процессоре не делал. Программа ST-LINK_Utility нормально определяет процессор, так-же быстро как и установленный на stm32vldiscovery STM32F100. -
проблема с отладочной платой STM32VLDISCOVERY
controller_m30 ответил viZIer тема в ARM
К сожалению, Firmware Package с сайта STM, я так и не смог запустить в IAR 5.40 (хотя в описании пакета сказано, что подходит версия IAR 5.40 or later...) Но удалось найти в нете HEX файл с миганием светодиодов, а по нему определить - в чем было дело, и почему созданный и проверенный в IAR, ассемблерный файл не хочет работать самостоятельно на STM32VLDiscovery. Оказалось, что при создании ассемблерного проекта IAR создает таблицу векторов, в которой ячейка вектора RESET содержит команду безусловного перехода "B main" - так принято в AT91SAMxxx например. А должно быть (чтоб программа для Cortex запустилась) - абсолютный адрес перехода на старт программы "main", да еще и с младшим битом =1 (означает, что это вектор для режима THUMB). Например, в созданном IAR BIN-файле: адрес: данные: 0x08000000 - 0xB800F000 ;начальное значение указателя стека SP 0x08000004 - 0xB800F000 ;вектор Reset содержит команду "B main" 0x08000008 - 0xxxxxxxxx ;здесь начало программы "main" ---------------------------------------------------------------------------------- а должно быть так: 0x08000000 - 0xB800F000 ;начальное значение указателя стека SP 0x08000004 - 0x08000009 ;вектор Reset содержит адрес начала программы "main", + установленный в 1 младший бит 0x08000008 - 0xxxxxxxxx ;здесь начало программы "main" Если в таблице векторов должны быть еще адреса прерываний, то для Cortex M3 в этих векторах тоже должен быть указан абсолютный адрес подпрограммы обработчика прерывания, и установленный в 1 младший бит - чтоб процессор перешел в режим THUMB. IAR 6.21 из ассемблера создает такой-же, не работающий самостоятельно файл прошивки, хотя успешно отлаживает и прошивает программу в Discovery... Кстати, начальное значение указателя стека, тоже задается IAR-ом не по человечески - то копируется вектор RESET, то задается равным 0. Но из настроек "Linker/Config/Edit" все равно извлекать данные не хочет. -
проблема с отладочной платой STM32VLDISCOVERY
controller_m30 ответил viZIer тема в ARM
Аналогично. Заливаю программой ST-LINK_Utility в Discovery, созданный в IAR-е BIN файл. Утилита говорит ОК. Читаю по адресу 0х08000000 - есть программа, с тем-же кодом что и IAR создал. Но не работает. Если с помощью ST-LINK_Utility выполнить те-же действия с регистрами контроллера, что и залитая программа (включение светодиодов) - то светодиоды загораются. А операций всего три: 1. регистр разрешения тактирования RCC_APB2ENR [0x40021018] --> число 0x00000010 ;тактовый сигнал GPIOC разрешен 2. регистр контроля GPIOC_CRH [0x40011004] --> число 0х44444422 ;ножки GPIOC 8,9 - работают на вывод 3. регистр выходных данных GPIOC_ODR [0x4001100c] --> число 0x00000300 ;синий и зеленый светодиоды загораются Есть подозрение, что скомпилированный на Си файл содержит еще какую-то настройку - потому весь Си-шный интернет успешно мигает светодиодами. Просьба сторонника ассемблера- выложите кто может, залитую в STM32VLDISCOVERY заводскую демо-программку, мигающую светодиодами. Или ссылку, где ее взять можно... -
Заказывал для CC2500 (2,4 Ггц) конденсаторы и индуктивности ВЧ размером 0402, в Farnell. Маркировки на таких деталях быть не может, но прислали то что нужно - приборы запустились с пол-пинка. Правда покупал в Украине и через посредника, но так как мне детали нужны были поштучно - то такой вариант меня устраивал больше всего. У них в разделе http://ru.farnell.com/capacitors_rf есть любые размеры и номиналы. В фильтре ставим галочки и жмем кнопку "Показать результат" В главном списке товаров, в группе Passive components (или так http://ru.farnell.com/passive-components), так-же есть: индуктивности и резисторы - все и в исполнении RF, а также чип-антенны. А в Москве есть вроде прямой отдел продаж от Farnell. Вот страница контактов http://ru.farnell.com/jsp/content/freetoai...act#distributor Чем сам пользовался - то и предложил.
-
Кто заказывал по Farnell?
controller_m30 ответил sysel тема в Поставщики всего остального
Для Украины есть вариант заказа по Farnell - через магазин EVOCOM http://www.evo.net.ua Заказ может быть штучным, от нуля гривен. Цена товара по сравнению с каталогом Farnell - раза в полтора всего. Таможня и прочие ненужные мне приключения - все решает фирма. Заказывал три раза. Первый раз: два MSP430G2452, и один TMP112 - сумма с НДС и доставкой "Ночным экспрессом" - 90 грн. Второй раз: два MSP430G2231, и комплекты обвязки для CC2500 (конденсаторы, индуктивности и резисторы 0402, по 10 или 20 штук - чтоб на десять изделий) в кол-ве 95 штук - сумма с НДС и доставкой "Автолюксом" - 160 грн . Третий (я уже совсем расходился))): один MSP430F5418, комплект обвязки на CC430Fxxx или CC1101 (балуны, чип-антенны, конденсаторы, резисторы, индуктивности (всего 125 штук) - на пять готовых изделий), енкодер, LCD индикатор выводной 7-сегментный миниатюрный, усилитель динамика 8 ом TPA2005 - с НДС и доставкой "Ночным экспрессом" вышло 395 грн. Если бы я ограничился только деталями для радиомодулей, то покупка обошлась бы в 195 грн., но наступающий день рождения подсказал покупать больше Планирую купить EZ430-Chronos 868 mhz. в EVOCOM-e даже с НДС получается дешевле, чем по Украине без НДС-а Может кому пригодится :rolleyes: