Сердце на МК с имитацией биения(вопросы по программе)
Сердце на МК с имитацией биения(вопросы по программе)
Доброго времени суток достопочтенные коты со стажем и без.
Столкнулся я вот с какой проблемой что, возникла идея сделать любимой кошечке подарок в виде сердечка(небольшого кулончика).
Пройдя по просторам инета в сопровождении дядюшки Гугла, было найдено множество конструкций,
но все они не понравились алгоритмами работы. Единственное что заинтересовало так вот эта тема( http://radiokot.ru/forum/viewtopic.php? ... 0%B4%D1%8B )
В сообщении №3 и №9, Схема по сути таже, только управлять светодиодами буду через n-канальные полевики дабы не насиловать МК, но там только описан алгоритм работы сходный с тем что мне надо.
Вообщем хочу сделать микроконтроллерное сердце с как бы имитацией сердцебиения.
И чтобы его частота зависела от степени его нагрева, диапазон температур от 20 до36 градусов.
МК - ATtinny13a, питание от 1-2элемента CR2032.
Застопорился на том что работать с АЦП на AVR не научился еще.
Собственно вопрос на данный момент самый насущный, как считать со входа АЦП значения уровня напряжения и как управлять частотой загорания СД от него.
P.S. Пользуюсь CodeVision AVR.
Столкнулся я вот с какой проблемой что, возникла идея сделать любимой кошечке подарок в виде сердечка(небольшого кулончика).
Пройдя по просторам инета в сопровождении дядюшки Гугла, было найдено множество конструкций,
но все они не понравились алгоритмами работы. Единственное что заинтересовало так вот эта тема( http://radiokot.ru/forum/viewtopic.php? ... 0%B4%D1%8B )
В сообщении №3 и №9, Схема по сути таже, только управлять светодиодами буду через n-канальные полевики дабы не насиловать МК, но там только описан алгоритм работы сходный с тем что мне надо.
Вообщем хочу сделать микроконтроллерное сердце с как бы имитацией сердцебиения.
И чтобы его частота зависела от степени его нагрева, диапазон температур от 20 до36 градусов.
МК - ATtinny13a, питание от 1-2элемента CR2032.
Застопорился на том что работать с АЦП на AVR не научился еще.
Собственно вопрос на данный момент самый насущный, как считать со входа АЦП значения уровня напряжения и как управлять частотой загорания СД от него.
P.S. Пользуюсь CodeVision AVR.
- Реклама
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Сердце на МК с имитацией биения(вопросы по программе)
Чтобы мерить температуру, может лучше взять DS18B20? тогда и АЦП не нужен
Re: Сердце на МК с имитацией биения(вопросы по программе)
С таким интерфейсом как у этого датчика еще не пробовал работать не работал.
К своему стыду я только недавно начал осваивать МК.
P.S. А какое у него энергопотребление и пределы питающего напряжения?
К своему стыду я только недавно начал осваивать МК.
P.S. А какое у него энергопотребление и пределы питающего напряжения?
- Shapa
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Пт июн 20, 2008 09:38:05
- Откуда: Харьков
- Контактная информация:
Re: Сердце на МК с имитацией биения(вопросы по программе)
MaxGoblin Ваша идея мне кажется очень милой. Поэтому я хочу вам помочь.
Предпологаю, что ваш опыт в работе с МК не велик...С вашего позволения попробую написать несколько основных требований к "кулону":
1) сверхмалое потребление в отключенном режиме
2) маленькие габариты
3) простота
Что мы имеем: ATtiny13A, leds, резисторы, конденсаторы, батарейки и терморезистор
Детали просты, и невелики пункты 2 и 3 выполнены. Вот с 1 - проблема. Контроллер в актвином режиме на 9.6 мгц, будет птреблять пару милиампер, что высосет CR2032 за 220 мА / 2 мА = 100 часов ~4 суток - никак не кошерно. Зачем нам эти 9.6 МГц? Тут и 128 Килогерц хватит. Смотрим даташит, на 118 странице нам обещают 0,2 мА при 2 вольтах и 1 мегагерце. Дней 30 проживём, уже лучше, практически месяц в режмиме "крутим процессор и всё".
Как будет работать: Запускаемся, настраиваем АЦП, настраиваем порты. Настариваем прерывание от АЦП. Т.е. АЦП работает непрерывно в цикличиском режиме, переодически выдавая нам результат. Как только наш результат, станет выше отпределённого значения (или ниже) мы делаем вывод, что резистор нагрели, значит кулон в руках - включаемся. Выключаемся с оответственно по снижению температуры.
Это самый простой способ продления жизни.
Такое устройство будет работать, но плоховастенько. Первая причина тому - батарейка, разряжаясь она будет менять напряжение на делителе, соответственно ответ от АЦП будет плавать. Вижу 2 варианта решения:
1) подключаем напряжение питания как опорное и компенсация получается автоматически
2) Используем внутренние опорное (1.1 вольта) для замеров питающего напряжения и соответственно корректируем полученное значение
Как лучше - эксперементировать надо.
В идеале сделать бы так:
подключаем нижнее плечо резистивного делителя к одной из ног проца (выход). Запускаем в МК WDT, настраивая его на самый самый минимум. WDT будет процессор, запускаем замер от АЦП, сравнимаем с предидущими отсчётами, если вдим что темпераура возрастает (т.е. не больше, или меньше какой-то константы, а именно динамику смотрим) то включаем индикацию, и мигаем пока температура не снизится, ии не выйдет какой-то таймаут (к примеру 10 секунд).
Итого получаем, потребление в ждущем режиме - микроамперы, в активном режиме - пренебрегаем током процессора, считаем только ток светодиодов.
Вот кусочек кода, для работы с АЦП (написан для winAVR)
Предпологаю, что ваш опыт в работе с МК не велик...С вашего позволения попробую написать несколько основных требований к "кулону":
1) сверхмалое потребление в отключенном режиме
2) маленькие габариты
3) простота
Что мы имеем: ATtiny13A, leds, резисторы, конденсаторы, батарейки и терморезистор
Детали просты, и невелики пункты 2 и 3 выполнены. Вот с 1 - проблема. Контроллер в актвином режиме на 9.6 мгц, будет птреблять пару милиампер, что высосет CR2032 за 220 мА / 2 мА = 100 часов ~4 суток - никак не кошерно. Зачем нам эти 9.6 МГц? Тут и 128 Килогерц хватит. Смотрим даташит, на 118 странице нам обещают 0,2 мА при 2 вольтах и 1 мегагерце. Дней 30 проживём, уже лучше, практически месяц в режмиме "крутим процессор и всё".
Как будет работать: Запускаемся, настраиваем АЦП, настраиваем порты. Настариваем прерывание от АЦП. Т.е. АЦП работает непрерывно в цикличиском режиме, переодически выдавая нам результат. Как только наш результат, станет выше отпределённого значения (или ниже) мы делаем вывод, что резистор нагрели, значит кулон в руках - включаемся. Выключаемся с оответственно по снижению температуры.
Это самый простой способ продления жизни.
Такое устройство будет работать, но плоховастенько. Первая причина тому - батарейка, разряжаясь она будет менять напряжение на делителе, соответственно ответ от АЦП будет плавать. Вижу 2 варианта решения:
1) подключаем напряжение питания как опорное и компенсация получается автоматически
2) Используем внутренние опорное (1.1 вольта) для замеров питающего напряжения и соответственно корректируем полученное значение
Как лучше - эксперементировать надо.
В идеале сделать бы так:
подключаем нижнее плечо резистивного делителя к одной из ног проца (выход). Запускаем в МК WDT, настраивая его на самый самый минимум. WDT будет процессор, запускаем замер от АЦП, сравнимаем с предидущими отсчётами, если вдим что темпераура возрастает (т.е. не больше, или меньше какой-то константы, а именно динамику смотрим) то включаем индикацию, и мигаем пока температура не снизится, ии не выйдет какой-то таймаут (к примеру 10 секунд).
Итого получаем, потребление в ждущем режиме - микроамперы, в активном режиме - пренебрегаем током процессора, считаем только ток светодиодов.
Вот кусочек кода, для работы с АЦП (написан для winAVR)
Код: Выделить всё
volatile unsigned char ADCdata = 0; // глобальня переменная - резльтат от АЦП
ISR(ADC_vect)
{
ADCdata = ADCH;
ADCSRA |= 0x40;
ADMUX = 0x63;
}
void main(){
....
ADMUX = 0x63;
ADCSRA = 0xCF;
sei();
while(1)
{
temp = ADCdata; // пример
}
}
Re: Сердце на МК с имитацией биения(вопросы по программе)
Мне видится немного другой алгоритм работы отличный от предложенного вами(хоть и ваш тоже очень достоин).
Как бы есть шкала температуры скажем например такая: 15, 18, 21, 24, 27, 30, 33, 36 градусов.(можно конечно поградусно разбить от 15 до 36, но по моему это громоздко слишком получится).
Каждому значению температуры соответствует своя частота вспышек(например по шкале от 0,2Гц до 4 Гц), соответственно чем выше температура тем чаще биение происходит и наоборот.
По частоте можно и 32.768кГц как за тактовую принять.
И если температура меньше самого нижнего порога то МК в спячку входит.
Вот как я это вижу.
Светодиодами я планирую управлять следующим образом: загорается одна цепочка СД светится 15мс и гаснет; через 5-7мс загорается вторая цепочка СД, также светится 15см гаснет; пауза.
Как бы имитируя работу настоящего сердца
Вот как раз и планирую с помощью АЦП увеличивать и уменьшать величину этой паузы от 5с до 0,3с.
P.S. Назначение из вашего примера функции( ISR(ADC_vect) ) не могу понять.
Как бы есть шкала температуры скажем например такая: 15, 18, 21, 24, 27, 30, 33, 36 градусов.(можно конечно поградусно разбить от 15 до 36, но по моему это громоздко слишком получится).
Каждому значению температуры соответствует своя частота вспышек(например по шкале от 0,2Гц до 4 Гц), соответственно чем выше температура тем чаще биение происходит и наоборот.
По частоте можно и 32.768кГц как за тактовую принять.
И если температура меньше самого нижнего порога то МК в спячку входит.
Вот как я это вижу.
Светодиодами я планирую управлять следующим образом: загорается одна цепочка СД светится 15мс и гаснет; через 5-7мс загорается вторая цепочка СД, также светится 15см гаснет; пауза.
Как бы имитируя работу настоящего сердца
Вот как раз и планирую с помощью АЦП увеличивать и уменьшать величину этой паузы от 5с до 0,3с.
P.S. Назначение из вашего примера функции( ISR(ADC_vect) ) не могу понять.
- Реклама
- Shapa
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Пт июн 20, 2008 09:38:05
- Откуда: Харьков
- Контактная информация:
Re: Сердце на МК с имитацией биения(вопросы по программе)
По-мойму даже в сибири летом температура выше 24 градусов....ВЫ не думали о ложных сработках? Т.е. Устройство отреагирует на температуру окружающей среды. Если вы задумываете, что устройство будет постоянно мигать, то, боюсь, CR2032 и на пару суток не хватитMaxGoblin писал(а):Как бы есть шкала температуры скажем например такая: 15, 18, 21, 24, 27, 30, 33, 36 градусов.
Да, вы правы. Принять её можно какой-угодно. Но вот получить такую частоту от встроенного генератора не получится. а 128 КГц это 1 МГц поделённый на 8.По частоте можно и 32.768кГц как за тактовую принять.
а кто его разбудить? прерывание от АЦП, даже если триггер делителя АЦП будет настроен на 128. Это всё равно 1 КГц тактований. Это слишком много для устройства с батарейным питанием.MaxGoblin писал(а):И если температура меньше самого нижнего порога то МК в спячку входит.
это обработчик прерывания, для codevision его заголовок будет выглядеть так:MaxGoblin писал(а):P.S. Назначение из вашего примера функции( ISR(ADC_vect) ) не могу понять.
Код: Выделить всё
interrupt [ADC_INT] void adc_isr(void)Re: Сердце на МК с имитацией биения(вопросы по программе)
Перечень значений температуры привел для примера, потом при отладке более точно скорректирую.
Т.е. спящий режим не подходит?
Т.е. спящий режим не подходит?
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Сердце на МК с имитацией биения(вопросы по программе)
Насколько я понял из Ваших предыдущих сообщений, Вы вообще не собираетесь в спячку его загонять. Так это хуже, чем выходить из спячки с частотой 1кГц.Shapa писал(а):а кто его разбудить? прерывание от АЦП, даже если триггер делителя АЦП будет настроен на 128. Это всё равно 1 КГц тактований. Это слишком много для устройства с батарейным питанием.
ТС, Я Вам советую использовать спящий режим Power-down с выходом из него по прерыванию Watchdog таймера. Частоту контроллера во время активного режима нужно подобрать под Ваш алгоритм, благо у Вашей тиньки куча внутренних источников тактирования: 9,6МГц/4,8МГц/128кГц, да и предделитель настраиваемый : 1,2,4,8,16,32,64,128,256 (регистр CLKPR).
Я считаю что делать нужно так: В активном режиме (во время мигания "сердцем") работать на частоте достаточной для работы программы (не знаю, может ШИМ заходите делать или еще чего), в спящем режиме уходить в самый экономичный режим, просыпаться по watchdog таймеру и на минимальной частоте для работы с температурным датчиком проверять нужно ли включать активный режим. Если температура поднялась выше отметки включения - повышать частоту до необходимой для вашей программы мигания и начинать мигать.
Перед переходом в спящий режим менять частоту на минимальную, для работы с температурным датчиком.
Ставим плюсы: )
- Shapa
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Пт июн 20, 2008 09:38:05
- Откуда: Харьков
- Контактная информация:
Re: Сердце на МК с имитацией биения(вопросы по программе)
В моём первом сообщенииibiza11 писал(а):Насколько я понял из Ваших предыдущих сообщений, Вы вообще не собираетесь в спячку его загонять. Так это хуже, чем выходить из спячки с частотой 1кГц.
Shapa писал(а):....Запускаем в МК WDT, настраивая его на самый самый минимум. WDT будет процессор, запускаем замер от АЦП...
Разве атмел умеет менять свою частоту на ходу? Частота задаётся фюзами, разве мы можем их изменить на ходу? Я всю жизнь думал, что они этого делать не умеют.ibiza11 писал(а):Перед переходом в спящий режим менять частоту на минимальную, для работы с температурным датчиком.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Сердце на МК с имитацией биения(вопросы по программе)
Первое Ваше сообщение прочел невнимательно, каюсь)
По поводу смены частоты:
По поводу смены частоты:
Даташит ATtiny13A, страница 26, раздел 6.3 System Clock Prescaler.The ATtiny13A system clock can be divided by setting the “CLKPR – Clock Prescale Register” on page 28. This feature can be used to decrease power consumption when the requirement for processing power is low. This can be used with all clock source options, and it will affect the clock frequency of the CPU and all synchronous peripherals. clkI/O, clkADC, clkCPU, and clkFLASH are divided by a factor as shown in Table 6-8 on page 28.
Ставим плюсы: )
- Shapa
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Пт июн 20, 2008 09:38:05
- Откуда: Харьков
- Контактная информация:
Re: Сердце на МК с имитацией биения(вопросы по программе)
Подходит! без него нам никак. Или придётся батарейки каждую неделю менятьMaxGoblin писал(а):Т.е. спящий режим не подходит?
Вот так вот. Уже год, как решил отказаться от атмелов, а тут такая новость) спасибо! Теперь я буду знать, что кучку тинек всё же не стоит выбрасывать)ibiza11 писал(а): Даташит ATtiny13A, страница 26, раздел 6.3 System Clock Prescaler.
Re: Сердце на МК с имитацией биения(вопросы по программе)
Набросал схему(Splan 7.0) и развел плату(SprintLayout 5.0).
Сегодня начну осмыслять выше написанное в этой теме.
Сегодня начну осмыслять выше написанное в этой теме.
- Вложения
-
- Бьющееся сердце.lay
- (44.78 КБ) 549 скачиваний
-
- Сердце.JPG
- (38.11 КБ) 684 скачивания
Re: Сердце на МК с имитацией биения(вопросы по программе)
И появилось много вопросов в которых я запутался
Как лучше запускать АЦП: по переполнению таймера или свободный запуск?
Какую частоту преобразования АЦП использовать лучше всего?
Тактовую я предполагаю использовать 128кГц.
Как загнать проц в спячку? И как его от туда вытянуть: сбросом всего проца или как то по прерыванию от сторожевого таймера?
Как лучше запускать АЦП: по переполнению таймера или свободный запуск?
Какую частоту преобразования АЦП использовать лучше всего?
Тактовую я предполагаю использовать 128кГц.
Как загнать проц в спячку? И как его от туда вытянуть: сбросом всего проца или как то по прерыванию от сторожевого таймера?
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Сердце на МК с имитацией биения(вопросы по программе)
Выше уже все написали ведь....
вот мой вариант:
инициализация:
1)настройка Watchdog timer на необходимое время (16мс, 32мс, 64мс, 128мс, 0.25с, 0.5с, 1.0с, 2с, 4с, 8с - смотрим в даташите)
2)установка режима Interrupt mode для Watchdog timer
3)установка режима Power down для Sleep
4)вечный цикл:
- сброс Watchdog timer
- режим = "работа"?
да :
- установка системной частоты = минимальной для работы вашей мигалки
- отработка Вашего алгоритма
- запуск АЦП
- ожидание результата и его проверка, датчик холодный? да - сбрасываем флаг "работа"
нет :
- установка системной частоты = минимальной для работы АЦП
- спать!
4)повтор цикла
прерывание Watchdog timer:
1)одиночный запуск АЦП
2)ожидание результата и его проверка, датчик холодный? да - идем дальше, нет - выставляем флаг "работа" и идем дальше
3)выход из прерывания
вот мой вариант:
инициализация:
1)настройка Watchdog timer на необходимое время (16мс, 32мс, 64мс, 128мс, 0.25с, 0.5с, 1.0с, 2с, 4с, 8с - смотрим в даташите)
2)установка режима Interrupt mode для Watchdog timer
3)установка режима Power down для Sleep
4)вечный цикл:
- сброс Watchdog timer
- режим = "работа"?
да :
- установка системной частоты = минимальной для работы вашей мигалки
- отработка Вашего алгоритма
- запуск АЦП
- ожидание результата и его проверка, датчик холодный? да - сбрасываем флаг "работа"
нет :
- установка системной частоты = минимальной для работы АЦП
- спать!
4)повтор цикла
прерывание Watchdog timer:
1)одиночный запуск АЦП
2)ожидание результата и его проверка, датчик холодный? да - идем дальше, нет - выставляем флаг "работа" и идем дальше
3)выход из прерывания
Ставим плюсы: )
Re: Сердце на МК с имитацией биения(вопросы по программе)
Пока дошел только до управления светодиодами с помощью таймера.
С АЦП абсолютно запутался вконец.
Исходник во вложении если кому то интересно.
С АЦП абсолютно запутался вконец.
Исходник во вложении если кому то интересно.
- Вложения
-
- Бьющееся сердце.c
- (2.35 КБ) 485 скачиваний
Re: Сердце на МК с имитацией биения(вопросы по программе)
Доброго времени суток.
Набросал исходник Если можно подскажите правильyо ли написал процедурe входа в спячку и выхода из нее.
Набросал исходник Если можно подскажите правильyо ли написал процедурe входа в спячку и выхода из нее.
- Вложения
-
- Hertz.rar
- (1.19 КБ) 183 скачивания


