Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Ответить

Микроконтроллер и звук. Понимание процесса.

Чт мар 16, 2006 12:02:05

Ув. коты! доброго времени суток!

Сразу попрошу не кидатся камнями по котятам из-за их недостаточной образованности в этом вопросе.

И так... начну с того с чего грамотно обсуждается любой вопрос: с начала :))

Разделю своё рассуждение на несколько взаимосвязанных частей, и так:

1. ЗВУК.
Т.к. звук в электронном мире - это изменение напряжения на выходе с определенной частотой и амплитудой (ака колебания), которое хитрое устройство - динамик - преобразует в звуковые волны воспринимаемые нашими кошачими ушками. Т.е. если с частотой 440 Гц изменять напряжение на выходе, то мы получим ноту ЛЯ первой октавы, а от величины изменяемого напряжение зависит громкость. Вроде всё понятно. Т.е. нам нужно некое устройсво способное генерировать это самое изменение напряжения на выходе с нужной частотой.

2. ГЕНЕРАТОР ЭЛ. ИМПУЛЬСОВ или ЧАСТОТЫ.

Такое устройство, способное выдавать изменение напряжение с заданной частотой. И в этом нам поможет уважаемый и любимый AT90S2313. И так... чтобы с ним такого сделать, чтоб заставить генерировать эти самые импульсы. Заглянем ему вовнуторь.... ну не в прямом смысле, а через даташит...
Ага, есть такая замечательная штука как таймер с компоратором...
Т.е. надо бы заставить его работать на нужной нам частоте и при срабатывании компоратора выдавать "1"(+5v) на ногу МК.
А на какую ногу выдавать? так.... смотрим даташит, ага там оказывается умные коты уже предусматрели такой вариант. Эта нога номер 15 - ака PB3(OC1). (я правильно рассуждаю?).
И так как же это сделать то? Заставить компаратор срабатывать с нужной частотой. Правильно!, настроить его. Опять читаем даташит.
Опа. Вот они, регистры настройки компаратора.
И так имеем:
TCCR1A - читая даташит понимаем, что для того чтоб при срабатывании компаратора на 15 ноге появлялась "1", устанавливаем флаг на 7 бит.
TCCR1B - настройка предделителя и сброса при переполнении. Ага, чтобы заставить работать таймер с меньшей частотой нежели МК нужно установить соответствующие флаги, см. даташит. Т.е. при делителе 8 - счётчик нашего таймера будет увеличивать своё значение на одну единицу за 8 тактов нашего МК, и так далее для остальных коэффициентов(64,256 и 1024). Т.е. зная частоту МК можно подстчиать время за которое счётчик таймера увеличивает своё значение. Так же можно установить флаг отвечающий за сброс счётчика при удачном сравнении с OCR1A.

OCR1A (Н и L) - это 16-битное число с которым постоянно сравнивается инкрементирующее значение счётчика таймера.


Т.е. подсчитав значения этх регистров мы можем заставить появляться "1" на 15 ноге с заданной частотой - ура товарищи. Внимание вопрос!
Каково время прибывания "1" на 15 ноге? 1 такт МК?

На "Патриота" прошку не отправлять меня, собственно при изучении работы сего устройства и возникли вопросы

Чт мар 16, 2006 12:52:33

Даташит плохо читаем.
Вот выдержка с 31-й страницы:

COM1A1 COM1A0 Description
0 0 Timer/Counter1 disconnected from
0 1 Toggle the OC1 output line.
1 0 Clear the OC1 output line (to zero).
1 1 Set the OC1 output line (to one).

15 нога ака OC1, по срабатыванию компаратора может четыре вещи:
0 - ниче не делать
1 - менять состояние на противоположное
2 - сбрасываться в ноль
3 - устанавливаться в 1

В патриоте юзается вариант намба 1, то есть, каждое срабатывание компаратора, ножка переключается в противоположное логическое состояние. Был 0 - стала 1, была 1 - стал 0 :)

Чт мар 16, 2006 13:21:39

Я ж начинающий :)
Иногда на русском не понятно, не говоря про инглиш, а так спасибо за ответ. Позже - дальше буду спрашивать :))

Т.е. для ноты ЛЯ (440Гц) нужно за секунду сгенерировать по 220 раз "1" и "0" поочереди, я правильно понял?

Пн май 28, 2007 23:32:28

tugodum писал(а):Я ж начинающий :)
Иногда на русском не понятно, не говоря про инглиш, а так спасибо за ответ. Позже - дальше буду спрашивать :))

Т.е. для ноты ЛЯ (440Гц) нужно за секунду сгенерировать по 220 раз "1" и "0" поочереди, я правильно понял?

а может 880 раз 1 и 0, потомушто 1 и 0 ето будет один период.ИМХО.

Вт май 29, 2007 08:39:29

440 герц - частота сигнала, период которого образован одним 0 и одной 1, т.е. за одну секунду надо сгенерировать 440 ноликов и столько же единичек чтобы получить эти самые 440 периодов, т.е. герц.
:)

Вт июн 05, 2007 16:14:45

Берём контроллер с кварцем на 4000 000 Гц, запускаем таймер 1 (с максимальным пересчётом 65536). Предустанавливаем в состояние 60991 -> настраиваем прерывание по преполнению таймера, при каждом прерывании выводим вывод порта в "1" если до этого был "0" или выводим в "0" если до этого была еденица, вот таким образо м получаем частоту в 440,044004400440044004400440044 Гц :)
Ответить