Умный Дом по Ethernet
Re: Умный Дом по Ethernet
размер озу не превышен , возможно последняя версия слишком раздулась, и с вашими правками вылезает за пределы памяти, попробуйте уменьшить размер буфера, в данном проекте(да простит меня автор), и без того маленькое озу используется не рационально
P.S. Если не сложно пришлите Ваш проект его и посмотрим
P.S. Если не сложно пришлите Ваш проект его и посмотрим
Re: Умный Дом по Ethernet
Буду еще пробовать. вот мой проект.
alexsis_76, имена портов изменились! Извините что потратил Ваше время, это была моя ошибка! забыл поправить этот кусок:
Я так понял что он командует загружать данные массива aion?
Спасибо еще раз вам огромное! Надеюсь когда нибудь научусь этому как Вы!
P.s. буфер поставил 900 с 1024 не работало
alexsis_76, имена портов изменились! Извините что потратил Ваше время, это была моя ошибка! забыл поправить этот кусок:
//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 скачиваний
Re: Умный Дом по Ethernet
plusQ, порог значения АЦП не сбрасывается после выключения питания. Настройка естественно сохраняется в EEPROM.
alexsis_76, если у вас есть конкретные рекомендации или предложения по поводу более рационального использования ОЗУ, с удовольствием выслушаем.
alexsis_76, если у вас есть конкретные рекомендации или предложения по поводу более рационального использования ОЗУ, с удовольствием выслушаем.
Re: Умный Дом по Ethernet
Опубликовал небольшую статью по поводу подключения к MegaD-328 датчиков движения (ИК-извещателей).
Re: Умный Дом по Ethernet
Во время конфигурации портов входа-выхода появляется сообщениие: 401 Unauthorized.После сброса питания, первый раз отобрается нормально, затем снова 401 Unauthorized. С чем может быть связано?
.... Разобрался, нехватка памяти по ходу....
.... Разобрался, нехватка памяти по ходу....
Re: Умный Дом по Ethernet
массив имен загружается в выходной буферЯ так понял что он командует загружать данные массива aion?
если будете учится научитесь лучше меняНадеюсь когда нибудь научусь этому как Вы!
как я понял используются операции с плавающей точкой,зачем, память выделяется всему чему только можно ,нужно подумать о совместном использывании ресурсов, и далее (уж извините)вот сдесь ISR(TIMER1_COMPA_vect) в обработчике проверяется всевозможные условия а так же while (bit_is_set(ADCSRA в прерывании мы ждем когда установится флаг завершения преобразования АЦП ,в результате все должно жуко тормозить , хотя учитывая специфику устройства это не заметно, ISR(TIMER1_COMPB_vect)если у вас есть конкретные рекомендации или предложения по поводу более рационального использования ОЗУ, с удовольствием выслушаем
{
PORTB ^= (1 << 0);
}
задействуется целый таймер для моргания светодиода(нерациональное использывание аппаратнх ресурсов), код практически не оставляет шансов на модернизацию(еще раз прошу извинить)
впрочем можно испльзывать контроллер с большим объемом памяти
Re: Умный Дом по Ethernet
Уважаемые форумчане, а можно ли вывести на первую страницу, чтоб при заходе по тому же линку 192.168.0.14, были кнопки управление например парой любых настроенных в конфигах портов? Чтоб вместо надписи http://ip_adress/pass были название порта и его кнопки ON OFF с состоянием? Если кто может - выложите пожалуйста пример кода для ознакомления
Re: Умный Дом по Ethernet
Andrey_B
DHT22 будет поддерживаться устройством?
если нужен датчик могу почтой отправить
DHT22 будет поддерживаться устройством?
если нужен датчик могу почтой отправить
Re: Умный Дом по Ethernet
alexsis_76
1. Операции с плавающей точкой в частности используется для корректного отображения значения со встроенного температурного датчика, а также для работы с DHT22. Если вы знаете способ избежать таких операций, сообщите.
2. По поводу совместного использования ресурсов. Вы обратили внимание, что этот таймер, который вы привели в пример, используется и как таймер для защиты от дребезга и как таймер для проверки значений АЦП портов? Это ли не совместное использование ресурсов? Если у вас есть _конкретные_ рекомендации, буду рад выслушать.
3. Пара условий жутко тормозить не могут. ADC conversion time при частоте 12,5Мгц также занимает очень мало времени. Думаю, не более 50 us.
4. Кода ISR(TIMER1_COMPB_vect) { PORTB ^= (1 << 0); } в прошивке нет, точнее он закоментирован и использовался сугубо в отладочных целях.
plusQ, DHT22 мне уже прислали. Постараюсь включить его поддержку в прошивку.
1. Операции с плавающей точкой в частности используется для корректного отображения значения со встроенного температурного датчика, а также для работы с DHT22. Если вы знаете способ избежать таких операций, сообщите.
2. По поводу совместного использования ресурсов. Вы обратили внимание, что этот таймер, который вы привели в пример, используется и как таймер для защиты от дребезга и как таймер для проверки значений АЦП портов? Это ли не совместное использование ресурсов? Если у вас есть _конкретные_ рекомендации, буду рад выслушать.
3. Пара условий жутко тормозить не могут. ADC conversion time при частоте 12,5Мгц также занимает очень мало времени. Думаю, не более 50 us.
4. Кода ISR(TIMER1_COMPB_vect) { PORTB ^= (1 << 0); } в прошивке нет, точнее он закоментирован и использовался сугубо в отладочных целях.
plusQ, DHT22 мне уже прислали. Постараюсь включить его поддержку в прошивку.
Re: Умный Дом по Ethernet
предлагаю возложить математические операции на сервер...
достаточно возвращать по два 8-битных числа (сырые данные с датчика температура и влажность), так даже проще в плане хранения в базе данных
Andrey_B подскажи на какой частоте работает ШИМ в меге
достаточно возвращать по два 8-битных числа (сырые данные с датчика температура и влажность), так даже проще в плане хранения в базе данных
Andrey_B подскажи на какой частоте работает ШИМ в меге
Re: Умный Дом по Ethernet
схема веб вольтметра входное напряжение 3,3 в десятиразрядный АЦП цена деления 3,3/1024=0,0032226чтобы узнать напряжение нужно цену деления умножить на количество отщетов ,есди входное напряжение равно 3,3 в то количество отщетов 1024, 1024*0,0032=3,3 типичный флоат я делал так
utoa_cycle_sub осуществляет нам BCD преобразование попуьно переводя наши числа в ASC , затем зовем это
значение adc_display можно сразу выводить в браузер без всякого itoa
1024*32=32768 если предел измерения 3,3 в то на выходе addpoint имеем 3,2768 там же если нужно можем отсечь лишние разряды если предел 33в то 32,768 если 300в 327,68 то что бы повысить точность нужно брать побольше например 32226 для меня достаточно 32
процедура utoa_cycle_sub(с таблицей)
readchiptemp в прерывании (с плавающей точкой)
while (bit_is_set(ADCSRA, ADSC));ждем когда установится ADSC, зачем логичней использывать прерывание по завершении преобразования
результат преобразования находится в регистре ADCW умножаем на 32 и зовем utoa_cycle_subadc_volt_display_ptr=utoa_cycle_sub(ADCW*32,adc_display);
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); } в прошивке нет, точнее он закоментирован и использовался сугубо в отладочных целях.
Re: Умный Дом по Ethernet
alexsis_76, включение в исходный код операций с float увеличило размер скомпилированной прошивки на 3Кб. Но ведь ваш вариант (а я его пока не пробовал) также явно не бесплатный. Если он увеличит код хотя бы на 1-1,5Кб - стоит подумать целесообразна ли такая экономия.
По поводу прерываний и флагов в общем случае с вами согласен. Но стоит учитывать специфику конкретной реализации. Ведь код указанного прерывания выполняется каждые 5 мс (что само по себе очень много), тогда как "while (bit_is_set(ADCSRA, ADSC))" каждые 5 секунд, а "readchiptemp()" каждые 60 секунд. Сомневаюсь, что будет хоть сколько-нибудь существенная разница в работе устройства, если вынести этот код в основной цикл. Никакого "жуткого торможения" здесь в принципе быть не может.
По поводу прерываний и флагов в общем случае с вами согласен. Но стоит учитывать специфику конкретной реализации. Ведь код указанного прерывания выполняется каждые 5 мс (что само по себе очень много), тогда как "while (bit_is_set(ADCSRA, ADSC))" каждые 5 секунд, а "readchiptemp()" каждые 60 секунд. Сомневаюсь, что будет хоть сколько-нибудь существенная разница в работе устройства, если вынести этот код в основной цикл. Никакого "жуткого торможения" здесь в принципе быть не может.
Re: Умный Дом по Ethernet
Никакого "жуткого торможения" здесь в принципе быть не может
не заметно потому что устройство большую часть времени бездействует ,просто тупо смотрит наличие принятых пакетов, случае интенсивного обмена данными Вы бы это (жуткое торможение)увидели (увеличение длительности пинга вплоть до полного провала,потери пакетов)а сдесь сойдет и с флоат, просто в этом случае вы быстрей исчерпаете доступную памятьучитывая специфику устройства это не заметно
имеется ввиду что на столько увеличился размер памяти программ , а насколько увеличился размер памяти данных ведь ядро AVR как и в прочем большинства других поддерживает только целочисленную арифметику и имеет аппаратный умножитель и все , нет операций деления и тем более всего остального , все это (остальное)создается исключительно средствами компилятора, и имеет очень внушительные габариты , плюс значительное снижение быстродействия(потому как не поддерживается аппаратно).увеличило размер скомпилированной прошивки на 3Кб
провел испытания с кодом прказанном выше размер секции text составил 16290 секции data-498 , после удаления куска text 16030 ,data-458, увеличение памяти данных 36байт , программ 270,в принципе не многотакже явно не бесплатный
P.S кстати двумя постами выше убирается еще и ненужное деление
-
- Сообщения: 10
- Зарегистрирован: 09 апр 2012, 16:56
Re: Умный Дом по Ethernet
Подскажите хватит ли объема памяти в меге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
Re: Умный Дом по Ethernet
может все таки пора переходить на 256? можно ножки задействовать не все а памяти станет до фига и реализовывать можно что угодно не задумываясь?Andrey_B писал(а):alexsis_76, включение в исходный код операций с float увеличило размер скомпилированной прошивки на 3Кб. Но ведь ваш вариант (а я его пока не пробовал) также явно не бесплатный. Если он увеличит код хотя бы на 1-1,5Кб - стоит подумать целесообразна ли такая экономия.
По поводу прерываний и флагов в общем случае с вами согласен. Но стоит учитывать специфику конкретной реализации. Ведь код указанного прерывания выполняется каждые 5 мс (что само по себе очень много), тогда как "while (bit_is_set(ADCSRA, ADSC))" каждые 5 секунд, а "readchiptemp()" каждые 60 секунд. Сомневаюсь, что будет хоть сколько-нибудь существенная разница в работе устройства, если вынести этот код в основной цикл. Никакого "жуткого торможения" здесь в принципе быть не может.
Re: Умный Дом по Ethernet
Добрый день! Вчера приобрел датчик DHT-11, решил попробовать подключить, после перестановки фьюзов на внешний тактовый сигнал от ENC датчик определился и начал выдавать результаты, но при обновлении данных иногда выскакивают по влажности и температуре нули и потом через некоторое время сбивается страница с показаниями, подмешивается страница PWM, кто-то сталкивался с подобным? Или это следствие того, что я залил свой старый eeprom? чтоб не настраивать заново входа выхода, от предыдущей прошивки, могло это повлиять на работу?
Re: Умный Дом по Ethernet
Urbas81, попробуйте немного исправленную версию прошивки
http://ab-log.ru/files/File/ip_manager3 ... _beta1.zip
http://ab-log.ru/files/File/ip_manager3 ... a1_hex.zip
http://ab-log.ru/files/File/ip_manager3 ... _beta1.zip
http://ab-log.ru/files/File/ip_manager3 ... a1_hex.zip
Re: Умный Дом по Ethernet
Спасибо! В этом варианте эффект наложения меню шим не наблюдался, правда я не заливал свой eeprom, но вот при обновлении страницы иногда появляются "0" вместо значений температуры и влажности, даже если после предыдущего времени прошло 5 секунд, эту особенность как-то можно скорректировать, или нужно на сервере это отфильтровывать?Andrey_B писал(а):Urbas81, попробуйте немного исправленную версию прошивки
http://ab-log.ru/files/File/ip_manager3 ... _beta1.zip
http://ab-log.ru/files/File/ip_manager3 ... a1_hex.zip
Re: Умный Дом по Ethernet
Да, ситуация с "0" проявляется и у меня. Пока не очень понятно с чем это связано. На сервере, конечно, фильтровать это довольно просто, но все-таки попробую еще разобраться.