Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Закрытая тема
Опции темы
Непрочитано 15.12.2012, 03:38   #61
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Часы-будильник на PIC16CXX

Сообщение от snevar Посмотреть сообщение
movlw a'0000'(если замкнуты)
Вы, это, ... уже не пишите букву а перед двоичным числом. Только буква B используется для двоичных чисел для любого порта.
Вот табличка для букв перед константами из руководства по ассемблеру Microchip. Например, человеческое число 95 можно записать различными способами для компьютера
Цитата:
Десятичное D'95' или .'95'
Шестнадцатеричное H'5F' или 0x5F
Восьмеричное O'137'
Двоичное B'01011111'
ASCII A'_' или '_'
Это всё - разные формы записи одного и того же числа 95.
То есть команды
Код:
movlw D'95'
movlw 0x5F
movlw O'137'
movlw B'01011111'
movlw '_'
абсолютно одинаковы, и в результате любой из них в рабочем регистре W будет лежать число 95.
Миниатюры:
Нажмите на изображение для увеличения
Название: kazus_asmbl.png
Просмотров: 38
Размер:	32.5 Кб
ID:	41376  
Реклама:

Последний раз редактировалось Yurkin2007; 15.12.2012 в 03:47.
Yurkin2007 вне форума  
Сказали "Спасибо" Yurkin2007
snevar (15.12.2012)
Непрочитано 15.12.2012, 05:06   #62
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,647
Сказал спасибо: 73
Сказали Спасибо 1,799 раз(а) в 651 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: Часы-будильник на PIC16CXX

Сообщение от snevar Посмотреть сообщение
Это я хочу послать на ра1 единицу... Т.е. movlw a'0100', movwf porta в моем понимании должно означать, что таким образом я подаю на ra0 - 0, ra1 - 1, ra2 - 0, ra3 - 0.
Вы правильно все понимаете, но у Вас старшие и младшие разряды поменяны местами. Я ведь Вам не зря наводящие вопросы задаю. Старшие разряды всегда идут слева, а младшие справа - так же, как и у нас в десятичной системе. То есть, раскладка порта А имеет вид: RA3-RA2-RA1-RA0.

Сообщение от snevar Посмотреть сообщение
Ну вот вроде бы.
Не, не пойдет. Ну например... Вы полагаете, что через несколько микросекунд после того, как Вы запишите 1 в порт RА1, двигатель уже успеет повернуть механизм настолько, что разомкнутся концевые выключатели? Да он даже с места еще не сдвинется! А у Вас получится вот что: включили двигатель. Переключатели замкнуты? Да. Останавливаем двигатель.

Сообщение от snevar Посмотреть сообщение
movlw OP_CL_KEY
xorwf new_key,w
btfss status, z
goto ignore_key (если не нажата)
До этого места всё нормально. Дальше полный бред.

Сообщение от snevar Посмотреть сообщение
Правда как-то скудновато получилось, но... Вроде бы так. Т.е. нам не надо в начале опрашивать, в каком положении двигатель? Как-то нелогично, хоть он и должен помнить в программе...
Ну, у Вас же упрощенный учебный проект. То есть, для реального рабочего устройства это неприемлимо, конечно. А для курсовика вполне можно пойти на такое допущение.

Сообщение от snevar Посмотреть сообщение
Это не надо описывать конкретно? Что проверяем такой-то бит, если он равен тому-то - то в одну сторону, другому - в другую...? и как вот это запомнить в конце? Или это опять же нам конкретно описывать не надо?Т.е., к примеру, остановили, и записали значение порта ра3 в какую-нибудь переменную?
Да, конечно, нужно описывать всё подробно, от и до.

Сообщение от snevar Посмотреть сообщение
Еще вот словами, к рисунку...
Если вдруг мы зарегистрировали нажатие кнопки, отвечаю щей за открытие и закрытие, то начинаем проверять концевые контакты - если замкнуты, запускаем двигатель в направлении, указанном в программе(как указанном?), если разомкнуты, значит двигатель в движении, и мы сканируем контакты до тех пор, пока они не замкнутся. Останавливаем двигатель, запоминаем его положение, и все... Примерно так?
Правда, если правильно понимаю, будет все циклиться, если мы нажали кнопку откр.закр. во время того, как двигатель начал уже открывать или закрывтаь.. Но это. думаю, не страшно.. Или страшно?
Ну, Вы правильно мыслите. В том смысле, что подобные мелочи нужно обязательно предусмотреть. Вот, например, еще. По Вашему алгоритму, если Вы нажмете и будете удерживать кнопку, механизм будет ездить туда-сюда, пока Вы кнопку не отпустите. Поэтому нужно предусмотреть, чтобы механизм переместился один раз и остановился, даже если кнопка удерживается. И чтобы его последующее перемещение было возможно только после отпускания и повторного нажатия кнопки.
RECTO вне форума  
Непрочитано 15.12.2012, 12:39   #63
snevar
Временная регистрация
 
Регистрация: 12.11.2010
Сообщений: 61
Сказал спасибо: 11
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
snevar на пути к лучшему
По умолчанию Re: Часы-будильник на PIC16CXX

Сообщение от RECTO Посмотреть сообщение
Не, не пойдет. Ну например... Вы полагаете, что через несколько микросекунд после того, как Вы запишите 1 в порт RА1, двигатель уже успеет повернуть механизм настолько, что разомкнутся концевые выключатели? Да он даже с места еще не сдвинется! А у Вас получится вот что: включили двигатель. Переключатели замкнуты? Да. Останавливаем двигатель.
А если так?.. Один из вариантов... Скорее правый, потому что мы не знаем сколько надо ждать.
Сообщение от RECTO Посмотреть сообщение
Поэтому нужно предусмотреть, чтобы механизм переместился один раз и остановился, даже если кнопка удерживается. И чтобы его последующее перемещение было возможно только после отпускания и повторного нажатия кнопки.
Ну это, по аналогии, будет через incf new_key, w?
snevar вне форума  
Непрочитано 15.12.2012, 23:31   #64
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,647
Сказал спасибо: 73
Сказали Спасибо 1,799 раз(а) в 651 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: Часы-будильник на PIC16CXX

Сообщение от snevar Посмотреть сообщение
А если так?.. Один из вариантов... Скорее правый, потому что мы не знаем сколько надо ждать.
Правый ближе, но все равно не то. Основной момент, почему: Ваша программа - это большой цикл, который выполняется несколько десятков, а может и сотен раз в секунду (кстати, Вы это не проанализировали?). И запуск двигателя - это дополнительный элемент, встраиваемый в этот цикл. То есть ждать, пока механизм докрутится до замыкания или размыкания контактов, будет очень некорректно - остановится индикация, счет времени, и еще что-нибудь. Поэтому и нужно планировать этот кусок, как выполняемый в большом цикле. У Вас должно получиться что-то вроде этого. Здесь основную идею я уже нарисовал. Вам осталось дорисовать остальные блоки программы - корректно запустить двигатель в нужную сторону. Если, конечно, действительно хотите разобраться... Кстати, замкнутый переключатель на порту RA3 имеет значение "0", а разомкнутый "1". Это видно даже по схеме.

Сообщение от snevar Посмотреть сообщение
Ну это, по аналогии, будет через incf new_key, w?
Ну, в общем, да! Только тогда уж через "incf NEW_KEY, f" а не "W".
А Вы, кстати, понимаете, почему и что при этом происходит?
Кстати, я посмотрел повнимательнее на коды клавиш. http://s005.radikal.ru/i211/1212/a7/9d35316875d0.jpg Судя по всему, в схеме опечатка: на пустом месте должна стоять клавиша "D", а вместо "D" должен стоять "0". И в программе тоже: коды клавиш 7, 8, 9 и Е должны быть "0D7", "0DB", "0DD" и "0DE" соответственно (вместо "D" там напечатан "0").
Миниатюры:
Нажмите на изображение для увеличения
Название: alg1.JPG
Просмотров: 40
Размер:	95.7 Кб
ID:	41406  
RECTO вне форума  
Сказали "Спасибо" RECTO
snevar (16.12.2012)
Непрочитано 16.12.2012, 00:36   #65
snevar
Временная регистрация
 
Регистрация: 12.11.2010
Сообщений: 61
Сказал спасибо: 11
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
snevar на пути к лучшему
По умолчанию Re: Часы-будильник на PIC16CXX

Сообщение от RECTO Посмотреть сообщение
Кстати, я посмотрел повнимательнее на коды клавиш.
Да, я тоже обратил внимание, когда перепечатывал... Во многих местах вообще D перепутано с 0...
Сообщение от RECTO Посмотреть сообщение
Ну, в общем, да! Только тогда уж через "incf NEW_KEY, f" а не "W".
А Вы, кстати, понимаете, почему и что при этом происходит?
Как сказать... Очень смутно. Если мне паскаль тот же хоть как-то преподавали, я хотя бы ориентируюсь, ну хоть примерно... А тут все вижу первый раз. И уж сколько я не читал описания... Ну да, увеличивает значение на 1. А как это вот связать со сканированием отжимания клавиши... Т.е. вообще никогда ассемблер не видел, и абсолютно никакой практики не было. Поэтому даже с азами сложновато.


Сообщение от RECTO Посмотреть сообщение
Правый ближе, но все равно не то. Основной момент, почему: Ваша программа - это большой цикл, который выполняется несколько десятков, а может и сотен раз в секунду (кстати, Вы это не проанализировали?). И запуск двигателя - это дополнительный элемент, встраиваемый в этот цикл. То есть ждать, пока механизм докрутится до замыкания или размыкания контактов, будет очень некорректно - остановится индикация, счет времени, и еще что-нибудь.
Ну с этим вроде более-менее понятно... В очень общих чертах.


Сообщение от RECTO Посмотреть сообщение
У Вас должно получиться что-то вроде этого. Здесь основную идею я уже нарисовал. Вам осталось дорисовать остальные блоки программы - корректно запустить двигатель в нужную сторону. Если, конечно, действительно хотите разобраться...
Я бы и хотел разобраться... Но как я могу решать, к примеру, логарифмические уравнения, не зная цифр и основных законов с операциями? Да, я могу прочитать, что есть там умножение, деление... Но даже после этого это уравнение я решить не смогу. Тут вот так же... Я хоть не раз уже читал про все команды, про регистры, адреса... И теперь я знаю, что есть команды, регистры, адреса. А как их связать...
И вообще, я очень вам благодарен...
Даже в этой программе - вроде смотрю, читаю комментарии, вроде так-то понятно, хотя бы в общих чертах. А вот так с нуля, какую команду взять и вставить, и чем грозит ошибка в команде, и как правильно применить..

Вот насчет этого места... Dvig_on=1,это включение двигателя? Вроде похоже, по левой ветке, а по правой и нет... тогда как мы остановим двигатель, если он открыл\закрыл, замкнул контакты, то значение dvig_on так и будет равно единице, он же включен... И как запомнить положение? Никак до меня не дойдет...
А с программой даже не знаю... Попробовать сразу что-нибудь?...)

Последний раз редактировалось snevar; 16.12.2012 в 00:39.
snevar вне форума  
Непрочитано 16.12.2012, 02:56   #66
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,647
Сказал спасибо: 73
Сказали Спасибо 1,799 раз(а) в 651 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: Часы-будильник на PIC16CXX

Сообщение от snevar Посмотреть сообщение
Да, я тоже обратил внимание, когда перепечатывал... Во многих местах вообще D перепутано с 0...
Ну вот, исправляйте... Вообще, конечно, это не лучший пример для изучения азов, тем более, когда он еще содержит много неточностей и опечатки...

