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

vladyka1701

Members
  • Постов

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

  • Посещение

Информация

  • Пол
    Мужчина

Электроника

  • Стаж в электронике
    3-5 лет
  • Сфера радиоэлектроники
    Аудио
  • Оборудование
    Lukey 852D+FAN, M92A, Siglent SDS1102CML, Siglent SDG1025, Siglent SPD3303X-E.

Посетители профиля

3 907 просмотров профиля

Достижения vladyka1701

Знаток

Знаток (7/14)

  • Преданный
  • 10 постов на форуме
  • Пост-машина Редкий
  • Неделя на форуме
  • Месяц на форуме

Последние значки

5

Репутация

  1. Важное замечание по поводу Всё таки не бред, я немного подумал: у меня ведь DMA работает циклически, вот и получается после длинного импульса не 5 коротких, а 9, потому что данные пошли по кругу. (На самом деле получается 8 коротких, но если поменять 15 на, например, 11, чтобы не возникало дублирования, то всё хорошо. Если взять самый первый массив с залипанием, то получим лишь 8 коротких отсчётов. есть подозрение, что тот, который отмечен знаком вопроса, "по инерции" получает скважность 15 и становится длинным, хотя он должен быть коротким. Т.е. это не "15" повторяется два раза (и потом идут 9 коротких отсчётов), а следующий за "15" отсчёт не успевает получить новое значение "5" и остаётся с предыдущим. Не знаю, как это по-человечески объяснить. Мне кажется, DMA после значения "15" послал пятёрку, а вот таймер её почему-то решил игнорировать и оставить значение "15", и только после ещё одного запроса DMA таки поменял значение CCR. Надеюсь, сумел донести мысль.
  2. Уверен. Вот, например, пара доказательств с других сайтов Ну и вроде как логично, контроллер же 32 битный, значит и слова таковые. Off За совет благодарен, я планирую перебраться на CMSIS, однако мой опыт с STM ещё не настолько большой и небольшая помощь от предварительно сгенерированного кода пока не помешает. С LL да, там 90% это функции из одной строки, но мне лично нравится такая простота (не то, что хал, где одна функция обвешана кучей проверок и ссылок на другие библиотеки) и, повторюсь, ИМХО, самодокументируемость. Запомнил функции и гоняешь туда-сюда, можно лазить в RM не каждый раз, а через раз .
  3. Вы правы, я не заметил этого, смотрел на другое и упустил ещё ошибку. Попробовал ввести массив из 9 вместо 10 значений {3, 5, 7, 9, 11, 9, 7, 5, 3} и всё отобразилось адекватно, но стоило сделать 10 элементов, как выходной сигнал снова перестал соответствовать реальности. Получается, DMA затыкается на длительных последовательностях? Не уверен, как можно объяснить такое поведение. 32 бита, я использую TIM5 с 32 битными регистрами, поэтому WORD. PDATA -- это размер блоков памяти периферии. Off: Честно, никогда не понимал критики библиотек, это ведь просто инструмент со своими плюсами и минусами, главное -- понимание того, что должно получиться. Вот на чём Вы предлагаете писать? Всего-то в живых остался HAL да LL, остальное, что не поддерживается ST я даже не рассматриваю. Какая библиотека не будет являться шлаком? P.s. ну и LL -- по сути, просто набор макросов, который мне, например, помогает чуть быстрее ориентироваться в коде из-за легко запоминаемых названий функций, а не MODULE->REG, но это тоже разговор о вкусах, не пытаюсь выставить свою точку зрения единственно верной
  4. Приветствую. Разбираюсь с контроллером STM32F411, захотел сделать свою реализацию библиотеки для управления светодиодами WS2812b. Вкратце, кто про них не знает: цвет в них кодируется 24 битами (по 8 на цвет), а сами единицы и нули кодируются соотношением длительностей высокого и низкого уровней. Картинку привёл для наглядности. Идея не новая: настроить таймер в режим ШИМ на частоту 800 кГц и с помощью DMA "скармливать" ему новые значения для регистра совпадения. Согласно reference manual и примерам от ST был сделан проект, код которого я представлю чуть ниже. Его параметры: Частота тактирования МК 16 МГц, таймер в режиме Fast PWM, PSC = 0, ARR = 19, Выход на максимальной скорости, DMA MemToPeriph High priority Circular. Я задал тестовый массив и столкнулся с такой проблемой: Если загружать маленькие значения в регистр сравнения (0-13), то всё работает отлично и скважность меняется на лету, однако при крупных значениях, например 14 и далее (скважность примерно 60% и больше), периоды начинают дублироваться. Как я не игрался с режимами ШИМ и скоростью выводов, это "залипание" побороть не удалось. Так оно выглядит графически: Задан массив {5, 5, 5, 5, 15, 5, 5, 5, 5, 5}, контроллер выдаёт следующее, т.е. значение "15" продублировалось. Прошу подсказать, с чем может быть связано столь странное поведение связки таймера и DMA и как можно заставить таймер нормально выдавать коэффициент заполнения более 70%. В интернете похожих тем не удалось найти. Внизу прилагаю куски кода, дописанные к сгенерированному CubeMX. Кому не удобно читать кусочками, во вложениях есть полный main.c. Написан с применением LL, готов разъяснить неясные команды и выслать проект CubeMX по необходимости. Заранее благодарен. uint32_t timdata[10] = {5, 5, 5, 5, 15, 5, 5, 5, 5, 5}; //Массив данных //ДОнастройка таймера LL_TIM_EnableDMAReq_CC1(TIM5); LL_TIM_EnableDMAReq_UPDATE(TIM5); // Разрешить запросы к DMA LL_TIM_CC_EnableChannel(TIM5, LL_TIM_CHANNEL_CH1); LL_TIM_EnableAllOutputs(TIM5); LL_TIM_EnableIT_CC1(TIM5); LL_TIM_EnableIT_UPDATE(TIM5); LL_TIM_EnableCounter(TIM5); // Включение ШИМ на ножке, разрешение прерываний и запуск счетчика LL_TIM_GenerateEvent_UPDATE(TIM5); // Из примера ST // Настройка DMA //CubeMX LL_DMA_SetChannelSelection(DMA1, LL_DMA_STREAM_2, LL_DMA_CHANNEL_6); LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_STREAM_2, LL_DMA_DIRECTION_MEMORY_TO_PERIPH); LL_DMA_SetStreamPriorityLevel(DMA1, LL_DMA_STREAM_2, LL_DMA_PRIORITY_HIGH); LL_DMA_SetMode(DMA1, LL_DMA_STREAM_2, LL_DMA_MODE_CIRCULAR); LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_STREAM_2, LL_DMA_PERIPH_NOINCREMENT); LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_STREAM_2, LL_DMA_MEMORY_INCREMENT); LL_DMA_SetPeriphSize(DMA1, LL_DMA_STREAM_2, LL_DMA_PDATAALIGN_WORD); LL_DMA_SetMemorySize(DMA1, LL_DMA_STREAM_2, LL_DMA_MDATAALIGN_WORD); LL_DMA_DisableFifoMode(DMA1, LL_DMA_STREAM_2); //Пользовательский код DMA1_Stream2->PAR = (uint32_t)&(TIM5->CCR1); //Адрес регистра СС1 DMA1_Stream2->M0AR = (uint32_t)&timdata; //Адрес массива LL_DMA_SetDataLength(DMA1, LL_DMA_STREAM_2, 10); //Размер массива LL_DMA_EnableIT_TC(DMA1, LL_DMA_STREAM_2); //Разрешение прерываний (необязательно) LL_DMA_EnableIT_TE(DMA1, LL_DMA_STREAM_2); LL_DMA_EnableStream(DMA1, LL_DMA_STREAM_2); // Включить DMA main.c
  5. @Vslz Понял, значит, точно недостоверную информацию нашёл. Сказать ничего не могу, как эта карта ко мне попала -- такое напряжение там и было. ВОзможно, разработчики поигрались, а может и ещё одна неисправность @Armenn Не знаю, я же говорю: мне практически ничего не видно, что там происходит на экране. Без диска компьютер, я полагаю, ждёт загрузочного устройства (чёрный экран с текстом, наверное insert boot device). Биос открывается, но опять же, что там написано -- я не могу углядеть. Фото в данный у меня сделать нет возможности, поэтому вот очень похожий пример. Природа артефактов сильно отличается, но я это к тому, что действую почти вслепую
  6. Ну я где-то видел, что допуски лежат в пределах 1.8-2.0В, не берусь утверждать, что это чистая правда. В любом случае, дальше я уж точно не вижу смысла копаться в этой карте -- поднять получилось: уже восхитительно, а выискивать ещё и такие мелочи... Учитывая, что карта начала выдавать этот мусор после прогрева, я считаю, что тут однозначный отвал ГП
  7. @Armenn FF показывает, система загружается, можно видеть, что какое-то движение там происходит, но экран весь "моросит" и присутствует куча полос.
  8. Всех ещё раз благодарю за помощь, после довольно продолжительных плясок вокруг питания и прогрева чипа на ИК станции карта таки ожила и дала запуститься компьютеру! Из бочки дёгтя -- артефакты такие, что невозможно углядеть рабочий стол, так что тут только экономически нецелесообразная замена графического процессора . Всё-равно очень рад, проделана большая работа, да и я теперь знаю намного больше. Занятный получился ремонт, жаль, что воспользоваться картой нормально не выйдет
  9. @Romanchek82 Я тему создавал не для того, чтобы вас развлекать. Если вам неинтересно -- всегда есть сотни других тем в различных разделах, где дела идут более живо. Я в данный момент общаюсь с несколькими людьми, которые мне помогают, а их, между прочим, никто не заставляет, значит, тема живая. За "смешным" всегда можно обратиться в "юмор" и им подобные темы. Я в который раз акцентирую внимание на следующих вещах: Форум сделан, чтобы на нём общались все и обо всём в рамках определённой темы Оффтопа и прочего в этой теме нет, общаемся строго по карте Во время этого "страдания хернёй" я получил очень много опыта в диагностике периферии, который буду применять и в дальнейшем. Для вас тут ничего нового? Прекрасно понимаю. А я вот учусь и с удовольствием перенимаю опыт других участников форума, которые совершенно бесплатно делятся своими знаниями, а не предлагают в который раз просто всё бросить, купить рабочую карту и не развиваться в этом направлении @Виталий Белый Если заработает, то я "Доношу" её до момента пополнения финансов и выкину нафиК . Хватит мне возни с этим радеоновским счастьем, не думал, что такая болезная карта достанется Вот-вот, "как только, так сразу". Возьму что-нибудь, способное без просадок потянуть классику игростроя нулевых и буду радоваться жизни
  10. Вас понял, тогда завтра попробую аккуратненько пожарить кристалл
  11. @Armenn Я проверил ту троицу: подозрительный транзистор оказался абсолютно нормальным, а один из тех, что стоял рядом, был пробит. Заменил его на 2N7002, он по всем параметрам, кроме тока, более-менее подходит. Напряжение, конечно, малó по сравнению с APM, но 20В вряд-ли где-то там возьмётся. Теперь со стабилизатором всё отлично -- 3.3 приходит, на входе стабилизатора теперь всегда 3.2В, на его выходе всегда 1.81В. На затворе, кстати, как оказалось, должно быть не 1.5 а 10 с лишним вольт . Эта проблема решена, однако ПК ВСЁ-РАВНО повисает на ошибке 2А. Не FF, конечно, как ранее, но приятного мало. @Alex91 Не опасно ему такую шоковую терапию устраивать? У меня есть ИК станция, я могу медленно его прожарить, чтобы ничего не вспучило. И если греть, то насухую или подлить под чип флюс?
  12. Мысль такая уже была, но из всего моего запаса донорских платок нашёлся только 2n7002, у которого напряжение открытия около 1.6В. А на затвор приходит 1.5В. Боюсь, что ему не хватит напряжения для открытия. Ещё и по току там совсем не айс получается. так что пока поменяю их местами, а уже завтра выберусь в гараж и попробую найти там что-нибудь похожее
  13. Да, могу. Ну и заодно дополнительно засуну в транзистор тестер, посмотреть разброс параметров. Попробую
  14. В Украине Не пью и не курю, что-то золотых гор не появилось. Я -- студент, у которого и так хватает статей расхода, можете поверить. Плюс, я ведь выше уже объяснил, что в этом же месяце собрал пк из: матери, процессора, озу и жёсткого диска. На видеокарту мне сейчас не хватает, а нужно ещё оплачивать потребности нижних ступеней пирамиды Маслоу, знаете ли. Очень рад за вас, если трата 560 рублей не является для вас сколь угодно значимой статьёй расхода, а мне вот нужно экономить, бывает и такое. Ну а с чего же? Я ведь не написал, что совсем не имею опыта. Я вполне успешно занимаюсь ремонтом аналоговой звуковой техники, практически не пишу по этому поводу сюда. А как же по вашему получить опыт в ремонте видеокарт, не прикасаясь к самим видеокартам? Это как пытаться приобрести опыт в ремонте автомобилей, ремонтируя сантехнику
×
×
  • Создать...