Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 30.04.2018, 02:02  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 113
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DPANYTA на пути к лучшему
По умолчанию Как реализовать на С

Как лучше организовать такое:
АЦП выдаёт результат.
Если он меньше, к примеру 550, надо делать группу операторов "0",
Если меньше 650 - "1".
Если меньше 750 - "2".
Ну и т.д.
При этом после выполнения, скажем "0", дальнейшие проверки (650, 750) проводить НЕ надо.
Вроде просится switch (с break после группы операторов).
Но оператор switch проверяет на равенство. А надо меньше или больше.
Городить что то из if ?
Но кудой там "вставить" break ?
Реклама:
DPANYTA вне форума  
Непрочитано 30.04.2018, 02:17  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,901
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: Как реализовать на С

if (x‹550)
{
//group 0
}
else if (x‹650)
{
//group 1
}
else if (x‹750)
{
//group 2
}
...
else
{
// group "default"
}

Но при большом количестве вариантов это ведет к монструозным простыням и в таких случаях обычно является признаком плохо построенного алгоритма.
AR_Favorit вне форума  
Сказали "Спасибо" AR_Favorit
mike-y-k (30.04.2018)
Непрочитано 30.04.2018, 03:00  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 113
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DPANYTA на пути к лучшему
По умолчанию Re: Как реализовать на С

Сообщение от AR_Favorit Посмотреть сообщение
монструозным
Прикольное словечко
Спасибо.
DPANYTA вне форума  
Непрочитано 30.04.2018, 08:35  
andron007
Прописка
 
Регистрация: 19.02.2008
Адрес: г. Иркутск
Сообщений: 275
Сказал спасибо: 213
Сказали Спасибо 166 раз(а) в 78 сообщении(ях)
andron007 на пути к лучшему
По умолчанию Re: Как реализовать на С

Сигнал с ацп преобразовать делением в 1, 2, 3..
andron007 вне форума  
Непрочитано 30.04.2018, 08:36  
ptr
Прописка
 
Регистрация: 24.11.2016
Адрес: Moscow
Сообщений: 287
Сказал спасибо: 57
Сказали Спасибо 54 раз(а) в 39 сообщении(ях)
ptr на пути к лучшему
По умолчанию Re: Как реализовать на С

Сообщение от DPANYTA Посмотреть сообщение
Прикольное словечко
Спасибо.
Не хотите монструозности - можно тоже самое сделать циклом по отсортированному массиву Nx2 с числами и указателями на функцию.
ptr вне форума  
Непрочитано 30.04.2018, 09:32  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Как реализовать на С

DPANYTA тут и if и switch вместе тоже подойдут
switch (ADC_range(ADC_value)) и далее case 1:, 2:,
А в функции ADC_range множество if для диапазона с return (вариант для case)
И монструозность не столь выраженная получится…
При соответствующем нормировании значения, уже из конкретных условий и требований задачи может и массив помочь.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 30.04.2018, 10:39  
ptr
Прописка
 
Регистрация: 24.11.2016
Адрес: Moscow
Сообщений: 287
Сказал спасибо: 57
Сказали Спасибо 54 раз(а) в 39 сообщении(ях)
ptr на пути к лучшему
По умолчанию Re: Как реализовать на С

Сообщение от mike-y-k Посмотреть сообщение
switch (ADC_range(ADC_value)) и далее case 1:, 2:,
На самом деле, если речь идет о целых числах, что и требуется при работе с АЦП, можно использовать расширение C.
Тот же GCC поддерживает задание в case диапазонов чисел:

Код:
uint8_t test(uint16_t adc_value)
{
  uint8_t i;

  switch (adc_value) {
    case 0 ... 499: i=0; break;
    case 500 ... 649: i=1; break;
    case 650 ... 749: i=2; break;
    default: i=7;
  }
  return i;
}
Конечно, отклонение от стандартов языка не есть хорошо, но если проект пишется под конкретный МК и конкретный компилятор, то такое отклонение выглядит простительным.

Последний раз редактировалось ptr; 30.04.2018 в 10:54.
ptr вне форума  
Непрочитано 30.04.2018, 11:48  
Unichorn
Временная регистрация
 
Регистрация: 29.05.2005
Адрес: где-то в 300км от Красноярска
Сообщений: 76
Сказал спасибо: 4
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Unichorn на пути к лучшему
По умолчанию Re: Как реализовать на С

[HTML]
‹code›
unsigned shot Test(void)
{
if(adc_value ‹ 550)
{
......
return 0;
};
if(adc_value ‹ 650)
{
......
return 1;
};
if(adc_value ‹ 750)
{
......
return 2;
};
return 3;
}
‹/code›
[/HTML]

Как то так.
Unichorn вне форума  
Непрочитано 30.04.2018, 12:28  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,382
Сказал спасибо: 176
Сказали Спасибо 3,128 раз(а) в 2,017 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Как реализовать на С

if (x›500&&x‹600) {}

у меня вот так всегда работает
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 30.04.2018, 13:38  
welcome61
Почётный гражданин KAZUS.RU
 
Аватар для welcome61
 
Регистрация: 11.06.2006
Адрес: 51° 46′ 0″ N, 55° 6′ 0″ E
Сообщений: 1,975
Сказал спасибо: 370
Сказали Спасибо 1,725 раз(а) в 706 сообщении(ях)
welcome61 на пути к лучшему
По умолчанию Re: Как реализовать на С

Сообщение от Unichorn Посмотреть сообщение
Как то так.
Вопрос - число х = 333 удовлетворяет всем условиям сравнения? Или нет?
У вас же три три числовых диапазона, вот и определите их границы.
welcome61 вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализовать "реализуемое" - цифровой фильтр TranceBooster Цифровые сигнальные процессоры 8 18.03.2011 22:35
Задание. Реализовать на attiny2313 doband Микроконтроллеры, АЦП, память и т.д 17 13.12.2010 18:28
Как реализовать на ATmeg8 или ATtiny датчик случайных чисел Don_Ambrosio Микроконтроллеры, АЦП, память и т.д 20 03.05.2008 21:06
Можно ли на AVR реализовать вот такую схемку? -Dmitriy- Микроконтроллеры, АЦП, память и т.д 9 14.05.2006 16:43


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot