Так чем же там все-таки занят процессор в вашем поражающем воображение проекте "Бегущая строка", что вы столько сил положили, чтобы несчастный вычислитель не надорвался?nahimovv писал(а):Гавкнул? Под лавку! И не забывай вылазить периодически, а то ещё задохнёшься ненароком!
Кто сам изучил програмирование мк?
Re: Кто сам изучил програмирование мк?
- Реклама
Re: Кто сам изучил програмирование мк?
Хрень оно вам подсказывает. Слушайте больше.abc писал(а):Что-то мне подсказывает,
Re: Кто сам изучил програмирование мк?
Хренью я могу назвать все ваши сообщения в этой теме.
Так понятней ?
Так понятней ?
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
- Леонид Иванович
- Друг Кота
- Сообщения: 4779
- Зарегистрирован: Сб апр 02, 2011 12:40:46
- Откуда: Минск
- Контактная информация:
Re: Кто сам изучил програмирование мк?
У меня некое подобие кооперативной ОС. В суперцикле вызываются последовательно методы Execute() всех задач, которые построены так, что быстро отдают управление. Почему бы не сделать сканирование дисплея одной из задач?nahimovv писал(а):Понятно. Если у вас автомат состояний, то тем более динамическую индикацию лучше делать хардварной.
Спасибо! В M3 и M4 есть, а другие мне пока и не нужны. Почитаю.nahimovv писал(а):Если МК имеет DWT, то лучше микросекундные задержки делать на нём (на электрониксе обсуждалось)
В принципе, можно было бы и SysTick->VAL читать, но здесь чисто арифметическая загвоздка. Этот таймер выполняет не полный цикл, а перезагружается неким числом N (чтобы получить период 1 мс). Как правильно вычесть два значения с учетом такого раннего переполнения? Нужно реализовать арифметику по модулю N?nahimovv писал(а):если нет... кто во что гаразд.
- РадиоЛоматель
- Мудрый кот
- Сообщения: 1733
- Зарегистрирован: Чт авг 21, 2008 22:03:30
- Откуда: Одесса(Украина)
- Контактная информация:
Re: Кто сам изучил програмирование мк?
Он в это время находится в одном из энергосберегающих режимов, и, собственно, сберегает энергиюa5021 писал(а):Так чем же там все-таки занят процессор в вашем поражающем воображение проекте "Бегущая строка", что вы столько сил положили, чтобы несчастный вычислитель не надорвался?
Прочитал последних 12 страниц, дальше не вижу смысла. Так вот, я тоже был АВР маньяком раньше. Даже веб сервер на ENC и Atmega128 сделал. Потратил около полугода на это, да так и не заработало толком. Хорошо, что попал на работу, где поставили жёсткое условие - STM32. Сначала долго мучился с пониманием, но когда научился пользоваться - программизм стал простой и быстрый. Особенно кайфую от наличия DMA.
Мелькало, как реализовать delay_us? Да очень просто! Используя периферию.
Спойлер
Код: Выделить всё
void delay_us(uint32_t Nus)
{
uint32_t temp;
SysTick->LOAD=Nus*fac_us; // fac_us - тактовая частота процессора в МГц.
SysTick->VAL=0x00;
SysTick->CTRL=0x01 ;
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
SysTick->CTRL=0x00;
SysTick->VAL =0X00;
}
// При компиляции цикл занимает 9 ассемблерных команд, что на частоте 9Мгц уже обеспечивает необходимую точность. Можно поморочить голову и сделать коррекцию на время получения и возврата управления в виде: SysTick->LOAD=Nus*fac_us - N_INIT_COMMANDS;
Кстати, по поводу частотомера - тут три таймера очень удобно применять. Абсолютно аппаратно их можно соединить по такой схеме: Два таймера в мастер/слейв режиме образует собой 32х разрядный счетчик импульсов на входе. Третий таймер нужен, чтоб пинать дма копировать значение младшего счетчика в память один раз в секунду. Процессору остается только в прерывании от дма взять старший счетчик, вычислить разность текущий - предыдущий и выдавать результат в основном цикле. Можно еще немного изгалиться и заставить тот самый третий таймер сбрасывать остальные два. Но это уже не нужно. Получаем не простой счетчик импульсов за интервал с точностью +/- лапоть из-за "дребезга" прерываний, а вполне годный прибор. Даже уже на F103 можно считать до 72х МГц без затрат процессорного времени.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
- Реклама
- Леонид Иванович
- Друг Кота
- Сообщения: 4779
- Зарегистрирован: Сб апр 02, 2011 12:40:46
- Откуда: Минск
- Контактная информация:
Re: Кто сам изучил програмирование мк?
SysTick занят по прямому назначению - генерирует прерывания системного таймера. Вот если бы его еще применить и как быстрый таймер - было бы вообще прекрасно. Но есть математическая загвоздка, о которой я написал постом выше.РадиоЛоматель писал(а):как реализовать delay_us? Да очень просто!
Что это за прибор, если за секунду можно измерить всего лишь с точностью 1 Гц? Под частотомером я понимаю прибор, где один таймер считает количество входных импульсов за интервал измерения, а второй - количество тактовых импульсов, которые укладываются на данном количестве входных импульсов. Затем из этих двух значений вычисляется частота.РадиоЛоматель писал(а):Получаем не простой счетчик импульсов за интервал с точностью +/- лапоть из-за "дребезга" прерываний, а вполне годный прибор.
Re: Кто сам изучил програмирование мк?
Понятней некуда. Зайдите еще на гугл уточнить по сочетанию "10v sensor" мое мнение на этот счет, а заодно и "всем" передайте.abc писал(а):Хренью я могу назвать все ваши сообщения в этой теме. Так понятней ?
Re: Кто сам изучил програмирование мк?
Я не то что бы сильно против STM32, но и на восьмибитках DMA встречается. А этот ваш быстрый программизм, он с библиотеками или без ?РадиоЛоматель писал(а):поставили жёсткое условие - STM32. Сначала долго мучился с пониманием, но когда научился пользоваться - программизм стал простой и быстрый. Особенно кайфую от наличия DMA.
Re: Кто сам изучил програмирование мк?
Это просто разрыв шаблона какой-то.a5021 писал(а):Зайдите еще на гугл уточнить по сочетанию "10v sensor" мое мнение на этот счет, а заодно и "всем" передайте.
Вы в курсе вообще, что под понятием 0-10v подразумевается МАКСИМАЛЬНЫЙ диапазон питающих напряжений датчиков на основе ТЕРМОрезистора.. И нахрена мне (как, впрочем, и любому другому, кто в теме) искусственно завышать питание терморезистора, если я его потом буду вынужден делить вашим прецизионным делителем в 5 раз, заведомо УХУДШАЯ разрешение своего измерительного прибора ?
А саморазогрев ? Не, не слышал...
Или же (не дай боже) вы под датчиком подразумеваете ЭТО ?
Гуглите дальше.
Последний раз редактировалось abc Вс фев 02, 2014 02:59:42, всего редактировалось 1 раз.
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
- РадиоЛоматель
- Мудрый кот
- Сообщения: 1733
- Зарегистрирован: Чт авг 21, 2008 22:03:30
- Откуда: Одесса(Украина)
- Контактная информация:
Re: Кто сам изучил програмирование мк?
А тут уже нужен четвертый и пятый таймеры в режиме "захват периода" в такой же связке на 32 разряда. У таймеров есть фильтр на изменяемое количество входных импульсов и нужно немного поколдовать все с тем же ДМА и прерываниями, чтоб получить возможность захватывать период более 65535 импульсов. Совсем не сложно ведь. И корпус всего один получается.Леонид Иванович писал(а): Что это за прибор, если за секунду можно измерить всего лишь с точностью 1 Гц? Под частотомером я понимаю прибор, где один таймер считает количество входных импульсов за интервал измерения, а второй - количество тактовых импульсов, которые укладываются на данном количестве входных импульсов. Затем из этих двух значений вычисляется частота.
Конечно я в курсе про дма на восьмибитках. Это просто был приятный сюрприз.a5021 писал(а):Я не то что бы сильно против STM32, но и на восьмибитках DMA встречается. А этот ваш быстрый программизм, он с библиотеками или без ?
А программизм с немного подпиленными библиотеками производителя, где это позволяет задача. Стараюсь строить программу так, чтоб настраивать периферию один раз при запуске. Тут совершенно все равно, будет контроллер стартовать 100 мс или 150. Если же приходится быстро изменять настройки в процессе, то пишу в регистры, если время не важно, то пользую библиотеку. Но дело в том, что и моё сидение на авр не отличалось - так же были специальные библиотеки, но самописные и разрозненные.
ПС.
Аналогично можно использовать любой другой таймер. К тому же, ваша арифметическая проблема решается работой не в микросекундах, а в машинных тактах. Внимательней посмотрите приложенный код.SysTick занят по прямому назначению - генерирует прерывания системного таймера. Вот если бы его еще применить и как быстрый таймер - было бы вообще прекрасно. Но есть математическая загвоздка, о которой я написал постом выше.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
Re: Кто сам изучил програмирование мк?
И давно у нас за терморезистором стали замечать способность мерить давление, влажность, освещение, концентрации газов и т.п ? Посмотрите вот тут и объясните пожалуйста, как вы туда 5 вольт будете запихивать, если там питающее 24VDC +/- 5% ?abc писал(а):Это просто разрыв шаблона какой-то. Вы в курсе вообще, что под понятием 0-10v подразумевается МАКСИМАЛЬНЫЙ диапазон питающих напряжений датчиков на основе ТЕРМОрезистора..
Аналоговый интерфейс 0-10 v -- фактически стандарт огромного количества всевозможных датчиков, от простейших, до весьма изощренных.
Не стыдно не знать. Классическое "все знать невозможно" никто не отменял. Стыдно не суметь разобраться, когда уже пальцем показывают, где ответ искать.
- Леонид Иванович
- Друг Кота
- Сообщения: 4779
- Зарегистрирован: Сб апр 02, 2011 12:40:46
- Откуда: Минск
- Контактная информация:
Re: Кто сам изучил програмирование мк?
Не сложно? Один таймер должен работать в режиме счета внешних импульсов, другой - в режиме захвата. Но разрешить их работу нужно строго одновременно. Как это сделать без внешней логики?РадиоЛоматель писал(а):А тут уже нужен четвертый и пятый таймеры в режиме "захват периода" в такой же связке на 32 разряда. У таймеров есть фильтр на изменяемое количество входных импульсов и нужно немного поколдовать все с тем же ДМА и прерываниями, чтоб получить возможность захватывать период более 65535 импульсов. Совсем не сложно ведь. И корпус всего один получается.
Вариант есть, работает, но не знаю, оптимальный ли он:РадиоЛоматель писал(а):К тому же, ваша арифметическая проблема решается работой не в микросекундах, а в машинных тактах.
Код: Выделить всё
void TSysTimer::Delay_us(uint16_t d)
{
uint32_t DelayStart = SysTick->VAL;
uint32_t DelayTicks = d * (SystemCoreClock / 1000000);
int32_t Delta;
do
{
Delta = DelayStart - SysTick->VAL;
if(Delta < 0) Delta = SysTick->LOAD + Delta + 1;
}
while(Delta < DelayTicks);
}
Re: Кто сам изучил програмирование мк?
А, ну да, так бы и сказали, что под датчиками рассматриваете уже готовые модули (блоки), по типу того самого прецизионного делителя.a5021 писал(а):Стыдно не суметь разобраться, когда уже пальцем показывают, где ответ искать.
Я же привык к датчикам типа 1, 2, 3 и т.д., получая с них непосредственно измеряемую величину в том виде, в каком ее задумал производитель, без всяких промежуточных преобразований и прокладок.
PS
Перефразирую.
Один из нас берет непосредственно сенсор и добавляет к нему обвязку и интерфейс "для домохозяек".
Второй покупает созданный первым уже готовый модуль и ничтоже сумняшеся, что оно "само выросло", использует дальше.
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
- РадиоЛоматель
- Мудрый кот
- Сообщения: 1733
- Зарегистрирован: Чт авг 21, 2008 22:03:30
- Откуда: Одесса(Украина)
- Контактная информация:
Re: Кто сам изучил програмирование мк?
Если уж задаться целью вообще без внешней логики, то я бы сделал так (извините за криворукость рисунка, под рукой только пэинт был) :Леонид Иванович писал(а): Не сложно? Один таймер должен работать в режиме счета внешних импульсов, другой - в режиме захвата. Но разрешить их работу нужно строго одновременно. Как это сделать без внешней логики?

