Чтение порта С микроконтроллера
- Войдите на сайт для отправки комментариев
Сб, 27/04/2019 - 23:20
Порт С имеет 7 ножек, одна из них reset
void setup() { Serial.begin(19200); Serial.println("Start"); DDRC = 0b0111111;//A0-A5 INPUT Верно? void loop() { }
Верно ли выражение:
1
void
setup
() {
2
Serial
.begin(19200);
3
Serial
.println(
"Start"
);
4
DDRC = 0111111;
//A0-A5 OUTPUT!
5
}
6
7
void
loop
() {
8
PORTC = B0111111;
//На всех пинах порта С цифровые 1
9
}
DDRC и так изначально на вводе. Поэтому у PINC будет реальное состояние. Только это как то совсем не красиво для Ардуино. Фишка ведь в том что бы не зависеть от железа, от этого вашего PORTС, PINC, DDRC. Ага? Ну а если вы шарите больше, тогда и пишите без Ардуины какой то! Иначе всё через жо получается.)
DDRC и так изначально на вводе. Поэтому у PINC будет реальное состояние. Только это как то совсем не красиво для Ардуино. Фишка ведь в том что бы не зависеть от железа, от этого вашего PORTС, PINC, DDRC. Ага? Ну а если вы шарите больше, тогда и пишите без Ардуины какой то! Иначе всё через жо получается.)
А если мне нужно будет подключить подтягивающий резистор:
PORTC = B0111111;
PC6-PC5-PC4-PC3-PC2-PC1-PC0
RES-A5-A4-A3-A2-A1-A0
0-1-1-1-1-1-1
Первый пин Reset писать 0 ?
Насколько я помню подтягивающий резистор работает независимо от того используется ли пин для ресета или как IO
А вот если пин фьюзед как ресет, то читаться будет всегда 0. Если внешней подтяжки при этом нет, то надо включать внутреннюю иначе будет ресетится от любого чиха. Если есть внешняя подтяжка, то особо не важно, что писать 0 или 1.
Как грамотнее оформить" данный код?
Так? Пины могут быть с разных портов
А если одновременно 2 пина активны то свич не сработает. Если надо отследить отдельно каждую ногу то проще четыре ифа написать.
Сработает, к примеру, 4 и 5 пины, 16 +32 = 48
Мой косяк, я ж не сказала что все 16 позиций отслеживаю.
Это я к тому, что придётся все сочетания в case прописывать. Если надо, то надо. Но если ног несколько, дешевле if. A если отслеживать факт изменения шеснадцати ног разных портов, то нормально, только я б не замарачивался на точное соответствие номера ноги и позиции в переменной. Прописал бы от нулевого до 15 бита таблицу соответствия через дефайны. Саse быстрее if работает только если у него есть все последовательно значения без дырок от 0 до n. Если хоть одного значения нет, то компилятор все сase перестроит на if с потерей производительности.
Ну если у вас всего 16 позиций, то и делайте их от 0 до 15. Для наглядности заведите отдельную переменную и ветвитесь по ней.
А оформление - это пробелы, отступы, выравниевание, переменные прописными, макро заглавными, функции кэмэл и т.д.
А0..А3 уже определены в Ардуино. Нужно типа A0_PIN.)
Что-то типа XX_PIN тоже внутрях вайринга используется - я давеча заглядывал, удивился.
Всем Спасибо.
А оформление - это пробелы, отступы, выравниевание, переменные прописными, макро заглавными, функции кэмэл и т.д.
Я кавычки после слова поставила, мол "оформить в кавычках". =)