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

 
 
> 4х канальный счетчик импульсов
AlexTech
сообщение Dec 27 2005, 09:14
Сообщение #1


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

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Подкажите пожалуйста, как можно реализовать сабж на 16 меге без применения мультиплексора.
Желательно схемка+пример кода на С.
мда.. импульсы это 0

И еще вопрос, может знаете что за микросхемка такая: 8E351A(BE351A) плохо читается.
8 ног; 1,2,3 выход +12; 4 gnd; 5,6,7,8 вход +12, хотя бы ощее представление: стабилизатор или ключи или фильтр какой-то?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
defunct
сообщение Dec 27 2005, 09:25
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(AlexTech @ Dec 27 2005, 11:14) *
Подкажите пожалуйста, как можно реализовать сабж на 16 меге без применения мультиплексора.
Желательно схемка+пример кода на С.
мда.. импульсы это 0


А частота следования импульсов какая, а минимальная длительность?
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Dec 27 2005, 09:31
Сообщение #3


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

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Енто выходы с тахометра кулера smile.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 27 2005, 10:01
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(AlexTech @ Dec 27 2005, 11:31) *
Енто выходы с тахометра кулера smile.gif


т.е. частота до 10khz?

тогда цепляем сигналы от тахометра на любой порт, например на первых четыре пина порта B. и далее циклически считываем значение порта. при переходе из 1 в 0 инкрементируем счетчик. Из обработчика какого-нибудь прерывания отправляем показания со счетчиков куда требуется..

Код
long CNT[4];
char masks[4] = {1, 2, 4, 8};

void do_count(void)
{
    static char olddata;
    char c;
    int i;

    for(;;)
    {
      c = PINB;

      for (i=0; i<4; i++)
      {
          if (!(masks[i] & c) && (masks[i] & olddata))
             CNT[i]++;
      }

      olddata = c;
    }
}


Сообщение отредактировал defunct - Dec 27 2005, 10:08
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Dec 27 2005, 10:21
Сообщение #5


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

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Спасибо, попробую вечерком. Вот только вопрос, а что будет в моменты обработки прерываний, считать ведь перестанет?
А у меня уже используется 2 прерывания, одно с частотой 1.9Гц, второе с частотой 122Гц причем по видимому будет переписано на 4000Гц.

Вот как бы заюзать вход от внешнего прерывания, но на 4 канала и без мультиплекса? biggrin.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 27 2005, 10:44
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(AlexTech @ Dec 27 2005, 12:21) *
Спасибо, попробую вечерком. Вот только вопрос, а что будет в моменты обработки прерываний, считать ведь перестанет?
А у меня уже используется 2 прерывания, одно с частотой 1.9Гц, второе с частотой 122Гц причем по видимому будет переписано на 4000Гц.

Вот как бы заюзать вход от внешнего прерывания, но на 4 канала и без мультиплекса? biggrin.gif


В моменты прерываний перестанет считать только если, длительность обработки прерывания превысит длительность импульса... В обработчике прерывания можно счетчики сбрасывать после отправки. т.е. скажем считать кол-во оборотов в минуту smile.gif

Без мультиплексора завести все 4 сигнала на внешнее прерывание не получится.. в M16 только 3 внешних источника прерывания int0, int1, int2, и int2 совпадает с входом аналогового компаратора.. можно завести один сигнал на счетный вход таймера T0 или T1, а остальные раскидать по Int'aм.
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Dec 27 2005, 11:54
Сообщение #7


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

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Ну мне собственно в минуту и нужно считать. Буду пробовать.
А вот если такой вариант: 4 выхода тахометров -> на 4 любые ноги и через диоды на один вход внешнего прерывания. Успеет ли контроллер при входе в прерывание считать что у него на тех 4х ножках или нет? Может как то коденсаторы прикрутить что бы длительность импульса увеличить немного.

Сообщение отредактировал AlexTech - Dec 27 2005, 11:56
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 27 2005, 12:04
Сообщение #8


Гуру
******

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



Цитата(defunct @ Dec 27 2005, 17:44) *
Без мультиплексора завести все 4 сигнала на внешнее прерывание не получится.. в M16 только 3 внешних источника прерывания int0, int1, int2, и int2 совпадает с входом аналогового компаратора.. можно завести один сигнал на счетный вход таймера T0 или T1, а остальные раскидать по Int'aм.


Очень даже получится - надо всего то четыре диода и четыре свободных порта. Схема такова: анализируемые линии садим на свободные линии любых портов (лучше для программирования на один порт). Если детектируется нулевой уровень по линии то к каждой линии прицепляем по диоду катодами к каждой линии, анодами вместе на любую линию прерывания вместе. Если детектируем лог. 1, то анодами к каждой линии, а катодами на прерывание. При возникновение события прерывания анализируем подследственные линии на присутствие лог. 0 (1), если есть место данному событию, то увеличиваем счетчик (для каждой линии свой) импульсов линии. Подсчет количества импульсов в секунду (или менее) организовать не сложно для Вас, я думаю.

Если есть возможность, поменяйте модель МК, есть такие, у которых присутствует вектор прерывания по изменению сигнала на любой линии порта.


--------------------
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Dec 27 2005, 12:08
Сообщение #9


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

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Вот я тоже так подумал ))) Не понятно только успеет ли контроллер считать выводы )))
А в каких контроллерах есть векторы для любых ножек? готов поменять на 32 64 128 )) остальные не катят (
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 27 2005, 12:09
Сообщение #10


Гуру
******

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



Цитата(AlexTech @ Dec 27 2005, 18:54) *
Ну мне собственно в минуту и нужно считать. Буду пробовать.
А вот если такой вариант: 4 выхода тахометров -> на 4 любые ноги и через диоды на один вход внешнего прерывания. Успеет ли контроллер при входе в прерывание считать что у него на тех 4х ножках или нет? Может как то коденсаторы прикрутить что бы длительность импульса увеличить немного.


Опоздал я со своим ответом. Успеет или нет - взависимости от того, какая частота внешних импульсов. Как я понял из постов выше, то не более 10 кГц - это с периодом не более 100 мкс, при частоте МК 8 МГц период выполнения одной команды - 125 нс, так что кроме обсчета ВСЕХ своих свободных линий Ваш МК успеет еще и слона посмешить :-)


--------------------
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 27 2005, 12:11
Сообщение #11


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(AlexTech @ Dec 27 2005, 13:54) *
Ну мне собственно в минуту и нужно считать. Буду пробовать.
А вот если такой вариант: 4 выхода тахометров -> на 4 любые ноги и через диоды на один вход внешнего прерывания. Успеет ли контроллер при входе в прерывание считать что у него на тех 4х ножках или нет? Может как то коденсаторы прикрутить что бы длительность импульса увеличить немного.


Считать-то он успеет, а вот от ошибок не застрахуешься при такой реализации.
Представьте ситуацию, когда один тахометр вызвал прерывание, мы порт прочитали, низкий уровень еще удерживается и в этот момент приходит сигнал от другого тахометра.. и все приплыли - перывания нет, импульс пропущен.
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Dec 27 2005, 12:14
Сообщение #12


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

Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688



Ничего страшного не случится, я не в космос лечу biggrin.gif
+/- 50 оборотов меня устроит вполне
Спасибо всем, буду пробовать.

И потом разве МК не запустит вторую копию обработчика прерываний?

Сообщение отредактировал AlexTech - Dec 27 2005, 12:16
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 27 2005, 12:18
Сообщение #13


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(AlexTech @ Dec 27 2005, 14:08) *
Вот я тоже так подумал ))) Не понятно только успеет ли контроллер считать выводы )))
А в каких контроллерах есть векторы для любых ножек? готов поменять на 32 64 128 )) остальные не катят (


В m162 есть PCINT0, PCINT1 можно настроить на любые пины порта C. плюс два стандартных Int0, Int1.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 27 2005, 12:19
Сообщение #14


Гуру
******

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



Цитата(AlexTech @ Dec 27 2005, 19:08) *
Вот я тоже так подумал ))) Не понятно только успеет ли контроллер считать выводы )))
А в каких контроллерах есть векторы для любых ножек? готов поменять на 32 64 128 )) остальные не катят (


Лучше Вам посмотреть даташиты на сайте Atmel. У Мега64...128 точно болше 4-х прерываний, так что Вам и так хватит без диодов. Но мне кажется, что если задача влезает в МК с памятью программ (ПП) 1к то лучше использовать МК с ПП на 50% больше и применить 4-е диода и дешевый МК, чем Громоздила64...128 :-)))


--------------------
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 27 2005, 12:35
Сообщение #15


Гуру
******

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



Цитата(defunct @ Dec 27 2005, 19:11) *
Считать-то он успеет, а вот от ошибок не застрахуешься при такой реализации.
Представьте ситуацию, когда один тахометр вызвал прерывание, мы порт прочитали, низкий уровень еще удерживается и в этот момент приходит сигнал от другого тахометра.. и все приплыли - перывания нет, импульс пропущен.


А никаких ошибок при такой частоте входных импульсов и не будет (вернее погршность будет низкая для данного типа устройства) - по любому прерыванию процессор анализирует состояния ВСЕХ линий. Итого время исполненя прерывания (при 8 МГц) - 2..5 мкс - вполне нормально.



Цитата(AlexTech @ Dec 27 2005, 19:14) *
И потом разве МК не запустит вторую копию обработчика прерываний?


Пока МК обрабатывает текущее прерывание, ни какие копии он не запускает. После отработки прерывания, минимум через такт он сможет начать обрабатывать следующее прерывание


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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