Подключение считывателя Matrix II по принципу 1-Wire

Использование Arduino/CraftDuino (Freeduino, Seeduino, ...).

Подключение считывателя Matrix II по принципу 1-Wire

Сообщение putinw » 20 мар 2012, 22:55

Решил подключить считыватель проксикарт и брелков (типа EM Marine). За основу взял статью "Практическое программирование Arduino/CraftDuino - протокол 1-Wire и iButton" http://robocraft.ru/blog/arduino/118.html
Залил с примера скетч, подключил таблетку iButton, все работает.
Попробовал подключить считыватель, который подключается тремя проводами: +12В, данные (эмуляция DS1990A) и корпус (минус). На выходе "данные" присутствует высокий уровень в районе 4,4В поэтому подтягивающий резистор не вешаю.
По идеи, когда подносишь карточку или брелок, со считывателя данные должны вылетать в виде 64 бит посылкой, но вот моя ардуинка нечего не чувствует и не видит.
В качестве экспериментов попытался подсчитать количество импульсов (падения на ноль) при поднесения карточки. Ардуинка насчитывала каждый раз ровно 7 импульсов.

Кто нибудь пробовал подключать такие считыватели?
И где искать проблему?


Раньше эти считыватели подключал к контролеру типа http://www.ironlogic.ru/il.nsf/pages/Z5R он работает, что с таблетками, что считывателями....
putinw
 
Сообщения: 1
Зарегистрирован: 09 май 2011, 20:15
Откуда: Калининград

Re: Подключение считывателя Matrix II по принципу 1-Wire

Сообщение Ajava » 25 ноя 2013, 16:14

Ардуино начинает считывание памяти карты с команды 0xF0 - поиск ROM... дело в том, что Matrix II не воспринимает эту команду...
Алгоритм нужен такой:
- даем Reset в линию (на reset считыватель отвечает)
- отправляем команду 0xBE - считать ROM
- в цикле for... считываем все 8 байт ROM в массив (напр. incoming[8])
вот... как то так)))) еще линию обязательно нужно подтянуть к VCC (я подтянул 4,7 КОм)
и общая линия GND у считывателя и ардуины.
Ajava
 
Сообщения: 7
Зарегистрирован: 25 ноя 2013, 16:07
programming: C++,C#

Re: Подключение считывателя Matrix II по принципу 1-Wire

Сообщение pazoom » 03 фев 2014, 18:20

Добрый вечер!
Я подключил ds1990a к ардуино, все работает, адреса ключей показывает.
Я купил считыватель карт pr-105 http://www.accordtec.ru/site.xp/049052057.html В руководстве написано, что поддерживает работу эмулятора ds1990a.
Подключил по схеме, считыватель пикает при поднесении карты, но ардуино не видит адреса карты. Скетч такой же, как и для настоящего ds1990a.
Код: Выделить всё
#include <OneWire.h>

OneWire  ds(10);  // на  digital pin 10

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

void loop(void) {
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];
 
  if ( !ds.search(addr)) {
      Serial.print("No more addresses.\n");
      ds.reset_search();
      return;
  }
 
  Serial.print("R=");
  for( i = 0; i < 8; i++) {
    Serial.print(addr[i], HEX);
    Serial.print(" ");
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC is not valid!\n");
      return;
  }
 
  if ( addr[0] != 0x01) {
      Serial.print("Device is not a DS1990A family device.\n");
      return;
  }
  Serial.println();
  ds.reset();
 
  delay(1000);
}

Может и в моем случае надо использовать доп.команды для получения адреса ключа?
Помогите пожалуйста!
pazoom
 
Сообщения: 3
Зарегистрирован: 03 фев 2014, 18:10
programming: arduino

Re: Подключение считывателя Matrix II по принципу 1-Wire

Сообщение admin » 04 фев 2014, 06:48

Возможно, следует проверить наличие сигнала осциллографом? ;)
Аватара пользователя
admin
Администратор
 
Сообщения: 315
Зарегистрирован: 05 май 2011, 14:57
Откуда: Калининград

Re: Подключение считывателя Matrix II по принципу 1-Wire

