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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> ATtiny45 настройка PB3
zombi
сообщение Apr 26 2013, 20:11
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



1. Чем меряете 1.75V ?
2. Есть ли кроме PB3 еще входные пины? они работают?
3. Что Вы хотите что бы на этом пине было? (1.75V, как я понимаю, Вас не устраивает). а чего нужно то?
4. Может схемку приведёте для более конкретного разговора?
Go to the top of the page
 
+Quote Post
Dmitry Dubrovenk...
сообщение Apr 27 2013, 17:33
Сообщение #17


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

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



1. Тестером/осциллографом
2. Есть. Работают.
3. Нужно, что б он работал входным портом, и принимал сигнал с другого МК, а не коротил его выход.
4. Кроме чипа ещё последовательный резистор на выходном порту. Рисовать?


--------------------
Obligatus servus.
Go to the top of the page
 
+Quote Post
zombi
сообщение Apr 27 2013, 19:20
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(Dmitry Dubrovenko @ Apr 27 2013, 20:33) *
4. Кроме чипа ещё последовательный резистор на выходном порту. Рисовать?
Как хотите. А резистор зачем? и какой его номинал ?

Цитата(Dmitry Dubrovenko @ Apr 27 2013, 20:33) *
3. Нужно, что б он работал входным портом, и принимал сигнал с другого МК, а не коротил его выход.
Если после выполнения всех необходимых манипуляций (описанных в DS) с регистрами связанными с пином для перевода его в состояние входа этого не происходит.
Значит надо спрашивать у производителя.
Эх, был бы у меня такой мк я обязательно проверил бы.
Go to the top of the page
 
+Quote Post
Dmitry Dubrovenk...
сообщение Apr 28 2013, 11:23
Сообщение #19


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

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



Цитата(zombi @ Apr 27 2013, 23:20) *
А резистор зачем? и какой его номинал ?
В двух словах: так надо. rolleyes.gif
Потому что данный каскад управляет токовой петлёй. Номинал его 220Ом.
Только какое отношение это имеет к входному пину?

Цитата(zombi @ Apr 27 2013, 23:20) *
Если после выполнения всех необходимых манипуляций (описанных в DS)
Так в этом, собственно, и главный вопрос. cranky.gif


--------------------
Obligatus servus.
Go to the top of the page
 
+Quote Post
Dmitry Dubrovenk...
сообщение Jun 12 2013, 08:27
Сообщение #20


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

Группа: Участник
Сообщений: 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
Сообщение #21


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #22


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

Группа: Участник
Сообщений: 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
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #24


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

Группа: Участник
Сообщений: 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
Сообщение #25


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #26


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

Группа: Участник
Сообщений: 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
Maik-vs
сообщение Jun 14 2013, 10:57
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Как-то сложно всё у ваc в 20м сообщении.
Нельзя просто записать константу в DDR? По приведённому куску кода я вижу инверсию ЧЕТВЁРТОГО бита DDRB, если он был "1" в r16 до "andi r16". А третий (и все, кроме четвёртого) бит в DDRB не изменился.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 14 2013, 12:05
Сообщение #28


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #29


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

Группа: Участник
Сообщений: 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
_Артём_
сообщение Jun 14 2013, 16:54
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 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 портами не являются.
Go to the top of the page
 
+Quote Post

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

 


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


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