PINx не читает порт на леонардо :(

Обсуждаем контроллеры компании Atmel.
Ответить
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

[uquote="ARV",url="/forum/viewtopic.php?p=3637927#p3637927"]а она там есть на самом деле?[/uquote]
как писал выше горит светик. он таки горит!

Добавлено after 2 minutes 22 seconds:
[uquote="Dimon456",url="/forum/viewtopic.php?p=3637955#p3637955"]Чему у вас результат равен PINE & 1<<PE6 ?
Какие значение может принимать digitalWrite(13, х ) ?[/uquote]

равен как писал выше горит светик. он таки горит!
digital write (pin, 0) все что не ноль единица. как и в if все что не ноль true.
так я же говорю что я дижиталврайт вообще убрал
if portE portC=1
дело не в райте

Добавлено after 6 minutes 58 seconds:
[uquote="BOB51",url="/forum/viewtopic.php?p=3638049#p3638049"]Читаем вывод настроенный на ВЫХОД, маскируем полученное значение по И с единицей и полученный результат впихериваем в другой порт.[/uquote]
это обычная програмерская логика :)
электронщики железячники пишут в лоб
програмеры использую значения одного для другого. обычная практика.

там логика школьника

выводЕ нам что позволяет отправить ноль или один правильно ? этот ноль один зажигает светик, реле, и т.д.

PINE или PORTE(как чтение. и маска тут вообще не причем , можете абстрогироваться от маски) просто читает что на выводе. ему всеравно даже этот вывод или вход. они просто читают что там ноль иои один а не выход это или вход. просто как 2 копейки.

PORTC (как запись) пишет 0 или 1.
дижитал врайт тоже пишет 0 или >=1 как один
Реклама
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

У вас на HWB что включено, на сколь резистор (если он там вообще есть) стоит?
Реклама
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

Код: Выделить всё

#define CLED (1 << PC7)
#define DLED (1 << PD6)
#define ELED (1 << PE6)
#define FLED (1 << PF0)

void setup() {
DDRF = 0xFF; PORTF = 0;
DDRE = 0xFF; PORTE = 0;
DDRD = 0xFF; PORTD = 0;
DDRC = 0xFF; PORTC = 0;
DDRB = 0xFF; PORTB = 0;
}



void loop() {
  PORTC |= CLED;       //led high {setup start}
  delay(3000);
  PORTC &= ~CLED;        //led low {setup end}   

  //PF0 a5
  //PD6 12
  //PE6 7
  PORTF |= FLED;  //fled 1. portf !=0
  
  if (PINF) PORTC |= CLED;   // if != 0 (true)  cled 1.  но оно тут не работает
  delay(3000);
  PORTC &= ~CLED;        //led low {setup end}   
  
  PORTF &= ~FLED;

    
}
Добавлено after 1 minute 5 seconds:
HWB что это ?
стоит один лед внешний и один встроенный 13 всё
Последний раз редактировалось alex68md Чт май 23, 2019 09:51:09, всего редактировалось 1 раз.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

if (PINF) PORTC |= CLED; - тут CLED загорится, если хотя бы на одном из выводов порта F будет 1.....
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

Ваш лед загорается уже после того как вы прочитали Пин. После записи 1 в Порт эта 1 в Пин вылезет только через 1 такт, т.е. вы читаете, когда на Пин эта 1 ещё не пришла. Имхо. Когда читаете из Порт- всё хорошо. Вы посмотрите во что это компилируется. Вот сто пудов будет

Out PORTx,y
In PINx,y
Между ними поставите nop и всё будет ок
Я всё-всё узнAю и стану профессором.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15600
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Не пойму смысла в том примере...
(пишем данные в порт и затем считываем их значение )
Разве что использование в режиме самоконтроля выходного уровня вывода в простейших приложениях.
Но там заметно информативнее обратная связь от регулируемого объекта, а не контроль уровня перед силовым ключом.
Для передачи данных от выхода аппаратного модуля для последующего программного опроса данных с того же вывода такой способ неприемлем ибо альтернативные функции отключают стандартный аппаратный функционал порта.
:dont_know:
А за интервал стабилизации сигнала... то "по умолчанию" как бы должно использоваться... автором прожки...
Ибо коль влез аж на уровне портов, то даташит уж точно перечитать должен был...
:sleep:
Реклама
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

[uquote="dgrett",url="/forum/viewtopic.php?p=3638109#p3638109"]После записи 1 в Порт эта 1 в Пин вылезет только через 1 такт,[/uquote]

т.е. перед if поставить например delay(10); и PIN потом прочитает ?

Добавлено after 2 minutes 7 seconds:
[uquote="BOB51",url="/forum/viewtopic.php?p=3638121#p3638121"]Не пойму смысла в том примере...
(пишем данные в порт и затем считываем их значение )[/uquote]

все верно. скажем это дубликатор. верификатор. контрол чек.
сидим мы в кресле перед приборной панелью запуска реактивного двигателя и нам загорается лампочка когда двигатель запущен.
но вот зараза. двигатель реально запущен. а лампочка нам не загорается. и мы думаем что двигатель не запущен

Добавлено after 34 seconds:
я добавил коментарии в этот пример выше как оно должно работать и как оно сейчас работает

Добавлено after 48 seconds:
а тем временем такие эксперименты

Код: Выделить всё

        DDRB = 0xFF; PORTB = 0;
        DDRC = 0xFF; PORTC = 0;
        DDRD = 0xFF; PORTD = 0;
Serial.println("DDR B C D =");
Serial.println(PINB);
Serial.println(PINC);
Serial.println(PIND);
Serial.println(PORTB);
Serial.println(PORTC);
Serial.println(PORTD);
PORTD = 0x00;
Serial.println(PIND);
Serial.println(PORTD);
выводит

Код: Выделить всё

DDR B C D =
0
0
45
0
0
32
45
32
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

Прогоните прогу в студии/протеусе пошагово и посмотрите на Порт, Пин- что происходит. И да, присоединяюсь к ВОВ51, так не делают. Приведённые вами цифры говорят, что или на линиях что-то есть( нагрузка) или альтернативные функции дают такой результат.
Вместо делай пойдёт ноп или а=0 - что угодно. Перед чтением 1 должна стабилизироваться на Пин.
Я всё-всё узнAю и стану профессором.
Друг Кота
Аватара пользователя
Сообщения: 15600
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Было б не на леонадре, а на нано/уно/про-мини можно и перепроверить,
а так... только предположить...
:sleep:

Неуж-то выводов для нормального контроля нехватает?
8)

Кыстати...
Я на тиньке 2313 как-то недавно поймал поврежденный входной канал то-ли на РА0 то-ли
на РА1...
Ну не идет прожка и все...
Детальный тест проблему выявил - пришлось кристалл заменить - лапки "впритирку" требовались.
Воть тут...
https://radiokot.ru/forum/viewtopic.php ... 5#p3460865
:tea:
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

[uquote="BOB51",url="/forum/viewtopic.php?p=3638239#p3638239"]а на нано/уно/про-мини можно и перепроверить,[/uquote]

все достало меня это безобразие, иду заказывать нано

Добавлено after 3 minutes 57 seconds:
[uquote="dgrett",url="/forum/viewtopic.php?p=3638223#p3638223"]Приведённые вами цифры говорят, что или на линиях что-то есть( нагрузка) или альтернативные функции дают такой результат.[/uquote]
да дело в том что это весь код
и там может висеть что угодно (хотя плата пустая) у нас порты как выход - низкий. должны быть нули везде.

я вот непроверял еще когда у нас ВЫХОД а мы на лапку подаём питание из вне. то МК прочитает эту лапку как ноль или единицу ?

но у меня то плата пустая и это весь код. откуда в портD единицы?! блин
Друг Кота
Аватара пользователя
Сообщения: 15600
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Платка - то пустая, а вот начальная инициализация у адурины отнюдь не пустая (даже при пустом трафарете скотча).
Это совсем не одно и то же, что с "чистым" МК непосредственно в "чистом ассемблере" тест городить.
:?
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

А если так попробовать?
https://www.arduino.cc/reference/en/lan ... gitalread/

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ю и стану профессором.
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

[uquote="BOB51",url="/forum/viewtopic.php?p=3638341#p3638341"]а вот начальная инициализация у адурины отнюдь не пустая[/uquote]

так я же сам инициализирую
DDRB = 0xFF; PORTB = 0;
DDRC = 0xFF; PORTC = 0;
DDRD = 0xFF; PORTD = 0;
должно подхватывать

с кнопкой думаю всё будет ок. да и без неё тоже должно :)
но попробую вначале с дилеем потом с кнопкой
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

Я не силён в сях но
void loop() {
PORTE |= 1<<PE6;
digitalWrite(13, PINE & 1<<PE6 ); //issue here. if I change to PORTE will work
не понял, где здесь чтение? В леонарде 13 пин это что? Вы пишете в пинЕ6? Или тут digitalread должно быть?
Я всё-всё узнAю и стану профессором.
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

Сделайте следующее
Спойлер

Код: Выделить всё

void loop() {
 DDRE |= 1<<PE6;

 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 действительно моргает.
результат сюда.
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

как доберусь до платы выложу результат

а пока вот что нашёл в описании регистров

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 раз.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

alex68md писал(а):а так как у меня выходы
вы бы еще почитали про то, как у AVR порты устроены. PIND - это регистр, хранящий уровни сигналов на физических пинах МК, PORTD - это регистр, управляющий подачей на пины МК уровни изнутри МК. поэтому независимо от режима работы порта, заданного регистром DDRD, читать PIND можно всегда, как и всегда можно писать PORTD - просто результаты могут быть неожиданными.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

[uquote="dgrett",url="/forum/viewtopic.php?p=3638109#p3638109"]Между ними поставите nop и всё будет ок[/uquote]


вот зараза атмел
одного нопа не хватило. решил эту гребаную загвоздку кто бы мог подумать!

1) значит те непонятные единицы в портах это всякая ерунда типо даже TX диода например. со всеми не разобрался. но любая мелочь портит нам ожидания :)

2) а вот IF начинает работать когда пауза более 3мс

Код: Выделить всё

  PORTC |= CLED;       //led high {setup start}
  delay(3000);
  PORTC &= ~CLED;        //led low {setup end}

  //PF0 a5
  //PD6 12
  //PE6 7
  PORTF |= FLED;  //fled 1. portf !=0
  delay(3);
  //Serial.println(PINF);
  //Serial.println(PORTF);
  if (PINF) PORTC |= CLED;   // if != 0 (true)  cled 1.  но оно тут не работает
  delay(3000);
  PORTC &= ~CLED;        //led low {setup end}
  PORTF &= ~FLED;
тормознутый однако авр )))

Добавлено after 2 minutes 30 seconds:
HIGH PORTE = 1000000
HIGH PINE = 1000000
LOW PORTE = 0
LOW PINE = 0
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

alex68md писал(а):тормознутый однако авр
уже говорил в другой теме и повторю в этой: ваши проблемы не возникали ни у кого из тех, кто пользуется AVR. поэтому не надо пенять на микроконтроллер, проблема явно не в нём. согласно вашему коду между записью в порт и чтением его пинов проходит куда больше длительности одного NOP-а, так что дело явно не в том, что уровни не успевают устаканиться.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15600
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

БЯДА однако с КОТЯТАМИ...
:(
Ответить

Вернуться в «AVR»