Форум программистов, компьютерный форум, киберфорум
Измерительная техника
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Измерительная техника Входное сопротивление осциллографа https://www.cyberforum.ru/ measuring-devices/ thread2494483.html
При добавлении цифровому осциллографу(1Мегаом), входное сопротивление 50 Ом(адаптер) http://intes.spb.ru/files/images/catalog/4650/615mo9f88cl._sl1067_.jpg нужно ли включать в настройках осциллографа программный делитель напряжения https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRK-DljsjdL7KF-RlVufP8G3_PI9qDOiM72ACqpHR8F8AmXLAEuTQ 1х, 20х, 100х и.т.п.? Если нужно, то какой именно?...
Измерительная техника Замена КП305Е в В3-36,В3-43
Возможна ли замена КП305Е в В3-36,В3-43 на HEF4066B? Эффективна ли такая замена? Гасящие резисторы питания подбирают под ток через стабилитрон около 8...15 мА.
Измерительная техника Доработка дискриминатора частотного 5.404.010 в старых СК3-45 https://www.cyberforum.ru/ measuring-devices/ thread2491113.html
В некоторых партиях измерителей девиации СК3-45 до 1988 года выпуска когда-то ставились дискриминаторы частотные 5.404.010 с перемычкой , терморезистором , диодами КД522Б вместо 4 2Д922А ,5 реле вместо 6 включением звена с фильтрацией в режиме калибровки и неэффективной W(s) кольца АПЧ и ЧД на частотах свыше 2,8 МГц и ДМШ в качестве ограничителя без впаянных схем ЧД малошумящего на...
Измерительная техника Формат выходных данных LiDAR Ouster 1-16 Здравствуйте. Кто-нибудь знает, какого формата выходные данные у LiDAR Ouster 1-16? Знаю, что для хранения облака лазерных точечных данных используется формат .las, верно ли это и для данной модели? https://www.cyberforum.ru/ measuring-devices/ thread2488468.html
Тестер Измерительная техника
Доброго часа. Посоветуйте тестер или прибор для измерения витой пары на затухание и на обрыв. Для таких ситуаций как, например для теста камеры видеонаблюдения. Воткнул тестер и он показал на каком метре обрыв или затухание. Где какой коннектор RG45 плохо обжат. Что-то в этом роде.
Измерительная техника мультиметр dt700d Доброе время суток! Кто знает - подскажите номинал этого резистора. Дал, соседу напряжение померять, он DCV и ACV перепутал, сжег в положении =1000v. Спасибо! https://www.cyberforum.ru/ measuring-devices/ thread2482292.html
Измерительная техника Задающий генератор на ОУ для Г3-36А https://www.cyberforum.ru/ measuring-devices/ thread2479725.html
Вариант замены нестабильно работающего задающего генератора на основе моста Вина в ГЗЧ Г3-36А на схему с ОУ (с позистором и полевым транзистором ).
Замена транзисторов 2П301Б1 в токовых ключах В7-38 Измерительная техника
Замена транзисторов 2П301Б1 в токовых ключах В7-38: какие импортные аналоги с подложкой отдельно от истока (для подведения энергии отдельно от стока и истока симметрично ) существуют ? (какие микросхемы аналогичны или не хуже по сопротивлению открытого и закрытого ключа, симметрии , двунаправленности , отсутствию электризации выводов канала от подведения управляющих напряжений )....
Измерительная техника Нужна подсказка с измерителем сетевого напряжения, пожалуйста https://www.cyberforum.ru/ measuring-devices/ thread2467003.html
Очень нужна схема или литература по этому вопросу!!! пропаду без вас, форумчане...
Измерительная техника Модель АЦП на AM2504 и AD7541A Модель на Си++ АЦП на AM2504 и AD7541A с поразрядным уравновешиванием #include <iostream> #include <stdint.h> #include <math.h> using namespace std; https://www.cyberforum.ru/ measuring-devices/ thread2466854.html
Измерительная техника OpenSource аналог АЛС КОП 814 на микроконтроллере
У кого есть схема и прошивка OpenSource DIY-аналога анализатора логических состояний КОП (GPIB) 814 на микроконтроллере PIC18F4550 + буферные элементы с открытым коллектором стандарта КОП (GPIB )? Поместится ли программа в PIC16F877A или ATMEGA16A...ATMEGA48A (DIP)? Внедрить анлгоязычное обозначение , как в GPIB . (For education only ).
Измерительная техника Измерительный тракт солнечного коллектора Измерительный тракт блока управления солнечным коллектором. Здравствуйте, делаю задание и у меня возникли некоторые трудности. Мне нужно сделать следующее: есть три аналоговых датчика температуры (T, T1, T2). Есть три условия, если условие верно - загорается светодиод. Условия: 1) T>T1+10°. Как я понимаю нужно использовать компаратор, на + подавать напряжение с датчика T, на минус - с T1. Но... https://www.cyberforum.ru/ measuring-devices/ thread2457174.html
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
09.04.2020, 01:32  [ТС] 0

