Wawchuk Опубликовано 15 октября, 2018 Поделиться Опубликовано 15 октября, 2018 Почему то согласен: тогда так for (int i=0 ; i<=8 ; i++){} 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 15 октября, 2018 Поделиться Опубликовано 15 октября, 2018 Этот flag совсем не нужен, нет в нём никакого смысла. Он всегда будет равен 1 после выполнения data_submit(dat); Что нужно в программе-то сделать? Вы так и не объяснили. Нужно вывести на индикатор цифры от 0 до 9 через промежутки 0.5 секунды? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Wawchuk Опубликовано 15 октября, 2018 Поделиться Опубликовано 15 октября, 2018 да программа вывести на семисегментный индикатор должна от 0 до 9 Но как увязать передачу последнего бита последовательного кода через 74hc595 ,с переключением параллельного от 0 до 9.Понял что предыдущий путь и направление мысли не то-)) 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Yurkin2015 Опубликовано 15 октября, 2018 Поделиться Опубликовано 15 октября, 2018 Ну, тогда нужно просто всё сделать по порядку - в цикле сначала преобразуем j в сегментный код, затем отправляем на 74НС595, потом пауза 500мс for (int j=0;j<10;j++) { segchar(j); data_submit(dat); __delay_ms(500); } 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Wawchuk Опубликовано 15 октября, 2018 Поделиться Опубликовано 15 октября, 2018 Я думаю такая запись тоже не верна при последовательном коде,ведь порту не может быть присвоено такое значение case 1 : PORTC =0x9F;break; используется же только одна нога MCU 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 15 октября, 2018 Поделиться Опубликовано 15 октября, 2018 @Wawchuk , а код вообще чей, Ваш ? Как Вы его писали, не понимая как он работает ? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Wawchuk Опубликовано 15 октября, 2018 Поделиться Опубликовано 15 октября, 2018 код не мой конечно 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 15 октября, 2018 Поделиться Опубликовано 15 октября, 2018 Вы бы хоть схему, что ли, показали. Как у Вас там и что подключено - остаётся только догадываться. 1 минуту назад, Wawchuk сказал: код не мой конечно Блин, там кода - 3.5 строки. Не пробовали свой написать ? В чужом г...е ковыряться всегда противнее. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Wawchuk Опубликовано 15 октября, 2018 Поделиться Опубликовано 15 октября, 2018 Собрана макетная плата с 16f676 и подключена к семисегментному индикатору с общим анодом 74HC595 (15 нога-А, 1-В, 2-С.....7 нога H) #define DATA_595 PORTCbits.RC3 #define STROBE_595 PORTCbits.RC4 #define CLK_595 PORTCbits.RC5 а дальше шью в железе, вариант снизу работает четко void main(void) { system_init(); while(1) { { data_submit(0b10011111); //1 __delay_ms(200); data_submit(0b00100101); //2 __delay_ms(200); data_submit(0b00001101); //3 ...... а со switch(seg) завис 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 15 октября, 2018 Поделиться Опубликовано 15 октября, 2018 (изменено) 1 час назад, Wawchuk сказал: ведь порту не может быть присвоено такое значение На колу мочало - начинай с начала? Где Вы были всё это время? Выходили покурить? Мы уже 23 часа назад обсудили порт С и осудили его использование в switch(seg) Изменено 15 октября, 2018 пользователем Yurkin2015 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Wawchuk Опубликовано 15 октября, 2018 Поделиться Опубликовано 15 октября, 2018 -)) , я пытаюсь понять 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 15 октября, 2018 Поделиться Опубликовано 15 октября, 2018 1 час назад, Wawchuk сказал: вариант снизу работает четко Ну, ещё чуть-чуть осталось. В функции segchar() кладите в переменную dat свои нолики-единички и затем посылайте data_submit(dat). Кстати, на всякий случай, для единички число 0b10011111 равно 0x9F, для двойки число 0b00100101 равно 0x25, для тройки число 0b00001101 = 0x0D и т.д. Это просто разные формы записи одних и тех же чисел: двоичная запись и шестнадцатеричная запись. У Вас в коде эти числа уже записаны в segchar(). Правда немного другие, для двойки и тройки по крайней мере. Надо бы проверить. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Wawchuk Опубликовано 16 октября, 2018 Поделиться Опубликовано 16 октября, 2018 вложил переменную case 4 : dat =0x99;break; ,и все случилось. Шестнадцатеричные значения пересчитаю. Спасибо за помощь. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Wawchuk Опубликовано 17 октября, 2018 Поделиться Опубликовано 17 октября, 2018 такая конструкция тоже работает //-------------------------------------------- unsigned char dat,j; unsigned char T0_count = 0; //-------------------------------------------- void interrupt timer0(){ switch (T0_count%10){ case 1 : dat =0x9F;break; case 2 : dat =0x25;break; case 3 : dat =0x0D;break; case 4 : dat =0x99;break; case 5 : dat =0x49;break; case 6 : dat =0x41;break; case 7 : dat =0x1F;break; case 8 : dat =0x01;break; case 9 : dat =0x09;break; case 0 : dat =0x03;break; } data_submit(dat); T0_count++; if(T0_count>10){ T0_count=0; } T0IF=0; } но это все статическая индикация ,а что почитать для перехода в динамическую индикацию ,пусть даже для 2-х разрядов-? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alexeyslav Опубликовано 17 октября, 2018 Поделиться Опубликовано 17 октября, 2018 То же самое, только дополнительно ко всему быстро-быстро переключать разряды, так чтобы все перебрать за 10мс и меньше. 0 Учение - изучение правил. Опыт - изучение исключений. Ссылка на комментарий Поделиться на другие сайты Поделиться
Wawchuk Опубликовано 18 октября, 2018 Поделиться Опубликовано 18 октября, 2018 Нашел для себя narodstream.ru ,доходчиво-)). Программа под динамическую индикацию (без утверждения, по крайней мере для меня)не совсем тоже самое,даже с учетом того что разряды подключены к анодам 7-сегментного индикатора мимо 74hc595, т.е.: #define R1_595 PORTCbits.RC1 #define R2_595 PORTCbits.RC2 мигание разрядов вижу(похоже на правду), так цифры (dat) не читаются,скорость большая, 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alexeyslav Опубликовано 18 октября, 2018 Поделиться Опубликовано 18 октября, 2018 алгоритм прост: 1) выключаешь разряд, 2) загружаешь следующую цифру в регистр и 3) включаешь следующий разряд. Делаешь это всё безостановочно и быстро для каждого разряда и в этой последовательности. Иначе будет "след" на сегментах. Иногда даже требуется дождаться когда силовые транзисторы переключающие разряды выключатся прежде чем выставлять следующую цифру, десятки микросекунд... но контроллер быстрее и могут появится артефакты. 0 Учение - изучение правил. Опыт - изучение исключений. Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 18 октября, 2018 Поделиться Опубликовано 18 октября, 2018 3 часа назад, Wawchuk сказал: Нашел для себя narodstream.ru ,доходчиво-)). Программа под динамическую индикацию как по мне бред укуренной мечты или настольное руководство, как не надо писать код , символы отображаемые на индикаторе это тупо таблица кодов и формировать ее кейсом вместо массива констант тупость и бездарно растрачиваемое время в прерывании. как собственно и использование лесницы if..elseif вместо кайса при переключении индикаторов. динамическая индикация на выводы порта Скрытый текст #include <htc.h> #include <pic.h> __CONFIG(INTIO & MCLRDIS & WDTDIS & LVPDIS & PWRTDIS & UNPROTECT); #define dig1 RA3 //индикатор 1 #define dig2 RA2 //индикатор 2 #define dig3 RA7 //индикатор 3 #define dig4 RA6 //индикатор 3 //#define tochka RB2 //#define warning RA1 //#define _XTAL_FREQ 4000000 #define LED PORTB #define SEG_A (1<<0) // назначение сегментов индикатора #define SEG_B (1<<1) // соответствующим битам порта LED #define SEG_C (1<<2) // A #define SEG_D (1<<3) // F B #define SEG_E (1<<4) // G #define SEG_F (1<<5) // E C #define SEG_G (1<<6) // D H #define SEG_H (1<<7) // const unsigned char digits [13] = { (SEG_A + SEG_B + SEG_C + SEG_D + SEG_E + SEG_F), // ; zero (SEG_B + SEG_C) , // ; one (SEG_A + SEG_B + SEG_D + SEG_E + SEG_G ), // ; two (SEG_A + SEG_B + SEG_C + SEG_D + SEG_G), // ; three (SEG_B + SEG_C + SEG_F + SEG_G), // ; four (SEG_A + SEG_C + SEG_D + SEG_F + SEG_G), // ; five (SEG_A + SEG_C + SEG_D + SEG_E + SEG_F + SEG_G), // ; six (SEG_A + SEG_B + SEG_C), // ; seven (SEG_A + SEG_B + SEG_C + SEG_D + SEG_E + SEG_F + SEG_G),// ; eight (SEG_A + SEG_B + SEG_C + SEG_D + SEG_F + SEG_G), // ; nine ~(SEG_A + SEG_B + SEG_C + SEG_D + SEG_E + SEG_F + SEG_G),// ; пусто (SEG_A + SEG_F + SEG_E), // ; R (SEG_A + SEG_D + SEG_E + SEG_F + SEG_G)}; // ; E unsigned char i ; // volatile unsigned char a ;// volatile unsigned char LEDS[4] ; // volatile struct flag_type { unsigned ON : 1; unsigned : 1; unsigned : 1; unsigned : 1; unsigned : 1; unsigned : 1; unsigned : 1; unsigned : 1; } flag; //*********************************************************************** //* ИНИЦИАЛИЗАЦИЯ МК //*********************************************************************** void init(void) { INTCON =0x00; // запрет всех прерываний OSCCON = 0b01100100; //с 4 по 6 бит значение 110 означает 4mhz // настройка портов PORTA = 0; //обнуляем порт а PORTB = 0; TRISA = 0b00110011; //порты RA2, RA3, RA7, RA1 на выход а остальные на вход TRISB = 0b00000000; // все порты RB на выход PORTA = 0; //обнуляем порт а PORTB = 0; // настройка АЦП ADCON0=0b01000001; //тактирование АЦП Fosc/8, выбран канал AN0, модуль АЦП включен ADCON1=0b10001110; //правое выравнивание, включен аналоговый вход RA0/AN0, остальные входы цифровые // настройка таймера TMR0 TMR0 = 0; //сбрасываем таймер в 0 OPTION = 0b00000011; // настройки таймера 1:16 и установка Set timer TMR0 даташит page 54: // разрешение прерываний TMR0IE = 1; GIE = 1; }; void interrupt Timer (void) { //прерывание по таймеру для динамической индикации if(TMR0IF) { TMR0IF=0; dig1=0; NOP(); dig2=0;NOP(); dig3=0; dig4=0; LED=~(digits [10]); // гасим все разряды a++; switch(a) { // Динамическая индикация. case 1: dig4=1; LED=~(LEDS[3]); break; // Первый разряд case 2: dig3=1; LED=~(LEDS[2]); break; // второй разряд case 3: dig2=1; LED=~(LEDS[1]); break; // третий case 4: dig1=1; LED=~(LEDS[0]); a=0; break; // четвертый } } } void convert (void) { // функция преобразования 1024 в 5.00в unsigned int tmp; static unsigned long old_adc; static unsigned int mass_adc[16]; static unsigned char ii; unsigned int adc,volt ; // unsigned char DS,j; unsigned char tempLEDS[4] ; // GODONE=1; while (GODONE){NOP();}; tmp= (ADRESH<<8)+ADRESL; //помещаем значение ацп в переменную adc чтобы могли с ним работать ниже ii++; ii=ii&0b00001111; mass_adc[ii]=tmp; adc=0; for (j=0;j<16;j++) { adc=adc+mass_adc[j]; } adc=adc>>4; // adc = tmp; // adc= (((old_adc)<<8)- old_adc + tmp )>>8; // old_adc=adc ; adc = (adc*5000L)/1024; volt = adc; if ( volt==4999) { tempLEDS[3]= digits [10]; tempLEDS[2]= digits [12]; tempLEDS[1]= digits [11]; tempLEDS[0]= digits [11]; } else { for (j=0;j<4;j++) { DS=volt%10; volt=volt/10; if(j==3) { tempLEDS[j]= digits [DS] + SEG_H;} else { tempLEDS[j]= digits [DS];} } } GIE = 0; LEDS[3]= tempLEDS[3]; LEDS[2]= tempLEDS[2]; LEDS[1]= tempLEDS[1]; LEDS[0]= tempLEDS[0]; GIE = 1; } //*********************************************************************** //* ОСНОВНАЯ ПРОГРАММА //*********************************************************************** void main (void) { init(); for(i=255;i>0;i--); //******** ГЛАВНЫЙ ЦИКЛ ***************** while (1) { convert (); }; } динамическая индикация на 74HC595 Скрытый текст #include <htc.h> #include <pic.h> __CONFIG(INTIO & MCLRDIS & WDTDIS & PWRTDIS & UNPROTECT); //#define tochka RB2 //#define warning RA1 //#define _XTAL_FREQ 4000000 #define PIN_ST GPIO4 #define PIN_SH GPIO5 #define PIN_DS GPIO0 #define TRIS_DS TRIS0 #define SEG_A (1<<0) // назначение сегментов индикатора #define SEG_B (1<<1) // соответствующим битам порта LED #define SEG_C (1<<2) // A #define SEG_D (1<<3) // F B #define SEG_E (1<<4) // G #define SEG_F (1<<5) // E C #define SEG_G (1<<6) // D H #define SEG_H (1<<7) // #define dig3 (1<<8) //индикатор 1 #define dig2 (1<<9) //индикатор 2 #define dig1 (1<<10)//индикатор 3 #define dig0 (1<<11)//индикатор 3 #define LED_V (1<<12)//индикатор 1 #define LED_A1 (1<<13)//индикатор 2 #define LED_A2 (1<<14)//индикатор 3 // общий анод : const unsigned int digits [15] = { (SEG_G + SEG_H), //; zero (SEG_A + SEG_D + SEG_E + SEG_F + SEG_G + SEG_H ), //; one (SEG_C + SEG_F+ SEG_H ), // ; two (SEG_E + SEG_F+ SEG_H ), // ; three (SEG_A + SEG_D + SEG_E + SEG_H ), // ; four (SEG_B + SEG_E + SEG_H ), // ; five (SEG_B + SEG_H ), // ; six (SEG_D + SEG_E + SEG_F + SEG_G + SEG_H ), // ; seven (SEG_H ), //; eight (SEG_E + SEG_H ), //; nine (SEG_A + SEG_B + SEG_C + SEG_D + SEG_E + SEG_F + SEG_G + SEG_H ),//; пусто (SEG_A + SEG_B + SEG_C + SEG_D + SEG_F + SEG_H ), //; R (SEG_B + SEG_C + SEG_H ), //; E (SEG_A + SEG_G + SEG_H ), //; U (SEG_D + SEG_H ), //; A }; // общий катод : /* const unsigned int digits [15] = { (SEG_A + SEG_B + SEG_C + SEG_D + SEG_E + SEG_F), // ; zero (SEG_B + SEG_C) , // ; one (SEG_A + SEG_B + SEG_D + SEG_E + SEG_G ), // ; two (SEG_A + SEG_B + SEG_C + SEG_D + SEG_G), // ; three (SEG_B + SEG_C + SEG_F + SEG_G), // ; four (SEG_A + SEG_C + SEG_D + SEG_F + SEG_G), // ; five (SEG_A + SEG_C + SEG_D + SEG_E + SEG_F + SEG_G), // ; six (SEG_A + SEG_B + SEG_C), // ; seven (SEG_A + SEG_B + SEG_C + SEG_D + SEG_E + SEG_F + SEG_G),// ; eight (SEG_A + SEG_B + SEG_C + SEG_D + SEG_F + SEG_G), // ; nine ~(SEG_A + SEG_B + SEG_C + SEG_D + SEG_E + SEG_F + SEG_G),// ; пусто (SEG_A + SEG_F + SEG_E), // ; R (SEG_A + SEG_D + SEG_E + SEG_F + SEG_G), // ; E ( SEG_B + SEG_C + SEG_D + SEG_E + SEG_F), // ; U (SEG_A + SEG_B + SEG_C + SEG_E + SEG_F + SEG_G) // ; A }; */ unsigned char i ; // volatile unsigned char a=0 ;// volatile unsigned int LEDS[4] ; // //volatile unsigned int tempLEDS[4] ; // volatile struct flag_type { unsigned ON : 1; unsigned : 1; unsigned : 1; unsigned : 1; unsigned : 1; unsigned : 1; unsigned : 1; unsigned : 1; } flag; unsigned int read_ADC (unsigned char chanel); //*********************************************************************** //* ИНИЦИАЛИЗАЦИЯ МК //*********************************************************************** void init(void) { INTCON =0x00; // запрет всех прерываний CMCON = 0x07; // компаратор выключен // настройка портов GPIO = 0; //обнуляем порт а TRISIO = 0b00000111; //порты RA2, RA3, RA7, RA1 на выход а остальные на вход GPIO = 0; //обнуляем порт а // настройка АЦП ANSEL=0b00010111; //тактирование АЦП Fosc/8, включен аналоговый вход RA0/AN0, остальные входы цифровые ADCON0=0b10000001; //правое выравнивание, выбран канал AN0, модуль АЦП включен // настройка таймера TMR0 TMR0 = 0; //сбрасываем таймер в 0 OPTION = 0b00000011; // настройки таймера 1:16 и установка Set timer TMR0 даташит page 54: // разрешение прерываний T0IE = 1; GIE = 1; }; void interrupt Timer (void) { //прерывание по таймеру для динамической индикации unsigned char i; unsigned int registr ; if(T0IF) { T0IF=0; switch(a) { // Динамическая индикация. case 0: // Первый разряд registr= LEDS[0] ; a=2; break; case 1: // второй разряд registr= LEDS[1] ; a=3; break; case 2: // третий registr= LEDS[2] ; a=1; break; case 3: // четвертый registr= LEDS[3] ; a=0; break; } ANS0=0; TRIS_DS=0; for(i=0;i<16;i++) { if(registr&(1<<15)) {PIN_DS = 1;} else {PIN_DS = 0;} registr = registr<<1; PIN_SH = 1; NOP(); PIN_SH = 0; PIN_DS = 0; } NOP(); PIN_ST = 1; NOP(); PIN_ST = 0; TRIS_DS=1; ANS0=1; } } void convertU (void) { // функция преобразования 1024 в 5.00в unsigned int volt ; // unsigned char DS; unsigned char j; unsigned int tempLEDS[4] ; volt = read_ADC (0); if ( volt>=4999) { tempLEDS[3]= digits [10]; // выводим Err tempLEDS[2]= digits [12]; tempLEDS[1]= digits [11]; tempLEDS[0]= digits [11]; } else { for (j=0;j<4;j++) { DS=volt%10; volt=volt/10; tempLEDS[j]= digits [DS]; } tempLEDS[3]&= (~ SEG_H); } tempLEDS[3]|= dig3; tempLEDS[2]|= dig2; tempLEDS[1]|= dig1; tempLEDS[0]|= dig0; GIE = 0; LEDS[3]= tempLEDS[3]; LEDS[2]= tempLEDS[2]; LEDS[1]= tempLEDS[1]; LEDS[0]= tempLEDS[0]; GIE = 1; } void convertA (void) { // функция преобразования 1024 в 5.00в unsigned int volt ; // unsigned char DS; unsigned char j; unsigned int tempLEDS[4] ; volt = read_ADC (1); if ( volt>=4999) { tempLEDS[3]= digits [10]; tempLEDS[2]= digits [12]; tempLEDS[1]= digits [11]; tempLEDS[0]= digits [11]; } else { for (j=0;j<4;j++) { DS=volt%10; volt=volt/10; tempLEDS[j]= digits [DS]; } tempLEDS[3]&= (~ SEG_H); } tempLEDS[3]|= dig3; tempLEDS[2]|= dig2; tempLEDS[1]|= dig1; tempLEDS[0]|= dig0; GIE = 0; LEDS[3]= tempLEDS[3]; LEDS[2]= tempLEDS[2]; LEDS[1]= tempLEDS[1]; LEDS[0]= tempLEDS[0]; GIE = 1; } //*********************************************************************** //* ОСНОВНАЯ ПРОГРАММА //*********************************************************************** void main (void) { init(); for(i=255;i>0;i--); //******** ГЛАВНЫЙ ЦИКЛ ***************** while (1) { if(GPIO3) { convertU (); } else { convertA (); } // while (!CMIF || !TMR1IF); // while (!CMIF | !TMR1IF); // while (!CMIF || !PIR1bits.TMR1IF); NOP(); NOP(); }; } //************************************************************************ //* //************************************************************************ unsigned int read_ADC (unsigned char chanel) { // функция преобразования 1024 в 5.000в static unsigned int old_adc,adc; static unsigned char caunt; unsigned char j=200; ADFM=1; ADCON0 = (ADCON0&0b11000011)|(chanel<<2); ; // while (j--); GODONE=1; while (GODONE){NOP();}; old_adc += (ADRESH<<8)+ADRESL; //помещаем значение ацп в переменную adc чтобы могли с ним работать ниже caunt++; caunt&=0b00111111; if(caunt == 0) { adc = old_adc>>6; old_adc = 0;} return (adc*5000L)/1023; } // end "read_ADC" 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Wawchuk Опубликовано 18 октября, 2018 Поделиться Опубликовано 18 октября, 2018 в main остается только счет на 2 разряда: while(1) { for(i=0;i<100;i++){ segchar(i); data_submit(dat); __delay_ms(500); } } в вот внутри разрядов segchar(R2) не различает единицы и десятки: void interrupt timer0() { T0_discharge(); T0IF=0; } void T0_ledprint(unsigned int number) { R1 = number%10; R2 = number%100/10; } //-------------------------------------------- void T0_discharge(void) { if(n_count==0) { PORTCbits.RC2 = 0; // segchar(R2); PORTCbits.RC1 = 1; } else if(n_count==1) { PORTCbits.RC1 = 0; // segchar(R1); PORTCbits.RC2 = 1; } n_count++; if (n_count>1) n_count=0; } сорри не увидел 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 18 октября, 2018 Поделиться Опубликовано 18 октября, 2018 в прерывании должна быть только динамическая индикация, все расчеты что именно отображает индикатор и с какой скоростью изменяются показания задаются в майне(совершенно случайно деление/умножение очень легко может превысить время периода динамической индикации и тем более его не делают в прерывании) , данные в прерывание передаются атомарно, на время передачи прерывания запрещаются. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Wawchuk Опубликовано 18 октября, 2018 Поделиться Опубликовано 18 октября, 2018 надо осмыслить,спасибо -)) 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alexeyslav Опубликовано 23 октября, 2018 Поделиться Опубликовано 23 октября, 2018 Плотность какой жидкости надо измерять в паяльнике? 1 Учение - изучение правил. Опыт - изучение исключений. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dr. West Опубликовано 23 октября, 2018 Поделиться Опубликовано 23 октября, 2018 Очевидно, той самой, после употребления которой возникают подобные идеи. 0 "Я не знаю какой там коэффициент, я просто паять умею. " Ссылка на комментарий Поделиться на другие сайты Поделиться
Wawchuk Опубликовано 24 октября, 2018 Поделиться Опубликовано 24 октября, 2018 Ругается компилятор : main.c:131: error: (1098) conflicting declarations for variable "data_submit" (main.c:131) new_7.c 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Wawchuk Опубликовано 24 октября, 2018 Поделиться Опубликовано 24 октября, 2018 разобрался 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.