код корректен " napr=(ADCW*2.438-100)*-1; "

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

код корректен " napr=(ADCW*2.438-100)*-1; "

Сообщение TICLIR »

Здравствуйте вот такое дело, это код измерения температуры с возможностью
измерять отрицательные температуры

Код: Выделить всё

 
int napr=0;
------
-------
ISR(ADC_vect){ 
if(ADCW>=41){
napr=ADCW*2.438-100;
PORTC|=(1<<4);  //гасит знак минуса
}
else{
napr=(ADCW*2.438-100)*-1; 
PORTC&=~(1<<4); // зажигает знак минус
}
 int r;
 for(r=0;r<500;r++){ // что бы цифры не сливались
         matt(napr);  //в функц знакоиндикатора
         } 
:
вот этот код корректен " napr=(ADCW*2.438-100)*-1; " или есть другие варианты
без отрицательных переменных .
На симуляторе всё работает.
Реклама
Аватара пользователя
testerplus
Встал на лапы
Сообщения: 130
Зарегистрирован: Пн авг 24, 2009 10:41:16
Откуда: SPb
Контактная информация:

Re: код корректен " napr=(ADCW*2.438-100)*-1; "

Сообщение testerplus »

TICLIR писал(а):вот этот код корректен " napr=(ADCW*2.438-100)*-1; "
Что именно смущает? Не совсем корректно неявное приведение типов.
Еще, надо понимать, что float-умножение - довольно длительная процедура, а Вы ее в обработчик прерывания вставили (как, впрочем, и цикл)
или есть другие варианты без отрицательных переменных .
Как это?
Реклама
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: код корректен " napr=(ADCW*2.438-100)*-1; "

Сообщение TICLIR »

Смущает умножение на -1, в математике это нормально ,а вот как СИ.
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: код корректен " napr=(ADCW*2.438-100)*-1; "

Сообщение mr_smit »

Ну как минимум надо "-1" взять в скобки!

Код: Выделить всё

napr = (ADCW*2.438-100)*(-1);
Или вообще без всяких умножений:

Код: Выделить всё

napr = -(ADCW*2.438-100);
Нельзя всё знать, достаточно понимать.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
testerplus
Встал на лапы
Сообщения: 130
Зарегистрирован: Пн авг 24, 2009 10:41:16
Откуда: SPb
Контактная информация:

Re: код корректен " napr=(ADCW*2.438-100)*-1; "

Сообщение testerplus »

mr_smit писал(а):Ну как минимум надо "-1" взять в скобки!
Это откуда такие "как минимумы"? Не надо там никаких скобок.
Реклама
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: код корректен " napr=(ADCW*2.438-100)*-1; "

Сообщение mr_smit »

Работать то будет. Но так код читабельней.
Нельзя всё знать, достаточно понимать.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18673
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: код корректен " napr=(ADCW*2.438-100)*-1; "

Сообщение ARV »

может, проще и логичнее так, даже без if:

Код: Выделить всё

napr = (ADCW-41)*2.438;
знак будет получаться автоматически :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: код корректен " napr=(ADCW*2.438-100)*-1; "

Сообщение TICLIR »

ARV писал(а):может, проще и логичнее так, даже без if:

Код: Выделить всё

napr = (ADCW-41)*2.438;
знак будет получаться автоматически :)))
Да интересное дело,но я не могу,пока,врубица как функция динамической индикации примет отрицательное число.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18673
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: код корректен " napr=(ADCW*2.438-100)*-1; "

Сообщение ARV »

TICLIR писал(а):
ARV писал(а):может, проще и логичнее так, даже без if:

Код: Выделить всё

napr = (ADCW-41)*2.438;
знак будет получаться автоматически :)))
Да интересное дело,но я не могу,пока,врубица как функция динамической индикации примет отрицательное число.
нормальная функция динамической индикации должна быть глубоко безразлична к знаку, к числам и вообще ко всему, что она отображает.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: код корректен " napr=(ADCW*2.438-100)*-1; "

Сообщение YS »

функция динамической индикации должна быть глубоко безразлична к знаку, к числам и вообще ко всему, что она отображает.
Этакая дзенская функция. :)))

Так учесть просто в функции знак, и все. И вообще да, злоупотреблять вещественными числами в МК - плохая затея... Лучше обойтись целыми.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18673
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: код корректен " napr=(ADCW*2.438-100)*-1; "

Сообщение ARV »

YS писал(а):Этакая дзенская функция. :)))
да, совершенно верно. процессы надо разделять:
динамическая индикация - работает в фоне и тупо отображает биты из какого-то массива в соответствующих сегментах индикатора
подготовка данных для индикации - выполняется в нужные моменты и преобразовывает информацию в те самые биты в том самом массиве.

поэтому функции динамической индикации сугубо до лампочки знаки, цифры, буквы и т.п. - она этими категориями не опрерирует. а вот в подготовке надо проанализировать знак и поставить нужный бит - это правильно. если смешивать в кучу процессы ОТОБРАЖЕНИЯ и ПОДГОТОВКИ данных - получится фарш.

Брайан Керниган сказал про Си: "Си — это инструмент, острый, как бритва: с его помощью можно создать и элегантную программу, и кровавое месиво". не создавайте месиво!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: код корректен " napr=(ADCW*2.438-100)*-1; "

Сообщение TICLIR »

Спасибо. Я даже,догадывался, но ВЫ развеели все мои сомнения.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»