Например TDA7294

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





Текущее время: Чт апр 18, 2024 08:57:17

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


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



Начать новую тему Ответить на тему  [ Сообщений: 270 ]    , 2, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 14:25:27 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
Ну хорошо а как в тиках Знак > или >= или == как будет правильно работать.Если в прерывании мы выставляем тики.В AVR запрещают прерывания потом разрешают при знаке > и >=.А как в stm32?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 14:43:13 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
ivan dimir, чисто ради интереса, ты же электрик, на одной фазе 6В, на двух других 300В, напряжение измерено по отношению фаза и нуль. В чем причина?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 14:54:06 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
Две причины. Перекос фаз говорит что на этой фазе перегруз. А если на других 300.То плохой ноль на подстанции или на подходе по ЛЭП или ВЛ(воздушная линия).Одна фаза перегружена.Если бы был уверенный ноль.То такого перекоса не было.Ну 6в по мне это КЗ короткое замыкание.Почти 30 лет стажа.

Добавлено after 1 minute 23 seconds:
Dimon456, Вы наверное работаете программистом?.


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 14:55:48 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Пн июл 04, 2016 16:51:22
Сообщений: 196
Откуда: Россия, Омск
Рейтинг сообщения: 0
Ну хорошо а как в тиках Знак > или >= или == как будет правильно работать.Если в прерывании мы выставляем тики.В AVR запрещают прерывания потом разрешают при знаке > и >=.А как в stm32?

Какие тики выставляем? Зачем?
В прерывании обычно делают минимальную обработку.
А те операторы, что Вы перечислили, это:
> - оператор сравнения: больше
>= - оператор сравнения: больше или равно
== - оператор сравнения: равно.

Прерывание - лишь выполнение кода в другом месте.
Скажем, Вы читаете Есенина, вдруг рядом пролетает муха и её нужно отогнать. Затем Вы продолжаете чтение.

Операторы сравнения - это операторы сравнения.
Прерывания запрещают для атомарности операций. Некоторые любят это делать без причины, поскольку чаще всего это излишне.


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 14:58:57 
Мучитель микросхем

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


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 15:49:27 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
ivan dimir писал(а):
Ну 6в по мне это КЗ короткое замыкание.
Я удивлен, наш электрик не знает этого, хотя в начальниках ходит, инженер. Его первый вопрос был - а такое бывает.
ivan dimir писал(а):
Вы наверное работаете программистом?
Нет, я уголь в топку кидаю, за это платят.
А за программу пока заплатят, и заплатят ли, больше времени потратишь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 15:59:50 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
Ну в начальниках я никогда не ходил.А вот бетон на работе приходилось.Мисить.Дело не хитрое.Подобноле бывает.Но не 6 в и 300 в .А фА 150в ф В 200 в .И фС 300 в.6в в трёхфазном токе относительно 0.4кВ классифицируется как короткое оносительно нуля.

Добавлено after 3 minutes 12 seconds:
Да и за это остался без работы.Не захотел бетон месить. Я нанимался электриком.Почему я так спросил.Потому что тут и неполное короткое.И непоолный обрыв.Это редко.В моей практики такого не было.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 16:28:00 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1054
Рейтинг сообщения: 0
ivan dimir писал(а):
Хотя если флаг таки не выставится - то процессор и не выйдет из цикла и программа зависнет.

И это нормально? Ну-ну.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 17:37:52 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
[code][/code]
while (!(I2C1->SR1 & I2C_SR1_TXE));
А вот так правильно?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 18:17:30 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1054
Рейтинг сообщения: 0
Код:

while (!(I2C1->SR1 & I2C_SR1_TXE));
А вот так правильно?

