Комментарии 32
Очень интересно, только одно «но».
Можно заключительную картинку (фотографию) изделия?
Что получилось в конце?
Можно заключительную картинку (фотографию) изделия?
Что получилось в конце?
Вот спасибо! как раз праздники впереди, а тут и идея подарка есть.
Шикарный подарок. Китайцы случаем что-то подобное не делают? 100% купил-бы
Очень интересно спасибо. Сам недавно начал писать по АВРки, так что опыта не много. Но могу посоветовать вот что: исключи _delay_ms из кода, замени ее функцией аналогичной из avr/sleep.h за исключением действий с числами с плавающей точной. Если точно задержек не критична конечно +-1-2%, то можно значительно сэкономить на размере (процентов 80 точно). Жаль что у 13 тиньки только один таймер, но зато у нее 4 АЦП. Из-за у меня есть задумка на ее основе сделать автомат один с термистором.
Кстати вопрос в чем писал/компилял? У меня AVRStudio почему отказалась создавать проект для 13 тиньки на C только на асме.
Кстати вопрос в чем писал/компилял? У меня AVRStudio почему отказалась создавать проект для 13 тиньки на C только на асме.
>исключи _delay_ms из кода, замени ее функцией аналогичной из avr/sleep.h за исключением действий с числами с плавающей точной.
Не понял. Во-первых, где тут числа с плавающей точкой? Все в интах. Во-вторых, в avr/sleep.h лежат функции собственно усыпления микроконтроллера (перевода его в спящий режим), а не задержки.
Они у меня используются, но не тут. В активном режиме меня совершенно не устроит спящий микроконтроллер, он должен продолжать подавать ШИМ-сигнал и проверять сенсоры.
Писал и компилял в AVR Studio+WinGCC
Не понял. Во-первых, где тут числа с плавающей точкой? Все в интах. Во-вторых, в avr/sleep.h лежат функции собственно усыпления микроконтроллера (перевода его в спящий режим), а не задержки.
Они у меня используются, но не тут. В активном режиме меня совершенно не устроит спящий микроконтроллер, он должен продолжать подавать ШИМ-сигнал и проверять сенсоры.
Писал и компилял в AVR Studio+WinGCC
Упс сорри, дезинформировал немного. Копаем delay.h доходим до util/delay.h
Функция собственно:
void
_delay_ms(double __ms)
{
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
if (__tmp < 1.0)
__ticks = 1;
else if (__tmp > 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
}
return;
}
else
__ticks = (uint16_t)__tmp;
_delay_loop_2(__ticks);
}
Меня здесь например раздражает строчка
double __tmp = ((F_CPU) / 4e3) * __ms;
Посчитать, округлить и переписать и сравни с какой точностью получится разница.
Функция собственно:
void
_delay_ms(double __ms)
{
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
if (__tmp < 1.0)
__ticks = 1;
else if (__tmp > 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
}
return;
}
else
__ticks = (uint16_t)__tmp;
_delay_loop_2(__ticks);
}
Меня здесь например раздражает строчка
double __tmp = ((F_CPU) / 4e3) * __ms;
Посчитать, округлить и переписать и сравни с какой точностью получится разница.
Буэ, мерзость какая, я и не знал что они внутри аж с даблами работают.
Однозначно нафиг, спасибо. В АВРках я только с фикседами работаю, когда необходимы дроби.
Однозначно нафиг, спасибо. В АВРках я только с фикседами работаю, когда необходимы дроби.
Не за что, дерзай.
У меня дочка уже нацеливается кристалл растить, будем искать мешок купороса ;)
У меня дочка уже нацеливается кристалл растить, будем искать мешок купороса ;)
Оптимизация компилятора! Поэтому если поставишь оптимизацию в 0, ничего работать и не будет! Не слушай никого, все сам проверяй! =)
Вот что написано в этом же исходнике:
«In order for these functions to work as intended, compiler optimizations MUST be enabled, and the delay time MUST be an expression that is a known constant at compile-time.» translate.google.ru/ если непонятно, он весьма адекватно это переводит.
И вообще конструкция из толпы делэйев по 20мс мне не понятна, не проще ли написать один сразу на 100мс? Я более чем уверен что код с одним делэйем будет в разы меньше!!!
Не верите откомпильте сами:
Сначала откомпилен первый вариант а потом второй:
При этом сколько внутрь одной делэйки не вбивай, размер не будет меняться!
И вообще код очень не читаем, советую пользоваться макро, они облегчат вам жизнь.
#ifndef _BV
#define _BV(bit) (1 << (bit))
#endif
#ifndef sbi
#define sbi(data, bit) (data) |= _BV(bit)
#endif
#ifndef cbi
#define cbi(data, bit) (data) &= ~_BV(bit)
#endif
Надеюсь критика достаточна конструктивная. =)
Проект весьма хорош! =)
Вот что написано в этом же исходнике:
«In order for these functions to work as intended, compiler optimizations MUST be enabled, and the delay time MUST be an expression that is a known constant at compile-time.» translate.google.ru/ если непонятно, он весьма адекватно это переводит.
И вообще конструкция из толпы делэйев по 20мс мне не понятна, не проще ли написать один сразу на 100мс? Я более чем уверен что код с одним делэйем будет в разы меньше!!!
Не верите откомпильте сами:
Сначала откомпилен первый вариант а потом второй:
При этом сколько внутрь одной делэйки не вбивай, размер не будет меняться!
И вообще код очень не читаем, советую пользоваться макро, они облегчат вам жизнь.
#ifndef _BV
#define _BV(bit) (1 << (bit))
#endif
#ifndef sbi
#define sbi(data, bit) (data) |= _BV(bit)
#endif
#ifndef cbi
#define cbi(data, bit) (data) &= ~_BV(bit)
#endif
Надеюсь критика достаточна конструктивная. =)
Проект весьма хорош! =)
Этот делей лучше вообще убрать, у меня было полное ощущение что они юзают никак не даблы, поэтому большие делеи будут переполняться) Видимо, это мне приснилось)
А, они надеятся на оптимизацию, чтоб в компил-тайме вычислить и округлить…
Все равно неприятно осознавать что где-то в глубине кода — даблы)
Все равно неприятно осознавать что где-то в глубине кода — даблы)
В качестве компилятора+примитивная среда можно использовать WinAVR. AVRStudio, кстати, после установки WinAVR сама прикрутит в качестве компилятора gcc-avr.
Не совсем понял логику:
мы ведь Delay уменьшаем, но проверяем на больше 0x200
if((PWM>0)&&(Delay%2==0)) //Медленно гаснем
PWM--;
if(Delay>0x0200) //Совсем погасли
мы ведь Delay уменьшаем, но проверяем на больше 0x200
действительно, проглядел, извиняюсь (и еще раз о пользе сна)
Так вот прям три части в один день.)
Я вот как раз позавчера вырастил два кристала из медного купороса.)
Я вот как раз позавчера вырастил два кристала из медного купороса.)
Как же я завидую людям, у которых руки не из жопы :)
Кстати, вместо затравки можно использовать медную проволку.
Я ж решил немного поиздеваться: выращиваю ярко-зеленый кристалл. :)
Я ж решил немного поиздеваться: выращиваю ярко-зеленый кристалл. :)
НЛО прилетело и опубликовало эту надпись здесь
Для зеленого не знаю солей (в самом деле, из чего вырастить ярко-зеленый?) а вот красно-оранжевый выращивается из красной кровяной соли. И выглядят очень неплохо, судя по фото (сам не выращивал). Говорят, они намного стабильнее кристаллов купороса.
вот
Медный купорос и обычная пищевая соль. Последняя должна преобладать. =)
А не повлияет ли это на структуру кристалла? Мне что-то сомнительно, что все пройдет удачно.
Не повлияет, если вы хорошо растворите пищевую соль, которую надо растворять последней (на крайняк, она может плавать на дне).
У меня уже вырастают первые кристаллы, фотку прилагаю.
dl.dropbox.com/u/15528316/IMG_0086.JPG
Качество очень плохое, но под рукой нет фотоаппарата.
У меня уже вырастают первые кристаллы, фотку прилагаю.
dl.dropbox.com/u/15528316/IMG_0086.JPG
Качество очень плохое, но под рукой нет фотоаппарата.
=) Да идея крутая. Автору спасибо. Пошел за медным купорос =)
Для зеленого цвета кристаллов используйте NiSO4 * 7H2O.
Получаются великолепные изумрудные кристаллы.
Получаются великолепные изумрудные кристаллы.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Творим оригинальный подарок при помощи химии физики и электроники: часть 3