March 29th, 2015

worklog: заработал I2C

Довольно долго ковырялся в коде и не мог понять, почему не удаётся достучаться до DS1337. Оказалось - вместо адреса 0x68 вписал 0xC8. Кроме того, контролировать работу чипа пытался по активности пина SQW - на нём, по умолчанию, должен быть меандр с частотой 1 Гц. Но там тишина... потом дошло - это ж open drain выход, а я его никуда не подключал, вот и нету ничего.

заодно обнаружил, что чип может "заклинить" в некоем полуподвисшем состоянии, если простым поллингом опрашивать флаг, который никаким процессом не может быть взведён (как раз когда контроллер пытается опросить не отвечающее I2C-устройство) - причём даже JTAG-отладчик оказывается не в состоянии сбросить. Пробовал разные методы - хардварный сброс тоже почему-то не помогает (нонсенс!). Сработало только после переброса пинов BOOT0/BOOT1 (т.е. загрузка системного бутлоадера) и переподключения питания. Загадочно.

worklog: Дисплей (пока только подсветка)

Кто бы мог подумать, что едва заметный глитч в линии питания (всего-то 0.35В), возникающий при включении питания дисплея (даже не подсветки) из-за того, что внутри LCD-панели тоже есть заряжающиеся конденсаторы... вызовет сброс супервайзера? Но это логично, у него порог 2.93В, а напряжение питания 3.3В. Как раз хватает одной маленькой просадки. Выкинул супервайзер (надо другой поставить, с более низким порогом), теперь могу включать-выключать дисплей. Ток подсветки при 100% ШИМ около 400мА от 3.3В (соответственно, около 200мА от 6.5В -- скорее всего, таким будет напряжение "цифрового" питания в системе) - нефигово так, но терпимо. Преобразователь отрабатывает.

Любопытно, при включении собственно подсветки (она заводится отдельным сигналом) просадка напряжения гораздо меньше -- всего около 50мВ! -- чем при собственно включении питания дисплея (завёл туда системное через p-канальный мосфетик).