| Автор |
Съобщение |
|
borisov
Ранг: Минаващ
Регистриран на: Съб Сеп 05, 2009 12:01 am Мнения: 39
|
 RFID въпрос
Здравейте, разработвам RFID четец, не е кой знай какво нещо. Използвам ЕМ4095 успявам да прихвана цялата поредица в манчестърски код, след което откривам хедъра от 9 единици
(010101010101010101) после започвам декодирането на кода за да се получат 64 бита като последният е стоп бит '0' (както е дадено в документа на EM4100 ) накрая ги изпращам по rs232, всичко е ОК слагам една и съща карта и винаги изкарва еднакъв код. Проблемът е,че като почна да смятам битовете по четност не излизат  . Гледах със скопа поредицата от битове на извода за данни на ЕМ4095 и ги сравнявам на 'око' със резултатите и си съвпадат, но проблема си остават тия битове по четност. Пробвах и схема от дискретни елементи, а не с ЕМ4095 резултатите съвпадат, ползвам същите карти. Ако някой е попадал на такъв проблем може да сподели, че вече само 0101 сънувам  .
|
| Сря Апр 20, 2011 9:39 pm |
|
 |
|
Cino
Ранг: Новодошъл
Регистриран на: Чет Окт 02, 2008 10:24 pm Мнения: 105
|
много е възможно да хващаш поредица от 9 нули ,
EM4095 дава инвертирани битове,
http://www.avrfreaks.net/index.php?name ... 80&start=0
, ако не ти излиза стартовата поредица , прихвани повече битове (128), и върху тях потърси стартовите 9,
и след това провери по колони и редове следващите.
128 бита= поне 256 прехода
Последна промяна Cino на Сря Апр 20, 2011 11:07 pm, променена общо 2 пъти
|
| Сря Апр 20, 2011 10:44 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
Питаш как се смятат битовете за четност или ... ?? Кое точно не ти излиза ? За елементарни изпълнения спокойно можеш да ги пренебрегнеш. Аз грешка досега не съм хващал при декодиране. Иначе е елементарно. Ако има четен брой единици бита за четност е 0 а за нечетен брои единици - 1. Да не бъркаш кой точно бит за кой ред и колона е ?
|
| Сря Апр 20, 2011 10:45 pm |
|
 |
|
default_pz
Ранг: Минаващ
Регистриран на: Съб Апр 15, 2006 12:22 pm Мнения: 22 Местоположение: Пазарджик
|
Преди около година правих нещо с тоя чип и вече не помня добре, ама като взех една карта с написан на нея номер, се оказа, че чета не както трябва. Или бяха девет нули (не девет единици), или четях инвертирано, нещо такова. Иначе си бачкаше стабилно, всеки път еднакъв номер ми даваше дадена карта, ама грешен.
|
| Сря Апр 20, 2011 10:48 pm |
|
 |
|
borisov
Ранг: Минаващ
Регистриран на: Съб Сеп 05, 2009 12:01 am Мнения: 39
|
Здравейте, ами щом ги изкарва инвертирани значи е възможно да прихващам "0"-ли, а иначе първо прихващам 128 бита и после търся хедъра. За проверката на битовете за четност, според документацията след хедъра битовете се разделят на по 5 като 5-тият е бита за четност има и битове за четност и на колонит т.н. Чудя се дали да се занимавам с тях, но пък се появи интересен случай попаднах на карта, в която има две поредици от 9 единици  и ми изкарва два различни кода за това мисля, че трябва да ги проверявам.
|
| Сря Апр 20, 2011 10:58 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2692
|
от инвертиране няма как да не излезе четността, понеже е ксорване. най-вероятно декодирането ти е изместено половин такт и четеш грешни данни. въобще манчестър кода е много противен с тая си особеност че не нацелиш ли добре началото, край. затова аз правя друго - декодирам цикличните карти все едно са с бифазен код, който е много надежден за декодиране (в смисъл не се допускат бъгове от програмиста), не е полярно зависим, после резултата го обръщам в манчестър, ето така:
for(int i=0;i<n;i++){
if(bits[i]){
lastb^=1;
}
bits[i]=lastb;
}
спестявайки си треперенето да не сбъркам с половин такт и да се чудя какво става. директно декодирам манчестър код единствено при транспондерите които не лъчат циклично, а отговарят с единични пакети, където старта е пределно ясен.
разбира се тоя трик не те спасява от това да прочетеш инверсни данни (началната стойност на lastb определя това), понеже манчестър кода е полярно зависим (втора причина да го смятам за лоша идея) а бифазния не е, но както казах четността не се влияе от инвертиране.
|
| Чет Апр 21, 2011 7:55 am |
|
 |
|
Cino
Ранг: Новодошъл
Регистриран на: Чет Окт 02, 2008 10:24 pm Мнения: 105
|
не искам да спора , ама точно контрола по четност не излиза ако са инвертирани битовете
пример: 00101 е правилната поредица
инвертираната е 11010, вижда се че контрола по четност не излиза
|
| Чет Апр 21, 2011 8:52 am |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
Преди да се стигне до смятане на битовете за четност трябва да изкараш хедъра. Това ти е маркер за началото. Какво точно ще смяташ ако не знаеш къде ти е първия бит? Не виждам какъв е проблема. Просто търсиш 9 единици(или 9 нули). От тук насетне се мисли декодирането ли е криво или сметките. Човека казва, че намира хедъра (111111111). Тая дискусия с инвертираните данни е излишна.
@borisov:
Пусни какво точно прочиташ от една карта !
|
| Чет Апр 21, 2011 10:45 am |
|
 |
|
Wise
Ранг: Форумен бог
Регистриран на: Нед Дек 19, 2004 6:26 pm Мнения: 1628 Местоположение: Сливен
|
http://www.atmel.com/dyn/resources/prod ... oc4661.pdf
Виж алгоритъма на стр.15 как се чете манчестер код.
//нищо, че е за друг чип
|
| Чет Апр 21, 2011 11:36 am |
|
 |
|
borisov
Ранг: Минаващ
Регистриран на: Съб Сеп 05, 2009 12:01 am Мнения: 39
|
Здравейте, проблема е решен, инвертирах битовете и всичко се оправи всички битове си излезнаха както е на теория, благодаря за помощта.
|
| Пон Апр 25, 2011 6:37 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2692
|
прав си мадафака, тоест това което казах важи само за четен брой битове сумарно, а тука са нечетен
|
| Вто Апр 26, 2011 4:33 pm |
|
|