Тахометр и МК
Тахометр и МК
Здравствуйте, не могли бы вы мне рассказать, каким образом запрограммировать счетчик импульсов с ножки тахометра?
Что есть:
1) МК Atmega8
2) Микросхема, питается от +5В, на одну из ножек которой выводится количество оборотов (я так понимаю, каждый оборот микросхема выдает туда +5В, правильно?)
МК(1) будет считать кол-во импульсов с ножки микросхемы(2). Я так понимаю, в МК на одну ножку PD2(INT0) поставить прерывание. Подключить туда ножку микросхемы(2). И считать, сколько она импульсов выдаст за секунду и умножить на 60?
Я правильно излагаю? Если нет, то поправьте меня пожалуйста, спасибо за конструктивный ответ)
Пытаюсь закодировать в CVAVR.
Что есть:
1) МК Atmega8
2) Микросхема, питается от +5В, на одну из ножек которой выводится количество оборотов (я так понимаю, каждый оборот микросхема выдает туда +5В, правильно?)
МК(1) будет считать кол-во импульсов с ножки микросхемы(2). Я так понимаю, в МК на одну ножку PD2(INT0) поставить прерывание. Подключить туда ножку микросхемы(2). И считать, сколько она импульсов выдаст за секунду и умножить на 60?
Я правильно излагаю? Если нет, то поправьте меня пожалуйста, спасибо за конструктивный ответ)
Пытаюсь закодировать в CVAVR.
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Тахометр и МК
Правильно излагаете.
Только Вы, наверное, понимаете, что умножив подсчитанное значение на 60, будете получать данные, кратные 60-ти ?
Только Вы, наверное, понимаете, что умножив подсчитанное значение на 60, будете получать данные, кратные 60-ти ?
Re: Тахометр и МК
Верно. Но я хочу получать обороты в минуту, или я неправильно вас понял и что-то не учел? И не могли бы вы подсказать, как в CodeVision AVR поставить прерывание по высокому логическому уровню и как это дело оформить? и как подсчитать это количество прерываний за единицу времени? К сожалению, я никогда не сталкивался с такой темой(Аlex писал(а):Будете получать данные, кратные 60-ти
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Тахометр и МК
В CodeVision AVR есть генератор кода, там можно сгенерировать обработчик прерываний и инициализацию.
Re: Тахометр и МК
Так, по сути можно сделать программное прерывание каждую секунду, в котором будет выводится количество посчитанных прерываний с ножки микросхемы? Правильный ход мыслей?Аlex писал(а):можно сгенерировать обработчик прерываний и инициализацию.
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Тахометр и МК
Ну, типа того...
Вы бы не мыслили, а пробовали - быстрее получится
Вы бы не мыслили, а пробовали - быстрее получится
Re: Тахометр и МК
Последовал вашему совету и практически сделал, но появились 2 проблемы:Аlex писал(а):Вы бы не мыслили, а пробовали
1) Как обнулять счетчик импульсов каждую секунду? (А то будет правильно лишь одну секунду)
2) Как сделать прерывание по высокому логическому уровню? В начальном генераторе кода поставил External IRQ->INT0 enabled->mode:Any change (работает только по низкому, когда кнопка идет на землю).
Помогите, пожалуйста. Схема в протеусе и файлы CodeVision AVR прикрепил.
- Вложения
-
- Taxo.zip
- (25.29 КБ) 218 скачиваний
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Тахометр и МК
1) Может быть z=0; ? 
2) Зачем ? Разве есть разница какие фронты считать ?
2) Зачем ? Разве есть разница какие фронты считать ?
Re: Тахометр и МК
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// Place your code here
s=z*60;
z=0;
}
Вроде так) Огромное спасибо за помощь и моральную поддержку!)
{
// Place your code here
s=z*60;
z=0;
}
Вроде так) Огромное спасибо за помощь и моральную поддержку!)
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Тахометр и МК
Это у вас секундное прерывание ?
Re: Тахометр и МК
Да, 8 000 000 / 1024 = 7813. Предделитель выбрал 1024.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Тахометр и МК
Ясненько...
Re: Тахометр и МК
Я считал не количество импульсов за секунду, а время между импульсами.
Re: Тахометр и МК
Тоже решение) А узнав время между 2-мя импульсами, как узнать, сколько их было в минуту? T=1/F ?dm211 писал(а):время между импульсами.
Re: Тахометр и МК
Вопрос-а как узнать время между импульсами? У меня вот так-zhavnerko писал(а): Тоже решение) А узнав время между 2-мя импульсами, как узнать, сколько их было в минуту? T=1/F ?
Код: Выделить всё
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
a=1; // при поступлении импульса
}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
tik++; if(a){chast=tik; tik=0; a=0;} //измеряем время между импульсами
}Код: Выделить всё
Ftek=(70/(chast/12))*60; //переводим в об/мин
Последний раз редактировалось dm211 Пн апр 01, 2013 08:41:02, всего редактировалось 1 раз.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Тахометр и МК
Да. Только Вам нужно узнать частоту, имея период. Соответственно, формула будет F=1/T, а об/мин = (1*60)/T.zhavnerko писал(а):T=1/F ?
Re: Тахометр и МК
А как таймер настроен, подскажите пожалуйста!dm211 писал(а):Код: Выделить всё
// External Interrupt 1 service routine interrupt [EXT_INT1] void ext_int1_isr(void) { a=1; // при поступлении импульса } // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { tik++; if(a){chast=tik; tik=0; a=0;} //измеряем время между импульсами }
Re: Тахометр и МК
Я вот все не могу понять, как нам замерить период? Надо таймер установить на самое маленькое значение, которое возможно?Аlex писал(а):Только Вам нужно узнать частоту, имея период.


