Здравствуйте, заранее извиняюсь если тема уже поднималась. Проблема такая: спаял всю необходимую обвязку к МК atmega328p. Простые скетчи с миганием светодиода работают прекрасно. Попробовал подключить к своей схеме ик датчик движения HC-SR501 и тут контроллер ведет себя не очень-иногда срабатывает на датчик, правда очень плохо, потом и вовсе не реагирует. Запитывал его от кроны через стабилизатор LM7805 и напрямую от 3-4 батареек АА. Всё одинаково. На родной плате arduino uno r3 всё работает отлично, даже с подсаженой 9 вольтовой батарейкой. Такое впечатление, что питания не хватает одновременно на мк и на датчик. Не может быть проблема в стабилизаторе? на ардуинке стаб ams1117-на ней всё норм пашет, у меня же ни в какую. В чём может быть проблема?
Вот мой скетч:
07 | digitalWrite(led,HIGH); |
11 | attachInterrupt(0, wakeUp, RISING); |
20 | set_sleep_mode(SLEEP_MODE_PWR_DOWN); |
27 | digitalWrite(led,LOW); |
А схему покажите.
Кстати, при питании от трех батарееке по полтора вольта вы получите не более 4.5 вольт, а датчик по даташит требует минимум 5V
https://www.mpja.com/download/31227sc.pdf
С учетом того, что выход у него при этом 3.3V хотелось бы увидеть, как Вы его согласовали с пятивольтовым входом МК.
Вот схема
5в согласен...однако я запитывал и через стабилизатор 7805 от 9в и подавал выходные 5в на мк и датчик- результат тот же. Может конечно что то не так делаю, я в этом деле пока что новичек)
OUT датчика, судя по схеме в даташите, 3.3V c ОУ через резистор в 1К. Есть подозрение, что он не совсем 0V выдает.
Попробуйте:
1. Подтянуть выход датчика резистором 10К к земле.
2. Поступить правильно, и через резистор в 1К подключиться к базе NPN транзистора с эммитером на земле и коллектором, через ограничивающий резистор в 150Ом на входе МК. Транзистор любой маломощный, хоть КТ315. Чтобы вход МК не висел в воздухе при закрытом транзисторе, подтянуть его резистором 10К к +5V
Спасибо, попробую!
Если я Вас правильно понял, то выход датчика подключить к базе транзистора, коллектор которого через резистор 150 ом ко 2 пину мк, эмиттер-к земле, и 2 пин мк замкнуть с выводом 5в через резистор 10 Ком?
Так?
Да, но учтите в программе, что эта схема инвертирует сигнал. То есть при 1 на выходе датчика транзистор откроется и на входе микроконтроллера будет 0. И наоборот, при 0 на выходе датчика на входе микроконтроллера будет 1.
Спасибо, попробовал первый вариант, который Вы предложили-работает, второй сейчас гляну. А чем 2 вариант лучше можете объяснить? или можно также и первый использовать?
Если первый вариант помог, второй можно не делать. Второй - это как по науке, чтобы годами работало и в мороз, и в жару.
второй способ попробовал,поправил в программе, но что то так же на что то реагирует, но не на датчик...но всё равно большое спасибо, а с этим вариантом будем разбираться.
может ли второй вариант не дорабатывать из-за недостаточного снижения напряжения? при реакции датчика напряжение на 2 порту падает до 0,1...V, а должно быть 0, я правильно понимаю?
если поставить резистор на коллектор транзистора посильней это поможет?
напряжение на 2 порту падает до 0,1...V, а должно быть 0, я правильно понимаю?
Нет, 0.1В это нормально. Логические уровни позволяют и больше:
https://learn.sparkfun.com/tutorials/logic-levels
может ли второй вариант не дорабатывать из-за недостаточного снижения напряжения? при реакции датчика напряжение на 2 порту падает до 0,1...V, а должно быть 0, я правильно понимаю?
0.1 вполне достаточно и с большим запасом. А в программе точно поправили, что не по переднему фронту, а по заднему реагировать?
Вместо
attachInterrupt(0, wakeUp, RISING);
Надо
attachInterrupt(0, wakeUp, FALLING);
если поставить резистор на коллектор транзистора посильней это поможет?
На коллекторе вообще у нас чисто защитный резистор, на случай, если при открытом транзисторе по ошибке в программе (заливке не той программы) порт будет включен на вывод и будет выведена единицу на этот порт.
да все именно так и сделал, но по-прежнему на датчик не реагирует
может из-за того что напряжение не поднимается до 3V, для ардуины я так понял минимальное напруга, при котором лог.1, но он не доогоняет до 3v
а поэтому по программе он и не реагирует на FALLING, т.к. лог. 1 нет и не на что прерыванию реагировать
а поэтому по программе он и не реагирует на FALLING, т.к. лог. 1 нет и не на что прерыванию реагировать
То есть транзистор не закрывается вообще и все время в режиме насыщения? Потому как, если он закроется, то через 10К резистор будет честная 1 на 5 вольт.
по ходу да транзистор не закрывается, через резистор где то 0,3 с копейками вольт
Чудеса. Проэмулировал схему.
Все красиво:
сейчас попробую разобраться, может я в схеме напартачил
А транзистор конкретно какой?
кт3102
кт3102
Проэмулировал с BC546B (аналогом 3102) - все нормально.
Попробовал еще ухудшить параметры сигнала. Чтобы от 1 до 2 вольт прыгал. Тогда приходится принудительно к земле притягивать базу транзистора. Вот так:
Спасибо! буду копать в этом направлении!