- Член од
- 14 август 2006
- Мислења
- 43
- Поени од реакции
- 1
Здраво на сите! Потребна ми е помош околу еден проблем, и ќе сум многу благодарен кога би можеле да ми помогнете. Задачата е на два влезни сигнала. Треба да се пресмета ефективната вредност на двата сигнала и оној сигнал со поголема вредност да го пуштам на излез. Моето решение е:
Ги квадрирам и собирам сите примероци(бројот на примероци е определ број, во мојот случај тој број е 65535. Потоа сумата, којашто е еднаква на сумата од квадратите, ја делам со 65535 и потоа барам корен од тоа. На тој начин ја пресметувам ефективната вредност. Откако ќе ги најдам ефективните вредности, ги споредувам и поголемата ја пуштам на излез.
Мојот код е:
#include <device.h>
#include <math.h>
double result = 0;
double konecen = 0;
double konecen1 = 0;
int32 suma1=0;
int32 suma2=0;
double result1 = 0;
int32 br1=0;
int32 br2=0;
void main()
{
ADC_DelSig_1_Start(); /* Initialize ADC */
for(;
{
AMux_1_Start( ); /* Reset all channels */
AMux_1_Select(0); /* Connect channel 1 */
ADC_DelSig_1_StartConvert();
ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT);
ADC_DelSig_1_StopConvert();
suma1+=ADC_DelSig_1_GetResult16() * ADC_DelSig_1_GetResult16();
br1+=1;
if (br1==65535)
{
result = suma1/65535 ;
konecen = sqrt(result);
}
AMux_1_Select(1); /* Connect channel 2 */
ADC_DelSig_1_StartConvert();
ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT);
suma2+=ADC_DelSig_1_GetResult16() * ADC_DelSig_1_GetResult16();
br2+=1;
if (br2==65535)
{
result1 = suma2/65535 ;
konecen1 = sqrt(result1);
}
if( br1==65535 && br2==65535)
{
br1=0;
br2=0;
suma1=0;
suma2=0;
if(konecen > konecen1)
{
AMux_2_Start( );
AMux_2_Select(0);
}
else
{
AMux_2_Select(1);
}
break;
}
}
}
Дали мислите дека ова ќе работи? Исто така добродојдени се и идеи и сугестии како да се убрза кодот?
Исто така како може да направам конверзија од бинарен запис на конечен и конечен1 во децимален, бидејќи ќе треба да ги прикажам на екран, па ми треба најлесниот начин да го направам тоа? Тоа би требало да изгледа вака:
влезен сигнал1 ефективна вредност=бројка
влезен сигнал2 ефективна вредност=бројка
излез=сигнал1 или сигнал 2(зависно кој е поголем)
И уште нешто. Дали ќе подобро ако ја пресмет ам сумата на квадратите со Interapt рутината на adc? Сите други идеи за решавање на проблемот се добредојдени. Фала однапред на помошта.
Ги квадрирам и собирам сите примероци(бројот на примероци е определ број, во мојот случај тој број е 65535. Потоа сумата, којашто е еднаква на сумата од квадратите, ја делам со 65535 и потоа барам корен од тоа. На тој начин ја пресметувам ефективната вредност. Откако ќе ги најдам ефективните вредности, ги споредувам и поголемата ја пуштам на излез.
Мојот код е:
#include <device.h>
#include <math.h>
double result = 0;
double konecen = 0;
double konecen1 = 0;
int32 suma1=0;
int32 suma2=0;
double result1 = 0;
int32 br1=0;
int32 br2=0;
void main()
{
ADC_DelSig_1_Start(); /* Initialize ADC */
for(;

{
AMux_1_Start( ); /* Reset all channels */
AMux_1_Select(0); /* Connect channel 1 */
ADC_DelSig_1_StartConvert();
ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT);
ADC_DelSig_1_StopConvert();
suma1+=ADC_DelSig_1_GetResult16() * ADC_DelSig_1_GetResult16();
br1+=1;
if (br1==65535)
{
result = suma1/65535 ;
konecen = sqrt(result);
}
AMux_1_Select(1); /* Connect channel 2 */
ADC_DelSig_1_StartConvert();
ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT);
suma2+=ADC_DelSig_1_GetResult16() * ADC_DelSig_1_GetResult16();
br2+=1;
if (br2==65535)
{
result1 = suma2/65535 ;
konecen1 = sqrt(result1);
}
if( br1==65535 && br2==65535)
{
br1=0;
br2=0;
suma1=0;
suma2=0;
if(konecen > konecen1)
{
AMux_2_Start( );
AMux_2_Select(0);
}
else
{
AMux_2_Select(1);
}
break;
}
}
}
Дали мислите дека ова ќе работи? Исто така добродојдени се и идеи и сугестии како да се убрза кодот?
Исто така како може да направам конверзија од бинарен запис на конечен и конечен1 во децимален, бидејќи ќе треба да ги прикажам на екран, па ми треба најлесниот начин да го направам тоа? Тоа би требало да изгледа вака:
влезен сигнал1 ефективна вредност=бројка
влезен сигнал2 ефективна вредност=бројка
излез=сигнал1 или сигнал 2(зависно кој е поголем)
И уште нешто. Дали ќе подобро ако ја пресмет ам сумата на квадратите со Interapt рутината на adc? Сите други идеи за решавање на проблемот се добредојдени. Фала однапред на помошта.