Page 70 of 109

Re: Термостат ∆T=0,1°C

Posted: 05 Apr 2013 19:46
by IYra
Alexei wrote: ну теоретически 100 Ом не должны сжечь контроллер или для надежности раззвязать транзисторными ключами?
Практически тоже не должны. Я делал вообще без сопротивлений, правда на зеленом маленьком индикаторе.
А ключи это лишнее.
Ну и еще. hardlock где-то на форуме писал что красный лучше видно на солнце.

Re: Термостат ∆T=0,1°C

Posted: 29 Apr 2013 10:41
by aleshka_4ik
Подскажите, как доработать текст программы, чтоб выключать дисплей.
Т.е., термостат используется, как пороговое устройство, выход на нагрузку только один (например PORTD.3, PORTD.2 свободен).
Нужно, чтоб пока на PORTD.3 лог.0, экран был потушен (в целях экономии батарейки), когда поднимается тем-ра и PORTD.3=1, включаются индикаторы.
Так же чтоб была кнопка, можно на PORTD.2, чтоб нажатием кнопки можно было включить дисплей, посмотреть тем-ру.

Спасибо.

Re: Термостат ∆T=0,1°C

Posted: 29 Apr 2013 18:54
by IYra
aleshka_4ik wrote:Подскажите, как доработать текст программы, чтоб выключать дисплей.
Нужно, чтоб пока на PORTD.3 лог.0, экран был потушен (в целях экономии батарейки), когда поднимается тем-ра и PORTD.3=1, включаются индикаторы.
Попробуй в функции ShowDisplayData(void) добавить
{
#ifdef Cathode
if (PIND.3==0)
{
PORTB = 0 ; return
}

PORTB = byCharacter[byDisplay[0]];

----
----

#ifdef Anode
if (PIND.3==0)
{
PORTB = 0xFF ;
return ;
}

PORTB = ~byCharacter[byDisplay[0]];

aleshka_4ik wrote: Так же чтоб была кнопка, можно на PORTD.2, чтоб нажатием кнопки можно было включить дисплей, посмотреть тем-ру. Спасибо.
Лишнюю кнопку можно наверно не заводить а использовать те что есть. Только завести глобальный флаг. Pokaz = 0
Если дисплей не горит то любое нажатие на кнопку - Pokaz = 10.
каждую секунду в функции уменьшаем Pokaz--
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
----
if (Counter > 0) //Counter - переменная для подсчёта времени отображения различных режимов
{
Counter --; //если она больше "0", то значит кто-то переключил режим отображения и
} //присвоил ей значение отличное от "0". Значит надо екрементировать,
else //пока не станет равной "0".
{
View = 0; //если она =0, то сбрасываем текущий режим на "0"
}

if (Pokaz > 0) //Pokaz - переменная для подсчёта времени отображения
{
Pokaz --; //если она больше "0", то значит была нажата кнопка
}

Re: Термостат ∆T=0,1°C

Posted: 30 Apr 2013 12:22
by aleshka_4ik
Попробуй в функции ShowDisplayData(void) добавить
{
#ifdef Cathode
if (PIND.3==0)
{
PORTB = 0 ; return
}
PORTB = byCharacter[byDisplay[0]];

----
----

#ifdef Anode
if (PIND.3==0)
{
PORTB = 0xFF ;
return ;
}
PORTB = ~byCharacter[byDisplay[0]];
Спасибо! Все получилось!
if (Counter > 0) //Counter - переменная для подсчёта времени отображения различных режимов
{
Counter --; //если она больше "0", то значит кто-то переключил режим отображения и
} //присвоил ей значение отличное от "0". Значит надо екрементировать,
else //пока не станет равной "0".
{
View = 0; //если она =0, то сбрасываем текущий режим на "0"
}

if (Pokaz > 0) //Pokaz - переменная для подсчёта времени отображения
{
Pokaz --; //если она больше "0", то значит была нажата кнопка
}
По поводу кнопки не совсем понял.
Для Pokaz тоже нужно условие переключения в режим View = 0 ?
И еще, нужно написать еще какое-то условие там где
#ifdef Cathode
if (PIND.3==0)
{
PORTB = 0 ; return }

ведь дисплей не включиться пока PIND.3==0, а соответственно PORTB = 0.

Re: Термостат ∆T=0,1°C

Posted: 30 Apr 2013 14:13
by IYra
aleshka_4ik wrote: По поводу кнопки не совсем понял.
По порядку.
1.
Добавляем глобальный флаг Pokaz
BYTE Counter = 0;
BYTE Pokaz = 0;
2.
При нажатии на любую кнопку Pokaz = 10
функция ScanKbd в kbd.c
// Если обнаружено нажатие на клавишу, то переходим к ее проверке.
if (KeyCode != 0)
{
byCheckedKey = KeyCode;
Pokaz = 10;
3.
каждую секунду в функции interrupt [TIM1_OVF] void timer1_ovf_isr(void) уменьшаем Pokaz на единицу
пока не станет 0
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
----
if (Counter > 0) //Counter - переменная для подсчёта времени отображения различных режимов
{
Counter --; //если она больше "0", то значит кто-то переключил режим отображения и
} //присвоил ей значение отличное от "0". Значит надо екрементировать,
else //пока не станет равной "0".
{
View = 0; //если она =0, то сбрасываем текущий режим на "0"
}
if (Pokaz > 0) //Pokaz - переменная для подсчёта времени отображения
{
Pokaz --; //если она больше "0", то значит была нажата кнопка
}

4.
Использование Pokaz в условие
#ifdef Cathode
if ((PIND.3==0)&(Pokaz==0))
{
PORTB = 0 ; return
}
0) //Counter - переменная для подсчёта времени отображения различных режимов
{
Counter --; //если она больше

Посмотрел я на пункт 2. Надо бы чтоб при первом нажатии изменялся только Pokaz.
А стандартная реакция на кнопки была бы уже при Pokaz > 0
Поэтому добавляем в другом месте
if( btKeyUpdate )
{
if (Pokaz==0) Pokaz=10
else

{
btKeyUpdate = FALSE;
ProcessKey();
}
}

Re: Термостат ∆T=0,1°C

Posted: 01 May 2013 17:26
by georg77
Вашему вниманию мои 5 копеек в общую копилку
на основе прошивки от grey4ip чуток переделал логику работы термостата и теперь один термостат может управлять и охладителем и нагревателем одновременно
6 и 7 пины - выходы на охладитель и нагреватель соответственно (1 - включено)
применение - в погребах, теплицах, взамен штатных регуляторов холодильников - морозильников и т. д. и т. п.
исключается одновременное включение нагревателя и охладителя, пределы установки температуры максимально расширены для универсальности термостата
прошу не пинать сильно если что-то не так

Re: Термостат ∆T=0,1°C

Posted: 10 May 2013 17:10
by Serioga
georg77 wrote:Вашему вниманию мои 5 копеек в общую копилку
на основе прошивки от grey4ip чуток переделал логику работы термостата и теперь один термостат может управлять и охладителем и нагревателем одновременно
6 и 7 пины - выходы на охладитель и нагреватель соответственно (1 - включено)
применение - в погребах, теплицах, взамен штатных регуляторов холодильников - морозильников и т. д. и т. п.
исключается одновременное включение нагревателя и охладителя, пределы установки температуры максимально расширены для универсальности термостата
прошу не пинать сильно если что-то не так
В "железе" пробовал, как работает ?

Re: Термостат ∆T=0,1°C

Posted: 11 May 2013 07:11
by georg77
да, пробовал
забыл написать, что прошивка под общий анод
из косяков - несколько неправильно работает точка на индикаторе, обозначающая включение нагрузки (логика её работы осталась прежней)
аларма пока нет
постараюсь всё поправить в будущем

Re: Термостат ∆T=0,1°C

Posted: 11 May 2013 07:34
by Serioga
georg77 wrote:да, пробовал
забыл написать, что прошивка под общий анод
из косяков - несколько неправильно работает точка на индикаторе, обозначающая включение нагрузки (логика её работы осталась прежней)
аларма пока нет
постараюсь всё поправить в будущем
Я правельно тебя понял:
Устанавливаем необходимую температуру и дельту.
При привышении Т+дельта, включаеться охлаждение ( на 6 выходе порта 1).
При понижении Т-дельта, включаеться нагреватель ( на 7 выходе порта 1).
Точка в первом розряде показывает только включенный нагреватель.
Индикатор только с общим анодом.
Все так ?

Re: Термостат ∆T=0,1°C

Posted: 11 May 2013 07:47
by georg77
именно так

Re: Термостат ∆T=0,1°C

Posted: 11 May 2013 10:26
by Serioga
georg77 wrote:именно так
Спасибо, попробую.

Re: Термостат ∆T=0,1°C

Posted: 13 May 2013 20:06
by georg77
кое - как впихнул в тиньку полноценную функцию аларма (регулируется как и другие параметры через нажатие 2-х кнопок)
кое - чем пришлось пожертвовать
но функцию паралельного управления нагревателем и охладителем удалось сохранить
протестирую пару-тройку дней и выложу

Re: Термостат ∆T=0,1°C

Posted: 14 May 2013 21:37
by Cannibal Corpse
Всем доброго времени суток
Нельзя ли переделать прошивку с ОА, задействовав PD2 в качестве входа для уменьшения яркости индикаторов.
Планируется установка в авто, термостат для управления вентилятором охлаждения двигателя

Re: Термостат ∆T=0,1°C

Posted: 15 May 2013 09:55
by IYra
Cannibal Corpse wrote:Всем доброго времени суток
Нельзя ли переделать прошивку с ОА, задействовав PD2 в качестве входа для уменьшения яркости индикаторов.
Веткой выше это уже обсуждалось. Типа как в тахометре.

Re: Термостат ∆T=0,1°C

Posted: 15 May 2013 22:39
by Cannibal Corpse
IYra, дайте пожалуйста ссылку

Добавлено спустя 6 минут 29 секунд:
Извиняюсь, принял выражение "ветка" за отдельную тему, нашел на предыдущей странице :)

Добавлено спустя 6 часов 42 минуты 28 секунд:
IYra, если Вас не затруднит, сделайте hex под порт PD2, в CVAVR первый раз залез, а оное чудо после кнопки компиляции еще и ругается забугорным языком да красным цветом

Re: Термостат ∆T=0,1°C

Posted: 16 May 2013 18:12
by IYra
Cannibal Corpse wrote:IYra, если Вас не затруднит, сделайте hex под порт PD2, в CVAVR первый раз залез, а оное чудо после кнопки компиляции еще и ругается забугорным языком да красным цветом
Предыдущий товарищ Alexei убрал кнопки и жестко прописал температуру срабатывания и дельту.
(97 и 5 вроде) Габариты подключал к PA1. Так не подходит ?
PS
В таком варианте можно использовать два порога включения для 2-х скоростного вентилятора

Re: Термостат ∆T=0,1°C

Posted: 16 May 2013 19:07
by georg77
Выкладываю желающим прошивку под ОА термостата с функцией нагрев/охлажд с алармом
Сделано на основе исходника от уважаемого Grey4ip и доведена до конца его идея Аларма
1 на 6-ом пине - нагрев
1 на 7-ом пине - охлаждение
Аларм сработает при отклонении температуры от выставленной на заданную величину
вход в регулировку аларма как и в другие регулировки - нажатием 2-х кнопок одновременно
если выставить А=0 - аларм (индикатор срабатывания - точка в самом правом разряде индикатора) – выключен
аларм можно использовать как второй порог для усиления нагрева или охлаждения (по вкусу)
прошивка не даст выставить аларм меньше Дельты (правда можно обмануть при желании - на устраниение этой "фичи" мне не хватило ёмкости флеша)
не хватило ног для вывода Аларма - я вытащил чёткий однозначный сигнал с помощью небольшой схемки на 2- транзисторах разной проводимости используя сигналы с 8 и 14 пина
функция коррекции датчика сохранена полностью
по умолчанию Туст=20 град, Дельта=0.5 град, Аларм=5.0 град, Корр=0.

Re: Термостат ∆T=0,1°C

Posted: 16 May 2013 20:31
by Cannibal Corpse
IYra wrote: Предыдущий товарищ Alexei убрал кнопки и жестко прописал температуру срабатывания и дельту.
(97 и 5 вроде) Габариты подключал к PA1. Так не подходит ?
PS
В таком варианте можно использовать два порога включения для 2-х скоростного вентилятора
Почти то, что мне нужно, но архива с файлом в ветке я не нашел

Re: Термостат ∆T=0,1°C

Posted: 16 May 2013 20:41
by IYra
Cannibal Corpse wrote: Почти то, что мне нужно, но архива с файлом в ветке я не нашел
А он свой окончательный вариант чего-то не выложил.
Я смотрел его предварительный вариант. Кое-что там подправил. Могу его выложить.
Какие диапазоны поставить ?

Re: Термостат ∆T=0,1°C

Posted: 16 May 2013 21:12
by Cannibal Corpse
IYra, , если можно 2 диапазона, то 80 и 95, гистерезис 5

Re: Термостат ∆T=0,1°C

Posted: 17 May 2013 18:37
by IYra
Cannibal Corpse wrote:IYra, , если можно 2 диапазона, то 80 и 95, гистерезис 5
Вот собрал. Проверил в Протеусе.
1. Если на PORTA.1 - 0 тогда добавляется задержка и яркость меньше.Как в тахометре.
2. Первая скорость PORTD.2 - 1 когда > 85 гр, 0 < 80 гр
3. Вторая скорость PORTD.3 - 1 когда > 100 гр, 0 < 95 гр

Re: Термостат ∆T=0,1°C

Posted: 18 May 2013 04:03
by Recov
georg77 wrote:не хватило ног для вывода Аларма - я вытащил чёткий однозначный сигнал с помощью небольшой схемки на 2- транзисторах разной проводимости используя сигналы с 8 и 14 пина
Подскажи, как аларм подключать, 8 и 14 идут на индикатор?

Re: Термостат ∆T=0,1°C

Posted: 18 May 2013 06:31
by georg77
выкладываю схемку вывода аларма

Re: Термостат ∆T=0,1°C

Posted: 18 May 2013 12:58
by Recov
Нагрузка пьезо излучатель или динамик?

Re: Термостат ∆T=0,1°C

Posted: 18 May 2013 13:18
by georg77
конечно пьезо, причём со встроенным генератором(продаются такие, где-то 10 руб), так как на выходе аларма ПОСТОЯННОЕ напряжение.