Блинк и смена output input входа.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

ранее как то не обращал внимание:

void loop() 
{
  digitalWrite(led, !digitalRead(led));   // Toggle led
  delay(5000);              
}

"а что так тоже можно" ??  всегда думал, что вход работает только так как инициализирован вначале.

В связи с этим вопрос -  а как этот кусок кода выглядит на чистом си  к примеру? Что кроется за этими пару строчек, или там все намного проще чем я думаю?

mixail844
Offline
Зарегистрирован: 30.04.2012

http://ww1.microchip.com/downloads/en/devicedoc/atmel-42735-8-bit-avr-mi...

вся информация начиная со стр 98.

оттуда же и код : 

unsigned char i;
 ...
 /* Define pull-ups and set outputs high */
 /* Define directions for port pins */
 PORTB = (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0);
 DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);
 /* Insert nop for synchronization*/
 __no_operation();
 /* Read port pins */
 i = PINB;
...

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Да, электрическая конструкция входа у Атмелов такова, что читать вход можно в любой момент времени. А вот писать - только настроив его как выход. Таким способом можно, к примеру, контролировать что там показывает нога ШИМ или какая ещё, настроенная как "выход". Вход всегда читает текущий потенциал на ноге.

В общем-то и это - упрощенно. Писать в ногу, которая настроена как "вход" .. тоже можно .. это реализует режим подтяжки входа к питанию через встроенные резисторы в 50кОм. Собственно "вход с подтяжкой" так и образуется: разрешаем глобальную подтяжку (вроде по умолчанию есть), пишем "1" в регистр выхода, и .. устанавливаем ногу "на выход".

P.S. Забыл .. в некоторых китайских "мега2560" (у меня такая была) - встроенный светодиод то ли низковольтный, то ли гасящее сопротивление "не то" ..  так и не стал выяснять, но этот код на нем не работал, читая всегда одно и тоже значение. Где-то тут писалось года 2 назад..

nik182
Offline
Зарегистрирован: 04.05.2015

 

Однако из даташита картинка. Видно,что все соединения всегда есть и всегда можно писать и читать все регистры, вот только согласно логике иногда выходной регистр не доходит до ноги (DDR запрещает). Входной читается всегда, когда есть клок на периферию. Запись во входной регистр (WPx) переворачивыет выходной. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Short Circuit пишет:

всегда думал, что вход работает только так как инициализирован вначале.

Так, он так и работает. Другое дело, что Вы зря думаете, что порт нельзя читать, когда он в режиме OUTPUT и в него нельзя писать, когда он в режиме INPUT. Можно и то, и другое. И это разумные действия. Более того, контноллер и сам "читает" пин, когда ему нужно, независимо от того, в каком пин режиме.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Входным цепям пина глубоко безразлично, кто устанавливает на нем напряжение: собственные выходные цепи или внешний источник.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

ЕвгенийП пишет:

Short Circuit пишет:

всегда думал, что вход работает только так как инициализирован вначале.

Так, он так и работает. Другое дело, что Вы зря думаете, что порт нельзя читать, когда он в режиме OUTPUT и в него нельзя писать, когда он в режиме INPUT. Можно и то, и другое. И это разумные действия. Более того, контноллер и сам "читает" пин, когда ему нужно, независимо от того, в каком пин режиме.

ну да.. так и думал до поры до времени.. :) теперь многое стало ясно.