Easyelectronics.ru

Электроника для всех
Текущее время: 13 авг 2020, 16:06

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Attiny13 кнопка
СообщениеДобавлено: 23 окт 2019, 16:01 
Только пришел

Зарегистрирован: 23 окт 2019, 15:34
Сообщения: 7
Уважаемые господа!
Я понимаю что я бестолковый и задам сейчас детский вопрос но мозг у меня уже кипит. ПОМОЖИТЕ ЛЮДИ ДОБРЫ, ДЕНЬГИ УКРАЛИ НАМ БЫ ТОЛЬКО ДОМОЙ ДОБРАТЬСЯ!!!!
Короче нужно слепить девайс. По нажатию кнопки включается мотор , отрабатывает 4мин.выключается. В течении 1,5 мин. включить невозможно. Можно конечно сделать на 555 но это не актуально. Хотелось бы на тиньке13А. Во вложении то что я сумел дальше мозг кипит....


Вложения:
1.c [577 байт]
Скачиваний: 188


Последний раз редактировалось jktu55 23 окт 2019, 19:24, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 23 окт 2019, 16:32 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3446
Код:
void delay_s(int s){ while(s--) delay_ms(1000); }

while(1){
  while (PINB.1);
  PORTB.0=0;
  delay_s(240);
  PORTB.0=1;
  delay_s(90);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 23 окт 2019, 18:10 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2014, 13:25
Сообщения: 966
Откуда: Earth
_pv писал(а):
...code

Переподали питание, и "в течении 1,5 мин. включить невозможно" ?))
Хотя, если сохранить пунктуацию автора: "выключается в течении 1,5 мин.", то я даже незнаю, как такое реализовать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 23 окт 2019, 19:54 
Только пришел

Зарегистрирован: 23 окт 2019, 15:34
Сообщения: 7
Спасибо ОГРОМНОЕ за ответ!!!!!!
Теперь вообще ничего не понятно.....
Свое первое сообщение я поправил. А вот ваш код уважаемый pv подскажите пожалста куда вставить первую строку.
void delay_s(int s){ while(s--) delay_ms(1000); }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 23 окт 2019, 21:18 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3446
я не знаю что за компилятор и что за delay.h у него, но подозреваю что секундных задержек
а вот как delay_us(9000000); в отличии от delay_us(9000000L); первым делом приведёт константу к int (а он как правило у АВРов обычно 16ти разрядный) и только потом передаст её в функцию. даже если тип аргумента у delay_us больше чем int.

это объявление и определение заодно функции delay_s его надо перед main сделать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 24 окт 2019, 00:24 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2852
Код:
#include <tiny13.h>
#include <delay.h>
#include <stdint.h>

__eeprom uint16_t time;

void delay_s(uint16_t s) {
  while(s--) {
    delay_ms(1000);
    if (time) time--;
  }
}

