Например TDA7294

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



Текущее время: Ср июл 17, 2019 22:10:40

Часовой пояс: 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 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

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

Карма: 15
Рейтинг сообщений: 142
Зарегистрирован: Вс июн 19, 2016 10:32:03
Сообщений: 814
Рейтинг сообщения: 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
Сообщений: 621
Рейтинг сообщения: 0
во втором не мигает...
Что значит не мигает? Может там частота >100 Гц и ты её глазом не видишь? Прибор ткнуть надо.


Вернуться наверх
 
Плавкие предохранители LittelFuse. Грамотный подбор

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

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

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


Вернуться наверх
 
Немногим дороже дискретного решения: новое поколение импульсных стабилизаторов Mornsun

Практически во всех радиоэлектронных устройствах массово применяются линейные понижающие стабилизаторы напряжения типа КРЕН в корпусе TO220 (другое обозначение – 78хх) и им подобные для формирования основного напряжения питания схемы.
Данные стабилизаторы позволяют без особых затрат получить нужное для каскада или узла схемы напряжение, если устройство питается от внешнего источника с более высоким напряжением. Для этого требуются… Подробнее>>
Не в сети
 Заголовок сообщения: 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 
Опытный кот

Карма: 15
Рейтинг сообщений: 142
Зарегистрирован: Вс июн 19, 2016 10:32:03
Сообщений: 814
Рейтинг сообщения: 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 
Опытный кот

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

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


Вернуться наверх
 
Купить электронные компоненты в LCSC

Отправка со склада через 4 часа после заказа!
900 000 пользователей, 3000+ заказов в день!
Зарегистрируйтесь сегодня и получите скидку 8 долларов на первый заказ!
Не в сети
 Заголовок сообщения: 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 
Опытный кот

Карма: 15
Рейтинг сообщений: 142
Зарегистрирован: Вс июн 19, 2016 10:32:03
Сообщений: 814
Рейтинг сообщения: 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 часа [ Летнее время ]


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

Сейчас этот форум просматривают: Myp3ik и гости: 7


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

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


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