Код ниже- это компиляция из нескольких источников. Основной вдохновитель- Vladislav_S. В waitBit() нужно добавить счётчик циклов, тогда код, даже теоретически, никогда не зависнет.
Спойлер
Код:
int16
I2C_Master::readRegister8( uint8 _addr, uint8 _reg, uint8* _data, int16* _status )
{
    int16
        cnt = 0;

    uint32
        st;

    // Wait for BUSY line
    do
    {
        st = i2c -> SR2;
    }
    while( st & I2C_SR2_BUSY );

    // Generate START condition
    i2c -> CR1 |= ( I2C_CR1_START | I2C_CR1_PE | I2C_CR1_ACK );

    do
    {
        st = i2c -> SR1;
    }
    while( !( st & I2C_SR1_SB ) );

    i2c -> DR = ( _addr << 1 );             // Write device address (W)

    if( !( waitBit< I2C_SR1_ADDR >() ) )
    {
        return( 0 );
    }

    ( void ) i2c -> SR2;                    // Read SR2

    if( !waitBit< I2C_SR1_TXE >() )
    {
        return( 0 );
    }

    i2c -> DR = _reg;

    i2c -> CR1 |= ( I2C_CR1_STOP | I2C_CR1_PE );    // Generate STOP condition

    asm( "nop" );

    i2c -> CR1 |= ( I2C_CR1_START | I2C_CR1_PE );   // Generate START condition

    do
    {
        st = i2c -> SR1;
    }
    while( !( st & I2C_SR1_SB ) );

    i2c -> DR = ( _addr << 1 ) | 0x01;      // Write device address (R)

    if( !( waitBit< I2C_SR1_ADDR >() ) )
    {
        return( 0 );
    }

    i2c -> CR1 &= ~( I2C_CR1_ACK );         // No ACK
    ( void ) i2c -> SR2;                    // Read SR2

    if( !( waitBit< I2C_SR1_RXNE >() ) )
    {
        return( 0 );
    }

    uint8
        value = ( uint8 ) i2c -> DR;        // Read value

    if( _data )
    {
        *_data = value;
        cnt++;
    }

    i2c -> CR1 |= ( I2C_CR1_STOP | I2C_CR1_PE );    // Generate STOP condition

    if( _status )
    {
        *_status &= ~( I2C_ERROR::BUSY );
    }

    return( cnt );
}

////////////////////////////////////////////////////////////////////////////////

template< uint32 _aBit >
bool I2C_Master::waitBit( void )
{
    uint32
        status;

    do
    {
        status = i2c -> SR1;

        if( status & ( I2C_SR1_AF | I2C_SR1_ARLO | I2C_SR1_BERR ) )
        {
            i2c -> CR1 = ( I2C_CR1_PE | I2C_CR1_STOP );
            i2c -> SR1 = 0;

            return( false );
        }

    }
    while( !( status & _aBit ) );

    return( true );
}



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 18:59:29 
Мучитель микросхем

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

Добавлено after 1 minute 4 seconds:
Может лучше ацп использовать?

Добавлено after 25 minutes 18 seconds:
А при нажатии + а потом - виснет программа?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 19:36:38 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1054
Рейтинг сообщения: 0
Есть несколько алгоритмов. По-моему, один из самых простых:

1) если поймали фронт сигнала нажатия кнопки, запустили таймер задержки для этой кнопки;
2) если таймер закончил счёт, то проверяем состояние кнопки. Если состояние кнопки всё равно нажатое, то действительно нажали кнопку.

Дребезг не только у кнопок, но и сигнальных контактов. На кнопках дребезг, обычно, 10-50мс, а вот на конечниках с оборудования может доходить до 500мс. Поэтому я и похихикал про аппаратное подавление дребезга конденсатором на 0.1мкФ.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 19:47:00 
Опытный кот

Карма: -2
Рейтинг сообщений: 35
Зарегистрирован: Пн сен 10, 2018 19:16:28
Сообщений: 817
Рейтинг сообщения: 0
tonyk, Зачем задерживать нажатие кнопки? Нажал и обработал. Какие проблемы? Если хочешь второй раз нажать, то это другая тема.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пн янв 17, 2022 19:51:28 
Мучитель микросхем

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

А при нажатии дикримента подвесает.Инкремент работает в норме.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Вт янв 18, 2022 11:12:06 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Пн июл 04, 2016 16:51:22
Сообщений: 196
Откуда: Россия, Омск
Рейтинг сообщения: 0
Если обработка кнопки приводит к зависанию - то что-то не так в коде.
Проверьте, что:
1. Выполнение кода точно доходит до обработчика нажатия;
2. Обработчик при нажатии кнопки выполняется ОДИН раз;
3. Обработчик после обработки ФАКТА нажатия кнопки, отдаёт управление коду за ним;
4. В конце концов, что после 1-2-3 что-то происходит и это можно увидеть. Да хотя бы диоды подключите на ножки, чтобы видеть события. Если не хочется диоды - используйте вывод в консоль (SW-TRACE) и выводите сообщения в эту самую консоль. Всё станет в разы понятнее.