Тогда события таймеров надо настроить по спадающему фронту.
Для высокочастотного варианта, скорее всего, придётся ставить какой-то ключ, типа 74HCxxx Но, по сравнению с целой цепеэлдехой это все равно меньше
И еще, думаю, сработает вариант с последовательным резистором к выводу. Нужно, чтобы входы таймеров находились на одном выводе (например, в stm32f100, таймеры 3 и 16 имеют накладывающиеся входы), а сам вывод сконфигурировать как OpenDrain. Вот тогда из внешних деталей останется только резистор и получится высокочастотный вариант. Даже интересно попробовать стало.
Вполне себе оптимальный. Погрешность, вызванную длинной цикла, можно оценить, глянув в дизассемблере количество команд. Но не сработает, если DelayTicks >= 2 * SysTick->VALЛеонид Иванович писал(а):Вариант есть, работает, но не знаю, оптимальный ли он
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
Re: Кто сам изучил програмирование мк?
У меня создается впечатление ,что ЛИ видит периферию STM , как совершенно раздельные модули , связанные меж собой только софтово и только через ядро . ЛИ , это так ?
Re: Кто сам изучил програмирование мк?
Леонид Иванович писал(а): Не сложно? Один таймер должен работать в режиме счета внешних импульсов, другой - в режиме захвата. Но разрешить их работу нужно строго одновременно. Как это сделать без внешней логики?
Да не тупите так безбожно, оба, срам! Прочтите хоть раз референс, наконец то! Есть режим Gated Mode! Даже в простенькой STM8L15X можно рулить 3-мя таймерами одновременно и мерять частоту по 3-ём входам без внешних навесок и соединений!РадиоЛоматель писал(а): Если уж задаться целью вообще без внешней логики, то я бы сделал так
Re: Кто сам изучил програмирование мк?
Он вообще ничего не видит, у него ужас в глазах, от обилия и возможностей, вот и растерялся. Для новичка это нормально, но ЛИ упорно не хочет признавать себя новичком в STM32, отсюда и все его реверансы.dosikus писал(а):У меня создается впечатление ,что ЛИ видит периферию STM , как совершенно раздельные модули
Re: Кто сам изучил програмирование мк?
Вот, в принципе, единственно экономически оправданное срочное освоение STM32 (работа заставила), есть правда и другой подход - тесновато становится в имеющемся в наличии перечне МК.РадиоЛоматель писал(а): Так вот, я тоже был АВР маньяком раньше. Даже веб сервер на ENC и Atmega128 сделал. Потратил около полугода на это, да так и не заработало толком. Хорошо, что попал на работу, где поставили жёсткое условие - STM32. Сначала долго мучился с пониманием, но когда научился пользоваться - программизм стал простой и быстрый. Особенно кайфую от наличия DMA.
Конечно, для обычной бегущей строки стм-ка несколько избыточна. Но это полностью компенсируется её стоимостью и лишь двухпроводным интерфейсом отладки/программирования.
Только вот "не заработало толком" да еще на Atmega128... Больше показатель к теме "а все ли я умею в том, что уже проглотил?".
Чего касательно двухпроводного интерфейса программирования/отладки... не смешите - кто мешает на той же АВР сделать собственный бутлоадер/отладчик по любому понравившемуся протоколу? (То же самое касается любого МК с режимом самопрограммирования ПЗУ).
Обмен данными может быть и аппаратным, только вот задание режимов работы/настройка миновать ядро никак не сможет.dosikus писал(а):У меня создается впечатление ,что ЛИ видит периферию STM , как совершенно раздельные модули , связанные меж собой только софтово и только через ядро . ЛИ , это так ?
Единственное исключение - работа "параллельного МК" в режиме отладчика - но то уже "нештатный" режим.
Re: Кто сам изучил програмирование мк?
Кому нужно это убогое, унылое гуано? "Приемственность" для лохов и адептов-даунов!BOB51 писал(а): Да и АРМ у того же Атмела имеются - вполне логично было бы на эти МК перейти (все-ж "приемственность").
Зачем? Когда у STM уже всё есть?Чего касательно двухпроводного интерфейса программирования/отладки... не смешите - кто мешает на той же АВР сделать собственный бутлоадер/отладчик по любому понравившемуся протоколу?
Иногда лучше тихо курить, чем говорить!Обмен данными может быть и аппаратным, только вот задание режимов работы/настройка миновать ядро никак не сможет.
Единственное исключение - работа "параллельного МК" в режиме отладчика - но то уже "нештатный" режим.![]()
Re: Кто сам изучил програмирование мк?
Ну полюбуйтесь еще на вот такие "прецезионные делители":abc писал(а):А, ну да, так бы и сказали, что под датчиками рассматриваете уже готовые модули (блоки), по типу того самого прецизионного делителя.

Разницу в исполнении со своими датчиками наблюдаете?
Кого может интересовать, к чему вы привыкли? Вы привыкли вы к ассортименту хоббийного магазина. По сути, вы тот самый ардуинщик (что само по себе может и не плохо), презрительное отношение к которому тут так стараетесь изобразить (а вот это уже отвратительно).
Научитесь формулировать правильно с первого раза. Мне не интересно переписываться с вами неделю, в ожидании, пока вы с мыслями соберетесь.Перефразирую.


