Спасибо большое, попробую так...
есть еще вопрос, каким образом в си задаются интервалы?
К примеру мне нужно, что бы при val>а светодиод включался, а при val меньше b выключался. по условию а больше б.
if(val>(level-level_delta)) STATUS1_ON;
if ((level-level_delta)>val>(leveloff-level_deltaoff)) STATUS1_ON;
else
if (val<(leveloff-level_deltaoff)) STATUS1_OFF;
}
Ежик в тумане писал(а):Спасибо большое, попробую так...
есть еще вопрос, каким образом в си задаются интервалы?
К примеру мне нужно, что бы при val>а светодиод включался, а при val меньше b выключался.
Может по простецки :
if (val>а) Включить ;
if (val<b) вЫключить ;
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Подскажите еще плиз, по работе АЦП...
у меня в схеме есть две меги 16, на каждый вход ацп приходит сигнал синусоида 50 Гц с амплитудой от 0 до 5В. При достижении уровня сигнала в 3 В контроллер на одном из портов должен выдавать логическую 1, а при снижении амплитуды до 2,4 В логический ноль. Проблема в том, что у меня оба канала включаются при 3В, а выключаются по разному. Первый канал выключается при 2,9В, второй как и положено при 2,4В. Причем у первого канала наблюдается моргание светодиода. Программы в обоих мегах одинаковые, сигналы на вход приходят одинаковые по амплитуде и фазе, опорные уровни тоже одинаковые... Далее я попробовала сделать фильтр (брала соседние отсчеты и делила на 2) моргание светодиода первого канала пропало и выключаться он стал при 1,9В. Второй канал выключается при 2,4В как и было ранее.
В чем может быть причина такой работы в погрешности ацп, в разводке платы. в программе синхронизации контроллеров? Но включаются то они синхронно, почему тогда выключаются несинхронно? Уже голову сломала что это может быть....Подскажите кто что знает...
Если это крайние значения - то это РАЗМАХ сигнала. Амплитуда это макс отклонение от средней величины. Для синусоиды Рамах в 2 раза больше амплитуды.
Ежик в тумане писал(а):При достижении уровня сигнала в 3 В контроллер на одном из портов должен выдавать логическую 1, а при снижении амплитуды до 2,4 В логический ноль.
Настройте мастером CVAVR АЦП ( пример в задаче 11 под кнопкой ниже) и в прерывании по окончании АЦП делайте проверку IF как написано выше и запускайте следующее преобразование. При изменении входа АЦП делайте холостое АЦП.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
1. Да за была уточнить... перед мегой стоит изолирующий усилитель... на вход него приходит синусоида к примеру 3 В, а на входы ацп приходит только положительная полуволна синусоиды... срабатывать должно при 3В на входе усилителя.
2. Проверка с помощью иф конечно же делается, в обе меги записывается одна и та же программа и одинаковые числа соответственно... Ацп работает по прерыванию от таймера с частотой 2 кГц. Вход АЦП всегда один и он не меняется.
К стати про смену входа ацп я не совсем поняла... сигнал на обе меги приходит синхронно ... абсолютно одинаковый. В каждом ацп используется только один канал. И можно немного поподробнее про холостое ацп преобразование? Это преобразование без сохранения результата?
А подскажите еще пожалуйста, как правильно на си написать число... к=Т*f0, где T =3,14 - период а f0=2000Гц частота дискретизации...
как эти числа правильно записать и какой тип данных использовать?
для Т это будет float? и как запишется число 3,14 и 2000?
Спасибо!
Может подскажите еще в чем все таки может быть причина того, что обе меги включаются при одном входном напряжении а выключаются при разных с разницей в 0,5В. Сигналы на входе, опорное напряжение, питание все одинаковое... программы в обеих контроллерах тоже одинаковые...
при поиске ответа на загадку о пороге переключения, я бы провел такие эксперименты:
1. переставил (если возможно) контроллеры местами, проверил бы, зависит эта ситуация от места в схеме или не зависит
2. взял бы 2 новых абсолютно контроллера, прошил бы их и поставил взамен старых - возможно один контроллер "подпаленный"
3. считал бы фьюзы - возможно что-то нехорошее кроется там... считал бы из контроллеров всю память и сравнил бы ее побайтно - возможно тезис об одинаковости прошивок не является истиной.
4. если вышеописанные пункты не проясняют ситуацию - выкинул бы все нафик и сделал бы принципиально новую схему
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Спасибо Перспективы у меня совсем не радужные....
Меги к сожалению местами не поменять... они уже впаяны...
Можно, конечно взять новые меги впаять их на место старых прошить и посмотреть...
фьюзы считывали - там все одинаково, остается только считать еще всю память или сразу не мучаясь все выкинуть...
Вот еще интересный момент, сегодня попробовала подать на вход синусоиду с частотой 25, 50 и 75 Гц... Обнаружила что чем выше частота, тем стабильнее все работает... В смысле включаются и выключаются при одинаковых напряжениях... но на 50 Гц выключается при 2,4В и 1,9В то на 75 уже при 1В оба канала выключаются , на 25 Гц вообще не поняла что происходит светодиоды моргают включение и выключение происходит при 3В...
Изиняюсь шо вмешиваюсь.
Но мне хочется изложить свое объяснение, как найти максимальное значение.
Т.к. здесь явно показывается (суть) машинный ход(шаг).
б=0;
цикл{ // бесконечный или по конца какого либо массива
а = значению вход АЦП;// текущему или если мссив то началу массива
если (а больше б) // если предыдущее значение меньше текущего, т.е. а больше б
то {
б=а; // то текущее становится предыдущим
};
} // и так в цикле или пока не кончится массив(увеличивая ячейку массива за каждый цикл)
Также(этим способом), можно найти конец фазы. И синхронизироваться. К примеру.
По поводу коэфицентов.
Так, блин покажте(!) где они применяются!
Там должно быть такое:
Опрос АЦП и что то с полученным значением делается(формулка или небольшие матем. операции).
Ну типа, - значение АЦП*10/2+коэффициент.
Вот сдесь и играйте!
Можно либо расчитать, но это схему смотреть надо. Скорее там
делитель, так насколько он делит?!
А можно просто, методом тыка, не - значение АЦП*10/2+коэффициент.
А (значение АЦП*10/2+коэффициент)*2. Сразу получите уровень срабатывания не 3В а 6В.
По последнему сообщению, видимо не прописан алгоритм синхронизации с синусоидой. Т.е. массив заполняется(он не нужен! его надо удалить) не синфазно с синусоидой сигнала. Т.е за текущий период, он нашёл(МК) максимум но начал замер не от нуля (с нуля фазы) а как получилось...
Это всё сугубо мои предположения, но не помешает к рассмотрению.
Ужос!!!
Спасибо за ценные мысли... собственно массив уже был так написан как Вы сказали....
Далее есть еще вопрос... у меня контроллер должен выдавать лог.1 на выходе когда на входе устройства приходит 3 В действующего напряжения. Эти 3 В со входа через резисторы и стабилитроны идут на микросхему AD202JY (это можно назвать фильтром или однополупериодным выпрямителем или еще как то). Т.е. на входе этого фильтра у меня уже не 3 В действующегозначения напряжения а 1,65В, соответсвенно после выпрямления на выходе 1,15В действующего либо если брать размах амплитуды одной полуволны 3,12В. АЦП измеряет одну полуволну, далее находим максимум - если этот максимум больше коэффициента, записанного в епроме, то выдаем лог.1 если меньше - лог.0
вопрос в том нужно ли мне этот измеренный максимум пересчитывать к действующему значению? Какой коэффициент записывать в епром, если у меня опорное напряжение 4,09В, для 8 разрядного ацп это 0,016 В на разряд? т.е. для 3 В это будет 3/0.016=ВВ? Но у меня срабатывание от этого значения не происходит, а происходит от значения 0х47h т.е. 71*0.016=1,15В, только при этом необходимо измеренное максимальное значение разделить на 2... Почему так.... ЫЫЫЫЫЫЫЫЫ
Да на входе aref 4.09В... Было уже 10 раз все измерено...
что касается результата ацп, то в программе используются данные только одного регистра ADCH, при этом стоит выравнивание результата по левой границе...
Под действующим напряжением я понимаю значение напряжения. которое измеряю тестером...3 В оно равно 0,7* U ампл, амплитудное значение при этом равно 4,5В ... Размах соотвественно в 2 раза больше амплитудного т.е. порядка 9В.... Возможно, я недостаточно глубоко понимаю что такое действующее напряжение ... ну как понимаю, если неправильно, поправьте, плиз...
К стати прошу прощения, немного ошиблась, при числе ВВ срабатыване происходит при значении напряжения 3,8В на входе схемы (до фильтров), при этом измеренное максимальное значение на 2 не делю....