AVR Studio 4 - не могу разобраться с направлением портов!

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Alex T.
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Сб окт 13, 2007 06:14:07
Контактная информация:

AVR Studio 4 - не могу разобраться с направлением портов!

Сообщение Alex T. »

Всем привет! Помогите пожалуйста разобраться с регистрами DDRx в AVR Studio 4. Привожу следующий отрывок кода:


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

.include "1200def.inc"

.ORG   000
      rjmp reset
reset:
      ldi r31,$1f
      out ddrb,r31
      ldi r31,$61
      out portb,r31
      rjmp scan
scan:
      sbis pinb,6
      rjmp left
      sbis pinb,5
      rjmp right
      rjmp scan
left:
      rjmp scan
right:
      rjmp scan


И так, выводя в DDRB число $1f (то есть 0b00011111) я задаю работу выводов PORTB pin 0 по pin 5 как выходы, а 6, 7 и 8 соотв. как входы. Но, во время симуляции, при выводе числа $61 (0b01100001) в PORTB (см. код), в регистр PINB считывается PORTB pin 0 вместо заданных как входы PORTB pin 5 и pin 6, в результате чего блок с месткой scan отрабатывает прыжок на метку left (чего в принципе не требуется). Если попытаться инверсировать число вводимое в регистр DDRB, то есть вместо $1f ввести $e0 (при этом направление портов тоже инвертируются), то все работает как надо, но остается вопрос, а как же с направлениями портов, ведь теперь они заданы наоборот? Может в AVR Studio надо где-то задавать правильную работу DDRx? В чем здесь ошибка?

Спасибо за помощь!
Аватара пользователя
Reboot_s
Встал на лапы
Сообщения: 139
Зарегистрирован: Ср сен 19, 2007 10:26:43
Откуда: Украина,Черновцы
Контактная информация:

Сообщение Reboot_s »

Я ника не могу понять что надо, обьяснение запутанное.
Но могу заметить,что если вывод порта работает, как вход, то значение с него считывается внешнее, то есть от внешнего сигнала.
Надеюсь, помог.
Не напрягайся - перезагрузись!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Я думаю вы не правы ! и путаете спрашивающего.
С порта всегда читается то что туда записали а до записи считываются нули. Устройство ножки смотрите по ссылке выше.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Alex T.
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Сб окт 13, 2007 06:14:07
Контактная информация:

Сообщение Alex T. »

Насчет кода. Одним словом в AVR Studio, в PINB ничего не передается со входов, когда пины настроены на вход (да да, ВХОД), и наоборот передается, когда они настроены как выходы! Вот это и создает неурядицу.

Если не трудно, прогоните его под AVR Studio, и все станет ясно.
Alex T.
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Сб окт 13, 2007 06:14:07
Контактная информация:

Сообщение Alex T. »

Ребята, БОЛЬШОЕ всем спасибо!!! Теперь понял, а то у меня создалась путаница в голове. Мне казалось, что при конфигурации порта как "вход", в PINx должно записываться то, что на данный момент записано в PORTx, а в случае выхода туда вообще ничего не пишется, в чем я и ошибался! Вы мне все прояснили. Теперь я знаю, что во время симуляции мне надо самому вручную выставлять или снимать биты на PINB.6 и PINB.5, чтобы как бы эмулировать состояние физических выводов! Еще раз всем спасибо за помощь. tych, прости что сразу не заметил кнопку www - я тут лишь с сегодняшнего дня, с непривычки видимо. :))
Аватара пользователя
kamikadze
Потрогал лапой паяльник
Сообщения: 391
Зарегистрирован: Пт авг 31, 2007 19:58:52
Откуда: Украина, Сум обл., г. КоНоТоП

Сообщение kamikadze »

Прекрасная картинка с обучалки
Изображение
Бригада дежурных телепатов ответит на ваши вопросы
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Картинка великолепная ! НЕ ПРАВИЛЬНАЯ конечно. Но прикольно и красочно сделано :lol: В мурзилку хорошо подошла бы.
Вот схема ножки AVR и регистров близкая к реальности
Изображение
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Короче говоря, тему я почистил. :)

Подведем итоги. PINx и PORTx - разные регистры МК. Соответственно, PINx содержит логические уровни на соответствующих выводах МК, PORTx хранит записанное туда вами. PORTx читается всегда одинаково (до тех пор пока вы его сами не перепишете), вне зависимости от изменения внешних сигналов, если мы хотим следить за происходящим во внешнем мире - читаем PINx. Регистр DDRx определяет направление порта в том смысле, что блокирует передачу на выход уровней PORTx, если порт настроен на вход. Примерно так. Несколько упрощенно, но, думаю, понятно. :)
Последний раз редактировалось Aheir Вс окт 14, 2007 11:55:09, всего редактировалось 1 раз.
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
kamikadze
Потрогал лапой паяльник
Сообщения: 391
Зарегистрирован: Пт авг 31, 2007 19:58:52
Откуда: Украина, Сум обл., г. КоНоТоП

Сообщение kamikadze »

Ну то что озвучил Aheir изображено в обучалке
Бригада дежурных телепатов ответит на ваши вопросы
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

kamikadze писал(а):Ну то что озвучил Aheir изображено в обучалке


И чё Aheir написал что DDRx отключает PINx ? Так ведь нарисовано на картинке из обучалки. А ножка является входом при "1" в битах DDRx ? :shock: :shock: :shock:
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Alex T.
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Сб окт 13, 2007 06:14:07
Контактная информация:

Сообщение Alex T. »

Точно, картинка неправильная и неполная, вот с нее-то и началась моя путаница! А кто писал обучалку? Посоветуем ему исправить картинку.
Alex T.
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Сб окт 13, 2007 06:14:07
Контактная информация:

Сообщение Alex T. »

Короче говоря, тему я почистил. Smile

Подведем итоги. PINx и PORTx - разные регистры МК. Соответственно, PINx содержит логические уровни на соответствующих выводах МК, PORTx хранит записанное туда вами. PORTx читается всегда одинаково (до тех пор пока вы его сами не перепишете), вне зависимости от изменения внешних сигналов, если мы хотим следить за происходящим во внешнем мире - читаем PINx. Регистр DDRx определяет направление порта в том смысле, что блокирует передачу на выход уровней PORTx. Примерно так. Несколько упрощенно, но, думаю, понятно. Smile


Да, в полне понятно, но чтобы звучало полноценно, я бы еще отметил, что DDRx "блокирует" передачу уровней в случае, когда он определяет направление порта, как вход.

Не так ли, ведь при выходе ничего не блокируется)?
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Alex T. писал(а):Точно, картинка неправильная и неполная, вот с нее-то и началась моя путаница! А кто писал обучалку? Посоветуем ему исправить картинку.


ИМХО бесполезно. Примерно год назад я уж пытался советовать исправить.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Alex T. писал(а):я бы еще отметил, что DDRx "блокирует" передачу уровней в случае, когда он определяет направление порта, как вход.


На чб рисунке ИМХО всё очевидно и ясно.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Alex T. писал(а):...я бы еще отметил, что DDRx "блокирует" передачу уровней в случае, когда он определяет направление порта, как вход...


Добавил. :)
Последние наши посту здесь особого смысла не имеют, так что если никто не против, через пару дней устроим еще одну чистку темы.
Насчет обучалки - попробуем решить.
Оптимизм х (Опыт + Знания) = const
Alex T.
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Сб окт 13, 2007 06:14:07
Контактная информация:

Сообщение Alex T. »

Я не против.
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Aheir писал(а):Последние наши посту здесь особого смысла не имеют, так что если никто не против, через пару дней устроим еще одну чистку темы.


Я против - всего лишь 1 голос. ИМХО много места они не занимают, а вот как тернист путь к истине показывают наглядно.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Serega
Говорящий с текстолитом
Сообщения: 1529
Зарегистрирован: Пн авг 22, 2005 21:02:22
Откуда: Питер

Сообщение Serega »

Тыч, обучалку по контроллерам писал я.
Картинку может и можно в мурзилку. Но она наглядно и без лишних тонкостей объясняет работу ПВВ. Начинающих совсем не обязательно грузить сложными схемами. Я могу привести твою схему ниже в качестве допматериала, но объяснять по ней я ничего не смогу.
Лучше быть первым в деревне, чем вторым в Риме
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Serega писал(а):Тыч, обучалку по контроллерам писал я.
Картинка наглядно и без лишних тонкостей объясняет работу ПВВ.


Но она не правильная !

1. По ней проискодит отключение ножек МК от регистра PIN - а это не правильно. Он всегда подключен и в нем всегда отражаются уровни на ножках.

2. так как регистр DDR ты поместил снизу получается что ножка ВХОД когда бит в DDR равен "1" - а на самом деле наоборот.

Почему не нарисовать простой наглядный рисунок но ПРАВЕЛЬНЫЙ ???

Serega писал(а):Начинающих совсем не обязательно грузить сложными схемами.


и ВОВСЕ НЕ ДОПУСТИМО грузить не верными схемами.

Serega писал(а):Я могу привести твою схему ниже в качестве допматериала, но объяснять по ней я ничего не смогу.


Тебе не нужно объяснять, объяснение там где она опубликована.

Картинка, схема должна быть правильной, но в любом дш и апноуте к схемам приложены текстовые пояснения - это нормально.

Я думаю тебе не трудно нарисовать правильно - так как в МК и не сложно - т.е. условную схему.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Serega писал(а):но объяснять по ней я ничего не смогу.


Ага... так я и поверил :lol: :lol: :lol: "обучалку написал но схем читать не умею".

"НУ ни как" не сообразить что DDRB.1 управляет переключателем и "1" он верху а "0" он внизу. Ну ни в жисть не догадаться. Да ?

Всё как-то в тумане ...

Ну то что сигнал с PB1 - по СТРЕЛОЧКЕ ! - поступает в PINB.1 ВСЕГДА это конечно ребус афигительный.

И уж ни как нельзя понять что "1" или "0" из PORTB.1 - по СТРЕЛОЧКЕ ! - поступает либо прямо на PB1 когда в DDRB.1 есть "1" либо в виде подтяжки через диод и резистор примерно 40 ком когда в DDRB.1 есть "0"

Диод не дает "0" в PORTB.1 тянуть в низ ногу PB1 - подтяжка выключена.

Блин ! Ну такая сложная схема ... Оййой ...

Изображение

А помню кто-то доказывал как важно новичку знать как устроен транзистор ! А эта схема выходит его "загрузит". Т.е. пытаясь изучить МК - не грузись устройством его ног ! - весело :lol: :lol: :lol:
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»