Собственно, я всегда стараюсь придерживаться этих правил и код работает.
А по логам значительно проще понять что где происходит (главное не повесить ядро самими логами и использовать их минимально необходимое количество).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Вт янв 18, 2022 11:23:35 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
Не та переменная била установленна.Тип не тот unsigned int.unsigned short int-нужно.В мкрочип студии таких багов небыло.Да и в Атолике не было.И ещё один факт кнопки не тактовые.Замыкаешь контакты идёт.А так Нужно повторно.Не достаёт площадка.Дорого но некачественно.Китай.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Вт янв 18, 2022 12:15:39 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Пн июл 04, 2016 16:51:22
Сообщений: 196
Откуда: Россия, Омск
Рейтинг сообщения: 0
Для STM32 unsigned int = uint32_t, unsigned short int скорее всего окажется uint16_t. Вторая на 32 битном ядре может оказаться медленнее.
> В мкрочип студии таких багов небыло.
Не факт, что баг. Для разной архитектуры размер int'а может меняться. Это стандарт языка Си.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Вт янв 18, 2022 13:38:55 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
Для STM32 unsigned int = uint32_t, unsigned short int скорее всего окажется uint16_t. Вторая на 32 битном ядре может оказаться медленнее.
> В мкрочип студии таких багов небыло.
Не факт, что баг. Для разной архитектуры размер int'а может меняться. Это стандарт языка Си.

в этом то и прикол что unsigned int а я считаю декремент.И у меня в коде вроде переход нуля если я поменяю код напишу как ваш колега подсказал.У меня идут значения через ноль потом показывает минус и уменьшаются в минусах.Проверенно в железе.Я сижу и играюсь.И поменял я просто тип переменной.uint32_t -пишет ошибку кода.Так как число 2 байтовое то я его принимаю побайтно a=((unsigned int )a1<<8)|a2;
и вывожу на экран потом разделяю
a1=a/256;
a2=a%256;
и записую в EEPROM по байтно.Функции использовал.А они особенно по приёму не читают.Да я как Шариков .Взять и разделить.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Вт янв 18, 2022 15:12:20 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1054
Рейтинг сообщения: 0
tonyk, Зачем задерживать нажатие кнопки? Нажал и обработал. Какие проблемы? Если хочешь второй раз нажать, то это другая тема.

Приплыли. Я описал стандартный алгоритм подавления дребезга. Повторное нажатие и автоповтор- это другая тема.

Добавлено after 14 minutes 30 seconds:
ivan dimir писал(а):
Хорошо.Но как лучше уйти от дребезга контакта?В кнопке.

Использовать кнопки со встроенными SR-триггерами. Только вот зачем? Алгоритм, описанный мной выше, очень просто реализуется конечным автоматом, поэтому даже на стареньких 8051 работал быстро и требовал мало ресурсов.

Я плохо понял, чё там за проблема выше, но, по-моему, ты неправильно изменяешь значения переменных в прерываниях. И компилятор тут не причём. Смотри:
Код:
    switch( _spi_n )
    {
        case 1:
        {
            spi = SPI1;
            APB_n = 2;
            APB_freq = getAPB2frequency();

            taskENTER_CRITICAL();
            {
                // Включаеи тактирование порта.
                RCC -> APB2ENR |= RCC_APB2ENR_SPI1EN;

            }
            taskEXIT_CRITICAL();

            break;
        }

Программа работает под многозадачной FreeRTOS. Обрати внимание на включение тактирования порта. Мораль сей басни такова: любое изменение переменной должно делаться только в одном потоке, а если нужно делать его из нескольких потоков или прерываний, то операция изменения должна обрамляться критической секцией. Иначе словишь двойной инкремент или декремент.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Вт янв 18, 2022 15:46:59 
Мучитель микросхем

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

Добавлено after 1 minute 47 seconds:
Я думал меню создать на switch.Или я не так всё понял.Ну я ж не русский.


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

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


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

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


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

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


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