Например TDA7294

Форум РадиоКот • Просмотр темы - STM8S время выполнения цикла...
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Ср май 22, 2019 11:47:06

Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM8S время выполнения цикла...
СообщениеДобавлено: Вт май 14, 2019 09:21:12 
Родился

Зарегистрирован: Пт мар 29, 2019 00:41:10
Сообщений: 8
Рейтинг сообщения: 0
Случайно столкнулся с необъяснимым (пока) для меня фактом. Есть два устройства на базе STM8S, оба работают на внутреннем HSI 16мГц. Использую в обоих задержку для мигания светодиодом. Текст кода цикла:

Код:
if (k>400000) {
        GPIO_WriteReverse(GPIOC, GPIO_PIN_7);          //GPIOС->ODR ^= (uint8_t)GPIO_PIN_7;
        k=0;
}
else k++;


В первом устройстве в общем цикле опрашивается датчик DS18B20, во втором опрашиваются два цифровых входа. В первом устройстве светодиод мигает, во втором не мигает... Начал разбираться - обнаружил, что если во втором меняю количество итераций на 254 - светодиод начинает мигать примерно с той же частотой, что и в первом устройстве... Почему такая колоссальная разница? Опрос датчика получается быстрее в 1600 раз чем опрос двух цифровых входов?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM8S время выполнения цикла...
СообщениеДобавлено: Вт май 14, 2019 09:37:33 
Родился
Аватар пользователя

Зарегистрирован: Пн май 13, 2019 11:18:22
Сообщений: 1
Рейтинг сообщения: 1
Как объявлена переменная k?


Вернуться наверх
 
JLCPCB, всего $2 за 10 ПП любого цвета!

Более 600 000 заказчиков по всему миру! Более 10 000 заказов в день!

Скидка до $20 на доставку для первого заказа:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: STM8S время выполнения цикла...
СообщениеДобавлено: Вт май 14, 2019 11:09:48 
Опытный кот

Карма: 13
Рейтинг сообщений: 133
Зарегистрирован: Вс июн 19, 2016 10:32:03
Сообщений: 777
Рейтинг сообщения: 0
Sergeba, думать начинай, на втором форуме опять приводишь бесполезный фрагмент кода, хотя на самом деле внутри цикла полно пауз на 5-10 ms, которые умноженные на 254 дают получаемую задержку.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay
Не в сети
 Заголовок сообщения: Re: STM8S время выполнения цикла...
СообщениеДобавлено: Вт май 14, 2019 11:14:34 
Вымогатель припоя
Аватар пользователя

Карма: 10
Рейтинг сообщений: 66
Зарегистрирован: Вт май 01, 2018 20:44:47
Сообщений: 604
Рейтинг сообщения: 0
во втором не мигает...
Что значит не мигает? Может там частота >100 Гц и ты её глазом не видишь? Прибор ткнуть надо.


Вернуться наверх
 
Энергоёмкие и мощные литиевые батарейки FANSO

Для датчиков охранно-пожарной сигнализации, устройств учёта ресурсов и других промышленных применений в широком температурном диапазоне.

Цилиндрические батарейки, плоские ультратонкие, а с 2019 года и в форме "таблетки". Характеризуются высоким качеством и доступной стоимостью.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM8S время выполнения цикла...
СообщениеДобавлено: Вт май 14, 2019 11:16:39 
Опытный кот

Карма: 13
Рейтинг сообщений: 133
Зарегистрирован: Вс июн 19, 2016 10:32:03
Сообщений: 777
Рейтинг сообщения: 0
Что значит не мигает? Может там частота >100 Гц и ты её глазом не видишь? Прибор ткнуть надо.

Наоборот, при 254 стало мигать с периодом 1.5с, а было видимо тоже 400000...


Вернуться наверх
 
Бюджетные Wi-Fi-/ Bluetooth-решения для IoT-применения

