NM500 TEST PGM

Dependencies:   NM500Lib_Socket NM500_Test_Socket SDFileSystem_Socket mbed

Revision:
10:74e762848659
Parent:
9:7970a5638913
Child:
11:6a81bde51be5
--- a/main.cpp	Thu May 18 06:06:13 2017 +0000
+++ b/main.cpp	Fri May 19 07:26:18 2017 +0000
@@ -2,53 +2,130 @@
 #include "NM500.h"
 
 int data_learn(void);
+int data_classify(void);
+
+Timer t, st;
 
 unsigned char vector[NEURONSIZE];
 
 int main() {
-    int minif,maxif=0,gcr,learn=0,classify=0;
-
+    //time measure start
+    t.start();
+    
     //NM500 & SD Card Init
     if(begin() == 0)
-        printf("\nNM500 Init\n");
+        printf("\n\nNM500 Init\n");
     else
-        error("Init error");
-        
-    //kNN Mode 설정   
-    //setKNN();          
+        error("Init error");          
 
     //minif test
-    write(NM_MINIF,3);     
-    minif = read(NM_MINIF);
+    write(NM_MINIF,3);
+    int minif = read(NM_MINIF);
     
     //maxif test
     write(NM_MAXIF,10000);  
-    maxif = read(NM_MAXIF);
+    int maxif = read(NM_MAXIF);
     
     //GCR test
     write(NM_GCR,5);
-    gcr = read(NM_GCR);
-               
+    int gcr = read(NM_GCR);
+    //printf("gcr : %d",gcr);
+     
+    st.start();          
     //Neuron learn
-    data_learn();
+    int learn = data_learn();
+    st.stop(); 
+    printf("Learn complete\n");
+    printf("Learn Time : %d ms\n",st.read_ms());
     
     //data save
+    st.start();
     int save = NeuronToSD();
+    st.stop();
+    printf("Save Complete\n");
+    printf("Save Time : %d ms\n",st.read_ms());
     
+    //forget
     forget();
     int forget = NCOUNT();
-    printf("forget : %d", forget);
+    
+    //restore
+    st.start();
+    int restore = SDToNeurons();
+    st.stop();
+    printf("Restore Complete\n");
+    printf("Restore Time : %d ms\n",st.read_ms());
+    
+    setKNN();
+    //classify
+    st.start();
+    int classify = data_classify();
+    st.stop();
+    printf("Classify Complete\n");
+    printf("classify Time : %d ms\n",st.read_ms());
+    
     
-    SDToNeurons();
-       
-    printf("\nMINIF  : %d\n", minif);
-    printf("\nMAXIF  : %d\n", maxif);
-    printf("\nGCR    : %d\n", gcr);
-    printf("\nSAVE   : %d\n", save);
-    printf("\nFORGET : %d\n", forget);//
-//    printf("\nMinif  : %d\n", minif);
-//    printf("\nMinif  : %d\n", minif);
-//    printf("\nMinif  : %d\n", minif);                
+    printf("\n****************Tset Result****************\n");
+    //minif result
+    if(minif == 3)
+        printf("MINIF # PASS\n");
+    else
+        printf("MINIF # FAIL\n");
+
+    //maxif result
+    if(maxif == 10000)
+        printf("MAXIF # PASS\n");
+    else
+        printf("MAXIF # FAIL\n");
+        
+    //GCR result
+    if(gcr == 5)
+        printf("GCR # PASS\n");
+    else
+        printf("GCR # FAIL\n");
+        
+        
+    //forget result
+    if(forget == 0)
+        printf("FORGET # PASS\n");
+    else
+        printf("FORGET # FAIL\n");
+        
+    //learn result
+    if(learn == MAXNEURONS){
+        printf("Daisy Chain # PASS\n");
+        printf("Learn # PASS\n");
+    }
+        
+    else if(learn == 2){
+        printf("Daisy Chain # FAIL\n");
+        printf("Learn # PASS\n");
+    }
+    else if(learn == 0){
+        printf("Daisy Chain # unknown\n");
+        printf("Learn # FAIL\n");        
+    }
+    
+    //classify result
+    if(classify == 1){
+        printf("Classify # PASS\n");
+        printf("Distance # PASS\n");
+    }
+    else if(classify == 2){
+        printf("Classify # PASS\n");
+        printf("Distance # FAIL\n");
+    }
+    else if(classify == 0){
+        printf("Classify # FAIL\n");
+        printf("Distance # PASS\n");
+    }
+    
+    printf("POWER SAVE ON\n");
+    write(NM_POWER_SAVE,0);
+    t.stop();
+    printf("Total Time : %d ms\n",t.read_ms());
+             
+             
         
         
 }
@@ -72,7 +149,7 @@
             }
             //data learn
             ncnt = learn(vector, NEURONSIZE, i);    //input : data, neuronsize, cat,   return : ncount
-            printf("ncount # %d\n",ncnt);
+            //printf("ncount # %d\n",ncnt);
             
             if(ncnt == old_ncnt)                    //ncount가 변화가 없으면       
                 return 0;       //학습 실패 or ncount 레지스터 불량
@@ -81,10 +158,10 @@
 
             
             //test display
-            printf("vector : ");
-            for(int j=0;j<NEURONSIZE;j++)
-                printf(" %d,",vector[j]);
-            printf(" cat : %d\n", i);
+           // printf("vector : ");
+//            for(int j=0;j<NEURONSIZE;j++)
+//                printf(" %d,",vector[j]);
+//            printf(" cat : %d\n", i);
         } 
         //학습 완료 후 ncount가 MAXNEURONS보다 작을 경우
         if(ncnt < MAXNEURONS)
@@ -92,5 +169,28 @@
         return ncnt;        //정상 출력
 }
 
+int data_classify(void)
+{
+    int distance, cat, nid;
+    //number of neuron 1156
+    for(int i=1;i<=MAXNEURONS;i++){          
+        //test 벡터 생성
+        for(int j =0;j<NEURONSIZE;j=j+2){   //size of neuron 256
+            vector[j] = i>>8;               //upper bit save
+            vector[j+1] = i;           //low bit save
+        }
+        //분류(knn모드, k=2)
+        //input : data, data length      output : distance, category, Neuron ID      return 인식된 데이터 갯수
+        int nsr = classify(vector, NEURONSIZE, &distance, &cat, &nid);
+        if(i!=cat)
+            return 0;       //분류 실패
+        if(distance != 0)
+            return 2;       //distance error
+//
+//        printf(" neuron# %d \t", nid);
+//        printf(" distance = %d,\t ", distance);
+//        printf(" cat = %d\n", cat);
+    }  
+    return 1;       //정상 분류
+} 
 
-