Форум программистов, компьютерный форум, киберфорум
Измерительная техника
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Измерительная техника Входное сопротивление осциллографа https://www.cyberforum.ru/ measuring-devices/ thread2494483.html
При добавлении цифровому осциллографу(1Мегаом), входное сопротивление 50 Ом(адаптер) http://intes.spb.ru/files/images/catalog/4650/615mo9f88cl._sl1067_.jpg нужно ли включать в настройках осциллографа...
Измерительная техника Замена КП305Е в В3-36,В3-43
Возможна ли замена КП305Е в В3-36,В3-43 на HEF4066B? Эффективна ли такая замена? Гасящие резисторы питания подбирают под ток через стабилитрон около 8...15 мА.
Доработка дискриминатора частотного 5.404.010 в старых СК3-45 Измерительная техника
В некоторых партиях измерителей девиации СК3-45 до 1988 года выпуска когда-то ставились дискриминаторы частотные 5.404.010 с перемычкой , терморезистором , диодами КД522Б вместо 4 2Д922А ,5...
Измерительная техника Формат выходных данных LiDAR Ouster 1-16 Здравствуйте. Кто-нибудь знает, какого формата выходные данные у LiDAR Ouster 1-16? Знаю, что для хранения облака лазерных точечных данных используется формат .las, верно ли это и для данной модели? https://www.cyberforum.ru/ measuring-devices/ thread2488468.html
Измерительная техника Тестер https://www.cyberforum.ru/ measuring-devices/ thread2483757.html
Доброго часа. Посоветуйте тестер или прибор для измерения витой пары на затухание и на обрыв. Для таких ситуаций как, например для теста камеры видеонаблюдения. Воткнул тестер и он показал на каком...
Измерительная техника мультиметр dt700d
Доброе время суток! Кто знает - подскажите номинал этого резистора. Дал, соседу напряжение померять, он DCV и ACV перепутал, сжег в положении =1000v. Спасибо!
Задающий генератор на ОУ для Г3-36А Измерительная техника
Вариант замены нестабильно работающего задающего генератора на основе моста Вина в ГЗЧ Г3-36А на схему с ОУ (с позистором и полевым транзистором ).
Измерительная техника Замена транзисторов 2П301Б1 в токовых ключах В7-38 Замена транзисторов 2П301Б1 в токовых ключах В7-38: какие импортные аналоги с подложкой отдельно от истока (для подведения энергии отдельно от стока и истока симметрично ) существуют ? (какие... https://www.cyberforum.ru/ measuring-devices/ thread2471235.html
Измерительная техника Модель АЦП на AM2504 и AD7541A https://www.cyberforum.ru/ measuring-devices/ thread2466854.html
Модель на Си++ АЦП на AM2504 и AD7541A с поразрядным уравновешиванием #include <iostream> #include <stdint.h> #include <math.h> using namespace std;
Измерительная техника OpenSource аналог АЛС КОП 814 на микроконтроллере У кого есть схема и прошивка OpenSource DIY-аналога анализатора логических состояний КОП (GPIB) 814 на микроконтроллере PIC18F4550 + буферные элементы с открытым коллектором стандарта КОП... https://www.cyberforum.ru/ measuring-devices/ thread2463174.html
5 / 5 / 0
Регистрация: 29.06.2018
Сообщений: 1,324
07.04.2020, 19:50  [ТС] 0

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

07.04.2020, 19:50. Показов 15177. Ответов 228
Метки (Все метки)

Ответ

Исправить принцип размещения программ в модулях, оптимизировать дефайны(пока они условные ).
C++
1
2
3
void SetCompFreq1kHz(){   CurrentState.StaticCMDbits&=~(STATICCMDMASK_1kHz) ; }  
void SetCompFreq1_25kHz() { CurrentState.StaticCMDbits|=STATICCMDMASK_1kHz ; }  
 и так дальше для других статических команд (потом проверить на корректность инверсии для схемы включения )
Проблема с беззнаковыми восьмибитными числами (1 байт ): при вычитании с нулем проблема (при постинкременте возле нуля переходит в 255 и считает бесконечно , или исправить тип , или добавить арифметики , у нас счетчик реальных цифр другой и наоборот при выводе )
C++
1
for (uint8_t i=0; i<tmpcount;  i++ ) { printf("  %.01x",(int)tmpdigits[6-i]); if ((6-i )==tmpcommapos){ printf("."); }   }
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
 void AppendDigitBufer( uint8_t numb,uint8_t byte1  )
 {
    
if(tmpcount< numb ) { 
  tmpcommapos+=1;     
  for (uint8_t i=numb-1 ;i> 0; i-- ) {  tmpdigits[i]=tmpdigits[i-1];   } //shift left old bytes 
  tmpdigits[0]=byte1;
  tmpcount++;
  
}
 
 }
 
  
/*
//max 4 digits
 tmpdigits[3]=tmpdigits[2]; i=numb-1 
 tmpdigits[2]=tmpdigits[1]; 
 tmpdigits[1]=tmpdigits[0]; i=1
 
 
//max 2 digits
 
 tmpdigits[1]=tmpdigits[0]; i=numb-1 
 
//max 3 digits
 tmpdigits[2]=tmpdigits[1]; i=numb-1  
 tmpdigits[1]=tmpdigits[0]; i=1
 
  //max 7 digits 
 tmpdigits[6]=tmpdigits[5]; 
 tmpdigits[5]=tmpdigits[4]; 
 tmpdigits[4]=tmpdigits[3]; 
 tmpdigits[3]=tmpdigits[2]; 
 tmpdigits[2]=tmpdigits[1]; 
 tmpdigits[1]=tmpdigits[0];
 
 */
 
 
 
 
 
 
 
 void DecodeKeybNum( uint8_t byte )
 {
 uint8_t byte1=0; 
     
if (byte==BUTTON_0)   { byte1=0; goto LabelInputnthDigit;  }
if (byte==BUTTON_1)   { byte1=1; goto LabelInputnthDigit;  }
if (byte==BUTTON_2)   { byte1=2; goto LabelInputnthDigit;  } 
if (byte==BUTTON_3)   { byte1=3; goto LabelInputnthDigit ; }
if (byte==BUTTON_4)   { byte1=4; goto LabelInputnthDigit;  }
if (byte==BUTTON_5)   { byte1=5; goto LabelInputnthDigit; }
if (byte==BUTTON_6)   { byte1=6; goto LabelInputnthDigit ; }
if (byte==BUTTON_7)   { byte1=7; goto LabelInputnthDigit; }
if (byte==BUTTON_8)   { byte1=8; goto LabelInputnthDigit; }
if (byte==BUTTON_9)   { byte1=9; goto LabelInputnthDigit; }
if (byte==BUTTON_COMMA) { tmpcommapos=tmpcount; CommaSet=1;  return;  } //fix  if count =num 
return; 
  
LabelInputnthDigit:
if((Flag[0]&FREQ_BYTEMASK)!=0){ AppendDigitBufer(7, byte1);}
if((Flag[0]&FM_BYTEMASK)!=0){   AppendDigitBufer(3, byte1);} 
if((Flag[0]&AM_BYTEMASK)!=0){   AppendDigitBufer(2, byte1);} 
if((Flag[0]&OUT_BYTEMASK)!=0){  AppendDigitBufer(4, byte1);}
return;
}
 // добавлена переменная  байта скан-кода клавиатуры (по бит-маске от валкодера отфильтровать )
 void InputParamValue(uint8_t byte ){
//BlinkOff=1;
printf("\nInputParamValue() " ) ;
DecodeKeybNum(  byte );
Flag[3]|=MASK_BLINK_OFF;
 
if((Flag[0]&FREQ_BYTEMASK)!=0  ){Flag[3]|=MASK_FLAG_DISP_FREQ; }
if((Flag[0]&FM_BYTEMASK)!=0 ){ Flag[3]|=MASK_FLAG_DISP_FM; } 
if((Flag[0]&AM_BYTEMASK)!=0 ){ Flag[3]|=MASK_FLAG_DISP_AM; } 
if((Flag[0]&OUT_BYTEMASK)!=0 ) { Flag[3]|=MASK_FLAG_DISP_OUT; }
return;
  
}
Доработать для правильного отображения запятой и ограничения при вводе последнего знака при наборе .

Добавлено через 8 минут
Для консоли тестирования базовых функций модулей и отбора необходимых для реализации алгоритма подпрограмм так проще , но нам придется их шифроваться и добавлять оффсет режима (0 (адрес 0-6 это ячейки 6...0 ) для частоты, 7 для ЧМ (7...9 это,например, ячейки 2...0 буфера ) , 10 для АМ(адрес 10,11 это 1,0 ячейки ), выход - 12 (12-15 это ячейки 3-0 временного буфера цифр ) )
C++
1
 for (int i=6; i>=0;  i-- ) { printf("  %.01x",(int)tmpdigits[i]); if (( i )==tmpcommapos){ printf("."); }   }
Добавлено через 3 минуты
C++
1
 for (int8_t i=6; i>=0;  i-- ) { printf("  %.01x",(int)tmpdigits[i]); if (( i )==tmpcommapos){ printf("."); }   }
может моделировать восьмибитность переменной для отбора программ и даже использоваться для нашего процессора, но так медленнее (вывод пока условный).

Добавлено через 41 минуту
Программа ввода работает приблизительно так (еще багфиксиг некоторый выполнить )
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
 /*
 0 1
 1 2
 2 3
 3 4
 4 5
 5 6
 6 7 stop 
 
 if count ==numb  then stop ,use rule  
*/
 
 
 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];   } //shift left old bytes 
  tmpdigits[0]=byte1;  if ( CommaSet==0) {  tmpcommapos=0;  } else {  tmpcommapos+=1;   }
  tmpcount++;
  
}
 
 }
 
  
