Змінюй хід війни! Допомагай ЗСУ!

Электрофлуд :)

  • Автор теми Автор теми RUH
  • Дата створення Дата створення
Поищи в сети хелпы. Инфы полно. ПРосто на пальцах объяснять трудно. В хелпах все с картинками даже. :)



Удивительно, но описание самого климат-контроля заняло сущую ерунду. Вся громоздкость ушла на переключение режимов и обслуживание LCD и кнопок. :)

Это все, что касабельно именно климат-контроля, т.е. регулировки оборотов двигателя в зависимости от совокупностей температур:

if ((control==1)&(temp1<10)&(temp2<10)&(temp3<tt)){TCCR1A=0b11000001;TCCR1B=0b00001001;OCR1AH = 0x00;OCR1AL=255;};
if ((control==1)&(temp1>10)&(temp2<10)&(temp3<tt)){TCCR1A=0b11000001;TCCR1B=0b00001001;OCR1AH = 0x00;OCR1AL=60;};
if ((control==1)&(temp1>10)&(temp2<10)&(temp3==(tt-3))){TCCR1A=0b11000001;TCCR1B=0b00001001;OCR1AH = 0x00;OCR1AL=140;};
if ((control==1)&(temp1>10)&(temp2<10)&(temp3==(tt-2))){TCCR1A=0b11000001;TCCR1B=0b00001001;OCR1AH = 0x00;OCR1AL=140;};
if ((control==1)&(temp1>10)&(temp2<10)&(temp3==(tt-1))){TCCR1A=0b11000001;TCCR1B=0b00001001;OCR1AH = 0x00;OCR1AL=140;};
if ((control==1)&(temp1<10)&(temp2>=10)&(temp3<tt)){TCCR1A=0b11000001;TCCR1B=0b00001001;OCR1AH = 0x00;OCR1AL=255;};
if ((control==1)&(temp1>10)&(temp2>=10)&(temp3<tt)){TCCR1A=0b11000001;TCCR1B=0b00001001;OCR1AH = 0x00;OCR1AL=120;};
if ((control==1)&(temp1>10)&(temp2>=10)&(temp3==(tt-3))){TCCR1A=0b11000001;TCCR1B=0b00001001;OCR1AH = 0x00;OCR1AL=180;};
if ((control==1)&(temp1>10)&(temp2>=10)&(temp3==(tt-2))){TCCR1A=0b11000001;TCCR1B=0b00001001;OCR1AH = 0x00;OCR1AL=180;};
if ((control==1)&(temp1>10)&(temp2>=10)&(temp3==(tt-1))){TCCR1A=0b11000001;TCCR1B=0b00001001;OCR1AH = 0x00;OCR1AL=180;};
if ((control==1)&(temp3>=tt)){TCCR1A=0;TCCR1B=0;OCR1AH = 0x00;};

:D

Бля от не пойму - накой это на С делать?? :здивований:С дуба рухнуть можно нах от таких конструкций :D Объявить массив религия не позволила, а при попытке - сильно отругала? :іржач:

Такое делается не в цикле, а таблично, tt-2 - не надо :баран: всё делается на смещениях в асме и на векторах в С.

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

P.S. Забил читать про протеус - KiCad задолбаю - буду чист душой и перед всеми честен :D он опен сорс и GPL. 3D модели конечно родный - каличь ещё та, но я своих уже наловчился рисовать. Даже в прилагаемом wings3d уёбищном - можно чё-то сваять. Что сложнее - придётся заюзать в некоммерческих целях 3Дмакса немного. :)
Вообще прикольный опенсорсный свободный кад. Если бы с него в LTSpice конвертор кто-нить написал бы - цены б ему небыло.

А протеус я зафукал, почитав количество ругательных отзывов на его симуляцию микроконтроллеров. Да, и протеус не любит Атмыли - он изначально под микрочип был заточен, а микрочип со времён страничной памяти - мой идейный противник и я его бойкотирую :)
 
Ну как минимум можно было бы сделать одну конструкцию if ((control==1) и в ней работать с остальными условиями.
 
RESET, я же писал, что на асме я бы сделал, но мне нужно практиковаться в Си! И представь сколько бы у меня ушло на это времени!
Какой к черту массив? :іржач: Что ты хочешь внести в массив, четыре значения температуры?!
А вот условия выборки в IF и ELSE самое удобное писать! Про CASE я молчу.. :) Там же постоянные сравнения условий с константами!!! :D Куда там тулить массив? :D
tt - текущая необходимая, установленная, температура. ;)
RES, ты давай ото не критикуй, а "вывали" что-нибудь эдакое, шоб народ за ужином глядючи на девайс и читая форум, лучше желудочный сок вырабатывал!))))) ;)

