Easyelectronics.ru

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

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



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

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

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


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


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

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3358
Код:
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
Сообщения: 842
Откуда: 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
Сообщения: 3358
я не знаю что за компилятор и что за 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
Сообщения: 2500
Код:
#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
Сообщения: 2500
Да почти ж ваш код один в один. Только вместо простыней из пачки delay_us, функция delay_s от _pv, которая делает просто delay_ms(1000) = 1000 мс = 1с. Ну и я добавил еще сохранение последней задержки на 90с в EEPROM. Каждая секунда оставшаяся записывается. Если во время "когда 90с надо чтобы не запустился" с МК пропадет питания, после перезапуска он подождет оставшееся время. Чтобы при глюке питания/сбросе МК не дал сразу запустить, как выше Gnusmas заметил справедливо.


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

Зарегистрирован: 16 июн 2019, 00:50
Сообщения: 35
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
Сообщения: 2500
Об этом ТС ничего не писал. Равно как и о том, насколько часто включается мотор. К тому же по факту eeprom у avr выдерживает куда больше циклов записи обычно.


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

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

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


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

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

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


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


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


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

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


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

Зарегистрирован: 16 июн 2019, 00:50
Сообщения: 35
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
Сообщения: 1353
Gnusmas писал(а):
Переподали питание, и "в течении 1,5 мин. включить невозможно" ?))
Не понял... проблема в том, что с этим кодом от _pv ожидание 1.5 мин. можно сбросить переподав питание? Чтобы от неё избавиться — просто можно «delay_s(90);» поставить не в конце главного цикла, а в его начале. Да, появится другая проблема — в течении 1.5 мин. после подачи питания нельзя будет включить мотор. Но это, может быть, совершенно не критичная проблема для ТС. И EEPROM насиловать не понадобится...


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

Зарегистрирован: 18 апр 2017, 03:01
Сообщения: 1353
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
Сообщения: 2500
h4lf, ваши замечания в целом верны. Только вот по изначальному коду и вопросу ТС совершенно очевидно, что он не промышленное ус-во на века делает. И хранить там явно долго не надо. Я ж не спорю, что при таком варианте записи, ресурс eeprom будет изнашиваться.


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

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


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

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

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

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


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

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2500
Кнопку можно саму повесить на прерывание и выйти из 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
Сообщения: 586
jktu55 писал(а):
...Все равно я ничего не понял, что Вы пытались донести.

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


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


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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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