Jump to content

    

xemul

Свой
  • Content Count

    1907
  • Joined

Everything posted by xemul


  1. Призыв заняться математикой. Сможете не гадать, почему 6,02059991328 дБ на октаву, или сколько вешать в гра порядков должно быть в знаменателе, чтобы производная могла измениться на 12,04119982656 дБ. Поразглядывал ещё раз, опять откровения не случилось. Процитируйте, плз, на что нужно обратить внимание.
  2. Энгельса или Каутского? И? ФНЧ 1-го порядка с τ1 соединили последовательно с ФВЧ 1-го же порядка с τ2. Пусть для облегчения восприятия фильтры в полосе пропускания пропускают всё на 1. Общая передаточная функция будет [1/(1+p*τ1)]*[p*τ2)/(1+p*τ2)]. Осталось привести выражение к общему знаменателю. (хотя можно попробовать угадать порядок знаменателя с 3 (трёх) раз) Флаг в руки. Но таки _почитайте_ Фолкенберри. Полагаю, у него не только картинки, но и слова умные есть. Типа как с "Капиталом" - "Картинки пропускаю, а в пролетарскую суть вникаю".
  3. Реле нужен только ток. И в ДШ на реле кроме номинального напряжения обмотки (для упрощения выбора) обычно указывают гарантированные токи срабатывания и удержания.
  4. "Хорошо, папочка." Если Вы не догадались, я предложил Вам при написании странных постов заглядывать в зеркало.
  5. "Хорошо, папочка." Только не знаю, что пообещать: что не буду больше надеяться, что sapienti sat, что буду предельно точно облекать мысль в вербальную форму, или что при недостаточно-предельно-точном облечении буду делать пометки типа 18+. Можно ещё прикопаться к фразе "Порядок фильтра определяется порядком знаменателя в передаточной характеристике фильтра" и поразмышлять на тему гипотетической реализуемости фильтров, порядок которых определяется порядком числителя, но в более другой Вселенной с более другой математикой. А если (вдруг) ( R ) определяет порядок фильтра, у ТС фильтр не ниже 5-го порядка.
  6. Порядок фильтра определяется порядком знаменателя в передаточной характеристике фильтра. Фильтр на правильной картинке ТС - вариант фильтра Рауха, у которого в знаменателе присутствует p^2. В числителе живёт ещё одна p, и в целом они (эти p) обеспечивают спады 6 дБ/окт и по НЧ (p/p^2, p -> 8 на боку), и по ВЧ (p/1, p -> 0).
  7. Адекватная, и в полном соответствии с ДШ. Вам уже сказали, куда там смотреть. При питании +-15 В типовой диапазон по входу составляет +-14 В, худший случай - +-12 В. Это означает, что при однополярном питании 5 В в большинстве случаев на входе будет допустим (в смысле предсказуемого результата на выходе), н-р, сигнал амплитудой 1.5 В с постоянной подпоркой 2.5 В, а в худшем случае - никакой. Лучше скажите, какие ещё буквы в ДШ Вам непонятны.
  8. PIC16

    В lite "compiler-generated duplicate" не работает. За MPLabX не скажу (неповоротливый монстр, имхо; попробовал - не понравилось). В обычном МПЛаб'е: Project -> Build options -> Project (или для файлов по отдельности) -> Compiler : Operation mode. В комплекте с MPLabX идут все XC (-8, -16, -32). Развиваться будут только они. Вероятно, имеет смысл переключиться на них. (чтение на предмет совместимости приветствуется) picc при компиляции генерит startup.as. Т.к. в lite оптимизация почти отсутствует, то излишества от "int main(int argc, char** argv)" скорее всего останутся as is. Не проверял. Да и какой смысл лишний раз грузить компилятор ненужной работой и надеяться на разумность оптимизации? UPD: Проверил. В startup.as argc и argv не попадают (что логично). В любом режиме компилятор резервирует по 2 байта под argc и argv (в сегменте COMMON), что опять же логично - как сказали, так и сделал. Мог бы ругнуться на отсутствие возвращаемого значения в функции, объявленной "int ()", но похоже, это он таки соптимизировал.
  9. PIC16

    Не совсем понял, почему, пользуясь HI-TECH PICC (v9.81), Вы цитируете ман HI-TECH C PRO for the PIC18. Согласно мана, именно так для "compiler-generated duplicate". Компилятор в ПРО режиме? Угу, естественный путь рукопашной дупликации. Чесслово, ни разу не пользовался ни тем, ни другим. Для отладки и диагностики из прерываний можно придумать менее горбатые способы. А зачем ещё пихать в прерывания мелких пиков что-то printf- или xxxtoa-образное, мне не придумывается. ЗЫЖ чем "int main(int argc, char** argv)" лучше "void main(void)"?
  10. PIC16

    <ht_picc_install_path>/docs/manual.pdf, раздел 3.9.5 Function Duplication. Завешивать прерывание на время xxxtoa и uartSendString() ... ССЗБ.
  11. Как нибудь вроде "Vt, On-state Voltage". Обычно в ДШ ещё и картинки зависимости Vt(It) приводят. Для BTA24 Vt ~= 1.5 V @ It = 20 A. BTA24 скорее всего смогут и без снаббера обойтись, но MOC3061/2/3 - вряд ли. Приключится с ними неприличный dU/dt, и они забудут, что должны быть закрыты. А при работе на индуктивную нагрузку - не на пару периодов, а на пока электричество не кончится.
  12. Осталось угадать, какой из симисторов открывался. Схема ZC разрешает симистору открыться при напряжении между анодами меньше 12..15 В. Если нагрузки нет (или её роль выполняет входное сопротивление осциллографа), то это условие выполняется при любом мгновенном значении напряжения в сети.
  13. Может таки в .map заглянете? Там чёрным по-английски резервируется место под int, возвращаемый main(), и подтягивается функция, его возвращающая. Угадаете с трёх раз её имя?
  14. Тема стоит, имхо, из-за отсутствия объяснений с Вашей стороны, почему выбрана квазидифференциальная схема (повторю за Татьяной, сам бы не догадался), и, соответственно, что мешает связать общий провод измерёметра с источником сигнала непосредственно. Вас об этом в разной форме уже спрашивали раз несколько.
  15. 4-ая вариация. На последнем фото в термоусадке над переменным резистором живёт предохранитель, который, вероятно уже отпредохранял своё. Проверьте его омметром. На первом фото видны три ноги в ряд - это выводы симистора. Проверьте омметром их друг с другом. У целого симистора между двумя выводами будет 50..200 Ом, между третьим и этими двумя должно быть не меньше сотен кОм. ЗЫЖ радует, что у Вас не 18-тимегапиксельный фотик. Ужмите, плз, картинки до вменяемого размера. (1024х768 или 800х600 более чем достаточно)
  16. Для начала - извлечь плату из корпуса. Справитесь? На плате совсем немного элементов, из которых 2-3 (видел три вариации схемы диммеров в подобных корпусах) будут явно убитыми - собственно симистор и один-два резистора в его обвязке. Чистите подгоревшие участки платы, меняете элементы, добавляете RC-снаббер (отсутствует во всех вариациях) - ву а ля. В одной вариации стОит удалить заведомо бессмысленные два диода и резистор, ЕМНИП.
  17. Если все нагрузки в доме линейные или снабжены приличными ККМ (корректорами коэффициента мощности), то Вы вправе ожидать бо-ме приличного синуса и по току. Ванварное решение с разнесённым питанием устройств (если я правильно понял Вашу идею) - тема на подумать. При отказе источника питания одного устройства скорее всего будет блокирован по DQ весь сегмент этого устройства. Для решения задачи, которой посвящён топик (не пиковый детектор, - согласен с Plain'ом на предмет бредовости затеи, - а измерение тока), я бы придумал локальный измерёметр тока с удобным интерфейсом наружу, который отдавал бы текущее значение (или значения с момента последнего опроса) по запросу мастера. Т.к. Вас, вероятно, будет интересовать таки RMS тока, а не пиковое значение, возможно, имеет смысл сделать измерёметр на контроллере хотя бы с аппаратным умножением - их есть, и изрядно дешевле AD736. Вариант с DS2450 и пиковым детектором - просто не вариант, имхо.
  18. Are you sure 3 digits after comma has any meaning? Did you use a 0.05% or better precision elements in measurement circuits? Did you make any adjustments with approved for this precision devices? No? So you see just a digits, but not a real voltage and current values. Totally wrong? Coool... As I say early, calculations in post №4 are correct in common case, but may require some adjustments in circuit or program. "volt_lue=volt_lue+2;" and "amp_lue=amp_lue+1;" in original program are author's adjustments for _his_ device, but not commonly suited and seems not suited for your ones. You would play with "amp_lue = (amp_lue + amp_lue/32) / 16 +- something;" and "volt_lue = (volt_lue + volt_lue/32) / 16 +- another_something;". It may be a current leakage of power transistors. Try short B and E pins Q1, if current measuring with shorten load leaves not zero, that is. You can also use an ordinal amperemeter to check this. Correct formats for settings and measurings outputs are 80.5: signed int16 tmp = 2*volt_set + volt_set/2; // add this before line 81 81: printf(write_car_lcd,"%01d,%03dA SET %02d,%01dV", amp_set/disp_a, (amp_set%disp_a)*disp_ma, tmp/1000, tmp%1000); 212.5: signed int16 tmp = 2*volt_lue + volt_lue/2; // add this before line 213 213: printf(write_car_lcd, "%02d,%01dV", tmp/1000, tmp%1000); 229: printf(write_car_lcd,"%01d,%03dA ", amp_lue/disp_a, (amp_lue%disp_a)*disp_ma); No needs in "ld" (long decimal) formats, "d" is enough. "signed" not needed too, but I write it by author's way. All lines numbered as in original program. May be you'll start study C and will rewrite this program at all?
  19. Calculations are right, measurements - may be. You see output exactly with format in line 229: printf(write_car_lcd,"%01ldA ",amp_lue*disp_ma); I don't know why author put an incorrect source in distributed archive. Edit line 229: printf(write_car_lcd,"%01ld,%03ldA ", amp_lue/disp_a, amp_lue*disp_ma);
  20. АЦП 16-битный с внутренней опорой 2.56 В. IR=1, по-видимому, включает на входе канала делитель 1:2, при этом вес каждого разряда, естественно, будет в 2 раза больше веса при IR=0. Разрядность преобразования задаётся от 2 до 16. При изобретении измерёметра на этом АЦП меня бы смутило "обилие" метрологических подробностей в ДШ. Всё, что гарантирует производитель - 1/2 LSB при 8-битном преобразовании, и то с оговорками. (разрешение или дискретность != точность) Вальс с граблями на минном поле.
  21. По-видимому, речь о ACS756. Зачем ТС лишние сущности (в виде пикового детектора) при наличии АЦП и контроллера, не знаю. имхо, достаточно пары резисторов для согласования диапазонов датчика и АЦП. Или взять другой АЦП с нужным диапазоном по входу.
  22. Угу - включив непрерывное преобразование, пытаетесь работать по прерываниям АЦП. Если Ваша программа в обработчике прерывания проводит время, соизмеримое или большее времени преобразования (программисты иногда вставляют в ISR что-нить вроде delay_ms() или printf()), то ... Такая комбинация может иметь смысл, н-р, при низкой скорости тактирования АЦП и считывании результата преобразования по ещё более редкому прерыванию таймера, если время запуска преобразования не важно. А где написано, что ADIF не может быть установлен, пока программа ковыряется внутри ISR(ADC_vect)? Вот и получается песня про Сусанина "он из лесу вышел, и снова вошёл". Ещё вариант - разрешено более другое прерывание.
  23. int main() { char s[]= "http://www.youtube.com/watch?v=cZjx6ItATW4"; char s1[]= "Пачиму-то не работает 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890"; printf("%s\n", reverse (s) ); printf("%s\n", reverse (s1) ); } D:\Work\Soft\Test>a 4WTAtI6xjZc=v?hctaw/moc.ebutuoy.www//:ptth ,=
  24. K&R всплакнули бы от умиления... Есть такая прилада профайлер, которая позволяет оценить время выполнения кода. Сравните результаты Вашей программы и поминавшихся выше вариантов со strlen(). Про наглядность кода и разбазаривание памяти ... пусть будет Задачей №3. И попробуйте int main() { char s[]= "http://www.youtube.com/watch?v=cZjx6ItATW4"; char s1[]= "Пачиму-то не работает"; printf("%s\n", reverse (s) ); printf("%s\n", reverse (s1) ); } UPD: сделайте s1 > LEN_BUF