Сердце на МК с имитацией биения(вопросы по программе)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
MaxGoblin
Открыл глаза
Сообщения: 41
Зарегистрирован: Сб окт 29, 2011 21:46:14

Сердце на МК с имитацией биения(вопросы по программе)

Сообщение MaxGoblin »

Доброго времени суток достопочтенные коты со стажем и без.
Столкнулся я вот с какой проблемой что, возникла идея сделать любимой кошечке подарок в виде сердечка(небольшого кулончика).
Пройдя по просторам инета в сопровождении дядюшки Гугла, было найдено множество конструкций,
но все они не понравились алгоритмами работы. Единственное что заинтересовало так вот эта тема( 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: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение zero648 »

Чтобы мерить температуру, может лучше взять DS18B20? тогда и АЦП не нужен
Реклама
MaxGoblin
Открыл глаза
Сообщения: 41
Зарегистрирован: Сб окт 29, 2011 21:46:14

Re: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение MaxGoblin »

С таким интерфейсом как у этого датчика еще не пробовал работать не работал.

К своему стыду я только недавно начал осваивать МК.



P.S. А какое у него энергопотребление и пределы питающего напряжения?
Аватара пользователя
Shapa
Встал на лапы
Сообщения: 127
Зарегистрирован: Пт июн 20, 2008 09:38:05
Откуда: Харьков
Контактная информация:

Re: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение Shapa »

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)

Код: Выделить всё

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; // пример
}
}

Реклама
Эиком - электронные компоненты и радиодетали
MaxGoblin
Открыл глаза
Сообщения: 41
Зарегистрирован: Сб окт 29, 2011 21:46:14

Re: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение MaxGoblin »

Мне видится немного другой алгоритм работы отличный от предложенного вами(хоть и ваш тоже очень достоин).

Как бы есть шкала температуры скажем например такая: 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: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение Shapa »

MaxGoblin писал(а):Как бы есть шкала температуры скажем например такая: 15, 18, 21, 24, 27, 30, 33, 36 градусов.
По-мойму даже в сибири летом температура выше 24 градусов....ВЫ не думали о ложных сработках? Т.е. Устройство отреагирует на температуру окружающей среды. Если вы задумываете, что устройство будет постоянно мигать, то, боюсь, CR2032 и на пару суток не хватит
По частоте можно и 32.768кГц как за тактовую принять.
Да, вы правы. Принять её можно какой-угодно. Но вот получить такую частоту от встроенного генератора не получится. а 128 КГц это 1 МГц поделённый на 8.
MaxGoblin писал(а):И если температура меньше самого нижнего порога то МК в спячку входит.
а кто его разбудить? прерывание от АЦП, даже если триггер делителя АЦП будет настроен на 128. Это всё равно 1 КГц тактований. Это слишком много для устройства с батарейным питанием.

MaxGoblin писал(а):P.S. Назначение из вашего примера функции( ISR(ADC_vect) ) не могу понять.
это обработчик прерывания, для codevision его заголовок будет выглядеть так:

Код: Выделить всё

interrupt [ADC_INT] void adc_isr(void)
Реклама
MaxGoblin
Открыл глаза
Сообщения: 41
Зарегистрирован: Сб окт 29, 2011 21:46:14

Re: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение MaxGoblin »

Перечень значений температуры привел для примера, потом при отладке более точно скорректирую.

Т.е. спящий режим не подходит?
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение ibiza11 »

Shapa писал(а):а кто его разбудить? прерывание от АЦП, даже если триггер делителя АЦП будет настроен на 128. Это всё равно 1 КГц тактований. Это слишком много для устройства с батарейным питанием.
Насколько я понял из Ваших предыдущих сообщений, Вы вообще не собираетесь в спячку его загонять. Так это хуже, чем выходить из спячки с частотой 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: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение Shapa »

ibiza11 писал(а):Насколько я понял из Ваших предыдущих сообщений, Вы вообще не собираетесь в спячку его загонять. Так это хуже, чем выходить из спячки с частотой 1кГц.
В моём первом сообщении
Shapa писал(а):....Запускаем в МК WDT, настраивая его на самый самый минимум. WDT будет процессор, запускаем замер от АЦП...
ibiza11 писал(а):Перед переходом в спящий режим менять частоту на минимальную, для работы с температурным датчиком.
Разве атмел умеет менять свою частоту на ходу? Частота задаётся фюзами, разве мы можем их изменить на ходу? Я всю жизнь думал, что они этого делать не умеют.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение ibiza11 »

Первое Ваше сообщение прочел невнимательно, каюсь)
По поводу смены частоты:
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.
Даташит ATtiny13A, страница 26, раздел 6.3 System Clock Prescaler.
Ставим плюсы: )
Аватара пользователя
Shapa
Встал на лапы
Сообщения: 127
Зарегистрирован: Пт июн 20, 2008 09:38:05
Откуда: Харьков
Контактная информация:

Re: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение Shapa »

MaxGoblin писал(а):Т.е. спящий режим не подходит?
Подходит! без него нам никак. Или придётся батарейки каждую неделю менять

ibiza11 писал(а): Даташит ATtiny13A, страница 26, раздел 6.3 System Clock Prescaler.
Вот так вот. Уже год, как решил отказаться от атмелов, а тут такая новость) спасибо! Теперь я буду знать, что кучку тинек всё же не стоит выбрасывать)
MaxGoblin
Открыл глаза
Сообщения: 41
Зарегистрирован: Сб окт 29, 2011 21:46:14

Re: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение MaxGoblin »

Набросал схему(Splan 7.0) и развел плату(SprintLayout 5.0).

Сегодня начну осмыслять выше написанное в этой теме.
Вложения
Бьющееся сердце.lay
(44.78 КБ) 549 скачиваний
Сердце.JPG
(38.11 КБ) 684 скачивания
MaxGoblin
Открыл глаза
Сообщения: 41
Зарегистрирован: Сб окт 29, 2011 21:46:14

Re: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение MaxGoblin »

И появилось много вопросов в которых я запутался

Как лучше запускать АЦП: по переполнению таймера или свободный запуск?
Какую частоту преобразования АЦП использовать лучше всего?

Тактовую я предполагаю использовать 128кГц.


Как загнать проц в спячку? И как его от туда вытянуть: сбросом всего проца или как то по прерыванию от сторожевого таймера?
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение ibiza11 »

Выше уже все написали ведь....
вот мой вариант:
инициализация:
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)выход из прерывания
Ставим плюсы: )
MaxGoblin
Открыл глаза
Сообщения: 41
Зарегистрирован: Сб окт 29, 2011 21:46:14

Re: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение MaxGoblin »

Пока дошел только до управления светодиодами с помощью таймера.

С АЦП абсолютно запутался вконец.

Исходник во вложении если кому то интересно.
Вложения
Бьющееся сердце.c
(2.35 КБ) 485 скачиваний
MaxGoblin
Открыл глаза
Сообщения: 41
Зарегистрирован: Сб окт 29, 2011 21:46:14

Re: Сердце на МК с имитацией биения(вопросы по программе)

Сообщение MaxGoblin »

Доброго времени суток.
Набросал исходник Если можно подскажите правильyо ли написал процедурe входа в спячку и выхода из нее.
Вложения
Hertz.rar
(1.19 КБ) 183 скачивания
Ответить

Вернуться в «Разные вопросы по МК»