плата uhf rfid reeder, данные по wiegand

karbo4s
Offline
Зарегистрирован: 29.08.2013

привет!

Досталась плата uhf rfid reeder и документация, хочу попробовать получить данные, помогите пожалуйста, есть Arduino mega. На Ардуино могу немного писать, но работа с wiegand для меня темный лес...

Документация:

https://www.dropbox.com/s/lpcjqjvsilry2ul/UHF%20integrated%20reader%20co...

Спецы, помогите пожалуйста!

maksim
Offline
Зарегистрирован: 12.02.2012

Поиском пробовали пользоваться?

23 май 2012 ... Никак не могу найти, в описании написано подключить PIN1 к DATA0. Это RX на ардуино?
arduino.ru/.../rfid-s-protokolom-wiegand-chto-takoe-data0
17 фев 2013 ... С учетом того, что Arduino умеет работать с Wiegand 26, т.е. к ней можно подцепить практически любое считывающее оборудование ...
arduino.ru/forum/.../realno-li-sistema-kontrolya-dostupa
images?q=tbn:ANd9GcQBgaUxSfWufYXyB_j5pTP
24 ноя 2012 ... У приемника есть два режима работы, то есть передача по протоколу UART или Wiegand. Там же и соответствующий джампер на ...
arduino.ru/.../povtoritel-radiochastotnykh-metok-em4100
 
 
 

 

karbo4s
Offline
Зарегистрирован: 29.08.2013

пробовал эти тексты, не работают на этой плате

maksim
Offline
Зарегистрирован: 12.02.2012

А знаете почему? Потому что вы сами даже не читали документацию, на которую ссылаетесь, так как там ни слова про wiegand. Там, кстати, все подробно описано, но поверьте никто просто так вам писать этот протокол не будет. Так что или ищите готовое или пишите сами, выкладывая сюда и задавая вопросы.

karbo4s
Offline
Зарегистрирован: 29.08.2013

Производитель прислал эту документацию, как протокол wiegand для данной платы

maksim
Offline
Зарегистрирован: 12.02.2012

Значит либо производитель прислал не ту документацию либо тоже не смотрел ее.

karbo4s
Offline
Зарегистрирован: 29.08.2013

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

karbo4s
Offline
Зарегистрирован: 29.08.2013

