осторожно! леоныч!!! писал(а):Чувствую себя идиотом....
Пора уже прекращать с этим. Можно подумать, кто-то родился сразу со знаниями...
Солидарен. Я себя таковым постоянно чувствую, когда подхожу к новой линейке МК. До тех пор, пока в руки не возьму книгу+отладчик. Но признаваться в этом не очень люблю, тем более во всеуслышание...
Подскажите пожалуйста, каким образом я могу вводить текст в устройство.
Так понимаю что символы можно хранить в переменной типа "String". Но как мне организовать ввод по средствам четырех кнопок - вверх/вниз - выбор символа, ок - кнопка подтверждения выбранного символа, кнопка - стереть последний символ.
Если есть примеры работы таких программ. Для начала хоть ввести пару слов, вывести их на ЖКИ и отправить в терминал.
Доброго времени суток,
Подскажите, пожалуйста, как правильно подключить кнопку к лапке меги?
Программно я сделал так:
Config Debounce = 30
Config Pinc.2 = Input
Portc.2 = 1
Debounce Pinc.2
В протеусе работает, это понятно...
А вот как в железе правильно подключить кнопку, чтоб не подпалить меге лапки?
Спасибо.
C +5В на вывод контроллера резистор 10К,
На вывод контроллера кнопку, другая сторона кнопки, на GND.
Вот и всё, кнопка должна срабатывать при изменении состояния вывода с 1 на 0.
us5caa
Спасибо, я как то так и думал.
Мне нужно 4 кнопки подключить.
Вот такое подключение правильно будет?
(схемка без привязки к конкретным лапкам меги)
pavel123 писал(а):us5caa
Спасибо, я как то так и думал.
Мне нужно 4 кнопки подключить.
Вот такое подключение правильно будет?
(схемка без привязки к конкретным лапкам меги)
amv2000 писал(а):http://chipenable.ru/index.php/how-connection/13-connection-buttons-to-micros.html посмотрите здесь варианты подключения
В большинстве современных микроконтроллеров есть встроенные подтягивающие резисторы, поэтому внешние можно не ставить . В программе микроконтроллера нужно будет настроить используемый вывод на вход и включить внутренний подтягивающий резистор.
А вот этого я не знал - что резисторы можно не ставить. Только не очень понятно - как собственно включить
эти внутренние подтягивающие резисторы ? Или достаточно будет:
Если пин порта настроен на ВЫХОД, то запись 1 или 0 в порт сответственно выставит этот уровень на пине. Если же пин настроен на ВХОД, то запись 1 включит подтягивающий резистор, запись 0 же переведет вывод в высокоимпедансное состояние (оставит болтаться в воздухе).
В даташите указывается номинал этих резисторов. Для Attiny2313:
Разброс конечно большой, потому в ответственных конструкциях лучше ставить внешний резистор. Ведь на линии RESET тоже есть внутренний подтягивающий резистор, но все равно предпочтительнее ставить внешний. Что во всех конструкциях и делается...
Кстати, pavel123, у Вас как раз в коде и включен внутренний резистор. И это при том, что Вы подключаете внешний. Так что определяйтесь.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
edm2007 писал(а):Интересно, как оно работает, если в коде вообще никакой обработки нажатия нет.
Обработка нажатия есть, , просто я не весь код показал...
edm2007 писал(а):Кстати, pavel123, у Вас как раз в коде и включен внутренний резистор. И это при том, что Вы подключаете внешний. Так что определяйтесь.
С оглядкой на то, что:
edm2007 писал(а):Разброс конечно большой, потому в ответственных конструкциях лучше ставить внешний резистор. Ведь на линии RESET тоже есть внутренний подтягивающий резистор, но все равно предпочтительнее ставить внешний. Что во всех конструкциях и делается...
Вот я и пытаюсь определиться, как сделать правильно.
Оригинально. Я те та бу соо пи. Ну а что, ответ же есть, просто я не весь текст показываю. А правильно будет и так и этак. Тут всего лишь желательно для определенных задач.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
edm2007 писал(а):Оригинально. Я те та бу соо пи. Ну а что, ответ же есть, просто я не весь текст показываю.
Я прошу прощения, посмотрел еще раз хелп, и понял где был неправ.
У меня в коде кнопка проверяется на 0
Debounce Pinc.2, 0, подпрограмка
Я так понял что если не использовать строку Portc.2 = 1 , то внутренний резистор не подключается. И нужно "механическим" способом резистором 10к выводить этот порт в состояние 1.
Для ограничения тока через порт нужно применить еще один резистор 0,3к
Получится подключение по схеме:
pavel123 писал(а):Я так понял что если не использовать строку Portc.2 = 1 , то внутренний резистор не подключается. И нужно "механическим" способом резистором 10к выводить этот порт в состояние 1.
Да, все верно. Для опроса кнопки нужно чтобы на выводе был какой-то определенный уровень. Нельзя оставлять болтающийся в воздухе вывод, после отпускания кнопки на выводе должен установиться противоположный уровень. Вот как раз подтягивающий резистор и обеспечит 1 на выводе, а нажатая кнопка - 0. А какой резистор будет, внутренний или внешний - решать Вам.
Резистор же на 330R ограничит ток в случае неправильной конфигурации вывода порта. Если Вы по ошибке настроите этот вывод на ВЫХОД и выставите 1, то при нажатии кнопки пин порта скорее всего выйдет из строя. Резистор же спасет от такой неприятности. Если код написан без ошибок, то этот резистор не нужен. Но если Вы делаете первые шаги или это отладочная плата, то этот резистор просто обязателен.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Уважаемые знатоки, а как грамотно сделать такую вещь : подпрограмма прерывания int0. Из подпрограммы нужно как-то
обратиться к другой подпрограмме, в которой написано одно и то-же монотонное действие (чтобы это действие несколько раз не писать). Ведь подпрограммы в подпрограмме прерывания быть не может ?...
Config Int0 = Rising
On Int0 Read1307
do
'опрос кнопок
loop
read1307:
'читаем ds1307
'выводим на lcd
return
Вот "выводим на LCD" нужно запихнуть в подпрограмму, так как обращаться к ней будем не только из подпрограммы прерывания. Потому что выводить на LCD будем очень хитро и через одно место (об этом позже, если всё получится). И если это "выводим на LCD" писать несколько раз где это нужно, то никакой памяти не хватит.
Ну вывод на дисплей-то можно оформить как подпрограмму. Касаемо вызова: по идее можно и из прерывания вызвать, но это конечно неправильно. Может просто в прерывании выставлять флаг необходимости обновления дисплея, а в основном цикле уже его щупать?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
edm2007 писал(а):Ну вывод на дисплей-то можно оформить как подпрограмму. Касаемо вызова: по идее можно и из прерывания вызвать, но это конечно неправильно. Может просто в прерывании выставлять флаг необходимости обновления дисплея, а в основном цикле уже его щупать?
Главная проблема в таком подходе, что вывод на дисплей из прерывания может произойти во время... вывода на дисплей из основной программы. Да и сам вывод на дисплей - процедура ну очень длинная. Обработчики прерываний должны занимать минимум времени. Не забывайте, что они ПРЕРЫВАЮТ основную задачу программы.
Безусловно, лучший вариант - задрать флаг обновленных данных от датчика, а в теле программы выводить эти данные по флагу готовности и тут же его гасить, чтобы не было повторного вывода одного и того же.