برای مشاهده روند ساخت پروژه ها و محصولات به کانال تلگرام ما بپیوندید           
  خانه محصولات دانلود پروژه ها بحث و گفتگو وبلاگ آموزشها و مقالات تماس با ما  

  فروم khazama.com --> الکترونیک دیجیتال --> راه اندازی ماژول کارتخوانcr038

  سه‌شنبه 14 آذر 91 , 7:54 PM


مدیر سایت
behzad
تعداد پستها : 905
راه اندازی ماژول کارتخوانcr038

درود به همگی
توی یکی از طرحهای آزمایشی از یه ماژول چینی برای خوندن و نوشتن کارتهای مایفر استفاده کردم
یه ماژول برای راه اندازی و آزمایشش به صورت خیلی ساده نوشتم
فایل سورس سی کدویژن این برنامه رو براتون قرار میدم
امیدوارم به کار یکی بخوره
این ماژول به صورت پیش فرض با بادریت 19200 کار میکنه
ماژول خوبیه برای شروع البته در نمونه اصلی دیگه از ماژول استفاده نکردم و خودم یه نمونه ساختم
کارتهای مایفر قابلیت نوشتن و خوندن رو دارن و دارای یکسری امکانات امنیتی روی بلاکهای 16 بایتی هستند
برخی امکانات نظیر کم و زیاد کردم اتوماتیک حاقظه و این چیزها هم دارن
طوریکه توی کاتالوگهای نصفه نیمه چینیش دیدم باید با نمونه های مشابه دیگه همین سازنده هم جواب ده
// cr038 mifare rfid-module driver
// by behzad khazama
// v0.2 20121204
// www.khazama.com


unsigned char cardID[4];

unsigned char cr038_send_packet(unsigned char * pk,unsigned char pk_len,unsigned char *ret){
 unsigned char i,x=0;
    while (rx_counter1)getchar1();
    putchar1(0xAA);     
    putchar1(0xBB);     
    putchar1(pk_len+3);     
    putchar1(0);
    putchar1(0);
    putchar1(0);
    for(i=0;i<pk_len;i++){
        x ^= pk[i] ;
        putchar1(pk[i]);
    }
    putchar1(x);
    while (getchar1()!=0xAA);
    delay_ms(100);

    i=1;
    ret[0]=0xAA;  
    while (rx_counter1)ret[i++]=getchar1();
    return(ret[8]);
}

unsigned char cr038_request(void){
 unsigned char t[20],i=0;
 
/*
    t[0]=1;
    t[1]=1;
    t[2]=3;   // 19200
    if(cr038_send_packet(t,3,t)!=0)return(0);  // set baudrate
*/
    t[0]=1;
    t[1]=2;
    t[2]=0x52;
    if(cr038_send_packet(t,3,t)!=0)return(0);  // request

    t[0]=2;
    t[1]=2;
    if(cr038_send_packet(t,2,t)!=0)return(0);  //anticol
    
    t[0]=3;
    t[1]=2;
    cardID[0]=t[2]=t[9];
    cardID[1]=t[3]=t[10];
    cardID[2]=t[4]=t[11];
    cardID[3]=t[5]=t[12];
    if(cr038_send_packet(t,6,t)!=0)return(0); // select

    return(1);

}

unsigned char cr038_read(unsigned char mod,unsigned char blok,unsigned char *ret){
 unsigned char t[30],i=0;

    t[0]=7;
    t[1]=2;
    t[2]=mod;
    t[3]=blok;
    t[4]=0xFF;
    t[5]=0xFF;
    t[6]=0xFF;
    t[7]=0xFF;
    t[8]=0xFF;
    t[9]=0xFF;
    if(cr038_send_packet(t,10,t)!=0)return(0);  //aute

    t[0]=8;
    t[1]=2;
    t[2]=blok;
    if(cr038_send_packet(t,3,t)!=0)return(0);  //read
    for(i=0;i<16;i++)ret[i]=t[9+i];
    return(1);
}

unsigned char cr038_write(unsigned char mod,unsigned char blok,unsigned char * dat){
 unsigned char t[30],i=0;

    t[0]=7;
    t[1]=2;
    t[2]=mod;
    t[3]=blok;
    t[4]=0xFF;
    t[5]=0xFF;
    t[6]=0xFF;
    t[7]=0xFF;
    t[8]=0xFF;
    t[9]=0xFF;
    if(cr038_send_packet(t,10,t)!=0)return(0);  //aute

    t[0]=9;
    t[1]=2;
    t[2]=blok;
    for(i=0;i<16;i++)t[3+i]=dat[i];
    if(cr038_send_packet(t,19,t)!=0)return(0);  //write
    return(1);
}

 

**  آخرین ویرایش در  پنج‌شنبه 16 آذر 91 - 2:11 PM

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  جمعه 24 آذر 91 , 2:33 AM


کاربر
robojalal
تعداد پستها : 3
کمک

سلام به مهندس خزاما
من برنامه cr038 به زبان بیسیک رو می خواستم
یه دونه خریدم نمیدونم چجوری کار میکنه
کمکم کنین
یه برنامه که شماره کارت و مقدار داخل کارت رو بتونم بخونم
و همینطور یه عددی رو بتونم داخلش بریزم
خیلی ضروری هست
حتما بیسیک باشه

  جمعه 24 آذر 91 , 8:26 AM


مدیر سایت
behzad
تعداد پستها : 905
درود و خوش آمد به شما
سورسی برای بسکام ندارم...
مگه همین کد سی رو خودتون  تبدیل کنید به بیسیک

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  جمعه 24 آذر 91 , 10:50 PM


کاربر
robojalal
تعداد پستها : 3
پاسخ

من آخه c بلد نیستم
شما میتونید این زحمت رو بکشید
ضروریه
مرسی

  دوشنبه 27 آذر 91 , 2:23 AM


کاربر
robojalal
تعداد پستها : 3
کمک

کسی نیست کمک کنه ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

  چهارشنبه 26 تير 92 , 12:03 AM


کاربر
rbadii
تعداد پستها : 1
با سلام
من تازه با سایت شما آشنا شدم
کدی که قرار دادید بسیار کاربردی است
من در الکترونیک تازه کار هستم
ممکنه یک نمونه از نحوه استفاده از درایور نوشته شده برای RFID READER را قرار دهید
با تشکر.

  شنبه 5 مرداد 92 , 5:40 PM


مدیر سایت
behzad
تعداد پستها : 905
درود و خوش آمد به شما
با متد request چک میکنید که کارتی در نزدیکی هست یا خیر
و با متدهای read و write توش مینویسید
حتما قبلش سیستم حافظه کارتهای مایفر رو بخونید چون اگه اشتباه رایت کنید اون خونه های کارت میسوزه و دیگه اون خونه ها قابل دسترسی نیستن
if( cr038_request() ){
                cr038_read(0x60,block,&Data[0]) ;
}

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  دوشنبه 7 مرداد 92 , 12:43 PM


کاربر
agrabi
تعداد پستها : 2
کارتخوان

با سلام خدمت شما 

آقای مهندس من چند سوال در مورد ای برنامه داشتم

اول اینکه من وقتی میخوام یه عدد مثل 150 رو تو حافطه کارت بنویسم از چه دستوری باسد استفاده کنم؟؟
دوم اینکه طبق آخرین تایپیک شما من وقتی میخوام قبل از خوندن اطلاعات کارت تابع Request رو فراخوانی برنامه تو یه حلقه بی نهایت گیر و به اصطلاح هنگ میکنه و هیچ عکس العملی نشون نمیده

دوم اینکه این برنامه برای کدوم سری از میکرو ها نوشته شده؟؟ چون توی این برنامه از چند تا تابع مثل putchar1 و getchar1 استفاده میشه که به نظرم مربوط به میکرو 128 هستش در صورتی من میخوام برای میکرو 32 راه اندازی کنم و این توابع در اون به یه طریق دیگه ای هستن

آخرین سوالمم این بود یه متغیر rx_counter هستش که تو هیچ جای برنامه ای که نوشتین تعریف نشده و مقدار دهی اولیه نشده و همچنین نوع اون که از نوع  char  هست یا int هم معلوم نیست چون در بعضی برنامه ها در شرایطی int  و در شرایطی char تعریف شده

ممنون میشم تا منو راهنمایی کنین

با تشکر

  سه‌شنبه 15 مرداد 92 , 10:04 AM


مدیر سایت
behzad
تعداد پستها : 905
نوشتن هم مشابه همون خوندن هست که مثال زدم
cr038_write(0x60,blok,&Data[0]);
شما اون چک کردن رو باید توی لوپ اصلی برنامه بزارین که مثلا هر ثانیه چند بار چک بشه یا توی یک تایمر
برنامه برای مگا128 هست و کدویژن شما برای میکرو های دیگه باید تغییرات لازم رو بدین که خیلی هم سادست
 

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  دوشنبه 28 مرداد 92 , 12:22 PM


کاربر
agrabi
تعداد پستها : 2
مهندس با تشکر از راهنمایی 

اگه امکان داشته باشه کد کامل برنامه رو روی سایت قرار بدین تا استفاده کنیم

چون واقعیتش به بعضی از متغیر ها که سراسری تعریف شدن گیر میده و چون منم نمیدونم نوع این متغییر ها چی هستش کاری نمیتونم انجام بدم

اگه امکانش هستش و براتون اشکالی نداره کد کاملش رو که تو کدویژن نوشتین برای دانلود روی سایت قرار بدین

با تشکر

  يكشنبه 1 دي 92 , 12:54 PM


کاربر
hamid_reza
تعداد پستها : 1
CR038

سلام به همه و بویژه آقای خزاما
من تازه شروع کردم با CR038 کار کنم.ولی مشکلی که بهش برخورد کردم اینه که وقتی دستور card select را براش میفرستم پاسخی که توی دیتاشیت گفته را برام نمیفرسته"AA BB 07 00 XX XX 03 02 00 08 0A" .بلکه میاد پاسخ آخرین دستور قبل از دستورcard select را بهم نشون میده!! از اونجایی که آخرین دستوری که بهش ارسال کردم anti collision بوده , حالا توی پاسخ card select برام همون پاسخ anti collision  را میفرسته!! میکرو بعد از ارسال دستور card select منتظر پاسخ میشه اون هم 11 بایت ! و اگر داده دریافت نکنه همونجا میمونه!!! این نشون میده که من دارم داده های جدیدی دریافت میکنم و بطور اشتباهی داده های قبلی را دوباره نمیخونم!!! من با code vision  کار میکنم.
نمیدونم آیا این پاسخ صحیح یا نه؟؟ آیا از دستور card select به تنهایی میشه استفاده کرد یا بعدش باید دستوری مثل read یا write باشه!!!
از آقای خزاما و هرکسی که این مشکل را حل کرده یا اطلاعات کاملتری داره خواهش میکنم که کمک کنند
ممنون

  صفحه : [1]  2    
 
 


Designer And Programmer : Behzad khazama
Coded With ASP.NET
تمامي حقوق مادي و معنوي مطالب متعلق به اين سايت ميباشد .
هر گونه استفاده از مطالب اين سايت تنها با ذکر منبع بلامانع ميباشد
.
www.khazama.com
Tel : 051-44641597 - 09363677001 - 09155714862
Support SMS Center: 09363677100