Чему у вас результат равен PINE & 1<<PE6 ? Какие значение может принимать digitalWrite(13, х ) ?
равен как писал выше горит светик. он таки горит! digital write (pin, 0) все что не ноль единица. как и в if все что не ноль true. так я же говорю что я дижиталврайт вообще убрал if portE portC=1 дело не в райте
Читаем вывод настроенный на ВЫХОД, маскируем полученное значение по И с единицей и полученный результат впихериваем в другой порт.
это обычная програмерская логика электронщики железячники пишут в лоб програмеры использую значения одного для другого. обычная практика.
там логика школьника
выводЕ нам что позволяет отправить ноль или один правильно ? этот ноль один зажигает светик, реле, и т.д.
PINE или PORTE(как чтение. и маска тут вообще не причем , можете абстрогироваться от маски) просто читает что на выводе. ему всеравно даже этот вывод или вход. они просто читают что там ноль иои один а не выход это или вход. просто как 2 копейки.
PORTC (как запись) пишет 0 или 1. дижитал врайт тоже пишет 0 или >=1 как один
Ваш лед загорается уже после того как вы прочитали Пин. После записи 1 в Порт эта 1 в Пин вылезет только через 1 такт, т.е. вы читаете, когда на Пин эта 1 ещё не пришла. Имхо. Когда читаете из Порт- всё хорошо. Вы посмотрите во что это компилируется. Вот сто пудов будет
Out PORTx,y In PINx,y Между ними поставите nop и всё будет ок
_________________ Я всё-всё узнAю и стану профессором.
Не пойму смысла в том примере... (пишем данные в порт и затем считываем их значение ) Разве что использование в режиме самоконтроля выходного уровня вывода в простейших приложениях. Но там заметно информативнее обратная связь от регулируемого объекта, а не контроль уровня перед силовым ключом. Для передачи данных от выхода аппаратного модуля для последующего программного опроса данных с того же вывода такой способ неприемлем ибо альтернативные функции отключают стандартный аппаратный функционал порта. А за интервал стабилизации сигнала... то "по умолчанию" как бы должно использоваться... автором прожки... Ибо коль влез аж на уровне портов, то даташит уж точно перечитать должен был...
Не пойму смысла в том примере... (пишем данные в порт и затем считываем их значение )
все верно. скажем это дубликатор. верификатор. контрол чек. сидим мы в кресле перед приборной панелью запуска реактивного двигателя и нам загорается лампочка когда двигатель запущен. но вот зараза. двигатель реально запущен. а лампочка нам не загорается. и мы думаем что двигатель не запущен
Добавлено after 34 seconds: я добавил коментарии в этот пример выше как оно должно работать и как оно сейчас работает
Добавлено after 48 seconds: а тем временем такие эксперименты
Прогоните прогу в студии/протеусе пошагово и посмотрите на Порт, Пин- что происходит. И да, присоединяюсь к ВОВ51, так не делают. Приведённые вами цифры говорят, что или на линиях что-то есть( нагрузка) или альтернативные функции дают такой результат. Вместо делай пойдёт ноп или а=0 - что угодно. Перед чтением 1 должна стабилизироваться на Пин.
_________________ Я всё-всё узнAю и стану профессором.
Было б не на леонадре, а на нано/уно/про-мини можно и перепроверить, а так... только предположить...
Неуж-то выводов для нормального контроля нехватает?
Кыстати... Я на тиньке 2313 как-то недавно поймал поврежденный входной канал то-ли на РА0 то-ли на РА1... Ну не идет прожка и все... Детальный тест проблему выявил - пришлось кристалл заменить - лапки "впритирку" требовались. Воть тут... https://radiokot.ru/forum/viewtopic.php ... 5#p3460865
Платка - то пустая, а вот начальная инициализация у адурины отнюдь не пустая (даже при пустом трафарете скотча). Это совсем не одно и то же, что с "чистым" МК непосредственно в "чистом ассемблере" тест городить.
int ledPin = 13; // LED connected to digital pin 13 int inPin = 7; // pushbutton connected to digital pin 7 int val = 0; // variable to store the read value
void setup() { pinMode(ledPin, OUTPUT); // sets the digital pin 13 as output pinMode(inPin, INPUT); // sets the digital pin 7 as input }
void loop() { val = digitalRead(inPin); // read the input pin digitalWrite(ledPin, val); // sets the LED to the button's value }
_________________ Я всё-всё узнAю и стану профессором.
Я не силён в сях но void loop() { PORTE |= 1<<PE6; digitalWrite(13, PINE & 1<<PE6 ); //issue here. if I change to PORTE will work не понял, где здесь чтение? В леонарде 13 пин это что? Вы пишете в пинЕ6? Или тут digitalread должно быть?
_________________ Я всё-всё узнAю и стану профессором.
while (1) { PORTE |= 1<<PE6; delay(1000); // wait for a second Serial.print("HIGH PORTE = " ); Serial.println(PORTE , BIN); Serial.print("HIGH PINE = " ); Serial.println(PINE , BIN);
PORTE &= ~(1<<PE6); delay(1000); Serial.print("LOW PORTE = " ); Serial.println(PORTE , BIN); Serial.print("LOW PINE = " ); Serial.println(PINE , BIN); } }
Для контроля на РЕ6 через резистор ом 300 повесить светодиод, что РЕ6 действительно моргает.результат сюда.
PIND is the input register variable It will read all of the digital input pins at the same time.
а так как у меня выходы то может поэтому такая катавася... хотя у всех работает и для выходов и всё хорошо и опять же в даташите написано внезависимости от направления PIN должен читать. чудеса
Последний раз редактировалось alex68md Чт май 23, 2019 19:14:41, всего редактировалось 1 раз.
вы бы еще почитали про то, как у AVR порты устроены. PIND - это регистр, хранящий уровни сигналов на физических пинах МК, PORTD - это регистр, управляющий подачей на пины МК уровни изнутри МК. поэтому независимо от режима работы порта, заданного регистром DDRD, читать PIND можно всегда, как и всегда можно писать PORTD - просто результаты могут быть неожиданными.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
уже говорил в другой теме и повторю в этой: ваши проблемы не возникали ни у кого из тех, кто пользуется AVR. поэтому не надо пенять на микроконтроллер, проблема явно не в нём. согласно вашему коду между записью в порт и чтением его пинов проходит куда больше длительности одного NOP-а, так что дело явно не в том, что уровни не успевают устаканиться.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения