реклама на сайте
подробности

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Прерывания от компаратора, нужно два разных обработчика
smk
сообщение Jul 6 2007, 10:50
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Стоит задача сначала подсчитать количество перепадов состояния компаратора, затем подсчитать длительность периода между перепадами из 0 в 1. Напрашивается использовать два разных обработчика прерываний от компаратора, конфигурируя компаратор непосредственно перед каждой задачей. Существует ли возможность использовать два разных обработчика от одного источника прерывания?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 6 2007, 11:00
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Фактически, будет один обработчик. НО, в нем можно, к примеру, организовать статическую переменную, по которой можно будет определять текущее состояние, и переходить на соответствующую подпрограмму обработки состояния


--------------------
Go to the top of the page
 
+Quote Post
AndryG
сообщение Jul 6 2007, 11:12
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



А зачем статическая переменная?
В прерывании смотрите конфигурационные биты компаратора и выбирайте, какой "обработчик" задействовать.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 6 2007, 11:17
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(AndryG @ Jul 6 2007, 19:12) *
А зачем статическая переменная?
В прерывании смотрите конфигурационные биты компаратора и выбирайте, какой "обработчик" задействовать.
Можно и биты анализировать. Но, если, к примеру, вариантов обработки больше, чем битовых состояний?


--------------------
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 6 2007, 11:22
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(smk @ Jul 6 2007, 13:50) *
Существует ли возможность использовать два разных обработчика от одного источника прерывания?
Да, можно создать вторую таблицу векторов в области загрузчика и переключать их битом IVSEL


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 6 2007, 11:37
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Сергей Борщ @ Jul 6 2007, 19:22) *
Да, можно создать вторую таблицу векторов в области загрузчика и переключать их битом IVSEL
нуну, тока переключаться будут все вектора, а не тока компаратора 07.gif

ИМХО, это кЫтайское решение


--------------------
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 6 2007, 11:52
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
организовать статическую переменную, по которой можно будет определять текущее состояние, и переходить на соответствующую подпрограмму обработки состояния


отличный совет!!!

Цитата
В прерывании смотрите конфигурационные биты компаратора и выбирайте, какой "обработчик" задействовать.


Да, это лучшее решение, уже пишу.

Обработчиков всего два. А статические переменные использую, но в "технологических" целях. Например, узнать прерывание первое или второе (запустить/остановить таймер).


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 6 2007, 14:15
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Теперь программа в Тиню26 не лезет. Получилось 1214 слов, а надо 1024. 20% проги выкинуть? Как сэкономить на выводе на LCD, выводить нужно всего два числа. Имеем Результат преобразования АЦП и Период TCNT0, посчитанный таймером. Ну и подписать: "U=" и "F="...


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Jul 6 2007, 14:17
Сообщение #9


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



оптимизация по коду то включена?
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 6 2007, 14:19
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Вот с этим бы что-то сделать...

//вывод на LCD
void LCDDispFloat(float n, unsigned char decimals)
{
char nummer[16];
ftoa( (float)n, (unsigned char)decimals, nummer);
lcd_puts(nummer);
}


lcd_gotoxy(1,3);
lcd_putsf ("U=");
LCDDispFloat(U,0);
};

if (ACDC==1)
{
lcd_gotoxy(2,2);
lcd_putsf ("F=");
LCDDispFloat(F,2);
}
else
{
lcd_gotoxy(2,1);
#pragma rl+
lcd_putsf ("ÏÎÑÒÎßÍÍÎÅ");
#pragma rl-
};

Цитата
оптимизация по коду то включена?


да.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 6 2007, 14:44
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(smk @ Jul 6 2007, 22:15) *
Теперь программа в Тиню26 не лезет. Получилось 1214 слов, а надо 1024. 20% проги выкинуть? Как сэкономить на выводе на LCD, выводить нужно всего два числа. Имеем Результат преобразования АЦП и Период TCNT0, посчитанный таймером. Ну и подписать: "U=" и "F="...
Советую поменять тини26 на МК с бОльшим объемом памяти программ. Возможно...возможны вы все так и втисните свой код в тини26, однако, через некоторое времея Вам захочется бОльшего, и будет мучительно больно сами понимаете за что smile.gif


--------------------
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 6 2007, 14:50
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Советую поменять тини26 на МК с бОльшим объемом памяти программ


Мега48. Хотя хотелось бы Тини461. Остальное по току и по И/О не пролазят.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Jul 6 2007, 15:06
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



Странно, почему нет printf? wink.gif

ИМХО экономия возможна на lcd_gotoxy - считать адрес вручную.
ftoa зачем вобще тут нужно??? 07.gif какие здесь могут быть числа с плавающей точкой?
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 6 2007, 15:10
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
ftoa зачем вобще тут нужно???


А как в десятичный формат преобразовать?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Jul 6 2007, 15:17
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



Цитата(smk @ Jul 6 2007, 19:10) *
А как в десятичный формат преобразовать?

использовать фиксированную точку
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th June 2025 - 19:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01468 секунд с 7
ELECTRONIX ©2004-2016