adc readout works, but somehow i don't get vdiscref readings and the digital current...
authorMichael Wiebusch <antiquark@gmx.net>
Wed, 8 Jan 2014 17:48:33 +0000 (18:48 +0100)
committerMichael Wiebusch <antiquark@gmx.net>
Wed, 8 Jan 2014 17:48:33 +0000 (18:48 +0100)
firmware/src/CB_functions.c
firmware/src/CB_functions.h
firmware/src/main.c
firmware/src/spi1.c
firmware/src/spi2.c

index 0c4b9e79ffd151604f46a10d8c28eba2da1ab09b..f51ed391ab071183898118a19a2d1c6b9696992b 100644 (file)
@@ -68,8 +68,16 @@ void report_all_registers(void) {
 
 void adc0_read(void){
   
-  uint8_t c = 0;
+  uint8_t c = 0; // counter for spi buffer fill
+  
+  // the received data is always one transfer cycle
+  // later than the corresponding commands requesting
+  // for the data
+  
+  // set external multiplexers for zero calibration
+  CB_GPIO_Out_Hi(ZEROCALIB); 
+  CB_GPIO_Out_Lo(MUXADDR0); 
+  CB_GPIO_Out_Lo(MUXADDR1); 
   
   spi1_writeWord(CH3VSGND | UNIPOLAR); // VDDDCUR
   // ignore received data
@@ -94,13 +102,64 @@ void adc0_read(void){
   spi1_writeWord(CH1VSGND | UNIPOLAR); // ZERODIFF
   SPI_DMA_Buffer_In[c++] = ZEROSING;
   SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
-  spi1_writeWord(CH1VSGND | UNIPOLAR); // dummy
+
+  // set external multiplexers to read VDISCREFA/VDISCREF2A
+  CB_GPIO_Out_Lo(ZEROCALIB); 
+  CB_GPIO_Out_Hi(MUXADDR0); 
+  CB_GPIO_Out_Hi(MUXADDR1); 
+  
+  spi1_writeWord(CH2VSGND | UNIPOLAR); // VDISCREF2A
   SPI_DMA_Buffer_In[c++] = ZERODIFF;
   SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+  spi1_writeWord(CH1VSGND | UNIPOLAR); // VDISCREFA
+  SPI_DMA_Buffer_In[c++] = VDISCREF2A;
+  SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+  
+  
+  // set external multiplexers to read VDISCREFB/VDISCREF2B
+  CB_GPIO_Out_Lo(ZEROCALIB); 
+  CB_GPIO_Out_Lo(MUXADDR0); 
+  CB_GPIO_Out_Lo(MUXADDR1);
+  
+  spi1_writeWord(CH2VSGND | UNIPOLAR); // VDISCREF2B
+  SPI_DMA_Buffer_In[c++] = VDISCREFA;
+  SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+  spi1_writeWord(CH1VSGND | UNIPOLAR); // VDISCREFB
+  SPI_DMA_Buffer_In[c++] = VDISCREF2B;
+  SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+  
+  
+  // set external multiplexers to read VDISCREFC/VDISCREF2C
+  CB_GPIO_Out_Lo(ZEROCALIB); 
+  CB_GPIO_Out_Hi(MUXADDR0); 
+  CB_GPIO_Out_Lo(MUXADDR1); 
+  
+  spi1_writeWord(CH2VSGND | UNIPOLAR); // VDISCREF2C
+  SPI_DMA_Buffer_In[c++] = VDISCREFB;
+  SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+  spi1_writeWord(CH1VSGND | UNIPOLAR); // VDISCREFC
+  SPI_DMA_Buffer_In[c++] = VDISCREF2C;
+  SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+  
+  // set external multiplexers to read VDISCREFD/VDISCREF2D
+  CB_GPIO_Out_Lo(ZEROCALIB); 
+  CB_GPIO_Out_Lo(MUXADDR0); 
+  CB_GPIO_Out_Hi(MUXADDR1); 
+  
+  spi1_writeWord(CH2VSGND | UNIPOLAR); // VDISCREF2D
+  SPI_DMA_Buffer_In[c++] = VDISCREFC;
+  SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+  spi1_writeWord(CH1VSGND | UNIPOLAR); // VDISCREFD
+  SPI_DMA_Buffer_In[c++] = VDISCREF2D;
+  SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+  
+  spi1_writeWord(CH1VSGND | UNIPOLAR); // dummy command
+  SPI_DMA_Buffer_In[c++] = VDISCREFD;
+  SPI_DMA_Buffer_In[c++] = spi1_receivedWord();
+  debug_out(c);
 
   spi_dma_transfer(c);
-//   debug_out(++debug_counter);
 
 }
 
index 496f49feaa8dccfc292c39fedda3027ad6987a5a..a31fa167bdfc13b8990f4c713bc9445956168695 100644 (file)
@@ -18,4 +18,5 @@ void report_register(uint8_t addr);
 void report_all_registers(void);
 
 void uart_byte_to_fpga(uint8_t byte);
-void debug_out(uint16_t debu);
\ No newline at end of file
+void debug_out(uint16_t debu);
+void adc0_read(void);
\ No newline at end of file
index 20539dda1848a36c76018ecc23909b8388658f03..a5dcecdd28cf86c98f3d2bc85f768564817a6a19 100644 (file)
@@ -81,6 +81,10 @@ int main(int argc, char *argv[]) {
     
     if(BufferOut(&UcRegAddr)){
       decode_register(UcRegAddr);
+    }else{
+      if(uC_regs[0x0b] & 1){
+       adc0_read();
+      }
     }
     
   }
index 8453bc315777810c864d0f657f8a73dff564ba6c..2c7cd4369b6489ca01001856462e053fb70884bc 100644 (file)
@@ -188,7 +188,7 @@ inline void adc_conv0_pulse(void){
 
 
 
-void read_adc0_block0(void){
+void read_adc0_block0(void){// do not use, remove soon
   
   // power supply voltages/currents, temperature + zero calib
   
@@ -207,7 +207,7 @@ void read_adc0_block0(void){
 }
 
 
-void read_adc0_block1(void){
+void read_adc0_block1(void){ // do not use, remove soon
   
   // VDiscRef differential + VDiscRef2 single ended
   
index e69c7fd728db1dc25bfc2e5eefd95245314f1105..3862c2c225230895bd90d5c77991920e3f5df5b9 100644 (file)
@@ -113,7 +113,6 @@ void init_SPI2(void) {
 \r
 \r
 void spi_dma_transfer(uint8_t count) {\r
-  debug_out(++debug_counter | spi_dma_busyFlag<<8);\r
 \r
   while(spi_dma_busyFlag){};\r
   \r