не знаю как писать в порт ((
так будет правильно?

byte inData[7]; 
byte inChar=-1;
byte index = 0;

void setup() {
  // открываем порт 
  Serial.begin(9600); 
  Serial2.begin(115200); 
  
  Serial2.print(0x0A);
  Serial2.print(0xFF);
  Serial2.print(0x03);
  Serial2.print(0x20);
  Serial2.print(0x04);
  Serial2.print(0xD0);
  while(Serial2.available() > 0)
  {
    inChar = Serial.read();    
    inData[index] = inChar;
    index++;    
  }

}

 

maksim
Offline
Зарегистрирован: 12.02.2012

Нет. write()

karbo4s
Offline
Зарегистрирован: 29.08.2013

спасибо!

Соединил платы, запустил, смотрю Монитор порта, в ответ прилетает только "2", может я что не так отправляю или получаю?

Есть ошибки у меня?

  Serial.println("1"); 
  Serial2.write(cmdHead);
  Serial2.write(0xFF);
  Serial2.write(0x02);
  Serial2.write(0x22);
  Serial2.write(0xD3);
  while(Serial2.available() > 0)
  {
    Serial.println("while1"); 
    inChar = Serial.read();    
    inData[index] = inChar;
    Serial.println(inChar, HEX); 
    index++;    
  }

 

maksim
Offline
Зарегистрирован: 12.02.2012

Документация есть только у вас.

karbo4s
Offline
Зарегистрирован: 29.08.2013

в первом посте же есть

maksim
Offline
Зарегистрирован: 12.02.2012

Ну а вы перейдите по ссылочке....

karbo4s
Offline
Зарегистрирован: 29.08.2013

Извиняюсь!

https://www.dropbox.com/s/f5phftujs2xwk53/UHF%20integrated%20reader%20co...

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

https://www.dropbox.com/s/atbuagbj0930xv0/1.rtf

передаю также, а ответа нет от считывателя

void setup() {
  // открываем порт 
  Serial.begin(9600); 
  Serial2.begin(115200); 
  
  Serial.println("1"); 
  Serial2.write(0x0A);
  Serial2.write(0xFF);
  Serial2.write(0x03);
  Serial2.write(0x20);
  Serial2.write(0x04);
  Serial2.write(0xD0);
  while(Serial2.available() > 0)
  {
    Serial.println("while1"); 
    inChar = Serial.read();    
    inData[index] = inChar;
    Serial.println(inChar, HEX); 
    index++;    
  }

  Serial.println("2"); 
  Serial2.write(0x0A);
  Serial2.write(0xFF);
  Serial2.write(0x02);
  Serial2.write(0x22);
  Serial2.write(0xD3);
  while(Serial2.available() > 0)
  {
    Serial.println("while2"); 
    inChar = Serial.read();    
    inData[index] = inChar;
    Serial.println(inChar); 
    index++;    
  }
}

 

maksim
Offline
Зарегистрирован: 12.02.2012
karbo4s
Offline
Зарегистрирован: 29.08.2013

да, как написано в документации

Для связи с внешним устройством через последовательный интерфейс соедините TX порт вашего устройства с RX портом внешнего устройства и RX порт вашего устройства с портом TX внешнего и соедините "землю" на устройствах.

Ошибки в программе исправил (названия портов попутано), но все так же, не отвечает устройство

maksim
Offline
Зарегистрирован: 12.02.2012

В документации написано RS-232, что означает что подключать напрямую к дуине нельзя. Если вы не выжгли UART на дуине то вам повезло.

Bluetooth выбор - RS232 или TTL

Согласование уровней rs-232 и uar

karbo4s
Offline
Зарегистрирован: 29.08.2013

понял, буду покупать MAX!

А как можно узнать выжег UART или нет?

а Wiegand подключается напрямую?

maksim
Offline
Зарегистрирован: 12.02.2012

karbo4s пишет:

А как можно узнать выжег UART или нет?

Замкнуть RX2 c TX2, залить пример, и отправить что нить в монитор порта, если возвращается то что отправляете значит все норм.

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

void loop()
{
  if (Serial2.available())
    Serial.write(Serial2.read()); 
}

karbo4s пишет:

а Wiegand подключается напрямую?

Кто его знает, может тоже иметь разные логические уровни.

karbo4s
Offline
Зарегистрирован: 29.08.2013

ничего не возвращает, все(((

karbo4s
Offline
Зарегистрирован: 29.08.2013

причем ни один не работает

karbo4s
Offline
Зарегистрирован: 29.08.2013

хотя, так выводит:

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

void loop()
{
  Serial1.write("28");
  if (Serial1.available())
    Serial.write(Serial1.read()); 
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

А вы RX c TX замыкаете?

maksim
Offline
Зарегистрирован: 12.02.2012
void setup() 
{
  Serial.begin(9600);
  Serial2.begin(9600);
}

void loop()
{
  if (Serial2.available())
    Serial.write(Serial2.read()); 
  if (Serial.available())
    Serial2.write(Serial.read()); 
}

 

karbo4s
Offline
Зарегистрирован: 29.08.2013

да

последний, код все нормально работает! спасибо!

в понедельник куплю max, попробую, отпишусь...

karbo4s
Offline
Зарегистрирован: 29.08.2013

все купил, сегодня спаяю. но возник такой вопрос, посмотред доки по max232, он выравнивает уровни портов, то есть согласует 5в и 12вольт, а у меня на обоих платах на COM порте 5в. зачем мне собирать этот преобразователь?

maksim
Offline
Зарегистрирован: 12.02.2012

Не собирайте.

А на вопрос "зачем?" вы сможете ответить себе сами после того как изучите что такое uart и в частности что такое rs-232.

karbo4s
Offline
Зарегистрирован: 29.08.2013

если нет желания объяснить почему, то соберу, надеюсь поможите с подключением

karbo4s
Offline
Зарегистрирован: 29.08.2013

и снова привет! :)

приехал переходник rs232-ttl. Подключил, запитал 5в от arduino.

Еще раз просканировал порт, получились такие данные. Подскажите как послать это все в Serial?

Если делать так, это правильно?

  Serial1.write(0x0A);
  Serial1.write(0xFF);
  Serial1.write(0x03);
  Serial1.write(0x20);
  Serial1.write(0x04);
  Serial1.write(0xD0);

 

137	22:03:05.075	0.01844904	UHF INTERROGAT	IRP_MJ_CREATE                       	COM2	SUCCESS	Port Opened	
138	22:03:05.094	0.00001839	UHF INTERROGAT	IOCTL_SERIAL_SET_QUEUE_SIZE         	COM2	SUCCESS	InSize: 4096, OutSize: 4096	
139	22:03:05.094	0.00495744	UHF INTERROGAT	IOCTL_SERIAL_SET_BAUD_RATE          	COM2	SUCCESS	Baud Rate: 9600	
140	22:03:05.099	0.00024081	UHF INTERROGAT	IOCTL_SERIAL_SET_RTS                	COM2	SUCCESS		
141	22:03:05.099	0.00026177	UHF INTERROGAT	IOCTL_SERIAL_SET_DTR                	COM2	SUCCESS		
142	22:03:05.099	0.00016168	UHF INTERROGAT	IOCTL_SERIAL_SET_LINE_CONTROL       	COM2	SUCCESS	StopBits: 1, Parity: No, DataBits: 8	
143	22:03:05.099	0.00004833	UHF INTERROGAT	IOCTL_SERIAL_SET_CHARS              	COM2	SUCCESS	EofChar: 0x0, ErrorChar: 0x0, BreakChar: 0x0, EventChar: 0x0, XonChar: 0x11, XoffChar: 0x13	
144	22:03:05.099	0.00000898	UHF INTERROGAT	IOCTL_SERIAL_SET_HANDFLOW           	COM2	SUCCESS	ControlHandShake: 0x1, FlowReplace: 0x40, XonLimit: 2048, XoffLimit: 512	
145	22:03:05.099	0.00000599	UHF INTERROGAT	IOCTL_SERIAL_SET_TIMEOUTS           	COM2	SUCCESS	ReadIntervalTimeout: 2000, ReadTotalTimeoutMultiplier: 2000, ReadTotalTimeoutConstant: 1500, WriteTotalTimeoutMultiplier: 4000, WriteTotalTimeoutConstant: 2000	
146	22:03:05.136	0.00024894	UHF INTERROGAT	IRP_MJ_WRITE                        	COM2	SUCCESS	Length: 5, Data: 0A FF 02 22 D3 	
147	22:03:05.136	0.00001112	UHF INTERROGAT	IOCTL_SERIAL_PURGE                  	COM2	SUCCESS	Purge: RXCLEAR	
148	22:03:05.136	0.01262928	UHF INTERROGAT	IRP_MJ_READ                         	COM2	SUCCESS	Length: 3, Data: 0B F0 04 	
149	22:03:05.149	0.00421147	UHF INTERROGAT	IRP_MJ_READ                         	COM2	SUCCESS	Length: 4, Data: 00 03 0A F4 	
150	22:03:05.163	0.00002823	UHF INTERROGAT	IOCTL_SERIAL_PURGE                  	COM2	SUCCESS	Purge: RXCLEAR	

 

maksim
Offline
Зарегистрирован: 12.02.2012

Правильно, только красивее будет так:

data[] = {0x0A, 0xFF, 0x03, 0x20, 0x04, 0xD0};
Serial1.write(data, 6);

 

karbo4s
Offline
Зарегистрирован: 29.08.2013

да, так красивее :)

там где есть HEX понятно. а вот это? это настройки com порта? как это можно настроить?
 
IRP_MJ_CREATE                       COM2 SUCCESS Port Opened
IOCTL_SERIAL_SET_QUEUE_SIZE         COM2 SUCCESS InSize: 4096, OutSize: 4096
IOCTL_SERIAL_SET_BAUD_RATE           COM2 SUCCESS Baud Rate: 9600
IOCTL_SERIAL_SET_RTS                 COM2 SUCCESS
IOCTL_SERIAL_SET_DTR                 COM2 SUCCESS
IOCTL_SERIAL_SET_LINE_CONTROL       COM2 SUCCESS StopBits: 1, Parity: No, DataBits: 8
IOCTL_SERIAL_SET_CHARS               COM2 SUCCESS EofChar: 0x0, ErrorChar: 0x0, BreakChar: 0x0, EventChar: 0x0, XonChar: 0x11, XoffChar: 0x13
IOCTL_SERIAL_SET_HANDFLOW           COM2 SUCCESS ControlHandShake: 0x1, FlowReplace: 0x40, XonLimit: 2048, XoffLimit: 512
IOCTL_SERIAL_SET_TIMEOUTS 
maksim
Offline
Зарегистрирован: 12.02.2012

Не нужно этого настраивать, оно уже настроено.

http://arduino.ru/forum/programmirovanie/obrabotka-formata-dannykh-v-uart

Просто в сетапе пишите Serial1.begin(9600); и все.

karbo4s
Offline
Зарегистрирован: 29.08.2013

Беру подключаюсь к считывателю с c#, все норм, данные возвращает.

Пишу на ардуино, тишина..., есть здесь где косяк?

переходник работает и подключен првильно, замыкаю RX и TX все норм, данные возвращаются!

byte inData[20];
byte inChar=-1;
byte index = 0;
byte GetFirmwareVersion[]= { 0x0A, 0xFF, 0x02, 0x22, 0xD3 };
byte ClearBuffer[]= { 0x0A, 0xFF, 0x02, 0x44, 0xB1 };
byte Gen2MultiTagIdentify[]= { 0x0A, 0xFF, 0x02, 0x80, 0x75 };
byte GetIDAndDelete[]= { 0x0A, 0xFF, 0x03, 0x40, 0x08, 0xAC };

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

  Serial1.write(GetFirmwareVersion,5);
  
  while(Serial1.available() > 0)
  {
    Serial.println("while2"); 
    inChar = Serial1.read();    
    inData[index] = inChar;
    Serial.println(inChar); 
    index++;    
  }
}

void loop() { 
  
}

 

maksim
Offline
Зарегистрирован: 12.02.2012
byte inData[20];
byte inChar=-1;
byte index = 0;
byte GetFirmwareVersion[]= {0x0A, 0xFF, 0x02, 0x22, 0xD3};
byte ClearBuffer[]= {0x0A, 0xFF, 0x02, 0x44, 0xB1};
byte Gen2MultiTagIdentify[]= {0x0A, 0xFF, 0x02, 0x80, 0x75};
byte GetIDAndDelete[]= {0x0A, 0xFF, 0x03, 0x40, 0x08, 0xAC};

void setup() 
{
  Serial.begin(9600); 
  Serial1.begin(9600); 
  
  Serial1.write(GetFirmwareVersion, 5);
}

void loop() 
{ 
  if(Serial1.available())
  {
    inChar = Serial1.read();
    Serial.println(inChar, HEX); 
    inData[index] = inChar;
    index++;    
  }
}

 

karbo4s
Offline
Зарегистрирован: 29.08.2013

а в блоке setup() разве нельзя так делать? я же хочу настроить при запуске, а в основном цикле считывать только данные

maksim
Offline
Зарегистрирован: 12.02.2012

Как так? А по вашему что происходит в основном цикле?

karbo4s
Offline
Зарегистрирован: 29.08.2013

в блоке setup() я запрашиваю версию прошивки, и жду в цикле что он вернет данные, как данные получены я перехожу уже к loop() в котором идет как раз запрос на считывание и считывание. Но я отправляю запрос на версию прошивки  Serial1.write(GetFirmwareVersion, 5);, а в ответ тишина.

byte inData[20];
byte inChar=-1;
byte index = 0;
byte GetFirmwareVersion[]= {0x0A, 0xFF, 0x02, 0x22, 0xD3};
byte ClearBuffer[]= {0x0A, 0xFF, 0x02, 0x44, 0xB1};
byte Gen2MultiTagIdentify[]= {0x0A, 0xFF, 0x02, 0x80, 0x75};
byte GetIDAndDelete[]= {0x0A, 0xFF, 0x03, 0x40, 0x08, 0xAC};

void setup() 
{
  Serial.begin(9600); 
  Serial1.begin(9600); 
  
   Serial1.write(GetFirmwareVersion, 5);
   while(Serial1.available() > 0)
  {
    inChar = Serial1.read();   
    inData[index] = inChar;
    Serial.println(inChar);
    index++;   
  }
}

void loop() 
{ 
  Serial1.write(Gen2MultiTagIdentify,5);
  Serial1.write(GetIDAndDelete,6);
  if(Serial1.available())
  {
    inChar = Serial1.read();
    Serial.println(inChar, HEX); 
    inData[index] = inChar;
    index++;    
  }
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

Потому что вы ничего не ждете, а сразу проверяете буфер, в котором естественно пусто, так как мгновенно в ответ на ваш запрос данные в буфере не появятся.

karbo4s
Offline
Зарегистрирован: 29.08.2013

Точно, не подумал об этом! Вечером проверю!