اطلاعیه

Collapse
No announcement yet.

مشکل با پروژه RFID

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل با پروژه RFID

    با سلام خدمت تمام دوستان عزیز در انجمن
    من به تازگی در انجمن عضو شدم.به همین دلیل زیاد با روال کار در انجمن آشنا نیستم .ولی خواشمندم از دوستانی که اطلاعاتی در این زمینه دارند همکاری کنند.
    من برای پروژه ام مدار درباز کن RFID ،از کتاب 11 پروژه را انتخاب کرده ام .و پس از جواب گرفتن اولیه از مدار میخواستم یکسری تغییرات در ساختار برنامه بدم .
    اول اینکه میخواستم بدونم چجوری میتونم این پروژه را با کامپیوتر ارتباط بدم ؟(مشکلی در سخت افزار و مدار واسط بین میکرو و کامپیوتر ندارم .از مبدل USB به سریال استفاده میکنم )مشکل من در نحوه برنامه نویسیه و اضافه کردن آن به برنامه اصلی پروژه است .برنامه اصلی با کدویژن است .
    دوم اینکه برنامه اصلی پروژه به این صورت است که هنگامی که کارت را در مقابل ریدر (که ماژول RF01D است) میگیریم از ما سوال میشود که کارت جدید رو seve کند یا خیر که در صورت seve کردن کارت در بلوک 0 تا 9 به صورت یک کد 10 رقمی مانند کد 1400C0B82A ذخیره میشود .این پروژه ده کارت را میتواند ذخیره کند که هر ده کارت به صورت فوق با یک شناسه ده رقمی ذخیره میشوند .من میخواستم به جای این شناسه ده رقمی هر کارت مثلا با یک شماره دانشجویی و یا نام یک فرد و یا هر چیزی دیگه ای به غیر از این شناسه ها ذخیره شود ؟کسی میدونه چطوری باید این کار رو انجام داد ؟

    #2
    پاسخ : مشکل با پروژه RFID

    توی کجا می خوای ذخیره کنی ؟
    eeprom
    میشه ...
    چون من گدایی بی نشان مشکل شود یاری چنان
    سلطان کجا عیش نهان با رند بازاری کند...
    [حافظ]

    دیدگاه


      #3
      پاسخ : مشکل با پروژه RFID

      اینم سورس پروژه است که دارم .منتها نمیدونم چجوری باید این کارو انجام بدم ؟می تونید شما کمکم کنید ؟

      Project : RFID Door Opener
      Version : 1
      Author : SMH
      Chip type : ATmega16
      Program type : Application
      Clock frequency : 12.000000 MHz
      Memory model : Small
      Data Stack size : 256
      ************************************************** ***/
      #include <mega16.h>
      // Alphanumeric LCD Module functions
      #asm
      .equ __lcd_port=0x1B ;PORTA
      #endasm
      #include <lcd.h>
      #include <string.h>
      #include <delay.h>
      #include <stdio.h>
      //------------------------------
      #define door_open PORTD.6
      #define alarm PORTD.7
      #define yes_pin PINC.2
      #define no_pin PINC.3
      unsigned char s[15];
      unsigned char s1[10];
      unsigned char test[]="1400C0B82A";
      unsigned char eeprom data_base[100];
      unsigned char valid_id,i=0,j;
      unsigned char yes_no_check;
      bit start_flag=0,read_flag=0,up_down_flag=0,usart_flag =1;
      //------------------------------------------------------
      void show_eeprom(unsigned char block_number);
      unsigned char search_eeprom(void);
      void check_in(void);
      void set_up(void);
      unsigned char delet_eeprom(unsigned char block_number);
      unsigned char write_eeprom(unsigned char block_number);
      unsigned char yes_no();
      //-------------------------------------------
      interrupt [USART_RXC] void usart_rx_isr(void)
      {
      unsigned char usart_data;
      usart_data=UDR;
      if(usart_flag)
      {
      if (usart_data==0x02) start_flag=1;
      if (start_flag&i<15)
      {
      s[i]=usart_data;
      i++;
      }
      if (usart_data==0x03)
      {
      start_flag=0;
      read_flag=1;
      i=0;
      }
      }
      }
      //------------------------------------------
      interrupt [EXT_INT0] void ext_int0_isr(void)
      {
      if(up_down_flag)
      {
      delay_us(200);
      if(!PIND.2)
      if(valid_id<9)
      {
      valid_id++;
      show_eeprom(valid_id);
      }
      }
      }
      //-----------------------------------------
      interrupt [EXT_INT1] void ext_int1_isr(void)
      {
      if(up_down_flag)
      {
      delay_us(200);
      if(!PIND.3)
      if(valid_id>0)
      {
      valid_id--;
      show_eeprom(valid_id);
      }
      }
      }
      //-----------------------------------------
      void main(void)
      {
      PORTA=0x00;
      DDRA=0x00;
      PORTB=0x00;
      DDRB=0x00;
      PORTC=0x03;
      DDRC=0x00;
      PORTD=0x8C;
      DDRD=0xC0;
      //---------------------------
      GICR|=0xC0;
      MCUCR=0x0A;
      MCUCSR=0x00;
      GIFR=0xC0;
      TIMSK=0x00;
      //---------------------------
      UCSRA=0x00;
      UCSRB=0x90;
      UCSRC=0x86;
      UBRRH=0x00;
      UBRRL=0x4D;
      // LCD module initialization
      lcd_init(16);
      // Global enable interrupts
      #asm("sei&quot
      for(j=0;j<10;j++)
      {
      data_base[j+50]=test[j];
      }
      check_in();
      while (1)
      {
      if(read_flag)
      {
      read_flag=0;
      usart_flag=0;
      //-----------------------------------------
      switch(PINC&0x03)
      {
      //--------------------------Check in Mode
      case 0:
      for(j=0;j<10;j++)
      {
      s1[j]=s[j+1];
      }
      valid_id=search_eeprom();
      if(valid_id>=0&valid_id<10)
      {
      door_open=1;
      alarm=0;
      lcd_clear();
      lcd_putsf("Valid Card>NO."
      lcd_putchar(valid_id+0x30);
      lcd_gotoxy(0,1);
      for(j=0;j<10;j++)
      {
      lcd_putchar(s1[j]);
      }
      delay_ms(100);
      alarm=1;
      delay_ms(3000);
      door_open=0;
      check_in();
      }
      else
      {
      lcd_clear();
      lcd_putsf("Invalid Card!"
      delay_ms(2000);
      check_in();
      }
      break;
      //------------------------------Setup Mode
      case 3:
      for(j=0;j<10;j++)
      {
      s1[j]=s[j+1];
      }
      valid_id=search_eeprom();
      if(valid_id>=0&valid_id<10)
      {
      //------------------Exist Card
      lcd_clear();
      lcd_putsf("Already Exist:"
      lcd_gotoxy(0,1);
      lcd_putsf("NO."
      lcd_putchar(valid_id+0x30);
      lcd_putsf(" "
      for(j=0;j<10;j++)
      {
      lcd_putchar(s1[j]);
      }
      delay_ms(3000);
      lcd_gotoxy(0,1);
      lcd_putsf(" "
      lcd_gotoxy(0,1);
      lcd_putsf("Delete it? Y/N"
      yes_no_check=yes_no();
      if(yes_no_check==1)
      {
      delet_eeprom(valid_id);
      lcd_clear();
      lcd_putsf("Block No: "
      lcd_putchar(valid_id+0x30);
      lcd_gotoxy(0,1);
      lcd_putsf("Delete Complete!"
      delay_ms(3000);
      set_up();
      }
      else if(yes_no_check==0)
      {
      lcd_clear();
      lcd_putsf("No delete!"
      delay_ms(2000);
      set_up();
      }
      }
      else
      {
      //--------------------New Card
      lcd_clear();
      lcd_putsf("New Card:"
      lcd_gotoxy(0,1);
      lcd_putsf("Save it? Y/N"
      yes_no_check=yes_no();
      if(yes_no_check==1)
      {
      lcd_clear();
      lcd_putsf("Select Block:"
      lcd_gotoxy(0,1);
      lcd_putsf("Using UP/DOWN..."
      delay_ms(2000);
      up_down_flag=1;
      valid_id=0;
      show_eeprom(valid_id);
      yes_no_check=yes_no();
      up_down_flag=0;
      if(yes_no_check==1)
      {
      if(write_eeprom(valid_id))
      {
      lcd_clear();
      lcd_putsf("Block No: "
      lcd_putchar(valid_id+0x30);
      lcd_gotoxy(0,1);
      lcd_putsf("Save Complete!"
      delay_ms(3000);
      set_up();
      }
      }
      else if(yes_no_check==0)
      {
      lcd_clear();
      lcd_putsf("No save!"
      delay_ms(2000);
      set_up();
      }
      }
      else if(yes_no_check==0)
      {
      lcd_clear();
      lcd_putsf("No save!"
      delay_ms(2000);
      set_up();
      }
      }
      break;
      default:
      //------------------Not Allow Mode
      lcd_clear();
      lcd_putsf("Not Allow!"
      delay_ms(2000);
      check_in();
      }
      }
      usart_flag=1;
      };
      }
      //-------------------------------------
      unsigned char search_eeprom()
      {
      unsigned char k,p,ret_val;
      bit test_flag;
      for(p=0;p<10;p++)
      {
      ret_val=p;
      test_flag=1;
      for(k=0;k<10;k++)
      if(s1[k]!=data_base[p*10+k])
      {
      ret_val=20;
      test_flag=0;
      }
      if(test_flag==1)
      break;
      }
      return(ret_val);
      }
      //-------------------------------------
      void check_in(void)
      {
      lcd_clear();
      lcd_putsf("Welcome:"
      lcd_gotoxy(0,1);
      lcd_putsf(">>> Check in <<<"
      }
      //-------------------------------------
      void set_up(void)
      {
      lcd_clear();
      lcd_putsf("Setup:"
      lcd_gotoxy(0,1);
      lcd_putsf(">>Insert Card<<"
      }
      //-------------------------------------
      unsigned char yes_no(void)
      {
      unsigned char yes_no_ret=0;
      while(yes_pin&no_pin)
      {
      delay_us(50);
      }
      if(!yes_pin&no_pin)
      yes_no_ret=1;
      return(yes_no_ret);
      }
      //-------------------------------------
      unsigned char delet_eeprom(unsigned char block_number)
      {
      char i;
      for(i=0;i<10;i++)
      {
      data_base[block_number*10+i]=0xFF;
      }
      return(1);
      }
      //-------------------------------------
      unsigned char write_eeprom(unsigned char block_number)
      {
      char i;
      for(i=0;i<10;i++)
      {
      data_base[block_number*10+i]=s1[i];
      }
      return(1);
      }
      //-------------------------------------
      void show_eeprom(unsigned char block_number)
      {
      char i;
      lcd_clear();
      lcd_putsf("Block No>"
      lcd_putchar(block_number+0x30);
      lcd_gotoxy(0,1);
      lcd_putsf("ID>"
      for(i=0;i<10;i++)
      {
      lcd_putchar(data_base[block_number*10+i]);
      }
      }

      دیدگاه


        #4
        پاسخ : مشکل با پروژه RFID

        سلام
        من یک چنین پروژه انجام دادم (البته خیلی گسترده و جامع) که حدود 500 کارت رو ذخیره میکنه

        بنا به گفته خودتون شما از سیستم RFID 125KHz استفاده میکنید (چون من این پروژه رو تا حالا ندیده بودم)
        اون کد 10 رقمی 10 بایت هست که روی کارت توسط سازنده تعبیه شده و قابل تغییر نیست :biggrin:
        اگه میخوایی از کارت های 13.5Mhz استفاده کن چون قابلیت نوشتن و خواندن دارند :applause:

        ماژولش هم RFM130 که میتونی تو بازار گیر بیاری :agree:
        موفق باشی
        امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

        دیدگاه

        لطفا صبر کنید...
        X