Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.68/63: Рейтинг темы: голосов - 63, средняя оценка - 4.68
Kmusmos
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 137
1

Использование вывода Reset в качестве входа

06.11.2014, 03:37. Просмотров 11512. Ответов 25
Метки нет (Все метки)

Доброго времени суток. Задался целью сделать контроллер освещения лестницы. Тот, который с эффектами, типа начинаешь идти - постепенно загораются ступеньки, пока идёшь - пробегает тень, подошёл к концу - лесница постепенно гаснет. Пока без всяких наворотов типа ШИМ. Пытался написать на асме, но как-то не получалось никак, сел прочитал про алгоритм билдер и написал за пару часов. Аж грустно как-то стало, видать совсем гуманитарной головного мозга... Но сейчас не об этом.
Контроллером я выбрал Тини2313. Потому что в соике он паябелен, плата под него делаеться легко, и сверлить не надо. Ступенек всего 16 (порт В полность и порт Д без 1 вывода, это всего 15 выводов), 2 крайние всегда будут гореть без эффектов, их можно подцепить на 1 ножку (я подцепил на PB7). Остальные 14 как раз распределяются между 2 почти полными портами (мне так эффекты было удобно писать, одинаковые под каждую половину лестницы). На PA0 и PA1 я повешу датчики движения (пока просто кнопки).
Все оно даже как-то работает, и все ноги заняты делом. Кода нарисовал на 1 кб, тоесть свободно еще столько же. Но тут я подумал, что это очень не удобно, каждый раз включать и выключать контроллер при смене времени суток, и надо бы повесить датчик света. А ног то свободных и нет уже. Решил задействовать Ресет. Но очень не хотелось бы терять возможность последовательного внутрисхемного программирования в дальнейшем, мало ли прошивку подправить надо будет. И пришло на ум такое: а если взять датчик света, и его вывод просто повесить на Ресет? Без использование фьюза RisetDysbl. И кода никакого для обработки сигнала с датчика писать не надо. Тогда в светлое время суток датчик формирует логический ноль, и контроллер все время в Ресете, а в тёмное выдаёт логическую единицу и контроллер нормально работает. Возможно ли такое? Просто возникло 2 вопроса. Ничего не будет контроллеру, если он 16 часов будет в ресете и только 8 работать ? Не будет ли слетать прошивка при таком дерганьи ресета, например светает, датчик прижимает Ресет, потом вдруг тучка, чуть потемнело и Ресет отпустили и так пару раз, типа дребезга при смене времени суток. И второе, я читал что во всяких логических элементах и мк в том числе, логическая единица, это напряжение БЛИЗКОЕ к напряжению питания, но немного меньше, типа есть небольшие потери на внутренних ключах. Так вот ничего страшного, если Ресет будет подтягивается не к напряжению питания, а к этому немного меньшему напряжению, которое выдаёт датчик??? Земля и питание у мк и датчика общие.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2014, 03:37
Ответы с готовыми решениями:

Tiny13 использование reset
Заказал себе tiny13, у нее всего один порт B ресет висит на порту B - 5 пин. Вопрос: чего в...

Использование ноги Reset как I/O.
Возникла необходимость доработки девайса, надо использовать ногу Riset как I/O. Посему несколько...

Использование АВР в качестве шим-контроллера.
Хочу сделать инверторный выпрямитель с широким диапазоном регулировки по току от 0 до 300 ампер, с...

АЦП и oversampling: использование синуса в качестве шума
Всем здравствуйте! Мучает меня один вопрос: можно ли в качестве шума для подмешивания к...

В чем отличие warm reset от cold reset?
Вроде я так понял что при warm reset не сбрасывается память......а смысл? программа (или...

25
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
06.11.2014, 04:14 2
Цитата Сообщение от Kmusmos
Ничего не будет контроллеру, если он 16 часов будет в ресете и только 8 работать ? Не будет ли слетать прошивка при таком дерганьи ресета, например светает, датчик прижимает Ресет, потом вдруг тучка, чуть потемнело и Ресет отпустили и так пару раз, типа дребезга при смене времени суток.
А что за датчик? LDR резистор + компаратор? Дребезг вообще нежелателен, но это не проблема - к компаратору можно легко прикрутить гистерезис/ПОС... Ну еще выходы в ресете станут в High-Z, надо их подтянуть внешними резисторами куда следует. В остальном проблем быть не должно.

Цитата Сообщение от Kmusmos
И второе, я читал что во всяких логических элементах и мк в том числе, логическая единица, это напряжение БЛИЗКОЕ к напряжению питания, но немного меньше, типа есть небольшие потери на внутренних ключах. Так вот ничего страшного, если Ресет будет подтягивается не к напряжению питания, а к этому немного меньшему напряжению, которое выдаёт датчик??? Земля и питание у мк и датчика общие.
Нет, пока ресет выше 0.7*Vcc всё ок. К тому же у датчика выход может быть и открытым коллектором.
0
sitimur
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 648
06.11.2014, 06:14 3
А почему - бы не использовать 74HC164D, имеет 8 выходов, а управление по 3-м проводам?
Так ведь проще, чем с ресетом заморачиваться.
0
SOKPOWIHIU
0 / 0 / 0
Регистрация: 11.07.2014
Сообщений: 116
06.11.2014, 08:33 4
Или использовать контроллер помощнее, ATmega8, например. И ног хватает, и отслеживать освещенность можно аналогово, и памяти побольше. Корпус вполне пригодный для пайки.
0
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
06.11.2014, 08:50 5
Или прочитать про "монтажное и". Весьма полезная штука при нехватке линий ввода.
0
Tistir500
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 333
06.11.2014, 08:53 6
А зачем на ресет вешать? Проще тогда питание контроллера пустить через ключ управляемый датчиком освещенности. Причем у готовых бытовых датчиков такой ключ встроен.
Насчет ног - тут на форуме уже где-то обсасывался алгоритм Чарли, за счет добавления внешних элементов (диоды, ключи) ног надо не много.
0
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
06.11.2014, 09:03 7
Цитата Сообщение от Tistir500
Проще тогда питание контроллера пустить через ключ управляемый датчиком освещенности
Вполне годный вариант (при условии, что МК занят только освещением).
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
06.11.2014, 11:10 8
Сейчас у вас не хватает одной ножки, чуть позже вы захотите еще что-нибудь добавить. А ножек нет.
Если бы вы делали проект, где точно известен функционал, это одно. А когда делаете пробное устройство, для себя, то не нужно жадничать. Взял МК с запасом по памяти, ногам. И пиши программу. Выяснилось, что можно взять МК поменьше, значит берете поменьше. Не получилось ужать, у вас уже есть программа и МК.
Вообще, ATTINY2313, 2 килобайта маловато. Это нужно досконально знать асм, чтобы впаковаться в этот объем.
Можно сделать расширение ввода-вывода сдвиговыми регистрами. 74HC165 (входы), 74HC595 (выходы). Опять же, нужно впаковаться в 2 килобайта.
Так что, думайте сами. Стоит ли порой экономить на МК.
0
VyvotzorD
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 2,309
06.11.2014, 11:33 9
Расширение ВВ делается на спец-микрухах типа:
MCP23016-I/SO
MCP23008-E/SO
MCP23S17-E/SO

Есть y2s и spi реализации. И то, и другое можно навесить по несколько штук на порт. y2s в этом случае удобнее, но spi проще. Дешево и сердито.
ATTIN2313 вполне себе хороший чип, и 2 килобайта это таки много для такой задачи... даже если мудрить что-то более совершенное.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
06.11.2014, 12:11 10
Цитата Сообщение от VyvotzorD
Расширение ВВ делается на спец-микрухах типа:
MCP23016-I/SO
MCP23008-E/SO
MCP23S17-E/SO

Есть y2s и spi реализации. И то, и другое можно навесить по несколько штук на порт. y2s в этом случае удобнее, но spi проще. Дешево и сердито.
ATTIN2313 вполне себе хороший чип, и 2 килобайта это таки много для такой задачи... даже если мудрить что-то более совершенное.
Нормальные таракашки. Смотрю и цены на них упали. Последний раз цены на них смотрел года 2 назад.
0
Kmusmos
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 137
06.11.2014, 17:27 11
Цитата Сообщение от яверт
А что за датчик? LDR резистор + компаратор?
Да вроде бы, датчик вот такой http://aukro.ua/datchik-intensivnosti-s ... 24573.html
Короче раз вы говорите, что может взлетит, то буду пробовать. Излишне усложнять конструкцию (всякими регистрами) не хочеться, тогда уже проще действительно взять 8 Мегу. Но пока хватает и Тини2313 (и платы под нее у меня получаються с 1 раза, а вот под Мега8 так не получаеться, шаг ножек меньше - гемороя больше), просто реально 1 ноги не хватило, а добавлять кучу функций не планирую. Так что если не получиться, то пущу питание контроллера через ключ, управляемый датчиком освещенности, тем более эта идея возникла первой, просто захотел обойтись без лишних элементов (без ключа).

И еще помогите пожалуйста в таком вопросе. Я сделал эффекты простой записью числа в регистр. Это занимает очень много места (хотя и так занято меньше половины памяти, но я хочу совешенства), и я решил переделать с помощью сдвига. Гашение ступеней сделал легко, записываю в порт 0xFF и сдвигаю с помощью LSR(LSL) пока в крайнем пине не окажеться 0, тогда по этому условию переход на следующий порт и опять повторяем то же. А вот зажигание так не получаеться, потому что нет команды, которая делает сдвиг, и в сдвигаемые биты записавает 1. Как это реализовать? Помогите пожалуйста.
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
06.11.2014, 17:59 12
Цитата Сообщение от Kmusmos
решил переделать с помощью сдвига. Гашение ступеней сделал легко, записываю в порт 0xFF и сдвигаю с помощью LSR(LSL) пока в крайнем пине не окажеться 0, тогда по этому условию переход на следующий порт и опять повторяем то же. А вот зажигание так не получаеться, потому что нет команды, которая делает сдвиг, и в сдвигаемые биты записавает 1.
Есть разные способы. Например, такой:
LSR и OR 0x80 для сдвига вправо;
LSL и OR 0x01 для сдвига влево.
0
Kmusmos
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 137
06.11.2014, 18:08 13
Цитата Сообщение от OtyxPM
LSR и OR 0x80 для сдвига вправо;
LSL и OR 0x01 для сдвига влево.
Разжуйте пожалуйста, что это значит:
OR R,R - Побитная логическая операция ИЛИ двух рабочих регистров
Я не могу понять, что она делает. Если можно, с кусочком реального кода
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
06.11.2014, 19:16 14
Цитата Сообщение от Kmusmos
OR R,R - Побитная логическая операция ИЛИ двух рабочих регистров
Я не могу понять, что она делает.
У Вас в аватаре зачем-то нарисован логотип AVR Studyo. Не пробовали ни разу отладчик Студии запускать? ;-) Если лень читать AVR Instruction Set (где с примерами и кусочками кода), то в отладчике наглядно любые изменения в регистрах и памяти видны, при пошаговом исполнении любых команд.
0
Kmusmos
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 137
06.11.2014, 19:18 15
Спасибо большое за подсказку по способу реализации, разобрался)) Правда получилось без отладки в студии, а с отладкой в железе (много раз прошивал и смотрел результат). И как я понял, правильно использовать не OR (регистр с регистром), а ORI (регистр с константой), поэтому я и не мог понять.
0
Fohyvis
0 / 0 / 0
Регистрация: 28.01.2012
Сообщений: 499
06.11.2014, 22:18 16
LSR и OR 0x80 для сдвига вправо
А еще есть арифметический сдвиг вправо ASR, который оставляет бит 7 без изменения ;)
0
rustompopov
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 54
12.11.2014, 11:11 17
Камрады, мучаюсь с ATtiny13A. Всему виной статья на Хабре: http://habrahabr.ru/post/110894/
Используя эту информацию набросал прошивку для верчения шаговым двигателем. Нажатием на RESIT очень хочется изменять направление вращения двигателя
Вроде всё по "феншую" сделал, даже даташит читал не раз. Но не получается.
Вот код: https://github.com/RaD/SolderPaste14M2/ ... #L115-L118
Подскажите, где я навертел?
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
12.11.2014, 11:29 18
Код
in      TMP, MCUSR
117         cpi     TMP, (1<<EXTRF)
118         breq    MODE_SWITCH
Код
in      TMP, MCUSR
sbrs     TMP, EXTRF
ldi     STATE, (1<<DIR_BIT) ; rotating
eor     STATE, CHANGE
...................................
0
rustompopov
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 54
12.11.2014, 19:36 19
Не осознаю изменения. SBRS пропускает следующую инструкцию, если установлен указанный бит. То же самое делает мой вариант с CPI/BREQ.
Можете пояснить, вы написали совет по оптимизации или что? Лучше подробно меня ткнуть носом в ошибку.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
12.11.2014, 19:40 20
Цитата Сообщение от rustompopov
...
Руслин? Датские горки?
0
12.11.2014, 19:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2014, 19:40

Использование TeamViewer в окне входа в систему
Здравствуйте. Впервые в жизни появилась работа где есть подобие сервера. На ПК Натана Win Server...

Как написать код для вывода на экран времени последнего входа в ОС?
Кому не лень, подскажите код для вывода на экран время последнего входа в Windows, что бы...

Использование USB входа на D-Link DIR 320
доброго времени суток. стоит у меня роутер D-Link DIR 320 с входом USВ, который я так понимаю для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru