Хм. Пока у вас еще только "в плане", я уже десять раз молча сделал этот "план"... И без глупого пипкомеряния. Проще надо быть, проще. И не думать, что "ты один дартаньян, а остальные вокруг дураки". А то потом неловкость как бы не получилась
_________________ Почти все плюсы в свою карму и в рейтинги сообщения поставил себе сам, своими же созданными для этих целей клонами. aen
Пипкой тут размахиваете только вы. Думая, что все вокруг полные идиоты. Никого не интересуют ваши 10 раз. Заниматься сборкой чужих кубиков, выдавая это за свой проект - гомерически смешно. Лучше ответьте мне на мой простой вопрос (тот что я выше написал), который я задал на одном из весьма солидном форуме и ответа так и не получил. Зато все "МР1-дартаньяны" 10 раз.
ЗЫ. По результату ответа можно обсудить причину этого явления. Эта причина мне по прежнему не понятна. Наверное есть резоны, узнать которые было бы интересно.
Да, спасибо, оценил ваш "уровень" знаний по этой галиматье Как говорится, спасибо, всё ясно, можете не продолжать, написанное весьма красноречиво вас представило как "спецыализта"
И что же вам не понравилось в моем вопросе? Конкретно. Могу пояснить, если был неточен.
Знаю. А вы? Да, кстати, а ниче, что тут тема вообще про PIC16F и симистор? А вы тут со своими проблемами с DMA STM32F051 начали. Создайте новую тему с названием "Не могу настроить UART с DMA в STM32F051" - вот там и обсудим, что у вас не получается сделать.
_________________ Почти все плюсы в свою карму и в рейтинги сообщения поставил себе сам, своими же созданными для этих целей клонами. aen
Вы видели мануалы на тот же STM32? ..........Щас новое появилось, попробуй и не отставай от жизни, не теряй время!" И я последовал совету. Так то было 7 лет назад! А сейчас, аж в 2020 году, когда советуешь "не отставать от времени и запрыгнуть на подножку уходящего поезда", находятся люди, которые будут тянуть назад, заявляя, что "начало тысячелетия - наше всё! не стремитесь вперед - впереди мрак и потьма".
То есть после этого беспонтового флуда вы смеете меня упрекать в отклонении от темы?
Вы в своем уме, милейший? Мало того, что вы влезли с никчемными советами в вообщем-то завершенную тему, так еще и показываете неосведомленность в конкретных вопросах тех самых СТМ32, на которые советуете переходить. Вы НЕ ЗНАЕТЕ как работает ДМА в F0. Потому что мой вопрос очень прост для тех, кто хоть раз использовал ДМА не через SPL или HAL, вызывая без всякого понимания библиотечную инициализацию, а для тех, кто разбирался с рефмануалом и даташитом по настоящему. Ответ должен был последовать мгновенно. В моих действиях при перезапуске ДМА отсутствует одно единственное выражение.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Смешно, смешно. То есть, стрелочник из вас отменный. Зачем вы вообще развели этот спор? Очень хотелось доказать, что вы тут самый большой мальчик? Ладно, вы - большой мальчик. Довольны? Напрасно вы считаете других глупее себя, напрасно. Между прочим, я вам ничего плохого не делал. Зачем вы так на меня накинулись? Зачем? Не понимаю. Я вас не трогал. Иль вы считаете себя очень умным и очень главным? Ладно, хорошо - вы очень главный. Довольны? Ну и все, идите, гуляйте.
А по поводу вашего вопроса - я ж незря написал, что "это галиматья". Ибо.. ибо зачем таймер с запросами, когда сам UART имеет запросы DMA на передачу? Вы с этим запутались, не прочтя мануалы, поэтому я и составил мнение о вас. Всё честно. Вы сами это написали, вас никто не тянул за язык.
А советы мои - совершенно абсолютно правильные. Незачем в 2020 году пытаться изучить то, что отмерло уже лет 10 назад. Ну разве что если больше ничего не получается изучить.
И всё, на этом я заканчиваю диалог с вами окончательно. Можете писать че угодно, как угодно, хоть лбом биться о монитор, но мнение о вас уже составлено, и оно - ниже плинтуса, и мне глубоко побарабану, что вы и как вы. Мрак - он и есть мрак.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Ибо.. ибо зачем таймер с запросами, когда сам UART имеет запросы DMA на передачу?
Даладна!!! А пацаны то не знают... Блестящая у вас эрудиция. Прямо отменная... Вы в курсе, что реквесты ДМА могут не иметь никакого отношения к источнику или приемнику данных? Таймер при передаче в УАРТ, милейший, нужен, если требуется ИНТЕРВАЛ между байтами при передаче. Если реквестить от самого буфера передатчика, то между байтами будет всего один клок самого УАРТа. Поскольку у меня УАРТ выбрасывает пакеты в HID USB кастомный мост на PIC18F14K50, идущие без зазора байты не позволяют на лету поллить пакет, чтобы выделить данные из синхронизации перед передачей в стек USB. Таким образом, вы не только слили вопрос, но дополнительно продемонстрировали свою некомпетентность.
Вы в курсе, что реквесты ДМА могут не иметь никакого отношения к источнику или приемнику данных?
Обычно так не делают. А если по той или иной причине байт не был передан, а по таймеру загружен другой? Что имеем? Правильно потерю данных! Нужно дождаться передачи байта и тогда отправлять другой, а для этого запускать DMA должен USART. Я тоже удивился когда прочитал про USART+DMA и таймер. Таймер в этой связке явно лишний.
КРАМ писал(а):
Поскольку у меня УАРТ выбрасывает пакеты в HID USB кастомный мост на PIC18F14K50
Может я чего-то не знаю, но разве в PIC18 есть DMA? В те времена когда с ними работал, его не было. Добавили в новых моделях? Конкретно в PIC18F14K50 DMA нет.
КРАМ писал(а):
идущие без зазора байты не позволяют на лету поллить пакет, чтобы выделить данные из синхронизации перед передачей в стек USB.
У МК производительности не хватает? Может стоило взять более мощный МК? По моему решение должно быть простым. Передаете пакет без зазора и в конце пауза. По паузе определяете что пакет принят. Чем не вариант?
Дорогой тов. Питание. осмелюсь напомнить, что тему открыли не вы и ваша "Истина в последней инстанции" здесь мало уместна, засоряет топик и является по сути для ТСа пустым флудом. Т. е. топик вы угробили. Если вам это по силам и не претит вашему воспитанию, то попробуйте уважать чужие темы, другие мнения и научитесь давать советы, которые ждёт вопрошающий вместо "стучания себя пяткой в грудь". А лучше откройте свою тему и там учите всех жить и рассказывайте какой вы есть крутой и умный. Ну а мы все тут будем коленопреклонённо потихоньку внимать величию и скрупулёзно всё конспектировать в цитатники.
Нужно дождаться передачи байта и тогда отправлять другой, а для этого запускать DMA должен USART. Я тоже удивился когда прочитал про USART+DMA и таймер. Таймер в этой связке явно лишний.
Уважаемый, неужели я столь косноязычен? Чтобы обеспечить зазор между байтами, таймер должен выдавать реквесты с ТРЕБУЕМЫМ периодом следования байт. Если скорость УАРТа 115200, то байт передается за 89 мкс. Делаем период таймера 120 мкс и имеем зазор между байтами 120-89=31мкс. В каком месте УАРТ может не успеть передать байт? Что может не дать ему это сделать? Наконец, предложите иное решение с использованием ДМА и зазорами между байтами.
По поводу PIC18F14K50. Видимо вечер не задался... Не у меня. 1. Это ДРУГОЙ контроллер. УАРТ о котором шла речь относится к STM32F051. И этот 051-ый с помощью ДМА формирует посылки в PIC18F14K50. Через гальваноразвязку, кстати. Это чтобы меня кто-нибудь не стал учить как делать HID USB на STM32. Ну чтобы типо на одном МК. 2. Поскольку PIC18 принимает пакет в свой УАРТ через прерывания, а пакет имеет синхронизацию, позволяющую слать пакеты один за другим как единый поток, то на поллинг этих пакетов нужно некоторое время, которое и дает зазор между байтами. 3. ДМА в PIC18F14K50 таки есть. Специально для USB. Но это так, для строгости суждений... К теме отношения не имеет.
Мурик, а вы можете дать ответ на поставленный мной вопрос - почему второй и последующие пакеты не желают передаваться? Первый отлично выдается. Еще раз напомню. При запуске передачи очередного пакета имеется ровно три выражения в Си:
При перезапуске передачи очередного пакета имеется ровно три выражения в Си...
да надо бы в соответствующий раздел перенести. В снипетсах от производителя тоже три строки
Код:
/* start 8-bit transmission with DMA */ DMA1_Channel2->CCR &=~ DMA_CCR_EN; DMA1_Channel2->CNDTR = sizeof(stringtosend);/* Data size */ DMA1_Channel2->CCR |= DMA_CCR_EN;
там в прерывании от кнопки, но можно в прерывании от таймера. Интересно почему пакет больше не формируется при ручном запуске таймера. На STM32F091 это применял в проектике на 4-5 USART и пакеты и принимаются и передаются через DMA асинхронно
Олег, это ДРУГИЕ три строки. Во первых, это для случая реквеста от самого модуля, а не от стороннего таймера (который нужно перезапустить), во вторых сниппетсы не являются частью даташита, в третьих В ДАННОМ случае в этом сниппетсе есть ответ на вопрос. Но этот ответ совершенно не очевиден. Проблема в том, что по каким то совершенно неведомым мне причинам, при апдейте ДМА в новом цикле транзакций, В РЕЖИМЕ CIRCULAR происходит апдейт счетчика транзакций из буфера CNDTR, а В РЕЖИМЕ ONE SHOT (!CIRCULAR) такого не происходит и нужно РУЧКАМИ перезаписывать количество транзакций в CNDTR. Почему сделано столь кривое решение - мне непонятно. В F4 это не так. Во всех многочисленных архитектурах DMA у Микрочипа (любой разрядности) - это не так, у Техаса - не так. Я вообще в первый раз встретил подобное. Строго говоря, даже передергивание самого канала ДМА (выкл-вкл) перед стартом тоже непонятно зачем сделано. Но так и в F4. Человеческим решением было бы автоматическое выключение канала ДМА одновременно с формированием флага прерываний по завершению пакета. И одновременный апдейт счетчика из буфера, ну или апдейт счетчика при старте новой сессии. Ведь в режиме "циркуляр" именно так и работает... Тогда при старте новой сессии потребовалось только включить канал и запустить реквесты.
If the channel is configured in non-circular mode, no DMA request is served after the last transfer (that is once the number of data items to be transferred has reached zero). In order to reload a new number of data items to be transferred into the DMA_CNDTRx register, the DMA channel must be disabled.
у F0 в DMA и FIFO нет в отличии от старших братьев, если бы все было - можно без старших было бы легко обходится
Я эту цитату как то не нашел. Видимо не хватило усердия. Но решил проблему примерно за полдня. Однако даже в PIC18FxxQ43 ДМА работают штатно - с апдейтом счетчиков. И даже бурст-режим есть довольно продвинутый, с автоматическим определением счетчика для бурста (сорец или дестинатор). И мультиплексоры источников реквестов идентичные на все 6 каналов ДМА - полная и длинючая на две страницы таблица всех возможных источников реквестов.
Мурик, а вы можете дать ответ на поставленный мной вопрос - почему второй и последующие пакеты не желают передаваться? Первый отлично выдается.
Я хз что у вас в коде. У меня на F0 все передается.
КРАМ писал(а):
Какой строки не хватает и почему?
Как минимум нужно задать число байт для передачи через DMA если он в нормальном режиме. В циркулярном в этом нет необходимости. Какой у вас режим неизвестно.
Как минимум нужно задать число байт для передачи через DMA если он в нормальном режиме. В циркулярном в этом нет необходимости. Какой у вас режим неизвестно.
Мы уже с Олегом обменялись мнениями на этот предмет. В режиме передачи пакетов через УАРТ циркулярный режим противоестественен, как вы сами понимаете. При наличии буфера счетчика транзакций для циркулярного режима, требование апдейтить счетчик руками путем вписывания одного и того же значения в буфер выглядит очень странным, если не сказать грубее. И в F4 такого безобразия нет.
скажите, кто сможет мне написать код, по теме? и сколько будет стоить этот труд? для меня это будет пример, и легче понять куда и что. на начальном этапе, чтоб при включении в сеть, сим открывал нагрузку от 50в до 220в, в течение 5секунд
нет, это мне надо в томас прошивку написать, у них лоченые пики стоят. 12с509. если понадобиться, чтоб можно было код под любые порты любого пика написать. а тут от самсунга плата готовая лежит, потому на ней и хочу реализовать вначале
Чтоб "дистанционно" чего написать нужна и полная схема и описание хотелок... Не "с потолка" же прожку писать. Т.е. рисуем схемку в стандартно-любительском splan7, пишем описание работы входных кноп и желаемый результат на выходе. А уж там и с прожкой понятнее будет.
Сейчас этот форум просматривают: Sergeaudi и гости: 43
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения