Перейти к содержанию
    

iiv

Свой
  • Постов

    2 895
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Весь контент iiv


  1. Atmega328P и DS18B20 в фоновом режиме

    Всем привет, имеется атмега328п, хочется к ней прикрутить несколько, от одного до четырех, датчиков температуры DS18B20 по 1-wire. Незадачка в том, что эта атмега должна в реальном времени выполнять кучу другой работы, которую нельзя прерывать 100мкс-750мс ожиданиями протокола 1-wire. В то же время, как я понимаю из прочтения исходников протокола общения с этими датчиками, большую часть времени микроконтроллер должен ждать. Возникает идея, что этот протокол может быть реализован на прерываниях таймера и int0 (я могу повесить 1-wire на эту ножку) и практически не занимать время процессора, но программировать это может быть довольно не тривиально. Скажите, пожалуйста, может кто-то уже такое запрограммировал, и такие исходники существуют в сети? Если да, тыкните, пожалуйста, пальцем где скачать. Если нет, может я в чем-то ошибаюсь и это не так просто, как мне кажется? Знаю, что есть еще решение - поставить на плату тиньку или еще одну ардуину, которая будет 100% занята опросами этой температуры, но очень не хотелось бы это делать. Спасибо ИИВ
  2. напишите такое void delay(unsigned int a) { unsigned char u=a>>8; volatile unsigned char i; for(i=0; i<u; i++) { volatile unsigned char j=255; while(--j); } i=a&255; while(--i); return; } сами, измерьте время работы и откалибруйте, как надо, быстрее будет, чем на форуме вопрошать.
  3. полностью с Вами согласен, именно так и планирую делать защиту. ну я думаю, что у нас-то и не стырят, а если и стырят, то максимум, на полку положат, и не попользуют :) миллиард :) сами знаете где этот миллиард водится :) сугубо мирные цели :)
  4. Благодарю, Вас за советы! Перегрыз дорожку и навесным повесил делитель на 100кОмных резисторах и середину подключил на REF. Стало стабильнее на выходе 2.5В, но все еще не то, что мне надо. Поставить в то же место AD820 или что-то аналогичное пока не могу, переразводка-переизготовление-перепайка платы на 2 недели затянется. Реально не могу понять, почему LT1990 не работает... Уже даже попробовал один выпаять и другой впаять, думая, что LT1990 бракованный (из Фарнела-то) попался, но не помогло.
  5. Благодарю, Вас за ответ, с конденсатором - да, не подумал, но есть, куда вкрячить. Навесным повешу. А с операционниками - еще не разбирался, и это - мой первый опыт, пока, к сожалению, не удачный. Я честно говоря, думал, что это именно и есть такой повторитель с малым током. Вот тут я в терминологии совсем запутался. По даташитам там в LT1990 на входе два 1МОм резистора стоит. Скажите, пожалуйста, разве этого мало и есть больше, или я окончательно запутался в терминах и не на то смотрю?
  6. После делителя на 1.5ГОм/330кОм, ток на МК совсем слабый. Хочется его повторить, чтобы устойчиво его измерять. МК надо примерно 10кОм резистор в нижнем плече, то есть, при моем коэффициенте в делителе в 4000 раз, в верхнем плече будет стоять всего-то 40мОм, которые при 20кВольт будут рассеивать 10Ватт. Мне 10Ватт жалко :) Дополнительно, хочется что-то поставить, чтобы если там какой скачек, то через него в МК не привалило что-то высоконапряженное или отрицательное и МК не ушел в ресет.
  7. к сожалению, не совсем обычный софт, и желающих спереть уже много. Софт распределенно работает на писишке, плиске и нескольких мелких бордах с МК. На писишке - взломают точно, думаю, что там ноль шансов защититься. В то же время софту с писишки нужны данные с плиски и борд с МК, и я могу так модифицировать софт, что он будет не правильно работать если плиски или борды с МК будут посылать похожие данные, но не совсем те, что я хочу. Встает вопрос куда надежнее залить такую защиту, в то же время, влазить в дебри этого вопроса тоже не сильно хотелось бы. Так как борд с МК и плисками у меня в системе около 20, то если я например, знаю, что один проц взламывается с 90% вероятностью, то вероятность взлома всей системы c первого раза всего-то (0.9^20)*100%=12%.
  8. Ref на земле, Gain1, Gain2 - да, висят, как в даташите, чтобы был повторитель. согласен, сейчас нарисую, просто изначально не положил, так как вроде кроме самого ОУ тут больше ничего нет такого важного.
  9. Всем привет, пробую использовать LT1990 http://ru.farnell.com/linear-technology/lt...1990/dp/1330733 для измерения не быстро меняющегося высоковольтного напряжения. Надо измерять 0-20кВ, которое изменяется примерно с частотой 50-100Гц, хочется примерно раз в милисекунду знать значение этого напряжения. Само измерение происходит на МК Атмега328. Раньше делал делителем на 100мОм/25кОм без операционника - измерялось устойчиво, но отъедалось в среднем 3 Ватта, чего хотелось избежать. Попробовал сделать на LT1990, заменив делитель на (1.5ГОм+2МОм)/330кОм. На схеме 1.5ГОм не показан (он собран из 3-х по 500МОм на 10кВ), на его выход воткнут в 2МОм резистор (R6, 3кВ), далее R5=330кОм, C22=100мкФ, с30=10мкФ. Красная дорожка с 6-ой ноги LT1990 уходит напрямую в микроконтроллерный вход АЦП, зеленая дорожка горизонтально по центру - земля. МК от высоковольтной системы по земле разделен индуктором на 10мГн, 0.1Ом, LT1990 также от всех остальных развязана такими же индукторами. При измерениях получается лажа, значения совсем ни как не коррелируют с тем, что должно быть и гуляют произвольно от 0 до 2В на 6-ой ноге. Если даже на вход R6 подать просто 0-30В, тоже ничего путнего не получается, то есть тут не в ВВ проблема. Повидимому я что-то не понимаю в устройстве LT1990 (как я понимаю, это почти аналог INA148), только дешевле из-за меньшей точности. Вдруг кто с этим ОУ работал, или увидели причину моей ошибки, посоветуйте, мне, пожалуйста, что же я тут не то сделал? Спасибо ИИВ
  10. Всем привет, скажите, пожалуйста, на сколько тривиально вытащить содержимое прошивки МК с целью бездумного клонирования? Хочется отдать в руки одно устройство, но есть опастность, что сопрут прошивку. Сейчас устройство работает на Атмеге328 с Ардуиной. Могу тот же функционал перетащить на терасиковскую борду ДЕ0 http://www.terasic.com.tw/cgi-bin/page/arc...p;from=enbanner правда очень не хотелось бы. При сильной нужде - думаю что мог бы поменять МК, но, тоже очень не хотелось бы. Сопрут ли, с легкостью ли, если да, то что лучше выбрать, чтобы не сперли, либо хотя бы не со 100% ной вероятностью сперли, посоветуйте, пожалуйста! Спасибо ИИВ
  11. Так вот... вернемся к баранам ТС, то есть к моим. Расскажу про проделанный эксперимент, поделюсь опытом. Попробовал вначале 6кВольт RMS на выходе получать, на входе можно либо 12В постоянки, либо 220В сетевых. Что попробовал: 1. полномостовым образом вогнать 12В в один транс (тор 10см) с коэффициентом трансформации 375 (первичка - 4 обмотки по 2 витка), вторичка одна обмотка с 750 витков, 2. полномостовым образом вогнать 12В в один транс (тор 10см) с коэффициентом трансформации 20 (первичка 39, вторичка 750) и выход снова в такой же транс (первичка 39, вторичка 750), то есть первый транс поднимал напряжение до 360В переменки, а второй до 6кВ, 3. входные 220 переменки выпрямил до 310В, и вогнал в один транс c коэффициентом трансформации 15 (первичка 50, вторичка 750). Во всех экспериментах вторичка была на тор намотана, пропарафинена, прозазорена на 1см, а поверх моталась первичка/первички. Реально использовал только два транса и перенаматывал первички. На выходе стояли умножители двухполупериодные, в + и в -, оба по 5 ступеней, в пике должно было получаться 90кВольт, реально выход этих каскадов был через 8кОм резисторы воткнут в 110кВольтный конденсатор на 5нФ, и в параллель к нему ключ-разрядник, который на 70кВ срабатывал. Менял частоту накачки на МК линейно с X до Y, так, что X - было сразу после разряда, а Y - непосредственно перед разрядом, а в промежутке - линейная аппроксимация. X и Y подбирались по Ньютону на основе затраченной энергии на один импульс. Выводы: КПД схемы 3 достигда 76% при 100В мощности, при 1кВ мощности было около 60% КПД. КПД схемы 2 было больше КПД схемы 1, но выйти на 1кВ выходной мощности удалось только при 50% и 30% КПД соответственно, реально трансы грелись ужасно, можно было экспериментировать только около 10 секунд, а потом ждать пару минут пока парафин застынет. В то же время на схеме с двумя трансами КПД около 70% достигалось при 10Ватт нагрузке (около одного импульса в секунду моей схемы). Выводы... сами понимаете... два транса - геморно и не нужно, имеет смысл только если у Вас под рукой нет нормальных ВВ мосфетов, чтобы питаться от 220В. Может иметь смысл только если питание только низковольтное, и очень стеснены по габаритам. Off/PS: предварительные опыты, правда на меньшее выходное напряжение, буст на прямую воткнутый в длинный умножитель пока даже более успешны на небольших мощностях, чем схема 3. Буст на 335мкГн, 100витков, 0.6Дж до насыщения, микрометальный тор примерно тех же габаритов. Но управление там - МК уже на самоподстройку еле-еле хватает.
  12. когда еще на Н-мосте экспериментировал, первичка напрямую была воткнута, без конденсаторов. Сейчас перешел полностью на другую схему - буст воткнутый в умножитель, честно говоря, гораздо больше нравится.
  13. В догонку, чтобы было проще разобраться что к чему, формула Б кубического сплайна на единичной равномерной сетке такая: нулевой сегмент (там где функция в f(0)=1, f(1)=0) f_0(x)=x*x*((2-sqrt(3))*x+sqrt(3)-3)+1, 0<x<1, все последующие, сдвинутые так, чтобы 0<x<1 и f(0)=f(1)=0 f_i(x)=x*(x-1)*((1-sqrt(3))*x+1)*(2-sqrt(3))^{i-1} где i - номер сегмента, то есть в эти формулы хоть 4/3, хоть любую другую децимацию можно подставить. Заодно по этим формулам проверять проще.
  14. Всем огромное спасибо за советы! хоть и установка мощная, но переразводить приходится все, кроме каскадов умножителей, то есть, это примерно 80 компонент и 300 посадочных мест. Начал переразводить, воспольозовавшись всеми советами. Экран тоже запланировал. При сильных нагрузках у меня вся эта система в трансформаторном масле плавает, чтобы иот пробоя защищать, и жидкостно охлаждать. На днях переразведу, зашлю на изготовление, думаю, через две недели либо буду хвалиться, либо опять форум теребить :)
  15. Программу генерации коэффициентов не нашел, заново писать было лениво, вывел аналитически их формулы для Б-сплайнов 3-ей степени. CoefP[COEFSIZE/2+0][0]=2/27*(10+sqrt(3)), CoefQ[COEFSIZE/2+0][0]=1/27*(7+4*sqrt(3)), j=0,..3, i=0,... не включая i=j=0 CoefP[COEFSIZE/2+i][j]=-2/27*(5+2*sqrt(3))*(2-sqrt(3))^(i*4+j), CoefQ[COEFSIZE/2+i][j]=-2/27*(4+sqrt(3))*(2-sqrt(3))^(i*4+j), Коэффициенты COEFSIZE/2-i-1 и COEFSIZE/2-i симметричны. Всех их надо домножить на 2^DATALEN и взять целое. Как видно из формул, i>1 нужны только если точность оцифровки не менее 16 бит, а i>0 нужны только если точность оцифровщика не меньше 8 бит. Вывод формул не готов писать, на бумаге примерно листов 5 получилось только формул :( Ход доказательства - записываем обычный сплайн для Б-сплайна, получаем трехдиагональную матрицу с бесконечно большим размером, считаем для нее разложение Холецкого в пределе, подставляем правую часть, получаем рекурентные формулы для сплайна, подставляем 1/3 и 2/3, получаем коэффициенты. PS со сдвигами возможно, где-то намудрил, если найдете баг, пишите
  16. Всем огромное спасибо за советы и ссылки, реально сильно выручаете!!! С диодами на входе - действительно прокололся, и был не прав, спасибо за то, что тыкнули носом в мой огрех... По поводу делителя, скажите, пожалуйста, если он будет не сильно высокоомный, например, как раньше в 5МОм будет ли это разумно? При моих характерных напряжениях я только 80милиВатт туда тратить буду, при 1кВатте планируемой мощности установки, это совсем не будет погоды делать. Или правильнее еще сильнее упасть, до 1МОм. Скажите, пожалуйста, как можно эти наводки разумно оценить?
  17. Я правда в модемах ни бум-бум, но, по восстановелнию частоты несущей, можно вставить свои пять копеек? Линейное предсказание, код у тебя есть, единственно, это довольно трудоемкая процедура, может поесть все доступные умножители, наверное из-за этого - не распространено. Причем одна часть алгоритма на плиску хорошо ложится, а вот другую я только на писишке смог гонять, там больно много условий и ветвлений. Вкрячивать ниос и на нем на С программировать - так и не научился. Реально где это мейн стрим - ядерный магнитный резонанс, но там стоимость прибора сравнима с хорошим суперкомпьютером, поэтому народ там на терафлопсах не экономит. Если заинтересует, могу кинуть (если быстро отсканирую) хороший обзор, или несколько своих статей, и доступно об этом порассказываю.
  18. С радостью! У меня где-то софт был, самопально написанный как эти коэффициенты считать, но, что-то я никак не могу найти, а старые таблицы этим софтом нагенеренные, для 3/4 не подойдут. Если не найду, напишу доку, только как раз там-то и надо трехдиагональную матрицу решать и с коэффициентами ничего не напутать, поэтому дока не тривиально пишется :( а в и-нете я как-то не видел простого и понятного описания. На учебник тыкать - не правильно, можно и месяц потратить при разборке что да как. У нас в свое время семестровый курс был по этой теме, сам Шикин читал (в тот момент он был самым большим спецом в СССР в задачах сплайн аппроксимаций). Кстати, удобство этого метода - можно нагенерить все эти коэффициенты однажды хоть для Б-сплайнов 3-ей степени, хоть для 5-ой, хоть для 25-ой, только меняя эту таблицу можно все пересичтать не меняя верилог модуль, который я привел выше. Правда из своего опыта, больше 5-ой степени реально не за чем. Даже между 3-ей и 5-ой разницу ну очень сложно увидеть, я обычно, только 3-ю использую.
  19. > Да уж, отбирать ватт на измериловку это круто и стратегически неправильно, лучше высокомегаомное что-нибудь. как я уже много раз говорил, в основном напряжение там колеблется между 900 и 0, то есть при 5мОм на измериловку 40мВатт конечно будет уходить, но вот если вдруг там 2500В набежит, мне об этом надо очень быстро узнать, и тут я готов потратить ватт мощи втечение 100мкс :)
  20. Под 1кГц я подразумевал максимум в спектральной части, реально во временной области там будет что-то слегка изменяющееся, но мне надо максимум и минимум этого напряжения.
  21. Благодарю Вас, stells, за совет, действительно, в интернете много материалов по пиковым детекторам и за последние дни, после совета Микровата я много об этом прочитал. К сожалению, обычно под пиковым детектором подразумевается поиск пикового напряжения. Эта часть схемы, надеюсь, у меня правильно нарисована. В то же время, найти по ключевым словам схему для поиска минимума напряжения за заданный промежуток времени я не смог, поэтому я нарисовал как придумалось, а здесь просил проверки. Вдруг Вам будет не сложно, подкинте, пожалуйста, правильную ссылку об этом из интернета, буду Вам премного благодарен. С уважением ИИВ
  22. Во-первых, огромное всем спасибо за познавательные комментарии, понял, что сделал криво, и правильнее все переделать, более того, похоже, разобрался, что конкретно мне хотелось бы измерять. Итак, позвольте заново задать вопрос. Пусть у меня есть точка, где может наблюдаться от 0 до 2500В, колебаться напряжение может и медленно (10кГц) и быстро (1-2МГц). Известно, что за некоторый промежуток измерения (скажем 100-200мкс), форма колебания практически не меняется. Напряжение может колебаться не от 0, и не до 2500В, мне очень надо знать максимум и минимум таких колебаний. Более того, основной режим - это колебания 0-900В. Хочу сделать два пик детектора, один на поиск максимума, один на поиск минимума, как я нарисовал на схеме. Так как с операционниками дела еще не имел, очень прошу всех, пожалуйста, посоветуйте, в правильном ли я направлении мыслю, или что-то еще не допонял. Выходы ADC1, ADC2 хочу воткнуть в аналоговые входы атмеги, а D1, D2 - в дигитальные входы атмеги, для сброса детектора. Скажите, пожалуйста, будет это все разумно работать, стоит ли что-то подправить? Если да, скажите, пожалуйста, какой бы Вы порекомендовали операционник использовать, чтобы и 2МГц успешно пик-детектировать, и чтоб он не сильно от перепадов в сети на 1кВ не накрылся. Если например LM2900 от Техаса взять, разумно ли это? Скажите, пожалуйста, я правильно понимаю, что землю операционников лучше на землю контроллера повесить, а не на землю ВВ части? У меня ВВ земля МК земля разнесены дросселями по 5мГн и 0.1Ом. Спасибо ИИВ
  23. Б-сплайны можно построить любого порядка, я брал кубические. Основная их идея в том, что если надо получить интерполяцию, не обязательно решать систему уравнений с трехдиагональной матрицей, а достаточно сложить насчитанные функции (так называемые Б-сплайны) со сдвигами. Каждая такая функция на регулярной сетке тождественно равна соседней со сдвигом шага сетки. Функция строится интерполяцией обычного сплайна через точки ...(-2t,0), (-t,0), (0,1), (t,0), (2t,0),... У этой функции есть очень хорошая особенность, она очень быстро убывает, поэтому уже 5-6 точек влево-вправо, и мы имеем около 20бит точности. Пусть наш сигнал дан на сетке 0, t, 2t, 3t, ... а для нашей 3/4 интерполяции нам необходимо посчитать этот сигнал в точках 0, 4t/3, 8t/3, 4t, ... то есть длостаточно учесть с каким весовым коэффициентом Б-сплайн от точки 0, входит в интерполяцию в точках 4t/3, 8t/3, (4+4/3)t, (4+8/3)t, (8+4/3)t, (8+8/3)t... дальше из-за точности думаю уже не надо смотреть, но, дополнительно, не забыть что эта точка также влияет на итерполяцию в точках -4t/3, -8t/3, -(4+4/3)t, -(4+8/3)t, -(8+4/3)t, -(8+8/3)t При обработке сигнала в точках t, 2t и 3t сдвиги (и коэффициенты) будут другими, но их будет не больше. Итак нам надо нагенерить эти коэффициенты, сохнанить их в куда-то, и выдергивать набор из 12 таких коэффициентов каждый такт и умножать наше входное значение на 12 разных констант. Если формально это запрограммировать, Квартус попользует 12 умножителей. Но обратимся к значениям этих констант, они все меньше 1, их разумно представить как DATALEN бит, и проводить умножение, а результат тут же сдвигать на DATALEN. Так вот умножение одного числа на 10 таких констант можно расписать в виде пайплайна на sqrt(DATALEN) шагов так, что на каждом шаге мы используем деление на степень 2 и сложение и никаких умножений вообще. При хорошей тренировке Квартус многое сам додумывает и делает это за нас. Итак, криво на спех вытащенный кусок кода из моих старых загашников сильно заточенный под 3/4 интерполяцию, в котором пока нет насчитанных коэффициентов (это будет завтра(с)) и, пока еще не отлаженный (мог при переделке в пайплайнах где-то описаться и чего-то не доделать, не пинайте сильно)... module BSplineInt4_3(Clk, In, Out, CoefP, CoefQ); parameter COEFSIZE; // the lenght of CoefP/CoefQ arrays, should be odd, 10 is enough, usually it is about DATALEN/2 parameter DATALEN; // accuracy of In, Out and CoefP/CoefQ input Clk; input signed reg [DATALEN-1:0] CoefP[0:COEFSIZE-1][0:3]; // coefs at (i+1/3)*t input signed reg [DATALEN-1:0] CoefQ[0:COEFSIZE-1][0:3]; // coefs at (i+1/3)*t input signed reg [DATALEN-1:0] In; output signed reg [DATALEN-1:0] Out[0:2]; // at each 1/4 clock it updates 3 entries that correspond to 3/4 interpolation // Internal variables: 3*DATALEN*(COEFSIZE*3+2)/2+2 reg [1:0] Count; signed reg [DATALEN-1:0] TP[0:COEFSIZE-1], RP[0:COEFSIZE-1]; signed reg [DATALEN-1:0] TQ[0:COEFSIZE-1], RQ[0:COEFSIZE-1]; signed reg [DATALEN-1:0] PL[0:COEFSIZE/2-1]; signed reg [DATALEN-1:0] PreOut[0:2]; // at each 1/4 clock it updates 3 entries that correspond to 3/4 interpolation initial begin Count<=0; for(int i=0; i<COEFSIZE; i++) begin RP[i]<=0; RQ[i]<=0; TP[i]<=0; TQ[i]<=0; end for(int i=0; i<COEFSIZE/2; i++) PL[i]<=0; end always @(posedge Clk) begin for(int i=1; i<COEFSIZE; i++) begin TP[i]<=(CoefP[i][Count]*DataIn)>>>DATALEN; TQ[i]<=(CoefQ[i][Count]*DataIn)>>>DATALEN; if(Count==0) begin RP[i]<=RP[i-1]+TP[i-1]; RQ[i]<=RQ[i-1]+TQ[i-1]; end else begin RP[i]<=RP[i]+TP[i]; RQ[i]<=RQ[i]+TQ[i]; end end if(Count==0) begin PL[0]<=DataIn; for(int i=1; i<COEFSIZE/2; i++) PL[i]<=PL[i-1]; DataOut<={PL[COEFSIZE/2-1], RP[COEFSIZE-1], RQ[COEFSIZE-1]}; end end endmodule остатки наприсую, но не сейчас, немного завал на работе, надеюсь, на выходных смогу.
  24. Всем привет, есть переменное высокочастотное напряжение примерно 100мкА, 0-5В, частотой в большом диапазоне от 10кГц до 2МГц. Форма сигнала во времени меняется медленно, примерно за 100-200мкс. Частоту я заранее знаю на МК. Мне нужно измерить максимальное и минимальное напряжение, возникающее втечение измерительного периода в 100-200мкс. Похоже, что пик детектор - это самое простое. Скажите, пожалуйста, есть ли готовые микросхемы пик детекторов, а то обгуглился и ничего не нашел. Или такое принято на ОУ делать? Если да, правильно ли я понимаю, что при поиске минимума, мне надо ОУ питание местами поменять, или есть что-то по проще? Хотелось бы не ставить кучу рассыпухи, а обойтись максимально простым, кондовым и спервого раза работающим вариантом. Вдруг кому-то будет не сложно посоветовать либо готоый пик детектор, либо подходящий номинал ОУ, а то запутался я в даташитах совсем. Спасибо! ИИВ
×
×
  • Создать...