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

Запись "заводских" настроек в EEPROM AtMega8


-=FISHER=-

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

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

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

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

9 минут назад, ARV сказал:

Во-первых, я сразу написал, что что-то напортачил с "краями"... 

Да я всё понял, очень жалко что в таком виде логика не работает. Думал может что-то очевидное упускаю.

Мы все учились по-немногу, чему-нибудь и как-нибудь...

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

9 часов назад, -=FISHER=- сказал:

Но вот незадача, как только упремся в 255 или 0, сюда больше не можем зайти!

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

Мудрость приходит вместе с импотенцией...

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

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

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

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

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

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

10 часов назад, Starichok сказал:

просто нужно еще добавить проверку двух условий - когда равно 255 и когда равно нулю. 

Спасибо, добавил. В этом случае "мигаем" пока кнопка остается нажатой. Потом кнопку отпусили и при следующем нажатии яркость должна начать в противоположную сторону. Но ведь теперь туда уже не войти? Голову сломал уже, как же найти такой алгоритм, чтобы это заработало?...

void set_bright(uint8_t cnum, uint8_t mode)
{
	if((chanel[cnum].Bright[mode] < 255) && (chanel[cnum].Bright[mode] > 0)) //изменяем яркость, пока не упремся в границу
	{
		chanel[cnum].Bright[TARGET]+=dir;
	}
	
	if((chanel[cnum].Bright[mode]==255)||(chanel[cnum].Bright[mode]==0)) //если уперлись в нижнюю или верхнюю границу
	{
		//мигаем
	}
}

 

Мы все учились по-немногу, чему-нибудь и как-нибудь...

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

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

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

В общем я сделал "по тупому":

void set_bright(uint8_t cnum, uint8_t mode)
{
	if(dir==1) //если увеличиваем яркость
	{
		if(chanel[cnum].Bright[mode] < 255) //пока не уперлись в потолок увеличиваем яркость
		{
			chanel[cnum].Bright[TARGET]+=dir;
		}
		else //а когда упёрлись
		{
          	//мигаем тем каналом, яркость которого регулировали, останавливая мигание
          	//на предельном значении потолка, т. е. 255
			if(cnum==0){OCR1A=0; _delay_ms(100); OCR1A=255; _delay_ms(100); }
			if(cnum==1){OCR1B=0; _delay_ms(100); OCR1B=255; _delay_ms(100); }
		}
	}
	
	if(dir==-1) //если уменьшаем яркость
	{
		if(chanel[cnum].Bright[mode] > 0) //пока не уперлись в пол увеличиваем яркость
		{
			chanel[cnum].Bright[TARGET]+=dir;
		}
		else //а когда упёрлись
		{
          	//мигаем тем каналом, яркость которого регулировали, останавливая мигание
          	//на предельном значении потолка, т. е. 0          
			if(cnum==0){OCR1A=255; _delay_ms(100); OCR1A=0; _delay_ms(100);}
			if(cnum==1){OCR1B=255; _delay_ms(100); OCR1B=0; _delay_ms(100);}
		}
	}	
}

 

Мы все учились по-немногу, чему-нибудь и как-нибудь...

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

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

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

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

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

вопрос: когда у тебя изменяется знак dir?

если после отпускания кнопки, то получится ерунда.

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

нужно знак приращения менять после достижения 255 или достижения нуля.

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

а после отпускания кнопки знак dir изменится только в том случае, если новая переменная равно 1.

а в выше приведенной функции, когда яркость меньше 255 и когда больше 0,  добавить присвоение новой переменной значения ноль.

 

 

Мудрость приходит вместе с импотенцией...

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

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

14.09.2019 в 11:46, Starichok сказал:

вопрос: когда у тебя изменяется знак dir?

если после отпускания кнопки, то получится ерунда.

Да при отжатии кнопки, сейчас всё работает именно так как я и задумывал.

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

14.09.2019 в 11:46, Starichok сказал:

нужно знак приращения менять после достижения 255 или достижения нуля.

По моему плану именно при отпускании кнопки.

Мы все учились по-немногу, чему-нибудь и как-нибудь...

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

тебе, конешно,  виднее, я твоих планов не знаю.

но на мой взгляд, ты не правильно спланировал.

еще раз повторю:

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

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

добавить одну переменную - ноль проблем. зато не придется лишние разы торкать кнопку.

 

хотя, может быть я не прав, и тебе после увеличение нужно именно уменьшение, а не продолжение увеличения.

Мудрость приходит вместе с импотенцией...

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

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

@Starichok , тут логика такая: когда дожидаешься достижения определенного значения автоматически изменяемого параметра (тут - яркости), то велик шанс проскочить нужный уровень. И тут как раз уместно изменение знака приращения на противоположный, чтобы легко вернуться на нужный уровень :) 

Я делал по почти такому алгоритму управление термостатом при помощи одной кнопки, только у меня знак приращения менялся при отпускании кнопки только в том случае, если кнопка удерживалась нажатой больше 2,5 секунд, а если меньше - знак сохранялся. Это позволяло короткими тычками регулировать в пределах 1-2 шага в одну сторону, а смена направления возникала при намеренном проскоке требуемого значения.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

понятное дело. именно поэтому я и сделал такую припуску к своему предыдущему посту.

Мудрость приходит вместе с импотенцией...

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

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

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

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

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

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

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

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

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

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

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

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

×
×
  • Создать...