Added Software projects

git-svn-id: file:///srv/dev-disk-by-uuid-17e88007-4d0c-45e0-8757-cacfcc458630/repositories/svn/Diplomarbeit@55 9fe90eed-be63-e94b-8204-d34ff4c2ff93
This commit is contained in:
Matthias
2008-12-23 10:34:08 +00:00
parent ee5a771818
commit 373a8c32b2
348 changed files with 86781 additions and 0 deletions
+413
View File
@@ -0,0 +1,413 @@
/* ---------------------------------------------------------------------------
* testaio.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:
* Analogue Test File
*
* Note:
* Output 0 is connected to Input 0 and 4
* Output 1 is connected to Input 1 and 5
* Output 2 is connected to Input 2 and 6
* Output 3 is connected to Input 3 and 7
*
*
* ---------------------------------------------------------------------------
* Version(s): 0.1, Sep 08, 2008, MMi
* Creation.
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* System include files
* ---------------------------------------------------------------------------
*/
#include "lpc23xx.h"
#include "types.h"
/* FreeRTOS includes */
#include "FreeRTOS.h"
#include "Task.h"
/* ---------------------------------------------------------------------------
* Application include files
* ---------------------------------------------------------------------------
*/
#include "adc.h"
#include "dac.h"
#include "dio.h"
#include "testaio.h"
#include "calibrateaio.h"
#include "SerOut.h"
#include "BusProtocol.h"
#include "remote_misc.h"
/* ---------------------------------------------------------------------------
* Local constant and macro definitions
* ---------------------------------------------------------------------------
*/
#define NumberOfAIs maxADC_Channels /* See adc.h */
#define NumberOfAIOs maxDAC_Channels /* See dac.h */
#define vTestValue 5000 /* Value for Test Voltage Output in mV */
#define cTestValue 10000 /* Value for Test Current Output in uA */
#define vNullValue 0
#define cNullValue 0
#define vLimit 20 /* Test Limit for Voltage Test */
#define cLimit 100 /* Test Limit for Current Test */
#define vNullLimit 50 /* Test Limit for NULL-Voltage Test */
#define cNullLimit 50 /* Test Limit for NULL-Current Test */
#define TestDelay 200
#define VoltageOutputCalibrationValue 10000 /* Calibration Value for V */
#define CurrentOutputCalibrationValue 20000 /* Calibration Value for C */
#define VoltageOutputTestValue 7000 /* Remote Test Value for V */
#define CurrentOutputTestValue 15000 /* Remote Test Value for C */
#define ident_calibrated 0x55 /* Calibrated status identifier */
#define ident_default 0xAA /* Default status identifier */
/* ---------------------------------------------------------------------------
* Global variable definitions
* ---------------------------------------------------------------------------
*/
/* Bus informations from protocolfunctions.c */
extern UINT8 remoteDeviceNumber;
extern UINT8 thisDeviceNumber;
/* ---------------------------------------------------------------------------
* Local variable definitions
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* Local function definitions
* ---------------------------------------------------------------------------
*/
BOOLEAN testaioStart (void)
{
BOOLEAN AIOTestResult = FALSE; /* BOOLEAN Variable to return Result*/
BOOLEAN VoltageTest_MB;
BOOLEAN CurrentTest_MB;
BOOLEAN VoltageTest_EB;
BOOLEAN CurrentTest_EB;
/* Do analogue line test for Mainboard Connectors */
VoltageTest_MB = doAIOVoltageTest(); /* Call Test Function */
CurrentTest_MB = doAIOCurrentTest();
// \MARK NEW PINSETTINGS FOR TESTER (2)
#if (PINSET_TESTER == 2)
/* Enable extension-board channels by switching multiplexers */
adc_MuxEn(TRUE);
dac_MuxEn(TRUE);
/* Do analogue line test for extension Board Connectors */
VoltageTest_EB = doAIOVoltageTest(); /* Call Test Function */
CurrentTest_EB = doAIOCurrentTest();
/* Switch off multiplexers again to main-board connectors */
adc_MuxEn(FALSE);
dac_MuxEn(FALSE);
#endif
if ((VoltageTest_MB == TRUE) && (CurrentTest_MB == TRUE)
// \MARK NEW PINSETTINGS FOR TESTER (2)
#if (PINSET_TESTER == 2)
&& (VoltageTest_EB == TRUE) && (CurrentTest_EB == TRUE)
#endif
)
{
AIOTestResult = TRUE;
}
else
{
AIOTestResult = FALSE;
}
return (AIOTestResult); /* Return Test Result */
}
BOOLEAN doAIOVoltageTest (void)
{
UINT32 aiocnt;
BOOLEAN AIOLineTestResult = FALSE;
BOOLEAN LowTest = TRUE;
BOOLEAN AllOtherTest = TRUE;
BOOLEAN HighTest = TRUE;
UINT32 LowBuffer;
BOOLEAN AllOtherBuffer;
UINT32 HighBuffer;
SetAnalogueInput(FALSE); /* Set Analogue Input to Voltage */
dacMode (0, dacVOLTAGE); /* Set Output Types to Voltage */
dacMode (1, dacVOLTAGE);
dacMode (2, dacVOLTAGE);
dacMode (3, dacVOLTAGE);
dacWrite (thisDeviceNumber, 0, vNullValue); /* Write 0 Volts to Output */
dacWrite (thisDeviceNumber, 1, vNullValue);
dacWrite (thisDeviceNumber, 2, vNullValue);
dacWrite (thisDeviceNumber, 3, vNullValue);
vTaskDelay (TestDelay);
sendString (SerOutPort, FALSE, testMessage, NewLine,
"\tVoltage Test Value: ", ItoDStr (vTestValue));
sendString (SerOutPort, FALSE, testMessage,
"\t\tTolerance: ", ItoDStr (vLimit), Dummy);
for (aiocnt = 0; aiocnt < NumberOfAIs; aiocnt++) /*Test Line by Line */
{
/* Test if Input Voltage is below NullLimit */
if ((LowBuffer = adcRead (thisDeviceNumber, aiocnt)) > vNullLimit)
{
LowTest = FALSE; /* Failed, then set Test failed */
}
/* Write chosen Output to Test Value */
if (aiocnt < NumberOfAIOs)
{
dacWrite (thisDeviceNumber, aiocnt, vTestValue);
}
else /* if selected Input is > possible */
{ /* Outputs, restart at Output 0 */
dacWrite (thisDeviceNumber, (aiocnt - NumberOfAIOs), vTestValue);
}
vTaskDelay (TestDelay); /* Wait for Output to be set */
/* Check if all other Inputs are Zero */
if ((AllOtherBuffer = CheckAllOtherAIOZero(aiocnt, TRUE)) == FALSE)
{
AllOtherTest = FALSE;
}
/* Read Test Level on Input */
HighBuffer = adcRead (thisDeviceNumber, aiocnt);
if ((HighBuffer < (vTestValue - vLimit))
|| (HighBuffer > (vTestValue + vLimit))) // \TODO is this working???
{ /* Is read Value in the Limits? */
HighTest = FALSE;
}
/* Write chosen Output back to Null */
if (aiocnt < NumberOfAIOs)
{
dacWrite (thisDeviceNumber, aiocnt, vNullValue);
}
else /* if selected Input is > possible */
{ /* Outputs, restart at Output 0 */
dacWrite (thisDeviceNumber, (aiocnt - NumberOfAIOs), vNullValue);
}
/* Message out Test Results */
sendString (SerOutPort, TRUE, testMessage,
"\tVoltage Test for Analogue Input ", ItoDStr(aiocnt), ": ");
sendString (SerOutPort, FALSE, testMessage,
" ", Dummy, ItoDStr (LowBuffer));
sendString (SerOutPort, FALSE, testMessage,
" ", Dummy, ItoDStr (HighBuffer));
sendString (SerOutPort, FALSE, testMessage,
" All Other: ", Dummy, BoolRestoStr (AllOtherBuffer));
vTaskDelay (TestDelay);
}
/* Set complete LineTestResult */
if ((LowTest == TRUE) && (HighTest == TRUE) && (AllOtherTest == TRUE))
{
AIOLineTestResult = TRUE;
}
return (AIOLineTestResult);
}
BOOLEAN doAIOCurrentTest (void)
{
UINT32 aiocnt;
UINT32 LowBuffer;
UINT32 HighBuffer;
BOOLEAN AIOCurrentTest = TRUE;
BOOLEAN LowTest;
BOOLEAN HighTest;
dacMode (0, dacCURRENT); /* Set Output Types to Current */
dacMode (1, dacCURRENT);
dacMode (2, dacCURRENT);
dacMode (3, dacCURRENT);
dacWrite (thisDeviceNumber, 0, cNullValue); /* Write 0 uA to Output */
dacWrite (thisDeviceNumber, 1, cNullValue);
dacWrite (thisDeviceNumber, 2, cNullValue);
dacWrite (thisDeviceNumber, 3, cNullValue);
vTaskDelay (TestDelay);
sendString (SerOutPort, TRUE, testMessage, NewLine,
"\tCurrent Test Value: ", ItoDStr (cTestValue));
sendString (SerOutPort, FALSE, testMessage,
"\t\tTolerance: ", ItoDStr (cLimit), Dummy);
for (aiocnt = 0; aiocnt < NumberOfAIs; aiocnt++)
{
adcMode( aiocnt, adcCURRENT ); /* Inputs set to Current */
vTaskDelay (200);
/* Read back the low Value on Input */
LowBuffer = adcRead (thisDeviceNumber, aiocnt);
if (LowBuffer < cNullLimit)
{
/* If read Value is within the Limit, test passed */
LowTest = TRUE;
}
else
{
/* If read Value is out of Limit, test failed */
LowTest = FALSE;
}
/* Write Output to defined Test Value */
if (aiocnt < NumberOfAIOs)
{
dacWrite(thisDeviceNumber, aiocnt, cTestValue);
}
else
{
dacWrite(thisDeviceNumber, (aiocnt - NumberOfAIOs), cTestValue);
}
vTaskDelay (500);
HighBuffer = adcRead(thisDeviceNumber, aiocnt);
if ((HighBuffer < (cTestValue - cLimit))
|| (HighBuffer > (cTestValue + cLimit)))
{
/* If read Value is within the Limit, test passed */
HighTest = FALSE;
}
else
{
/* If read Value is out of Limit, test failed */
HighTest = TRUE;
}
/* Drive Output back to Zero Value */
if (aiocnt < NumberOfAIOs)
{
dacWrite(thisDeviceNumber, aiocnt, cNullValue);
}
else
{
dacWrite(thisDeviceNumber, (aiocnt - NumberOfAIOs), cNullValue);
}
/* Set Input Mode to Voltage to prevent of leek Current */
adcMode (aiocnt, adcVOLTAGE);
/* Message out Test Results */
sendString (SerOutPort, TRUE, testMessage,
"\tCurrent Test for Analogue Input ", ItoDStr(aiocnt), ": ");
sendString (SerOutPort, FALSE, testMessage,
" ", Dummy, ItoDStr (LowBuffer));
sendString (SerOutPort, FALSE, testMessage,
" ", Dummy, ItoDStr (HighBuffer));
/* Set complete LineTestResult */
if ((LowTest != TRUE) || (HighTest != TRUE))
{
AIOCurrentTest = FALSE;
}
}
return (AIOCurrentTest);
}
BOOLEAN CheckAllOtherAIOZero (UINT32 AIONumber, BOOLEAN local)
{
UINT32 loopcnt;
BOOLEAN AllZeroResult = TRUE;
for (loopcnt = 0; loopcnt < NumberOfAIs; loopcnt++) /* Test Line by Line*/
{
if ((loopcnt == AIONumber) || /* except currently tested Input */
(loopcnt == (AIONumber + NumberOfAIOs)) ||
(loopcnt == (AIONumber - NumberOfAIOs)))
{
if (loopcnt < (NumberOfAIOs - 1))
{
loopcnt++; /* Skip currently tested Output */
}
else
{
break; /* If tested Output is the last one,*/
} /* simply break out of loop */
}
if (local == TRUE)
{
if (adcRead (thisDeviceNumber, loopcnt) > vNullLimit)
{ /* If Input Value exceeds Limit */
AllZeroResult = FALSE;
}
}
else
{
if (adcRead (remoteDeviceNumber, loopcnt) > vNullLimit)
{ /* If Input Value exceeds Limit */
sendString (SerOutPort, TRUE, testMessage,
"line: ", ItoDStr (loopcnt), Dummy);
sendString (SerOutPort, TRUE, testMessage,
"Value: ",
ItoDStr (adcRead (remoteDeviceNumber, loopcnt)), Dummy);
AllZeroResult = FALSE;
}
vTaskDelay (100);
}
}
return (AllZeroResult);
}
void SetAnalogueInput(BOOLEAN isCurrent)
{
if (isCurrent == TRUE)
{
adcMode( 0, adcCURRENT ); /* Inputs set to Current */
adcMode( 1, adcCURRENT );
adcMode( 2, adcCURRENT );
adcMode( 3, adcCURRENT );
adcMode( 4, adcCURRENT );
adcMode( 5, adcCURRENT );
adcMode( 6, adcCURRENT );
adcMode( 7, adcCURRENT );
}
else
{
adcMode( 0, adcVOLTAGE ); /* Inputs set to Voltage */
adcMode( 1, adcVOLTAGE );
adcMode( 2, adcVOLTAGE );
adcMode( 3, adcVOLTAGE );
adcMode( 4, adcVOLTAGE );
adcMode( 5, adcVOLTAGE );
adcMode( 6, adcVOLTAGE );
adcMode( 7, adcVOLTAGE );
}
}