Jump to content
Azizbek Khudayberdiev

добавить импульс к каждому пятому

Recommended Posts

Здравствуйте. Подскажите пожалуйста, не встречали ли Вы в просторах интернета схему с прошивкой следующего устройства на avr.
Имеется генератор импульсов и мне нужно к каждому пятому импульсу добавить один. Что то не могу найти сам. Видать не правильно формулирую запрос в поисковиках.

Share this post


Link to post
Share on other sites

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

Если же в действительности нужно сформировать импульс на каждый пятый приходящий, то задача становится вполне заурядной, причём, безо всяких микроконтроллеров, на счётчиках.
Либо просто увеличить частоту имеющегося генератора, что более логично.


"Я не знаю какой там коэффициент, я просто паять умею. "

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

Увеличение  частоты генератора,это другое. Спрошу по другому. Предположим, имеется генератор который постоянно даёт импульсы, на каждом пятом, десятом и тд. мне нужно снимать импульс на светодиод. То есть на вход микроконтроллера подаётся импульсы с этого генератора, мк считает их и при достижения заданной величины выдаёт команду на мигание светодиодом.

#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>

int main(void)
{
int x = 0;

DDRC = 0xff; // все порты C сконфигурировать как выходы
DDRD = 0x00; // все порты D сконфигурировать как входы
PORTD = 0xff; // установить "1" на всех портах D,

while(1) { // Бесконечный цикл

if (!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D

x=x++; // прибавить к х единицу

if (x==5) // если х равен числу...

{PORTC |= _BV(PC1);// подаем питание
 x==0;// Вот тут у меня проблема  
  } 

}

}

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

Share this post


Link to post
Share on other sites

Высокая надежность SiC! Как они этого добились?

За несколько лет кропотливых исследований и совершенствования технологии компания Infineon смогла довести показатели надежности и стабильности параметров высоковольтных и быстродействующих карбид-кремниевых транзисторов линейки CoolSiC практически до уровня их кремниевых собратьев.

Подробнее

2 часа назад, Azizbek Khudayberdiev сказал:

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

Два раза, что ли?


Хорошо зафиксированный пациент в анестезии не нуждается

Share this post


Link to post
Share on other sites

Материалы вебинара «STM32L5. Секреты оценки энергопотребления»

Опубликованы запись и материалы вебинара КОМПЭЛ, посвященного первому семейству МК STM32L5 на ядре Cortex-M33. На вебинаре было рассказано о самых распространенных ошибках при расчете энергопотребления микроконтроллеров и о специальном тесте ULPMark, позволяющем дать наиболее объективную оценку энергоэффективности. Измерения проводились на демонстрационной платформе STM32L562E-DK.

Подробнее

Снижена цена на AC/DC и DC/DC преобразователи Mornsun в Компэл!

Компэл и компания Mornsun снизили цены на преобразователи AC/DC-преобразователи семейств LS и LDE. По привлекательной цене также предлагаются DC/DC-преобразователи изолированных семейств поколений R2 и R3 различного конструктивного исполнения.

Подробнее

Не силён в программировании, но может, в строчке "x==0;" один знак равенства лишний?

Share this post


Link to post
Share on other sites
3 hours ago, Azizbek Khudayberdiev said:

переменная Х должна обновляться после каждого срабатывания светодиода.

Ну так и вставьте сброс / обновление переменной в код. @КЭС, по-моему, правильно сказал. Вы ее проверяете на равенство нулю, а нужно обнулить.


Настоящему коту и в декабре март!

Share this post


Link to post
Share on other sites
18 часов назад, Azizbek Khudayberdiev сказал:

схему с прошивкой

такой скорее нет . West прав проще на счетчике сделать . Или прошивку на  асме - он менее абстрактен и ближе к схемотехнике . Таймер включаете в режим приема импульсов от входа и сброса при достижении заданного числа .  

Edited by colorad

Share this post


Link to post
Share on other sites
while(1)
{
  button<<=1;
  button&=2; 
  if(!(PIND & (1<<PIND1))) {button++;}
  switch (button)
   {
    case 0: // кнопка отпущена
    case 3: // кнопка нажата
       break;
    case 1:  // нажатие кнопки
         if(count<5)
          {
            count++;
          }
          else
          {
            count=0;
            PORTC |= (1<<PC1);
          }  
       break;
    case 2:  // отпускание кнопки
           PORTC &= ~(1<<PC1);
       break;
   }

}// end while(1)

 

Share this post


Link to post
Share on other sites
23 minutes ago, IMXO said:

button&=2;

Если перед входом в бесконечный цикл button=0, то как в этой переменной может оказаться значение 2 или 3, если каждый раз в начале цикла младший бит насильно зануляется? 

Share this post


Link to post
Share on other sites

Спасибо за код. Но вот что интересно, даю на вход 100 импульсов, по идее светодиод должен мерцать 20 раз, а у меня он мерцает 17 раз, видать где то пропускает. При 50 импульсах 9 раз, при 40 импульсах 7, при 30 =6

Share this post


Link to post
Share on other sites

Чтобы не пропускал, надо не в цикле ловить импульсы, а настроить прерывание по перепаду уровня.

Share this post


Link to post
Share on other sites

@КЭС у ТСа обычный светодиодный ногадрыг , при тактовой 8МГц код вытянет до 100кГц зачем здесь прерывания

Share this post


Link to post
Share on other sites

Спасибо за все советы, теперь к главному.

22.11.2019 в 20:37, Azizbek Khudayberdiev сказал:

Здравствуйте. Подскажите пожалуйста, не встречали ли Вы в просторах интернета схему с прошивкой следующего устройства на avr.
Имеется генератор импульсов и мне нужно к каждому пятому импульсу добавить один. Что то не могу найти сам. Видать не правильно формулирую запрос в поисковиках.

Как я писал в начале нужно к каждому пятому импульсу добавить один то есть вычитанные импульсы прибавить к исходным. К примеру Пакет из 1000 импульсов делим на 5 и получаем 200 импульсов и эти 200 прибавляем к исходным 1000 и на выходе получаем 1200. 

 

Share this post


Link to post
Share on other sites
49 minutes ago, Azizbek Khudayberdiev said:

нужно к каждому пятому импульсу добавить один

Какую-то примочку к автомобилю делаете? Очень похоже на накрутку спидометра :)

