#ifndef _MeasureH_
#define _MeasureH_
#include "max396.h"
#include "ads1252.h"
class CB_MeasureControl : public TBundle {
public:
port ASEL;
port CLK;
port SCLK;
port DOUT;
virtual void Register() {
regb( ASEL, 3, 0 );
reg( CLK );
reg( SCLK );
reg( DOUT );
}
};
class CM_Measure : public TModule {
public:
CB_MeasureControl MeasCtrl;
port VCC12;
port GND;
port AIN;
CP_REG103UA_5 Regulator;
CP_AD1580 Reference1;
CP_AD1580 Reference2;
CP_AD1580 Reference3;
CP_MAX396CAI Mux;
CP_ADS1252U ADC;
CP_OPA237NA Buffer1;
CP_OPA237NA Buffer2;
CP_R110 Rpwr1;
CP_R4_7K Rpwr2;
CP_R1K Rb;
CP_R4_7K Rin1;
CP_R4_7K Rfb1;
CP_R4_7K Rfb2;
CP_R10K Rdivh;
CP_R10K Rdivl;
CP_R1K Rsclkp;
CP_R1K Rclkp;
CP_R4_7K Rsclks;
CP_R4_7K Rclks;
CP_R4_7K Rdouts;
CP_R360 Rmuxin[ 16 ];
CP_R110 Rpwr3;
CP_CDC_POS CDC[ 7 ];
CP_TDC_POS TDC;
virtual void Register() {
reg( MeasCtrl );
reg( VCC12 );
reg( GND );
regb( AIN, 13, 0 );
reg( Regulator );
reg( Reference1 );
reg( Reference2 );
reg( Reference3 );
reg( Mux );
reg( ADC );
reg( Buffer1 );
reg( Buffer2 );
reg( Rpwr1 );
reg( Rpwr2 );
reg( Rb );
reg( Rin1 );
reg( Rfb1 );
reg( Rfb2 );
reg( Rdivh );
reg( Rdivl );
reg( Rsclkp );
reg( Rclkp );
reg( Rsclks );
reg( Rclks );
reg( Rdouts );
rega( Rmuxin, 16 );
reg( Rpwr3 );
rega( CDC, 7 );
reg( TDC );
}
virtual void Connect() {
wireall( GND );
wireall( "/NC", "NC" );
VCC12 ^ Rpwr1 ^ "VCC11A" ^ Rpwr3 ^ "VCC10A";
"VCC10A" ^ Rpwr2 ^ "VCCMUX";
"VCC10A" << Regulator.INPUT
<< Regulator.ENABLE;
"VCC5A" << Regulator.OUTPUT;
"/NC" << Regulator.NR;
"/NC" << Regulator.ERROR_N;
"VCC5A" << TDC.POS;
"VCC5A" << CDC[ 0 ].POS;
"VCC5A" << CDC[ 1 ].POS;
"VCC5A" << CDC[ 2 ].POS;
"DIV2" << CDC[ 3 ].POS;
"REF1" << CDC[ 4 ].POS;
"REF3" << CDC[ 5 ].POS;
"VCC10A" << CDC[ 6 ].POS;
"VCC10A" << Buffer1.VPP; GND << Buffer1.VNN;
"VCC5A" << Buffer2.VPP; GND << Buffer2.VNN;
"MUXOUT" << Mux.COM ^ Rin1 ^ "IN_P1" << Buffer1.IN_P;
"IN_N1" << Buffer1.IN_N ^ Rfb1 ^ "OUT1" << Buffer1.OUT;
"IN_N2" << Buffer2.IN_N ^ Rfb2 ^ "OUT2" << Buffer2.OUT;
"OUT1" ^ Rdivh ^ "DIV2" << Buffer2.IN_P ^ Rdivl ^ GND;
"VCC5A" << ADC.VCC5;
"OUT2" << ADC.VIN_P;
"REF1" << ADC.VIN_N;
"REF3" << ADC.VREF;
"VCC5A" ^ Rsclkp ^ MeasCtrl.SCLK ^ Rsclks ^ "ADCSCLK" << ADC.SCLK;
"VCC5A" ^ Rclkp ^ MeasCtrl.CLK ^ Rclks ^ "ADCCLK" << ADC.CLK;
MeasCtrl.DOUT ^ Rdouts ^ "ADCDOUT" << ADC.DOUT;
"REF3" << Reference3.VPP ^ Rb ^ "VCC5A";
"REF2" << Reference2.VPP << Reference3.VNN;
"REF1" << Reference1.VPP << Reference2.VNN;
GND << Reference1.VNN;
"VCCMUX" << Mux.VPP << Mux.EN;
GND << Mux.VNN;
MeasCtrl.ASEL << Mux.A( 3, 0 );
"LOC_MUXIN" << Mux.NO;
for ( int i = 0; i < 14; ++ i ) {
AIN( i ) ^ Rmuxin[ i ] ^ Mux.NO( i );
}
"REF1" ^ Rmuxin[ 14 ] ^ Mux.NO( 14 );
"REF3" ^ Rmuxin[ 15 ] ^ Mux.NO( 15 );
}
};
#endif