Сообщение от snevar Посмотреть сообщение
Как сказать... Очень смутно. Если мне паскаль тот же хоть как-то преподавали, я хотя бы ориентируюсь, ну хоть примерно... А тут все вижу первый раз. И уж сколько я не читал описания... Ну да, увеличивает значение на 1. А как это вот связать со сканированием отжимания клавиши... Т.е. вообще никогда ассемблер не видел, и абсолютно никакой практики не было. Поэтому даже с азами сложновато.
Да конкретно ассемблер тут совсем ни при чем... Короче, работает это так (если я правильно понял). У подпрограммы сканирования клавиш есть дополнительная переменная "HIT_KEY", кажется. Когда клавиша нажимается, и при этом HIT_KEY=0, подпрограмма записывает код клавиши в NEW_KEY, а в HIT_KEY записывает 1. А если ни одна из клавиш не нажата, подпрограмма записывает в HIT_KEY 0. Теперь берем нашу программу. Фиксируем нажатие клавиши, проверив ее код в NEW_KEY. Если теперь увеличить значение NEW_KEY на 1, полученный код больше не будет совпадать ни с одной клавишей, и нажатия даже при зажатой клавише больше зафиксировано не будет... Надеюсь, понятно объяснил.

Сообщение от snevar Посмотреть сообщение
Я бы и хотел разобраться... Но как я могу решать, к примеру, логарифмические уравнения, не зная цифр и основных законов с операциями?
Да погодите Вы с операциями... То бишь, с командами. Рисуйте пока ромбиками. Пока правильно алгоритм не нарисуете, программу писать смысла не имеет.

Сообщение от snevar Посмотреть сообщение
Вот насчет этого места... Dvig_on=1,это включение двигателя? Вроде похоже, по левой ветке, а по правой и нет... тогда как мы остановим двигатель, если он открыл\закрыл, замкнул контакты, то значение dvig_on так и будет равно единице, он же включен...
"DVIG_ON" - это просто имя переменной, оно может быть произвольным. Смотрите по веткам алгоритма внимательнее. Когда DVIG_ON=1 и переключатели замкнуты, ничего не произойдет. Как только переключатели разомкнутся, в DVIG_ON запишется 0. И при следующем замыкании переключателя двигатель остановится.

Сообщение от snevar Посмотреть сообщение
И как запомнить положение? Никак до меня не дойдет...
Предлагаю, как вариант - непосредственно перед выключением двигателя читаете порт А, и запоминаете полученное значение в переменной. 1-й и 2-й разряды (начиная с 0-го), дадут информацию о том, куда крутился двигатель. Значит, в следующий раз будем крутить его в другую сторону.
RECTO вне форума  
Непрочитано 16.12.2012, 03:30   #67
snevar
Временная регистрация
 
Регистрация: 12.11.2010
Сообщений: 61
Сказал спасибо: 11
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
snevar на пути к лучшему
По умолчанию Re: Часы-будильник на PIC16CXX

Сообщение от RECTO Посмотреть сообщение
У подпрограммы сканирования клавиш есть дополнительная переменная "HIT_KEY", кажется. Когда клавиша нажимается, и при этом HIT_KEY=0, подпрограмма записывает код клавиши в NEW_KEY, а в HIT_KEY записывает 1. А если ни одна из клавиш не нажата, подпрограмма записывает в HIT_KEY 0. Теперь берем нашу программу. Фиксируем нажатие клавиши, проверив ее код в NEW_KEY. Если теперь увеличить значение NEW_KEY на 1, полученный код больше не будет совпадать ни с одной клавишей, и нажатия даже при зажатой клавише больше зафиксировано не будет... Надеюсь, понятно объяснил.
Это вроде бы понял...


Сообщение от RECTO Посмотреть сообщение
Да погодите Вы с операциями... То бишь, с командами. Рисуйте пока ромбиками. Пока правильно алгоритм не нарисуете, программу писать смысла не имеет.
А алгоритм... По-моему, на вашем вроде бы есть уже все... Ну вот только запуск с клавиши, но там разве не так? Ну вроде бы должно работать... .

Просто еще сроки...
Сообщение от RECTO Посмотреть сообщение
Предлагаю, как вариант - непосредственно перед выключением двигателя читаете порт А, и запоминаете полученное значение в переменной. 1-й и 2-й разряды (начиная с 0-го), дадут информацию о том, куда крутился двигатель. Значит, в следующий раз будем крутить его в другую сторону.
Т.е. читаем порт А... Если запомнили последний раз 0100, то в следующий раз подаем 0010?
Ну это наверно можно инвертировать как-то каждый йраз.. по маске, или как это называется.. Типа чтобы инвертировались только 1 и 2 разряд?

