gvsp, в проге ардуиновской есть такое что пишешь чего нить в порт ( ну например включаешь какой нить индикаторный светодиодик ) , а потом читаешь с порта - горит ли светодиодик - и делаешь какое то действие связанное с тем состоянием которое обуславливает горение или негорение светодиодика.
как то попросили разобратся: "почему управление автоклавом глючит" ( управление на ардуино сделано в лучших ардуиновских традициях выше описанных ) . хохотал как обычно.
перевел просто логику с анализа горит / не горит светодиодик ( их там несколько было - каждый отображал свой шаг действия ) - на структуру в объединении - просто в озу хранится. и глюки изчезли
Как собрать систему старт-стопа для чайников
SedoY
Профессор
Новосибирск
5.3K 2.2K
Отв.140 19 Мая 26, 20:01
gvsp
Кандидат наук
Ленинград
380 43
Отв.141 19 Мая 26, 21:05
потом читаешь с порта - горит ли светодиодикSedoY, 19 Мая 26, 20:01Наверное пытались читать состояние вывода назначенного выходом, а функция применима если вывод назначен входом.
dee
Научный сотрудник
Минск
11.7K 2.7K
Отв.142 Вчера, 09:20
gvsp, что бы зажечь встроенный светодиодик ардуино записывает единицу в 5й бит порта В, нет никаких проблем потом прочитать этот бит в байте PORTB т.е узнать находиться порт в высоком состоянии или низком
Добавлено через 6мин.:
включить 13 пин (5 бит порта В) можно командой bitSet(PORTB, 5)
выключить - bitClear(PORTB, 5)
узнать в каком он состоянии - bitRead(PORTB, 5)
принудительно записать нужное значение bitWrite(PORTB, 5, Х) где Х или 0 или 1
Добавлено через 12мин.:
тоже самое делают команды по маске но они мне не нравятся зато обработывают в один такт сразу весь порт
PORTB |= B00100000; // Включаем 13-й пин (HIGH)
PORTB &= B11011111; // Выключаем 13-й пин (LOW)
Добавлено через 6мин.:
вот пример вывода символов на семисегментный индикатор что бы были часы
PORTD = B10001000; // 1
PORTD = B10110011; // 2
PORTD = B10111001; // 3
...
PORTD = B01101011; // b
PORTD = B01010011; // C
PORTD = B10101011; // d
PORTD = B01110011; // E
PORTD = B01110010; // F
PORTD = B01100011; // t
Добавлено через 6мин.:
включить 13 пин (5 бит порта В) можно командой bitSet(PORTB, 5)
выключить - bitClear(PORTB, 5)
узнать в каком он состоянии - bitRead(PORTB, 5)
принудительно записать нужное значение bitWrite(PORTB, 5, Х) где Х или 0 или 1
Добавлено через 12мин.:
тоже самое делают команды по маске но они мне не нравятся зато обработывают в один такт сразу весь порт
PORTB |= B00100000; // Включаем 13-й пин (HIGH)
PORTB &= B11011111; // Выключаем 13-й пин (LOW)
Добавлено через 6мин.:
вот пример вывода символов на семисегментный индикатор что бы были часы
PORTD = B10001000; // 1
PORTD = B10110011; // 2
PORTD = B10111001; // 3
...
PORTD = B01101011; // b
PORTD = B01010011; // C
PORTD = B10101011; // d
PORTD = B01110011; // E
PORTD = B01110010; // F
PORTD = B01100011; // t
Volume
Научный сотрудник
Уфа
747 405
Отв.143 Вчера, 18:55
gvsp, что бы зажечь встроенный светодиодик ардуино записывает единицу в 5й бит порта В, нет никаких проблем потом прочитать этот бит в байте PORTBdee, Вчера, 09:20тут бы уточнить - все это про ардуинки на AVR. А ардуинки ныне AVR-ами не ограничиваются, поддержаны офигеть сколько процессоров, в которых все не так
SedoY
Профессор
Новосибирск
5.3K 2.2K
Отв.144 Вчера, 19:10 (через 15 мин)
Наверное пытались читать состояние вывода назначенного выходомgvsp, 19 Мая 26, 21:05там было - вместо того чтобы создать переменную в озу для хранения статуса, использовали ножки , да еще к которым проводки подключены - это же "антенны" - чего наловили из эфира то и получалось состояние.
это я как например привел - как ардуинщики ловят глюки в своих поделках
а функция применима если вывод назначен входомgvsp, 19 Мая 26, 21:05палкой в мозг ардуинщика это не вколачивают)))
Добавлено через 2мин.:
А ардуинки ныне AVR-ами не ограничиваютсяVolume, Вчера, 18:55людям бы на си писать, думать на си. архитектуру программы продумывать заранее, может и был бы толк
Добавлено через 2мин.:
обработывают в один такт сразу весь портdee, Вчера, 09:20вообще то 3 такта: чтение в регистр, модификация в регистре, запись обратно из регистра
или это - что вместо bitSet(PORTB, номер ножки)
Volume
Научный сотрудник
Уфа
747 405
Отв.145 Вчера, 19:50 (через 41 мин)
людям бы на си писать, думать на сиSedoY, Вчера, 19:10проблемка не в языке а в отсутствии понимания автоматизируемых реалий. Если не понимаешь что на пине кнопки будет дребезг и обрабатываешь его как 1/0 - нажат или нет, результат будет херовым хоть на питоне хоть на расте
TVM73
Доктор наук
Серпухов
814 63
Отв.146 Вчера, 20:08 (через 19 мин)
тоже самое делают команды по маске но они мне не нравятся зато обработывают в один такт сразу весь портdee, Вчера, 09:20Мне нравится.
SedoY
Профессор
Новосибирск
5.3K 2.2K
Отв.147 Вчера, 20:15 (через 7 мин)
вот пример вывода символов на семисегментный индикатор что бы былиdee, Вчера, 09:20а я ленивый, так делаю:
#define pset(b) (b)&=~0b11111011// установка точки в знакоместе
uint8_t simvolss [19]={// точка - сбрасываем бит 2
0b11111001,//0
0b10000001,//1
0b10111010,//2
0b10101011,//3
0b11000011,//4
0b01101011,//5
0b01111011,//6
0b10100001,//7
0b11111011,//8
0b11101011,//9
0b11110011,//А
0b01011011,//b
0b01111000,//C
0b10011011,//d
0b01111010,//E
0b01110010,//F
0b00000010,//-
0b01011010,//t
0b00000000 //ничего не горит
};
//пример:
txo.segment = simvolss[ tmp ];
txo.segment = pset(txo.segment);// точка
dee
Научный сотрудник
Минск
11.7K 2.7K
Отв.148 Вчера, 20:42 (через 28 мин)
это же "антенны"SedoY, Вчера, 19:10если подключены как высокоипедансный вход, если подключен подтягивающий резистор то особо не наловят
Добавлено через 14мин.:
а я ленивый, так делаю:SedoY, Вчера, 20:15ОЗУ в обмен на ПЗУ, ОЗУ меньше
