Перейти к содержанию

Вопросы от начинающих по МК


Рекомендуемые сообщения

проще поставить рядом любую маленькую епромку I2C и не парить мозг. Все предложенные вами варианты не торт и гарантированного результата не дадут

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

8 минут назад, mail_robot сказал:

проще поставить рядом любую маленькую епромку I2C и не парить мозг

Думал, но несколько ограничен в размерах ПП и еепром не влезет, да и ставить еепром ради записи одного значения, как-то не очень.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Так и EEPROM-ки маленькие бывают, в смысле объёма. на 128 байт, например. А ещё современней FRAM чип, с бесконечным числом циклов перезаписи.

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

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

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

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

9 hours ago, Lopnul said:

НО у F030 вроде как 1'000 циклов на запись

а кто вам такую ерунду сказал?

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, mail_robot сказал:

а кто вам такую ерунду сказал?

В ДШ вроде так:

7.gif.a116ffd5ea813bbac8fd03cb97863e1d.gif

9 часов назад, Alexeyslav сказал:

Так и EEPROM-ки маленькие бывают, в смысле объёма. на 128 байт, например.

Самый миниатюрный eeprom, который мне попался в магазине это в корпусе SOT23-5L. А к нему потом потянется емкость по питанию, плюс 2 подтягивающих сопротивления.

9 часов назад, Alexeyslav сказал:

Не надо писать при выключении - отсчитайте 10 сеунд после последнего изменения и пишите.

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

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Lopnul сказал:

В ДШ вроде так:

Дело тут не в ДШ. При эмуляции флеша данных (EEPROM) в программном флеше нужно учесть, что стирать по одной ячейке НЕ ВЫЙДЕТ. Стирание происходит довольно большими блоками. Деградация памяти происходит примерно в равной степени и от стирания и от записи. Поэтому необходима СКОЛЬЗЯЩАЯ запись данных в программный флеш. Для этого выделяют часть программного слова под эмуляцию адреса EEPROM и запись ведут все время на свежей области, НЕ СТИРАЯ БЛОК. Стирают, когда место в блоке закончилось ОДИН РАЗ  и начинают запись с начала. Каждое обращение в этот эмулированный EEPROM требует поиска последней записи (лучше это делать с конца блока). Чтобы ускорить процесс, целесообразно держать в ОЗУ копию содержимого такого EEPROM и эту копию обновлять лишь при включении. А запись делать, как уже сказали выше, через определенный таймаут после смены переменной.

Все это позволяет умножить 1000 циклов по ДШ на число записей в блоке. Если блок состоит из 1024 слов, а запись равна одному слову, то число циклов станет равно 1.000.000.

1 час назад, Lopnul сказал:

а что если произойдет выбор режима и сразу выключат.

Как правило, это ерунда. Можно снизить таймаут до 2...3 сек и сделать задержку выключения на такое же время. Если выключение делают путем жесткого выдергивания питания, то нужно ОГОВОРИТЬ эту ситуацию в эксплуатационных документах. В конце концов, мало ли что можно вытворять с устройствами...

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

10 минут назад, my504 сказал:

Поэтому необходима СКОЛЬЗЯЩАЯ запись данных в программный флеш. Для этого выделяют часть программного слова под эмуляцию адреса EEPROM и запись ведут все время на свежей области, НЕ СТИРАЯ БЛОК.

Насколько мне известно, то без удаления всего блока нельзя записать данные, поэтому пока не совсем понятно, как можно вести дозапись не стирая блок.

15 минут назад, my504 сказал:

Все это позволяет умножить 1000 циклов по ДШ на число записей в блоке.

Данный вариант действительно интересен, т.к. далее можно (если надо будет) вести учет ресурса блока и со временем менять адресацию.

16 минут назад, my504 сказал:

Если выключение делают путем жесткого выдергивания питания

Как раз это именно данный вариант.

Ссылка на комментарий
Поделиться на другие сайты

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

Это как школьная доска. Тряпкой стерли всю доску, а написали одно слово в углу. Остальная поверхность доски годится для записей, пока вся площадь не будет исписана. Вот тогда и новое стирание доски (блока :)).

Ссылка на комментарий
Поделиться на другие сайты

@Геннадий действительно, только что попробовал и значения спокойно записываются в пустую ячейку (FFFFFFFF) без стирания всего блока, до этого думал, что необходимо ВСЕГДА стирать весь блок перед любой записью. А блок по сути надо стирать, только когда значения в конкретной ячейке необходимо перезаписать. В таком случае вопрос о 1'000 циклах можно снимать, как выше подсказал @my504 буду последовательно записывать значения в пустые ячейки и по достижению границы блока, стирать и начинать заново.

