Умный Дом по Ethernet

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
alexsis_76

Re: Умный Дом по Ethernet

Сообщение alexsis_76 » 07 авг 2013, 03:08

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

P.S. Если не сложно пришлите Ваш проект его и посмотрим

ellab
Сообщения: 35
Зарегистрирован: 11 июн 2013, 16:47

Re: Умный Дом по Ethernet

Сообщение ellab » 07 авг 2013, 20:38

Буду еще пробовать. вот мой проект.
alexsis_76, имена портов изменились! Извините что потратил Ваше время, это была моя ошибка! :oops: забыл поправить этот кусок:
//plen=fill_tcp_data_p(buf,plen,PSTR(" ("));
//plen=fill_tcp_data(buf,plen,aio);
plen=fill_tcp_data(buf,plen,aion);
plen=fill_tcp_data_p(buf,plen,PSTR("</a> "));

Я так понял что он командует загружать данные массива aion?
Спасибо еще раз вам огромное! Надеюсь когда нибудь научусь этому как Вы!
P.s. буфер поставил 900 с 1024 не работало
Вложения
ver 3.06_beta6.zip
(182.85 КБ) 516 скачиваний

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: Умный Дом по Ethernet

Сообщение Andrey_B » 07 авг 2013, 22:29

plusQ, порог значения АЦП не сбрасывается после выключения питания. Настройка естественно сохраняется в EEPROM.

alexsis_76, если у вас есть конкретные рекомендации или предложения по поводу более рационального использования ОЗУ, с удовольствием выслушаем.

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: Умный Дом по Ethernet

Сообщение Andrey_B » 10 авг 2013, 15:07

Опубликовал небольшую статью по поводу подключения к MegaD-328 датчиков движения (ИК-извещателей).

Sergey
Сообщения: 34
Зарегистрирован: 04 окт 2011, 03:16

Re: Умный Дом по Ethernet

Сообщение Sergey » 12 авг 2013, 00:52

Во время конфигурации портов входа-выхода появляется сообщениие: 401 Unauthorized.После сброса питания, первый раз отобрается нормально, затем снова 401 Unauthorized. С чем может быть связано?

.... Разобрался, нехватка памяти по ходу....

alexsis_76

Re: Умный Дом по Ethernet

Сообщение alexsis_76 » 13 авг 2013, 05:51

Я так понял что он командует загружать данные массива aion?
массив имен загружается в выходной буфер
Надеюсь когда нибудь научусь этому как Вы!
если будете учится научитесь лучше меня
если у вас есть конкретные рекомендации или предложения по поводу более рационального использования ОЗУ, с удовольствием выслушаем
как я понял используются операции с плавающей точкой,зачем, память выделяется всему чему только можно ,нужно подумать о совместном использывании ресурсов, и далее (уж извините)вот сдесь ISR(TIMER1_COMPA_vect) в обработчике проверяется всевозможные условия а так же while (bit_is_set(ADCSRA в прерывании мы ждем когда установится флаг завершения преобразования АЦП ,в результате все должно жуко тормозить , хотя учитывая специфику устройства это не заметно, ISR(TIMER1_COMPB_vect)
{
PORTB ^= (1 << 0);
}
задействуется целый таймер для моргания светодиода(нерациональное использывание аппаратнх ресурсов), код практически не оставляет шансов на модернизацию(еще раз прошу извинить)
впрочем можно испльзывать контроллер с большим объемом памяти

Snake_bad
Сообщения: 1
Зарегистрирован: 11 июл 2013, 15:46

Re: Умный Дом по Ethernet

Сообщение Snake_bad » 17 авг 2013, 12:58

Уважаемые форумчане, а можно ли вывести на первую страницу, чтоб при заходе по тому же линку 192.168.0.14, были кнопки управление например парой любых настроенных в конфигах портов? Чтоб вместо надписи http://ip_adress/pass были название порта и его кнопки ON OFF с состоянием? Если кто может - выложите пожалуйста пример кода для ознакомления :roll:

alexsis_76

Re: Умный Дом по Ethernet

Сообщение alexsis_76 » 19 авг 2013, 09:33

а можно ли вывести на первую страницу
можно :) :)

plusQ
Сообщения: 115
Зарегистрирован: 01 фев 2013, 15:29
Контактная информация:

Re: Умный Дом по Ethernet

Сообщение plusQ » 20 авг 2013, 18:29

Andrey_B
DHT22 будет поддерживаться устройством?
если нужен датчик могу почтой отправить

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: Умный Дом по Ethernet

Сообщение Andrey_B » 27 авг 2013, 15:52

alexsis_76
1. Операции с плавающей точкой в частности используется для корректного отображения значения со встроенного температурного датчика, а также для работы с DHT22. Если вы знаете способ избежать таких операций, сообщите.
2. По поводу совместного использования ресурсов. Вы обратили внимание, что этот таймер, который вы привели в пример, используется и как таймер для защиты от дребезга и как таймер для проверки значений АЦП портов? Это ли не совместное использование ресурсов? Если у вас есть _конкретные_ рекомендации, буду рад выслушать.
3. Пара условий жутко тормозить не могут. ADC conversion time при частоте 12,5Мгц также занимает очень мало времени. Думаю, не более 50 us.
4. Кода ISR(TIMER1_COMPB_vect) { PORTB ^= (1 << 0); } в прошивке нет, точнее он закоментирован и использовался сугубо в отладочных целях.

