Jump to content

    

slavka012

Свой
  • Content Count

    876
  • Joined

  • Last visited

Community Reputation

0 Обычный

About slavka012

  • Rank
    self made
  • Birthday 01/01/1973

Контакты

  • Сайт
    http://home-electro.com
  • ICQ
    0

Информация

  • Город
    Toronto, Canada

Recent Profile Visitors

3446 profile views
  1. В этом коде ужасно все :) И форматирование, и алгоритм, и названия переменных. Быстрее одного деления он будет работать недолго, только если у вас итераций мало. Если в таблице будет хотя бы сотня значений. А главное, кусочно линейная интерполяция и не требует целочисленного деления, если у вас грамотно выбрано кол-во элементов. Всегда можно обойтись делением на степень двойки.
  2. Резистор последовательно с конденсатором достаточно для большинства применений. Ставить TVS для защиты от статики это деньги на ветер. Едиственный смысл всех этих защит на внешних разъемах устройств это защита от криуворукого техника, который будет лапать схему за разъемы во время установки. После установки и подключения эта схема никогда уже не увидит ESD на этих цепях. TVS может быть оправдан на скоростных цепях коммуникации, где резисторы и конденсаторы будут существенно ухудшать фронты, и там где могут быть многократные соединения-разъединения пользователями.
  3. Нормально работает. Да, установка бита в коде делается фунцией, что, возможно кто-то сочтет недостатком. Но по факту на большом арме с IO, который сидит на шине, точных времен ногодрыгом все равно не добиться. По мне так удобство и наглядность в моем случае компенсируют потерю производительности.
  4. // in the API .h #define M_PORT0 0x0000 #define M_PORT1 0x0100 #define M_PORT2 0x0200 #define M_PORT3 0x0300 #define M_PORT4 0x0400 void ConfigPin2(unsigned int PortPin, unsigned int Mode, unsigned int PullUp); static inline unsigned int ReadPin(unsigned int PortPin) {..}; static inline void SetPin(unsigned int PortPin) {...}; static inline void ClrPin(unsigned int PortPin) {...}; static inline void SetPinOut(unsigned int PortPin) {...}; static inline void SetPinIn(unsigned int PortPin) {...}; /////////////////////////////////////////////////////////////////////////////// // in the code .c #define BUTTON1_PIN (M_PORT0 | 13) #define BUTTON2_PIN (M_PORT1 | 30) #define BUTTON3_PIN (M_PORT0 | 12) #define BUTTON4_PIN (M_PORT1 | 31) int main() { unsigned int PinState = ReadPin(BUTTON1_PIN); };
  5. Включение IRLML6401

    В общем да, но и без него работает... Когда ошибок в схеме нет ;)
  6. Включение IRLML6401

    Да, но только для 5VT пинов. У обычных пинов стоит защитный диод с пина на питание, и притянуть пин выше чем напряжение питания (ок, + 0.6В если сильно постараться) не получится. Я имел ввиду на вход. На выход - только если пин сконфигурирован Open Drain.
  7. Включение IRLML6401

    Напряжение питания процессора 3.3В... Если пин не 5VT, делитель нужен чтобы хоть как-то закрыть транзистор. Ошибки распиновки были позднее исправлены, а делитель остался. ;)
  8. Развязка питания

    Если вы уже нашли конфигурацию устройства, в которой все хорошо работает, зачем опять что-то менять и начинать новый цикл экспериментов? И зачем питать аналог и мк от разных обмоток? Они что ли с друг другом не взаимодействуют? Если да, то это бессмыссленно, т.к. все равно вы их должны гальванически соеденить.
  9. Включение IRLML6401

    Bingo. Некоторые управляющие сигналы не были назначены на 5VT пины.
  10. Включение IRLML6401

    Да, соеденил. Заменил резистор на 20К, и стал повышать напряжение пока не получил 5В на резисторе. Это достигается при 6.45В. Vgs при этом 1.45В.
  11. Включение IRLML6401

    Спасибо! Когда запостил я сам задумался, а почему бы не померять при тех же условиях что и в datasheet? получается что ток 250мкА достигается при Vgs =-1.45V, что намного больше заявленного максимума в 0.95В. Отвечая на вопрос зачем так делать - конечно, так делать не стоит.
  12. В устройстве используется IRLML6401 P-FET, и отдельные экземпляры (примерно 3%) включаются не полностью в схеме. Я взял один из таких экземпляров и включил его в тестовую схему: choose files... Click to choose files При таком включении я получаю следующую картину на осциллоскопе: (Желтый - напряжение на R1, Голубой - напряжение на затворе относительно земли.) Т.е. видно, что при использовании делителя 470:1000 (что при питании от 5В дает напряжение GS в 1.6V) он полностью не включается, а начинает включаться гораздо позже. Симуляция в LTSPICE дает результаты получше (модель в приложении): Я понимаю, что мы имеем дело с экземплярами с особенно высоким Vgs(th). Как исправить тоже понятно (меняем делитель на 1К:1К). Непонятно только следующее: это поведение все еще подходит под спецификации производителя? Я долго долго смотрел на графы в мануале, и по моему так нет, не подходит. Но хотел бы услышать еще чье-то мнение прежде чем сообщать свои выводы клиенту. IRLML.zip irlml6401pbf-2.pdf
  13. Вопрос по C

    согласен копаться надо, но переносятся они отнюдь не автоматом, а вручную. Если вам когда-то понадобится перейти на другой чип, в пределах одной платформы и от одного производителя (и я удивлюсь, если вам это ни разу не надо было делать) то все исходники надо будет перепроверять на соответсвие адресов или менять их. Как бы зачем. Ну это дело хозяйское, конечно.
  14. Вопрос по C

    Ну вот а в эклипсе видно. Разумеется, если вы любите копаться в даташитах и переносить адреса оттуда в .с файлы с риском ошибок, то ваш подход для вас лучше работает, чем использование готовых заголовков от производителя. Переносимость кода вещь умозрительная? ЛОЛ
  15. Вопрос по C

    В своем проекте, разумеется, может быть написано много всего разного, особенно если его не планируется никуда переносить, у меня тоже есть. В этом смысле ваш ответ самоочевиден. Если же мы говорим про библиотеки от поставщиков чипов, то у большинства (т.е. у вменяемых :) ) сделано именно так. С этим в общем-то можно было бы теоретически согласится, но на практике отлаживая в эклипсе чип у которого регистры через дефайны определены (NXP) , не замечал никаких проблем и неудобств.