Ссылка на комментарий
Поделиться на другие сайты

4 hours ago, Lopnul said:

А к нему потом потянется емкость по питанию, плюс 2 подтягивающих сопротивления.

емкость этой микрухе не нужна. У нее нет таких режимов, чтобы требовать обязательно блока на питании. А подтягивающие резисторы в 030-ых уже встроены в камень и могут включаться программно. Почитайте мануал. Это одна из удобных фишек F0хх

Обычно если надо хранить мало мало информации, то можно использовать область регистров таймера (retention registers)? но надо тогда организовывать батарейку, так как это SRAM. И в вашем случае тоже как бы не вариант. Батарейка намного больше любой микрухи. Но для общего развития знать полезно

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, Lopnul сказал:

Как раз это именно данный вариант.

Надо сильно постараться, чтобы за 2 секунды изменить параметр и выдернуть питание. И чтобы это было критически важно для работы, к тому же...

Опишите устройство в части регулировка - потеря питания. К гадалке не ходи - это надуманная проблема.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Программатор подключен по ISP к МК с обвязкой (внешний кварц и т.п.). Прошит. Питание на плату с МК НЕ  подано. Тем не менее, из AVR Studio "Device Information" - "Read"  успешно. Получается, что для чтения сигнатуры чипа этого достаточно? Всегда ли? Чистый голый новый МК  у меня таким же образом не читается почему-то..... Хотя подключены все те же 6 проводков.

Я вспомнил... соответствие фьюзов все же нужно. Т.е. если кварца нет, а фьюзы на внешний настроены, то даже сигнатура не прочитается. Правда непонятно, как читается чип без напряжения. Наверное, сигнатура где-то просто сохранено в проекте Авр студии. А реального чтения нет.

 

Изменено пользователем dim3740
Ссылка на комментарий
Поделиться на другие сайты

56 минут назад, my504 сказал:

Надо сильно постараться, чтобы за 2 секунды изменить параметр и выдернуть питание.

За 2 секунды, конечно, вряд ли, но 2 секунды маловато, т.к. человек может не успеть перебрать режимы, т.е. надо секунд хотя бы 10 (между выбором режима), а вот за 10 сек. возможно и успеет выдернуть. НО, это все уже не актуально, т.к. буду записывать по предложенному Вами варианту без всяких задержек, т.е. просто по нажатию кнопки последовательно в пустую ячейку и при достижении границ блока - стирание и опять по кругу. В таком случае получится не меньше 100'000 возможных циклов на перезапись, а этого с головой хватит.

Изменено пользователем Lopnul
Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, dim3740 сказал:

Правда непонятно, как читается чип без напряжения.

Это называется паразитное питание. Если посмотрите на конструкцию выходных портов контроллера увидите там защитные диоды на шину питания, входные сигналы на портах через эти диоды ПИТАЮТ контроллер. И пока хотябы на одном из выводов будет лог.1 контроллер будет получать паразитное питание, если подключен конденсатор по питанию(в программаторе например есть!) то он даже кратковременные перерывы выдерживает.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте, господа! 

Делаю мигалку сыну на велосипед на ATTINY13

Хочу сделать включение и выключение одной кнопкой. 

Вот код на данный момент. Включается, но не выключается. Подскажите как правильно организовать выключение.

 

#define F_CPU 9600000UL
#include <avr/io.h>
#include <util/delay.h>


int main(void)
{   int i;
    DDRB&=~(1<<PB4); //Настраиваем ножку PB4 в режим входа
    PORTB|=(1<<PB4);
    DDRB|=(1<<PB0); //Настраиваем ножку PB0 в режим выхода
    PORTB&=~(1<<PB0);
    DDRB|=(1<<PB1); // Настраиваем ножку РВ1 в режим выхода
    PORTB&=~(1<<PB1);
    
    
    
    while(1)
    {
        while ((PINB&(1 << PB4)) == 0){} // Ждем пока на выводе PB1 лог. 0
            _delay_ms(20);
        
        if ((PINB&(1 << PB0)) == 0) // Если на выводе PB0 лог. 0
               
            {    while(1) //Моргаем мигалками
                {
            
                for (i=1;i<=3;i++)
            {
                PORTB|=(1<<PB1);
                _delay_ms(10);
                PORTB&=~(1<<PB1);
                _delay_ms(10);    
                
            }
            for (i=1;i<=3;i++)
            {
                PORTB|=(1<<PB0);
                _delay_ms(10);
                PORTB&=~(1<<PB0);
                _delay_ms(10);
                }
            
                }
                
        
            }
            
            
        else
        {
            PORTB &= ~(1 << PB0); // Лог. 0 на выводе PB0
        }
        while ((PINB&(1 << PB4)) == 1){} // Ждем пока на выводе PDO лог. 1
    _delay_ms(20);
 }
    }

 

 