void main(void)
{
DDRB=0xFF;
PORTB=0xFF;

DDRB.1=0x00;
PORTB.1=0x7F;

ACSR=0x80;

if (time > 90) time = 0;
else if (time) delay_s(time);

while (1)
      {
       while (PINB.1);
       delay_us(200);
       if (PINB.0==1)
          PORTB.0=0;
       delay_s(240);
       PORTB.0=1;
       time = 90;
       delay_s(time);
       while (!PINB.1);
       delay_us(200);
      }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 24 окт 2019, 17:15 
Только пришел

Зарегистрирован: 23 окт 2019, 15:34
Сообщения: 7
Огромное человеческое СПАСИБО!!!!
Хоть ни черта не понял, но светодиодик заработал!!!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 24 окт 2019, 17:40 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2852
Да почти ж ваш код один в один. Только вместо простыней из пачки delay_us, функция delay_s от _pv, которая делает просто delay_ms(1000) = 1000 мс = 1с. Ну и я добавил еще сохранение последней задержки на 90с в EEPROM. Каждая секунда оставшаяся записывается. Если во время "когда 90с надо чтобы не запустился" с МК пропадет питания, после перезапуска он подождет оставшееся время. Чтобы при глюке питания/сбросе МК не дал сразу запустить, как выше Gnusmas заметил справедливо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 25 окт 2019, 02:12 
Заглядывает иногда

Зарегистрирован: 16 июн 2019, 00:50
Сообщения: 39
NStorm писал(а):
Да почти ж ваш код один в один. Только вместо простыней из пачки delay_us, функция delay_s от _pv, которая делает просто delay_ms(1000) = 1000 мс = 1с. Ну и я добавил еще сохранение последней задержки на 90с в EEPROM. Каждая секунда оставшаяся записывается. Если во время "когда 90с надо чтобы не запустился" с МК пропадет питания, после перезапуска он подождет оставшееся время. Чтобы при глюке питания/сбросе МК не дал сразу запустить, как выше Gnusmas заметил справедливо.

Трындец епромке, причём, гораздо быстрее, чем кажется на первый взгляд. Ресурс епромки - 100000 циклов записи. Пишем раз в секунду после каждого выключения мотора. 100000 / 90 = чуть более 1000 циклов включения / выключения мотора. Нельзя так делать, в общем, кмк.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 25 окт 2019, 09:27 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2852
Об этом ТС ничего не писал. Равно как и о том, насколько часто включается мотор. К тому же по факту eeprom у avr выдерживает куда больше циклов записи обычно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 25 окт 2019, 10:48 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 6626
Вопрос: EEPROM и (перепрограммируемая) память кода - это одна и та же технология, или EEPROM имеет повышенный ресурс?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 25 окт 2019, 11:00 
Старожил
Аватара пользователя

Зарегистрирован: 14 апр 2014, 11:06
Сообщения: 1638
Откуда: Курск
Кот495 писал(а):
Вопрос: EEPROM и (перепрограммируемая) память кода - это одна и та же технология, или EEPROM имеет повышенный ресурс?

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


На первой странице мануала:
ATtiny13A писал(а):
– Write/Erase Cycles: 10,000 Flash/100,000 EEPROM


Народ ещё заморачивался, тестил память. Кажется на хабре видел статью, но не гуглится что-то
Вот похожую нашёл


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 25 окт 2019, 11:15 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2852
Ну да, я и говорю, что по факту 100К - гарантировавнный ресурс, а на деле много больше. Тоже читал что народ заморачивался с тестированием. По ссылке видно, что фактически минимум 3М выдерживало. А это уже "33000 включений мотора". Если я для себя делал, я бы прикидывал ресурс и возможно сделал бы wear leveling или алгоритм поменял бы как. Но ТС подробнее задачу не озвучил, тыкать пальцем в небо не стал. Тем боле CVAVR мне незнаком.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 25 окт 2019, 18:53 
Заглядывает иногда

Зарегистрирован: 16 июн 2019, 00:50
Сообщения: 39
NStorm писал(а):
Ну да, я и говорю, что по факту 100К - гарантировавнный ресурс, а на деле много больше. Тоже читал что народ заморачивался с тестированием. По ссылке видно, что фактически минимум 3М выдерживало. А это уже "33000 включений мотора". Если я для себя делал, я бы прикидывал ресурс и возможно сделал бы wear leveling или алгоритм поменял бы как. Но ТС подробнее задачу не озвучил, тыкать пальцем в небо не стал. Тем боле CVAVR мне незнаком.


Ну, в общем, как по мне один фиг не стоит на это рассчитывать. Тем более, что библиотечная функция записи в епром при сбое её ячейки просто зависнет, поскольку, емним, мк просто не выставит бит завершения записи. А контролировать это через реализацию таймаута.... руками?... Анастасия Волочкова, мемуары: "Я и бал".

Лучше где-то подвинуться, ну, хотя бы просто помечать "в ожидании / нет" (вместо 90 циклов записи - 2) и после запуска, если в ожидании, то отсчитывать 90 секунд, и ладно. Выравнивание износа позволит увеличить потенциальное время работы еще раза в 64 (не помню, сколько там ячеек епрома на 13-й тиньке), но на ATtiny13 на все эти пердимонокли может тупа не хватить флэша. ))

P.S. Хотя да, 3 миллиона циклов вполне впечатляют. Но они сегодня есть, завтра нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 28 окт 2019, 03:47 
Старожил
Аватара пользователя

Зарегистрирован: 18 апр 2017, 03:01
Сообщения: 1414
Gnusmas писал(а):
Переподали питание, и "в течении 1,5 мин. включить невозможно" ?))
Не понял... проблема в том, что с этим кодом от _pv ожидание 1.5 мин. можно сбросить переподав питание? Чтобы от неё избавиться — просто можно «delay_s(90);» поставить не в конце главного цикла, а в его начале. Да, появится другая проблема — в течении 1.5 мин. после подачи питания нельзя будет включить мотор. Но это, может быть, совершенно не критичная проблема для ТС. И EEPROM насиловать не понадобится...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 28 окт 2019, 04:24 
Старожил
Аватара пользователя

Зарегистрирован: 18 апр 2017, 03:01
Сообщения: 1414
NStorm писал(а):
По ссылке видно, что фактически минимум 3М выдерживало.
Тесты — это хорошо. Но нужно учитывать особенности теста — там записывают и сразу же читают. А насколько долго смогут храниться данные в изношенных ячейках?
EEPROM вполне себе изнашивается. Как пример — модуль EVO-II стиральных машин Indesit и Ariston, в котором используется МК HD6433662С01Н без встроенного EEPROM и потому там есть рядом EEPROM 24C64. Эти машинки не сбрасывают программу при пропадании питания. Очевидно, что пишут состояние в EEPROM и скорее всего постоянно пишут (похоже, что ключевые точки программы), а не в момент пропажи питания. Так вот — если постоянно стирать на одной и той же программе, то примерно лет через 10 машинка иногда начинает просто останавливаться посреди стирки и никакой ошибки при этом не показывает. Помогает только передёргивание сети. Потом это случается всё чаще, а потом постоянно. Но если переключить на другую программу, то стирка проходит нормально. EEPROM при этом пишется и читается на программаторе нормально, перепрошивка помогает или ненадолго или вообще не помогает. А замена помогает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 28 окт 2019, 10:24 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2852
h4lf, ваши замечания в целом верны. Только вот по изначальному коду и вопросу ТС совершенно очевидно, что он не промышленное ус-во на века делает. И хранить там явно долго не надо. Я ж не спорю, что при таком варианте записи, ресурс eeprom будет изнашиваться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 29 окт 2019, 18:06 
Старожил
Аватара пользователя

Зарегистрирован: 18 апр 2017, 03:01
Сообщения: 1414
Изначальный код ТС не смотрел. Но всё же я не уверен, что ТС не делает что-то серьёзное... но скорее всего да, не делает.
NStorm писал(а):
И хранить там явно долго не надо.
Но явно надо дольше, чем в том тесте. Я с вами согласен, что трястись над EEPROM не всегда целесообразно. Я просто предложил сделать гораздо проще и вообще без использования EEPROM, и если появившийся недостаток не критичен для ТС, то почему нет...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 01 ноя 2019, 17:09 
Заглядывает иногда

Зарегистрирован: 16 июн 2019, 00:50
Сообщения: 39
h4lf писал(а):
Но явно надо дольше, чем в том тесте. Я с вами согласен, что трястись над EEPROM не всегда целесообразно. Я просто предложил сделать гораздо проще и вообще без использования EEPROM, и если появившийся недостаток не критичен для ТС, то почему нет...

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 03 ноя 2019, 18:15 
Только пришел

Зарегистрирован: 23 окт 2019, 15:34
Сообщения: 7
Даааа.... не думал что мой вопрос, про казалось бы простейшую кнопку развернет такую дискуссию. Тем не менее всем огромное спасибо. Прочитав все сообщения сделал вот так:
#include <tiny13.h>
#include <delay.h>
#include <stdint.h>


void delay_s(uint16_t s) {
while(s--) {
delay_ms(1000);
}
}

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


ACSR=0x80;



