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

crazz

Рекомендуемые сообщения

Системный тик - вход в прерывание по системному таймеру.

А системным таймером может быть ЛЮБОЙ УДОБНЫЙ тамер.

То есть частота системных тиков может быть ЛЮБОЙ, все зависит от предделителя таймера, его коэффициента пересчета и постделителя.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

это понятно что очень сильно ошибаешься. Во первых, каждая команда PIC-контроллера выполняется 4 периода тактовой частоты - это длительность машинного цикла. Некоторые команды, особенно команды перехода и условного перехода выполняются несколько машинных циклов.

Твой цикл, он состоит не из одной команды NOP, а иногда и вовсе без команды... но всеравно, чтобы сделать одну итерацию необходимо 1) инкрементировать счетчик, 2) сравнить его с условием выхода из цикла 3) если условие не выполняется перейти на начало цикла. Итого на пустой цикл уходит 3-4 маш. цикла, или 12...16 тактов тактовой частоты.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

То есть частота системных тиков может быть ЛЮБОЙ, все зависит от предделителя таймера, его коэффициента пересчета и постделителя.

Точно спасибо что напомнили про предделитель! =))) выставлял его неделю назад и уже забыл о его существовании =)

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

По поводу порога в этой формуле Вы тоже все поняли?

нет не понял, видите вы даже знаете сами чего вы объяснили так чтобы я не понял =)

ибо вы написали про порог и если входное значение будет равно нулю. Но я не понимаю как оно может быть равно нулю.

вплане первый прогон программы АЦП допустим равен 400, а предыдущих нет и они равны нулю и тогда по формуле будет =(0*2+0+АЦП)/4 тоесть 100

и даже что то было про порог 10 или 15, но если ацп равно 10 то все ровно первый результат будет 2.5

Ссылка на комментарий
Поделиться на другие сайты

тогда по формуле будет =(0*2+0+АЦП)/4 тоесть 100

и даже что то было про порог 10 или 15, но если ацп равно 10 то все ровно первый результат будет 2.5

В Вашей формуле порог будет 4. Деление 3 на 4 в целых числах даст НОЛЬ. То есть все числа меньше 4 не будут приняты фильтром.

Кстати, 2,5 тоже не может быть. При правильном округлении будет 3, а при неправильном - 2.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

а предыдущих нет и они равны нулю и тогда по формуле будет =(0*2+0+АЦП)/4 тоесть 100

и даже что то было про порог 10 или 15, но если ацп равно 10 то все ровно первый результат будет 2.5

в этой формуле порог =4

формула для экселя не правильная , в смысле применения к МК , нужно округлить до целого вниз =ОКРВНИЗ((0*2+0+АЦП)/4;1)

Ссылка на комментарий
Поделиться на другие сайты

этой формуле порог =4

формула для экселя не правильная , в смысле применения к МК , нужно округлить до целого вниз =ОКРВНИЗ((0*2+0+АЦП)/4)

да вижу если поставить значение 3 то результат 0.75 и если мк округлит до 0 то замкнутый круг получится.Но чтобы получилось ацп равное 3 нужно чтобы была очень высокая температура, сопротивление датчика например на 100 градусах равно 3.6кОм, а нужно чтобы сопротивление упало до 50ом и тогда действительно АЦП будет 3. не знаю возможно ли такое чтобы хоть при какой то температуре оно упало до 50 ом

Изменено пользователем Zombie47
Ссылка на комментарий
Поделиться на другие сайты

Так ведь дело не только в пороге. Даже если порог превысить, то и тогда останется дискретность входного сигнала в 4 единицы. То есть входная разрядность просто упадет на 2 единицы. Было 10, станет 8, было 8 станет 6.

Дроби, уважаемый, нужно вводить.

Я же предупреждал, что БИХ сложнее КИХа.

нужно округлить до целого вниз =ОКРВНИЗ((0*2+0+АЦП)/4;1)

Почему обязательно вниз?

Если округлять корректно, то можно просто округлять.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Контроллер не умеет округлять иначе. Дробная часть при делении просто отбрасывается, даже если она равна 0.99.

Выше в примере просто неудачное число взято. Если взять 401 например, на выходе будут те же 100. Именно это и имеется в виду порогом - пока входная величина не изменится на величину порога, выход фильтра не пошелохнется. Иногда это хорошо, когда есть запас по точности измерения и надо отфильтровать шум в 2-х младших битах... но когда у нас каждый бит значащий это огромная проблема.

И кстати, что не сделали так это не оценили сложность вычислительной задачи. Успеет ли контроллер всё просчитать прежде чем настанет время следующего измерения? Кажется, что задача не такая сложная и он успеет, но...

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Нет, это при простом сдвиге так, а при КОРРЕКТНОМ делении и округление корректное, то есть к результату прибавляется старший дробный разряд.

При сдвиге можно сразу прибавить единицу в старший теряемый разряд и произвести обычный сдвиг. Это эквивалентно прибавлению 0,5.

Дело тут не в аппаратном делении, а в ПРОГРАММНОМ, где тип округления задает сам программист.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Про этот порог можно проще рассуждать. Для чего фильтруют данные? Чтобы уменьшить болтанку результата, вызванную шумом в полезном сигнале, т.е. делают усреднение. Так вот, порог фильтра нужно выбирать меньше, чем эта самая болтанка. То есть, если сигнал ожидается, типа, 400 плюс-минус 10, то порог 16 - плохо, а порог 4 - хорошо будет работать.

