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

 
 
> 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
3 страниц V  < 1 2 3  
Start new topic
Ответов (30 - 35)
Dmitry Dubrovenk...
сообщение Jun 14 2013, 17:00
Сообщение #31


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

Группа: Участник
Сообщений: 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.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jun 14 2013, 20:11
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Dmitry Dubrovenko @ Jun 14 2013, 20:00) *
Абсолютную.

А смысл в этой точности?

Цитата(Dmitry Dubrovenko @ Jun 14 2013, 20:00) *
Вы вообще о чём? При чём тут какой-то UART, который где-то работает?

Я к тому что UART не требует абсолютной точности, тем более при работе от RC-генератора.
Но к вашей проблеме это мало относится...

Цитата(Dmitry Dubrovenko @ Jun 14 2013, 20:00) *
А и надо, что б он не переключался, а он как-раз переключается.

Как вы это определяете? Осциллографом? Отладчиком?

Цитата(Dmitry Dubrovenko @ Jun 14 2013, 20:00) *
Впрочем влияние альтернативных функций - одна из версий

Имхо, маловероятно - я не нашёл альтернативных функций которые могут установить DDB3. Есть функции, которые требуют установки DDB3, но тех что сами ставят нет. Фузы могут отключать этот пин, но на вход.

Остаётся ошибка в программе: одновременная запись в разных местах программы или запись в DDRB по неправильному указателю или может ещё что...
Думать что
Код
DDRD = DDRD xor 0x10

установит DDB3 в "1" как-то бессмысленно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 14 2013, 21:38
Сообщение #33


Гуру
******

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



QUOTE (Dmitry Dubrovenko @ Jun 14 2013, 19:20) *
Ссылочку на источник, плиз.

Даташит на вашу ATtiny45, стр. 55:
QUOTE
Three I/O memory address locations are allocated for each port, one each for the Data Register
– PORTx, Data Direction Register – DDRx, and the Port Input Pins – PINx. The Port Input Pins
I/O location is read only, while the Data Register and the Data Direction Register are read/write.
Тут же, кстати, фигурирует и расшифровка аббревиатуры DDR (выделил специально для вас).
QUOTE (Dmitry Dubrovenko @ Jun 14 2013, 19:20) *
А по-моему, логичнее называть "портом" то, для чего используются команды работы с портом (см., например, даташит на ATtiny 25/45/85, стр.206).

Даташит ревизии N от 04.11, стр 205-206:
QUOTE
23. Register Summary
........
Note: 1. For compatibility with future devices, reserved bits should be written to zero if accessed. Reserved I/O memory addresses
should never be written.
2. I/O Registers within the address range 0x00 - 0x1F are directly bit-accessible using the SBI and CBI instructions. In these
registers, the value of single bits can be checked by using the SBIS and SBIC instructions.
3. Some of the Status Flags are cleared by writing a logical one to them. Note that, unlike most other AVRs, the CBI and SBI
instructions will only operation the specified bit, and can therefore be used on registers containing such Status Flags. The
CBI and SBI instructions work with registers 0x00 to 0x1F only.
Ни слова про порт. А вот слово Register вынесено в заголовок раздела.

