اطلاعیه

Collapse
No announcement yet.

مشکل با تطابق مقدار خوانده شده کارت با مقدار واقعی RF01D با اتمل استادیو

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

    مشکل با تطابق مقدار خوانده شده کارت با مقدار واقعی RF01D با اتمل استادیو

    سلام دوستان
    ی مشکل اساسی دارم سابق با همین تکنیک با کامپایلر های دیگه هم کارت رو میخواستم بخونم مقدارشو مکافاتی داشتم
    نمیدونم چیکار باید بکنم یکی لطفا لطفا منو راهتمایی کنه
    ببینید من میام اطلاعات رجیستر UDR رو میخونم ولی با هر فرمتی دریافت میکنم و نشون میدم اصلا شبیه اطلاعات عددی روی کارت نیست
    توجه شود بنده ماژول رو در مد RS232 راه اندازی کردم


    مقدار رشته ای پشت کارت :
    0008323148
    مقدار های دریافت شده از UDR به ترتیب :
    65
    13
    72
    240

    و سری دوم که کارت میزنم عدد اول 64 میشه کلا 65 و 13 تغییر میکنن هر سری ک کارت بخوره :angry:
    آخه چرا ؟! :|
    سورس :
    کد:
    /*
     * RX.c
     *
     * Created: 11/01/2016 2:33:14 AM
     * Author : 
     */ 
    
    #include <avr/io.h>
    #include <util/delay.h>
    #ifndef F_CPU
    #define F_CPU 11059200UL
    #endif
    #include "lcd.h"
    
    #include <stdio.h>
    
    #define FOSC 11059200// Clock Speed
    #define BAUD 9600
    #define MYUBRR FOSC/16/BAUD-1
    
    void USART_Init( unsigned int ubrr)
    {
    	/* Set baud rate */
    	UBRRH = (unsigned char)(ubrr>>8);
    	UBRRL = (unsigned char)ubrr;
    	/* Enable receiver and transmitter */
    	UCSRB = (1<<RXEN)|(1<<TXEN);
    	/* Set frame format: 8data, 2stop bit */
    	UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
    }
    
    unsigned char USART_Receive( void )
    {
    	/* Wait for data to be received */
    	while ( !(UCSRA & (1<<RXC)) )
    	;
    	/* Get and return received data from buffer */
    	return UDR;
    }
    int main(void)
    {
    	LCDInit(LS_NONE);
    	LCDClear();
    	LCDWriteStringXY(0,0,"RFID Reader");
    	_delay_ms(2000); 
      USART_Init ( MYUBRR );
    	 char result = 0 ; 
    	char buf1[16];
    	while (1)
    	{
    	LCDClear();	
    	LCDWriteStringXY(0,0,"Waiting");
    	result = USART_Receive();
    	sprintf(buf1,"Val:%d",result);
    	LCDClear();
    	LCDWriteStringXY(0,0,buf1);
    	_delay_ms(5000);
    	
    	}
    }

    اضافه شده در تاریخ :
    چطور میشه شبیه به کدویژن شسته رفته تو اتمل استادیو بگیم مثلا 11 بایت اطلاعات دریافتی رو بهمون بده ؟ :angry:

    اضافه شده در تاریخ :
    دوستان ببینید
    تنها مشکل بنده فقط همینه
    تصویر زیر رو ببینید :

    با کدویژن ی دستور تحت عنوان gets فکر کنم بود دارهک کتابخونه آماده خودشه آرگمان اول بافره و دوم تعداد بایت دریافتی
    و بعدش اطلاعاتو نمایش میدن
    نمونه کد کدویژنش که مثل بنز کار میکنه و دقیقا عبارت روی کارت رو برمیگردونه :
    کد:
    #include <mega16.h>
    #include <stdio.h>
    #include <delay.h>
    #include <lcd.h>
    #asm
      .equ __lcd_port=0x1b //PORTA
    #endasm
     
     
    void main(void)
    {
      char str[11];
      
      
      UCSRA=0x00;
      UCSRB=0x10;
      UCSRC=0x86;
      UBRRH=0x00;
      UBRRL=51;
     
      lcd_init(16);
      
      lcd_gotoxy(0,0);
      lcd_puts("  DMF313.IR");
      delay_ms(1000); 
     
      
      while (1)
      {
       lcd_gotoxy(0,1);
       gets(str,11);
       lcd_puts(str);
      }  
    }


    یکی لطفا به من بگه اون تابع gets چطور اطلاعات رو از UDR میخونه و کنار هم میچینه که درست در میاد :|
    باسپاس فوق العاده ویژه
    اشک هایی که پس از هر شکست ریخته میشوند همان عرق هاییست که برای پیروزی ریخته نشده است

    #2
    پاسخ : مشکل با تطابق مقدار خوانده شده کارت با مقدار واقعی RF01D با اتمل استادیو

    کد:
    char str[]={'0','0','0','0','0','0','0','0','0','0'};
     while (1)
      {
        UCSRB=0x90; 
        gets(str,10);    
        UCSRB=0x00;  
            
        
        lcd_clear();
        lcd_puts(str);

    دیدگاه


      #3
      پاسخ : مشکل با تطابق مقدار خوانده شده کارت با مقدار واقعی RF01D با اتمل استادیو

      نوشته اصلی توسط korosh00
      کد:
      char str[]={'0','0','0','0','0','0','0','0','0','0'};
       while (1)
        {
          UCSRB=0x90; 
          gets(str,10);    
          UCSRB=0x00;  
              
          
          lcd_clear();
          lcd_puts(str);
      ممنون ولی تابع gets آرگمان دوم نمیگیره تو اتمل :sad:

      اضافه شده در تاریخ :
      بدون آرگمان دوم استفاده کردم ولی انگار میکرو ریست میشه مرتبا بر میگرده به ابتدای برنامه

      خواهشا دوستان کمک کنن

      اضافه شده در تاریخ :
      دوستان برنامه ای ک من نوشتم به این صورته :


      کد:
      /*
       * RX.c
       *
       * Created: 11/01/2016 2:33:14 AM
       * Author : 
       */ 
      
      #include <avr/io.h>
      #include <util/delay.h>
      
      #ifndef F_CPU
      #define F_CPU 11059200UL
      #endif
      #include "lcd.h"
      
      #include <stdio.h>
      
      #define FOSC 11059200// Clock Speed
      #define BAUD 9600
      #define MYUBRR FOSC/16/BAUD-1
      
      void USART_Init( unsigned int ubrr)
      {
      	/* Set baud rate */
      	UBRRH = (unsigned char)(ubrr>>8);
      	UBRRL = (unsigned char)ubrr;
      	/* Enable receiver and transmitter */
      	UCSRB = (1<<RXEN)|(1<<TXEN);
      	/* Set frame format: 8data, 2stop bit */
      	UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
      }
      
      unsigned char USART_Receive( void )
      {
      	/* Wait for data to be received */
      	while ( !(UCSRA & (1<<RXC)) )
      	;
      	/* Get and return received data from buffer */
      	return UDR;
      }
      int main(void)
      {
      	LCDInit(LS_NONE);
      	LCDClear();
      	LCDWriteStringXY(0,0,"RFID Reader");
      	_delay_ms(2000); 
        USART_Init ( MYUBRR );
      
      char str[]={'0','0','0','0','0','0','0','0','0','0'};
      	while (1)
      	{
      	LCDClear();	
      	LCDWriteStringXY(0,0,"Waiting");
      		//result = USART_Receive();
      	int i = 1 ; 
      while(1)
      {
      	str[i] = USART_Receive();
      	if (i >= 10) {i = 1 ; break ; }
      	i++;
      	
      }
      
      
      LCDClear();
      LCDWriteStringXY(0,0,str);
      _delay_ms(3000);
      
      	}
      }
      ولی روی ال سی دی کاراکتر های نامفهوم و هر سری رندوم ی چیز نشون میده
      :angry:
      ی دستور تو بسکام و کد ویژن فکر نمیکردم پیاده سازیش اینقدر سخت باشه :|


      دوستان پایه 6 و 7 ماژول که sw3 sw2 هستن رو به ترتیب هم gnd و vcc کردم و هم هردو رو gnd کردم هر دو مد همینه
      اشک هایی که پس از هر شکست ریخته میشوند همان عرق هاییست که برای پیروزی ریخته نشده است

      دیدگاه


        #4
        پاسخ : مشکل با تطابق مقدار خوانده شده کارت با مقدار واقعی RF01D با اتمل استادیو

        دوستان مشکل حل شد ولی ی مشکل دیگه هنوز هست
        ممنون میشم همکاری کنید اینو حل کنیم

        در اولین باری که کارت نزدیک بشه کاملا درست خونده میشه عدد پشت کارت ( تصویر اول )

        ولی در دفعات بعدی به شکل تصویر دوم در میاد

        و واقعا نمیدونم مشکلش چیه


        تصویر عینا برابر با رشته پشت کارت که فقط دفعه اول صحیح است :


        یکی از تصاویر رندوم شده و بهم ریخته دفعات بعدی :



        سورس برنامه ای که نوشتم
        کد:
        /*
         * RX.c
         *
         * Created: 11/01/2016 2:33:14 AM
         * Author : 
         */ 
        
        #include <avr/io.h>
        #include <util/delay.h>
        
        #ifndef F_CPU
        #define F_CPU 11059200UL
        #endif
        #include "lcd.h"
        
        #include <stdio.h>
        
        #define FOSC 11059200// Clock Speed
        #define BAUD 9600
        #define MYUBRR FOSC/16/BAUD-1
        
        void USART_Init( unsigned int ubrr)
        {
        	/* Set baud rate */
        	UBRRH = (unsigned char)(ubrr>>8);
        	UBRRL = (unsigned char)ubrr;
        	/* Enable receiver and transmitter */
        	UCSRB = (1<<RXEN)|(1<<TXEN);
        	/* Set frame format: 8data, 2stop bit */
        	UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
        }
        
        unsigned char USART_Receive( void )
        {
        	/* Wait for data to be received */
        	while ( !(UCSRA & (1<<RXC)) )
        	;
        	/* Get and return received data from buffer */
        	return UDR;
        }
        int main(void)
        {
        	LCDInit(LS_NONE);
        	LCDClear();
        	LCDWriteStringXY(0,0,"RFID Reader");
        	_delay_ms(2000); 
          USART_Init ( MYUBRR );
        
        char str[]={'0','0','0','0','0','0','0','0','0','0'};
        		int i = 1 ; 
        	while (1)
        	{
        	LCDClear();	
        	LCDWriteStringXY(0,0,"Waiting");
        		//result = USART_Receive();
        i = 1 ; 
        while(1)
        {
        	str[i] = USART_Receive();
        	if (i >= 10) {i = 1 ; break ; }
        	i++;
        	
        }
        
        
        LCDClear();
        LCDWriteStringXY(0,0,str);
        _delay_ms(3000);
        
        for(int j = 0 ; j <=sizeof(str);j++) str[j] = '0' ; 
        	}
        }
        جالب اینه اون 8323 همیشه درسته و بهم نمیریزه

        اضافه شده در تاریخ :
        درست شد

        بعد از دریافت اطلاعات باید rxen رو غیرفعال کرد
        اشک هایی که پس از هر شکست ریخته میشوند همان عرق هاییست که برای پیروزی ریخته نشده است

        دیدگاه


          #5
          پاسخ : مشکل با تطابق مقدار خوانده شده کارت با مقدار واقعی RF01D با اتمل استادیو

          rxen چیه ؟؟؟؟

          دیدگاه

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