roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 19:55

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 266 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8 ... 18  След.
Автор Сообщение
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 16:07 
Не в сети
Аватара пользователя

Зарегистрирован: 20 сен 2007, 11:44
Сообщения: 491
Откуда: Харьков
Skype: Victorovych_FF
прог. языки: ASM
ФИО: Иван ВикторОвич
1) да
2),3) пишется 0b, in temp,pd0 работать не будет, командой in можно заслать регистр в регистр(общего назначения), например так in temp,pind
4) да


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 16:14 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2005, 12:03
Сообщения: 3340
Откуда: Литва
прог. языки: asm
Ответы на все Ваши вопросы есть в книге:
Джона Мортона Микроконтроллеры AVR Вводный курс. Там же есть примеры, упражнения, описания мк-роллеров и великолепные примеры программ на асм.

_________________
_________
Sincerely,
Vovan


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 16:25 
Не в сети

Зарегистрирован: 06 июн 2009, 20:42
Сообщения: 231
Откуда: Москва
Спасибо за ответы.
Цитата:
2),3) пишется 0b, in temp,pd0 работать не будет
не понял. у меня есть ATmega8L (насколько я понимаю, порты у неё идентичны с ATmega8), там есть 8 портов D (с PD0 по PD7), 8 портов B (с PB0 по PB7) и 7 портов C (с PC0 по PC6). Так вот, мне нужно использовать порты D и B.
Чтобы загрузить данные из порта PD0 в регистр Temp я написал in Temp,PD0 ,но Вы говорите, что это работать не будет. Как тогда правильно написать?
(есть у меня подозрение, что я ошибаюсь, думая, что каждая ножка/лапка МК имеет свой индивидуальный порт - как прокомментируете?)

Цитата:
Ответы на все Ваши вопросы есть в книге:
Джона Мортона Микроконтроллеры AVR Вводный курс. Там же есть примеры, упражнения, описания мк-роллеров и великолепные примеры программ на асм.
Спасибо, помню её (давно читал), сегодня вечером засяду снова читать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 16:52 
Не в сети
Аватара пользователя

Зарегистрирован: 20 сен 2007, 11:44
Сообщения: 491
Откуда: Харьков
Skype: Victorovych_FF
прог. языки: ASM
ФИО: Иван ВикторОвич
portd - это обозначение регистра $12
pd0 - это обозначение 0 бита, этого регистра


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 17:37 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Просто для ясности понятий - портом в контексте AVR, да и не только, обычно зовут весь порт целиком - Port B, Port D. И состоит он из 8 бит/ножек/разрядов порта - PD0...PD7 для PortD.

Так вот, каждому порту соответствует три регистра ввода-вывода (пусть это порт D для ясности) - DDRD, PORTD и PIND. Первые два - для вывода командой out, читать командой in их можно, но прочтешь ровно то, что вывел последний раз командой out. А вот PIND - для ввода, данные в нем соответствуют реальным сигналам на ножках порта. Ну и еще с DDRD и PORTD удобно работать командами установки/снятия бита - это как раз для работы с отдельными ножками, а с PIND - командами перехода если бит установлен/сброшен.

И в любом случае, даже если команда работает с отдельным битом порта - указывается отдельно имя порта целиком и отдельно номер или имя бита.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 19:50 
Не в сети

Зарегистрирован: 06 июн 2009, 20:42
Сообщения: 231
Откуда: Москва
Интересно...но запутано. Сейчас, чтобы получить данные с конкретной ножки/бита, я прописал так (мне нужно сделать 123, в случае если на ножке 0, иначе 321):
Код:
ldi In_Screen,1  ; константу 1 в регистр In_Screen
in Temp,PD0  ; получаем данные с ножки PD0
cp In_Screen,Temp  ; сравниваем
breq 123  ; если 0, то 123
jmp 321  ; иначе 321

Исходя из того, что вы мне написали выше, мой вариант должен быть нерабочим. Но как сделать правильно я так и не понял. Неужели чтобы узнать данные с одной ножки/бита придётся получать данные со всех ножек этого порта (in Temp,portD), а потом сравнивать его с константой, содержащей инфу о всех ножках/битах порта (ldi In_Screen,0d00000001)? :shock:

P.S.- мне надо, чтобы если две определённые ножки МК соприкоснулись, то чтобы произошло действие. Значит на одну ножку надо подавать 1, а со второй надо считывать инфу и сравнивать её с нулём, например. Так вот как считывать инфу с конкретной ножки я и не могу понять - с остальным вроде разобрался.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 20:26 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Цитата:
Неужели чтобы узнать данные с одной ножки/бита придётся получать данные со всех ножек этого порта

Да. Причем, читать нужно регистр PIND

Можно сделать проще
Код:
sbis  PIND,0  ; пропускаем следующую команду, если нулевой бит в регистре PIND равен единице


Добавлено спустя 7 минут 29 секунд:
Затея же с "соприкасающимися ножками" довольно странная.

Во-первых, почему бы вам не коротить ногу на землю (а не на соседнюю ногу).
Во-вторых, лучше ловить ноль, а не единицу. Так можно использовать встроенную подтяжку.

Когда вы проверяете уровень на оторванной от всего ноге (просто висящей в воздухе),
то вы не сможете рассчитывать на какой-то определенный уровень - там может оказаться как ноль
так и единица в зависимости от погоды на луне. Поэтому стОит использовать подтяжку,
которая будет притягивать высокоомную ногу куда-нибудь.
Подтяжки есть встроенные в проц и они тянут вверх - к единице.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 20:33 
Не в сети

