Например TDA7294

Форум РадиоКот • Просмотр темы - PINx не читает порт на леонардо :(
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вс апр 28, 2024 10:04:31

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 67 ]    , , 3,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Пт май 24, 2019 11:38:01 
Грызет канифоль

Зарегистрирован: Сб янв 03, 2015 21:03:24
Сообщений: 266
Рейтинг сообщения: 0
а, так что дело явно не в том, что уровни не успевают устаканиться.


ну я не вижу тут альтернативных вариантов , код приведен выше. это весь код.
делаем паузу меньше 3 мс. ПИН не читает. делаем больше - читает.
ПОРТ читает сразу о чем я сразу говорил с первого сообщения. но при этом порт не всё читает . ПИН более всеядный но тормознутый


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Пт май 24, 2019 11:43:55 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
alex68md писал(а):
ну я не вижу тут альтернативных вариантов
я просто напоминаю, что проблемы вашего зрения не являются основанием огульно винить микроконтроллер. а в остальном - каждый сам выбирает, как выстрелить себе в ногу :)

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Пт май 24, 2019 11:59:32 
Держит паяльник хвостом

Карма: 10
Рейтинг сообщений: 99
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 968
Рейтинг сообщения: 0
Если бы только зрения... Проблемы элементарной логики.(


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Пт май 24, 2019 12:06:36 
Грызет канифоль

Зарегистрирован: Сб янв 03, 2015 21:03:24
Сообщений: 266
Рейтинг сообщения: 0
например ?про логику. или просто зашли оскорбить новичка?

я просто делюсь тем что обнаружил. а вообще интернет вообще такая штука что можно тут огульно или не огульно заявлять что хочешь (ну кроме криминала) у каждого должна быть своя голова.

я не оспариваю вашего опыта и умения работать с авр. но вот вы например можете привести код (на чистом С или асм) для леонардо чтоб PIN прочитал единицу пусть даже через один nop ?
потому что я не думаю что аврдуде компилирует так криво код в котором нет ни одной ардуиновской вставки. хотя всё может быть конечно. но если это не компилятор то других причин нет. почему PIN нужно 4мс на расскачку при том что PORT сразу могёт. может это специфика камня 32u4 ?
приедет нано проверю и на ней


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Пт май 24, 2019 12:10:51 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
alex68md писал(а):
аврдуде компилирует так криво код
avrdude - это программатор, а не компилятор, он ничего не компилирует. а компилятор в ардуине тот же самый, что и в AVR Studio или Atmel Studio - avr-gcc, коим и я пользуюсь много лет

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Пт май 24, 2019 17:28:24 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14078
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
ДОСТАЛ таки!
:twisted:
Вложение:
sketch_may24a.rar [1.06 KiB]
Скачиваний: 121

приеду домой гляну как на практике работает (для нанки/про-мини или uno).
:sleep:

Добавлено after 3 hours 37 minutes 18 seconds:
Ну и какого ПСА мы воду мутим?
:tea:
Вот с максимальным быстродействием (с точки зрения особо докусучих)
Код:
#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" и смотрим результат!
:twisted:
Кстати...
Ежли после запуска именно "terminal" не появилось ничего жмем или кнопу "сброс" на платке адуриньи или тыць на кнопе DTR в панели терминала.
8)


Последний раз редактировалось BOB51 Пт май 24, 2019 20:29:01, всего редактировалось 3 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Пт май 24, 2019 18:05:05 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6628
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
может дело в том, что регистр порт — это то что на ногу послали, а регистр пин — то что на ноге намеряли? т.е. если послал в порт "1", то пока откроются выходные ключи, пока поднимется напряжение на ноге, пока это напряжение измерится... (знаю, что каждая операция быстра) может и успеет пара команд выполниться... они ведь тоже быстрые...

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Пт май 24, 2019 18:22:54 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14078
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Исправлено с комментарием относительно допущенных ошибок первого варианта -
при обработке функций вывода в ПК необходимо нормировать маской ОБА значения
а не только считываемое из порта Р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); // выставляем для удобства восприятия
 }

}


:wink:
Пардонс... я в СИ новичекс...
:?


Последний раз редактировалось BOB51 Пт май 24, 2019 20:25:57, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Пт май 24, 2019 19:54:22 
Грызет канифоль

Зарегистрирован: Сб янв 03, 2015 21:03:24
Сообщений: 266
Рейтинг сообщения: 0
инфа про ноп от форумчан - он не желательен а 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мс надо мне было.
о тут продолжение темы от маститых котов :) попробую ваши скетчи на досуге


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Сб май 25, 2019 06:21:22 
Держит паяльник хвостом

Карма: 10
Рейтинг сообщений: 99
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 968
Рейтинг сообщения: 0
например ?про логику. или просто зашли оскорбить новичка?

