Страница 1 из 1

Генерация двух различных синалов на разные выходы МК

Добавлено: Вт май 01, 2007 06:29:23
Артур
Привет Вам всем!
Подскажите пожалуйста как зделать так чтоб на два выхода микроконтроллер генерировал пульсации разной частоты ОДНОВРЕМЕННО, например:
наB0 - 300 Гц
на B1 - 500 Гц
и при этом сканировал PortD на наличие сигнала?
И вобще это реально?
Или он будет выполнять всё только последовательно?

Добавлено: Вт май 01, 2007 08:23:36
ARV
Это реально.
Если пренебречь небольшой погрешностью частоты, то это реально сделать даже без всяких аппаратных средств, но если использовать режим "Генератор частоты" таймера - будет гораздо точнее. Правда, выходные сигналы могут подаваться на другие выводы (это уж аппаратно задано).
Если выходные частоты формируются аппаратно таймерами, то опрашивать еще какой-то порт вообще проблем нет.

Re: Как зделать так чтоб микроконтроллер выполнял следущее:

Добавлено: Вт май 01, 2007 09:58:12
tych
Артур писал(а):как зделать так чтоб на два пина микроконтроллер генерировал пульсации разной частоты ОДНОВРЕМЕННО, например:
на PINB.0 - 300 Гц
на PINB.1 - 500 Гц
и при этом сканировал PortD на наличие сигнала?
Вот пример вывода ШИМ сигнала на два вывода АППАРАТНО - т.е. не загружая вычислениями процессор - задача-упражнение 8 в курсе по AVR под кнопкой Изображение ниже.

Добавлено: Ср май 02, 2007 12:12:40
Артур
Вот этот код будет выполняться последовательно как я понял?
тоесть на PINB.1 не будет генерации, пока не выполнится первая задержка? А как зделать чтоб генерировало одновременно на обоих пинах и при этом сканировало порт D на наличие сигнала?

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

main()
 ...
 ...
 ...
{
  while(1)
             {
                PINB.0=1;
                delay_ms(1000);
                PINB.0=0;

                PINB.1=1;
                delay_ms(500);
                PINB.1=0;
             };
}

Добавлено: Ср май 02, 2007 12:47:13
Aheir
Используйте таймеры, уже двое же ответили..

Добавлено: Ср май 02, 2007 12:51:59
ARV
Артур, посмотри сообщения выше!
Повторяю: настрой оин таймер на первую частоту, второй на вторую и в их прерываниях дергай нужными тебе выводами, в основной программе опрашивай порт Д - это первый способ.
Второй способ: программируешь оба таймера на генерацию частоты (есть такой режим - генератор частоты называется), причем частоты должны быть те, которые тебе нужны - при этом на выходах OCх будут формироваться импульсы АППРАТНО - в основной программе опрашиваешь порт Д. Вместо генератора частоты можно и режим ШИМ использовать.
Третий способ: настраиваешь один таймер на нужную тебе частоту опроса порта Д и в его прерывании делаешь этот опрос, одним пином дергаешь в основном цикле через задержки, а для второго пина настраиваешь оставшийся таймер по одному из предыдущих способов.
Если очень хорошо подумать, можно извратиться и не использовать один (а может и оба) таймера - это уж смотря какие частоты тебе надо формировать на выводах...
Думай и решай, как советует тебе tych.

P.S. Для МК "одновременно" можно понимать как "с очень небольшой паузой" - если между опросом вывода и переключением другого вывода проходит например 1-2 микросекунды - это и есть "одновременно", причем степень неодновременности может достигать и десятков миллисекунд (например, если результат расчитан на человека - он все равно разницы не заметит).

Добавлено: Сб июн 16, 2007 13:07:23
Артур
как задействовать таймеры?

Добавлено: Сб июн 16, 2007 13:19:56
Negor
Тебе потребуется либо почитать даташит(Datasheet - документация по конкретному контроллеру выпускаемая производителем) либо сказать нам какой контроллер ты используеш. Обычно в регистры тацмера нужно записать в каком режиме будет работать таймер(возможны такие варианты(я пока тини2313 изучаю): Быстрый ШИМ, ШИМ с фазовой коррекцией, Очиска при переполнении...), записать пределитель частоты(частота счёта таймера может быть меньше либо равной частоте тактового генератора МК), ну и определить прерывания(компоратор, переполнение)... вроде всё

Добавлено: Сб июн 16, 2007 13:25:34
Артур
Negor - Я тоже изучаю тини 2313 расскажи подробней про его таймеры даташит есть, но не понимаю я по английски а перевод корявый без смысла получается :(

Добавлено: Сб июн 16, 2007 13:39:57
Negor
С тини2313 ситуация такая: первый таймер - восьмибитный(может считать от 0 до 2 в степени 8 максимум).для настройки используются два регистра по восемь бит TCR0A и TCR0B. Для работы нужно выбрать режим с пом битов WGM0x, настроить компаратор(ы) OCR0A(биты COM0A0 COM0A1), OCR0B0(биты такие же тогка вместо A B) и пределитель частоты (биты СS00 CS01 CS 02). Таблици и описание битов есть в даташит. Что-нибуть ещё?

Добавлено: Пн мар 31, 2008 16:49:17
Артур
пасибо! извините за невнимательность! :)

Добавлено: Пн мар 31, 2008 21:34:48
delay
Артур писал(а):Negor - Я тоже изучаю тини 2313 расскажи подробней про его таймеры даташит есть, но не понимаю я по английски а перевод корявый без смысла получается :(
Здравствуй тезка!
О даташите на русском и описании таймеров и пр. я давал ссылки здесь
http://radiokot.ru/forum/viewtopic.php? ... E%EC#93182
А в этом твоем коде:
PINB.0=1;
delay_ms(1000);
PINB.0=0;

PINB.1=1;
delay_ms(500);
PINB.1=0;
Ты хочешь выставить 1 и 0 на выходах порта B?
Тогда нужно PORTB.0=0;
PINB.0 используется при опросе порта. Или я что-то не понял?

Добавлено: Пн мар 31, 2008 22:57:16
Negor
Хм... а что тема не исчерпана? Я сужу по дате сообщений.

Добавлено: Вт апр 01, 2008 07:48:39
delay
Действительно, как-то растянуто во времени. Я посмотрел толко на последний пост 31.03.08.