Замена микросхемы 1827ВЕ1-0000000 в Г4-164 на AVR -МК - Измерительная техника - Ответ 14408533

09.04.2020, 01:32. Показов 21781. Ответов 228
Метки (Все метки)

Ответ

Дорабатывать обработчики команд индикации в subroutines.h и других ,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
uint8_t CheckButtonsNumericKeypad(uint8_t byte )
{
if( byte==(uint8_t) BUTTON_OUT_OFF ) {   printf(" out off  ");  OutputOnOff(); Flag[3]|=MASK_FLAG_MODE|MASK_FLAG_ATT_CODE;  return 0x01 ; } 
if( byte==(uint8_t) BUTTON_LEFT)    {   printf(" < ");   if(StepMode==0)    { Flag[0]|=MASK_FLAG_INC_STEP; return 0x01;  }   else { Reverse=1; return 0x00;   } } 
if( byte==(uint8_t) BUTTON_RIGHT) {   printf(" >  ");  if(StepMode==0) { Flag[0]|=MASK_FLAG_DEC_STEP; return 0x01 ;   }   else {  Reverse=0; return 0x00;   } } 
if( (byte==BUTTON_0)||(byte==BUTTON_1)||(byte==BUTTON_2)||(byte==BUTTON_3)) {  goto CaseBUTTON_NUMKEYPAD ;      }
if( (byte==BUTTON_4)||(byte==BUTTON_4)||(byte==BUTTON_6)||(byte==BUTTON_7)) {  goto CaseBUTTON_NUMKEYPAD ;      }
if( (byte==BUTTON_8)||(byte==BUTTON_9)||(byte==BUTTON_COMMA)||(byte==BUTTON_SHARP)) {  goto CaseBUTTON_NUMKEYPAD ;      }
 
return  0x00;
 
 
CaseBUTTON_NUMKEYPAD:
 
 if ((CheckMemoryWriteModeOn()!=0)) {  WriteStatement() ; }   
 if ((CheckMemoryRecallModeOn()!=0)){  GetStatementFromMemory(); }   
 
 InputParamValue(byte);
return 0x01;
}
 
...
 
 
 
