Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Тьху, ткнул не то. Продолжение.

Отправлено ReAl 24 апреля 2007 г. 23:17
В ответ на: погудеть с "такой-то" это с какой? (+) отправлено ReAl 24 апреля 2007 г. 22:58

Одно из мест - тот же пискунчик.

uint8_t systick;
#define SYSDIV 100 /* 50мс при 2кГц преріваниях */
uint8_t tick_50ms;
uint8_t beepmask;
#define BEEP_TICKS 0x01 /* один бит в beepmask - 100ms звука при 50мс тике */

...

/* в прерывании таймера */
if(beepmask & 0x80) {
/* Инвертировать ножку спикера. Иногда в зависимости от флага
* частоті - или в каждом прерівании, или в зависимости от младшего
* бита systick (скажем, 1кГц или 500Гц при 2кГц прерівании)
*/
}
if(--systick) {
systick = SYSDIV;
++tick_50ms;
if( (tick_50ms & BEEP_TICKS) == BEEP_TICKS && beepmask ) {
if( (beepmask <<= 1) == 0) {
/* ножку спикера в "ток не течёт", мало ли в какой фазе оказалось */
}
}
}

...
/* где-то, где захотелось попищать */
beepmask = 0xC8; /* би-би-би */
...
beepmask = 0xF4; /* биии-бип */


Ну и так далее. И опять - пищим не оглядываясь на таймауты, времена отмеряем не глядя на писк, ...
Можно ещё в ветвь ++tick_50ms вставить доделиивание именно до секунды, можно успокоиться тем, что байт при 50мс это добрых 12 секунд. Можно добавить timeout50ms и обрабатывать его так же, как полумилисекундную переменную timeout віше.
Реально я где єти переменніе объявляю volatile, где закрываю в static и, например, использую функицю beep(uint8_t mask), которая заносит значение в закрытую переменную модуля. По вкусу.

Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 12:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru