![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
adnega
-
Постов
3 594 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Сообщения, опубликованные adnega
-
-
Как думаете, будет ли являться плохим тоном если использовать МК на линии 1-wire, а не специальные DS24хх ? Какие могут быть подводные камни использования МК?
Каждый узел сети 1-wire содержит уникальный 64-битный идентификатор (48-бит + CRC).
Как его "придумывать"? Где гарантия, что он будет уникальным?
-
Гнилая всё-таки контора этот КОМПЕЛ, уж скоро год пройдёт, а они всё тянут резину по возврату денег за протухшие танталовые кондёры.
Требуют:
- Принципиальную электрическую схему;
- Методику тестирования;
- Подробное описание отклонений параметров от приведенных в даташите.
- Эксперитизу
Мы им уже кучу актов написали о том, что "отклонение параметров измерить не удалось в виду саморазрушения образцов":)
И пакет со взорванными кондёрами предоставили.
В ЧЁРНЫЙ СПИСОК её однозначно.
1. Практически всю комплектуху для серийных изделий берем в Компэле (про танталы достоверно утверждать не стану) - пока нет проблем.
2. Несколько раз хлопали танталы на выходе DC/DC собственной разработки. Начали копать: разработчик выяснил, что в некоторых режимах выход DC/DC на необходимый уровень (13.5В) несколько превышал 16В, допустимых для установленного танталового конденсатора. Разработчик подкорректировал номиналы + заменили кондер на 35-вольтовый. Тьфу-тьфу. А в начале ситуация была примерно такая же: со старыми ничего, а новые конденсаторы взрываются.
-
-
ну и тут продолжает работать... отцепите её от платы и не должно быть утечки...
Чаще всего прибивает защитные диоды, при этом питание звонится на КЗ.
В некоторых случаях проц продолжает работать... только при этом калится и потребляет сотни мА.
-
Обидно, но бывает (случалось несколько раз, вылечить нельзя, микруху в мусорку). В этом плане с STM32 нужно быть аккуратнее. На LPC24xx отжег несколько ног - все кроме них продолжает работать.
-
И еще раз вопросы:
1. Есть ли к versaloon драйвер под оболочку KEIL, или versaloon делает вид, что он STLink и понимает все, что делает ST-LINKIII-KEIL.dll?
2. Укажите, пожалуйста, путь на прошивку.
3. Если можно, краткое руководство, как прошить STLink процессор, сидящий на ST32Fxxx-Discovery, прошивокй из п.2.
TIA.
Если нужна только прошивка контроллера, то это легко делается вызовом сторонней программы (vsprog.exe).
Насчет отладки под Keil ничего сказать не могу.
Необходимо помнить, что процесс перепрошивки на versaloon необратим.
-
Добавлю, что в STM32F3 есть два калибровочных значения при 30С и 110С (сырые данные АЦП).
Это к вопросу объективности измерений - как и раньше не объективно, но положительная динамика наблюдается))
-
Какая ревизия процессора?
-
Здравствуйте.
Возникла необходимость вывести битовый поток заданной длинны через лапку микросхемы stm32f4xx . длинна импульса бита 50ns(20МГц), просто заводя таймер на 50 нан и в прерывании запись в порт бита не успевает 168 / 20 = 8,9 таков таймера до следующего тика, а само прерывани не менее 12 тактов... нейспевает. какнить с помошью дма можно извернутся?
Можно.
Я делал так:
Генерировал массив отвечающий за установку/сброс битов и по таймеру через DMA производил запись в GPIOx->BSRR.
-
А что - так трудно упаковать номер бита в порту в младшие 5 бит, а номер порта - в старшую часть 32бит?
Пока не выпустили корпуса с 2^32 ног это вроде не должно составлять проблем... :laughing:
Можно даже с помощью макросов сделать это красиво, а-ля:
Сравните с существующей реализацией:
if(con->txena) *con->txena = TX_ON;
и во что она скомпилируется.
Или вот такое:
WORKLED_bit ^= 1;
В этом плане GPIO на bit-band очень удобен.
При этом "цена вопроса" - 6кБ в соответствующем регионе!
-
А смысл работы GPIO в означенном регионе? Если и так чтобы установить/сбросить атомарно - все есть.
А конфигурацию пинов зачем атомарно менять? Я даже такой ситуёвины представить не могу
Написал библиотеку для работы с UART.
При инициализации передаем адрес бита ножки GPIO, отвечающую за передачу в RS-485.
Как быть теперь? Применить свою виртуальную адресацию битов портов?
По библиотеке для этих целей могу "протащить" лишь одну 32-битную переменную.
-
Про фичу ядра согласен. Но в приведенном Вами документе для периферии выделяется Peripheral bit-band region 0x40000000-0x400FFFFF (см. стр. 31). Легко убедится (см. RM для stm32f3xx), что GPIOx туда не попадает, т.к. начинается с 0x48000000. ((
Сам с данной неприятностью столкнулся при использовании "универсальных дефайнов для работы с GPIO"...
-
А, вроде, в новеньких F3 вход-вывод не попадает в bit-band?...
-
Пример, конечно, надуманный, но все же: что будет, если на ножку кнопки подать сигнал частотой под мегагерц? в случае работы по прерыванию и в случае работы по опросу? ;)
По-моему в случае периодического опроса - ничего страшного, а в случае прерываний - ничего хорошего.
-
RCC_APB2ENR бит AFIOEN установлен?
RCC->APB2ENR = (1 << RCC_APB2ENR_IOPAEN) | (1 << RCC_APB2ENR_IOPBEN) | (1 << RCC_APB2ENR_IOPCEN) | (1 << RCC_APB2ENR_IOPDEN) | (1 << RCC_APB2ENR_AFIOEN); AFIO->MAPR = (SW_DP << AFIO_MAPR_SWJ_CFG);
-
Задача - преобразовать количество секунд из RTC в строку даты и времени и обратное преобразование.
Имеются ли в Keil стандартные функции для этих целей? Пример использования, если можно.
Если нет, то поделитесь, пожалуйста, текстом.
//----------------------------------------------------------------------------- // DWORD int_to_time(DWORD x, DWORD *hh, DWORD *mm, DWORD *ss) //----------------------------------------------------------------------------- DWORD int_to_time(DWORD x, DWORD *hh, DWORD *mm, DWORD *ss) { *ss = x % 60; x /= 60; *mm = x % 60; x /= 60; *hh = x % 24; x /= 24; return x; } //----------------------------------------------------------------------------- // DWORD date_to_int(DWORD y, DWORD m, DWORD d) //----------------------------------------------------------------------------- DWORD date_to_int(DWORD y, DWORD m, DWORD d) { if(m < 3) { m += 12; y -= 1; } return ((y * 1461) >> 2) + ((m * 306 + 7) / 10) + d - 730533; } //----------------------------------------------------------------------------- // void int_to_date(DWORD jd, DWORD *y, DWORD *m, DWORD *d) //----------------------------------------------------------------------------- void int_to_date(DWORD jd, DWORD *y, DWORD *m, DWORD *d) { int aa, bb, cc, dd, ee, mm, xx; aa = jd + 2483589; bb = (aa * 4 + 3) / 146097; cc = aa - ((146097 * bb) >> 2); dd = (4 * cc + 3) / 1461; ee = cc - ((1461 * dd) >> 2); mm = ((5 * ee + 2) * 13707) >> 21; *d = ee - ((16043274 * mm + 209716) >> 19) + 1; *m = mm + 3 - 12 * ((mm * 27) >> 8); *y = 100 * bb + dd - 4800 + ((mm * 27) >> 8); }
Корректно работает от 2000 до 2099 годов включительно.
Начало эпохи 01.01.2000 00:00:00.
Примеры
// установка rtc_set_datetime(((date_to_int(dt->YYYY, dt->MM, dt->DD) * 24 + dt->hh) * 60 + dt->mm) * 60 + dt->ss); // считывание if(rtc_get_datetime(&datetime)) { datetime = int_to_time(datetime, &hh, &mm, &ss); int_to_date(datetime, &y, &m, &d); }
-
Если АЦП реально более 8 бит, то можно применить компандирование для расширения динамического диапазона.
-
Задам вопрос иначе: может, у меня просто нет библиотеки, в которой математические функции реализуют hard по-максимому?
-
Такая, что бумага для факсов есть в ближайших канцтоварах. Фоторезист же придётся ждать минимум месяц.
1. В моем городе я знаю по крайне мере два магазина, где пленочный фоторезист в наличии.
2. В рулоне достаточно материала, чтобы пользоваться им полгода-год. В крайнем случае можно месяц и подождать.
3. Про бумагу для факсов лично для меня открытие, всегда выискивали "правильный" журнал для этих целей))
-
Оптимизацию на размер просили?
С вызовом библиотечной функции код этого куска стал меньше?
Так какой же это баг?
Ключа «оптимизация на размер, но догадываться, где будет обида на упавшую скорость» пока нет.
Дык, реализация библиотечного корня судя по листингу два экрана строк.
Может это проблема библиотеки?
Но зачем компилятор использует функцию, а не инструкцию.
По поводу размера: он уменьшился лишь в комплексе, конкретный кусок при этом стал больше.
-
Костылями накройте: #define sqrtf vsqrt
Не-не-не.
Это какая-такая религия запрещает компилятору использовать инструкцию, которая входит в реализацию fpv4-sp-d16.
Можно подумать, что в отличии от "обычных" арифметических действий, которые всегда дадут результат (даже при делении на ноль), извлечение квадратного корня несколько расширяет диапазон результата (особенно для отрицательных аргументов), поэтому должно быть функцией. Или ход мыслей неверный?
-
нивапрос... уже разжовывал ввыше по тексту зачем и почему:
далее вызывайте вместо sqrtf() vsqrt(), fabs можно не трогать - как нистранно компиллер его превращает в vabs.f32.
Так не пойдет. Это все равно, что на асме писать; vsqrt ведь не библиотечная функция.
Не понятно почему при оптимизации Os вызывается библиотечная функция, а при O2 подставляется инструкция FPU.
-
Не, ну так не честно. Я бы на неё не стал закладываться.
Из-за этого: " This section includes experimental options that may produce broken code."?
-
CFLAGS += -Wdouble-promotion
чтобы компилятор поругался на даблы там где их не должно быть...
Отличнейшая опция!
Странно, при -Os итерация порядка 1700 тактов и листинг:
dist = 2.0f * asinf(sqrtf(sdlat * sdlat + cosf(clat) * cosf(lat) * sdlon * sdlon)) * 6367444.6571225f; 80015c4: ed9d 0a07 vldr s0, [sp, #28] 80015c8: f000 f856 bl 8001678 <cosf> 80015cc: eef0 aa40 vmov.f32 s21, s0 80015d0: ed9d 0a06 vldr s0, [sp, #24] 80015d4: f000 f850 bl 8001678 <cosf> 80015d8: ee2a 0a80 vmul.f32 s0, s21, s0 80015dc: ee20 0a09 vmul.f32 s0, s0, s18 80015e0: ee20 0a09 vmul.f32 s0, s0, s18 80015e4: eea8 0aa8 vfma.f32 s0, s17, s17 80015e8: f000 f920 bl 800182c <sqrtf> 80015ec: f000 f8c6 bl 800177c <asinf>
А при -O2 итерация 1048 тактов и задействуется vsqrt
dist = 2.0f * asinf(sqrtf(sdlat * sdlat + cosf(clat) * cosf(lat) * sdlon * sdlon)) * 6367444.6571225f; 8001bae: ed9d 0a07 vldr s0, [sp, #28] 8001bb2: f000 f85f bl 8001c74 <cosf> 8001bb6: eeb0 aa40 vmov.f32 s20, s0 8001bba: ed9d 0a06 vldr s0, [sp, #24] 8001bbe: f000 f859 bl 8001c74 <cosf> 8001bc2: ee2a 0a00 vmul.f32 s0, s20, s0 8001bc6: ee60 7a28 vmul.f32 s15, s0, s17 8001bca: ee67 7aa8 vmul.f32 s15, s15, s17 8001bce: eee8 7a08 vfma.f32 s15, s16, s16 8001bd2: eeb1 0ae7 vsqrt.f32 s0, s15 8001bd6: eeb4 0a40 vcmp.f32 s0, s0 8001bda: eef1 fa10 vmrs APSR_nzcv, fpscr 8001bde: d13f bne.n 8001c60 <main+0x1cc> 8001be0: f000 f8ca bl 8001d78 <asinf>
При этом размер кода отличается всего на 32 байта, а производительность более чем на 38%
1-wire Сдвоенный адресуемый ключ DS2406
в В помощь начинающему
Опубликовано · Пожаловаться
Нет. Нужна гарантия, что среди Ваших изделий не будет повторов, и не будет повторов с другими 1-wire устройствами.
Часть GUIDа не есть уникальное число.
Как генерировать идентификатор в устройстве? Идентификатор включать в прошивку? 1000 устройств и 1000 уникальных прошивок?!