Сообщение pazoom » 04 фев 2014, 09:01

Короче я модуль pr-105 сдал обратно. И взял Matrix 2.
По схеме вроде все просто, подключил 12 вольт питание модуля, Data0 и GND в ардуину. И сделал подтяжку к 5 вольтам 2.2 Ом резистор... так же как я тестировал работу настоящего ds1990.
По описанию действий Ajava поправил код, но все равно не видит ключей...
Подскажите что не так?!
Код: Выделить всё
#include <OneWire.h>

OneWire  ds(10);  // на  digital pin 10

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

void loop(void) {
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];

 ds.reset();
 ds.read();
 ds.write(0xBE);
 ds.read();
 
  if ( !ds.search(addr)) {
      Serial.print("No more addresses.\n");
      ds.reset_search();
      return;
  }
 
  Serial.print("Key=");
  for( i = 0; i < 8; i++) {
    Serial.print(addr[i], HEX);
    Serial.print(" ");
  }

  Serial.println();
 
  delay(1000);
}
pazoom
 
Сообщения: 3
Зарегистрирован: 03 фев 2014, 18:10
programming: arduino

Re: Подключение считывателя Matrix II по принципу 1-Wire

Сообщение Ajava » 04 фев 2014, 13:44

Я выше писал, что в библиотеке 1wire функция search() не работает на матриксах.(причину смотри выше).

Поэтому все руками, но ничего сложного вообще нету!!!!

сначала даем ресет в линию, потом команду на считывание и затем читаем то что у него там есть!

P.S. резистор все-таки лучше на 4,7К, как у меня, поставь.

Код: Выделить всё
#include <OneWire.h>

OneWire ds(7); // выход считывателя на 7 пин

byte addr[8];// буфер приема

void setup() {// стартовая инициализация
  Serial.begin(9600);
  delay(100);
  Serial.println("Start...");
 
}

void loop() { 
  if(ds.reset()){ // если обнаружено устройттво
    ds.write(0x33); // отправляем команду "считать ROM"
    delay(50); // на всякий случай ждем
    for(int i=0;i<8;i++){
      addr[i] = ds.read(); // считываем
    }
   
    Serial.print("ROM ="); // выводим
  for(int i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }
 
  Serial.println();
   
    delay(500);
  }
 
}


Пожалуйста))))))
Ajava
 
Сообщения: 7
Зарегистрирован: 25 ноя 2013, 16:07
programming: C++,C#

Re: Подключение считывателя Matrix II по принципу 1-Wire

Сообщение pazoom » 05 фев 2014, 19:07

:) Спасибо Ajava! Очень-очень помогли... А то я уже в другие дебри полез... :co_ol:
pazoom
 
Сообщения: 3
Зарегистрирован: 03 фев 2014, 18:10
programming: arduino

Re: Подключение считывателя Matrix II по принципу 1-Wire

Сообщение dozbot » 23 июн 2014, 19:37

Добрый вечер уважаемые, не подскажите как два таких считывателя подключить? Заранее спасибо
dozbot
 
Сообщения: 1
Зарегистрирован: 23 июн 2014, 19:34
programming: Delphi

Re: Подключение считывателя Matrix II по принципу 1-Wire

Сообщение Ajava » 29 июл 2015, 10:44

нужно сделать два порта 1wire на две разные ножки... и с каждой по отдельности работать... в цикле опрашивать...
Ajava
 
Сообщения: 7
Зарегистрирован: 25 ноя 2013, 16:07
programming: C++,C#

Re: Подключение считывателя Matrix II по принципу 1-Wire

Сообщение Anton7191 » 23 ноя 2015, 21:05

Пытался подключить два считывателя, на разные порты ардуино, но считыватели почему то начинают между собой как-то общаться, подскажите плиз что делать? И был ли у кого-нибудь опыт подключение нескольких считывателей к одной ардуино?
Anton7191
 
Сообщения: 1
Зарегистрирован: 07 окт 2014, 19:46
programming: C++


Вернуться в Общие вопросы

Кто сейчас на конференции

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

cron
© 2009-2017 |  О проекте  |  Политика Конфиденциальности  |