|
ATtiny45 настройка PB3 |
|
|
|
Apr 21 2013, 14:27
|

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

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

Частый гость
 
Группа: Участник
Сообщений: 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.
|
|
|
|
|
Jun 12 2013, 10:27
|

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

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

Частый гость
 
Группа: Участник
Сообщений: 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.
|
|
|
|
|
Jun 12 2013, 13:41
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Jun 12 2013, 14:40
|

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

|
Цитата(Сергей Борщ @ Jun 12 2013, 17:41)  Это не порт У AVR это называется именно "порт", с использованием соответствующих инструкций. Цитата(Сергей Борщ @ Jun 12 2013, 17:41)  Вероятность его порчи по аппаратным причинам ничтожно мала. Повторяю ещё раз: Неправильное считывание вовсе не означает повреждения регистра. Цитата(Сергей Борщ @ Jun 12 2013, 17:41)  Вот может это прерывание происходит во время доступа к этому же регистру из основного цикла? Не происходит.
--------------------
Obligatus servus.
|
|
|
|
|
Jun 14 2013, 12:05
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Jun 14 2013, 16:20
|

Частый гость
 
Группа: Участник
Сообщений: 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)  когда найдете причину - не забудьте сообщить ее здесь. А это надо? У всех же всё и так работает. И вообще, найдите хотя бы пяток человек, которые Ресет отключают. А некоторые об этом и не знают.  Некоторые также не понимают, зачем выводить информацию в 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 не изменился. ДОЛЖЕН не изменяться, но почему-то (без принудительного сброса) меняется. В этом собственно и суть вопроса.
--------------------
Obligatus servus.
|
|
|
|
|
Jun 14 2013, 16:54
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Dmitry Dubrovenko @ Jun 14 2013, 19:20)  что б все смены уровней происходили через одинаковые интервалы, поэтому все ветки программы (включая вход в обработчик прерывания) выровнены и оптимизированы по времени. И какую точность удалось получить с помощью "выравнивания" программы? Цитата(Dmitry Dubrovenko @ Jun 14 2013, 19:20)  Это сделано, что бы исключить джиттер. Поскольку это - софтовый UART, необходимо, что б все смены уровней происходили через одинаковые интервалы, поэтому все ветки программы (включая вход в обработчик прерывания) выровнены и оптимизированы по времени. Какой джиттер? UART от 1-2% RC-генератора работает без проблем. От чего у вас кстати МК тактируется? Цитата(Dmitry Dubrovenko @ Jun 14 2013, 19:20)  в порт регистр DDRx можно записать "1" и он не переключится на выход? Если альтернативная функция порта задействована, то может и не переключится. Цитата(Dmitry Dubrovenko @ Jun 14 2013, 19:20)  А по-моему, логичнее называть "портом" то, для чего используются команды работы с портом (см., например, даташит на ATtiny 25/45/85, стр.206). По такой логике, к примеру, PORTG и PORTF mega128 портами не являются.
|
|
|
|
|
Jun 14 2013, 17:00
|

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

|
Цитата(_Артём_ @ Jun 14 2013, 20:44)  И какую точность удалось получить с помощью "выравнивания" программы? Абсолютную. Цитата(_Артём_ @ Jun 14 2013, 20:44)  Какой джиттер? В каком смысле "какой"? Они что, разные бывают? Цитата(_Артём_ @ Jun 14 2013, 20:44)  UART от 1-2% RC-генератора работает без проблем. Вы вообще о чём? При чём тут какой-то UART, который где-то работает? Цитата(_Артём_ @ Jun 14 2013, 20:44)  От чего у вас кстати МК тактируется? А прочесть пару первых постов? Цитата(_Артём_ @ Jun 14 2013, 20:44)  Если альтернативная функция порта задействована, то может и не переключится. А и надо, что б он не переключался, а он как-раз переключается. Впрочем влияние альтернативных функций - одна из версий (о чём писАл не далее, как в предыдущем посте). Если знаете какие-то тонкости настройки, вэлком!
--------------------
Obligatus servus.
|
|
|
|
Сообщений в этой теме
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, 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|