/*
//max 4 digits
 tmpdigits[3]=tmpdigits[2]; i=numb-1 
 tmpdigits[2]=tmpdigits[1]; 
 tmpdigits[1]=tmpdigits[0]; i=1
 
 
//max 2 digits
 
 tmpdigits[1]=tmpdigits[0]; i=numb-1 
 
//max 3 digits
 tmpdigits[2]=tmpdigits[1]; i=numb-1  
 tmpdigits[1]=tmpdigits[0]; i=1
 
  //max 7 digits 
 tmpdigits[6]=tmpdigits[5]; 
 tmpdigits[5]=tmpdigits[4]; 
 tmpdigits[4]=tmpdigits[3]; 
 tmpdigits[3]=tmpdigits[2]; 
 tmpdigits[2]=tmpdigits[1]; 
 tmpdigits[1]=tmpdigits[0];
 
 */
 
 
 
 
 
 
 
 void DecodeKeybNum( uint8_t byte )
 {
 uint8_t byte1=0; 
     
if (byte==BUTTON_0)   { byte1=0; goto LabelInputnthDigit;  }
if (byte==BUTTON_1)   { byte1=1; goto LabelInputnthDigit;  }
if (byte==BUTTON_2)   { byte1=2; goto LabelInputnthDigit;  } 
if (byte==BUTTON_3)   { byte1=3; goto LabelInputnthDigit ; }
if (byte==BUTTON_4)   { byte1=4; goto LabelInputnthDigit;  }
if (byte==BUTTON_5)   { byte1=5; goto LabelInputnthDigit; }
if (byte==BUTTON_6)   { byte1=6; goto LabelInputnthDigit ; }
if (byte==BUTTON_7)   { byte1=7; goto LabelInputnthDigit; }
if (byte==BUTTON_8)   { byte1=8; goto LabelInputnthDigit; }
if (byte==BUTTON_9)   { byte1=9; goto LabelInputnthDigit; }
if (byte==BUTTON_COMMA) {  CommaSet=1;   return;  } //fix  if count =num 
return; 
  
LabelInputnthDigit:
if((Flag[0]&FREQ_BYTEMASK)!=0){ AppendDigitBufer(7, byte1);}
if((Flag[0]&FM_BYTEMASK)!=0){   AppendDigitBufer(3, byte1);} 
if((Flag[0]&AM_BYTEMASK)!=0){   AppendDigitBufer(2, byte1);} 
if((Flag[0]&OUT_BYTEMASK)!=0){  AppendDigitBufer(4, byte1);}
return;
}
 
 void InputParamValue(uint8_t byte ){
//BlinkOff=1;
printf("\nInputParamValue() " ) ;
DecodeKeybNum(  byte );
Flag[3]|=MASK_BLINK_OFF;
 
if((Flag[0]&FREQ_BYTEMASK)!=0  ){Flag[3]|=MASK_FLAG_DISP_FREQ; }
if((Flag[0]&FM_BYTEMASK)!=0 ){ Flag[3]|=MASK_FLAG_DISP_FM; } 
if((Flag[0]&AM_BYTEMASK)!=0 ){ Flag[3]|=MASK_FLAG_DISP_AM; } 
if((Flag[0]&OUT_BYTEMASK)!=0 ) { Flag[3]|=MASK_FLAG_DISP_OUT; }
return;
  
}
Программа нормализации вводит только необходимое количество знаков после запятой и до запятой , заполняет нулями , если не столько знаков, сколько надо , игнорирует ввод, если за пределами , правильно расставляет запятую и переписывает символы в буфер структуры, обновляет временный регистр цифр и счетчик позиции запятой, ставит необходимые флажки .

Добавлено через 5 минут
C++
1
 for (int8_t i=tmpcount-1; i>=0;  i-- ) { printf("  %.01x",(int)tmpdigits[i]); if (( i )==tmpcommapos){ printf("."); }   }
Неиспользуемые знаки перед запятой (кроме одного нуля перед запятой) гасятся подпрограммой отправки символов гашения (сравнивает счетчик tmpcount с требуемым количеством цифр для режима (6 или 7, 3 , 2 и 4) , пока проблема, если он равен нулю , предусмотреть защиту , альтернативно написать эту программу ) .

Добавлено через 8 минут
При входе в режим и наборе первой цифры счетчик сбрасывается в значение. характерное для ввода первой цифры , после достижения последней цифры не инкрементируется, ввод не используется, после нажатия кнопки величины запускается нормализация , для кнопки режима сбрасывается в дефолтное значение ( оптимизировать идею под правильную работу прибора (погуглить, посмотреть на ютубе в интернете , но там иногда с неправильными самодельными прошивками бывают(чисто для эксперимента по возможности это сделать , на некоторых кафедрах такое проводили на списанном , например ) )).

Вернуться к обсуждению:
Замена микросхемы 1827ВЕ1-0000000 в Г4-164 на AVR -МК Измерительная техника
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2020, 19:50

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

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

Нужно печатать число П(Пи) почему всегда печатает 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;);...

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

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.