Кстати, чудеснейшая вещь получилась! :) Езжу в машине, и забыл что такое ручка включения двигателя отопителя! :) Сначало, пока температура в салоне мала, мотор работает чуть шумнее, быстрее, а потом уменьшает обороты и совсем выключается, периодически включаясь поправляя "градус".. :)
Алгоритм я конечно же поправил (SPI разъем заблаговременно вывел в удобное место), приспособив программу к условиям салона. Больше я без климат-контроля ездить не хо!!! :) К хорошему быстро привыкаешь! :D

Ну что, кто еще запостит "проект выходного дня"?:) ;)

Ну как минимум можно было бы сделать одну конструкцию if ((control==1) и в ней работать с остальными условиями.

У меня два режима "сontrol" и "heat" . :) Мне необходимо их проверять по задуманному ТЗ, потому как каждое работает в отдельности и взаимоисключении друг-друга. :)
Также я предусмотрел режим "ошибки датчиков", и тогда работает толькоручной режим ШИМ мотора отопителя. :) ;) Я же не выкладывал сюда всю простыню и условия, я просто ограничился ШИМ в зависимости от условий температуры лишь одного режима из многих. :)
 
Останнє редагування:
орёл (игл) 3D лучше делает, хотя симуль в протеусе тоже доставляет, хотя и кривой, USB отрабатывает на ужас криво. Если хоть немного подравнивать тайминги под девайс происходит полный холивар.
 
орёл (игл) 3D лучше делает, хотя симуль в протеусе тоже доставляет, хотя и кривой, USB отрабатывает на ужас криво. Если хоть немного подравнивать тайминги под девайс происходит полный холивар.

Есть каким девайсом похвастать?:) Таким вот, который работы не касается, который "для себя" любимого..:)
 
RESET, я же писал, что на асме я бы сделал, но мне нужно практиковаться в Си! И представь сколько бы у меня ушло на это времени!
У меня в асме пишется быстрее, чем в С под АВрки :)

Какой к черту массив? :іржач: Что ты хочешь внести в массив, четыре значения температуры?!
int pwm [] ={0,100,180,255};

А вот условия выборки в IF и ELSE самое удобное писать! Про CASE я молчу.. :)
А зря. Switch рулит.
dt=tt-tr;
switch ( dt ) {
case 0:
OCCR1B/*к примеру*/=pwm0;
case 1:
OCCR1B/*к примеру*/=pwm1;
case 2:
OCCR1B/*к примеру*/=pwm2;
case 3:
OCCR1B/*к примеру*/=pwm3;
}
Как-то так, ну и т.д.

Ты ж сказал, что тебе в С практиковаться надо? Вот и приучай себя писать в С, а не мысли в ассемблере транслитерировать в С :D Уж очень ржачно получается.

Кстати, чудеснейшая вещь получилась! :) Езжу в машине, и забыл что такое ручка включения двигателя отопителя! :)

Пля. не рвите мне душу :D Мне ещё кран отопителя менять надо.

P.S. А проектов выходного дня у меня как-то и не бывает... Люблю фундаментальный подход.
 
Пля. не рвите мне душу :D Мне ещё кран отопителя менять надо.
P.S. А проектов выходного дня у меня как-то и не бывает... Люблю фундаментальный подход.
Кстати, где-то видел краны с "электрическим управлением". Может применить?:) ;)
 
Есть каким девайсом похвастать?:) Таким вот, который работы не касается, который "для себя" любимого..:)

Для себя любимого? Да вот на выходных ваял из старого хлама :)
Надоело мне бегать через одну комнату смотреть на градусник уличный и запилил ночник с двумя термометрами улица/комната. Светильник из порезаных пополам палочек прозрачного термоклея, в торцах светодиоды. Теперь не вставая с кровати знаю как одеваться на работу :D
Режимы работ: выключено/термометр/термометр+свет.
Осталось морду обклеить самоклейкой и пару нюансов в коде.
 

Вкладення

  • 25102010069.jpg
    25102010069.jpg
    76.4 КБ · Перегляди: 258
  • 25102010070.jpg
    25102010070.jpg
    36.6 КБ · Перегляди: 278
roker, круть! :) Вот у народа фантазия (в хорошем смысле).
ЗЫ И сколько щас на улице?
 
У меня на Киевской 4 градуса :)
 
