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

Автоматизация процесса на AVR


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

Привет.)

Нужно реализовать подобный алгоритм.

0.жмем кнопку и держим - режим калибровки. плюс на порте 0(индикация).

(далее короткие нажатия)

1.жмем кнопку еще раз - плюс на порте 1

2.жмем кнопку еще раз - ноль на порте 1

запоминаем время между нажатиями 1 и 2, считаем и запоминаем время до следующего нажатия кнопки

3.жмем кнопку еще раз - плюс на порте 2

4.жмем кнопку еще раз - ноль на порте 2 

запоминаем время между нажатиями 3 и 4, считаем и запоминаем время до следующего нажатия кнопки

5.жмем кнопку еще раз - плюс на порте 3

6.жмем кнопку еще раз - ноль на порте 3

запоминаем время между нажатиями 5 и 6

7.жмем кнопку и держим - выходим из режима калибровки. 
ноль на порте 0(тушим индикацию калибровки).
плюс на порт 4. индикация работы установленного режима.

включаем и выключаем те-же порты(1-3) в той-же последовательности, соответственно времени задержки между нажатиями по кругу(зацикленно, ожидая следующей калибровки)

время задержки между нажатиями 1-2 ориентировочно 30 - 90 минут.
между 3,4 и 5,6 == 15-60минут

между нажатиями 2,3 и 4,5 == 1-5минут

время между повторением цикла - от нескольких до 8-12 часов.

................................................................................

так-же, параллельно к этому, нужно каждые 12 часов включать и отключать еще какой-то порт. или в соотношении 18/6, 16/8 вкл/выкл. (для установки отдельная кнопка со своим алгоритмом)

работать это все должно круглосуточно.

необходимо что бы установленная(калибровка) программа не обнулялась при перебоях в сети.

если будет отключаться свет - будет работать бенз.генератор.

так вот, нужно что бы чип не выбивался из графика 12/12, 18/6, 16/8 вкл/выкл. 

..........................................................................................................

я уже давно баловался с АВР-ками. нечто подобное осилил бы ТОГДА, но сейчас, уже мало что помню.

посоветуйте, как рациональней реализовать эту задумку.

..........................................................................................................................................

можно ли обойтись внутренними таймерами/счетчиками или нужно будет подключать еще-что(или вместо) извне?

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


допустим что бесперебойника с аком пока-что нету.
какой камень вы бы посоветовали? как и на чем реализовали бы подобную задачу? если можно опишите идею программки в общем. что бы вы задействовали из внутренностей МК или дополнительно?

кратко основные понятия, названия, аббревиатуры, определения и т.п.... т.е. что мне нужно использовать, знать, уметь, понимать (вспомнить, доучить, разобраться) по вашему?  и как устраивать взаимодействие между всем тем?

надеюсь достаточно понятно объяснил.

наставьте на путь, плз.)

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

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

1 час назад, Sahenus сказал:

надеюсь достаточно понятно объяснил. наставьте на путь

У вас несложная задача. Видно 2 пути.

Путь 1. Взять МК, например, любой AVR (самый простейший, хоть ATtiny13), источник питания, небольшой аккумулятор, книжку для начинающих программировать МК, например, Белова, по ней снова научиться(вспомнить)  программировать, написать эту элементарную программу, сделать простейший программатор (например, 5 проводков) или купить/попросить на время какой-нибудь, запрограммировать МК. Все.  Для вашей задачи хватит ресурсов любого МК AVR. Если нужна высокая точность,  то вместо 8-ногого МК придется взять МК с бОльшим числом выводов, чтобы подключить еще и кварц.  Attiny2313,  например.

Путь 2. Если нет времени или желания вспоминать, как вы делали это когда-то, то найти кого-нибудь, кто сделает эту работу для вас.

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

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

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

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

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

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

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

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

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

Зачем же тиньку сразу, тут как раз ардуинка просится. С ионисторами связываться не советую, ненадёжные они на интервале в года, там вполне хватит обычных пальчиковых батареек и переключатель на диодах. В крайнем случае, если батарейки не самые дешёвые раз в 3 года поменять их, если электричество не отключалось и делов. Остальное всё трэш. Аккумуляторы сдохнут со временем, ионистор под напряжением тоже(у него там гарантированная наработка под номинальным напряжением что-то вроде 10000 часов, в лучшем случае) А ёмкость, даже у хорошего ионистора в 100фарад всего несколько миллиампер-часов.

А идея вашей программы простая... не надо ничего измерять между нажатиями кнопок, а в режиме калибровки просто каждую минуту ЗАПИСЫВАТЬ в память состояние контактов, потом воспроизвести. Сколько там памяти надо? 12*60 = 720 ячеек(сразу до 8 каналов можно писать). Встроенная EEPROM справится, если нет - есть широкая номенклатура внешних по I2C и не меньший выбор библиотек для работы с ними в ардуине. Часто в Китае продают сразу платку с RTC + EEPROM, не знаю, правда, зачем именно вам нужны будут часы в данной конструкции(может, как побочная функция? Индикация текущего цикла там и т.п.) но EEPROM пригодится. И счастье это все за 1.5$ и ардуинка за 2$. Ну там, модуль реле может быть ещё... если самому паять лень.

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

Но ИМХО, заморочный какой-то способ обучения, не проще ли просто указать отметки времени в цикле когда что на каком канале включить и отключить? Модуль индикации на светодиодах для ардуины тоже продаётся, и не так дорого и сразу на 8 цифр. Останется только это всё собрать проводками, указать в библиотеках что куда подключено(по примерам к библиотекам) и можно работать.

Учение - изучение правил. Опыт - изучение исключений.

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

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

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

@Alexeyslav я вот думал.. если переложить задачу с суточным режимом 12/12 16/8 18/6 20/4 на другой МК или другое устройство. то все в целом похоже на гирлянду. методом научного тыка я могу определить приблизительное время задержек. т.е. предварительно, а не ситуативно.

если МК будет работать на частоте от часового кварца деленного на 128 - можно будет ориентироваться на секунды/минуты или на каждые 5 секунд, к примеру.
останется перевести время в количество тактов  и с помощью соответствующее настроенных программных задержек  делать то или иное действие.. по сути - как моргать лампочкой в гирлянде. только с большими интервалами.

можно попробовать сделать через таймер. подключить кварц к нему. разделить и прерывать каждую секунду или несколько секунд и т.д.. но это уже более заморочистей.

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

по моему это самые примитивные и простые варианты решения. быстро, просто, я смогу. работоспособно. минус - не удобно в эксплуатации.)

интервалы будут меняться со временем  и что бы не перепрошивать каждый раз ()каждые несколько дней МК - хотелось бы ситуативную подстройку.

 

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

одна задача - включет/выключает, другая - переключает. как сделать что бы один МК переключал пока включает/выключает я еще не знаю.

не могу разобраться как узнать сколько прошло времени 03мин -(минус) 58мин это не 5 минут и не 55. чем то не тем мыслю наверное.) разве что досчитывать вручную от 58 до 03, но это лютый костыль..))

можно подключить память. просчитать сетку что когда..  смотреть, сравнивать и реагировать... но это по моему тоже лишние пляски. проще потратить на еще один МК несколько центов или бакс в крайнем случае..

пока что остановился на этом.. еще есть время подумать. не откажусь от помощи с соответствующей благодарностью с моей стороны.. если буду не успевать.)

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

Так кнопками и с индикатором ты можешь оперативно менять "программу" и не надо ничего прошивать. Примерно как с механическим суточным таймером, только там один шаг это 15 минут. И на каждый из интервалов поднята лапка или опущена. У тебя будет 1 - включено или 0 - выключено. Кнопки можно завести +- часы, +- минуты, вкл/выкл. Недавно вон взял модуль к ардуине для отладок всяких, там 16 кнопок и 8 индикаторов 7-сегментных. Вполне достаточно для контроля и визуализации процесса.

Учение - изучение правил. Опыт - изучение исключений.

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

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

Скрытый текст

#include <avr/io.h>
#include <avr/interrupt.h>
//#include <avr/eeprom.h>

uint16_t count_button;			// счетчик паузы опред. нажатия кнопки
uint8_t	 count_button_long;		// счетчик длительного нажатия кнопки
uint8_t  flag_button;			// флаг определения нажатия кнопки
uint32_t all_period[5];			// периоды (1-2, 2-3, 3-4, 4-5, 5-6)
uint32_t count_kalibr;			// секундный 32-битный счетчик
uint8_t  count_period;			// считаем с каким периодом работаем
uint8_t  flag_kalibr;			// 0-ожидание новой калибровки,
								// 1-подготовка,
								// 2-калибровка начата,
								// 3-ожидание запуска,
								// 4-выполнение периодов и ожидание новой калибровки
volatile uint8_t sec, min, hour, set_time;
volatile uint8_t step;			// 0-апаем час, 1-апаем минуты, 2-выход из режима изменения реального времени

ISR (TIMER2_COMP_vect){ // 1 сек
	sec++;
	MCUCR &=~ (1<<SE);
	if(sec > 59){sec=0; min++;}
	if(min > 59){min=0; hour++; if(hour == 24){hour=0;}}

	if(flag_button){
		if(flag_kalibr == 0 || flag_kalibr == 4){
			if(++count_button_long == 3){flag_kalibr=1; PORTC |= (1<<PC0); PORTC &=~ 0x1E;} // удержание кнопки для начала калибровки
		}
		if(flag_kalibr == 3){
			if(++count_button_long == 3){flag_kalibr=4; PORTC &=~ (1<<PC0); PORTC |= (1<<PC4);} // удерж. кнопки для запуска периодов
		}
	}
	
	if(flag_kalibr == 2) count_kalibr++; // калибруем

	if(flag_kalibr == 4){
		count_kalibr++; // выполняем
		if(count_kalibr == all_period[count_period]){if(++count_period == 5){count_period=0; count_kalibr=0; PORTC &=~ (1<<PC3);}}
	}
}

ISR (TIMER0_OVF_vect){	// 2ms
	static uint16_t count_change;
	static uint8_t flag_b, count_delay;
	if(!(PINB&(1<<PB0))){
		if(++count_change == 1500){ // 3сек удерживалась кнопка
			if(step == 1){PORTC &=~ (1<<PC4); min--; if(min == 255){min=59;}step=2;}// было измен. минут, завершим процедуру измен. времени
			if(step == 0){PORTC &=~ (1<<PC0); PORTC |= (1<<PC4); hour--; if(hour == 255){hour=23;}step=1;}//было измен. часа, перейдем на измен. минут
		}
		if(++count_delay == 50){ // определяем короткое нажатие (лог. 0 присутствовало на PB0 в течении 100ms)
			count_delay=0;
			if(!flag_b){	
				flag_b=1;
				if(step == 0){if(++hour == 24){hour=0;} PORTC |= (1<<PC0);} //апаем часы, загорелся светик и кнопку можно отпускать
				if(step == 1){if(++min == 60){min=0;} PORTC |= (1<<PC4);} // минуты -//-
			}
		}
	}
	else{flag_b=0; count_change=0; count_delay=0; PORTC &=~ 0x11;}
}

int main(void)
{
   hour=12; // по умолчанию при включении время 12:00
   DDRC |= (1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4);
   PORTB |= (1<<PB0);
   if(!(PINB&(1<<PB0))){ // если нажата кнопка при включении, то можно изменить реальное время
		hour=255;
		TCCR0 |= (1<<CS01);	// 1000000/8/256 = 2ms
		TIMSK |= (1<<TOIE0);
		sei();
		while(!set_time){if(step == 2){TCCR0=0; set_time=1;}}
   }
   ACSR |= (1<<ACD);
   MCUCR |= (1<<SM1)|(1<<SM0);
   cli();
   ASSR |= (1<<AS2);
   while(ASSR != (0b00001000));
   TCCR2 |= ((1<<CS22)|(1<<CS21)|(0<<CS20)|(1<<WGM21)); // 32768/256=128, стс
   OCR2 = 127;
   TIMSK |= (1<<OCIE2);
   TIFR = 0;
   
   sei();

    while (1) 
    {
  		if(!(PINB&(1<<PB0))){
	  		if(++count_button == 6000){ // возможно надо будет изменить (прикинуто под частоту мк 1Мгц)
		  		count_button=0;
		  		if(!flag_button){
					if(flag_kalibr == 1){flag_kalibr=2; count_kalibr=0; count_period=255;}
					if(flag_kalibr == 2){
						all_period[count_period]=count_kalibr;
						if(++count_period == 5){
							flag_kalibr=3; count_period=0; count_kalibr=0; PORTC &=~ (1<<PC3);
						}
					}
					flag_button=1;
				}
			}
		}
		else{count_button=0; flag_button=0; count_button_long=0;}

		if(flag_kalibr == 2 || flag_kalibr == 4){
			if(count_period == 0) PORTC |= (1<<PC1);
			if(count_period == 1) PORTC &=~ (1<<PC1);
			if(count_period == 2) PORTC |= (1<<PC2);
			if(count_period == 3) PORTC &=~ (1<<PC2);
			if(count_period == 4) PORTC |= (1<<PC3);
		}

		if(ASSR == 8 && flag_kalibr == 4 && PINB&(1<<PB0)){MCUCR |= (1<<SE); asm("sleep");}
    }
}

 

пункты алгоритма 0 - 7, плюс тикает реальное время, которое можно задать сразу после включения (удержание кнопки при включении)

остальное довинчиваем сами, в использовании еепром не вижу необходимости, резервное батарейное питание МК увековечит работу уст-ва.

при тестировании нельзя задавать периоды менее 2 сек.

auto_proc1.zip

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

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

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

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

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

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

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

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

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

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

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