adnega
Свой-
Постов
3 607 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Весь контент adnega
-
Прошивка последняя. Думаю, вскрыть и поприжать корпус энкодера будет достаточно (компьютерной мышке это помогало). Но нарушать пломбы пока не хотелось бы.
-
Возможно это проблема только моего экземпляра (хотя в инете встречал замечания на эту тему), но при изменении масштаба (что по осям, что по синхронизации) переключит то вверх, то вниз пару раз, то еще вниз. Скорость, угол давления на ручку несколько исправляют ситуацию, но все равно не удобно. Хотя жить можно) По сравнению с моим старым PDS-5022s - день и ночь)
-
А еще глючащие энкодеры и иногда гудящий вентилятор))
-
Черный список поставщиков
adnega ответил Johny тема в Поставщики всего остального
И да, и нет. В нормальных условиях 16В танталовые конденсаторы работают сколь угодно долго при напряжении 13.5В. Но блок питания не простой: если по двух каналам 12В одновременно устроить КЗ, то блок сначала будет потреблять максимальный ток (т.к. каналы переходят в режим стабилизации тока), а затем через таймаут выключатся, т.е. блок начнет потреблять минимальный ток. При таком переходе появляется выброс превышающий 16В. Некоторые танталовые конденсаторы этого не переживают. Хотя если быть абсолютно точным, то при таких перепадах у нас не взорвался ни один конденсатор. Как правило, они взрывались при первом включении, но насколько я понимаю переходный процесс той же природы. -
Черный список поставщиков
adnega ответил Johny тема в Поставщики всего остального
Вы слишком вспыльчивы, как будто Вас это конкретных разработчик чем-то обидел. Квалификация разработчика более чем достаточна. Перед макетированием практически все режимы проверялись моделированием. На первой партии (считай первой итерации) был замечен описанный выше эффект. Когда воспроизвели ситуацию в модельке стало ясно о величине напряжений при переходном процессе. После этого я (программист) поправил софт, так чтобы потребители не отключались от БП одновременно (большой скачок тока) стало уже во много раз лучше, поправили номиналы в цепи обратной связи эффект вообще пропал, но на всякий случай расширили номенклатуру (что я считаю отрицательной операцией) - подняли напряжение конденсатора до 35В. По поводу зарплат: это не такая большая контора, где над одним разработчиком два проверяющих и пять начальников. По квалификации данный разработчик самый компетентный специалист в данной области в данной организации. Проверять некому)) Повторюсь: дело было практически на прототипах. В наличии были только 16В конденсаторы - первые образцы работали как часы во всех режимах. Пришли конденсаторы из новой партии - поимели проблем. Рано или поздно недостаток все равно бы нашли, наблюдая переходные процессы на осциллографе. В общих чертах требования к блоку питания: - входное напряжение от 9В до 40В; - выходное напряжение 5В+-10% 1А; - два канала по 12В+-20% с ограничением по току 400мА (при токе > 450 мА канал отключается); - каналы 12В работают независимо. При аварии напряжение с канала снимается, выдерживается таймаут, напряжение подается снова, если в течении таймаута напряжение на выходе не достигнет определенного уровня процесс повторяется; - без гальваноизоляции; - минимальная цена, минимальный габарит, доставабельная комплектуха (срок поставки 2 недели), минимум моточных, без калибровок/настроек и т.п.; - минимальное время разработки! Тут обычной квалификации понимаете ли не хватает)) Эти контролеры по сей день выпускаются серийно. Блок питания приблизительно 1/6 часть всей начинки. -
Исключения или нет STM32F4?
adnega ответил Zol'berg тема в ARM, 32bit
Может, просто FPU забыли включить перед употреблением? LDR.W R0, =0xE000ED88 LDR R1, [R0] ORR R1, R1, #(0xF << 20) STR R1, [R0] -
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_1; Так делать нельзя! Обсуждалось уже не раз. Подробности есть в документации))
-
Может программа отключает SWD? Попробуйте с ST-LINK v2 завести еще и сигнал RESET на контроллер (на плате SB11 придется выпаять).
-
где узнать хар-ки защитных диодов в микроконтроллере
adnega ответил super_puper тема в ARM
Не далее чем вчера поимел неприятностей с STM32F373CBT6. Вывод PA3 по непонятной мне причине "поджарился" и начал давать утечку на 3В. На выход работал исправно. Заменил - все сразу заработало. -
где узнать хар-ки защитных диодов в микроконтроллере
adnega ответил super_puper тема в ARM
Без конденсатора на этом же выводе с АЦП будет приходить все что угодно, но не данные о напряжении. И, вроде, там смещение в сторону VDD/2 идет (правда не знаю каким током)... А бы не стал рисковать - входы у STM32 очень нежные: чуть что не так - КЗ по питанию. Какая тут экономия? -
Видимо, чтобы "изменчивый" февраль был в конце.
-
Все просто: приведенные формулы годятся для существующего сейчас календаря. Когда календарь поменяют, тогда поменяем и формулы. Привязываться к астрономической точности в рамках решаемой задачи явный перебор. Эдак можно задачу и не решить... ведь в сутках не ровно 24 часа... да и вращается Земля вокруг собственной оси с небольшим снижением оборотов... А если два события происходят в разных точках пространства... или по разные стороны "линии перемены дат"... Условностей много, и это еще без привлечения религий))
-
Возможно, но для 2000 - 2099 годов работает для любой даты. Проверял перебором.
-
А вот для произвольной даты внутри столетия (2000 - 2099 года) Для первой даты: поскольку месяц меньше 3, то у года вычитаем единицу, а месяц увеличиваем на 12. ((2013 - 1) * 1461) / 4 + ((1 + 12) * 306 + 7) / 10 + 21 - 730533 = 734883 + 398 + 21 - 730533 = 4769 В секундах: ((4769 * 24 + 12) * 60 + 34) * 60 + 0 = 412 086 840 Для второй даты: (2013 * 1461) / 4 + (5 * 306 + 7) / 10 + 5 - 730533 = 735248 + 153 + 5 - 730533 = 4873 В секундах: ((4873 * 24 + 17) * 60 + 35) * 60 + 0 = 421 090 500 Разница: 9 003 660
-
А как же вывод десятичных чисел на дисплей? Деление на константу 10. В свое время делал на АСМе получается (частное и остаток) компактно и быстро, но с использованием команды умножения. Функцию деления произвольно числа на произвольное число делал для кр1878ве1, МК51, AVR. Заниматься вычитаниями можно, но зачем, когда можно взять и один раз написать нужную функцию?
-
Если человек использует ассемблер, то эта функция у него уже есть.
-
Я вот так считаю: #include <math.h> double sdlat, sdlon, dist; volatile double lat, clat, lon, clon; clat = 57.60904722 * M_PI / 180.0; clon = 39.82411944 * M_PI / 180.0; lat = 57.6083 * M_PI / 180.0; lon = 39.82488333 * M_PI / 180.0; sdlat = sin((lat - clat) / 2.0); sdlon = sin((lon - clon) / 2.0); dist = 2.0 * asin(sqrt(sdlat * sdlat + cos(clat) * cos(lat) * sdlon * sdlon)) * 6367444.6571225; На Cortex-M4F довольно быстро.
-
C, вставить символ внутри строки
adnega ответил ViKo тема в Программирование
Спасибо! Так работает и в makefile. -
C, вставить символ внутри строки
adnega ответил ViKo тема в Программирование
Если сильных возражений не будет, то хотелось бы в этой теме пролить свет и на такой момент: Задача передать в параметрах компиляции строку. Не получается( Число передать можно. Например, SW_VER_BUILD = 1005 COMPILE_OPTS = $(CPU_OPTS) -fpack-struct -Wpadded -g -O$(OPT) -DSW_VER_BUILD=$(SW_VER_BUILD) А вот строку - никак (и я скорее всего понимаю почему не получается). Но может есть варианты? -
Дело было давно, сейчас тонкостей не помню. Возможно "формула Зеллера" из этой оперы. В самом конце формулы будет вычитание большого числа - это сдвиг начало эпохи. Перевод туда и обратно проверял числительно для всех дат от 2000 до 2099 года. Можете показать проблемное место?
-
Попробуйте типа такого DAC->DHR12L1 = ((WORD)(wav_data[i] + 0x8000));
-
Никто не мешает изменить его на OUT_PP. Вообще разные бывают случаи и управлять NSS "автоматом" можно только в простейших из них. Например, при инициализации SD карт по SPI вначале нужно передать 0xFF 74 раза при NSS=1.
-
А вариант: SSM=1, SSI=1, SSOE=1, NSS управляется через GPIO чем-то не устраивает?
-
Например, так: Начало эпохи 01.01.2000 00:00:00 Работает корректно до 2100 года. //----------------------------------------------------------------------------- //! \fn extern DWORD date_to_int(DWORD y, DWORD m, DWORD d) //! \brief Преобразует дату в число. //! \param y Год. //! \param m Месяц. //! \param d День месяца. //! \return Номер дня по порядку от начала эпохи. //! \sa int_to_date(). //----------------------------------------------------------------------------- extern DWORD date_to_int(DWORD y, DWORD m, DWORD d); //----------------------------------------------------------------------------- //! \fn extern void int_to_date (const DWORD jd, DWORD *y, DWORD *m, DWORD *d) //! \brief Преобразует число в дату. //! \param jd Номер дня по порядку от начала эпохи. //! \param y Указатель на переменную для года. //! \param m Указатель на переменную для месяца. //! \param d Указатель на переменную для дня месяца. //! \sa date_to_int(). //----------------------------------------------------------------------------- extern void int_to_date (const DWORD jd, DWORD *y, DWORD *m, DWORD *d); //----------------------------------------------------------------------------- // int date_to_int(int y, int m, int 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, int *y, int *m, int *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); }