//ADC Initialization void Adc_Init( ) { BitWrPortI( PEDR, &PEDRShadow, HIGH, CS ); //CS high for( i = 0; i < 20; i++); BitWrPortI( PDDR, &PDDRShadow, LOW, SCLK ); //SCLK low BitWrPortI( PEDR, &PEDRShadow, LOW, RESET ); // reset ->low BitWrPortI( PEDR, &PEDRShadow, LOW, CS ); //CS low BitWrPortI( PEDR, &PEDRShadow, HIGH, RESET );// reset ->high //MsDelay( 5000 ); Spi_Write( 0x60 ); // config0 register write command Spi_Write( 0x0A ); // config0 auto scan channel mode Spi_Write( 0x64 ); //command for MUXSG0 selection Spi_Write( 0x00 ); //first 8 channels disabled Spi_Write( 0x65 ); //command for MUXSG1 selection Spi_Write( 0x00 ); //last 8 channels disabled } //to read the ADC output void adc_reading( unsigned long *array ) { unsigned char channel,i,j; unsigned long temp,value; unsigned long prevsample,sample; BitWrPortI( PEDR, &PEDRShadow, LOW, CS ); //CS low BitWrPortI( PEDR, &PEDRShadow, HIGH, RESET );// reset ->high for( i = 0 ; i < 10 ; i++ ) { if( i == 0 || i == 8 ) channel = 0x01; if( i < 8 ) { Spi_Write( 0x64 ); //MUXSG0 Spi_Write( channel ); // channel enabled MsDelay( 1 ); Spi_Write( 0x65 ); //MUXSG1 Spi_Write( 0x00 ); //last 8 channels disabled } else { Spi_Write( 0x64 ); //MUXSG0 Spi_Write( 0x00 ); // first 8 channels disabled MsDelay( 1 ); Spi_Write( 0x65 ); //MUXSG1 Spi_Write( channel ); // channel enabled } sample = 0; prevsample = 0; for( j = 0; j < 16; j++ ) { BitWrPortI( PDDR, &PDDRShadow, HIGH, START ); //start high BitWrPortI( PDDR, &PDDRShadow, LOW, START ); //start low Spi_Write( 0x30 ); BitWrPortI( PDDR, &PDDRShadow, LOW, SCLK ); //SCLK low Spi_DataRead( &temp ); MsDelay( 10); value = ( temp & 0xffff); if( value < 20000 ) prevsample = value; if( value > 20000 ) value = prevsample; sample = sample + value; } printf("\r\n\n %lx", temp ); array[ i ] = sample / 16; channel = channel << 1; } MsDelay( 10 ); for( i = 0; i < 10 ; i++ ) { val[i] = ( array[i] * 5.3424 ) / 32767; // printf("\r\n\nch%d = %lx", i, array[i] ); printf("\n\nch%d = %.2f", i, val[i] ); } printf("\n\n\r");/* } //ADC data write void Spi_Write( unsigned char spidata ) { unsigned char index,temp; for( index = 0, temp = spidata ; index < 8 ; index++ ) { if( temp & 0x80 ) BitWrPortI( PDDR, &PDDRShadow, HIGH, DIN ); //DIN high else BitWrPortI( PDDR, &PDDRShadow, LOW, DIN ); //DIN low BitWrPortI( PDDR, &PDDRShadow, HIGH, SCLK ); //SCLK high BitWrPortI( PDDR, &PDDRShadow, LOW, SCLK ); //SCLK low temp <<= 1; } } //ADC data read void Spi_DataRead( unsigned long *temp ) { unsigned char index,chno; for( index = 0, *temp = 0 ; index < 24 ; index++ ) { *temp <<= 1; *temp |= BitRdPortI( PDDR, DOUT ); BitWrPortI( PDDR, &PDDRShadow, HIGH, SCLK ); //SCLK high BitWrPortI( PDDR, &PDDRShadow, LOW, SCLK ); //SCLK low } }