Обзор основной линейки поставок и новинок Espressif Systems - экономически выгодных SoC Wi-Fi-/ Bluetooth-чипов и модулей для IoT-применений: от простых портативных устройств до промышленных решений.
Подробнее...
Не в сети
 Заголовок сообщения: Re: STM8S время выполнения цикла...
СообщениеДобавлено: Вт май 14, 2019 22:01:32 
Родился

Зарегистрирован: Пт мар 29, 2019 00:41:10
Сообщений: 8
Рейтинг сообщения: 0
Как объявлена переменная k?


long int

Sergeba, бесполезный фрагмент кода, хотя на самом деле внутри цикла полно пауз на 5-10 ms, которые умноженные на 254 дают получаемую задержку.


Вы второй форум невнимательно читаете. Эти задержки не выполняются, когда на входах прибора отсутствуют сигналы, а они большую часть работы прибора отсутствуют т.к. это кнопки привода электромотора. (Для бОльшей убедительности я убрал эти задержки из кода программы - ничего не изменилось).

Наоборот, при 254 стало мигать с периодом 1.5с, а было видимо тоже 400000...


Всё верно, первое устройство делал с датчиком температуры и там цикл 400000 отрабатывал нормально, скопировал код во второй прибор - не мигает в таком цикле. Стал смотреть изменение переменной - увидел что изменение происходит медленнее, чем предполагал, изменил цикл на 254 - стал мигать.

Добавлено after 9 minutes 36 seconds:
Чтобы было понятно о чём речь - вот код, который выполняется 254 раза за 1,5 секунды:



Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: STM8S время выполнения цикла...
СообщениеДобавлено: Вт май 14, 2019 22:33:07 
Опытный кот

Карма: 13
Рейтинг сообщений: 133
Зарегистрирован: Вс июн 19, 2016 10:32:03
Сообщений: 777
Рейтинг сообщения: 0
(Для бОльшей убедительности я убрал эти задержки из кода программы - ничего не изменилось).

Убери задержки из второго проекта, где 254.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: STM8S время выполнения цикла...
СообщениеДобавлено: Ср май 15, 2019 00:56:14 
Родился

Зарегистрирован: Пт мар 29, 2019 00:41:10
Сообщений: 8
Рейтинг сообщения: 0
(Для бОльшей убедительности я убрал эти задержки из кода программы - ничего не изменилось).

Убери задержки из второго проекта, где 254.


Странно... Я вроде бы по русски написал: я убрал эти задержки из кода программы - ничего не изменилось, а Вы мне опять советуете их убрать...


Вернуться наверх
 
Prist.ru предлагает скидку всем частным лицам при покупке приборов АКИП, GW Instek, APPA (кроме осциллографов АКИП-4115/1А, GDS-71102)!

Интересные новинки уже на складе:

Осциллограф АКИП-4126Е

Многоканальные источники питания серии GPP

Не в сети
 Заголовок сообщения: Re: STM8S время выполнения цикла...
СообщениеДобавлено: Ср май 15, 2019 01:17:45 
Опытный кот

Карма: 13
Рейтинг сообщений: 133
Зарегистрирован: Вс июн 19, 2016 10:32:03
Сообщений: 777
Рейтинг сообщения: 0
Странно... Я вроде бы по русски написал: я убрал эти задержки из кода программы - ничего не изменилось, а Вы мне опять советуете их убрать...

Т.е. у тебя такой код мигает с периодом 1.5 сек?
Код:
while(1)
{
   if (k > 254)
   {
        GPIO_WriteReverse(GPIOC, GPIO_PIN_7);
        k=0;
   }
   else k++;
}


Вернуться наверх
 
Хороший помощник- половина работы!

Надежные источники питания, осциллографы, паяльные станции, цифровые микроскопы в интернет-магазине Суперайс!

Индивидуальные скидки, акции, бесплатная доставка.
Не в сети
 Заголовок сообщения: Re: STM8S время выполнения цикла...
СообщениеДобавлено: Ср май 15, 2019 09:04:48 
Родился

Зарегистрирован: Пт мар 29, 2019 00:41:10
Сообщений: 8
Рейтинг сообщения: 0
Reflector писал(а):
Т.е. у тебя такой код мигает с периодом 1.5 сек?


Нет, я убрал только обращения к функции Delay() (хотя из кода понятно, что они не должны влиять на выполнение цикла на холостом ходу), остальное не трогал. Т.е. операторы if и поллинг Modbus остался в коде. Мигает с периодом 1,5сек.
Вечером попробую методом постепенного исключения найти виновника задержки...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM8S время выполнения цикла...
СообщениеДобавлено: Ср май 15, 2019 10:03:47 
Опытный кот

Карма: 13
Рейтинг сообщений: 133
Зарегистрирован: Вс июн 19, 2016 10:32:03
Сообщений: 777
Рейтинг сообщения: 0
Так, что-то и я уже начал тупить :) В общем изначально понятно, что если второй цикл выполняется в 1600 раз медленнее, а делает практически то же самое, значит где-то выполняются дополнительные операции и Delay был наиболее вероятным кандидатом. Тем более для 1.5с нужна пауза ~6ms, а они там по 5-10ms.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM8S время выполнения цикла...
СообщениеДобавлено: Ср май 15, 2019 20:28:10 
Родился

Зарегистрирован: Пт мар 29, 2019 00:41:10
Сообщений: 8
Рейтинг сообщения: 0
В общем изначально понятно, что если второй цикл выполняется в 1600 раз медленнее, а делает практически то же самое, значит где-то выполняются дополнительные операции и Delay был наиболее вероятным кандидатом. Тем более для 1.5с нужна пауза ~6ms, а они там по 5-10ms.


Да, Вы оказались правы отчасти. Я нашёл виновника задержки. Вчера я убрал только Delay(10000), но они действительно не обрабатываются в холостом цикле и не влияли на время исполнения, но я не убрал Delay(5000)... Эта задержка обрабатывается в холостом цикле. Убрал её - цикл ускорился. Но как оказалось всё равно опрос датчика получается происходит быстрее, чем опрос двух цифровых входов. Чтобы добиться приблизительно одинакового мигания - на устройстве, где датчик температуры прописано 400000 циклов, на устройстве опроса двух входов - 180000. Т.е. скорость отличается в 2,2 раза.

Добавлено after 9 minutes 23 seconds:
Теперь бы разобраться ещё с тактированием... Устройство с опросом цифровых входов имеет внешний резонатор на 8000Мгц. Для этого устройства портировал FreeModbus по инструкции, но там используется внутренний генератор 16Мгц. Задержки на таймере соответственно рассчитаны. Пробую запустить внешний кварц, при этом меняю коэфициент задержки по прилагаемой формуле - хрен - не работает modbus... Так и оставил пока работу на внутреннем генераторе...

Вот код для настройки таймера с формулой расчёта:

Код:
/* TIM4 configuration:
   - TIM4CLK is set to 16 MHz, the TIM4 Prescaler is equal to 128 so the TIM1 counter
   clock used is 16 MHz / 128 = 125 000 Hz
  - With 125 000 Hz we can generate time base:
      max time base is 2.048 ms if TIM4_PERIOD = 255 --> (255 + 1) / 125000 = 2.048 ms
      min time base is 0.016 ms if TIM4_PERIOD = 1   --> (  1 + 1) / 125000 = 0.016 ms
                                                           --> 16us
  - In this example we need to generate a time base equal to 50us
   so TIM4_PERIOD = (0.00005 * 125000 - 1) = 5 */
    /* Time base configuration */
  TIM4_TimeBaseInit(TIM4_PRESCALER_128, (5*usTim1Timerout50us));


Для 8Мгц меняю коэфициент с 5 на 2.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot] и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y