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

Помогите, простой стробоскоп


Роман Романович

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

Прошу помощи. Понимаю что пограммистам это на раз плюнуть.

Нужна программа прошивки на Attiny13.

Алгоритм следующий:

- при подачи питания на МК на ноге мк постоянная 1 и лампочка горит

- при повторной подаче питания мк лампа мигает стробоскопом.

- при повторной подаче питания снова лампа горит, и так по кругу

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

ПОМОГИТЕ, ОЧЕНЬ НУЖНО"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

часть программы стробоскопа

#include <tiny13.h>
#include <delay.h>


void main(void)
{

int i;

PORTB=0x00;
DDRB=0x03;

while (1)
      {
for (i = 0; i<3 ; i++)
          { 
PORTB.0=1; 
delay_ms(100);
PORTB.0=0;
delay_ms(100);
          } 
       
  delay_ms(400);


      }
}

 

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

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

использовать Eeprom при каждом включении считывать бит если 1 или 0 - это и есть режим, после считывания инвертировать бит для следующего включения

но епром ограничена 100000 циклов записи

#include <avr/eeprom.h>
//определить переменную в епром:
unsigned char rezhim EEMEM;

//чтение:

eeprom_read_byte(&rezhim);

//запись:

eeprom_update_byte(&rezhim, ххх);

 

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

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

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

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

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

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

25 минут назад, Роман Романович сказал:

Алгоритм следующий:

так не делают, обычно напряжение на МК подают постоянно , МК отправляют в режим сна, ток потребления в котором соизмерим с саморазрядом батареи , кнопку режимов работы опрашивают или по изменению состояния вывода или по срабатыванию сторожевого таймера выводя МК из режима сна, управляют нагрузкой

хотя вариант с изнасилованием ЕЕПРОМ тоже имеет право на жизнь :)

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

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

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

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

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

Спасибо, просто у меня с программированием тяжело, а данная прошивка край нужна

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

7 часов назад, Роман Романович сказал:

у меня с программированием тяжело

В конце 80-х сваял я схему диагностического электростимулятора целиком на логике, безо всяких МК. И функция была очень похожая на желаемую - при нечетном включении одной кнопкой силу тока можно было дискретно увеличивать второй кнопкой, а при четных включениях - снижать. 

Сочувствую я вам, ребята, не видящим других возможностей, кроме МК...

Просят - не откажи. Не просят - не навязывайся!

Простота хуже воровства.

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

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

использовать Eeprom при каждом включении считывать бит если 1 или 0 - это и есть режим, после считывания инвертировать бит для следующего включения

но епром ограничена 100000 циклов записи


#include <avr/eeprom.h>
//определить переменную в епром:
unsigned char rezhim EEMEM;

//чтение:

eeprom_read_byte(&rezhim);

//запись:

eeprom_update_byte(&rezhim, ххх);

 

Если можно весь код напишите пожалуйста!!!

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

On 4/17/2018 at 9:01 AM, Роман Романович said:

Если можно весь код напишите пожалуйста!!!

Spoiler

#include <tiny13a.h>
#include <delay.h>

eeprom unsigned char mode;

void main(void)
{
// Declare your local variables here
 int i;
 
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Reset Source checking
if (MCUSR & (1<<PORF))
   {
     // Power-on Reset
     MCUSR=0;

     delay_ms( 500 );
     if ( mode == 0 )
     {
       mode = 1;
     } else {
       mode = 0;     
     }
   }

DDRB=(0<<DDB5) | (1<<DDB4) | (1<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

  if ( mode == 0 )
  { 
    while ( 1 )
    {
      for ( i = 0; i < 3 ; i++ )
      { 
         PORTB.3 = 1; 
         delay_ms( 100 );
         PORTB.3 = 0;
         delay_ms( 100 );
      } 
      delay_ms( 400 );
    }
  } else {
      
    PORTB.3 = 1;
    while ( 1 )
    {
    }
  }
}

 

Попробуйте этот код. У меня ATtiny13A, но они совместимы и я вывел мигание на 3-ю ножку т.к. к 0-й подпаян программатор

 

 

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

В 18.04.2018 в 13:29, snn_krs сказал:
  Показать содержимое


#include <tiny13a.h>
#include <delay.h>

eeprom unsigned char mode;

void main(void)
{
// Declare your local variables here
 int i;
 
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Reset Source checking
if (MCUSR & (1<<PORF))
   {
     // Power-on Reset
     MCUSR=0;

     delay_ms( 500 );
     if ( mode == 0 )
     {
       mode = 1;
     } else {
       mode = 0;     
     }
   }

DDRB=(0<<DDB5) | (1<<DDB4) | (1<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

  if ( mode == 0 )
  { 
    while ( 1 )
    {
      for ( i = 0; i < 3 ; i++ )
      { 
         PORTB.3 = 1; 
         delay_ms( 100 );
         PORTB.3 = 0;
         delay_ms( 100 );
      } 
      delay_ms( 400 );
    }
  } else {
      
    PORTB.3 = 1;
    while ( 1 )
    {
    }
  }
}

 

Попробуйте этот код. У меня ATtiny13A, но они совместимы и я вывел мигание на 3-ю ножку т.к. к 0-й подпаян программатор

 

 

Не пойму почему, но переключение режимов нормально происходит только первых два-три раза, потом при подаче питания либо режим не переключается либо МК подвисает и ничего не горит. Фьюзы дефолтные, шью и hex и epp. 

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

У меня нормально работает. Там есть задержка 500 мс., если быстро включать/выключать питание, то режим переключаться не будет.

Зависание возможно если ножка 1 (сброс) висит в воздухе. Надо ченез резистор к +5в подтянуть.

eep записывать не обязательно

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

В 20.04.2018 в 09:39, snn_krs сказал:

У меня нормально работает. Там есть задержка 500 мс., если быстро включать/выключать питание, то режим переключаться не будет.

Зависание возможно если ножка 1 (сброс) висит в воздухе. Надо ченез резистор к +5в подтянуть.

eep записывать не обязательно

Ножка 1 подтянута через 10k к +5в

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

Иногда просто зависает на каком то режиме и не переключается.

Не могу понять в чем причина

Можете скинуть файлы проекта?

 

 

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

А почему переключение режимов хочешь сделать с помощью подачи питания, а не кнопкой управлять?

Хочешь накормить человека один раз — дай ему рыбу. Хочешь накормить его на всю жизнь — научи его рыбачить.

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

В 25.04.2018 в 21:50, Гар сказал:

А почему переключение режимов хочешь сделать с помощью подачи питания, а не кнопкой управлять?

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

В 25.04.2018 в 21:41, snn_krs сказал:

Сегодня вечером попробую.

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

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

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

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

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

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

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

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

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

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

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

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