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% для передатчика).