while (1)
{
while (PINB.1);
delay_us(200);
if (PINB.0==1)
PORTB.0=0;
PORTB.2=1;
delay_s(75);
PORTB.0=1;
PORTB.2=0;
delay_s(16);
while (!PINB.1);
delay_us(200);
}
}
Не знаю правильно или нет, но все работает уже даже в железе.
И тут как это обычно бывает возникла проблема. Нужно что бы во время работы таймера при нажатии на кнопку все останавливалось и возвращалось в начальное состояние.
Помогите изменить код.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 04 ноя 2019, 23:07 
Заглядывает иногда

Зарегистрирован: 16 июн 2019, 00:50
Сообщения: 39
jktu55 писал(а):
И тут как это обычно бывает возникла проблема. Нужно что бы во время работы таймера при нажатии на кнопку все останавливалось и возвращалось в начальное состояние.
Помогите изменить код.

Бгык... Напомнило старый анекдот:
— У меня программа не работает, не подскажете, где у меня ошибка?
— В ДНК!

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 05 ноя 2019, 09:42 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2852
Кнопку можно саму повесить на прерывание и выйти из delay по ней, например, программным сбросом.

Цитата:
И тут как это обычно бывает возникла проблема. Нужно что бы во время работы таймера при нажатии на кнопку все останавливалось и возвращалось в начальное состояние.
Помогите изменить код.

Только во время работы? Или во время простоя-ожидания тоже? Как надо реагировать во время ожидания на нажатие кнопки? После нажатия кнопки во время работы мотор тормозим, а реагировать на следующее нажатие? Снова его включать? Но тогда его так по много раз запуская можно будет больше 4х минут держать рабочим. В общем пишите полностью все условия.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 05 ноя 2019, 10:25 
Только пришел

Зарегистрирован: 23 окт 2019, 15:34
Сообщения: 7
Бгык... Напомнило старый анекдот:
— У меня программа не работает, не подскажете, где у меня ошибка?
— В ДНК!

А если серьёзно, то delay не прерывается. Он выполняется синхронно, это - простой цикл. И проблема именно в этом. "Правильная" реализация для измерения интервалов должна использовать, как минимум, аппаратный таймер, чтобы в процессе ожидания иметь возможность по нажатию на кнопку выполнить все необходимые действия. А это уже - не программа в пять строк.[/quote]

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 05 ноя 2019, 11:12 
Только пришел

Зарегистрирован: 23 окт 2019, 15:34
Сообщения: 7
Только во время работы? Или во время простоя-ожидания тоже? Как надо реагировать во время ожидания на нажатие кнопки? После нажатия кнопки во время работы мотор тормозим, а реагировать на следующее нажатие? Снова его включать? Но тогда его так по много раз запуская можно будет больше 4х минут держать рабочим. В общем пишите полностью все условия.[/quote]

Нажали кнопку-включился мотор. Мотор работает 4 мин. выключается. 1,5 мин.кнопка не реагирует на нажатие. Во время работы мотора нажатием на кнопку выключаем его. 1,5 мин.кнопка не реагирует на нажатие. Все.

Дело в том что я не собираюсь становиться программистом. Нашел несколько разработок таймеров как примеры, кто-то выкладывает исходные файлы, но они на ассемблере, кто то не дает исходных файлов вообще. Вообщем если можете помогите, нет значит нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Attiny13 кнопка
СообщениеДобавлено: 05 ноя 2019, 11:25 
Старожил
Аватара пользователя

Зарегистрирован: 21 мар 2016, 01:19
Сообщения: 716
jktu55 писал(а):
...Все равно я ничего не понял, что Вы пытались донести.

Он пытался сказать, что использование delay() блокирует выполнение программы. В Вашем случае - два очень длительных delay() на 75 и 16 секунд. Т.е. по факту 91 секунду программа ни на какие внешние события не реагирует.
Один из способов выхода из этого положения, как написал Шторм, повесить кнопку на прерывание.
Если же с прерываниями пока трудно - можно попробовать организовать программный таймер примерно так: определить переменную начала отсчета времени, а затем сравнивать её значение с текущим временем МК и уже по итогам сравнения выполнять те или иные действия. А длинные delay_s() выкинуть нафиг.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: smart_pic


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB