Страница 128 из 304

Re: BASCOM AVR в вопросах и ответах

Добавлено: Вс апр 15, 2012 10:38:12
ut1wpr
edm2007 писал(а):
осторожно! леоныч!!! писал(а):Чувствую себя идиотом.... :oops:
Пора уже прекращать с этим. :) Можно подумать, кто-то родился сразу со знаниями...
Солидарен. Я себя таковым постоянно чувствую, когда подхожу к новой линейке МК. До тех пор, пока в руки не возьму книгу+отладчик. Но признаваться в этом не очень люблю, тем более во всеуслышание... :)

Re: BASCOM AVR в вопросах и ответах

Добавлено: Пн апр 16, 2012 19:06:12
vanyap1
Подскажите пожалуйста, каким образом я могу вводить текст в устройство.
Так понимаю что символы можно хранить в переменной типа "String". Но как мне организовать ввод по средствам четырех кнопок - вверх/вниз - выбор символа, ок - кнопка подтверждения выбранного символа, кнопка - стереть последний символ.

Если есть примеры работы таких программ. Для начала хоть ввести пару слов, вывести их на ЖКИ и отправить в терминал.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Вт апр 17, 2012 19:53:29
pavel123
Доброго времени суток,
Подскажите, пожалуйста, как правильно подключить кнопку к лапке меги?
Программно я сделал так:
Config Debounce = 30
Config Pinc.2 = Input
Portc.2 = 1
Debounce Pinc.2
В протеусе работает, это понятно...
А вот как в железе правильно подключить кнопку, чтоб не подпалить меге лапки?
Спасибо.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Вт апр 17, 2012 20:02:19
us5caa
C +5В на вывод контроллера резистор 10К,
На вывод контроллера кнопку, другая сторона кнопки, на GND.
Вот и всё, кнопка должна срабатывать при изменении состояния вывода с 1 на 0.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Вт апр 17, 2012 21:40:32
pavel123
us5caa
Спасибо, я как то так и думал. :)
Мне нужно 4 кнопки подключить.
Вот такое подключение правильно будет?
(схемка без привязки к конкретным лапкам меги)

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 07:03:28
amv2000
http://chipenable.ru/index.php/how-conn ... icros.html посмотрите здесь варианты подключения

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 07:11:14
edm2007
pavel123 писал(а):В протеусе работает, это понятно...
Интересно, как оно работает, если в коде вообще никакой обработки нажатия нет. Даже стандартная команда Debounce не дописана.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 07:15:51
Gordon Shumway
pavel123 писал(а):us5caa
Спасибо, я как то так и думал. :)
Мне нужно 4 кнопки подключить.
Вот такое подключение правильно будет?
(схемка без привязки к конкретным лапкам меги)
Изображение

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 07:24:23
Gordon Shumway
amv2000 писал(а):http://chipenable.ru/index.php/how-connection/13-connection-buttons-to-micros.html посмотрите здесь варианты подключения
В большинстве современных микроконтроллеров есть встроенные подтягивающие резисторы, поэтому внешние можно не ставить . В программе микроконтроллера нужно будет настроить используемый вывод на вход и включить внутренний подтягивающий резистор.
А вот этого я не знал - что резисторы можно не ставить. Только не очень понятно - как собственно включить
эти внутренние подтягивающие резисторы ? Или достаточно будет:

Код: Выделить всё

Config pinb.1 = input  
?

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 07:48:53
edm2007
Если пин порта настроен на ВЫХОД, то запись 1 или 0 в порт сответственно выставит этот уровень на пине. Если же пин настроен на ВХОД, то запись 1 включит подтягивающий резистор, запись 0 же переведет вывод в высокоимпедансное состояние (оставит болтаться в воздухе).

Потому так:

Код: Выделить всё

Config PINB.1 = Input   ' настраиваем вывод порта на вход
PORTB.1 = 1                  ' включаем внутренний подтягивающий резистор (или Set PORTB.1)
По умолчанию внутренние резисторы отключены.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 07:53:43
Gordon Shumway
edm2007 писал(а):

Код: Выделить всё

Config PINB.1 = Input   ' настраиваем вывод порта на вход
PORTB.1 = 1                  ' включаем внутренний подтягивающий резистор (или Set PORTB.1)
По умолчанию внутренние резисторы отключены.
Спасибо !

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 08:09:03
edm2007
Пожалуйста.

В даташите указывается номинал этих резисторов. Для Attiny2313:

Изображение

Разброс конечно большой, потому в ответственных конструкциях лучше ставить внешний резистор. Ведь на линии RESET тоже есть внутренний подтягивающий резистор, но все равно предпочтительнее ставить внешний. Что во всех конструкциях и делается...

