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

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

13 сообщений в этой теме

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

Нужна программа прошивки на 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);


      }
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Mishany    47

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

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

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

//чтение:

eeprom_read_byte(&rezhim);

//запись:

eeprom_update_byte(&rezhim, ххх);

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 325
25 минут назад, Роман Романович сказал:

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

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

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

Поделиться сообщением


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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Falconist    5 052
7 часов назад, Роман Романович сказал:

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

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

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

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 часов назад, Mishany сказал:

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

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


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

//чтение:

eeprom_read_byte(&rezhim);

//запись:

eeprom_update_byte(&rezhim, ххх);

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snn_krs    38
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. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snn_krs    38

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 20.04.2018 в 09:39, snn_krs сказал:

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

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

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

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

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

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

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snn_krs    38
1 hour ago, Роман Романович said:

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

Strob_01.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гар    103

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 25.04.2018 в 21:50, Гар сказал:

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

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

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

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

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

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • С чего вы решили что там 1 виток ? Вроде не меньше 3-4. Открою секрет известный ещё из первой книжки Б.Ю Семенова - лучший массо-габарит получается на равностороннем цилиндре (торе) , это когда стопка колец по высоте равна D , и проще равномерно намотать 3 витка. Посчитайте прогой "рингферритэкстрасофт" на 2 колечках 40*25*11 , вполне сносно выходит, если не ограничиваться током 5А *мм^2. Но это путь тупиковый . Кроме размещения обмоток в окне СТ есть немаловажная проблема коммутации в пуш-пуле , о которой многие забывают. Например при коммутации 176А    Ls (100нГн) энергия одиночного импульса составит 1,5мДж умножить на 30к = 45Вт тепла (не считая сколько высаживается на Rds(on), а длительно сдувать с одного ТО220 более 20Вт затруднительно ). Тут либо мягкую коммутацию применять , либо топологию менять , либо то и другое и радикально уменьшать кол-во витков, ведь зависимость Ls от витков квадратная , т.е уменьшив витки с 4 до 1 уменьшим Ls и связанную с этим рассеиваемую энергию в 16 раз.  
    • Я за первый, только со стабилизатором напряжения на 8-10 вольт( что бы без шума).
      А этих стабилизаторов на али- как грязи по 80 рублей.
    • Гость alexon
      я за вариант№2-только напряжение поднял бы до 8 в,шума не будет,а охлаждения думаю хватит...
    • Да, какой угодно.
      А если по фэн-шую, то первичку пополам, и по пол обмотки, сначла, и поверх. Многие комповые трансы мотались, 26 сначала, а чверху опять 26.
      А многие, где 32 сначала, а потом 20.
    • А это еврей, Рома Абраш минусует.
      Ну ни как не желает он в СССР, ведь ему там сразу 64-я корячится.
    • Спасибо, доехало. За бонусы тоже большое спасибо. Продавца знаю только с хорошей стороны. Рекомендую.
    • Пробовал и так писать. Из трех таких условий перестает только одно работать( Ликвидировал эту проблему объединив 2 части кода в одно условие, что привело к отсутствию  возможности регулировки частоты вывода информации на индикаторы.