Ссылка на комментарий
Поделиться на другие сайты

Спасибо. Проверьте меня: нахожусь в AS, подменю... э.-э... "прошивка". Прошиваю и читаю успешно МК на плате. Не выходя из софта, переключаю кабель программатора на чистый кристалл МК, но такой же. Нажимаю "чтение девайса". Он должен прочитаться, потому что, фьюзы я его еще НЕ прошивал, но по умолчанию, он запустится = прочитается от внутренного генератора.  А то, что чуть ниже в меню прошивки у меня в проекте стоят настройки фьюзов от ПРЕЖНЕГО мк - это не важно пока. Так?  

Изменено пользователем dim3740
Ссылка на комментарий
Поделиться на другие сайты

Нет ничего проще, чем ничего не делать. Мигать гораздо сложнее, чем не мигать :)
Проблема не понятна. Просто не мигайте светодиодом и всё, мигалка будет выключена.

Ссылка на комментарий
Поделиться на другие сайты

 

:D  При нажатии на кнопку, 2 светодиода начинают поочередно мигать, при след нажатии надо чтобы они отключились( выключились).

Изменено пользователем vasekiv
Ссылка на комментарий
Поделиться на другие сайты

Вы не совсем поняли суть моих постов. Они хоть и были в шутливом стиле, но не ради шутки.
Мне хотелось вытащить из Вас больше информации о проблеме. А Вы повторяете свои, так сказать, "хотелки", о которых было понятно ещё с первого Вашего поста.
По сабжу, в общих чертах (ибо вопрос в таких же и предоставлен), - опрашиваем вывод кнопки и зацикливаем программу на "ничегонеделание".

Ссылка на комментарий
Поделиться на другие сайты

Я бы делал эту программу как автомат состояний, с двумя состояниями - мигает и НЕ мигает.

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

Теперь осталось реализовать состояние не мигает в виде второго бесконечного цикла в котором будет вход в режим SLEEP(зачем батарейку тратить? я бы вообще и delay заменил бы на SLEEP с выходом по прерыванию от таймера но это уже чересчур сложно будет) с выходом по прерыванию на выводе кнопки. В этом цикле проверяете нажатие кнопки с подавлением дребезга и... выход из этого бесконечного цикла если кнопка и правда нажата. Теперь осталось зациклить в бесконечность эти два бесконечных цикла и состояния будут сами себя менять по нажатию кнопки.

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

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

В 29 Январь 2018 г. в 19:35, vasekiv сказал:

Вот код на данный момент. Включается, но не выключается. Подскажите как правильно организовать выключение.

правильный вопрос: как  правильно организовать мигалку.

автомат состояний:

Скрытый текст

 #define F_CPU 9600000UL
#include <avr/io.h>
#include <util/delay.h>

unsigned char Task_Button(unsigned char reg);
void Blink_Led ( unsigned char caunt_delay);

int main(void)
{   unsigned char Power_LED=0;
    unsigned char caunt_delay=0;
    DDRB&=~(1<<PB4); //Настраиваем ножку PB4 в режим входа
    PORTB|=(1<<PB4);
    DDRB|=(1<<PB0); //Настраиваем ножку PB0 в режим выхода
    PORTB&=~(1<<PB0);
    DDRB|=(1<<PB1); // Настраиваем ножку РВ1 в режим выхода
    PORTB&=~(1<<PB1);
    
    
    
    while(1)
    { 
        _delay_ms(20); // системная задержка ("системный тик")

        Power_LED=Task_Button(Power_LED);
        switch (Power_LED) {
             case 0:
                    PORTB&=~((1<<PB1)|(1<<PB0));   
                    caunt_delay=0; 
                     break;

             case 1:   
                    if(caunt_delay>11) {caunt_delay=0;} // циклический счетчик
                      else {caunt_delay++;} 
                    Blink_Led ( caunt_delay);
                  break;
      
             default:
             PORTB&=~((1<<PB1)|(1<<PB0)); 
            } 
     }// end  while(1)
  }// end int main(void)


unsigned char Task_Button(unsigned char reg)
//******************************************************************
// в функцию принимаем режим работы
// читаем состояние кнопки, сравниваем с предыдушим 
// состоянием и если было нажатие изменяем режим работы
// возвращаем новый режим работы
//******************************************************************
{unsigned char pinNew=0;
 static unsigned char pinOld;
       
   if((PINB&(1 << PB4)) pinNew=1;                      
   if((pinNew==0)&&(pinOld==1)) reg^=(1<<0);    
   pinOld=pinNew;
 return reg;
}

void Blink_Led ( unsigned char caunt_delay)
//*******************************************************************
//* в главном цикле считаем циклически 12 "системных тиков" от 0 до 11
//* в процедуру принимаем номер "системного тика"
//* в зависимости от номера включаем/выключаем выходы
//*******************************************************************
{
     switch (caunt_delay) {
        case 0:
        case 2:
        case 4:
             PORTB|=(1<<PB1);
        break;

        case 6:
        case 8:
        case 10:    
             PORTB|=(1<<PB0);
        break;
      
       default:
            PORTB&=~((1<<PB1)|(1<<PB0)); 
       } 
        
}

 

 

 

 

Ссылка на комментарий
Поделиться на другие сайты

Кнопка с фиксацией + 1 микросхема для мигания светика - всё решение проблемы.
Или, если кнопка без фиксации, +1 триггер.

Зачем тут микроконтроллер ?

Ссылка на комментарий
Поделиться на другие сайты

Подскажите, а как оптимальнее всего сделать условие для выполнения команды по удержанию кнопки? Т.е. удерживаем кнопку 2 секунды (не меньше) и происходит выполнение нужной команды. Интересует вариант для стм32

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Все предложенные к рассмотрению источники питания работают примерно по одному принципу: сетевое напряжение выпрямляется, фильтруется (получаем чуть больше 300 вольт постоянного), затем преобразуется снова в переменное, но уже на частотах в несколько десятков килогерц, понижается на трансформаторе и снова выпрямляется. За счёт высокой частоты преобразования используется трансформатор на ферритовом, а не на стальном, сердечнике, гораздо меньших габаритов и стоимости. Минусы: значительное усложнение схемы блока и вероятность возникновения различных помех от него. Модули управления (кроме первого) также являются импульными преобразователями, с теми же достоинствами и недостатками. Если нужно по быстрому собрать некое подобие ЛБП, то уж лучше брать модуль вроде этого. Ну и блок питания к нему соответствующий. Но не очень понятно, какой практический опыт можно получить от соединения готовых модулей парой проводов.  
    • У меня больше всего вопросов вызвала необычная схема обеспечения отрицательного питания. Автор этой обстоятельной заметки пишет: For this supply to work correctly, the transformer must have a secondary voltage of at least 18V RMS.  Почему? Что будет не так с отрицательным питанием, если напряжение на трансформаторе будет меньше 18В?   https://tinyurl.com/23mlwxtt - я в простейшей эмуляции ставлю 12В пикового напряжения для трансформатора и на стабилитроне все как положено: -5.6В.
    • Согласен, очень криво объяснил. Это работа трёх вольтовой линии, просто на диод шотки сдвоенный, на один анод приходит сигнал напрямую с трансформатора, а на второй через дроссель. Вольт/деление 5 вольт в клетке, тайминг по моему 10 МС. Третья фотография это сигнал на катодах уровень земли ровно по центру экрана. Но все линии по итогу в порядке 3.3 в, 5, в, 12 в и -12 в. Нагрузить все линии не могу сразу ,так как тут же выгорают транзисторы (имеется нагрузка 250 ватт по 10 ампер на каждую линию за исключением-12в), поэтому нагружаю 3.3 вольтовую линию на 10 ампер,  подключаю переменный резистор 50 ватт на 15 ом на 5 вольтовую линию и постепенно довожу до той той картины с перекосом (это гдето  50 ватт общее). По поводу микросхемы, вверху имеется скрин где между импульсами проскакивает мини импульс, если так можно сказать, он проскакивает и на одной  и на второй ноге (7,8). Микросхема не tl 494, а lw4933/abx942.1/c9421646. Далее они приходят на базы транзисторов 945g  коллекторы этих транзисторов соединены с  выводами трансформатора. Просто схема типовая, легче мне кажется просто привести фото самого блока, для тех кто разбирается будет гораздо информативне.  Диод шотки по 12 вольтовой линии был подгоревший, заменил на донора. Приводить скрины не буду что бы не захламлять тему. В итоге, пока все так же, при достижении определенной нагрузки суммарно где-то 50 ватт, появляется этот "выброс и перекос". По этому имеются мысли на два варианта, это микросхема , этот мини импульс между периодами, на низкой нагрузке особо не влияет, но при достижении определенной приводит с самовозбуждению входной цепи и непроизвольному открытию транзистора нижнего плеча. Либо дело в "горячей части", плавающий дефект в обвязке силовых ключей.  Спасибо за ответ.
    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
  • Похожий контент

×
×
  • Создать...