Ссылка на комментарий
Поделиться на другие сайты

Глупости не нужно говорить. Порог - это всегда ПЛОХО. Болтанка - это просто некий переменный сигнал, который подлежит фильтрации, а порог просто вводит ОШИБКУ на этот самый порог.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

чтобы моргать еще одним светодиодом с интервалом к примеру 1 секунда

В подобном случае поступают следующим образом.

Вот есть основная программа main, которая крутится в бесконечном цикле, и процедура прерывания, которая работает каждые 4мс, например.

interrupt Timer(void)
{
//прерывание по таймеру для динамической индикации
if (TMR0IF && TMR0IE) TMR0IF=0;
}

[// ОСНОВНАЯ ПРОГРАММА[/color]

void main (void)
{
while(1){};
}

Для получения 1 секунды времени заводите переменную LEDcnt, которая увеличивается на 1 в каждом прерывании от таймера. Когда достигнет значения 250, значит прошла одна секунда. В прерывании проверяете это LEDcnt==250, и если так, то присваиваете другой переменной LEDflag = 1. В основной программе просто проверяете этот флаг, и если 1, то зажигаете светодиод. Флаг сбрасываете LEDflag=0. Таким образом, имея всего один таймер, можно зажигать кучу светодиодов, каждый со своим временем.

interrupt Timer(void)
{//прерывание по таймеру для динамической индикации[/color]
if(TMR0IF && TMR0IE )
{
 TMR0IF=0;
 LEDcnt++;
 if(LEDcnt==250)
 {
   LEDflag=1;
   LEDcnt=0;
 }
}

// ОСНОВНАЯ ПРОГРАММА

void main (void)
{
while(1)
{
if(LEDflag==1)
{
LED=1;// включили светодиод
LEDflag=0;
}
}			
}

Изменено пользователем Yurkin2015
Ссылка на комментарий
Поделиться на другие сайты

не так дает результат на 1 больше

а так, как :

но думаю в данном случае это можно обойти, мне кажется достаточно ввести округление вверх для предыдущего значения , те тупо прибавить 1

Y(n) = (15*Y(n-1)+X(n))>>4

Y(n-1) = Y(n-1)+1

все правильно...

Ссылка на комментарий
Поделиться на другие сайты

Я дописал в функцию void interrupt Timer (void)

вот такой код:

b++;
			 if (b>=125){
				 warning=0; //врубаю светодиод
	 };
	 if (b>=250){
		 warning=1; //вырубаю светодиод
		 b=0;
	 };

с ним естественно заработало моргание светодиодом паралельно программе.

в main я ничего не дописывал. Что можете сказать про мой метод? чем он плох может я чего то не учел.

Если все ок то теперь мне осталось сделать так чтобы это моргание включалось при температуре выше 110. =)

Изменено пользователем Zombie47
Ссылка на комментарий
Поделиться на другие сайты

Если действие короткое, то, конечно, выполнять его можно прямо в прерывания. Главное, чтобы обработка прерывания гарантировано завершилась до наступления следующего прерывания,а то будут пропуски.

Вот , например, чтение ADC и обработку результата нафиг не надо делать 250 раз в секунду, и тем более, делать это в прерывании. Надо завести флаг, как со светодиодом, и измерять температуру пару раз в секунду в основной программе main().

Изменено пользователем Yurkin2015
Ссылка на комментарий
Поделиться на другие сайты

Столкнулся с проблемой, чему равно значение АЦП при обрыве? ну например нет датчика нет массы. и наоборот при замыкании на массу?

Просто я думал что при обрыве разность потенциалов 5 вольт и АЦП примерно 1023, а при замыкании на массу АЦП примерно 0

но чую это не так. Или надо схему показать?

Ссылка на комментарий
Поделиться на другие сайты

Столкнулся с проблемой, чему равно значение АЦП при обрыве?

Коду соответствующему напряжению на оборванных клеммах (емкостные наводки, остаточный заряд входной емкости).

Совершенно непонятно в чем тут вопрос.

Вы желаете программно определить факт обрыва? Тогда измеряйте ТОК через датчик посредством последовательно включенного резистора небольшого номинала (много меньше сопротивления терморезистора или дифсопротивления диода) и съема напряжения с него либо на компаратор, либо на тот же АЦП, но другой его вход.

Любое ненулевое значение падения напряжения на резисторе даст программе возможность определить целостность измеряемой цепи.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Это зависит исключительно от схемотехники подключения датчика к контроллеру. Исключите датчик из цепи и просчитайте получившуюся схему по постоянному току, получившийся потенциал на входе АЦП и будет определять его показания.

Я неоднократно видел схемы термометров, в которых датчик был шунтирован резистором, видимо для подгонки пределов изменения напряжения, и при обрыве датчика напряжение оказывается не нулевое что-то в области эквивалентной температуры порядка -60 градусов.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

У меня вот такая схема подключения, датчик подрубается там где вольтметр подрублен.

Как я понимаю при обрыве у меня нет разницы потенциалов. и Ацп не знает че там. Верно?

post-147349-0-99298200-1443353006_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...