Test for mike

Dependencies:   mbed DevInterfaces MCP4728 MCP4728setaddr I2Cinterfaces

Files at this revision

API Documentation at this revision

Comitter:
wbeaumont
Date:
Fri Jan 13 12:45:37 2017 +0000
Parent:
2:8ce5a2128381
Child:
5:18d7ce800a18
Commit message:
revert to MCP4728test , by mistake mixed up with other test program

Changed in this revision

AT30TSE75x.lib Show diff for this revision Revisions of this file
MCP4728.lib Show annotated file Show diff for this revision Revisions of this file
MCP4728setaddr.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/AT30TSE75x.lib	Fri Jan 13 12:28:09 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://developer.mbed.org/users/wbeaumont/code/AT30TSE75x/#7cb648bc5c2a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MCP4728.lib	Fri Jan 13 12:45:37 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/wbeaumont/code/MCP4728/#164362cf5836
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MCP4728setaddr.lib	Fri Jan 13 12:45:37 2017 +0000
@@ -0,0 +1,1 @@
+MCP4728setaddr#bb5afe877b43
--- a/main.cpp	Fri Jan 13 12:28:09 2017 +0000
+++ b/main.cpp	Fri Jan 13 12:45:37 2017 +0000
@@ -1,19 +1,16 @@
-/** example program for the use of the AT30TSE7xx class 
+/** example program for the use of the MCP4728 class and DACInterface.h classes
  *
- *  V 0.4  : tested on the KL25z 
- * tested eeprom read/ write  full page / single byte  
- * temperature read 12 bit resolution
- * fix chip configuration.
- * (C) Wim Beaumont Universiteit Antwerpen 2017 
+ *  V 1.0  : tested on the KL05z  but without the MCP4728 connected \
+ * (C) Wim Beaumont Universiteit Antwerpen 2016 
  */ 
 
-#define AT30TSE753EXAMPLEVER "0.40"
+#define MCP4728EXAMPLEVER "2.04"
 
 #include "mbed.h"
 
 #if   defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
-  PinName const SDA = PTE0;
-  PinName const SCL = PTE1;
+  PinName const SDA = PTE25;
+  PinName const SCL = PTE24;
 #elif defined (TARGET_KL05Z)
   PinName const SDA = PTB4;
   PinName const SCL = PTB3;
@@ -27,74 +24,116 @@
 
 #include "I2C.h"
 #include "I2CInterface.h" 
-#include "MBEDI2CInterface.h"  
+#include "MBEDI2CInterface.h" 
+#include "DACInterface.h" 
 #include "dev_interface_def.h"
-#include "AT30TSE75x.h"
-
+#include "MCP4728setaddr.h"
+#include "mcp4728.h"
 
 MBEDI2CInterface mbedi2c( SDA, SCL); 
 MBEDI2CInterface* mbedi2cp=  &mbedi2c ;
 I2CInterface* i2cdev= mbedi2cp;
+const float Vdd=4.5;
+
+DigitalOut LDAC(PTA6);
+DigitalOut CntPin(PTA7);
+
 
 Serial pc(USBTX, USBRX);
 
