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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

#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;// Вот тут у меня проблема  
  } 

}

}

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

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

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

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

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

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

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

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

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

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

3 hours ago, Azizbek Khudayberdiev said:

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

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

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

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

18 часов назад, Azizbek Khudayberdiev сказал:

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

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

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

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)

 

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

23 minutes ago, IMXO said:

button&=2;

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

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

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

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

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

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

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

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

 

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

49 minutes ago, Azizbek Khudayberdiev said:

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

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

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

38 минут назад, Yurkin2015 сказал:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • @korsaj Сегодня попробовал сделать как ты посоветовал. Получился следующий код. #define F_CPU 7372800UL #define BAUND 9600L #define UBRRL_value (F_CPU/(BAUND*16))-1 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdlib.h> void init_pin(void); #define C_PC0 (~PINC&(1<<PC0)) #define C_PC1 (~PINC&(1<<PC1)) #define LED_1_ON() PORTD|=(1<<PD2) #define LED_1_OFF() PORTD&=~(1<<PD2) #define LED_2_ON() PORTD|=(1<<PD3) #define LED_2_OFF() PORTD&=~(1<<PD3) #define FLAG_END_RX (1<<3) #define FLAG_ERR_RX (1<<4) #define BUF_SIZE 20 char rx_buf[BUF_SIZE]; char buf_index = 0; volatile start=1, flags; char b; ISR(USART_RXC_vect) { b=UDR; if(!(flags & FLAG_END_RX)) { rx_buf[buf_index]=UDR; if(rx_buf[buf_index] == 0x0D) { flags |= FLAG_END_RX; return; } buf_index++; if(buf_index >= BUF_SIZE) { buf_index = 0; flags |= FLAG_ERR_RX; } } } void init_UART() { UBRRL = UBRRL_value; UBRRH = UBRRL_value>>8; UCSRB|=(1<<TXEN); UCSRB|=(1<<RXEN); UCSRC|=((1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)); UCSRB|=(1<<RXCIE); sei(); flags = 0; } void send_UART(char value) { while(!(UCSRA&(1<<UDRE))); UDR=value; } int main(void) { init_pin(); init_UART(); while(1) { if (start==1) { _delay_ms(500); send_UART('O'); send_UART('K'); send_UART('!'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); start=0; } if (b == '0') { LED_1_ON(); LED_2_OFF(); send_UART('N'); send_UART('+'); send_UART('0'); send_UART('0'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); b=4; } if (b == '1') { LED_1_OFF(); LED_2_ON(); send_UART('N'); send_UART('+'); send_UART('0'); send_UART('1'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); b=4; } if (b == '2') { LED_1_ON(); LED_2_ON(); send_UART('N'); send_UART('+'); send_UART('0'); send_UART('2'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); b=4; } if (b == '3') { LED_1_OFF(); LED_2_OFF(); send_UART('N'); send_UART('+'); send_UART('0'); send_UART('3'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); b=4; } if (C_PC0) { send_UART('P'); send_UART('C'); send_UART('0'); send_UART(0x0D); send_UART(0x0A); _delay_ms(250); } if (C_PC1) { send_UART('P'); send_UART('C'); send_UART('1'); send_UART(0x0D); send_UART(0x0A); _delay_ms(250); } } } void init_pin(void) { DDRC = 0b00000000; PORTC = 0b11111111; DDRD |= ((1<<2)|(1<<3)); PORTD &=~ ((1<<2)|(1<<3)); } Ну как сказать всё работает, но вот меня очень интересует приём команд на саму ATMEGA16. Он так и работает только с цифрами. Более ничего корректно принять не получается даже используя таблицу ascii. А мне нужно будет принимать команды и посложней чем просто буквенно - цифровые. Потому как возвращаясь к командам самого плеера там в этих командах хранятся различные данные. Вот примерно так это всё выглядит. AT+QM \ r \ n Запрос режима работы [0: Bluetooth], [1: MP3] AT+M1 \ r \ n Номер текущего файла AT+M2 \ r \ n Общее количество звуковых файлов AT+MD \ r \ n Источник музыки USB или SD Card AT+MT \ r \ n Общее время воспроизведения текущего файла AT+MK \ r \ n Время воспроизведения текущего файла AT+MP \ r \ n Текущее состояние плеера [0]Стоп, [1]Воспроизведение, [2]Пауза К примеру при отправке команды AT+M1 \ r \ n в ответ мы получим M1 + 000002 \ r \ n при этом здесь может быть любое число в hex формате. Мне же нужно каким то образом принять эти данные и обработать их соответствующим образом. Но при этом и нужно учитывать так же что плеер может сам отправить эти данные по началу воспроизведения трека. Вот в этом сейчас и стоит основная задача. Чего я и пытаюсь получить в итоге.
    • Ну тогда дорога к сименсу в гости - они вам какой-нибудь Desigo CC или даже Siematic предложат, тыщ за 10 долларов. Ну и ещё тыщ 5 надо будет отдать за контроллеры и их конфигурирование.   А если попроще - то можно к отечественным MasterSCADA обратиться, либо к WiredBoard - у них не совсем SCADA система, но нормальные контроллеры, довольно просто настраиваются и можно графическую оболочку рисовать.
    • тогда вы имеете то, что имеете, и никак от этого не избавиться. Хоть святой водой окропите. "Или трусы или крестик" (с) Нагрузки у вас немаленькие. Вы же с нуля переделываете, снова некуда ? Понятие LowESR очень неконкретное. Сколько вешать в граммах ? пустая трата времени
    • Да все это туфта, выеденного яйца не стоит. В общем чушь собачья. На мониторе тему уже сплавили в мусорку, а здесь треп еще будет на 10 страницах. Все камеры, их у него было три, исправные. Записывают отлично. А дальше вся проблема в этом. Особо интересно - монтажник видео.
    • 1. А это как определяется?  Так пробовали на другом смотреть? 2. Так как всё-таки смотрели - напрямую с камеры или "Копирование файлов на компьютер ничего не меняет по сравнению с просмотром с камеры напрямую"?
    • Может быть повторюсь, но - самому впаивать в имеющую схему радиодетали не имею желания, хочется узнать - может есть в природе плата, которую необходимо будет просто приобрести и  расключить правильно? Я так понимаю один канал надо инвертировать, но чем. Вопрос только в этом
×
×
  • Создать...