Использую такой скетч и схему: 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 порта появляется значения, то есть значит программа все таки работает, но с ключа почему то не читает, причем на сколько я понимаю, дело тут не в номинале сопротивления, так как он на сколько я понимаю используется для подтягивания ноги, что бы не было ложных наводок или для чего он в схеме?
На схеме задействован пин 11. В коде - пин 10. В стандартном пакете Ардуино ИДЕ вроде есть рабочие примеры шины OneWire. У меня есть и работают (в Протеусе), но как появились - не помню.
Да тут как бы схема то простая, я так понимаю, даже без подтяжки должна работать, но почему то не работает Пробовал три ключа, права они все одного производства Нет, на чипе маркировка Атмел мега 328Р... Подскажите, может ли быть причина в том, что моя Arduina Nand записана от USB, по которому и кидает в COM ? Схема не моя, просто как пример... Да, я вообще разные пробовал. К примеру отсюда качал: https://github.com/PaulStoffregen/OneWire Там есть пример DS18x20_Temperature, но с ним тоже не получилось. Отмечу, что после конфигурирования той или иной ноги, на ней появляется 5 вольт, то есть получаеться, что нога реально конфигурируеться...
Ну, если пример, то пример нормально работает. Так что проблем нет. Тебе уже писали на ардуино.ру - приведи СВОЮ схему и фото сборки.
Без подтяжки не будет по принципу протокола. Поставьте резистор по стандарту - 4.7ком. Вы процесс кнопкой запускаете ? Может у вас кнопка не фурычит. Она кстати не правильно включена. Подтяжки лучше на плюс делать и защитный резистор 100 ом в цепь ноги ардуины вешать. Скомпилена прога под реальную частоту кварца ? iButton.reset(); // сброс ключа - перенесите в начало цикла. Надежней будет.
1. Ближайшее, что удалось найти 4.2 ком 2. Нет не к кнопкой 3. Кнопка исключена из схемы 4. Попробовал в цепь 100 ом установит, не помогло 5. Вот такой чип: Настройки такие: А где посмотреть какая частота выбрана, я не нашел 6. Перенес iButton.reset(); , не помогло
У вас какая то другая IDE. У меня про старый загрузчик (old bootloader) - нету. Вот в этой строчке наверно и надо смотреть частоту процессора. Чтоб проверить правильность частоты - смотрите вывод в Serial. Если приёма нет - выбирайте монитором другие частоты (где-то 2400-38400). Как поймаете - будем думать под какую частоту скомпилировалась программа. Еще - вместо бутона поставьте светодиод, так чтоб светился (а он обязан засветиться если всё правильно, но довольно тускло.). Когда будете подавать команды - он должен погасать, но очень быстро. Значит опрос подается. Но если частоты не правильны датчик не ответит.
1. Не уверен, что правильно вас поняли... Ну, через COM порт, я вижу "No key connected...", значит на сколько я понимаю, с частотой все в порядке? 2. Диод то я поставлю, а о каких командах и о каком датчике идет речь?
1. Пардон. Датчиком я называю ваш айБуттон. 2. Команды - то что подает программа - ресет, поиск. Вы увидите как периодически диод будет (должен) мигать. ПС. Пробую прогу в Протеусе. Отпишусь. Отписываюсь - имеем странный бред. Циклический поиск устройства приводит к ошибкам обнаружения. Причем период ошибки зависит сложным образом от паузы в цикле.. При паузе 75мс - ошибка появляется строго регулярно каждый второй цикл. При других значениях паузы - нарушается регулярность и ЕЩЕ увеличивается процент ошибок. Проверено на других программах. Поскольку чудес нет - видимо причина в наложениях таймеров.
Не совсем вас понял, какие таймеры накладываються? Там ведь нет ни прерываний и только одна задержка...
Я лишь предположил. Протокол OneWire наверняка какой-либо таймер использует. Serial() - тоже. Delay() - хер его знает.