Собственно, я спрашивал не о нужности резисторов подтяжки "вообще", а об использовании или "недоверии" к внутренним резисторам подтяжки в AVR.
В электронике нет понятия "недоверия", есть понятие достаточности. Встроенного резистора недостаточно в схеме с кнопкой, нп. в схеме, где кнопка подключена через триггер с открытым коллектором, встроенного резистора может быть достаточно.
Если бы вы немного разбирались в электронике, такого бы не написали.
да вы оказывается шутник))
codenamehawk писал(а):
когда процу есть чем другим заняться, а не тупо запускать задержки
для этого обычно используют опрос кнопок с постоянной частотой (обычно через таймеры и прерывание). При этом МК не сильно напрягается)) и есть куча свободного времени чтобы заняться другим..))
BOB51 писал(а):
даташитах от STмикроэлектроникс для МК серий STC.
ТС крутит в протеусе ATmega8.
опять пишут ответ.. не читая вопроса)) как всегда.))
codenamehawk писал(а):
Встроенного резистора недостаточно...
Обоснуйте. В ATmega8 внутренний резистор ~40 кОм. Для простого дискового номеронабирателя я считаю этого более чем достаточно для нормальной работы.
МК AVR сделаны по КМОП технологии. На полевых транзисторах, которые управляются электрическим полем. В отличие от биполярных транзисторов, которые управляются током. И помехи и наводки ловят только так. Достаточно сделать простой эксперимент. Настроить пин на вход с подтягивающим резистором. Состояние пина выводить на другой пин, на этот пин вешаем светодиод. Прошиваем, и водим руками вокруг макета. И видим, что светодиод начинает светиться. Не всегда так ловит, но ловит. А если ткнуть в пин отверткой держа пальцами за металл, результат точно обеспечен.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
да господа вас понесло и пронесло мимо...зачем ваще там мк не знаю хватилоп и 176ие4 и светодиодника чуткого..и рары элементоф логики да и если мк юзать придется дребезг давть и не толко поттяжками кстати контакты НН не идеалны им еужен хороший ток чтоб не окислялись и само зачищались
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
а пока еще не закончилось))) к сожалению, очень мало свободного времени. иии есть не решенные вопросы. так же собираюсь переделать на Атмега 16. Как все закончится обязательно выложу конечный результат, может кому-то пригодится эта ерунда)))))))
А вот индикатор есть смысл взять другой, с общим анодом. У AVR "нагрузочная способность" низкого уровня гораздо выше - посмотри схему в даташите, стр. 50 "Ports as General Digital I/O". Более часто принято "зажигать" светодиоды, устанавливая логический "0" на выходе.
этим советом также воспользовался)))
Дайте пожалуйста наводку, еще по одному вопросу. Необходимо,чтоб семисегментник гас, допустим через 1-2 минуты, т.к. планируется работа от АКБ. Вот берем мы значит 16-ти битный таймер. 1. Разрешаем прерывание по переполеннию. 2. устанавливаем делитель 1024. Частота МК 8МГц. макс число таймера = 65535. При таком раскладе получается: 65535 * 1024 / 8000000 = 8 секунд необходимо для переполнения таймера. Нам надо около минуты. значит в 10 раз больше надо ( 80 сек) 3. в цикле прерывания какой-то переменной Х прибавляем 1, до тех пор пока не выполнится условие Х=10. и тогда гасим семисегментник. обнуляем Х
я так понимаю, семисегментник будет гаснуть, каждые 80 сек. а не через 80 секунд после отображения цифры на индикаторе... Подскажите что почитать, я хз как в гугле свой вопрос сформулировать. А может какой-то другой путь решения есть. Заранее спасибо.!
Вторичный счетчик разрешен только при наличии флажка (или ненулевом значении) кода сегментов отображаемого символа. Если данные есть - считаем тики паузы, по исчерпании сброс кода сегментов и перезагрузка счетчика тиков. Ессно на время отсчета входной сигнал номеронабирателя запрещен (или обработка в фоновом режиме - то для уже разбираюшася начинающего).
Вторичный счетчик разрешен только при наличии флажка (или ненулевом значении) кода сегментов отображаемого символа. Если данные есть - считаем тики паузы, по исчерпании сброс кода сегментов и перезагрузка счетчика тиков. Ессно на время отсчета входной сигнал номеронабирателя запрещен
Если Вы имеете ввиду _delay_ms(), то это не подойдёт.
Хочу быть разбирающимся начинающим, где копать?))))
Добавлено after 2 minutes 17 seconds: Как то наверно можно запускать и останавливать счётчик в нужное время)
я так понимаю, семисегментник будет гаснуть, каждые 80 сек. а не через 80 секунд после отображения цифры на индикаторе...
Если я правильно понял, то тебе нужно перезапускать таймер "погашения" после вывода очередной цифры. Т.е. примерно так: изменилось значение цифры - обнулил переменную Ыкс. Всё, подсчет времени погащения начался сначала.
Я бы посоветовал сделать чуть-чуть иначе. Делитель таймера на /64 - частота вызова прерывания "переполнение" будет 0,524288 Гц. Т.е. примерно два раза в секунду. Заводишь переменную "погашение": если она не равна нулю - уменьшить. Если стала равна нулю - погасить индикатор (в прерывании погасить или выставить флаг для основной ветки). Как только выводишь что-то на индикатор - в переменную заносишь таймаут "погашения" (число секунд * 2).
Почему /64, а не /1024 - так "шаг таймера" более мелкий, при желании можно "по чуть-чуть" регулировать время. Таймер можно и не останавливать - пусть тикает. Потом, может быть, захочешь ещё что-то мигать новое.
я так понимаю, семисегментник будет гаснуть, каждые 80 сек. а не через 80 секунд после отображения цифры на индикаторе...
Если я правильно понял, то тебе нужно перезапускать таймер "погашения" после вывода очередной цифры. Т.е. примерно так: изменилось значение цифры - обнулил переменную Ыкс. Всё, подсчет времени погащения начался сначала.
Я бы посоветовал сделать чуть-чуть иначе. Делитель таймера на /64 - частота вызова прерывания "переполнение" будет 0,524288 Гц. Т.е. примерно два раза в секунду. Заводишь переменную "погашение": если она не равна нулю - уменьшить. Если стала равна нулю - погасить индикатор (в прерывании погасить или выставить флаг для основной ветки). Как только выводишь что-то на индикатор - в переменную заносишь таймаут "погашения" (число секунд * 2).
Почему /64, а не /1024 - так "шаг таймера" более мелкий, при желании можно "по чуть-чуть" регулировать время. Таймер можно и не останавливать - пусть тикает. Потом, может быть, захочешь ещё что-то мигать новое.
Спасибо огромное! Только что додумался, что таймер не нужно останавливать, хотел уточнить алгоритм, а Вы все уже тут разжевали))) завтра буду разбираться)) +100500 к карме Вам))))
таймер можно и не останавливать... Например сделать к в промышленном контроллере (ПЛК). Там опрос дискретных входов идёт с высокой частотой (десятки.. сотни килогерц). МК определяет моменты нажатия/отпускания кнопки.. считает количество нажатий, убирает дребезг контактов и выводит циферки на экранчик)) В детской игрушке МК всё равно заняться больше нечем))
Ребят, подскажите пожалуйста, собрал в железе, но таймер на выключение отказывается работать. в Протеусе работает .В чем может быть проблема? кусок кода: Спойлер#include <avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000UL #include <util/delay.h>
попробуй бесконечный цикл в майне добавить (после sei), может, конечно, и без него научились делать, но всёже... чета настраивается порт B а переключается порт D ? хотя, может это просто кусок такой... если не видишь причину глюка - попробуй принудительно исполнить требуемую часть кода, тогда станет видно, она не работает или не вызывается, в общем: "разделяй и властвуй!"
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
попробуй бесконечный цикл в майне добавить (после sei), может, конечно, и без него научились делать, но всёже... чета настраивается порт B а переключается порт D ?
Да, кусок такой, там в прерывании несколько условий. Ввсю прогу не стал кидать, там длиннющий элементарный код по опросу кнопочек. Само прерывание постарался скинуть, может ошибка какая-нибудь была допущена..
Ivanoff-iv писал(а):
если не видишь причину глюка - попробуй принудительно исполнить требуемую часть кода, тогда станет видно, она не работает или не вызывается, в общем: "разделяй и властвуй!"
Хорошо, попробую. Просто меня очень смущает тот факт что в PROTEUSе всё четко работает...На 100% утверждать не могу, но мне кажется и в железе в самом начале отладки тоже все работало, а потом что-то случилось)))
значит есть различия между железом и протеусом, и я так думаю не в пользу железа (в смысле непропай или чегото сгорело)
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Задержка внутри прерывания? Зачем?! В прерывании переменная "off" постоянно увеличивается, без какого либо контроля - так и будет ходить по кругу 0...128...255...0... Это так и запланировано? А запись значения в переменную есть где-нить? Есть смысл попробовать эту переменную сделать volatile.
Задержка внутри прерывания? Зачем?! В прерывании переменная "off" постоянно увеличивается, без какого либо контроля - так и будет ходить по кругу 0...128...255...0... Это так и запланировано? А запись значения в переменную есть где-нить? Есть смысл попробовать эту переменную сделать volatile.
1. задержку убрал. 2. переменная off обнуляется в тексте программы при каждом нажатии на любую кнопку.
вопсрос снят! я -лошара) в тексте программы опять перепутал знак "=" и "=="
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения