Не получается считать данные с ключа ibutton...

Тема в разделе "Arduino & Shields", создана пользователем 8toni8, 10 мар 2020.

  1. 8toni8

    8toni8 Нуб

    Использую такой скетч и схему:
    https://yadi.sk/d/V9IN8ujx-F1bVw

    Код (C++):
    #include <OneWire.h>

    OneWire iButton(10); // создаём объект 1-wire на 10 выводе

    void setup (void) {
      Serial.begin(9600);
    }

    void loop(void) {
      delay(1000); // задержка 1 сек
      byte addr[8]; // массив для хранения данных ключа
     
      if ( !iButton.search(addr) ) { // если ключ не приложен
          iButton.reset_search();
          Serial.println("2 No key connected..."); // сообщаем об этом
          return; // и прерываем программу
      }
     
      Serial.print("Key : ");
      for(int i=0; i<8; i++) {
        Serial.print(addr[i], HEX); // выводим побайтно данные ключа
        Serial.print(" ");
      }
      Serial.println();
      iButton.reset(); // сброс ключа
    }
    Вроде все просто и понятно, но почему то не работает:(

    Пробовал сопротивления разного номинала.
    Причем если подключать без сопротивления, и взять руками за GND и 10-ый пин (в данном скетче он и является читающим), то иногда в мониторе com порта появляется значения, то есть значит программа все таки работает, но с ключа почему то не читает, причем на сколько я понимаю, дело тут не в номинале сопротивления, так как он на сколько я понимаю используется для подтягивания ноги, что бы не было ложных наводок или для чего он в схеме?
     
  2. b707

    b707 Гуру

    у меня отлично работает подобный код с сопротивлением 2.2К
    Ищите ошибки в подключении
     
  3. b707

    b707 Гуру

    кстати, плата ардуино какая? Не Вавгат случайно?
     
  4. Ariadna-on-Line

    Ariadna-on-Line Гуру

    На схеме задействован пин 11. В коде - пин 10.
    В стандартном пакете Ардуино ИДЕ вроде есть рабочие примеры шины OneWire. У меня есть и работают (в Протеусе), но как появились - не помню.
     
    Последнее редактирование: 11 мар 2020
  5. 8toni8

    8toni8 Нуб

    Да тут как бы схема то простая, я так понимаю, даже без подтяжки должна работать, но почему то не работает:(
    Пробовал три ключа, права они все одного производства:(
    Нет, на чипе маркировка Атмел мега 328Р...
    Подскажите, может ли быть причина в том, что моя Arduina Nand записана от USB, по которому и кидает в COM ?
    Схема не моя, просто как пример...
    Да, я вообще разные пробовал.
    К примеру отсюда качал:
    https://github.com/PaulStoffregen/OneWire
    Там есть пример DS18x20_Temperature, но с ним тоже не получилось.

    Отмечу, что после конфигурирования той или иной ноги, на ней появляется 5 вольт, то есть получаеться, что нога реально конфигурируеться...
     
  6. Asper Daffy

    Asper Daffy Иксперд

    Ну, если пример, то пример нормально работает. Так что проблем нет.

    Тебе уже писали на ардуино.ру - приведи СВОЮ схему и фото сборки.
     
  7. parovoZZ

    parovoZZ Гуру

    Нет, не будет.
     
  8. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Без подтяжки не будет по принципу протокола. Поставьте резистор по стандарту - 4.7ком. Вы процесс кнопкой запускаете ? Может у вас кнопка не фурычит. Она кстати не правильно включена. Подтяжки лучше на плюс делать и защитный резистор 100 ом в цепь ноги ардуины вешать. Скомпилена прога под реальную частоту кварца ?
    iButton.reset(); // сброс ключа - перенесите в начало цикла. Надежней будет.
     
    Последнее редактирование: 13 мар 2020
  9. 8toni8

    8toni8 Нуб

    [​IMG] [​IMG] [​IMG]
     
  10. 8toni8

    8toni8 Нуб

    1. Ближайшее, что удалось найти 4.2 ком
    2. Нет не к кнопкой
    3. Кнопка исключена из схемы
    4. Попробовал в цепь 100 ом установит, не помогло
    5. Вот такой чип:
    [​IMG]

    Настройки такие:
    [​IMG]

    А где посмотреть какая частота выбрана, я не нашел:(
    6. Перенес iButton.reset(); , не помогло
     
    Последнее редактирование: 18 мар 2020
  11. Ariadna-on-Line

    Ariadna-on-Line Гуру

    У вас какая то другая IDE. У меня про старый загрузчик (old bootloader) - нету. Вот в этой строчке наверно и надо смотреть частоту процессора.
    Чтоб проверить правильность частоты - смотрите вывод в Serial. Если приёма нет - выбирайте монитором другие частоты (где-то 2400-38400). Как поймаете - будем думать под какую частоту скомпилировалась программа.
    Еще - вместо бутона поставьте светодиод, так чтоб светился (а он обязан засветиться если всё правильно, но довольно тускло.). Когда будете подавать команды - он должен погасать, но очень быстро. Значит опрос подается. Но если частоты не правильны датчик не ответит.
     
    Последнее редактирование: 19 мар 2020
  12. 8toni8

    8toni8 Нуб

    1. Не уверен, что правильно вас поняли... Ну, через COM порт, я вижу "No key connected...", значит на сколько я понимаю, с частотой все в порядке?
    2. Диод то я поставлю, а о каких командах и о каком датчике идет речь?
     
  13. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. Пардон. Датчиком я называю ваш айБуттон.
    2. Команды - то что подает программа - ресет, поиск. Вы увидите как периодически диод будет (должен) мигать.
    ПС. Пробую прогу в Протеусе. Отпишусь.
    Отписываюсь - имеем странный бред. Циклический поиск устройства приводит к ошибкам обнаружения. Причем период ошибки зависит сложным образом от паузы в цикле.. При паузе 75мс - ошибка появляется строго регулярно каждый второй цикл.
    При других значениях паузы - нарушается регулярность и ЕЩЕ увеличивается процент ошибок.
    Проверено на других программах. Поскольку чудес нет - видимо причина в наложениях таймеров.
     

    Вложения:

    Последнее редактирование: 24 мар 2020
  14. 8toni8

    8toni8 Нуб

    Не совсем вас понял, какие таймеры накладываються? Там ведь нет ни прерываний и только одна задержка...
     
  15. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Я лишь предположил. Протокол OneWire наверняка какой-либо таймер использует. Serial() - тоже. Delay() - хер его знает.
     
  16. AlexU

    AlexU Гуру

    Serial-то с чего вдруг таймер начал использовать?
     
  17. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Аааа. Ну да - он же аппаратный.
     
    Последнее редактирование: 26 мар 2020