plusQ, DHT22 мне уже прислали. Постараюсь включить его поддержку в прошивку.

plusQ
Сообщения: 115
Зарегистрирован: 01 фев 2013, 15:29
Контактная информация:

Re: Умный Дом по Ethernet

Сообщение plusQ » 27 авг 2013, 17:13

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

alexsis_76

Re: Умный Дом по Ethernet

Сообщение alexsis_76 » 27 авг 2013, 18:54

схема веб вольтметра входное напряжение 3,3 в десятиразрядный АЦП цена деления 3,3/1024=0,0032226чтобы узнать напряжение нужно цену деления умножить на количество отщетов ,есди входное напряжение равно 3,3 в то количество отщетов 1024, 1024*0,0032=3,3 типичный флоат я делал так
adc_volt_display_ptr=utoa_cycle_sub(ADCW*32,adc_display);
результат преобразования находится в регистре ADCW умножаем на 32 и зовем utoa_cycle_sub
utoa_cycle_sub осуществляет нам BCD преобразование попуьно переводя наши числа в ASC , затем зовем это
static char *addpoint(char*adc_display_ptr)// ставим десятичную точку
{
char *ptr = adc_display;
char adc_display_temp[8];
char *ptr_temp = adc_display_temp;
int len;
uint8_t count;
//if(*ptr == '0') // если в буфере 0 то выходим пустыми
// return adc_display;;

len=strlen(ptr);
strlcpy(adc_display_temp,adc_display_ptr,len);
*ptr++=*ptr_temp++;

*ptr++=*ptr_temp++;
*ptr++=*ptr_temp++;
*ptr++='.';
//*ptr++=*ptr_temp++;
//*ptr++=*ptr_temp++;
*ptr=0;
return adc_display;
она позволяет выбрать множитель
значение adc_display можно сразу выводить в браузер без всякого itoa
1024*32=32768 если предел измерения 3,3 в то на выходе addpoint имеем 3,2768 там же если нужно можем отсечь лишние разряды если предел 33в то 32,768 если 300в 327,68 то что бы повысить точность нужно брать побольше например 32226 для меня достаточно 32
процедура utoa_cycle_sub(с таблицей)
const uint32_t pow10Table32[]=
{
100000000ul,
10000000ul,
1000000ul,
100000ul,
10000ul,
1000ul,
100ul,
10ul,
1ul
};
//#############################
static char * utoa_cycle_sub(uint16_t value,char* adc_display)
{

char *ptr = adc_display;
uint8_t i = 0;
//if(value == 0)
// {
// adc_display[0] = '0';
// adc_display[1] = 0;
// return adc_display;
//}

do
{
uint32_t pow10 = pow10Table32[i++];
uint8_t count = 0;


while(value >= pow10)
{
count ++;
value -= pow10;
}
*ptr++ = count + '0';
}while(i < 10);
*ptr = 0;
while(adc_display[0] == '0') ++adc_display;
return adc_display;
}
Если у вас есть _конкретные_ рекомендации, буду рад выслушать
обычно в прерывании лишь ставятся флаги ,все остальные манипуляции делаются в главном цикле
readchiptemp в прерывании (с плавающей точкой)
while (bit_is_set(ADCSRA, ADSC));ждем когда установится ADSC, зачем логичней использывать прерывание по завершении преобразования
Кода ISR(TIMER1_COMPB_vect) { PORTB ^= (1 << 0); } в прошивке нет, точнее он закоментирован и использовался сугубо в отладочных целях.
понятно

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: Умный Дом по Ethernet

Сообщение Andrey_B » 27 авг 2013, 22:20

alexsis_76, включение в исходный код операций с float увеличило размер скомпилированной прошивки на 3Кб. Но ведь ваш вариант (а я его пока не пробовал) также явно не бесплатный. Если он увеличит код хотя бы на 1-1,5Кб - стоит подумать целесообразна ли такая экономия.
По поводу прерываний и флагов в общем случае с вами согласен. Но стоит учитывать специфику конкретной реализации. Ведь код указанного прерывания выполняется каждые 5 мс (что само по себе очень много), тогда как "while (bit_is_set(ADCSRA, ADSC))" каждые 5 секунд, а "readchiptemp()" каждые 60 секунд. Сомневаюсь, что будет хоть сколько-нибудь существенная разница в работе устройства, если вынести этот код в основной цикл. Никакого "жуткого торможения" здесь в принципе быть не может.

alexsis_76

Re: Умный Дом по Ethernet

Сообщение alexsis_76 » 28 авг 2013, 01:53

Никакого "жуткого торможения" здесь в принципе быть не может
учитывая специфику устройства это не заметно
не заметно потому что устройство большую часть времени бездействует ,просто тупо смотрит наличие принятых пакетов, случае интенсивного обмена данными Вы бы это (жуткое торможение)увидели (увеличение длительности пинга вплоть до полного провала,потери пакетов)а сдесь сойдет и с флоат, просто в этом случае вы быстрей исчерпаете доступную память
увеличило размер скомпилированной прошивки на 3Кб
имеется ввиду что на столько увеличился размер памяти программ , а насколько увеличился размер памяти данных ведь ядро AVR как и в прочем большинства других поддерживает только целочисленную арифметику и имеет аппаратный умножитель и все , нет операций деления и тем более всего остального , все это (остальное)создается исключительно средствами компилятора, и имеет очень внушительные габариты , плюс значительное снижение быстродействия(потому как не поддерживается аппаратно).
также явно не бесплатный
провел испытания с кодом прказанном выше размер секции text составил 16290 секции data-498 , после удаления куска text 16030 ,data-458, увеличение памяти данных 36байт , программ 270,в принципе не много
P.S кстати двумя постами выше убирается еще и ненужное деление

Shershnyov
Сообщения: 10
Зарегистрирован: 09 апр 2012, 16:56

Re: Умный Дом по Ethernet

Сообщение Shershnyov » 28 авг 2013, 12:36

Подскажите хватит ли объема памяти в меге168 на arduino pro mini ? И если нет то я же безболезненно могу поменять 168 на 328 ( насколько я понял разница только в кол-ве памяти? ) (Arduino Pro Mini)
Rik писал(а):Привет Всем!!! Начало здесь: viewtopic.php?f=1&t=6&start=1180
вот небольшое продолжение по внедрению ардуино, следующий этап это замена меги328-й, на готовый модуль:
[img][IMG]http://i066.radikal.ru/1303/46/f0b74a60d2b0t.jpg[/img][/img]
плата: http://s40.radikal.ru/i089/1303/15/6f928c8454dc.jpg

vtec
Сообщения: 459
Зарегистрирован: 19 сен 2011, 09:28

Re: Умный Дом по Ethernet

Сообщение vtec » 28 авг 2013, 13:49

Andrey_B писал(а):alexsis_76, включение в исходный код операций с float увеличило размер скомпилированной прошивки на 3Кб. Но ведь ваш вариант (а я его пока не пробовал) также явно не бесплатный. Если он увеличит код хотя бы на 1-1,5Кб - стоит подумать целесообразна ли такая экономия.
По поводу прерываний и флагов в общем случае с вами согласен. Но стоит учитывать специфику конкретной реализации. Ведь код указанного прерывания выполняется каждые 5 мс (что само по себе очень много), тогда как "while (bit_is_set(ADCSRA, ADSC))" каждые 5 секунд, а "readchiptemp()" каждые 60 секунд. Сомневаюсь, что будет хоть сколько-нибудь существенная разница в работе устройства, если вынести этот код в основной цикл. Никакого "жуткого торможения" здесь в принципе быть не может.
может все таки пора переходить на 256? можно ножки задействовать не все а памяти станет до фига и реализовывать можно что угодно не задумываясь?

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: Умный Дом по Ethernet

Сообщение Urbas81 » 02 сен 2013, 11:34

Добрый день! Вчера приобрел датчик DHT-11, решил попробовать подключить, после перестановки фьюзов на внешний тактовый сигнал от ENC датчик определился и начал выдавать результаты, но при обновлении данных иногда выскакивают по влажности и температуре нули и потом через некоторое время сбивается страница с показаниями, подмешивается страница PWM, кто-то сталкивался с подобным? Или это следствие того, что я залил свой старый eeprom? чтоб не настраивать заново входа выхода, от предыдущей прошивки, могло это повлиять на работу?

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: Умный Дом по Ethernet

Сообщение Andrey_B » 02 сен 2013, 14:04

Urbas81, попробуйте немного исправленную версию прошивки
http://ab-log.ru/files/File/ip_manager3 ... _beta1.zip
http://ab-log.ru/files/File/ip_manager3 ... a1_hex.zip

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: Умный Дом по Ethernet

Сообщение Urbas81 » 03 сен 2013, 09:23

Andrey_B писал(а):Urbas81, попробуйте немного исправленную версию прошивки
http://ab-log.ru/files/File/ip_manager3 ... _beta1.zip
http://ab-log.ru/files/File/ip_manager3 ... a1_hex.zip
Спасибо! В этом варианте эффект наложения меню шим не наблюдался, правда я не заливал свой eeprom, но вот при обновлении страницы иногда появляются "0" вместо значений температуры и влажности, даже если после предыдущего времени прошло 5 секунд, эту особенность как-то можно скорректировать, или нужно на сервере это отфильтровывать?

Andrey_B
Администратор
Сообщения: 5329
Зарегистрирован: 18 мар 2011, 12:06

Re: Умный Дом по Ethernet

Сообщение Andrey_B » 03 сен 2013, 10:56

Да, ситуация с "0" проявляется и у меня. Пока не очень понятно с чем это связано. На сервере, конечно, фильтровать это довольно просто, но все-таки попробую еще разобраться.

Ответить