Jun. 9th, 2018

eddy_em: (Default)
Чтобы не вышло как у меня! Долго вчера думал, почему в плате контроллера термодатчиков при включении мультиплексора подтяжка I2C с 3.3В падает до ~2.4В. Подозрение пало на стабилитрон MM3Z3V6, который я использовал в качестве супрессора. Выпаял стабилитроны — все ОК. Посмотрел на график из даташита:

и действительно, ток через стабилитрон почти не течет — что там до него дойдет через подтяжку в 4.7кОм? Намного меньше миллиампера! А ток стабилизации равен 5мА!!! Вот такие пироги…
В общем, либо стабилитроны на 5В надо ставить, либо специально рассчитанные на 3.3В супрессоры (в народе — TVS диоды).
Т.к. "голой жопой" наружу торчать нехорошо, заказал 20 супрессоров SMBJ5.0A на алиэкспрессе. Ну, а под конец года, если вдруг у обсерватории появятся деньги, надо не забыть включить в перечень необходимого ESD5Z3.3T5G, да и, возможно, тех же SMBJ5.0A (или SMAJ5.0A — так и не понял, чем B и A отличаются).
eddy_em: (Default)
Итак, еще сутки назад я обнаружил, что как-то странно себя ведет контроллер термодатчиков: в режиме конечного автомата, когда идет автоматическое измерение температуры, он постоянно считывает 0 с одного датчика (что интересно, если на шине 2 датчика, то с первого считывалось все нормально). Пришлось даже натыкать уйму диагностических сообщений, но на бешеной скорости автомата непонятно было, где же проблема. Вставил команду принудительного вызова процедуры sensors_process() и увидел на осциллограмме, что при отправлении команды "scan" сразу после ACK сигнал обрывается. Виной этому то, что я не дожидался окончания передачи, а сразу отключал мультиплексор. Поэтому добавил (все равно вызовы блокирующие) ожидание окончания и все стало хорошо.

Что интересно, обнаружил вообще необъяснимую лажу: как только я комментирую вызов sensors_process() здесь, то происходит полный бред! В main() проверка if(usartrx()) всегда возвращает 0, несмотря на то, что данные пришли и переменная была выставлена в 1! Такое впечатление, что глобальная переменная linerdy (которую, собственно, макрос usartrx() и возвращает) становится локальной для main()!!! Повозившись с этим с полчаса я плюнул, и решил лучше заняться более актуальными проблемами. А это списать на волю злых демонов ☺

May 2025

S M T W T F S
    123
45678910
11121314151617
1819202122 2324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 23rd, 2025 11:44 am
Powered by Dreamwidth Studios