роботы робототехника микроконтроллеры


 Страниц (3): [1] 2 3 »   

> Описание: прога для кровати-качалки
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



Собтвенно, вот что родил мой мозг Замешательство , чур, яйцами не кидаться Улыбка :

Вкратце чего делает: ждем сигнал с микрофона, при его появлении измеряем его длительность. На короткие сигналы не реагируем. При превышении порога длительности начинаем управлять мосфетом, т.е. активатором. (в данном конкретном случае я светодиодом мигал) Если на момент окончания цикла качания сигнал с микрофона присутствует, продолжаем качать. Если нет- снова ждем длительного сигнала. Ухмылка

#include <avr/io.h>
#include <util/delay.h>
int main(void)

{

int i;

int t;

t = 0;

DDRC = 0xff; // все порты C сконфигурировать как выходы
DDRD = 0x00; // все порты D сконфигурировать как входы
PORTD = 0xff; // установить "1" на всех портах D,

while(1) { // Бесконечный цикл

// ПРОВЕРЯЕМ НАЛИЧИЕ СИГНАЛА

while (t < 10)

{ // Бесконечный цикл

if

(!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D

t = t + 1; // если 0, тогда значение x увеличиваем на 1

else

t = 0; // в противном случае х будет обнулен

_delay_ms(200); // ждем

}

// ВКЛЮЧАЕМ ИСПОЛНЯЮЩЕЕ УСТРОЙСТВО

t = 0; // обнуляем значение переменной t

start:

for (i = 1; i <= 10; i++) // цикл 10 раз

{

PORTC |= _BV(PC1); // подаем питание

_delay_ms(200); // ждем

PORTC &= ~_BV(PC1); // выключаем питание

_delay_ms(200); // ждем

}

if

(!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D

goto start; // перейти к метке start

}

}



О чем я хочу вас попросить:
1. наверняка прогу можно упростить и уместить в несколько строк?
2. как бы укладывать МК спать, чтобы он по сигналу с микрофона просыпался?
3. как включить компаратор на АТмеге8, я читал, но ничего не понял?

Спасибо. Улыбка
 
 Top
VCOM Супермодератор Post Id



Супермодератор


Сообщений всего: 659
Дата рег-ции: Март 2007  



Эм... а схему подключения микрофона можно?
 
 Top
Белый Волк Супермодератор Post Id



Супермодератор


Сообщений всего: 648
Дата рег-ции: Февр. 2007  



1. Для задания переменной значения при её объявлении
CODE:

int t=0;

2. Для инициализации нескольких переменных одного типа
CODE:

int i, j, k;

3. Пункт 1 не исключает 2.
CODE:

int i=0, j=1, k=i+j;

4. Для увеличения/уменьшения значения переменной на единицу применяют унарный плюс/минус
CODE:

t++;
t--;

5. Имеет значение место написания унарных операций. Если оператор ++ написан до переменной, то, в составе другого оператора, сначала произойдёт увеличение переменной на единицу, а потом действие оператора.
CODE:

int i=0, j=1, k=2;

j = i++;
i = ++k;

После исполнения отрезка кода, j будет иметь значение 0, а i - значение 3

6. Для изменения значения переменной
CODE:

int i=1, j=4;

i += 2;
i *=j;

На первом шаге значение i будет 1+2=3, на втором 3*4=12.

7. Объявление переменных возможно в любом месте программы, включая for()
CODE:

for (int i = 0; i <= 20; i++)

8. Применение описанного для if()
CODE:

int i = 0, j = 1, k = i+j;
if (1) i++, j--, k *= 2;

9. Для цикла for()
CODE:

int i = 0, j = 1, k = i+j;
for (int i=0, j=10; i<j && j != k ; i++, j--);

Здесь сначала создаются i, j, k. Перед каждым шагом проверка условий и, если оба верны, выполняется тело цикла, после чего выполняются команды i++ и j--. Подобная конструкция удобна для прохождения одномерного массива от начала и конца к центру.
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



VCOM, конечно. Схема включения микрофона взята с робозона, та, которая стереофоническая и с компаратором. Только я оставил один микрофон, убрал аналоговый выход, убрал светодиод и выкинул половину проходных конденсаторов со входа микрофона (студийное качество звука мне не интересно Замешательство ).

Белый Волк, спасибо Вам большое! Все действительно можно написать гораздо проще, что я и сделал. Улыбка
 
 Top
VCOM Супермодератор Post Id



Супермодератор


Сообщений всего: 659
Дата рег-ции: Март 2007  



А можно ссылку на зонаробу то эту?
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



Да легко, VCOM. Улыбка Вот:
http://robozone.su/2008/05/31/sd...sor-na-baze.html
Оставил только один канал и цифровой выход. Остальное выкинул.

Вернусь с командировки, со славного города Кирова (да здравствует халявный вайфай в гостиницах! высший восторг ), надо будет на соплях все это хозяйство собрать, да посмотреть, будет ли оно вообще работать. не в себе

Я решил таки использовать внешний компаратор, т.к. по внутреннему в АТмеге я вообще ничего не понял. Вернее, понял все, но написать это программой, чтобы заработало, я так и не смог (вместо микрофона тыкал в ножку МК проводком с "+" ). Замешательство А тем более, связать это с измерением длительности сигнала... рёв в три ручья

Есть и другая загвоздка: насколько я помню, низкоуровневый аудиосигнал, получаемый с предусилителя (сигнал LINE), имеет напругу всего около четверти вольта. А опорное напряжение на внутреннем компараторе составляет (если не ошибаюсь) 2.7В. Так что там по-любому задействовать обе ноги компаратора и сооружать ему делитель напряжения, с чем сравнивать, либо сигнал усиливать. Грустный

В общем, если та схема окажется жизнеспособной, я ее и возьму.
Улыбка
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



Схема с робозона не пашет. Собрал один- в один. рёв в три ручья рёв в три ручья рёв в три ручья

VCOM, может, у Вас какие мысли есть?
 
 Top
VCOM Супермодератор Post Id



Супермодератор


Сообщений всего: 659
Дата рег-ции: Март 2007  



На 5 ноге лм386 какая напруга? Когда тихо и когда грит ктонить...
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



VCOM, спасибо, что откликнулись. Улыбка

При 6В питания на 5 ноге лм386 когда тихо 2,6В, а когда громко (дую в микрофон) скачет от 2.4 до 2.8 вольт. Просто меняются значения в произвольном порядке. Меряю обычным мультиметром аля за 500 рэ.
Странно. Замешательство
 
 Top
VCOM Супермодератор Post Id



Супермодератор


Сообщений всего: 659
Дата рег-ции: Март 2007  



А на 2 и 3 ноге lm393 скока?
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



На 2 ноге измерить проблематично, потому что там емкость стоит. Показания начинаются с 2,4 вольт и постепенно уменьшаются, а когда дую в микрофон падают до 1,5 где-то. Перестаю дуть- опять подскакивают до прежнего значения.
На 3 ноге стоит 3,5 вольта. Это то значение, при котором есть хоть какой-то намек на нормальную работу.

Проблема, собственно, заключается в чем- приблуда либо не реагирует вовсе, либо начинает произвольно генерить сигналы в полной тишине. Питание от крена с конденсатором, массы с МК соединил.
Улыбка
 
 Top
VCOM Супермодератор Post Id



Супермодератор


Сообщений всего: 659
Дата рег-ции: Март 2007  



а если от 2й ноги lm393 убрать RC цепочку (чтоб в воздухе балталась) скока будет??
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



Убрал, получилось 0,3 вольта. Светик при этом моргает, как будто микрофон реагирует.
VCOM, что показывает Ваша математическая модель моей аудиоприблуды? Улыбка
 
 Top
VCOM Супермодератор Post Id



Супермодератор


Сообщений всего: 659
Дата рег-ции: Март 2007  



А чо я могу сказать. Компаратор работает. Надо усилок настраивать...
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



Ага, я так и думал... Сапсибо, VCOM. Улыбка
Там этих усилков до дури. Все такие одинаковые, но все такие разные...
Сегодня поеду прикуплю другой какой- нибудь... Замешательство
 
 Top
Страниц (3): [1] 2 3 »
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru