реклама на сайте
подробности

 
 
> ATtiny45 настройка PB3
Dmitry Dubrovenk...
сообщение Apr 21 2013, 14:27
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 3-11-06
Из: Санкт-Ленинград
Пользователь №: 21 949



Что-то, как говорится, либо лыжи не едут, либо...
В общем, не удаётся настроить PB3 в ATtiny45 на вход.
На выход работает нормально, как переключаю на вход, сразу откуда-то берётся 1.75V, соответственно, при опросе, воспринимается, как постоянный "0".
Вроде уж все альтернативные модули принудительно отключил. Ничего не меняется.
При этом, на симуляторе - всё в порядке.
Клок - PLL, но пробовал и внутренний RC.


--------------------
Obligatus servus.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dmitry Dubrovenk...
сообщение Jun 12 2013, 08:27
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 3-11-06
Из: Санкт-Ленинград
Пользователь №: 21 949



Дальнейшие эксперименты показали, что, помимо RESET'а надо ещё отключить и последовательное программирование.
Но это ещё не всё.
После выполнения следующей последовательности:
1. Корректируем бит 3 (и другие, разумеется) в регистре R16 в "0"
2. Копируем порт DDRB в регистр R18. Бит 3 был настроен в "0"
3. Производим побитное XOR регистров R18 и R16 (с сохранением в R16). "0"+"0"="0"
4. Копируем регистр R16 в порт DDRB.
Код
     andi   R16,0b00010000
     in     R18,DDRB
     eor    R16,R18
     out    DDRB,R16

"0" почему-то становится "1", и порт, соответственно, переключается на выход.
Команда
Код
andi   R18,0b00010000

после п.2 решает проблему, но хотелось бы понять, почему, в в/у пункте, вместо "0" считывается "1"?


--------------------
Obligatus servus.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 12 2013, 09:36
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Dmitry Dubrovenko @ Jun 12 2013, 11:27) *
после п.2 решает проблему, но хотелось бы понять, почему, в в/у пункте, вместо "0" считывается "1"?
Всегда? Подозреваю, что иногда. И что в программе используются прерывания. И что не все регистры корректно сохраняются/восстанавливаются в прерываниях.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Dmitry Dubrovenk...
сообщение Jun 12 2013, 10:27
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 3-11-06
Из: Санкт-Ленинград
Пользователь №: 21 949



Цитата(Сергей Борщ @ Jun 12 2013, 13:36) *
Всегда? Подозреваю, что иногда.
Напрасно подозреваете.
После включения - вход. Первая же посылка - сразу "сваливается" на вывод.

Цитата(Сергей Борщ @ Jun 12 2013, 13:36) *
И что в программе используются прерывания. И что не все регистры корректно сохраняются/восстанавливаются в прерываниях.
Это вопрос или утверждение?
В любом случае: Прерывания используются. Всё сохраняется корректно (как бы, в противном случае, программа работала).


--------------------
Obligatus servus.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 12 2013, 11:34
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Dmitry Dubrovenko @ Jun 12 2013, 13:27) *
Напрасно подозреваете.
После включения - вход. Первая же посылка - сразу "сваливается" на вывод.
То есть вы утверждаете, что в вашем конкретном кристалле неправильно работает команда EOR? Как говорил в таких случаях великий Станиславский: "Не верю!". Приведенный вами в сообщении №20 код не может изменить состояние третьего бита DDRB. Значит каким-то образом портится либо содержимое DDRB до выполнения этого кода, либо содержимое R16 или R18 во время выполнения этого участка. Испортить регистры могут только прерывания. Как работает при этом остальная программа - загадка, но такое случается laughing.gif

Вы хотели версий - я дал одну.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Dmitry Dubrovenk...
сообщение Jun 12 2013, 13:21
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 3-11-06
Из: Санкт-Ленинград
Пользователь №: 21 949



Цитата(Сергей Борщ @ Jun 12 2013, 15:34) *
в вашем конкретном кристалле
Конкретных двух кристаллах из разных партий, и разных корпусах (см. предыдущие посты).

Цитата(Сергей Борщ @ Jun 12 2013, 15:34) *
Вы хотели версий - я дал одну.
Поскольку неправильное выполнение команды EOR, как и порча содержимого регистров, маловероятно, напрашивается вывод, что неправильно считывается содержимое порта DDRB (это, кстати, вовсе не означает, что его содержимое испорчено).
Так вот, и хотелось бы услышать гуру, почему такое происходит?

P.S.: А данный код как-раз и выполняется в прерывании.

Сообщение отредактировал Dmitry Dubrovenko - Jun 12 2013, 13:24


--------------------
Obligatus servus.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 12 2013, 13:41
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Dmitry Dubrovenko @ Jun 12 2013, 16:21) *
Конкретных двух кристаллах из разных партий, и разных корпусах (см. предыдущие посты).
Тем более.
QUOTE (Dmitry Dubrovenko @ Jun 12 2013, 16:21) *
напрашивается вывод, что неправильно считывается содержимое порта DDRB
Это не порт. Это регистр направления. Внутренний регистр. Вероятность его порчи по аппаратным причинам ничтожно мала.
QUOTE (Dmitry Dubrovenko @ Jun 12 2013, 16:21) *
P.S.: А данный код как-раз и выполняется в прерывании.
Вот может это прерывание происходит во время доступа к этому же регистру из основного цикла? В этом случае надо в основном цикле обращения к этому регистру (как и к любой другой разделяемой переменной) выполнять при запрещенном прерывании.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Dmitry Dubrovenk...
сообщение Jun 12 2013, 14:40
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 3-11-06
Из: Санкт-Ленинград
Пользователь №: 21 949



Цитата(Сергей Борщ @ Jun 12 2013, 17:41) *
Это не порт
У AVR это называется именно "порт", с использованием соответствующих инструкций.

Цитата(Сергей Борщ @ Jun 12 2013, 17:41) *
Вероятность его порчи по аппаратным причинам ничтожно мала.
Повторяю ещё раз: Неправильное считывание вовсе не означает повреждения регистра.

Цитата(Сергей Борщ @ Jun 12 2013, 17:41) *
Вот может это прерывание происходит во время доступа к этому же регистру из основного цикла?
Не происходит.


--------------------
Obligatus servus.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 14 2013, 12:05
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Dmitry Dubrovenko @ Jun 12 2013, 17:40) *
У AVR это называется именно "порт", с использованием соответствующих инструкций.
Портом называется совокупность ног ввода-вывода и связанных с ними регистров PORTx, PINx, DDRx. А отдельно взятый DDRx - регистр специального назначения (Special Function Register, SFR).
QUOTE (Dmitry Dubrovenko @ Jun 12 2013, 17:40) *
Повторяю ещё раз: Неправильное считывание вовсе не означает повреждения регистра.
Ну продолжайте бороться с ветряными мельницами. Заметьте - вы первый за почти 20 лет существования AVR нашли в них такую особенность. Или смотрите питание - какой там должен быть ужас, чтобы сигнал добегал с искажениями из одной части кристалла до другой? Опять же, питание маловероятно ибо стабильно только один сигнал и на нескольких разных кристаллах. Ищите в консерватории своей программе.

P.S. да, когда найдете причину - не забудьте сообщить ее здесь.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Dmitry Dubrovenk...
сообщение Jun 14 2013, 16:20
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 3-11-06
Из: Санкт-Ленинград
Пользователь №: 21 949



Цитата(Сергей Борщ @ Jun 14 2013, 16:05) *
Портом называется совокупность ног ввода-вывода и связанных с ними регистров PORTx, PINx, DDRx.
Ссылочку на источник, плиз.
А по-моему, логичнее называть "портом" то, для чего используются команды работы с портом (см., например, даташит на ATtiny 25/45/85, стр.206).

Цитата(Сергей Борщ @ Jun 14 2013, 16:05) *
Заметьте - вы первый за почти 20 лет существования AVR нашли в них такую особенность
Я Вас умоляю!
Если Вы не сталкивались, не надо за всех говорить.
Одних ерратов сколько вышло.
Посмотрите Гугль по теме, типа: "не программируется 2313a по HVPP", или ещё чего-нибудь, узнаете много интересного.

Цитата(Сергей Борщ @ Jun 14 2013, 16:05) *
Или смотрите питание - какой там должен быть ужас, чтобы сигнал добегал с искажениями из одной части кристалла до другой?
Чё ж у Вас за решения каие-то всё "координальные". По-моему, уже самому начинающему должно уже быть понятно, что, если это не глюк/особенность чипа, то - ошибка конфигурации. Или Вы хотите сказать, что одной строчкой в программе можно убрать помехи по питанию?

Цитата(Сергей Борщ @ Jun 14 2013, 16:05) *
Ищите в консерватории своей программе.
Вы хотите сказать, что в порт регистр DDRx можно записать "1" и он не переключится на выход?

Цитата(Сергей Борщ @ Jun 14 2013, 16:05) *
когда найдете причину - не забудьте сообщить ее здесь.
А это надо? У всех же всё и так работает.
И вообще, найдите хотя бы пяток человек, которые Ресет отключают. А некоторые об этом и не знают. rolleyes.gif
Некоторые также не понимают, зачем выводить информацию в DDRx, а не в PORTx.


Цитата(Maik-vs @ Jun 14 2013, 14:57) *
я вижу инверсию ЧЕТВЁРТОГО бита DDRB, если он был "1" в r16 до "andi r16".
Не совсем так. Там возможны четыре варианта:
1. Бит в DDRB был "1", в r16 - "1" --> бит в DDRB инветртирутся.
2. Бит в DDRB был "1", в r16 - "0" --> бит в DDRB не инветртирутся.
3. Бит в DDRB был "0", в r16 - "1" --> бит в DDRB инветртирутся.
4. Бит в DDRB был "0", в r16 - "0" --> бит в DDRB не инветртирутся.
Это сделано, что бы исключить джиттер.
Поскольку это - софтовый UART, необходимо, что б все смены уровней происходили через одинаковые интервалы, поэтому все ветки программы (включая вход в обработчик прерывания) выровнены и оптимизированы по времени.

Цитата(Maik-vs @ Jun 14 2013, 14:57) *
А третий (и все, кроме четвёртого) бит в DDRB не изменился.
ДОЛЖЕН не изменяться, но почему-то (без принудительного сброса) меняется.
В этом собственно и суть вопроса. sm.gif


--------------------
Obligatus servus.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dmitry Dubrovenko   ATtiny45 настройка PB3   Apr 21 2013, 14:27
- - _Артём_   Цитата(Dmitry Dubrovenko @ Apr 21 2013, 17...   Apr 21 2013, 15:20
|- - Dmitry Dubrovenko   Цитата(_Артём_ @ Apr 21 2013, 19:20) Наве...   Apr 21 2013, 19:10
- - ILYAUL   Зачем RESET убил? Именно ими и преключает альтерн...   Apr 21 2013, 20:41
|- - Dmitry Dubrovenko   Цитата(ILYAUL @ Apr 22 2013, 00:41) Зачем...   Apr 22 2013, 17:32
- - ILYAUL   Первые два вопроса было не Вам. Что на пин подклю...   Apr 22 2013, 18:14
|- - Dmitry Dubrovenko   Цитата(ILYAUL @ Apr 22 2013, 22:14) Первы...   Apr 23 2013, 17:36
|- - zombi   Цитата(Dmitry Dubrovenko @ Apr 23 2013, 20...   Apr 23 2013, 20:54
|- - Dmitry Dubrovenko   Ребяты! Вы чего? Как отсутствие подтяжки даст ...   Apr 25 2013, 19:35
|- - zombi   Цитата(Dmitry Dubrovenko @ Apr 25 2013, 22...   Apr 25 2013, 20:19
- - ILYAUL   ЦитатаА кому? Артёму ЦитатаКнопка, пока разбираюс...   Apr 23 2013, 17:44
|- - Dmitry Dubrovenko   Цитата(ILYAUL @ Apr 23 2013, 21:44) Тогда...   Apr 23 2013, 18:08
- - ILYAUL   Нога судя по всему в воздухе   Apr 23 2013, 19:03
- - ILYAUL   Вы схемку подключения кнопочки не ленитесь показат...   Apr 25 2013, 20:49
- - Dmitry Dubrovenko   Друзья! Вы прочтите с самого начала. Как можно...   Apr 26 2013, 16:45
- - zombi   1. Чем меряете 1.75V ? 2. Есть ли кроме PB3 еще вх...   Apr 26 2013, 20:11
- - Dmitry Dubrovenko   1. Тестером/осциллографом 2. Есть. Работают. 3. Ну...   Apr 27 2013, 17:33
|- - zombi   Цитата(Dmitry Dubrovenko @ Apr 27 2013, 20...   Apr 27 2013, 19:20
|- - Dmitry Dubrovenko   Цитата(zombi @ Apr 27 2013, 23:20) А рези...   Apr 28 2013, 11:23
|- - _Артём_   Цитата(Dmitry Dubrovenko @ Jun 14 2013, 19...   Jun 14 2013, 16:54
||- - Dmitry Dubrovenko   Цитата(_Артём_ @ Jun 14 2013, 20:44) И ка...   Jun 14 2013, 17:00
||- - _Артём_   Цитата(Dmitry Dubrovenko @ Jun 14 2013, 20...   Jun 14 2013, 20:11
|- - Сергей Борщ   QUOTE (Dmitry Dubrovenko @ Jun 14 2013, 19...   Jun 14 2013, 21:38
|- - Dmitry Dubrovenko   Цитата(_Артём_ @ Jun 15 2013, 00:11) А см...   Jun 15 2013, 10:59
|- - Сергей Борщ   QUOTE (Dmitry Dubrovenko @ Jun 15 2013, 13...   Jun 15 2013, 22:47
|- - Dmitry Dubrovenko   Цитата(Сергей Борщ @ Jun 16 2013, 02:47) ...   Jun 16 2013, 20:12
- - Maik-vs   Как-то сложно всё у ваc в 20м сообщении. Нельзя п...   Jun 14 2013, 10:57


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01516 секунд с 7
ELECTRONIX ©2004-2016