Для себя любимого? Да вот на выходных ваял из старого хлама :)
Надоело мне бегать через одну комнату смотреть на градусник уличный и запилил ночник с двумя термометрами улица/комната. Светильник из порезаных пополам палочек прозрачного термоклея, в торцах светодиоды. Теперь не вставая с кровати знаю как одеваться на работу :D
Режимы работ: выключено/термометр/термометр+свет.
Осталось морду обклеить самоклейкой и пару нюансов в коде.

Слушай, классная идея! :) Я бы не в жизнь не додумался из термоклея световоды сделать. :)
 
Клей, кстати, хреноватый как световод. Товарищ делал из зашкуреных наждачкой прозрачных авторучек, но мне захотелось именно из клея. Свечение получается красивое, хоть и не слишком яркое, но читать я и не собираюсь при нем. :)
 
Воблин. Созрел проект выходного дня. Он конешно не в целях самообразования, а под заказ, но день, в общем-то, был почти выходной...
Просто я попёрся в больницу не мелкую операцию, а меня там нагло заперли на полтора суток.
По отсутствию ноутбука (ну стрёмно его туда брать, ещё спиздят пока оперироваться буду... ) - ваял на бумаге. Вспомнил детство голожо.. босоногое.

Так на бумаге наваял жеж круто, а попросили на С... под ATTiny13 (куда там уже тот С, но желание клиента - закон), короче всё, что набредил под воздействием димедрола с анальгином - не влезло. Пришлось ужать, и-то загрузка флэши 97,9% (то есть ещё штуки 4 простых инструкции влезет, или один плохонький условный оператор). Вспомнилась "история одного байта"... поностальгировал...


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

Вот думаю мож подшутить над заказчиком - зарубить выключение по кнопке и забыть предупредить :) ? Ну так же 100% разбудит - тыць тыць - пищит... Знач придётся вставать идти искать где БП воткнут, вынимать его... короче - точно проснётся :D

P.S. Так и не вдуплил как правильно в С врубить power down mode так, чтобы по прерыванию INT0 с ноги даунская танька просыпалась... Пришлось ограничиться idle mode и оставить тактовый генератор включеным, а таймер гасить вручную, штоб не рыпался. Чесгря - разницу в потреблении повер-даун и айдл-моде - засечь не смог ввиду отсутствия лабораторного микроамперметра :) Тестер послал нах и сказал, што тока нет.
 
Останнє редагування:
зачем вообще использовать повер даун или идл при работе от бп? ;)
 
Так и не вдуплил как правильно в С врубить power down mode так, чтобы по прерыванию INT0 с ноги даунская танька просыпалась...
А если так:

//IAR CC
MCUCR |= ((1<<SE)|(1<<SM1)|(0<<SM0)|(здесь выбираем условие генерации INT0));
GIMSK |= (1<<INT0); // разрешаем INT0
__sleep(); // и баиньки
// по приходу INT0 просыпаемся,в обработчике первой строкой прописать:
MCUCR &= ~(1<<SE); // запрет спячки
 
зачем вообще использовать повер даун или идл при работе от бп? ;)

Аяибу? Попросили сделать так :) Мож человек планирует от батареек питать потом. Если от батареек - 3 щелочные батарейки будут в таком режиме питать схему совершенно эпическое количество времени.

А если так:

//IAR CC
MCUCR |= ((1<<SE)|(1<<SM1)|(0<<SM0)|(здесь выбираем условие генерации INT0));
GIMSK |= (1<<INT0); // разрешаем INT0
__sleep(); // и баиньки
// по приходу INT0 просыпаемся,в обработчике первой строкой прописать:
MCUCR &= ~(1<<SE); // запрет спячки

Это под какой компиллятор? AVRGCC не знает макрос __sleep(). Я пишу
asm ("SLEEP");

sei(); и cli(); жцц понимает. Слип - не хотит.

В общем-то у меня и так прописано MCUCR=0x30, что эквипенисуально вышеприведенному, но короче :)

P.S. Причем - в симуляторе у меня замечательно всё просыпается, а в жизни - болтяка
 
Указано в первой-же строке.
А, я просто каменты читаю только когда код непонятен :)

Можно посмотреть на код?

Та шо его смотреть. Вот:

int main (void)
{
start:
asm ("cli");//cli();
PORTB=0x08;
TCCR0B=0x08;
DDRB=0x15;
//PORTB|=0x05; //пищим и светим
OSCCAL=0x5B;
tim0Set(fp,255,51,0);
asm ("sei");


MCUCR|=0x20;//0x30; //30 - powerDown 20 - idle


asm ("SLEEP"); //спим

.......... etc
 
Останнє редагування:
Назад
Зверху Знизу