а, так что дело явно не в том, что уровни не успевают устаканиться.
ну я не вижу тут альтернативных вариантов , код приведен выше. это весь код. делаем паузу меньше 3 мс. ПИН не читает. делаем больше - читает. ПОРТ читает сразу о чем я сразу говорил с первого сообщения. но при этом порт не всё читает . ПИН более всеядный но тормознутый
я просто напоминаю, что проблемы вашего зрения не являются основанием огульно винить микроконтроллер. а в остальном - каждый сам выбирает, как выстрелить себе в ногу
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
например ?про логику. или просто зашли оскорбить новичка?
я просто делюсь тем что обнаружил. а вообще интернет вообще такая штука что можно тут огульно или не огульно заявлять что хочешь (ну кроме криминала) у каждого должна быть своя голова.
я не оспариваю вашего опыта и умения работать с авр. но вот вы например можете привести код (на чистом С или асм) для леонардо чтоб PIN прочитал единицу пусть даже через один nop ? потому что я не думаю что аврдуде компилирует так криво код в котором нет ни одной ардуиновской вставки. хотя всё может быть конечно. но если это не компилятор то других причин нет. почему PIN нужно 4мс на расскачку при том что PORT сразу могёт. может это специфика камня 32u4 ? приедет нано проверю и на ней
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
avrdude - это программатор, а не компилятор, он ничего не компилирует. а компилятор в ардуине тот же самый, что и в AVR Studio или Atmel Studio - avr-gcc, коим и я пользуюсь много лет
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
приеду домой гляну как на практике работает (для нанки/про-мини или uno).
Добавлено after 3 hours 37 minutes 18 seconds: Ну и какого ПСА мы воду мутим?
Вот с максимальным быстродействием (с точки зрения особо докусучих)
Код:
#define mask B00111111 //ограничение на "вольные лапки" byte data;
void setup() { // put your setup code here, to run once: Serial.begin(9600); // opens serial port, sets data rate to 9600 bps DDRB |= mask; PORTB |= mask; }
void loop() { // put your main code here, to run repeatedly: for (byte n=0; n<255; n++) { PORTB = n & mask; data = PINB; data = PINB; Serial.println("output of PORTB"); Serial.println(n, BIN); // print as an ASCII-encoded binary здесь ошибка - необходимо (n & mask), BIN Serial.println("input of PINB"); Serial.println((data & mask), BIN); // print as an ASCII-encoded binary delay(2000); } }
включаем монитор порта или "terminal" и смотрим результат!
Кстати... Ежли после запуска именно "terminal" не появилось ничего жмем или кнопу "сброс" на платке адуриньи или тыць на кнопе DTR в панели терминала.
Последний раз редактировалось BOB51 Пт май 24, 2019 20:29:01, всего редактировалось 3 раз(а).
может дело в том, что регистр порт — это то что на ногу послали, а регистр пин — то что на ноге намеряли? т.е. если послал в порт "1", то пока откроются выходные ключи, пока поднимется напряжение на ноге, пока это напряжение измерится... (знаю, что каждая операция быстра) может и успеет пара команд выполниться... они ведь тоже быстрые...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Исправлено с комментарием относительно допущенных ошибок первого варианта - при обработке функций вывода в ПК необходимо нормировать маской ОБА значения а не только считываемое из порта РIN - в противном случае (см. СКОТч выше) будет разнобой при последующих повторах цикла при том, что первый проход будет отображаться верно. Нижеприведенное от ошибок индикации свободно
Код:
#define mask B00111111 //ограничение на "вольные лапки" byte data;
void setup() { // put your setup code here, to run once: Serial.begin(9600); // opens serial port, sets data rate to 9600 bps DDRB |= mask; PORTB |= mask; }
void loop() { // put your main code here, to run repeatedly: for (byte n=0; n<255; n++) { PORTB = n & mask; data = PINB; data = PINB; // первое чтение является задержкой (фиктивное чтение) второе даст верные данные // сделано чтобы не вставлять NOP под ассемблером Serial.println("output of PORTB"); Serial.println((n & mask), BIN); // print as an ASCII-encoded binary Serial.println("input of PINB"); Serial.println((data & mask), BIN); // print as an ASCII-encoded binary delay(2000); // выставляем для удобства восприятия }
}
Пардонс... я в СИ новичекс...
Последний раз редактировалось BOB51 Пт май 24, 2019 20:25:57, всего редактировалось 1 раз.
инфа про ноп от форумчан - он не желательен а 100% необходим спасибо форумчане оказывается я прогладел это в ДШ
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;
Добавлено after 2 minutes 22 seconds: вот только одного нопа мне не хватало. как говорил 3-4мс надо мне было. о тут продолжение темы от маститых котов попробую ваши скетчи на досуге
for (byte n = 0; n < 255; n++) { PORTB = n & mask; //двойное чтение нам даёт необходимую задержку и гарантированно правильный вывод, поэтому //не стал его делать т.к. если мы перестраховываемся для гарантированного чтения то просто можем прочитать его позже. т.к. завязки именно на скоростное использование PINB в коде нету Serial.print(" send to PORTB = "); Serial.println(n & mask, BIN); // print as an ASCII-encoded binary Serial.print("output of PORTB = "); Serial.println((PORTB & mask), BIN); // print as an ASCII-encoded binary Serial.print(" input of PINB = "); Serial.println((PINB & mask), BIN); // print as an ASCII-encoded binary Serial.println("----------"); delay(600);
} }
результат на всех регистрах одинаковый
Добавлено after 1 minute 9 seconds: по поводу скорости проверил еще раз достаточно или двойное присвоение как у вас или двойной ноп и тогда PINx читает предварительно установленный сигнал
Смотрел. Димон , так я ее туда и вставил. Выше же я писал 2 дня назад. Что нужна задержка 3-4мс. Delay (3) стоит в коде у меня там. Ровно в то место в которое вы указали. Вообщем с этой задержкой вопрос понятен. Спасибо.
Непонятно другое: Настравиваю ногу на input LOW, я имею ввиду начальное состояние. Input Pull down. Ждем единицу от датчика. Приходит единица и PINx видит ее. А если меняю PINx на Portx то не видит. Почему? Хотя мы пришли к тому в наших примерах выше что результат должен быть одинаковый на порт и пин
Потому что Портх не видит что вы подали на ногу. А вот если подаёте на ногу изнутри мк, те на Порт, информация сначала выскакивает но Порт, а через такт и на Пин. Пин для чтения и предназначен.
_________________ Я всё-всё узнAю и стану профессором.
Настравиваю ногу на input LOW, я имею ввиду начальное состояние. Input Pull down. Ждем единицу от датчика. Приходит единица и PINx видит ее. А если меняю PINx на Portx то не видит. Почему?
Ас чего вы взяли что при input Portx должен что то видеть? Вы структурную схему порта контроллера открывали?
alex68md писал(а):
Хотя мы пришли к тому в наших примерах выше что результат должен быть одинаковый на порт и пин
Все верно, при режиме порта OUTPUT.
Добавлено after 15 minutes 11 seconds:
alex68md писал(а):
Что нужна задержка 3-4мс. Delay (3)
Вы что смеетесь? Это высокопроизводительные контроллеры, время выполнения одной команды При F = 16 МГц Tclk = 1/16000000 = 0,0000000625 сек = 0,0625 мксек (микросекунды).
На платках-прототипах возможны незначительные отклонения задержки установления уровня из-за топологии разводки дорожек и "дополнительных обыязок" - запараллеливания на разные внешние разъёмы и/или подключения индикаторов/микросхем расширения (в пределах платки). Теоретически вероятно... Однако на практике - пока не замечалось (у тех, с которыми пришлось дело иметь)
если использовать ардуино delay то 3мс нужно. Меньше Ника к. Либо 2 ноп
вы хотя бы понимаете, что разница между 3 мс и 2 NOP составляет 3-4 порядка?! как у вас это может быть эквивалентом?!
NOP выполняется за 1 такт, т.е. при тактовой частоте 8000000 Гц (я не знаю, сколько у ардуины, беру значение "по умолчанию) за 125 наносекунд. НАНО!!! два NOP - это 250 наносекунд.
3 миллисекунды (МИЛЛИ!!!) задержки это ровно 3000000 наносекунд! то есть ровно в 12 тысяч (ТЫСЯЧ!!!) раз медленнее двух NOP.
никак не может быть в вашей ардине ИЛИ 3 мс ИЛИ 2 NOP. если для считывания НЕОБХОДИМО 3 мс, то 2 NOP никак не может быть достаточно!!!
неужели у вас калькулятора нет, и арифметики вы в школе не изучали?!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Вы уж не серчайте Я все понимаю но я же цифры не из головы беру Ставлю два ноп работает. Ставлю delay (2) не работает Так оно на практике Ради интереса попробую _delay_ms (1);
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения