Например TDA7294

Форум РадиоКот • Просмотр темы - stm32f4 cmsis delay как сделать задержку для lcd
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 08:48:57

Часовой пояс: UTC + 3 часа


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



Начать новую тему Ответить на тему  [ Сообщений: 23 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Пн июл 27, 2020 13:51:41 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: -2
Кто подскажет как правильно написать задержку для LCD


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Пн июл 27, 2020 14:34:36 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
На конечных автоматах, например.

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Пн июл 27, 2020 14:48:01 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
а программно?


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Пн июл 27, 2020 14:58:15 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
тупо - "пустым" циклом
Код:
volatile int delay = 123;
while(delay) delay--;

менее тупо - на основе аппаратного или программного счетчика "системных тиков".
а совсем правильно (имхо, не утверждаю, что для всех LCD приемлемо) - на основе считывания регистра состояния LCD, т.е. работа не по задержке, а по готовности дисплея.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Пн июл 27, 2020 15:30:02 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
Чтоб соотвецвовало мили миикросекундам?


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Пн июл 27, 2020 16:25:31 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
а программно?

А что КА — железо?
Миллисекундные задержки очень удобно делать на КА: заводим внутренний счетчик и сравниваем на каждом прогоне с SysTick, который системные миллисекунды считает. Вряд ли у вас один прогон "суперлупа" будет длиться больше 1мс, поэтому получаем точность не хуже 1мс.
А вот микросекунды зачастую прямо на месте и отсчитывают — при помощи вспомогательного таймера или тупыми nop'ами в цикле (правда, в этом случае точность будет паршивой). Обычно такие паузы нужны лишь на инициализации, которая все равно в начале проходит и можно считать, что пользователю пофиг, что в течение пяти секунд устройство вообще ни на что не реагирует..

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

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Пн июл 27, 2020 21:21:35 
Первый раз сказал Мяу!
Аватар пользователя

Карма: 3
Рейтинг сообщений: 19
Зарегистрирован: Чт май 14, 2015 16:58:00
Сообщений: 35
Откуда: Kharkiv
Рейтинг сообщения: 0
Делаю через DWT

Код:
void DelayMs(uint32_t nTime)
{
   volatile uint32_t CounterTick = nTime * (SystemCoreClock / 1000);

   SCB_DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;      //разрешаем использовать счётчик
      DWT_CYCCNT  = 0;                     //обнуляем значение счётного регистра
      DWT_CONTROL |= DWT_CTRL_CYCCNTENA_Msk;      //запускаем счётчик
      while(DWT_CYCCNT < CounterTick);
      DWT_CONTROL &= ~DWT_CTRL_CYCCNTENA_Msk;      //останавливаем счётчик
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Вт июл 28, 2020 05:05:13 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
В реферес мануал его нет где прочитать про него?DWT


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Вт июл 28, 2020 08:51:10 
Электрический кот
Аватар пользователя

Карма: 4
Рейтинг сообщений: 135
Зарегистрирован: Сб мар 09, 2013 11:29:22
Сообщений: 1020
Откуда: 40RUS, Жуков
Рейтинг сообщения: 0
https://www.google.ru/search?newwindow= ... ent=psy-ab

_________________
IVL ex UA6PJ OSC_F303


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Вт июл 28, 2020 21:29:19 
Первый раз сказал Мяу!
Аватар пользователя

Карма: 3
Рейтинг сообщений: 19
Зарегистрирован: Чт май 14, 2015 16:58:00
Сообщений: 35
Откуда: Kharkiv
Рейтинг сообщения: 0
сорри, забыл добавить дефайны:
Код:
#define    DWT_CYCCNT    *(volatile unsigned long *)0xE0001004
#define    DWT_CONTROL   *(volatile unsigned long *)0xE0001000
#define    SCB_DEMCR     *(volatile unsigned long *)0xE000EDFC


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Сб апр 10, 2021 10:55:11 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
а на базовом таймере как єто сделать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Ср апр 14, 2021 07:49:53 
Открыл глаза

Зарегистрирован: Вс мар 21, 2021 11:06:04
Сообщений: 41
Рейтинг сообщения: 0
а на базовом таймере как єто сделать?

Обычно это делается на любом свободном аппаратном таймере методом вычитывания и обработки значения его счетного регистра. Без использования прерываний. Подробнее про реализацию можно прочитать тут. Максимальный интервал времени для такого таймера определяется периодом перезагрузки его счетного регистра.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Ср апр 14, 2021 07:59:52 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Professor Chaos писал(а):
Подробнее про реализацию можно прочитать тут.
облагороженная версия ардуиновского millis() и ардуиновского же подхода...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Ср апр 14, 2021 12:07:53 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
1 вариант:
Спойлер
Код:
void Delay(uint32_t ms)
{
        volatile uint32_t nCount;
        RCC_ClocksTypeDef RCC_Clocks;
        RCC_GetClocksFreq (&RCC_Clocks);
        nCount=(RCC_Clocks.HCLK_Frequency/10000)*ms;   
        for (; nCount!=0; nCount--);
}
2 вариант:
Спойлерверсия ардуиновского millis()
Код:
// Конфигурируем и запуск системного таймера
// для генерации каждую 1 мс.

SysTick->LOAD = 48000000UL/1000 - 1; // Загрузка значения в 1 ms
SysTick->VAL = 48000000UL/1000 - 1; // Устанавливаем текущее значение
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;


volatile uint32_t currentMillis = 0;
//Обработчик прерывания системного таймера
void SysTick_Handler(void)
{
   currentMillis++;
}


uint32_t millis (void)
{
   return currentMillis;
}


uint32_t previousMillis = 0;
if((millis() - previousMillis) > 500){
   previousMillis = millis();
   //делаем что-то
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Ср апр 14, 2021 22:41:39 
Открыл глаза

Зарегистрирован: Вс мар 21, 2021 11:06:04
Сообщений: 41
Рейтинг сообщения: 0
Dimon456 писал(а):
nCount=(RCC_Clocks.HCLK_Frequency/10000)*ms;   
        for (; nCount!=0; nCount--);

Вы строите этот код исходя из предположения, что одна итерация цикла for будет исполняться строго за 1 период тактовой частоты ядра? А если это не так? А это, в общем случае не так, и зависит от настроек оптимизации - тогда что?

Во втором варианте не учитывается событие переполнения счетчика: пусть последнее предыдущее значение 0хFFFFFFFF, текущее прочитанное 0. Сколько прошло времени? А что покажет условие?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Чт апр 15, 2021 13:18:17 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Professor Chaos писал(а):
Вы строите этот код исходя из предположения,
А вот мне "на.... с глубокой горки", главное работает и ладно, просто из вас ни кто ни чего не предложил, кроме слов конечно.

Делаю так:
Спойлер-Os
Код:
    while(1)
    {
      GPIOA->ODR |= GPIO_Pin_2;
      Delay(100); // Delay(1); Delay(10);
      GPIOA->ODR &= ~GPIO_Pin_2;   
   }
и вот это строчку
Код:
RCC_Clocks.HCLK_Frequency/10000
добиваю или убираю нулями.
А смотреть по осциллографу, или частотомеру
Professor Chaos писал(а):
Во втором варианте не учитывается событие переполнения счетчика
Да плевать и на это
Спойлер
Код:
   if((millis() - previousMillis) > 500){
      previousMillis = millis();
      blink = !blink;
   }

   LCDI2C_setCursor (10,0);
   if (blink) LCDI2C_write(0x22); else LCDI2C_write(0x20);
А событие переполнения у вас произойдет где-то через 4294967295/1000/3600/24 = 49 дней.

Не нравится, делайте на конечных автоматах, там все учитывается, да же размер кода.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Чт апр 15, 2021 19:51:55 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
а как сделать задержку таймером базовым?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Чт апр 15, 2021 23:02:54 
Открыл глаза

Зарегистрирован: Вс мар 21, 2021 11:06:04
Сообщений: 41
Рейтинг сообщения: 0
а как сделать задержку таймером базовым?

Что такое базовый таймер? Вы, вообще, какой МК имеете ввиду? У ARM много разных ядер, и куча производителей используют их в своих контроллерах/процессорах. И понятие базового таймера везде разное. В ядре есть системный таймер. Другие таймеры каждый производитель реализует как хочет в качестве периферийных устройств.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Чт апр 15, 2021 23:04:11 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 80
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Сообщений: 445
Откуда: 69.Ржев
Рейтинг сообщения: 0
есть еще варианты как слова в вопросе переставить :)
или такой ответ сойдет:
Код:
TIM3->PSC = 56-1;      // предварительная
TIM3->ARR = 10-1;      // подготовка
TIM3->EGR = TIM_EGR_UG; // таймера
...
TIM3->CR1 = TIM_CR1_CEN|TIM_CR1_OPM;      // старт таймера
...
if (!(TIM3->CR1&TIM_CR1_CEN)) {...;}      // проверка с выполнением, если оттикал
или заLoopить на тупой опрос бита:
while(TIM3->CR1&TIM_CR1_CEN){};            // висеть если еще тикает

:write:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f4 cmsis delay как сделать задержку для lcd
СообщениеДобавлено: Чт апр 15, 2021 23:15:31 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
TIM3->CR1 = TIM_CR1_CEN|TIM_CR1_OPM; и будет один импулс.Этот бит _OPM; один импулс


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

Часовой пояс: UTC + 3 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


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

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


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