void ParseCode( uint8_t scancode1)
{
//;        8_1  
 printf("\ncall ParseKeyb ,FlagMode=%x" ,(int)FlagMode   );
 
 
uint8_t scancode =( scancode1&BITMASK_KEYBOARD);
 printf ("\nKeyb Byte    = 0x%.02x  **\n",scancode);
 
if(CheckButtonsNumericKeypad( scancode )==0x01) { printf(" numeric  ");   return; } 
 
 
if  ( scancode == (uint8_t)BUTTON_F )   {      printf(" freq  ");  SetDutyRegF();               return ;}    
if( scancode == (uint8_t)BUTTON_FM ) {     printf(" fm  "); TurnOnFM (); SetDutyRegFM();  return ; }  
if( scancode == (uint8_t)BUTTON_AM ) {     printf(" am  "); TurnOnAM(); SetDutyRegAM();  return ;     } 
if( scancode == (uint8_t)BUTTON_PM  ) {     printf(" pm  ");TurnOnPM(); SetDutyRegPM();  return ;  }  
if( scancode == (uint8_t)BUTTON_MOD_OFF ) {   printf(" mod off  "); TurnOffModulation(); SetDutyRegModOff();  return ; }
if( scancode == (uint8_t)BUTTON_EXT  )  {    printf(" prepare ext  "); PrepareExtModulation () ; return; }    /* 9*/  
if( scancode == (uint8_t)BUTTON_STEP  ) {  printf(" step  "); StepModeOn(); return; }
 
if( scancode ==(uint8_t) BUTTON_OUT  ) {     printf(" out "); OutputOn(); SetDutyRegOut(); return; }  
//if( scancode==(uint8_t) BUTTON_OUT_OFF ) {   printf(" out off  ");  OutputOnOff();  return; }
if( scancode==(uint8_t)BUTTON_LFO ) {        printf(" lfo  "); ChangeLFONum(); return; }
if( scancode==(uint8_t)BUTTON_SHARP ) {      printf(" #  "); SetMemWrMode(); return;  }
if( scancode==(uint8_t)BUTTON_RECALL ) {     printf(" recall   "); SetMemRecallMode(); return; }
 
if ( (FlagMode&OUT_BYTEMASK)==0){
 
if( scancode==(uint8_t)BUTTON_MHz ) {   printf(" MHZ   "); NormalizeFreq(); return; }//;  10   
if( scancode==(uint8_t)BUTTON_kHz ) {   printf(" kHz   ");  if (CheckStepModeOn()!=0){ NormalizeStep();  return; } else { NormalizeFM();  return;}  }//;  macro,  13_2 or to 1 
if( scancode==(uint8_t)BUTTON_PERCENT ) { printf(" %%   ");    NormalizeAMCoef(); return; }  //;   14_2   
}
else 
{
if( scancode==(uint8_t)BUTTON_mV ) { printf(" mV   ");  SetOutEnterMode(TOKEN_Out_mV);  return;} //;   15_2  
if( scancode==(uint8_t)BUTTON_mkV ) { printf(" uV   "); SetOutEnterMode( TOKEN_Out_mkV );  return;}//;   15_2 
if( scancode==(uint8_t)BUTTON_dBV ) { printf(" -dBV   ");SetOutEnterMode(TOKEN_Out_dB);  return;} //;   15_2  
}
 
if( scancode==(uint8_t)BUTTON_6dB ) {  printf(" +6dB   ");    TurnOn6dB();   return; }//;   11  
//CaseDefault: 
 
 
if(StepMode==1) {  printf(" if step mode    ");    ChangeFreqOneStep() ;   NormalizeFreq(); return; }   ;//  12_3,   
ChangeStepParam( );      // if encoder event (Int1) , if   no button were pressed (from Int2)  ,fix   
 
 
 
 
  return ; //to point1             
}
Добавлено через 11 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void      TurnOn6dB(){
 
if((FlagMode&AM_BYTEMASK)!=0 ) {  CurrentState.Output6dB=0; /* Flag[3]|=MASK_FLAG_STATICCMD; */ }
else { CurrentState.Output6dB= ~CurrentState.Output6dB;  }
 printf("\n Output +6dB on    send pin 23 change for output +6dB , \nCurrentState.Output6dB=%x   ", CurrentState.Output6dB) ;
 SendPin23Cmd(CurrentState.Output6dB); 
 
 /* ************************ */
 // in bit Out6dB on Inform =1 ( nInform=0) led is on  
 // if bit Out6dB in the BitsOut is set ,  nInform=0,  led is on
if(CurrentState.Output6dB==0) { BitsOut&=~(MODE_BITMASK_OUT_6dB);   } else  {BitsOut|= (MODE_BITMASK_OUT_6dB);   } 
 
 Flag[3]|=MASK_FLAG_MODE;
 return ; 
 }  //fix
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void      OutputOnOff() { 
printf("\n Output_on=~Output_on   ") ; 
CurrentState.OutputOff=~CurrentState.OutputOff; 
if(CurrentState.OutputOff==0) { BitsOut&=~(MODE_BITMASK_OUT_OFF);   } else {BitsOut|= (MODE_BITMASK_OUT_OFF);   } 
//Flag[3]|=MASK_FLAG_MODE|MASK_FLAG_ATT_CODE; 
// in bit Out off  on Inform =1 ( nInform=0) led Out off is on
// if bit OutputOff in the BitsOut is set,   led Out off is turned on
/* 
; 8   no      LSB   
; 4   no   
; 2   no
; 1 Out 
; 8 +6dB
; 4 uV
; 2 mV
; 1 dBV      MSB
 
*/
 
 
 
} /*  fix  */
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
void      OutputOn() { 
printf("\n Output On ") ;     
CurrentState.OutputOff=0x00;
BitsOut&=~(MODE_BITMASK_OUT_OFF);  //turn off led
Flag[3]|=MASK_FLAG_MODE;
return; 
 }
Добавлено через 5 минут
Прописать управление битами индикации режимов режимов ( для выхода , +6 дБ, модуляции, ГНЧ ).

Добавлено через 2 часа 1 минуту
В программах отправки кодов в платы ГЗЧ и светодиодов режимов разные коды , ввести еще одну переменную для номера ГЗЧ в плате ГЗЧ
C++
1
2
3
4
5
6
  uint8_t BitsOut=0x00;  //LED OutOff off, LED  6 dB off
  uint8_t BitsModul=0x00;//LED modulations off 
  uint8_t BitsLFO=0x00;  //disable LEDs LFO
  
  uint8_t LFOEnabled=0;  //Enabled internal LFO bit
  uint8_t BitsLFOOsc; // preset to  1 kHz osc
Добавлено через 1 минуту
Переменные размещать в ОЗУ (общие для всех подпрограмм ).

Добавлено через 2 часа 40 минут
Можно прикинуть на программе, моделирующей ввод (на обычных скан-кодах, как и для КОП ), дописать, ввести условия.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <stdio.h>
#include <stdint.h>
#include <math.h>
typedef unsigned char byte;
 
uint8_t  freq[8];
 
uint8_t  tmpcount=0;
uint8_t  tmpdigits[7];
uint8_t  tmpcommapos=0;
uint8_t  CommaSet=0;
 
uint16_t GetValuefrom3Digits( uint8_t dig3, uint8_t dig2 , uint8_t dig1 )
{
uint16_t result=0;
result+=(uint16_t) dig1;
for (uint8_t i=0;i<dig2;i++ ) { result+=10; }
for (uint8_t i=0;i<dig3;i++ ) { result+=100; }
return result ; 
}   
    
 
 void AppendDigitBufer( uint8_t numb,uint8_t byte1  )
 {
    
if(tmpcount< numb ) { 
for (uint8_t i=numb-1 ;i>=1; i-- ) {  tmpdigits[i]=tmpdigits[i-1];   } 
tmpdigits[0]=byte1; 
if ( CommaSet==0) {tmpcommapos=0;} 
else { tmpcommapos+=1; if(tmpcount==0) { tmpdigits[1]=0;   tmpcount++; } } 
tmpcount++;
}
return;
}
 
 void DecodeKeybNum( uint8_t byte )
 {
uint8_t byte1=0; 
     
if (byte==0x30)   { byte1=0; goto LabelInputnthDigit;  } //emulating of the scancode  
if (byte==0x31)   { byte1=1; goto LabelInputnthDigit;  }
if (byte==0x32)   { byte1=2; goto LabelInputnthDigit;  } 
if (byte==0x33)   { byte1=3; goto LabelInputnthDigit ; }
if (byte==0x34)   { byte1=4; goto LabelInputnthDigit;  }
if (byte==0x35)   { byte1=5; goto LabelInputnthDigit; }
if (byte==0x36)   { byte1=6; goto LabelInputnthDigit ; }
if (byte==0x37)   { byte1=7; goto LabelInputnthDigit; }
if (byte==0x38)   { byte1=8; goto LabelInputnthDigit; }
if (byte==0x39)   { byte1=9; goto LabelInputnthDigit; }
if (byte==0x2e)  {  CommaSet=1;   return;  } //fix  if count =num 
return; 
  
LabelInputnthDigit:
 AppendDigitBufer(7, byte1); 
 
return;
}
 
 void InputParamValue(uint8_t byte ){
 
DecodeKeybNum(  byte );
 
return;
  
}
/*
1 2 3. 4 5 6  
  [ 1 ]  [ 2 ]  [ 3 .]  [ 4 ]  [ 5 ]  [ 6 ]
 tmpcount=6  tmpcommapos=3
123456789
 
Input char :1
Input char :2
Input char :3
Input char :4
Input char :5
Input char :6
Input char :7
Input char :8
Input char :9
Input char :x
  [ 1 ]  [ 2 ]  [ 3 ]  [ 4 ]  [ 5 ]  [ 6 ]  [ 7 .]
 tmpcount=7  tmpcommapos=0 
 
 
 Input char :1
Input char :2
Input char :.
Input char :3
Input char :x
  [ 1 ]  [ 2 .]  [ 3 ] //[0]
 tmpcount=3  tmpcommapos=1   
 
 ndigbeforecomma=tmpcount-tmpcommapos;  <=3
 
 Input char :.
Input char :1
Input char :2
Input char :3
Input char :x
  [ 0 .]  [ 1 ]  [ 2 ]  [ 3 ]  //[0]
 tmpcount=4  tmpcommapos=3
 
*/
int main()
 
{
uint8_t ch =0;
 
 
while(ch!='x')
{
char  ch1;
printf("Input char :"); 
scanf ("%s",  &ch1);
ch=(uint8_t) ch1 ;
InputParamValue(ch );   
      
}
 
for (int  i=tmpcount-1;i>=0; i--) { printf ("  [ %d " , tmpdigits[i]) ;  if (tmpcommapos==i) {printf (".") ;}  printf ("]") ;             }
 
 
printf("\n tmpcount=%d  tmpcommapos=%d ", tmpcount, tmpcommapos ) ;
 
 
 
 
 
 
return 0;
 
}
Добавлено через 4 часа 51 минуту
Для работы программы нормализации потребуется дополнительный временный массив на 7 байт , счетчики и временные переменные, которые нужно будет обнулять при наборе с начала (после включения нового режима , отбоя , повторного ввода после ранее нажатой кнопки величины ).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
#include <stdio.h>
#include <stdint.h>
#include <math.h>
#include <conio.h>
typedef unsigned char byte;
 
uint8_t  freq[8];
 
uint8_t  tmpcount=0;
uint8_t  tmpdigits[7] ;
uint8_t  tmpcommapos=0;
uint8_t  CommaSet=0;
 
uint16_t GetValuefrom3Digits( uint8_t dig3, uint8_t dig2 , uint8_t dig1 )
{
uint16_t result=0;
for (uint8_t i=0;i<dig1;i++ ) { result+=1 ; } 
for (uint8_t i=0;i<dig2;i++ ) { result+=10; }
for (uint8_t i=0;i<dig3;i++ ) { result+=100; }
return result ; 
}   
    
 
 void AppendDigitBufer( uint8_t numb,uint8_t byte1  )
 {
    
if(tmpcount< numb ) { 
for (uint8_t i=numb-1 ;i>=1; i-- ) {  tmpdigits[i]=tmpdigits[i-1];   } 
tmpdigits[0]=byte1; 
if ( CommaSet==0) {tmpcommapos=0;} 
else { tmpcommapos+=1; if(tmpcount==0) { tmpdigits[1]=0;   tmpcount++; } } 
tmpcount++;
}
return;
}
 
 void DecodeKeybNum( uint8_t byte )
 {
uint8_t byte1=0; 
     
if (byte==0x30)   { byte1=0; goto LabelInputnthDigit;  } //emulating of the scancode  
if (byte==0x31)   { byte1=1; goto LabelInputnthDigit;  }
if (byte==0x32)   { byte1=2; goto LabelInputnthDigit;  } 
if (byte==0x33)   { byte1=3; goto LabelInputnthDigit ; }
if (byte==0x34)   { byte1=4; goto LabelInputnthDigit;  }
if (byte==0x35)   { byte1=5; goto LabelInputnthDigit; }
if (byte==0x36)   { byte1=6; goto LabelInputnthDigit ; }
if (byte==0x37)   { byte1=7; goto LabelInputnthDigit; }
if (byte==0x38)   { byte1=8; goto LabelInputnthDigit; }
if (byte==0x39)   { byte1=9; goto LabelInputnthDigit; }
if (byte==0x2e)  {  CommaSet=1;   return;  } //fix  if count =num 
return; 
  
LabelInputnthDigit:
 AppendDigitBufer(7, byte1); 
 
return;
}
 
 void InputParamValue(uint8_t byte ){
 
DecodeKeybNum(  byte );
 
return;
  
}
/*
1 2 3. 4 5 6  
  [ 1 ]  [ 2 ]  [ 3 .]  [ 4 ]  [ 5 ]  [ 6 ]
 tmpcount=6  tmpcommapos=3
123456789
 
Input char :1
Input char :2
Input char :3
Input char :4
Input char :5
Input char :6
Input char :7
Input char :8
Input char :9
Input char :x
  [ 1 ]  [ 2 ]  [ 3 ]  [ 4 ]  [ 5 ]  [ 6 ]  [ 7 .]
 tmpcount=7  tmpcommapos=0 
 
for (i=tmpcount ; i< numb ; i++   )  
 
 
 
 Input char :1
Input char :2
Input char :.
Input char :3
Input char :x
     2        1        0
     5       4        3      2     1   0
  [ 1 ]  [ 2 .]  [ 3 ] //[0] [0] [0]
 tmpcount=3  tmpcommapos=1  ; 4-1=3 , 3-1=2    
 
 ndigbefore=tmpcount-tmpcommapos;  <=3
 
 Input char :.
Input char :1
Input char :2
Input char :3
Input char :x
  [ 0 .]  [ 1 ]  [ 2 ]  [ 3 ]  //[0]
 tmpcount=4  tmpcommapos=3
 
 
 
     6       5     4      3      2       1      0
   [ 0 ]  [ 0 ]  [ 1 ]  [ 2 ]  [ 3 .]  [ 4 ]  [ 5 ]
 tmpcount=5  tmpcommapos=2
  
 
      6      5      4       3      2      1      0
   [ 1 ]  [ 2 ]  [ 3 .]  [ 4 ]  [ 5 ]  [ 0 ]  [ 0 ]          
 tmpcount=7  tmpcommapos=4                             
                                                         
                                                          
                                                           if (tmpcount> 6)   { x[6]=x[tmpcommapos+2] } else {x[6]=0; }   
                                                           if (tmpcount> 5)   { x[5]=x[tmpcommapos+1]} else {x[5]=0; }
                                                           x[4]=x[tmpcommapos]   
                                                           if(tmpcommapos-1 >=0) { x[3]= x[tmpcommapos-1];}  else {x[3]=0 ;}    
                                                           if(tmpcommapos-2 >=0) { x[2]= x[tmpcommapos-2];}  else {x[2]=0 ;}      
                                                           if(tmpcommapos-3 >=0) { x[1]= x[tmpcommapos-3];}  else {x[1]=0 ;}  
                                                           if(tmpcommapos-4 >=0) { x[0]= x[tmpcommapos-4];}  else {x[0]=0 ;}  
                                                             tmpcommapos=4;
 
     6      5      4       3      2      1      0
   [ 1 ]  [ 2 ]  [ 3 .]  [ 4 ]  [ 5 ]  [ 6 ]  [ 7 ] 
 tmpcount=7  tmpcommapos=4
 
  
     6      5       4     3       2     1      0  
   [ 0 ]  [ 0 ]  [ 0 ]  [ 6 ]  [ 3 ]  [ 9 .]  [ 9 ]    x[5]=x[tmpcommapos+2], x[4]=x[tmpcommapos+1], x[3]=x[tmpcommapos]
                                                       x[2]=x[tmpcommapos-1]  x[1]=x[tmpcommapos-2]    x[0]=0     
 tmpcount=4  tmpcommapos=1
 
     6      5       4     3       2     1      0  
   [ 0 ]  [ 6 ]  [ 3 ]  [ 9. ]  [ 9 ]  [ 9 ]  [ 9 ]   
 
  [ 0 ]  [ 6 ]  [ 3 ]  [ 9 .]  [ 9 ]  [ 9 ]  [ 9 ]
 tmpcount=6  tmpcommapos=3
*/
int main()
 