Кстати, pavel123, у Вас как раз в коде и включен внутренний резистор. И это при том, что Вы подключаете внешний. Так что определяйтесь. :)

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 10:06:44
pavel123
Спасибо всем, кто откликнулся на мою просьбу. :))
edm2007 писал(а):Интересно, как оно работает, если в коде вообще никакой обработки нажатия нет.
Обработка нажатия есть, :) , просто я не весь код показал...
edm2007 писал(а):Кстати, pavel123, у Вас как раз в коде и включен внутренний резистор. И это при том, что Вы подключаете внешний. Так что определяйтесь. :)
С оглядкой на то, что:
edm2007 писал(а):Разброс конечно большой, потому в ответственных конструкциях лучше ставить внешний резистор. Ведь на линии RESET тоже есть внутренний подтягивающий резистор, но все равно предпочтительнее ставить внешний. Что во всех конструкциях и делается...
Вот я и пытаюсь определиться, как сделать правильно. :)

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 10:57:05
edm2007
pavel123 писал(а):просто я не весь код показал...
Оригинально. Я те та бу соо пи. Ну а что, ответ же есть, просто я не весь текст показываю. :)) А правильно будет и так и этак. Тут всего лишь желательно для определенных задач.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 12:15:48
pavel123
edm2007 писал(а):Оригинально. Я те та бу соо пи. Ну а что, ответ же есть, просто я не весь текст показываю. :))
Я прошу прощения, посмотрел еще раз хелп, и понял где был неправ.
У меня в коде кнопка проверяется на 0
Debounce Pinc.2, 0, подпрограмка
Я так понял что если не использовать строку Portc.2 = 1 , то внутренний резистор не подключается. И нужно "механическим" способом резистором 10к выводить этот порт в состояние 1.
Для ограничения тока через порт нужно применить еще один резистор 0,3к
Получится подключение по схеме:

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 12:50:41
edm2007
pavel123 писал(а):Я так понял что если не использовать строку Portc.2 = 1 , то внутренний резистор не подключается. И нужно "механическим" способом резистором 10к выводить этот порт в состояние 1.
Да, все верно. Для опроса кнопки нужно чтобы на выводе был какой-то определенный уровень. Нельзя оставлять болтающийся в воздухе вывод, после отпускания кнопки на выводе должен установиться противоположный уровень. Вот как раз подтягивающий резистор и обеспечит 1 на выводе, а нажатая кнопка - 0. А какой резистор будет, внутренний или внешний - решать Вам.

Резистор же на 330R ограничит ток в случае неправильной конфигурации вывода порта. Если Вы по ошибке настроите этот вывод на ВЫХОД и выставите 1, то при нажатии кнопки пин порта скорее всего выйдет из строя. Резистор же спасет от такой неприятности. Если код написан без ошибок, то этот резистор не нужен. Но если Вы делаете первые шаги или это отладочная плата, то этот резистор просто обязателен.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 13:42:32
Gordon Shumway
Доброго времени суток !

Уважаемые знатоки, а как грамотно сделать такую вещь : подпрограмма прерывания int0. Из подпрограммы нужно как-то
обратиться к другой подпрограмме, в которой написано одно и то-же монотонное действие (чтобы это действие несколько раз не писать). Ведь подпрограммы в подпрограмме прерывания быть не может ?...

Код: Выделить всё

Config Int0 = Rising
On Int0 Read1307

do
'опрос кнопок
loop

read1307:

'читаем ds1307

'выводим на lcd

return
Вот "выводим на LCD" нужно запихнуть в подпрограмму, так как обращаться к ней будем не только из подпрограммы прерывания. Потому что выводить на LCD будем очень хитро и через одно место (об этом позже, если всё получится). И если это "выводим на LCD" писать несколько раз где это нужно, то никакой памяти не хватит.

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 14:41:08
amv2000
А если в цикл включить опрос не подходит?

Код: Выделить всё

Config Int0 = Rising
On Int0 Read1307

do
'опрос кнопок
'выводим на lcd

loop

read1307:

'читаем ds1307


return

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 16:33:01
edm2007
Ну вывод на дисплей-то можно оформить как подпрограмму. Касаемо вызова: по идее можно и из прерывания вызвать, но это конечно неправильно. Может просто в прерывании выставлять флаг необходимости обновления дисплея, а в основном цикле уже его щупать?

Re: BASCOM AVR в вопросах и ответах

Добавлено: Ср апр 18, 2012 17:51:08
ut1wpr
edm2007 писал(а):Ну вывод на дисплей-то можно оформить как подпрограмму. Касаемо вызова: по идее можно и из прерывания вызвать, но это конечно неправильно. Может просто в прерывании выставлять флаг необходимости обновления дисплея, а в основном цикле уже его щупать?
Главная проблема в таком подходе, что вывод на дисплей из прерывания может произойти во время... вывода на дисплей из основной программы. Да и сам вывод на дисплей - процедура ну очень длинная. Обработчики прерываний должны занимать минимум времени. Не забывайте, что они ПРЕРЫВАЮТ основную задачу программы.
Безусловно, лучший вариант - задрать флаг обновленных данных от датчика, а в теле программы выводить эти данные по флагу готовности и тут же его гасить, чтобы не было повторного вывода одного и того же.