Зарегистрирован: 06 июн 2009, 20:42
Сообщения: 231
Откуда: Москва
Цитата:
Можно сделать проще
очень интересно, спасибо. Значит, если мне нужно сделать 123, в случае если на ножке PD5 находится 0, то выглядеть это будет так:
Код:
sbis  PIND,5  ; получаем данные с ножки PD5
jmp 123  ; если 0, то 123
jmp 321  ; иначе 321

Правильно?

Цитата:
Затея же с "соприкасающимися ножками" довольно странная.

Во-первых, почему бы вам не коротить ногу на землю (а не на соседнюю ногу).
Во-вторых, лучше ловить ноль, а не единицу. Так можно использовать встроенную подтяжку.

Когда вы проверяете уровень на оторванной от всего ноге (просто висящей в воздухе),
то вы не сможете рассчитывать на какой-то определенный уровень - там может оказаться как ноль
так и единица в зависимости от погоды на луне. Поэтому стОит использовать подтяжку,
которая будет притягивать высокоомную ногу куда-нибудь.
Подтяжки есть встроенные в проц и они тянут вверх - к единице.
Мне нужно, чтобы происходило определённое действие в случае замыкания контактов. Как сделать программное размыкание при физическом замыкании контактов я не знаю.
Пример: Кристалл вставляют в гнездо (где бы оно ни находилось, например, в украшении), замыкаются определёные контакты и МК понимает, что его вставили в украшение. Вот какая цель этого.


Последний раз редактировалось GrayHunter 02 мар 2010, 20:37, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 20:34 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
вроде бы абсолютно )

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 20:47 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Цитата:
Мне нужно, чтобы происходило определённое действие в случае замыкания контактов

Зачем же замыкать две ноги?
Замкните ОДНУ ногу на землю!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 21:07 
Не в сети

Зарегистрирован: 06 июн 2009, 20:42
Сообщения: 231
Откуда: Москва
расскажите подробнее об этом, пожалуйста, и как это реализовать через встроенные возможности МК.

Я себе слабо представляю что МК сможет понять, если на ноге будет 1, который будет замыкаться на землю. Где здесь ввод-то? :pardon:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 21:21 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2005, 12:03
Сообщения: 3340
Откуда: Литва
прог. языки: asm
Предлагаю ТС изложить алгоритм на русском языке, затем начать писать программу и, убедившись, что что-то не работает или имеется ошибка компиляции, задавать вопросы...
Правильно составленое тз и понятный псевдокод - залог успеха! :)
Кроме того, тогда предметно можно разговаривать, а не абстрактно типо "правильно ли я делаю" (потому что каждое действие имеет свой конечный смысл, цель :wink: ).
ЗЫ: почему бы всё-таки ТС не прочитать конкретно про порты "ввода-вывода" у Мортона? Ну настолько ясно там написано и про "встроенные" и про внешние возможности МК, что не понять просто невозможно...

_________________
_________
Sincerely,
Vovan


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 21:38 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Цитата:
расскажите подробнее об этом, пожалуйста, и как это реализовать через встроенные возможности МК.

Я себе слабо представляю что МК сможет понять, если на ноге будет 1, который будет замыкаться на землю. Где здесь ввод-то? :pardon:


1. Настраиваете ногу на вход с подтяжкой:
- в регистр PORT (в нужный битик) кладем единичку
- в регистр DDR (в тот же битик) кладем нолик
2. Проверяете сотсояние ноги
- читаете нужный битик в регистре PIN

Что происходит:
Когда нога оторвана, висит в воздухе, никуда не замкнута, вы считываете единицу
(единица появляется на ноге из-за того что включена встроенная подтяжка)
Когда нога замыкается на землю, на ней, естественно становится ноль.
Что тут может быть непонятного. Это штатное, стандартное, типовое решение.
Подтяжки для того и встроены, чтобы задавать определенное состояние оторванным ногам...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 22:44 
Не в сети

Зарегистрирован: 06 июн 2009, 20:42
Сообщения: 231
Откуда: Москва
Цитата:
1. Настраиваете ногу на вход с подтяжкой:
- в регистр PORT (в нужный битик) кладем единичку
- в регистр DDR (в тот же битик) кладем нолик
2. Проверяете сотсояние ноги
- читаете нужный битик в регистре PIN
Значит, если мне нужно сделать 123, в случае если на ножке PD5 находится 0, то выглядеть это будет так:

Код:
ldi Temp,0d00000000
out DDRD,Temp
ldi Temp,0d00100000
out PortD,Temp
sbis  PIND,5  ; получаем данные с ножки PD5
jmp 123  ; если 0, то 123 (есть замыкание)
jmp 321  ; иначе 321 (нет замыкания)
(при этом ножка порта PD5 замыкаться будет на ножку GND) Правильно?

А если взяться голыми руками (может быть мокрыми) только за ножку порта PD5, то тоже будет замыкание (0)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Магический кристалл
СообщениеДобавлено: 02 мар 2010, 23:28 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Да, все правильно.

Цитата:
А если взяться голыми руками (может быть мокрыми) только за ножку порта PD5, то тоже будет замыкание (0)?

Без подтяжки - однозначно да - на ноге будет болтаться что попало
(на вашем пальце много наводок, например 50 герц от сети).

С включенной подтяжкой _обычно_ нет...
Но если действительно наводки - проблема, то можно сделать внешнюю подтяжку помощнее -
поставить снаружи резистор, скажем килоом, с ноги на плюс питания проца.
(встроенная подтяжка - порядка нескольких десятков килоом)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 266 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8 ... 18  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO