Кто сам изучил програмирование мк?

Флейм в чистом виде - все что угодно...
Но - в рамках закона :)
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Кто сам изучил програмирование мк?

Сообщение a5021 »

nahimovv писал(а):Гавкнул? Под лавку! И не забывай вылазить периодически, а то ещё задохнёшься ненароком!
Так чем же там все-таки занят процессор в вашем поражающем воображение проекте "Бегущая строка", что вы столько сил положили, чтобы несчастный вычислитель не надорвался?
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Кто сам изучил програмирование мк?

Сообщение a5021 »

abc писал(а):Что-то мне подсказывает,
Хрень оно вам подсказывает. Слушайте больше.
Реклама
Аватара пользователя
abc
Друг Кота
Сообщения: 3685
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Re: Кто сам изучил програмирование мк?

Сообщение abc »

Хренью я могу назвать все ваши сообщения в этой теме.
Так понятней ?
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Кто сам изучил програмирование мк?

Сообщение Леонид Иванович »

nahimovv писал(а):Понятно. Если у вас автомат состояний, то тем более динамическую индикацию лучше делать хардварной.
У меня некое подобие кооперативной ОС. В суперцикле вызываются последовательно методы Execute() всех задач, которые построены так, что быстро отдают управление. Почему бы не сделать сканирование дисплея одной из задач?
nahimovv писал(а):Если МК имеет DWT, то лучше микросекундные задержки делать на нём (на электрониксе обсуждалось)
Спасибо! В M3 и M4 есть, а другие мне пока и не нужны. Почитаю.
nahimovv писал(а):если нет... кто во что гаразд.
В принципе, можно было бы и SysTick->VAL читать, но здесь чисто арифметическая загвоздка. Этот таймер выполняет не полный цикл, а перезагружается неким числом N (чтобы получить период 1 мс). Как правильно вычесть два значения с учетом такого раннего переполнения? Нужно реализовать арифметику по модулю N?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
РадиоЛоматель
Мудрый кот
Сообщения: 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: Кто сам изучил програмирование мк?

Сообщение Леонид Иванович »

РадиоЛоматель писал(а):как реализовать delay_us? Да очень просто!
SysTick занят по прямому назначению - генерирует прерывания системного таймера. Вот если бы его еще применить и как быстрый таймер - было бы вообще прекрасно. Но есть математическая загвоздка, о которой я написал постом выше.
РадиоЛоматель писал(а):Получаем не простой счетчик импульсов за интервал с точностью +/- лапоть из-за "дребезга" прерываний, а вполне годный прибор.
Что это за прибор, если за секунду можно измерить всего лишь с точностью 1 Гц? Под частотомером я понимаю прибор, где один таймер считает количество входных импульсов за интервал измерения, а второй - количество тактовых импульсов, которые укладываются на данном количестве входных импульсов. Затем из этих двух значений вычисляется частота.
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Кто сам изучил програмирование мк?

Сообщение a5021 »

abc писал(а):Хренью я могу назвать все ваши сообщения в этой теме. Так понятней ?
Понятней некуда. Зайдите еще на гугл уточнить по сочетанию "10v sensor" мое мнение на этот счет, а заодно и "всем" передайте.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Кто сам изучил програмирование мк?

Сообщение a5021 »

РадиоЛоматель писал(а):поставили жёсткое условие - STM32. Сначала долго мучился с пониманием, но когда научился пользоваться - программизм стал простой и быстрый. Особенно кайфую от наличия DMA.
Я не то что бы сильно против STM32, но и на восьмибитках DMA встречается. А этот ваш быстрый программизм, он с библиотеками или без ? :)
Аватара пользователя
abc
Друг Кота
Сообщения: 3685
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Re: Кто сам изучил програмирование мк?

Сообщение abc »

a5021 писал(а):Зайдите еще на гугл уточнить по сочетанию "10v sensor" мое мнение на этот счет, а заодно и "всем" передайте.
Это просто разрыв шаблона какой-то.
Вы в курсе вообще, что под понятием 0-10v подразумевается МАКСИМАЛЬНЫЙ диапазон питающих напряжений датчиков на основе ТЕРМОрезистора.. И нахрена мне (как, впрочем, и любому другому, кто в теме) искусственно завышать питание терморезистора, если я его потом буду вынужден делить вашим прецизионным делителем в 5 раз, заведомо УХУДШАЯ разрешение своего измерительного прибора ?
А саморазогрев ? Не, не слышал...
Или же (не дай боже) вы под датчиком подразумеваете ЭТО ?

Гуглите дальше.
Последний раз редактировалось abc Вс фев 02, 2014 02:59:42, всего редактировалось 1 раз.
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Аватара пользователя
РадиоЛоматель
Мудрый кот
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)
Контактная информация:

Re: Кто сам изучил програмирование мк?

Сообщение РадиоЛоматель »

Леонид Иванович писал(а): Что это за прибор, если за секунду можно измерить всего лишь с точностью 1 Гц? Под частотомером я понимаю прибор, где один таймер считает количество входных импульсов за интервал измерения, а второй - количество тактовых импульсов, которые укладываются на данном количестве входных импульсов. Затем из этих двух значений вычисляется частота.
А тут уже нужен четвертый и пятый таймеры в режиме "захват периода" в такой же связке на 32 разряда. У таймеров есть фильтр на изменяемое количество входных импульсов и нужно немного поколдовать все с тем же ДМА и прерываниями, чтоб получить возможность захватывать период более 65535 импульсов. Совсем не сложно ведь. И корпус всего один получается.
a5021 писал(а):Я не то что бы сильно против STM32, но и на восьмибитках DMA встречается. А этот ваш быстрый программизм, он с библиотеками или без ?
Конечно я в курсе про дма на восьмибитках. Это просто был приятный сюрприз.
А программизм с немного подпиленными библиотеками производителя, где это позволяет задача. Стараюсь строить программу так, чтоб настраивать периферию один раз при запуске. Тут совершенно все равно, будет контроллер стартовать 100 мс или 150. Если же приходится быстро изменять настройки в процессе, то пишу в регистры, если время не важно, то пользую библиотеку. Но дело в том, что и моё сидение на авр не отличалось - так же были специальные библиотеки, но самописные и разрозненные.

ПС.
SysTick занят по прямому назначению - генерирует прерывания системного таймера. Вот если бы его еще применить и как быстрый таймер - было бы вообще прекрасно. Но есть математическая загвоздка, о которой я написал постом выше.
Аналогично можно использовать любой другой таймер. К тому же, ваша арифметическая проблема решается работой не в микросекундах, а в машинных тактах. Внимательней посмотрите приложенный код.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Кто сам изучил програмирование мк?

Сообщение a5021 »

abc писал(а):Это просто разрыв шаблона какой-то. Вы в курсе вообще, что под понятием 0-10v подразумевается МАКСИМАЛЬНЫЙ диапазон питающих напряжений датчиков на основе ТЕРМОрезистора..
И давно у нас за терморезистором стали замечать способность мерить давление, влажность, освещение, концентрации газов и т.п ? Посмотрите вот тут и объясните пожалуйста, как вы туда 5 вольт будете запихивать, если там питающее 24VDC +/- 5% ?

Аналоговый интерфейс 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);
}
Аватара пользователя
abc
Друг Кота
Сообщения: 3685
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Re: Кто сам изучил програмирование мк?

Сообщение abc »

a5021 писал(а):Стыдно не суметь разобраться, когда уже пальцем показывают, где ответ искать.
А, ну да, так бы и сказали, что под датчиками рассматриваете уже готовые модули (блоки), по типу того самого прецизионного делителя.
Я же привык к датчикам типа 1, 2, 3 и т.д., получая с них непосредственно измеряемую величину в том виде, в каком ее задумал производитель, без всяких промежуточных преобразований и прокладок.

PS
Перефразирую.
Один из нас берет непосредственно сенсор и добавляет к нему обвязку и интерфейс "для домохозяек".
Второй покупает созданный первым уже готовый модуль и ничтоже сумняшеся, что оно "само выросло", использует дальше.
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (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) );
Люблю Си...
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Кто сам изучил програмирование мк?

Сообщение dosikus »

У меня создается впечатление ,что ЛИ видит периферию STM , как совершенно раздельные модули , связанные меж собой только софтово и только через ядро . ЛИ , это так ?
nahimovv
Нашел транзистор. Понюхал.
Сообщения: 180
Зарегистрирован: Чт янв 23, 2014 01:51:35

Re: Кто сам изучил програмирование мк?

Сообщение nahimovv »

Леонид Иванович писал(а): Не сложно? Один таймер должен работать в режиме счета внешних импульсов, другой - в режиме захвата. Но разрешить их работу нужно строго одновременно. Как это сделать без внешней логики?
РадиоЛоматель писал(а): Если уж задаться целью вообще без внешней логики, то я бы сделал так
Да не тупите так безбожно, оба, срам! Прочтите хоть раз референс, наконец то! Есть режим Gated Mode! Даже в простенькой STM8L15X можно рулить 3-мя таймерами одновременно и мерять частоту по 3-ём входам без внешних навесок и соединений! :))) :))) :)))
nahimovv
Нашел транзистор. Понюхал.
Сообщения: 180
Зарегистрирован: Чт янв 23, 2014 01:51:35

Re: Кто сам изучил програмирование мк?

Сообщение nahimovv »

dosikus писал(а):У меня создается впечатление ,что ЛИ видит периферию STM , как совершенно раздельные модули
Он вообще ничего не видит, у него ужас в глазах, от обилия и возможностей, вот и растерялся. Для новичка это нормально, но ЛИ упорно не хочет признавать себя новичком в STM32, отсюда и все его реверансы. :music:
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Кто сам изучил програмирование мк?

Сообщение BOB51 »

РадиоЛоматель писал(а): Так вот, я тоже был АВР маньяком раньше. Даже веб сервер на ENC и Atmega128 сделал. Потратил около полугода на это, да так и не заработало толком. Хорошо, что попал на работу, где поставили жёсткое условие - STM32. Сначала долго мучился с пониманием, но когда научился пользоваться - программизм стал простой и быстрый. Особенно кайфую от наличия DMA.

Конечно, для обычной бегущей строки стм-ка несколько избыточна. Но это полностью компенсируется её стоимостью и лишь двухпроводным интерфейсом отладки/программирования.
Вот, в принципе, единственно экономически оправданное срочное освоение STM32 (работа заставила), есть правда и другой подход - тесновато становится в имеющемся в наличии перечне МК. :beer:
Только вот "не заработало толком" да еще на Atmega128... Больше показатель к теме "а все ли я умею в том, что уже проглотил?". 8) Да и АРМ у того же Атмела имеются - вполне логично было бы на эти МК перейти (все-ж "приемственность").
Чего касательно двухпроводного интерфейса программирования/отладки... не смешите - кто мешает на той же АВР сделать собственный бутлоадер/отладчик по любому понравившемуся протоколу? (То же самое касается любого МК с режимом самопрограммирования ПЗУ). :)
dosikus писал(а):У меня создается впечатление ,что ЛИ видит периферию STM , как совершенно раздельные модули , связанные меж собой только софтово и только через ядро . ЛИ , это так ?
Обмен данными может быть и аппаратным, только вот задание режимов работы/настройка миновать ядро никак не сможет.
Единственное исключение - работа "параллельного МК" в режиме отладчика - но то уже "нештатный" режим. :dont_know:
nahimovv
Нашел транзистор. Понюхал.
Сообщения: 180
Зарегистрирован: Чт янв 23, 2014 01:51:35

Re: Кто сам изучил програмирование мк?

Сообщение nahimovv »

BOB51 писал(а): Да и АРМ у того же Атмела имеются - вполне логично было бы на эти МК перейти (все-ж "приемственность").
Кому нужно это убогое, унылое гуано? "Приемственность" для лохов и адептов-даунов! :))) :)))
Чего касательно двухпроводного интерфейса программирования/отладки... не смешите - кто мешает на той же АВР сделать собственный бутлоадер/отладчик по любому понравившемуся протоколу?
Зачем? Когда у STM уже всё есть?
Обмен данными может быть и аппаратным, только вот задание режимов работы/настройка миновать ядро никак не сможет.
Единственное исключение - работа "параллельного МК" в режиме отладчика - но то уже "нештатный" режим. :dont_know:
Иногда лучше тихо курить, чем говорить! :))) :)))
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Кто сам изучил програмирование мк?

Сообщение a5021 »

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

Вернуться в «МЯЯЯУ!»