{
    
label1: 
    
uint8_t ch =0;
 
//reset after turn on new  mode or escape 
 tmpcount=0;
 CommaSet=0;
 tmpcommapos=0;
 
while(ch!='x')
{
char  ch1;
printf("Input char :"); 
scanf ("%s",  &ch1);
ch=(uint8_t) ch1 ;
InputParamValue(ch );   
      
}
 
 
 
/*
  [ 2 .]  [ 3 ]  [ 2 ]  [ 1 ]  [ 5 ]  [ 4 ]  [ 2 ]       
 tmpcount=7  tmpcommapos=6
  [ 0 ]  [ 0 ]  [ 2 .]  [ 3 ]  [ 2 ]  [ 1 ]  [ 5 ]  
 tmpcount=7  tmpcommapos=4                                 tmpdigits[6]=0; tmpdigits[5]=0; tmpdigits[4]=tmpdigits[tmpcommapos ]; 
 
                                                           tmpdigits[3]=tmpdigits[tmpcommapos-1 ];          0 -err   ,      input 0   
                                                           tmpdigits[2]=tmpdigits[tmpcommapos-2 ];         1-err, 0 -err   , input 0
                                                           tmpdigits[1]=tmpdigits[tmpcommapos-3 ]; 2-err , 1-err, 0 -err
                                                           tmpdigits[0]=tmpdigits[tmpcommapos-4 ]; 3-err, 2-err, 1-err , 0-err  
     6       5     4      3      2       1      0
   [ 0 ]  [ 0 ]  [ 1 ]  [ 2 ]  [ 3 .]  [ 4 ]  [ 5 ]  
 tmpcount=5  tmpcommapos=2  numb of digits after comma 
 
       6      5      4       3      2      1      0       дополненный нулями слева ,  
   [ 1 ]  [ 2 ]  [ 3 .]  [ 4 ]  [ 5 ]  [ 0 ]  [ 0 ]      с старшего  разряда (tmpcount-1) -> в 6 й ,    tmpcount  раз  сверху      
 tmpcount=7  tmpcommapos=4                               
 
  [ 1 .]  [ 2 ]  [ 3 ]  [ 4 ]  [ 5 ]  [ 6 ]  [ 7 ]
 tmpcount=7  tmpcommapos=6 , numbdig=1
 
  
*/
 
 
uint8_t numbdig=(tmpcount-tmpcommapos);
uint8_t numbaftercomma =tmpcommapos;
#define ndigmax 7
 
 for (int  i=6;i>=0; i--) { printf ("  [ %d " , tmpdigits[i]) ;  if (tmpcommapos==i) {printf (".") ;}  printf ("]") ;   }
printf("\n tmpcount=%d  tmpcommapos=%d , numbdig=%d , numb after=%d \n", tmpcount, tmpcommapos, numbdig , numbaftercomma ) ;
 
   uint8_t tmparray[7]; 
   if((numbdig>3)||(numbdig==0)) { printf ("\n Escape entering ");  goto label_escape ; }
   if(numbaftercomma>4) { numbaftercomma=4; }
   if(numbdig==3) {  if((tmpcommapos+2) <7 )  { tmparray[6]=tmpdigits[tmpcommapos+2] ; }  }   else { tmparray[6]=0;  }
   if(numbdig>=2) {  if((tmpcommapos+1) <7 )  { tmparray[5]=tmpdigits[tmpcommapos+1] ; }  }   else { tmparray[5]=0;  }
   tmparray[4]=tmpdigits[tmpcommapos];   
   if(numbaftercomma>=1) { tmparray[3]=tmpdigits[tmpcommapos-1];  }   else {  tmparray[3]=0; }
   if(numbaftercomma>=2) { tmparray[2]=tmpdigits[tmpcommapos-2];  }   else {  tmparray[2]=0; }
   if(numbaftercomma>=3) { tmparray[1]=tmpdigits[tmpcommapos-3];  }   else {  tmparray[1]=0; } 
   if(numbaftercomma==4) { tmparray[0]=tmpdigits[tmpcommapos-4];  }   else {  tmparray[0]=0; } 
   tmpcommapos=4;
 
uint16_t digitsbefore;
digitsbefore=GetValuefrom3Digits( tmparray[6] , tmparray[5] , tmparray[4]);
 printf(" digits=%d ",digitsbefore );
if(digitsbefore>=640 ) { printf ("\n Escape entering ");  goto label_escape ; }
if((digitsbefore==0 )&&(tmparray[3]==0)) { printf ("\n Escape entering ");  goto label_escape ; }
 
if(digitsbefore>=160 ) {  printf ("\nMode 1,25 kHz");    for (uint8_t i=0; i<6; i++)  { tmpdigits[i]  =tmparray[i+1];    } tmpdigits[6] =0;  tmpcommapos=3; tmpcount=6 ;          }
else {  printf ("\nMode 1  kHz");   for (uint8_t i=0; i<7; i++)  {tmpdigits[i]  =tmparray[i];  } tmpcommapos=4; tmpcount=7 ;  }
 
 
 
 
 
 
//for (int  i=tmpcount-1;i>=0; i--) { printf ("  [ %d " , tmpdigits[i]) ;  if (tmpcommapos==i) {printf (".") ;}  printf ("]") ;   }
 
 for (int  i=tmpcount-1;i>=0; i--) { printf ("  [ %d " , tmpdigits[i]) ;  if (tmpcommapos==i) {printf (".") ;}  printf ("]") ;   }
printf("\n tmpcount=%d  tmpcommapos=%d \n", tmpcount, tmpcommapos ) ;
 
 
 label_escape:
    
 goto label1;
 
 
return 0;
 
}
Добавлено через 1 минуту
При ошибке программа восстанавливает из структуры предыдущее правильно установленное значение.

