f468e09499
git-svn-id: file:///srv/dev-disk-by-uuid-17e88007-4d0c-45e0-8757-cacfcc458630/repositories/svn/Diplomarbeit@131 9fe90eed-be63-e94b-8204-d34ff4c2ff93
345 lines
12 KiB
C
345 lines
12 KiB
C
/* ---------------------------------------------------------------------------
|
|
* test_analogue.c (c) 2008 Micro-key bv
|
|
* ---------------------------------------------------------------------------
|
|
* Micro-key bv
|
|
* Industrieweg 28, 9804 TG Noordhorn
|
|
* Postbus 92, 9800 AB Zuidhorn
|
|
* The Netherlands
|
|
* Tel: +31 594 503020
|
|
* Fax: +31 594 505825
|
|
* Email: support@microkey.nl
|
|
* Web: www.microkey.nl
|
|
* ---------------------------------------------------------------------------
|
|
* Description:
|
|
* ---------------------------------------------------------------------------
|
|
* Version(s): 0.1, Dez 15, 2008, MMi
|
|
* Creation.
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* System include files
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
#include "LPC23xx.h"
|
|
#include "types.h"
|
|
|
|
/* FreeRTOS includes */
|
|
#include "FreeRTOS.h"
|
|
#include "Task.h"
|
|
#include "semphr.h"
|
|
/* ---------------------------------------------------------------------------
|
|
* Application include files
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
#include "test_analogue.h"
|
|
#include "remote_analogue.h"
|
|
#include "adc.h"
|
|
#include "dac.h"
|
|
|
|
#include "remote_tests.h"
|
|
#include "SerOut.h"
|
|
#include "protocolfunctions.h"
|
|
#include "BusProtocol.h"
|
|
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* Local constant and macro definitions
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
#define cTestvalue 15000
|
|
#define cNullvalue 0
|
|
|
|
#define ciTolerance_null 50
|
|
#define ciTolerance_uncal 3500
|
|
#define ciTolerance_cal 50
|
|
|
|
#define coTolerance_null 50
|
|
#define coTolerance_uncal 3500
|
|
#define coTolerance_cal 50
|
|
/* ---------------------------------------------------------------------------
|
|
* Global variable definitions
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* Local variable definitions
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* Local function definitions
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
|
|
BOOLEAN remoteAnalogueLinetestMBExecute (void)
|
|
{
|
|
BOOLEAN returnValue;
|
|
BOOLEAN remoteAnalogueOutput;
|
|
BOOLEAN remoteAnalogueInput;
|
|
|
|
remoteAnalogueOutput = remoteAnalogueOutputTest_MB();
|
|
sendString (SerOutPort, TRUE, resultMessage,
|
|
"remote analogue output: ", f_tab, BoolRestoStr(remoteAnalogueOutput));
|
|
|
|
remoteAnalogueInput = remoteAnalogueInputTest_MB();
|
|
sendString (SerOutPort, TRUE, resultMessage,
|
|
"remote analogue input: ", f_tab, BoolRestoStr(remoteAnalogueInput));
|
|
|
|
if ((remoteAnalogueOutput == TRUE) && (remoteAnalogueInput == TRUE))
|
|
{
|
|
returnValue = TRUE;
|
|
}
|
|
else
|
|
{
|
|
returnValue = FALSE;
|
|
}
|
|
|
|
sendString (SerOutPort, TRUE, resultMessage,
|
|
"remote analogue test: ", f_tab, BoolRestoStr(remoteAnalogueInput));
|
|
|
|
return (returnValue);
|
|
|
|
}
|
|
|
|
|
|
BOOLEAN remoteAnalogueLinetestEBExecute (void)
|
|
{
|
|
// \MARK NEW PINSETTINGS FOR TESTER (2)
|
|
#if (PINSET_TESTER == 2)
|
|
BOOLEAN remoteAnalogueOutput;
|
|
BOOLEAN remoteAnalogueInput;
|
|
|
|
remoteAnalogueOutput = remoteAnalogueOutputTest_MB();
|
|
sendString (SerOutPort, TRUE, resultMessage,
|
|
"remote analogue output test: ", f_tab, BoolRestoStr(remoteAnalogueOutput));
|
|
|
|
remoteAnalogueInput = remoteAnalogueInputTest_MB();
|
|
sendString (SerOutPort, TRUE, resultMessage,
|
|
"remote analogue input test: ", f_tab, BoolRestoStr(remoteAnalogueInput));
|
|
|
|
if ((remoteAnalogueOutput == TRUE) && (remoteAnalogueInput == TRUE))
|
|
{
|
|
returnValue = TRUE;
|
|
}
|
|
else
|
|
{
|
|
returnValue = FALSE;
|
|
}
|
|
|
|
return (returnValue);
|
|
#else
|
|
sendString (SerOutPort, TRUE, importantMessage,
|
|
"Extension Board test not available on this device", Dummy, Dummy);
|
|
|
|
return (FALSE);
|
|
#endif
|
|
}
|
|
|
|
BOOLEAN remoteAnalogueOutputTest_MB (void)
|
|
{
|
|
UINT32 loopcnt;
|
|
UINT32 channelcnt;
|
|
UINT32 testTolerance;
|
|
UINT32 lowRead;
|
|
UINT32 highRead;
|
|
|
|
BOOLEAN returnResult = TRUE;
|
|
BOOLEAN Low_Test = TRUE;
|
|
BOOLEAN High_Test = TRUE;
|
|
BOOLEAN AllOther_Test = TRUE;
|
|
|
|
|
|
// \TODO SET TEST TOLERANCE DEPENDING ON THE CALIBRATION STATUS
|
|
testTolerance = coTolerance_uncal;
|
|
|
|
adcModeAll(adcCURRENT); /* Set local ADC to mode CURRENT*/
|
|
remoteAioWriteAll(remoteDeviceNumber, analogue_mb, cNullvalue);
|
|
vTaskDelay (500);
|
|
|
|
sendString (SerOutPort, FALSE, testMessage, NewLine,
|
|
"\tCurrent Test Value: ", ItoDStr (cTestvalue));
|
|
sendString (SerOutPort, FALSE, testMessage,
|
|
"\t\tTolerance: ", ItoDStr (testTolerance), Dummy);
|
|
|
|
for (channelcnt = 0; channelcnt < NUMBER_OF_AO_MB; channelcnt++)
|
|
{
|
|
lowRead = adcRead(thisDeviceNumber, channelcnt);
|
|
if (lowRead < (cNullvalue + coTolerance_null))
|
|
{
|
|
/* Read a null-like value - LOW test passed */
|
|
}
|
|
else
|
|
{
|
|
/* Read a too high value - LOW test failed */
|
|
Low_Test = FALSE;
|
|
}
|
|
|
|
remoteAioWrite(remoteDeviceNumber, channelcnt, cTestvalue);
|
|
vTaskDelay (500);
|
|
highRead = adcRead(thisDeviceNumber, channelcnt);
|
|
|
|
if ((highRead < (cTestvalue + testTolerance)) && (highRead > (cTestvalue - testTolerance)))
|
|
{
|
|
/* Read a value within the test tolerances - High test passed */
|
|
}
|
|
else
|
|
{
|
|
/* read a value out of the test tolerances - High test failed */
|
|
High_Test = FALSE;
|
|
}
|
|
|
|
for (loopcnt = 0; loopcnt < NUMBER_OF_AO_MB; loopcnt++)
|
|
{
|
|
if (loopcnt == channelcnt)
|
|
{
|
|
/* Skip actual test channel */
|
|
}
|
|
else
|
|
{
|
|
/* Check channel for remaining LOW */
|
|
if (adcRead(thisDeviceNumber, loopcnt) >= (cNullvalue + coTolerance_null))
|
|
{
|
|
/* Actual channels value too high, AllOther test failed */
|
|
AllOther_Test = FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
remoteAioWrite(remoteDeviceNumber, channelcnt, cNullvalue);
|
|
|
|
/* Message out Test Results */
|
|
sendString (SerOutPort, TRUE, testMessage,
|
|
"\tCurrent Test for Analogue Input ", ItoDStr(channelcnt), ": ");
|
|
sendString (SerOutPort, FALSE, testMessage,
|
|
" ", Dummy, ItoDStr (lowRead));
|
|
sendString (SerOutPort, FALSE, testMessage,
|
|
" ", Dummy, ItoDStr (highRead));
|
|
sendString (SerOutPort, FALSE, testMessage,
|
|
" All Other: ", Dummy, BoolRestoStr (AllOther_Test));
|
|
|
|
if ((Low_Test == FALSE) || (High_Test == FALSE) || (AllOther_Test == FALSE))
|
|
{
|
|
returnResult = FALSE;
|
|
}
|
|
}
|
|
|
|
return (returnResult);
|
|
}
|
|
|
|
|
|
|
|
BOOLEAN remoteAnalogueInputTest_MB (void)
|
|
{
|
|
UINT32 loopcnt;
|
|
UINT32 channelcnt;
|
|
UINT32 testTolerance;
|
|
UINT32 lowRead;
|
|
UINT32 highRead;
|
|
|
|
BOOLEAN returnResult = TRUE;
|
|
BOOLEAN Low_Test = TRUE;
|
|
BOOLEAN High_Test = TRUE;
|
|
BOOLEAN AllOther_Test = TRUE;
|
|
|
|
// \TODO SET TEST TOLERANCE DEPENDING ON THE CALIBRATION STATUS
|
|
testTolerance = coTolerance_uncal;
|
|
|
|
dacModeAll(dacCURRENT); /* Set local DAC to mode CURRENT*/
|
|
/* Reset all local DAC channels to zero ampere */
|
|
for (loopcnt = 0; loopcnt < maxDAC_Channels; loopcnt++)
|
|
{
|
|
dacWrite(thisDeviceNumber, loopcnt, cNullvalue);
|
|
}
|
|
|
|
vTaskDelay (500);
|
|
|
|
sendString (SerOutPort, FALSE, testMessage, NewLine,
|
|
"\tCurrent Test Value: ", ItoDStr (cTestvalue));
|
|
sendString (SerOutPort, FALSE, testMessage,
|
|
"\t\tTolerance: ", ItoDStr (testTolerance), Dummy);
|
|
|
|
for (channelcnt = 0; channelcnt < NUMBER_OF_AI_MB; channelcnt++)
|
|
{
|
|
lowRead = remoteAioRead(remoteDeviceNumber, channelcnt);
|
|
if (lowRead < (cNullvalue + testTolerance))
|
|
{
|
|
/* Read a null-like value - LOW test passed */
|
|
Low_Test = TRUE;
|
|
}
|
|
else
|
|
{
|
|
/* Read a too high value - LOW test failed */
|
|
Low_Test = FALSE;
|
|
}
|
|
|
|
dacWrite(thisDeviceNumber, channelcnt, cTestvalue);
|
|
vTaskDelay (200);
|
|
highRead = remoteAioRead(remoteDeviceNumber, channelcnt);
|
|
|
|
if ((highRead < (cTestvalue + testTolerance)) && (highRead > (cTestvalue - testTolerance)))
|
|
{
|
|
/* Read a value within the test tolerances - High test passed */
|
|
High_Test = TRUE;
|
|
}
|
|
else
|
|
{
|
|
/* read a value out of the test tolerances - High test failed */
|
|
High_Test = FALSE;
|
|
}
|
|
|
|
remoteAioReadAll(remoteDeviceNumber, analogue_mb);
|
|
vTaskDelay (200);
|
|
|
|
for (loopcnt = 0; loopcnt < NUMBER_OF_AO_MB; loopcnt++)
|
|
{
|
|
if (loopcnt == channelcnt)
|
|
{
|
|
/* Skip test channel */
|
|
}
|
|
else
|
|
{
|
|
/* Check actual channel to remain LOW */
|
|
if (remoteAnalogueOutputs[loopcnt] >= (cNullvalue + ciTolerance_null))
|
|
{
|
|
/* Channel should remain LOW - AllOther test failed */
|
|
AllOther_Test = FALSE;
|
|
break; /* Skip rest of loop */
|
|
}
|
|
else
|
|
{
|
|
AllOther_Test = TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
dacWrite(thisDeviceNumber, channelcnt, cNullvalue);
|
|
|
|
/* Message out Test Results */
|
|
sendString (SerOutPort, TRUE, testMessage,
|
|
"\tCurrent Test for Analogue Input ", ItoDStr(channelcnt), ": ");
|
|
sendString (SerOutPort, FALSE, testMessage,
|
|
" ", Dummy, ItoDStr (lowRead));
|
|
sendString (SerOutPort, FALSE, testMessage,
|
|
" ", Dummy, ItoDStr (highRead));
|
|
sendString (SerOutPort, FALSE, testMessage,
|
|
" All Other: ", Dummy, BoolRestoStr (AllOther_Test));
|
|
|
|
if ((Low_Test == FALSE) || (High_Test == FALSE) || (AllOther_Test == FALSE))
|
|
{
|
|
returnResult = FALSE;
|
|
}
|
|
}
|
|
|
|
return (returnResult);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOLEAN remoteAnalogueOutputTest_EB (void)
|
|
{
|
|
|
|
}
|