Последний раз редактировалось snevar; 16.12.2012 в 03:36.
snevar вне форума  
Непрочитано 16.12.2012, 03:47   #68
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,647
Сказал спасибо: 73
Сказали Спасибо 1,799 раз(а) в 651 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: Часы-будильник на PIC16CXX

Сообщение от snevar Посмотреть сообщение
А алгоритм... По-моему, на вашем вроде бы есть уже все... Ну вот только запуск с клавиши, но там разве не так? Ну вроде бы должно работать... .
А Вы ничего местами не попутали? И потом - где определяется, в какую сторону крутится двигатель?

Сообщение от snevar Посмотреть сообщение
Просто еще сроки...
Ну, Вы ведь хотите сами разобраться, а не чтобы за Вас сделали? Я всего лишь подталкиваю Вас к правильному ходу мыслей, говорю где правильно, а где нет.

Сообщение от snevar Посмотреть сообщение
Т.е. читаем порт А... Если запомнили последний раз 0100, то в следующий раз подаем 0010?
Ну это наверно можно инвертировать как-то каждый йраз.. по маске, или как это называется.. Типа чтобы инвертировались только 1 и 2 разряд?
Да, можно так.
RECTO вне форума  
Непрочитано 16.12.2012, 04:54   #69
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Часы-будильник на PIC16CXX

У ставней 2 концевика. И сигналы с них надо обрабатывать отдельно.

Даже если запоминать состояния, не факт, что свет не вырубиться в самый ответственный момент или кто-то руками не поменяет их положение в отключенном состоянии.

Раз уж решили ставить их вместо неиспользуемых кнопок - вот и ставьте, только на 2 кнопки.

Правда, так тоже никто не делает. Линии до концевиков длинные, наводки, да и замкнуть на что-нибудь могут. Элементарную защиту надо бы предусмотреть.
Godzilla82 вне форума  
Непрочитано 16.12.2012, 05:08   #70
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,647
Сказал спасибо: 73
Сказали Спасибо 1,799 раз(а) в 651 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: Часы-будильник на PIC16CXX

Сообщение от Godzilla82 Посмотреть сообщение
У ставней 2 концевика. И сигналы с них надо обрабатывать отдельно.
У МК элементарно портов не хватает на 2 концевика, к сожалению...

Сообщение от Godzilla82 Посмотреть сообщение
Даже если запоминать состояния, не факт, что свет не вырубиться в самый ответственный момент или кто-то руками не поменяет их положение в отключенном состоянии.
Ну... Решили, что для учебного проекта, который все равно в железе не реализуется, можно пойти на упрощение.

Сообщение от Godzilla82 Посмотреть сообщение
Раз уж решили ставить их вместо неиспользуемых кнопок - вот и ставьте, только на 2 кнопки.
На клавиатуру не получится поставить переключатели, я уже писал об этом. Программа МК не допускает нажатия одновременно 2 и более клавиш. Если одна из клавиш нажата, на другие клавиши реакции не будет. К тому же оказалось, что порт опрашивать будет проще, чем разбираться с программой опроса клавиатуры...

Сообщение от Godzilla82 Посмотреть сообщение
Правда, так тоже никто не делает. Линии до концевиков длинные, наводки, да и замкнуть на что-нибудь могут. Элементарную защиту надо бы предусмотреть.
Ну, так можно написать в аннотации к проекту, что линия до концевиков оборудована защитой от помех... Но это уже детали, в общем.

Последний раз редактировалось RECTO; 16.12.2012 в 05:10.
RECTO вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часы-будильник ninelka21pelis TTL и CMOS логика 10 22.05.2011 10:43
электромеханический будильник "Слава" alxchep Поиск схем. Делимся схемами 2 07.06.2008 13:51
[Решено] Добрый будильник dimitriy Отвлекитесь, эмбеддеры! 15 22.02.2008 08:56
часы transford Микроконтроллеры, АЦП, память и т.д 3 19.06.2007 17:23
[Решено] Часы в TV Роберт Видеотехника 8 19.10.2005 20:11


Часовой пояс GMT +4, время: 19:57.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot