forkd

Dependencies:   mbed

Fork of LGstaandart by Dmitry Kovalev

Revision:
158:0c8342e1837a
Parent:
157:1069c80f4944
Child:
159:38f39c0c143f
--- a/SPI.c	Tue May 10 14:11:25 2016 +0000
+++ b/SPI.c	Wed May 11 14:04:57 2016 +0000
@@ -4,7 +4,7 @@
 unsigned int Temp_AMP64P;
 
 int ttt = 0;
-
+float TimPlc=0;
 unsigned int Count_AMP, ADD_AMP, Cur_Amp;
 int Znak_Amp;
 int AD_Regul = 0;
@@ -17,6 +17,7 @@
 unsigned int Temp_ADC_4;
 unsigned int Temp_ADC_5;
 unsigned int TempA;
+unsigned int TempTermLM;
 
 unsigned int Buff_ADC_1		[32];
 unsigned int Buff_ADC_2		[32];
@@ -45,9 +46,10 @@
     Gyro.In2   	= Spi.ADC3;
     Gyro.DeltaT = Spi.ADC4;
     TempA = (0x7fff - Spi.ADC5) << 1;  		// перевернем знак  и умножим на два (было 32000...0 стало 0 ...64000)
-
+    TempTermLM = /*(0x7fff -*/ Spi.ADC1/*) << 1*/; 
     Gyro.ADF_Accum += TempA;
     Gyro.ADS_Accum += TempA;
+    Gyro.ADS_AccumTermLM+=TempTermLM;
     Gyro.ADF_Count ++;
     Gyro.ADS_Count ++;
 
@@ -59,9 +61,12 @@
     }
     if (Gyro.ADS_Count > 255) {				// если прошло 256 тактов виброподвеса
         Gyro.AD_Slow = Gyro.ADS_Accum << 8;		//обновляем данные и приводим в один масштаб
+        Gyro.TermLM = Gyro.ADS_AccumTermLM << 3;
         Gyro.ADS_Count = 0;
         Gyro.ADS_Accum = 0;
+        Gyro.ADS_AccumTermLM=0;
         Gyro.ADS_NewData = 1;
+      
     }
 }
 
@@ -100,31 +105,24 @@
 
 
 
-
-
-/*
-  	    if 		( Gyro.PLC_Delta >	( 100 * 65536)) k=256;
-  	    else if ( Gyro.PLC_Delta < 	(-100 * 65536)) k=256;
-
-  	    else if ( Gyro.PLC_Delta >	( 55 * 65536)) k=64;
-  	    else if ( Gyro.PLC_Delta < 	(-55 * 65536)) k=64;
-
-  	    else if ( Gyro.PLC_Delta >	( 40 * 65536)) k=30;
-  	    else if ( Gyro.PLC_Delta < 	(-40 * 65536)) k=30;
-
-  	    else if ( Gyro.PLC_Delta >  ( 25 * 65536)) k=20;
-  	    else if ( Gyro.PLC_Delta < 	(-25 * 65536)) k=20;
-
-  	    else if ( Gyro.PLC_Delta >  ( 15*65536)) k=16;
-  	    else if ( Gyro.PLC_Delta < 	(-15*65536)) k=16;
-
-  	    else if ( Gyro.PLC_Delta >  ( 5*65536)) k=12;
-  	    else if ( Gyro.PLC_Delta < 	(-5*65536)) k=12;
-
-  	    else if ( Gyro.PLC_Delta >  ( 2*65536)) k=6;
-  	    else if ( Gyro.PLC_Delta < 	(-2*65536)) k=6;
-  	 */
-
+void ShowMod(void)
+{
+	
+    //////////////////////////////////////////////////////////////////////////////////////////////////
+    //////////////////////////////////смотрим все моды/////////////////////////////////////////////////
+    ///////////////////////////////////////////////////////////////////////////////////////////////////
+      if( (Gyro.PLC_Lern<1092)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды.
+        {
+          
+          Gyro.PLC_Error2Mode--;
+          Gyro.PLC_Lern++;
+          Spi.DAC_B += 0x3c;
+          if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;
+          sprintf((Time),"%d %d %d %d  \r\n",Gyro.TermLM,Spi.DAC_B, Gyro.AD_Slow, AD_MAX);
+          WriteCon(Time);
+          TimPlc+=0.63;
+        }    
+}
 
 
 
@@ -140,32 +138,19 @@
 //	 PLC_In = Gyro.AD_Fast;
     //или+,или-(знак)
 
+   // Gyro.AD_Slow=Gyro.AD_Slow<<3;
+
     PLC_In = Gyro.AD_Slow;											//выбираем даные для фильтрации
     Gyro.PLC_Delta 	  = PLC_In - Gyro.PLC_Old;						// узнаем приращение
     Gyro.PLC_DeltaADD = Gyro.PLC_Delta * Gyro.PLC_ADC_DOld;			//приращение с учетом знака (и количества) прошлого приращения
     Gyro.PLC_Old 	  = PLC_In;										// запоминание значения
     
-    Gyro.PlC_MaxD=(unsigned int)(AD_MAX-Gyro.AD_Slow);              //ищем разницу между желаемой и действительной амплитудами.                                                                        **
-    /*
-     //////////////////////////////////////////////////////////////////////////////////////////////////
-    //////////////////////////////////смотрим все моды/////////////////////////////////////////////////
-    ///////////////////////////////////////////////////////////////////////////////////////////////////
-      if( (Gyro.PLC_Lern<1011)&&(Gyro.PLC_Error2Mode != 0))//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды.
-        {
-          //if(AD_MAX < Gyro.AD_Slow) {AD_MAX = Gyro.AD_Slow;}
-          ttt=1;
-          Gyro.PLC_Lern++;
-          Spi.DAC_B += 0x3c;
-          if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;
-          sprintf((Time),"%d %d %d \r\n", Spi.DAC_B, Gyro.AD_Slow, AD_MAX);
-          WriteCon(Time);
-        }
-
-    ///////////////////////////////////////////////////////////////////////////////////////////////////
-    ///////////////////////////////////////////////////////////////////////////////////////////////////
-
-    */
-    //                                                                                                     3600 (размер моды порядка 3000)
+                                                               
+    
+    
+    
+    
+    //                                                                                               3600 (размер моды порядка 3000)
     if((Gyro.PLC_Lern < 60) && (Gyro.PLC_Error2Mode != 0)) { //пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды.
         Gyro.PLC_Lern++;                                     //инкрементируем счетчик поиска максимальной амплитуды
         if(AD_MAX < Gyro.AD_Slow) AD_MAX = Gyro.AD_Slow;     //если максимальная амплитуда меньше текущей записываем новую максимальную амплитуду.                                                                 *
@@ -175,8 +160,10 @@
 
 
     if(AD_MAX < Gyro.AD_Slow) { AD_MAX = Gyro.AD_Slow; l=0; }//обновление максимального значения амплитуды обнуление счетчика малого понижения амплитуды.                                                          *
-    else l++;                                                         //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной)
- 
+    else l++;
+                                                            //инкрементируем счетчик малого понижения желаемой амплитуды (максимальной замеченной)
+    Gyro.PlC_MaxD=(unsigned int)(AD_MAX-Gyro.AD_Slow);              //ищем разницу между желаемой и действительной амплитудами.  
+         
     //ели небыло обновления максимальной амплитуды инкрементируем счетчика малого понижения амплитуды.
     if((l>50)&&(Gyro.PLC_Lern>59)) { AD_MAX -= 3107200; l=0; } //если счетчик малого понижения амплитуды больше 100(аммплитуда не обновлялась 100 раз).