Счётчик импульсов
- Войдите на сайт для отправки комментариев
Пнд, 08/04/2013 - 19:03
Привет всем суть кода такова, нажимаем кнопку на 11 pin включается светодиод 10 pin индикатор и запускается двигатель, срабатывает датчик на 7 pin включается светодиод 9 отсчитываются импульсы с шестерни 6 pin , отсчитали 4 импульса 10 pin выкл. светодиод гаснет двигатель стоп.
Но почему та светодиод после отсчёта импульсов не гаснет 10 pin
В чём проблема подскажите
int regim=1; int flag=0; int knopka=0; void setup() { pinMode(8, OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); // pinMode(11,INPUT); } void loop() { if(digitalRead(11)==HIGH&&flag==0)//если кнопка нажата { regim++; flag=1; if(regim>2)//ограничим количество режимов { regim=1;//так как мы используем только одну кнопку, } } if(digitalRead(11)==LOW&&flag==1)//если кнопка НЕ нажата { flag=0;//обнуляем переменную } if(regim==1)//первый режим { digitalWrite(10,LOW); //светодиод выключен двигатель OFF } if(regim==2)//второй режим, нажали и отпустили кнопку { digitalWrite(10,HIGH);//включился светодиод – двигатель ON if(digitalRead(7)==HIGH)//если датчик высокий уровень { digitalWrite(9,HIGH);//включаем светодиод if(digitalRead(6)==HIGH)// Отчитываем 4 импульса { knopka++; delay(200); digitalWrite(8,HIGH); //мигаем светодиодам после каждого импульса delay(1); digitalWrite(8,LOW); } if(knopka>=4) // 4 импульса { digitalWrite(10,LOW); после 4 импульсов гасим светодиод – отключаем двигатель } } else//если не нажата... { digitalWrite(9,LOW);//выключаем } } }
код конечно страшненький. могу предположить, что 10пин не то-чтобы не гаснет, а он просто снова загорается. сбросьте там-же режим.
и еще, в подробности не вникал, но вот-так
никто не считает, т.к. если двигатель будет вращаться медленно, то он за один HIGH может насчитать 100500 раз.
Подскажите пожалуйста как мне этот бардак исправить
И с счётчикам да у меня там косяк
Счетчик по фронту ипульсов
Не забываем вначале объявить переменные
Это выход импульсов с оптического датчика вращения двигателя + 4.6v высокий уровень +0.57v низкий уровень я его подключаю к цифровому входу ардуино
14.00kHz
Сейчас попробую
Подскажите как мне его выключить 10 пин после отсчёта 4 импульсов не могу сообразить
А так?
Привет наконец время появилась для продолжения своего проекта.
Пытаюсь переделать струйный принтер в планшетный поменял вал подачи бумаги на резьбовую передачу , теперь чтобы сместить лист бумаги на 5мм мне нужна вал провернуть на 1об , а на принтере 5мм на четверть оборота получается
Подскажите как мне сделать чтобы ардуина скажем 3 импульса считывал, а 4 отправлял на контроллер принтера?
А хотя нет как то вот так должно быть
Подскажите пожалуйста как можно это реализовать
легче всего по внешнему прерыванию.
Вот попробовал так , подключился к оптическому датчику принтера , входящий и исходящий сигнал без искажений
Подскажи пожалуйста как мне изменить исходящий сигнал с ардуино?
Чтобы он примерно вот такой был?
ардуина какая?
Ардуина на Атмеге8 и на Атмеге328 самодельные
Оно?
если да, то вот... прерывание INT0 (PORTD2 на 328-й) настраиваем на "по изменению уровня" и считаем. Единственное я не знаю как оно будет работать при неизвестном начальном состоянии. Проверте.
Да, и обнулять флаг прерывания (EIFR = 0xFF; или EIFR = (1 << INTF0);) надо обязательно, т.к. оно всегда сработает при старте, т.к. выбран такой режим. Либо настроить его по переднему фронту, а после первого срабатывания перенастроить на текущий.
Вроде бы оно спасибо , сейчас попробую, вот тока библиотеку отрою где нить
какую библиотеку?
Да он у меня ругается
sketch_may07f:13: error: 'EICRA' was not declared in this scope
sketch_may07f:14: error: 'EIFR' was not declared in this scope
sketch_may07f:15: error: 'EIMSK' was not declared in this scope
Я просто в этом деле новичок
Блин у меня Атмега 8 стояла )))
Я почему та на Атмеге 1280 не могу этот вход найти (прерывание INT0 (PORTD2 на 328-й)
pin21
Всё заработало спасибо ещё раз)))
Привет всем, делаю эмулятор сигнала вращения вала подачи бумага на принтер чтобы он в ошибку не вставал
Суть кода такова вал крутится в перед крутится в назад
Вот код по отдельности
Так вроде всё красиво и как нужно работает
Но когда пишу код чтобы он у меня в схеме работал сигнал получается корявыё при включении
Подскажите пожалуйста как это можно исправить?
Чтобы импульсы шли ровна как в первой 1-2 осциллограмме коде?
а на микросхеме не реально сделать? TTL уровни
Дак я когда по отдельности код пишу у меня сигнал нормальный идёт а когда делаю кнопки вперёд назад запуска у меня сигнал кривой получается
Поправте код пожалуйста
Хз, вроде все правильно. Попробуй у кнопкок дребезг убрать.
Дак я просто перемычку ставлю без кнопки и такая же ерунда
поставьте Т-триггер, и сразу будет готовый сигнал :)
А так?
А так вообще белиберда
Вот блин убрал из кода эти строки и всё заработало нормально , сигнал стал ровный
Ну значит делай нормальные кнопки, с защитой от дребезга.
Привет всем .
Подскажите пожалуйста как можно сделать при подачи на аналоговый вход так что бы скажем при 500 – 510 значении делалось одно действие .
А при 530 – 540 значение делалась другое действие
Например так
Спасибо сейчас попробую
Заработало))))
Добрый день!
Есть такая проблема, со счетчика электроэнернии приходит импульс, но прерывание происходит 3-4 раза за один импульс, подскажите пожалуйста, как этого избежать, желательно не аппаратно.
Платформа: Ардуина мега.
Пин: ПИН подтянут к земле.
Длина импульса 80мс.
На осцилограмме все чисто, дребезга не наблюдается.
То есть кондёр нан на 10 - это уже крутое аппаратное решение?
Это не весь листинг, там будут задействованы 4 прерывания, и отправка данных на xively через gprs модем, и чтоб при отправке ничего не потерялось, хотел использовать прерывания, насчет тяжелых операций я учту это замечание, насчет аппаратного избавления от дребезга боюсь конденсаторами не обойтись, надо будет еще инв. триггеры шмитта ставить, в моем случае это неудобно, если не получится программно, понятно что придется ваять аппаратно.