-void print_buf_hex( char *data, int length){
-    int nr;
-    char *ptr=data;
-    for ( int lc=0; lc < length ; lc++){
-        nr= (int) *(ptr++);
-        printf( "%02x ",nr);
-    }
-    printf("\n\r");
-}        
-
-
 int main(void) {
-   char str1[16] = "SOLID Temp";
-   char write_eprom= 'n';
+  
    // get the version of getVersion 
    getVersion gv;
-   int addr=0;
-   printf("AT30TSE752  example program version %s, compile date %s time %s\n\r",AT30TSE753EXAMPLEVER,__DATE__,__TIME__);
+   int addr;
+   printf("MCP4728 example program version %s, compile date %s time %s\n\r",MCP4728EXAMPLEVER,__DATE__,__TIME__);
    printf("getVersion :%s\n\r ",gv.getversioninfo());
-   printf("%s\n\r",str1);
-   printf("give new addr "); scanf("%d", &addr);
-   if ( addr < 0 || addr > 15) addr=0;
-   fflush(stdin);
-   
-   AT30TSE75x tid( i2cdev ,addr); 
-   printf ( "AT30SE75x version :%s\n\r ",tid.getversioninfo());
-   printf( "Taddr %x , Eaddr %x  subaddr %d\n\r ", tid.getTaddr(),tid.getEaddr(), addr);
-   
+   printf("\n\rMCP4728 set address program date : %s  time :%s\n\r",__DATE__,__TIME__); 
+   printf("give new addr ");
+   scanf("%d",&addr);
+    if ( addr < 8) {
+        LDAC=1;
+        char oldaddr, eeaddr, regaddr, newaddr= 2;
+        int newaddrint;
+        // Set addr part 
+        MPC4728_address_set mpc4728(PTB0,&LDAC,i2cdev, &CntPin);
+        int i2cresult =mpc4728.readaddress(&oldaddr, &eeaddr, &regaddr);
+        if ( i2cresult ) {
+            printf("failed to read current address error code: %d , scl cnt = %d  \n", i2cresult,mpc4728.getsclcnt() );
+        }
+        else { 
+            printf( " current address = %d ,eeaddr %d , regaddr %d  sclcnt= %d  give new address :  ", (int) oldaddr,(int) eeaddr, (int)regaddr, mpc4728.getsclcnt());  
+            scanf( "%d",&newaddrint);
+            printf("\n\r");
+            if ( newaddrint >= 0 && newaddrint <= 8 ) {
+                newaddr= (char) newaddrint;
+                i2cresult=mpc4728.setaddress(eeaddr,newaddr);
+                if ( i2cresult ) printf("failed to set address to %d error : %d , sclcnt= %d  \n",newaddr, i2cresult,mpc4728.getsclcnt());
+                else {
+                     printf("set new  address \n");
+                    i2cresult =mpc4728.readaddress(&oldaddr, &eeaddr, &regaddr);
+                    if ( i2cresult ) printf("failed to read (new)  address error : %d  \n", i2cresult);
+                    else     printf( "new address = %d ,eeaddr %d , regaddr %d  sclcnt= %d  \n\r", (int) oldaddr,(int) eeaddr, (int)regaddr, mpc4728.getsclcnt());  printf( " new address = %d \n", (int) oldaddr);
+                }
+            }    
+            else {
+                printf( " new address %d is not valid reset the up to restart the program \n", (int)newaddr );
+            }
+        }
+  } // if add < 16 
+  printf("give test addr ");
+  scanf("%d",&addr);
+ 
+   MCP4728  dac( i2cdev ,addr, Vdd);  // assuming the address  of the MCP4728 is set to 0 factory default 
+   printf("\n\raddr %d MCP4728 :%s\n\r",addr,dac.getversioninfo());
+   wait(1);
+   float voltage=0;
    int cnt=0;
-   int i2cerr;
-   i2cerr=tid.set_config();
-   if( i2cerr) printf("config not set  %d \n\r", i2cerr);
-   int configrd= tid.read_config( 0, &i2cerr);
-   printf( " config %x  I2cerr %d \n\r", configrd,i2cerr ); 
-   printf("write to eprom ?"); scanf("%c",&write_eprom);
-   int pagenr=0;write_eprom = 'y';
-   if(write_eprom == 'y'){   
-    printf("\n\rgive pagenr");
-    scanf("%d",&pagenr);
-    i2cerr= tid.write_eeprompage(str1, 16, 0, (uint8_t) pagenr);
-    if(i2cerr) printf("eeprom write error %d\n\r",i2cerr);
-   }
-   wait_ms(400); // give some time to write 
-   while(1) {
-    i2cerr=tid.read_eeprompage(str1, 16, 0, (uint8_t) pagenr);
-    if(i2cerr) printf("eeprom read error %d \n\r",i2cerr);
-    str1[15]='\0'; //make sure it ends 
-    printf("eeprom content page %d :\n\r %s\n\r",pagenr,str1);
-    //print_buf_hex( str1,16);
-    char singlechar;
-    i2cerr=tid.read_eeprombyte(singlechar, 3, (uint8_t) pagenr); 
-    if(i2cerr) printf("eeprom read error %d \n\r",i2cerr);
-    printf("third char is : %c\n\r",singlechar);
-    wait_ms(1000);    
-    float Tmp= tid.get_temperature(&i2cerr);      
-    printf ("%d:Temp = %f I2cerr %d \n\r",cnt++, Tmp, i2cerr);
-   
+   while(cnt < 4096){
+           // first set the 4 channels 
+           for ( int cc =0 ; cc <4 ; cc++) { 
+               if ( dac.setDACvalue(cnt,cc) )
+                   printf("failed to set dac value %d for channel %d\n\r",cnt,cc);
+            }
+            printf("set to %d result ",cnt);
+               // no else read anyway even if set fails 
+            if(dac.update()) printf("\n\rfailed to readback channel info \n\r");
+            else {
+                for ( int cc =0 ; cc <4 ; cc++) { 
+                 (void)dac.getVoltage(voltage,cc);//no need to test done with updat 
+                  printf(" CH%d %f[V]",cc,voltage);
+                }
+                printf("\n\r");
+            }
+             cnt++;
+             cnt=cnt % 4096;     
+             wait_ms(1200);
+
+  }
+
+  // now the same with the DAC interface 
+  DACInterface* di = &dac;
+  cnt=0;
+  while(1){
+           // first set the 4 channels 
+           for ( int cc =0 ; cc <4 ; cc++) { 
+               if ( di->setDACvalue(cnt,cc) )
+                   printf("failed to set dac value %d for channel %d\n\r",cnt,cc);
+            }
+            printf("set DAC value  to %d result in",cnt);
+               // no else read anyway even if set fails 
+            if(di->update()) printf("\n\rfailed to readback channel info \n\r");
+            else {
+                for ( int cc =0 ; cc <4 ; cc++) { 
+                 (void)di->getVoltage(voltage,cc);// no need to test done with update
+                  printf(" CH%d %f[V]",cc,voltage);
+                }
+                printf("\n\r");
+            }
+            
+             cnt++;
+             cnt=cnt % 4096;     
+             wait_ms(200);
 
   }