Тахометр
- Войдите на сайт для отправки комментариев
Втр, 07/02/2012 - 20:40
Делаю тахометр для авто и ни черта не выходит. Причем глюк очень странный.
Имеем:
- Arduino Mega2560
- схему и принцип работы с hardlock.org.ua/viewtopic.php
Простую программу для проверки схемы:
volatile int rpm=0; void setup() { attachInterrupt(0, rpmCount, CHANGE); Serial.begin(115200); } void rpmCount() { rpm++; } void loop() { Serial.println(rpm); rpm=0; delay(1000); }
По итогу прога запускается, но при включении двигателя после 5-10 замеров виснет наглухо. Причем виснет так, что помогает только перепрошивка.
Хотелось бы разобраться, что я делаю не так и в чем состоит сбой ардуины.
Имхо код мне кажется вообще не о чём. В COM порте всегда 0.
Как то делал часы на индикаторах там как минимум строчек 100 кода.
Давайте по существу.
Это не готовый тахометр, это просто кусок кода после которого все виснет наглухо. Я хочу найти причину этого зависания!
Попробуй закомментируй delay(100);
И поменяй Serial.begin(9600);
Пробовал и то и то.
Так же пробовал отключать прерыванияна момент исполнения инструкций - то же без результата.
Причем виснет так, что помогает только перепрошивка.
Что, и выключение/включение не помогает?
Ага. Питание отключаю - подключаю, ресет жму - ноль эмоций, виснет намертво! А вот шьется без проблем.
код другой напиши, этот так и так работать не будет, если даже и виснут не будет
Спасибо за ценнейший комментарий, но код работает 100%. Смотрите внимательней или учите матчасть.
Сейчас проверил с кнопкой - не виснет собака, все ок. Вот из за шумного сигнала на входе возможно такое?
Попробуй всесто int rpm uint16_t rpm
Завтра попробую. Логики правда не вижу, но возможно поможет. У меня там на не более 200 гц.
Спасибо за ценнейший комментарий, но код работает 100%. Смотрите внимательней или учите матчасть.
Сейчас проверил с кнопкой - не виснет собака, все ок. Вот из за шумного сигнала на входе возможно такое?
эта тема уже сто раз обсуждалась на arduino.cc..
digitalRead или interrupts не подходят.
нужно использовать pulseIn
Хм, гляну про pulseIn.
Но зуб даю, что на идеальном сигнале с генератора все работает и на мой проге. Сам лично весь день сегодня гоняю.
эта тема уже сто раз обсуждалась на arduino.cc..
digitalRead или interrupts не подходят.
нужно использовать pulseIn
Реализация функции PulseIn:
Как можно видеть - ничего кроме чтения состояния соответствующего вывода (ну и проверки на превышение максимального времени ожидания) в этой функции не происходит.
Завтра попробую. Логики правда не вижу, но возможно поможет. У меня там на не более 200 гц.
Это на случай если переполнение произойдет
Хотя учитывая твою частоту и задерджу в 1 сек, то переполнения не будет. На Arduino Mega 2560 так и делаю
Вот нашел правильную реализацию тахометра или спидометра
Короче тему можно переместить в "Аппаратные вопросы"
Проблема не в скетче. При заведенном двигателе ардуина виснет как только на нее приходит сигнал с катушки, причем не важно читается он или нет.