Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

подскажите новичку (гистирезис бит)

Непрочитано 11.12.2007, 01:05  
LeonR84
Прохожий
 
Регистрация: 09.12.2007
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
LeonR84 на пути к лучшему
По умолчанию подскажите новичку (гистирезис бит)

Я на ATtiny 13 сделал АЦП и данные с АЦП передаю через интерфейс spi. сделал накопления (16) для избежания дребизга на выходе, но не помогает. Думаю что дело в гистирезисе только как реализовать программно на С только догадки. Подскажите пожалуйста. Заранее премного благодарен всем просветителям новичка.
Реклама:
LeonR84 вне форума  
Непрочитано 11.12.2007, 09:02  
nokazus
Вид на жительство
 
Регистрация: 05.09.2006
Сообщений: 359
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
nokazus на пути к лучшему
По умолчанию

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

-- Прилагается рисунок: --
nokazus вне форума  
Непрочитано 11.12.2007, 11:01  
Popeye
Почётный гражданин KAZUS.RUN
 
Аватар для Popeye
 
Регистрация: 05.08.2007
Адрес: Болгария Перник
Сообщений: 1,771
Сказал спасибо: 74
Сказали Спасибо 357 раз(а) в 245 сообщении(ях)
Popeye на пути к лучшему
По умолчанию

Схемку бы, от входа до вывода АЦП. Вам скорее всего шумы мешают.
__________________
Мыслю, следовательно существую
Popeye вне форума  
Непрочитано 11.12.2007, 11:02  
rremix
Временная регистрация
 
Регистрация: 01.11.2006
Сообщений: 66
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
rremix на пути к лучшему
По умолчанию

согласен с nokazus:
нчто вроде (пишу прямо в окне, потому может не быть ситаксиса)
Код:
void UpdateState(void){
  if (Val ‹ ((StateVal[i]+ StateVal[i+1])/2-k)
   &&
   (Val › ((StateVal[i]+ StateVal[i-1])/2+k)
     ){
     State = i;
   }
};
Суть такая :
Диапазоны значений выглядят так:
0000HHHH1111HHHH2222....
позиция символа - код АЦП, Цифры - интервалы стабильных значений, буквы Н - зоны гистерезиса.
В условии проверяем, лежит ли код АЦП в зоне стабильного состояния, и только в этом случае изменяем состояние. В противном случае (условие не выполняется, т.к. значение лежит в зоне гистерезиса), НЕ ИЗМЕНЯЕМ состояние (т.е. оставляем предыдущее значение).
rremix вне форума  
Непрочитано 11.12.2007, 17:01  
alkl
Временная регистрация
 
Регистрация: 14.04.2007
Сообщений: 65
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alkl на пути к лучшему
По умолчанию

Чего за дребезг, и где? Ни чего не понятно.
Может тебе какое-нибудь усреднение сделать?
alkl вне форума  
Непрочитано 11.12.2007, 20:38  
LeonR84
Прохожий
 
Регистрация: 09.12.2007
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
LeonR84 на пути к лучшему
По умолчанию

дребезг это когда при постоянном сигнале на входе ацп на выходе прыгают биты (хотя не должны)
rremix большое спасибо за код
и еще если можно поподробнее описать условие
"(Val ‹ ((StateVal[i]+ StateVal[i+1])/2-k)"
как я понимаю Val это значение ацп
а дальше не совсем понятно
LeonR84 вне форума  
Непрочитано 11.12.2007, 22:40  
LeonR84
Прохожий
 
Регистрация: 09.12.2007
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
LeonR84 на пути к лучшему
По умолчанию

спасибо всем за внимание
нашел решение проблемы
наверно тоже самое что и код rremix но так я немножко "чайник" не понял полностью его
LeonR84 вне форума  
Непрочитано 17.12.2007, 16:25  
rremix
Временная регистрация
 
Регистрация: 01.11.2006
Сообщений: 66
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
rremix на пути к лучшему
По умолчанию

Ничего удивительного, что условие непонятно... я сам его не понял помню только - спать хотелось очень ))
Суть условия такова: имеется массив значений, являющихся серединами диапазонов, для которых определено состояние. Дальше надо проверить, как текущее значение относится к этому диапазону. т.е. вычисляем среднее арифметическое двух соседних значений (проверяемого и следующего) - получаем середину, т.е. в идеале - момент переключения. Потом вычитаем некотурую константу - т.е. половину зоны гистерезиса. То же самое делаем с предыдущим (перед проверяемым) значением. Тагим образом появляется понятие "диапазон значений, при которых ТОЧНО пора переключаться". И вторично появляется диапазон значений, при которых ни одно из условий (при выполнении всего цикла проверки) не выполняется (т.к. лежат к сред. арифм. между значениями ближе, чем константа). Они обозначены в пред. посте буквами H.
Вот при этих значениях просто ничего не делаем.
Есть и другие способы (напр. задавать границы, а не середины, и вычитать/добавлять конст. к значению границ). Но суть та же. Не забываем про инициализацию (т.е. что надо делать, если при включении контроллера значение лежит в зоне гистерезиса).
rremix вне форума  
Непрочитано 17.12.2007, 17:42  
Kabron
Заблокирован
 
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,850
Сказал спасибо: 721
Сказали Спасибо 4,537 раз(а) в 2,072 сообщении(ях)
Kabron на пути к лучшему
По умолчанию

Кстати, об измерениях. Всем советую почитать литературу на тему "Improving ADC Resolution By Oversampling".

http://www.yandex.ru/yandsearch?text...mpling&rpt=rad

http://www.google.com/search?ie=UTF-...20Oversampling

Есть статьи от Атмела, Cygnal, Silabs,
Texas I, Actel. Идея в том что можно реально повысить разрядность АЦП на 2-3 и более разрядов применяя множественные измерения и обрабарывая результаты довольно простым образом. Сам этим давно пользуюсь. К тому же фильтрация и усредение получаются автоматически.
Kabron вне форума  
Непрочитано 18.12.2007, 14:57  
alkl
Временная регистрация
 
Регистрация: 14.04.2007
Сообщений: 65
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alkl на пути к лучшему
По умолчанию

Где-же ты раньше был ?
Как я понял вот это основное ? :

//////////////////////////////////////////////////
void ADC_isr (void) interrupt 15
{
static unsigned int_dec=256;

static long accumulator=0L;

ADCINT = 0;
accumulator += ADC0;
int_dec--;
if (int_dec == 0)
{
int_dec = 256;
result = accumulator ›› 4;
accumulator = 0L;
}
}
////////////////////////////////////////////////////
alkl вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подскажите новичку по MCS51 Diamanten Микроконтроллеры, АЦП, память и т.д 6 10.11.2008 09:29
Бит защиты 12F629 svn69 Микроконтроллеры, АЦП, память и т.д 4 10.07.2007 18:16
Подскажите, новичку, что за диод такой rr602 Информация по радиокомпонентам 13 21.12.2006 14:37
Бит в переменной SerDV Микроконтроллеры, АЦП, память и т.д 3 18.11.2005 15:42


Часовой пояс GMT +4, время: 21:16.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.