//--------------------------------------------------------------------------- #include #pragma hdrstop #include "Sample0Unit.h" #include "ACCES32.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TSample0Form *Sample0Form; unsigned int BaseAddress, AIM32Addr; TLabel *VoltsLabelsArray[32]; TLabel *ChannelLabelsArray[32]; unsigned CalSpace, Ended, Range, Mode; double Gain; bool EEPROMReady = false; //--------------------------------------------------------------------------- __fastcall TSample0Form::TSample0Form(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TSample0Form::ExitButtonClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TSample0Form::FormCreate(TObject *Sender) { VoltsLabelsArray[0] = VoltsLabel0; VoltsLabelsArray[1] = VoltsLabel1; VoltsLabelsArray[2] = VoltsLabel2; VoltsLabelsArray[3] = VoltsLabel3; VoltsLabelsArray[4] = VoltsLabel4; VoltsLabelsArray[5] = VoltsLabel5; VoltsLabelsArray[6] = VoltsLabel6; VoltsLabelsArray[7] = VoltsLabel7; VoltsLabelsArray[8] = VoltsLabel8; VoltsLabelsArray[9] = VoltsLabel9; VoltsLabelsArray[10] = VoltsLabel10; VoltsLabelsArray[11] = VoltsLabel11; VoltsLabelsArray[12] = VoltsLabel12; VoltsLabelsArray[13] = VoltsLabel13; VoltsLabelsArray[14] = VoltsLabel14; VoltsLabelsArray[15] = VoltsLabel15; VoltsLabelsArray[16] = VoltsLabel16; VoltsLabelsArray[17] = VoltsLabel17; VoltsLabelsArray[18] = VoltsLabel18; VoltsLabelsArray[19] = VoltsLabel19; VoltsLabelsArray[20] = VoltsLabel20; VoltsLabelsArray[21] = VoltsLabel21; VoltsLabelsArray[22] = VoltsLabel22; VoltsLabelsArray[23] = VoltsLabel23; VoltsLabelsArray[24] = VoltsLabel24; VoltsLabelsArray[25] = VoltsLabel25; VoltsLabelsArray[26] = VoltsLabel26; VoltsLabelsArray[27] = VoltsLabel27; VoltsLabelsArray[28] = VoltsLabel28; VoltsLabelsArray[29] = VoltsLabel29; VoltsLabelsArray[30] = VoltsLabel30; VoltsLabelsArray[31] = VoltsLabel31; ChannelLabelsArray[0] = ChannelLabel0; ChannelLabelsArray[1] = ChannelLabel1; ChannelLabelsArray[2] = ChannelLabel2; ChannelLabelsArray[3] = ChannelLabel3; ChannelLabelsArray[4] = ChannelLabel4; ChannelLabelsArray[5] = ChannelLabel5; ChannelLabelsArray[6] = ChannelLabel6; ChannelLabelsArray[7] = ChannelLabel7; ChannelLabelsArray[8] = ChannelLabel8; ChannelLabelsArray[9] = ChannelLabel9; ChannelLabelsArray[10] = ChannelLabel10; ChannelLabelsArray[11] = ChannelLabel11; ChannelLabelsArray[12] = ChannelLabel12; ChannelLabelsArray[13] = ChannelLabel13; ChannelLabelsArray[14] = ChannelLabel14; ChannelLabelsArray[15] = ChannelLabel15; ChannelLabelsArray[16] = ChannelLabel16; ChannelLabelsArray[17] = ChannelLabel17; ChannelLabelsArray[18] = ChannelLabel18; ChannelLabelsArray[19] = ChannelLabel19; ChannelLabelsArray[20] = ChannelLabel20; ChannelLabelsArray[21] = ChannelLabel21; ChannelLabelsArray[22] = ChannelLabel22; ChannelLabelsArray[23] = ChannelLabel23; ChannelLabelsArray[24] = ChannelLabel24; ChannelLabelsArray[25] = ChannelLabel25; ChannelLabelsArray[26] = ChannelLabel26; ChannelLabelsArray[27] = ChannelLabel27; ChannelLabelsArray[28] = ChannelLabel28; ChannelLabelsArray[29] = ChannelLabel29; ChannelLabelsArray[30] = ChannelLabel30; ChannelLabelsArray[31] = ChannelLabel31; CalSpace = 0; Ended = 1; Range = 0; Gain = 0.5; if (InPortB(0x61) == 0xAA55) { Application->MessageBox("ACCESNT.SYS not detected. Please copy ACCESNT.SYS into [NT]/system32/drivers and re-run this sample.", "Warning", IDOK); } } //--------------------------------------------------------------------------- void __fastcall TSample0Form::TestButtonClick(TObject *Sender) { if (TestTimer->Enabled == true) { TestTimer->Enabled = false; TestButton->Caption = "Start Test"; BaseEdit->Enabled = true; AIM32Edit->Enabled = true; } // end if else { TestButton->Caption = "Abort Test"; BaseEdit->Enabled = false; AIM32Edit->Enabled = false; BaseAddress = StrToInt("0x" + BaseEdit->Text); AIM32Addr = StrToInt("0x" + AIM32Edit->Text); OutPort(AIM32Addr + 1, 0x10 + Ended + CalSpace); TestTimer->Enabled = true; } // end else } //--------------------------------------------------------------------------- void __fastcall TSample0Form::TestTimerTimer(TObject *Sender) { int chan, counts, MaxChannels; unsigned long timeout; double volts; if (Ended == 0) MaxChannels = 16; else MaxChannels = 32; for (chan = 0; chan < MaxChannels; chan++) { timeout = 65535; OutPortB(AIM32Addr, chan + Range); // write AIM-32 channel while (CheckForBusy(AIM32Addr + 1) && (timeout > 0)) timeout--; timeout = 65535; OutPortB(BaseAddress + 2, 0); // write channel while (!CheckForEOC(BaseAddress) && (timeout > 0)) timeout--; if (timeout == 0) { VoltsLabelsArray[chan]->Caption = "A/D Timeout"; } // end if timeout else { counts = InPort(BaseAddress + 2); volts = ((counts & 0xFFF) * (5.0 / Gain)) / 4096.0; TVarRec args[1] = {volts}; VoltsLabelsArray[chan]->Caption = Format("%9.8f", args, 0); } // end else } // end for chan } //--------------------------------------------------------------------------- bool TSample0Form::CheckForEOC(int Address) { byte EOCCheck; EOCCheck = InPortB(Address); return ((EOCCheck & 0x80) == 0x80); } void __fastcall TSample0Form::EndGroupClick(TObject *Sender) { int i; if (EndGroup->ItemIndex == 0) { Ended = 1; Channel2Label->Visible = true; Volts2Label->Visible = true; for (i = 16; i < 32; i++) { ChannelLabelsArray[i]->Visible = true; VoltsLabelsArray[i]->Visible = true; } // end for i } // end if else if (EndGroup->ItemIndex == 1) { Ended = 0; Channel2Label->Visible = false; Volts2Label->Visible = false; for (i = 16; i < 32; i++) { ChannelLabelsArray[i]->Visible = false; VoltsLabelsArray[i]->Visible = false; } // end for i } // end elseif OutPortB(AIM32Addr + 1, Ended + CalSpace + 0x10); } //--------------------------------------------------------------------------- void __fastcall TSample0Form::GainComboBoxChange(TObject *Sender) { Gain = StrToFloat(GainComboBox->Text); if (Gain == 0.5) Range = 0x00; else if (Gain == 1) Range = 0x20; else if (Gain == 2) Range = 0x40; else if (Gain == 50) Range = 0x60; else if (Gain == 100) Range = 0x80; else if (Gain == 200) Range = 0xA0; } //--------------------------------------------------------------------------- bool TSample0Form::CheckForBusy(int Address) { byte BusyCheck; BusyCheck = InPortB(Address); return ((BusyCheck & 0x40) == 0x40); }