Неужели сложно чётко и лаконично описать проблему, без всякой посторонней шелухи?
Такое впечатление что вы в бреду разговариваете с самим собой.(

3-4 мс - это если у вас к выходу подключен электролитический конденсатор. Либо сам выход неисправен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Сб май 25, 2019 17:16:49 
Грызет канифоль

Зарегистрирован: Сб янв 03, 2015 21:03:24
Сообщений: 266
Рейтинг сообщения: 0
проверил и ваш код и свой
Код:
#define mask B00111111 //ограничение на "вольные лапки"
#define CLED (1 << PC7)
#define DLED (1 << PD6)
#define ELED (1 << PE6)
#define FLED (1 << PF0)

void setup() {
  Serial.begin(115200);
  while (!Serial);
  delay(2000);
  DDRF = 0xFF; PORTF = 0;
  DDRE = 0xFF; PORTE = 0;
  DDRD = 0xFF; PORTD = 0;
  DDRC = 0xFF; PORTC = 0;
  DDRB = 0xFF; PORTB = 0;


  DDRB |= mask;
  PORTB |= mask;

}

void loop() {
 
  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 читает предварительно установленный сигнал


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Сб май 25, 2019 18:27:37 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Вы asm хоть смотрели?
Спойлер
Код:
void loop() {
 uint8_t  a;
  for (byte n = 0; n < B01000000; n++)
  {
 
   PORTB = n;
   // вот сюда и вставляй свою задержку!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   a= 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((a & mask), BIN);  // print as an ASCII-encoded binary
    Serial.println("----------");
    delay(600);

  }
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Вс май 26, 2019 07:00:59 
Грызет канифоль

Зарегистрирован: Сб янв 03, 2015 21:03:24
Сообщений: 266
Рейтинг сообщения: 0
Смотрел. Димон , так я ее туда и вставил. Выше же я писал 2 дня назад. Что нужна задержка 3-4мс. Delay (3) стоит в коде у меня там. Ровно в то место в которое вы указали.
Вообщем с этой задержкой вопрос понятен. Спасибо.

Непонятно другое:
Настравиваю ногу на input LOW, я имею ввиду начальное состояние. Input Pull down. Ждем единицу от датчика. Приходит единица и PINx видит ее. А если меняю PINx на Portx то не видит. Почему?
Хотя мы пришли к тому в наших примерах выше что результат должен быть одинаковый на порт и пин


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Вс май 26, 2019 07:35:52 
Вымогатель припоя

Карма: -8
Рейтинг сообщений: 49
Зарегистрирован: Вс дек 28, 2014 21:54:05
Сообщений: 615
Рейтинг сообщения: 0
Потому что Портх не видит что вы подали на ногу. А вот если подаёте на ногу изнутри мк, те на Порт, информация сначала выскакивает но Порт, а через такт и на Пин.
Пин для чтения и предназначен.

_________________
Я всё-всё узнAю и стану профессором.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Вс май 26, 2019 07:54:19 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
alex68md писал(а):
Настравиваю ногу на 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 мксек (микросекунды).

Команда nop выполняется за 0,0625 мксек.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Вс май 26, 2019 08:39:12 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14078
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
На платках-прототипах возможны незначительные отклонения задержки установления уровня из-за топологии разводки дорожек и "дополнительных обыязок" - запараллеливания на разные внешние разъёмы и/или подключения индикаторов/микросхем расширения (в пределах платки).
Теоретически вероятно...
Однако на практике - пока не замечалось (у тех, с которыми пришлось дело иметь)
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Вс май 26, 2019 08:43:01 
Грызет канифоль

Зарегистрирован: Сб янв 03, 2015 21:03:24
Сообщений: 266
Рейтинг сообщения: 0
dgrett, Dimon456, понял спасибо. Это если сам МК посылает то порт прочтёт. А если из вне чтото приходит на инпут только PIN поможет. Спасибо

Dimon456, про МГц я все понимаю, но на моей леонардо если использовать ардуино delay то 3мс нужно. Меньше Ника к. Либо 2 ноп.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Вс май 26, 2019 09:55:08 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14078
Откуда: ДОНЕЦК
Рейтинг сообщения: 2
.....
КОГДА ЖЕ КОТЯТКИ НАУЧАТСЯ НАЧИНАТЬ РАБОТУ С ПРЕДВАРИТЕЛЬНОГО ИЗУЧЕНИЯ ВСЕЙ НЕОБХОДИМОЙ ДОКУМЕНТАЦИИ??...
:cry:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Вс май 26, 2019 12:13:25 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
alex68md писал(а):
если использовать ардуино delay то 3мс нужно. Меньше Ника к. Либо 2 ноп
вы хотя бы понимаете, что разница между 3 мс и 2 NOP составляет 3-4 порядка?! как у вас это может быть эквивалентом?!

NOP выполняется за 1 такт, т.е. при тактовой частоте 8000000 Гц (я не знаю, сколько у ардуины, беру значение "по умолчанию) за 125 наносекунд. НАНО!!! два NOP - это 250 наносекунд.

3 миллисекунды (МИЛЛИ!!!) задержки это ровно 3000000 наносекунд! то есть ровно в 12 тысяч (ТЫСЯЧ!!!) раз медленнее двух NOP.

никак не может быть в вашей ардине ИЛИ 3 мс ИЛИ 2 NOP. если для считывания НЕОБХОДИМО 3 мс, то 2 NOP никак не может быть достаточно!!!

неужели у вас калькулятора нет, и арифметики вы в школе не изучали?!

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PINx не читает порт на леонардо :(
СообщениеДобавлено: Вс май 26, 2019 15:16:54 
Грызет канифоль

Зарегистрирован: Сб янв 03, 2015 21:03:24
Сообщений: 266
Рейтинг сообщения: 0
Вы уж не серчайте
Я все понимаю :) но я же цифры не из головы беру
Ставлю два ноп работает.
Ставлю delay (2) не работает
Так оно на практике
Ради интереса попробую _delay_ms (1);


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 67 ]    , , 3,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y