Добавлено через 5 минут
Хотелось бы сделать программу компактнее, с меньшим количеством переменных (подпрограмма для программы нормализации выносится в отдельную функцию , а внутренние переменные, кроме временного массива буфера индикации уничтожаются , до этого они могут влиять на переполнение стека ( стек (от конца к началу, см. вершину стека ) "перекрывает" область хранения переменных в ОЗУ ) ). С 1К (2К) СОЗУ эта вероятность зависит только от способа программирования и нас может удовлетворить .

Вернуться к обсуждению:
Замена микросхемы 1827ВЕ1-0000000 в Г4-164 на AVR -МК Измерительная техника
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2020, 01:32
Готовые ответы и решения:

Замена микросборок 2.030.036 ,2.030.034 в Г4-164, Г4-176
Замена микросборок 2.030.036 в Г4-164, 2.030.034 в Г4-176 : на какие транзисторы в современных...

замена микросхемы
Нужно заменить микросхему драйвер двигателя на HDD Smooth 100369972 . На али есть такие схемки но...

Замена микросхемы AT49F002NT
Господа! Если кто знает ,какая микросхема может заменить AT49F002NT?

Замена микросхемы на аналоговую
Привет всем. Какой микросхемой можно заменить микросхему FBBHAQ DM0265RB ? Она с платы...

228
09.04.2020, 01:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2020, 01:32
Помогаю со студенческими работами здесь

Hp pavilion g6 замена микросхемы видео-чипа
Здравствуйте, может кто-то есть из сервисного центра? Какой срок гарантии дается при замене...

Acer Aspire One D255. Замена микросхемы U13
Здравствуйте форумчане. Имеется Ноут Acer Aspire One D255 (PAV70 LA-6221P Rev:1.0) , у него...

Acer aspire 5602wlmi замена сгоревшей микросхемы PG1AY 6900AS
помогите пожалуйста в ноутбуке Acer aspire 5602wlmi сгорела микросхема &quot;PG1AY 6900AS&quot; найти такую...

СМА Samsung Q1235, Замена микросхемы STK621-015. Есть аналог!!!
Здравствуйте! Подскажите возможна ли замена Микросхемы STK621-015 на STK621-140 трёхфазный инвертор...

Модуль Whirlpool домино, замена микросхемы lnk 304 pn на lnk 305 pn
Всем прывет в модуле сгарела микросхема lnk 304 pn под рукой аказалась lnk 305 pn она падходит.

Нужно печатать число П(Пи) почему всегда печатает 4.0000000
#include &lt;stdio.h&gt; #include &lt;Windows.h&gt; int main() { int n,i; float a,PI=0; printf(&quot;n=&quot;);...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru