اطلاعیه

Collapse
No announcement yet.

پروتکل wiegand

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

    پروتکل wiegand

    سلام خدمت همه دوستان .
    به دادم برسین که دیگه دود داره از سرم بلند میشه ! :angry: هر چی اینترنت گشتم همه چیز پیدا شد غیر اونیکه خواستم.
    مبخام یه خروجی wiegand که از rfid وصل کنم به atmega32 . نه شماتیک دارم نه کد :cry2:
    لطفا دوستان کمک کنن که دیگه دارم ... :cry:
    ممنون از همه دوستان

    #2
    پاسخ : پروتکل wiegand

    دوست من نگفتی با چه زبونی! با چه نرم افزاری!

    برنامه ای که گذاشتم با زبان C توسط نرم افزار کدویژن هست.

    شماتیک:
    برای این که تصویر رو کامل ببینی از کلیک های ctrl+mouse wheel استفاده کن.



    برنامه به زبان c:
    اگه با بیسیک مینویسی بگو تا برنامه بسکام رو بذارم.

    /************************************************** ***
    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]);
    }
    }
    [glow=red,2,300]گرد هم آمدن شروع است.با هم ماندن پيشرفت است.با هم کار کردن موفقيت است.[/glow]
    [img width=98 height=100]http://s3.picofile.com/file/7407857311/icon3.png[/img]

    دیدگاه


      #3
      پاسخ : پروتکل wiegand

      آقا خیلی ممنون ازتون واقعا لطف کردین.
      ببخشیدشماتیک یخورده برام گیج کنندس . من به هیچ چیزاضافی نیازندارم نه بازرمیخام نه led نه رله ... فقط میخوام شماره ای که روی wiegand

      فرستاده میشه رو lcd نمایش بدم . تواتصال lcd مشکلی نیست ولی طبق شماتیک باید D0 رو به پایه 22 و D1 رو به پایه 23 مستقیما وصل کنم

      درسته ؟ آیا چیزدیگم برا دریافت شماره از wiegand لازم وصل کنم؟
      سورسم کدویژن خوب ممنون ازتون.

      دیدگاه


        #4
        پاسخ : پروتکل wiegand

        سلام
        به دلیل استفاده از پورت یوزارت میکرو تصمیم ارم ماژول کارت خوان رو با پروتوکل wiegand راه اندازی کنم؟
        اینطور که فهمیدم این پروتوکل دو سیمه و به پایه دلخواه از میکرو متصل میشه
        26 بیت دریافتی داره که 8 بی شناسایی نوع کارت و مابقی بیت پریتی و کد کارته
        با استفاده از دستور
        Do
        If Pind.6 = 0 Then
        Dat(i) = 1
        I = I + 1
        End If
        While Pind.6 = 0
        Wend

        If Pind.7 = 0 Then
        Dat(i) = 0
        I = I + 1
        End If
        While Pind.7 = 0
        Wend

        If I = 27 Then
        I = 0
        Code = Dat(i)
        Cls
        Lcd Code
        Wait 5
        End If


        Loop
        سعی کردم کد رو بخونم
        اما هر بار عدد 2 رو روی ال سی دی مینویسه!!
        کسی در این ضمینه تجربه داره تا کمکم کنه؟

        دیدگاه


          #5
          پاسخ : پروتکل wiegand

          باعث تعجبه
          کسی هیچ اطلاعاتی در مورد این پروتوکل نداره؟

          دیدگاه


            #6
            پاسخ : پروتکل wiegand

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

            دیدگاه

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