реклама на сайте
подробности

 
 
> Вычисления с помощью макросов, Проблема с выводом значения в реальном времени
alux
сообщение Mar 25 2008, 18:00
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Вывожу на ЖКИ 24-битное значение adc_value АЦП с периодом 1 сек. Это значение используется для вычисления дифференциального давления, которое вычисляется по формуле.

Если попытаться выводить сразу в пересчитанное значение дифф. давления, то возникает проблема (виснет программа), хотя по идее макрос заменяется своим определением во время работы препроцессора, поэтому не вызывает затрат времени. И стек не должен потреблять на мой взгляд.
Код
#define Vref          5.0  
#define GAIN         64.0      // Gain
#define STEPS_B    8388608.0 // Full-Scale 2^(24-1) for bipolar operation
#define SPAN          16.7      // Span (mV) of Pressure Sensors = 1 psi
#define mm_Hg       51.714   // мм. рт. ст. (@ 0 гр. C)

#define Vin(adc_value) (((((adc_value)/STEPS_B) - 1.0)*Vref)/GAIN)

diffPressure = (Vin(adc_value)/SPAN)*mm_Hg;
Почему так происходит? Как мне выводить значение давления в реальном времени? Это работает под управлением ОС (scmRTOS).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
tag
сообщение Mar 26 2008, 08:46
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(alux @ Mar 25 2008, 21:00) *
Вывожу на ЖКИ 24-битное значение adc_value АЦП с периодом 1 сек. Это значение используется для вычисления дифференциального давления, которое вычисляется по формуле.


...а вы для вывода sprintf используете?
Go to the top of the page
 
+Quote Post
alux
сообщение Mar 26 2008, 09:20
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(tag @ Mar 26 2008, 12:46) *
...а вы для вывода sprintf используете?
Нет, от них избавился. Заменил на ftoa
Код
//------------------------------------------------------------------------------
// Вывод результатов измерения на ЖКИ
//------------------------------------------------------------------------------
class TReDraw : public TMsg    
{
public:
//  TReDraw();
  virtual void run()
  {
    TCritSect cs;
        
    ks0108FillRect(0, 11, 80, 9, WHITE);  
    ftoa(diffPressure, lcd_buf, 2, 0);            // Динамическое давление
//    itoa((unsigned int)diffPressure);
    ks0108GotoXY(0, 11);
    ks0108PutStr(lcd_buf);
  ....................
// вывод других переменных на экран
  }
};
На всякий случай приведу еще и код ftoa:
Код
char* ftoa(double v, char *s, unsigned char decimals, bool sign)
{
     unsigned long i, f;

     if(v < 0)
     {
         *s++ = '-';
         v = -v;
     }
     else if(sign)
         *s++ = '+';

     if(v >= 1.0)
     {
         i = (unsigned long)v;
         v = v - (double)i;
         s = ultoa(i, s);
     }
     else
         *s++ = '0';

     if(decimals > 0)
     {
         *s++ = '.';
         for (; decimals > 0; decimals--)
             v = v * 10;
         f = (unsigned long)v;
         s = ultoa(f, s);
     }

     *s = '\0';
     return s;
}


//----------------------------------------------------------------------------
char* ultoa(unsigned long x, char *s)
{
     unsigned long r;
    
       ldiv_t DivRes;

      DivRes = ldiv(x, 10);
      r = '0' + DivRes.rem;
      x = DivRes.quot;

//     r = (x % 10) + '0';
//     x = x / 10;        

     if (x != 0)
         s = ultoa(x, s);

     *s = r;             // Built the str when nesting back
     *(s + 1) = '\0';

     return s + 1;
}
Замена ftoa на itoa не дало положительного результата (в смысле, проблема осталась). Но ведь значения АЦП в doable выводит нормально через ftoa хоть в этой ф-ции используется рекурсия. В симуляторе проверил время выполнения ReDraw одной double переменной на экране. Это заняло 1ms при 8 Мгц. На мой взгляд проблема в чем-то другом.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alux   Вычисления с помощью макросов   Mar 25 2008, 18:00
- - meister   diffPressure = (Vin(0)/SPAN)*mm_Hg; Тоже виснет?   Mar 25 2008, 18:49
- - singlskv   Цитата(alux @ Mar 25 2008, 21:00) Вывожу ...   Mar 25 2008, 18:54
|- - alux   Цитата(singlskv @ Mar 25 2008, 22:54) ну ...   Mar 25 2008, 19:10
|- - singlskv   Цитата(alux @ Mar 25 2008, 22:10) В форму...   Mar 25 2008, 22:14
||- - alux   Цитата(singlskv @ Mar 26 2008, 02:14) А В...   Mar 26 2008, 07:22
|- - meister   Цитата(alux @ Mar 25 2008, 22:10) Так не ...   Mar 26 2008, 04:38
- - rezident   alux, у вас оптимизация при компиляции используетс...   Mar 25 2008, 22:39
|- - tag   Цитата(alux @ Mar 26 2008, 12:20) В симул...   Mar 26 2008, 10:50
|- - alux   Цитата(tag @ Mar 26 2008, 14:50) ...а вси...   Mar 26 2008, 13:28
|- - tag   Цитата(alux @ Mar 26 2008, 16:28) Из него...   Mar 27 2008, 06:16
|- - alux   Цитата(tag @ Mar 27 2008, 10:16) Если adc...   Mar 27 2008, 06:45
|- - Сергей Борщ   Цитата(alux @ Mar 27 2008, 08:45) Если пе...   Mar 27 2008, 10:28
|- - alux   Цитата(Сергей Борщ @ Mar 27 2008, 13:28) ...   Apr 8 2008, 10:42
|- - Сергей Борщ   Цитата(alux @ Apr 8 2008, 13:42) Здесь вы...   Apr 8 2008, 15:15
- - alux   В общем, сделал так: Код#define Kp (Vref*mm_...   Mar 27 2008, 10:59
|- - Сергей Борщ   Цитата(alux @ Mar 27 2008, 12:59) Здесь а...   Mar 27 2008, 14:18
|- - alux   Цитата(Сергей Борщ @ Mar 27 2008, 18:18) ...   Mar 27 2008, 15:35
||- - Сергей Борщ   Цитата(alux @ Mar 27 2008, 17:35) И, соот...   Mar 27 2008, 16:39
|- - alux   Цитата(Сергей Борщ @ Mar 27 2008, 18:18) ...   Mar 27 2008, 18:22
|- - IgorKossak   Цитата(alux @ Mar 27 2008, 20:22) PS. Вко...   Mar 27 2008, 20:43
|- - alux   Цитата(IgorKossak @ Mar 28 2008, 00:43) Р...   Mar 28 2008, 05:24
- - alux   На этот раз стек здесь ни при чем. Проблема была в...   Mar 29 2008, 19:45
- - alux   И еще один маленький, но очень большой вопрос. Как...   Apr 9 2008, 08:18


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 12:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01436 секунд с 7
ELECTRONIX ©2004-2016