Share this post


Link to post
Share on other sites
38 минут назад, Yurkin2015 сказал:

Какую-то примочку к автомобилю делаете? Очень похоже на накрутку спидометра :)

Или под другой тип датчика (например скорости, 6 имп. на метр в 10 имп. на метр) адаптируйте?

Или это секретное Wunderwaffe?

Edited by X200881

Share this post


Link to post
Share on other sites

Ничего секретного. Перед выходом на пенсию начал изучать AVR. А самый лучший способ это начать изучать на конкретном примере. Благодаря Вам понял как простым способом выдёргивать импульс из определенного количества. Теперь ломаю голову как их суммировать. Судя по литературе мне нужно копать в сторону таймеров и прерывания. Но мне проще изучать по рабочему коду. То есть смотреть как это сделано и как работает а потом собрать свой вариант. Надеюсь и впредь на Вашу помощь. )))

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • 24 В при токе 2.5 А это 60 Вт. 27000 вольт при 60 Вт это ток один-два миллиампера. Которые имеют ток утечки выше миллиампера. Собственно, заряжать столь слабым источником не получится, что ты и получил на практике. Перематывай трансформатор на гораздо меньшее напряжение, но на гораздо больший ток, хотя бы в 30 раз!
    • Карочь ребя  , все по  фне шую ...  Холодильник в кухню , капутер  в гостинную ...  
    • Делаю зарядное устройство для электролитических конденсаторов, заряжать решил от ТДКС и схемы ZVS драйвера. Питание беру от лабораторного источника питания (выставляю около 24В и 2,5 А). Зарядить нужно блок флэш электролитов (те, что применяются в вспышке фотоаппаратов, 330В, 120 мкФ каждый) со смешанным подключением (общей емкостью 1280 мФ и напряжением 990В). Этот способ уже рассмотрен здесь: https://youtu.be/et0DtOzbB0U https://youtu.be/t7iZNVMdrU8 Подключил ТДКС к блоку - напряжение зарядки выше 60В не растёт. То есть, показание на мультиметре доходит до 60В и остаётся на месте. При этом, без нагрузки ТДКС работает стабильно, выдаёт хорошую дугу и напряжение выше киловольта. Сами конденсаторы - рабочие. Чем может быть связана такая просадка? Пробовал подключать отдельно линию из 10 параллельных конденсаторов - напряжение достигает максимум 30 В.
    • Если жесткий диск механический, то ему такое не понравится, надо ццд ставить.
    • Это и есть датчик тока - что для отключения, что для стабилизации. Все зависит от того, как сделан стабилизатор тока. Если правильно - то шунт и будет около 0,01 Ом. Только т огда ему нужен будет усилитель сигнала.   - вот вам и стабилизатор тока, и напряжения, и датчик тока 0,01 Ом. И ток 5А или около того.

  • Прямоугольный переключатель, 2 контакта, 5 шт.

×
×
  • Create New...