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

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

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

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

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

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


 
Опции темы

Как реализовать на С

Непрочитано 30.04.2018, 02:02  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 114
Сказал спасибо: 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.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 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
Сообщений: 114
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DPANYTA на пути к лучшему
По умолчанию Re: Как реализовать на С

Сообщение от AR_Favorit Посмотреть сообщение
монструозным
Прикольное словечко
Спасибо.
DPANYTA вне форума  
Непрочитано 30.04.2018, 08:35  
andron007
Прописка
 
Регистрация: 19.02.2008
Адрес: г. Иркутск
Сообщений: 278
Сказал спасибо: 220
Сказали Спасибо 172 раз(а) в 80 сообщении(ях)
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
Адрес: Москва СЗАО/МО
Сообщений: 12,282
Сказал спасибо: 11,860
Сказали Спасибо 4,159 раз(а) в 3,177 сообщении(ях)
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км от Красноярска
Сообщений: 75
Сказал спасибо: 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
Адрес: мурмурляндия
Сообщений: 11,130
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Как реализовать на С

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

у меня вот так всегда работает
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 30.04.2018, 13:38  
welcome61
Почётный гражданин KAZUS.RUN
 
Аватар для welcome61
 
Регистрация: 11.06.2006
Адрес: 51° 46′ 0″ N, 55° 6′ 0″ E
Сообщений: 1,991
Сказал спасибо: 378
Сказали Спасибо 1,744 раз(а) в 712 сообщении(ях)
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, время: 07:17.


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