-
Постов
5 333 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Тип контента
Профили
Форумы
Блоги
Весь контент Alex
-
Вам, по сути, только вот эту строку переделать для цикла : myOLED.print( "-29-" , CENTER, 48); Остальное всё - одно и тоже, повторяющееся. И запихиваем этот маленький кусок кода в цикл. Посмотрите, может ли класс OLED работать с числами. PS: Я настоятельно Вам рекомендую бросить эту затею и заставить руководство приобрести лицензированную автоматику. Поверьте мне, как КИПовцу с 20-тилетнем стажем, газовые котлы - страшная штука. А в условиях даже небольших помех, ваша "автоматика" обязательно будет сбоить. И дай Бог, чтобы она сбойнула в нужную сторону
- 21 ответ
-
2
-
Ну вот, видите, опять двадцать пять ... У меня на кухне не течёт горячая вода. В чём проблема, можете сказать ?
-
@Ivan Rusev , Вам ещё научиться вопросы задавать, чтобы Вас понимали - было бы огромным плюсом.
-
Ничего. Оно отложится до выполнения текущего прерывания. PS: Нет в Мегах никаких приоритетов прерываний. Просто вектора расположены по-порядку. Если произойдёт одновременно 2 события, то первым выполнится с наименьшим адресом. Вот и весь "приоритет".
-
Тогда Вы форумом ошиблись. Тут гадалки и экстрасенсы не тусят. Невозможно Вам помочь по фразе "У меня не работает".
-
Если Вы хотите, чтобы Вам просто посочувствовали, то пожалуйста - сочувствую...
-
Что конкретно делаете, и какие результаты не устраивают ? Подробнее опишите. На вопрос "Как реализовать ?" есть 1000 и 1 ответ.
-
Можно. А кто ж это знает, кроме Вас ?
-
https://www.radiokot.ru/forum/viewtopic.php?f=59&t=175669 Думаю, эта тема уже не актуальна
-
А вот такой вариант : signed char x = 50; void fun(){ static signed char a=0xff; if((a-=x)<0) open_triac(); } уже имеет более красивую картинку : PS: А это Ваш вариант функции error :
-
Естественно. АСМ - язык конкретного железа. А Си - язык высокого уровня, который не может захватить все существующие процессоры и их команды. По этому, у него нет оператора "сложить с пропуском по переполнению" Как вариант, на вскидку : unsigned char x; { static unsigned char a=0xff; if(a<x) open_triac(); a-=x; } XC8 : 10: void fun(){ 7F4 3032 MOVLW 0x32 11: static unsigned char a=0xff; 7FC 30FF MOVLW 0xff 12: 13: if(a<x) open_triac(); 7F5 0270 SUBWF fun@a, W 7F6 1803 BTFSC STATUS, 0 7F7 2FF9 GOTO 0x7f9 7F8 27EF CALL open_triac 14: a-=x; 7F9 3032 MOVLW 0x32 7FA 02F0 SUBWF fun@a, F 15: 16: 17: } 7FB 0008 RETURN Неоптимально, конечно. Хоть и PRO-версия.
-
@Splav , если Вы пишите под PIC, и Вам очень хочется сделать этот алгоритм быстрый, с однобайтовыми переменными, то просто вставьте кусок АСМ-кода. Тогда вся конструкция выльется всего в несколько команд - сложение с проверкой бита переполнения (пропуск следующей команды, которая открывает триак). Остаток, как Вы его называете, будет сам оставаться в переменной, после переполнения.
-
Отладка - неотъемлемая часть написания программ. Прогоните отладчиком и посмотрите, что передаётся в LCD_SendACharcter. Возможно, компилятор пихает строку куда-нибудь не туда, в какую-нибудь не ту область памяти.
-
Про отладку что-нибудь слышали ? Подобное на раз-два вылавливается.
-
Всем, чем попадётся ) А ели выбесит - могу и молотком убить Не весь исходник выложили
-
А не проще выложить исходник ? Чтобы любой сам смог подправить под себя.
-
Диапазон входных напряжений АЦП определяется питанием МК. Смещайте своё напряжение до положительного диапазона и делите его. Простейшая задача для школьника по электронике.
-
В чём тогда у Вас проблема ? Всё доступно, всё имеется, всё на руках, ... Берём и делаем.