QUOTE (Dmitry Dubrovenko @ Jun 14 2013, 19:20) *
Я Вас умоляю!
Если Вы не сталкивались, не надо за всех говорить.
Одних ерратов сколько вышло.
Во- первых в эррате нет ни слова про то, что "регистр DDR может иногда читаться неправильно" или "команда EOR иногда может работать неправильно".
Во-вторых, "миллионы леммингов не могут ошибаться" и если бы описанные вами ошибки в кристалле имели место - они бы уже были много раз найдены, описаны в эррате, а кристаллы пошли бы в мусорку, ибо с такими дефектами ни одна программа сложнее "мигания одним светодиодом" не могла бы работать.
QUOTE (Dmitry Dubrovenko @ Jun 14 2013, 19:20) *
Посмотрите Гугль по теме, типа: "не программируется 2313a по HVPP", или ещё чего-нибудь, узнаете много интересного.
Вы можете посмотреть хоть Гуглю хоть этот форум на предмет "ошибка компилятора". В 99.9% случаев оказывается, что виноват горе-программист.
QUOTE (Dmitry Dubrovenko @ Jun 14 2013, 19:20) *
По-моему, уже самому начинающему должно уже быть понятно, что, если это не глюк/особенность чипа, то - ошибка конфигурации. Или Вы хотите сказать, что одной строчкой в программе можно убрать помехи по питанию?
Начинающему может быть и понятно, а специалисту хотя бы с небольшим опытом очевидно, что ошибка где-то в вашей программе. Вот уже и конфигурация всплыла... О конфигурации чего вы теперь ведете речь?
QUOTE (Dmitry Dubrovenko @ Jun 14 2013, 19:20) *
Вы хотите сказать, что в порт регистр DDRx можно записать "1" и он не переключится на выход?
Откуда вы такое взяли? Я утверждаю, что если порт переключился на выход, значит кто-то где-то записал единицу в соответствующий разряд DDR. И надо искать кто и где это делает, а не валить все на некорректную работу элементарных команд или узлов кристалла.
QUOTE (Dmitry Dubrovenko @ Jun 14 2013, 19:20) *
И вообще, найдите хотя бы пяток человек, которые Ресет отключают. А некоторые об этом и не знают.
При чем здесь вывод RESET? Он у вашей тиньки совмещен с пятым, а не третьим битом порта C. Или вам не нужно найти причину неправильного поведения вашей программы, а важно лишь поспорить, причем совершенно все равно - о чем?
QUOTE (Dmitry Dubrovenko @ Jun 14 2013, 19:20) *
Некоторые также не понимают, зачем выводить информацию в DDRx, а не в PORTx.
Некоторые могут и не понимать. Хотели открыть нам Истину - не вышло. Для организации выхода типа "открытый коллектор". Весь грамотно написанный программный I2C строится именно так. Неграмотных реализаций полно и в интернете и на этом форуме они всплывали тоже.
QUOTE (Dmitry Dubrovenko @ Jun 14 2013, 19:20) *
Поскольку это - софтовый UART, необходимо, что б все смены уровней происходили через одинаковые интервалы,
Нет, не необходимо. Если это софтовый UART. Достаточно, чтобы длительность каждого битового интервала укладывалась в допуски, т.е. чтобы в конце десятого бита "разбег" между приемником и передатчиком был не более половины бита. Это дает +-2.5% на длительность каждого бита для каждой стороны (+-2.5% для приемника и +-2.5% для передатчика).


--------------------
На любой вопрос даю любой ответ
"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 15 2013, 10:59
Сообщение #34


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

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



Цитата(_Артём_ @ Jun 15 2013, 00:11) *
А смысл в этой точности?
Неужели надо объяснять, что погрешности перемножаются?
Зачем, имея погрешность генераторов и линий, накладывать ещё погрешность программы?
Я поставил задачу её исключить.
Разумеется, если кто-то считает, что это - лишнее, может этого не делать.
Но, это - действительно оффтоп.

Цитата(_Артём_ @ Jun 15 2013, 00:11) *
Остаётся ошибка в программе
Давайте рассуждать.
Установлено, что ошибка происходит при считывании данных из регистра DDRB (вместо "0" считывается "1")
Как Вы (и многие другие) утверждаете, где-то в другом месте программы, происходит запись в этот регистр "1".
При этом порт продолжает работать на вход.
Такое может быть?
Впрочем, стопроцентную гарантию обеспечивает только страховой полис, и раз уж Вы (и остальные) так на этом настаиваете, давайте возмём под сомнение в/у утверждение, и подумаем, каким образом данные могут записаться не в тот регистр, в который предназначались?




Цитата(Сергей Борщ @ Jun 15 2013, 01:38) *
Даташит на вашу ATtiny45, стр. 55
Three I/O memory address locations are allocated for each port, one each for the Data Register – PORTx, Data Direction Register – DDRx, and the Port Input Pins – PINx. The Port Input Pins I/O location is read only, while the Data Register and the Data Direction Register are read/write.
Это переводится, как: "Портом называется совокупность ног ввода-вывода и связанных с ними регистров PORTx, PINx, DDRx"?

Цитата(Сергей Борщ @ Jun 15 2013, 01:38) *
Ни слова про порт.
Невнимательно смотрите.
Стр.206: "In Port", "Out Port".
Но, если Вам так принципиально, будем считать, что Вы - правы, и давайте больше к этому вопросу не возвращаться (и так половина оффтопа в теме).

Цитата(Сергей Борщ @ Jun 15 2013, 01:38) *
Во- первых в эррате нет ни слова про то, что "регистр DDR может иногда читаться неправильно" или "команда EOR иногда может работать неправильно".
Это Вы к чему?
Если б они там были, этой бы темы и не существовало.

Цитата(Сергей Борщ @ Jun 15 2013, 01:38) *
если бы описанные вами ошибки в кристалле имели место - они бы уже были много раз найдены, описаны в эррате
Ну, покажите, где в еррате написанно, что вместе с ресетом надо отключать SPI?
Или где написанно, что для некоторых кристаллов STK-500 меняет функционал выводов?

Цитата(Сергей Борщ @ Jun 15 2013, 01:38) *
кристаллы пошли бы в мусорку, ибо с такими дефектами ни одна программа сложнее "мигания одним светодиодом" не могла бы работать.
Вот те раз!
Даже моя программа и то работает, не говоря уже о "миллионах" которые не лезут в такие "дебри".

Цитата(Сергей Борщ @ Jun 15 2013, 01:38) *
При чем здесь вывод RESET?
См. выше.

И вот, что я Вам хочу сказать.
Если Вами движет желание действительно помочь, Вам действительно интересна данная тема, и Вы хотите, что б был диалог, то:
1. Прочтите тему с начала (что б не спрашивать то, о чём сказано в начале)
2. Говорите от себя, а не за "миллионы" (по-моему, так должен поступать любой хомо-сапиенс)
Ваша основная мысль - "ошибка в программе" вполне ясна. Безусловно, я её ещё раз тщательно проверю.
И, если у Вас не возникнет других мыслей, не надо устраивать оффтоп, который, уж извините, я буду просто игнорировать.




--------------------
Obligatus servus.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 15 2013, 22:47
Сообщение #35


Гуру
******

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



QUOTE (Dmitry Dubrovenko @ Jun 15 2013, 13:59) *
Давайте рассуждать.
Установлено, что ошибка происходит при считывании данных из регистра DDRB (вместо "0" считывается "1")
Как Вы (и многие другие) утверждаете, где-то в другом месте программы, происходит запись в этот регистр "1".

Нет. Это вам кажется, что вместо 0 считывается 1. Остальные участники дискусии пытаются вас убедить в том, что 1 считывается именно потому, что он был туда (случайно) записан вашей программой.
QUOTE (Dmitry Dubrovenko @ Jun 15 2013, 13:59) *
Впрочем, стопроцентную гарантию обеспечивает только страховой полис, и раз уж Вы (и остальные) так на этом настаиваете, давайте возмём под сомнение в/у утверждение, и подумаем, каким образом данные могут записаться не в тот регистр, в который предназначались?
Ваше знание классиков делает вам честь. Причин же может быть великое множество. Некоторые из них, связанные с прерываниями, я пытался вам изложить. Не видя исходника гадать можно до потери сознания (однако, боюсь, найдется совсем немного желающих ковыряться в ассемблерном исходнике даже если вы его покажете).
QUOTE (Dmitry Dubrovenko @ Jun 15 2013, 13:59) *
Это переводится, как: "Портом называется совокупность ног ввода-вывода и связанных с ними регистров PORTx, PINx, DDRx"?
Вы не поверите...

QUOTE (Dmitry Dubrovenko @ Jun 15 2013, 13:59) *
Стр.206: "In Port", "Out Port".
Я понял. Это рудимент с времен i8080, когда адресные пространства делились на "память" и "порты ввода-вывода". И тогда действительно периферийные устройства подключались к процессору как устройства ввода-вывода и адресовались только командами IN и OUT. Сейчас же "смешались в кучу кони, люди" и используется более общее название "регистры специального назначения". Портами же принято называть нечто, "торчащее ногами наружу". И именно в таком ключе написана вся остальная документация на контроллер.
QUOTE (Dmitry Dubrovenko @ Jun 15 2013, 13:59) *
Это Вы к чему?
Если б они там были, этой бы темы и не существовало.
Это я к тому, что если бы был повод, то они бы там были. Просто по теории вероятностей если бы такая ошибка существовала, ее уже давно нашли бы. Если бы вы работали с инженерными образцами кристаллов - такую возможность можно было бы допустить, но в этом случае вы бы писали не сюда, а непосредственно в Атмел по прямому каналу в отдел разработок или как он там называется (в свое время я писал подобные письма в Texas Instruments по поводу первых образцов флешовых MSP430).
QUOTE (Dmitry Dubrovenko @ Jun 15 2013, 13:59) *
Ну, покажите, где в еррате написанно, что вместе с ресетом надо отключать SPI?
Или где написанно, что для некоторых кристаллов STK-500 меняет функционал выводов?
Оппа... Давайте вы изложите проблему более подробно, я распаяю в макетку имеющийся у меня ATtiny85 и мы попробуем разобраться с этим вопросом отдельно. У меня есть некоторая уверенность, что все не так страшно, как вам кажется.
QUOTE (Dmitry Dubrovenko @ Jun 15 2013, 13:59) *
Даже моя программа и то работает, не говоря уже о "миллионах" которые не лезут в такие "дебри".
Простите, а что здесь дебри - команда "Исключающее ИЛИ" или чтение регистра DDRx?

QUOTE (Dmitry Dubrovenko @ Jun 15 2013, 13:59) *
Ваша основная мысль - "ошибка в программе" вполне ясна. Безусловно, я её ещё раз тщательно проверю.
Спорю на пиво. Перешлю вам 1.5л красного имбиного Ingver Alus, если виноватым окажется не ваша программа. Если же ошибка в программе - вы мне пересылаете 1.5л вашего хорошего нефильтрованного. Принимаете?


--------------------
На любой вопрос даю любой ответ
"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 16 2013, 20:12
Сообщение #36


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

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



Цитата(Сергей Борщ @ Jun 16 2013, 02:47) *
1 считывается именно потому, что он был туда (случайно) записан вашей программой.
Почти Ваша правда. "1" не считывается, но дело действительно было в программе.

Цитата(Сергей Борщ @ Jun 16 2013, 02:47) *
Вы не поверите...
Не поверю.

Цитата(Сергей Борщ @ Jun 16 2013, 02:47) *
Это рудимент с времен i8080
Это "рудимент" терминалогии Атмела, которые выделили их в отдельную область и назвали "I/O Register"

Цитата(Сергей Борщ @ Jun 16 2013, 02:47) *
ее уже давно нашли бы
Так может и нашли, но я не читал.

Цитата(Сергей Борщ @ Jun 16 2013, 02:47) *
Давайте вы изложите проблему более подробно
Проблема 1: При отключённом Ресете, но включённом последовательном программировании, на в/у PB3, если он настраивался на вход, висело 1,75V. Сегодня опять попробовал, но всё заработало нормально (экспериментировал со старой программой, ещё до того, как исправил). Поэтому остаётся записать в "загадки".
Проблема 2: STK-500 не хочет программировать ATtiny 2313a по HVPP
Проблема 3: Для некоторых кристаллов, в STK-500 меняется функционал выходных портов. Проблема решена переделкой адаптера.
Проблема 4: При использовании конвертера USB-COM, необходимо устанавливать Jungo, иначе Студия не видит STK-500 (как программатор), хотя может заливать прошивку в сам программатор.

Цитата(Сергей Борщ @ Jun 16 2013, 02:47) *
а что здесь дебри
Отключение Ресета, да и вообще высоковольтное программирование. Правда "дебри", наверное, не совсем правильное выражение.

Цитата(Сергей Борщ @ Jun 16 2013, 02:47) *
Принимаете?
Поздняк метаться. cheers.gif
P.S.: Кстати, пива не жалко и так, но вот с пересылкой, это - такой гемор.


--------------------
Obligatus servus.
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 Текстовая версия Сейчас: 18th July 2025 - 00:27
Рейтинг@Mail.ru


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