//--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" #include "acces32.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" unsigned int BASE=0x300; unsigned short jumpers; unsigned char adrange; unsigned char dacBrange; unsigned char dacArange; unsigned char sbitd(unsigned int data,unsigned char bit); double DAC(unsigned char DACnum,double DACV); void EEPROM_Enable(void); void EEPROM_Disable(void); void EEPROM_Write(unsigned int addr,unsigned int data); unsigned int EEPROM_Read(unsigned int addr); void CAL_ADC(unsigned char M,unsigned char B); void CALWrite(unsigned zAM,unsigned zAB,unsigned zDAM,unsigned zDBM); void doCAL(void); void init(void); double readAD(); TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { dac0mult = dac1mult = 0.0; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { addrEDIT->Text = "300"; } //--------------------------------------------------------------------------- //sbitd takes data and bit, then returns 0x81 or 0x01 based on data[bit] unsigned char sbitd(unsigned int data,unsigned char bit) { return (data & (1<>3) & 0x01;//d4,d3 are 5/10 for daca,b dacArange=(jumpers>>4) & 0x01; // CAL(); } double readAD() { //scale counts into AD Range Volts unsigned short data; data = InPort(BASE); return (double(data) / 65536.0 - ((adrange&0x02)?0.5:0.0)) //Adjust for polarity jumper * ((adrange&0x04)?10.0:20.0) //Adjust for gain jumper ; } void __fastcall TForm1::beginBTNClick(TObject *Sender) { BASE = StrToInt("0x" + addrEDIT->Text); init(); doCAL(); channels = jumpers & 0x01 ? 16 : 8; OutPortB(BASE + 0x02, (channels - 1) * 0x10); OutPortB(BASE + 0x01, 0); //reset FIFO OutPortB(BASE + 0x1A, 0x00); //enable software conversion start if (dacArange) dac0LBL->Caption = "DAC 0 output Range is 0 to 5 volts"; else dac0LBL->Caption = "DAC 0 output Range is 0 to 10 volts"; if (dacBrange) dac1LBL->Caption = "DAC 1 output Range is 0 to 5 volts"; else dac1LBL->Caption = "DAC 1 output Range is 0 to 10 volts"; Timer1->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { double temp; Timer1->Enabled = false; for (int count = 0; count < channels; count++) OutPortB(BASE, 0); chnl0EDIT->Text = FloatToStr(readAD()); chnl1EDIT->Text = FloatToStr(readAD()); chnl2EDIT->Text = FloatToStr(readAD()); chnl3EDIT->Text = FloatToStr(readAD()); chnl4EDIT->Text = FloatToStr(readAD()); chnl5EDIT->Text = FloatToStr(readAD()); chnl6EDIT->Text = FloatToStr(readAD()); chnl7EDIT->Text = FloatToStr(readAD()); if (channels == 16) { chnl8EDIT->Text = FloatToStr(readAD()); chnl9EDIT->Text = FloatToStr(readAD()); chnl10EDIT->Text = FloatToStr(readAD()); chnl11EDIT->Text = FloatToStr(readAD()); chnl12EDIT->Text = FloatToStr(readAD()); chnl13EDIT->Text = FloatToStr(readAD()); chnl14EDIT->Text = FloatToStr(readAD()); chnl15EDIT->Text = FloatToStr(readAD()); } dac0EDIT->Text = FloatToStr(DAC(0, dac0mult * (dacArange ? .49 : .99))); dac1EDIT->Text = FloatToStr(DAC(1, dac1mult * (dacBrange ? .49 : .99))); Timer1->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::dac0SPINClick(TObject *Sender, TUDBtnType Button) { if (Button == btNext) dac0mult += 1.0; else dac0mult -= 1.0; if (dac0mult > 10.0) dac0mult = 0.0; else if (dac0mult < 0.0) dac0mult = 10.0; } //--------------------------------------------------------------------------- void __fastcall TForm1::dac1SPINClick(TObject *Sender, TUDBtnType Button) { if (Button == btNext) dac1mult += 1.0; else dac1mult -= 1.0; if (dac1mult > 10.0) dac1mult = 0.0; else if (dac1mult < 0.0) dac1mult = 10.0; } //--------------------------------------------------------------------------- void __fastcall TForm1::StopClick(TObject *Sender) { Timer1->Enabled = false; } //---------------------------------------------------------------------------