اطلاعیه

Collapse
No announcement yet.

کتابخانه و کار با AT93C46 با کدویژن

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

    کتابخانه و کار با AT93C46 با کدویژن

    سلام

    دوستان کسی کتابخونه برای AT93C46 در کدویژن سراغ داره؟ (پروتکلش 3 Wire هست خودش هم EEprom هست!)

    ممنون از جوابتون :nerd:

    #2
    پاسخ : کتابخانه و کار با AT93C46 با کدویژن

    دوستان من تابع های زیر رو پیدا کردم ولی کار نمیده! نمیدونم چرا؟ :cry2:

    کد:
    bit z; 
    
    void Serial_Write_8(unsigned char Data) { 
      unsigned char x; 
      PORTD.2=1; 
      delay_ms(5); 
      PORTD.1=1; /* send start bit */ 
      delay_ms(5); 
    
      for (x=0;x<8;x++) { 
       if (Data&0x80) 
         PORTD.2=1; // DI_SET; 
       else 
         PORTD.2=0; //DI_CLEAR; 
       delay_ms(7); 
       PORTD.1=1; //SK_SET; 
       delay_ms(10); 
       PORTD.1=0; //SK_CLEAR; 
       delay_ms(10); 
       Data*=2; 
      }  
    } 
    
    void EWEN(void) { 
      PORTD.0=1; 
      delay_ms(5); 
      Serial_Write_8(0x30); /* EWEN instruction */ 
      PORTD.0=0; 
      delay_us(1); 
      //putchar1('2'); 
    } 
    
    void WRITE(unsigned int num,unsigned char addr) { 
      unsigned char x; 
      PORTD.0=1; 
      delay_ms(20); 
    
      Serial_Write_8(0x40 | addr); /* send command for write operation & address */ 
      delay_ms(5); 
      PORTD.1=1; //SK_SET; 
      delay_ms(10); 
      for (x=0;x<16;x++) { 
       z = num>>15; 
       if (z) 
         PORTD.2=1; // DI_SET; 
       else 
         PORTD.2=0; //DI_CLEAR; 
       delay_ms(7); 
       PORTD.1=0; //SK_CLEAR; 
       delay_ms(10); 
       num*=2; 
      } 
      PORTD.0=0; 
      delay_us(2); 
    } 
    //-------------------------------------------------------------- 
    
    unsigned int READ(unsigned char addr) { 
      unsigned char x,b; 
      unsigned int Data=0; 
      PORTD.0=1; 
      delay_ms(5); 
      Serial_Write_8(0x80 | addr); /* send write address */ 
      delay_ms(5); 
      PORTD.1=0; 
      delay_us(2); 
      PORTD.1=1; 
      delay_ms(7); 
      b=PIND.3; //to get the dummy bit before reading actual data 
      PORTD.1=0; 
      delay_ms(7); 
    
      for (x=0;x<16;x++) { 
       Data*=2; 
       PORTD.1=0; // data is obtained on the rising edge of the sck clock so first make 
       delay_us(2); // PORTD.1 pin low for some time & again make it high. 
       PORTD.1=1; 
       delay_ms(7); 
       Data|=PIND.3; 
       PORTD.1=0; 
       delay_ms(7); 
      } 
      PORTD.0=0; //CE_CLEAR; 
      delay_us(2); 
      return(Data); 
    } 
    //--------------------------------------------------------------   
    
    void main(void) { 
      unsigned char A1=0x05; //93c46 memory address 
      unsigned int DATA=0x48; // writting 'H' into memory location 
      unsigned int DATA1; 
    
      PORTB=0xFF; 
      DDRB=0xFF; 
      
      PORTD=0x00; 
    
      EWEN(); 
      WRITE(DATA, A1); 
      delay_ms(1000); 
      DATA1 = READ(A1); 
      
      PORTB.3 = 0; 
      if(DATA1 == DATA) 
        PORTB.4 = 0; 
    }

    دیدگاه


      #3
      پاسخ : کتابخانه و کار با AT93C46 با کدویژن

      یه سوال اینهمه ایپرام خوب هست این یکی چرا؟؟؟دقیقا مثل قضیه ما با کارت SD شده اونم کار نمیکنه :biggrin:
      باید خودمون تابع بنویسیم بزارید این قضیه SD تموم بشه خودم میام کتابخونش رو بنویسم ولی نگفتید این ایپرام چه خصوصیاتی داره؟

      دیدگاه


        #4
        پاسخ : کتابخانه و کار با AT93C46 با کدویژن

        این EEPROM در یک دستگاهی استفاده شده ، قراره این اطلاعات روی اون کپی بشند و هر چند وقت یک بار دوباره بازیابی بشند!

        دیدگاه


          #5
          پاسخ : کتابخانه و کار با AT93C46 با کدویژن

          این رو هم پیدا کردم! ولی اصلا متوجه نمیشم چی کار کرده! oo:

          http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=9 3203&start=0

          دیدگاه


            #6
            پاسخ : کتابخانه و کار با AT93C46 با کدویژن

            http://www.avrfreaks.net/index.php?n...03&start=0
            این همون صفحه هستش
            منم نفهمیدم فکر کنم خودمون باید دست به کار بشیم
            پروتئوس اینو داره؟

            دیدگاه


              #7
              پاسخ : کتابخانه و کار با AT93C46 با کدویژن

              سلام دوستان

              یک سوال دیگر...

              جدول زیر مجموع دستورات این آی سی هست...


              در دستور Write ، باید دیتا 16 بیتی به آی سی ارسال بشه یا 8 بیتی؟

              تابعی که اول گزاشتم 16 بیت رو ارسال میکنه! ولی دیتارو 8 بیتی میگیره!(وروی تابع 8 بیتی هست!)

              ممنون از کمک همه :nerd:

              دیدگاه


                #8
                پاسخ : کتابخانه و کار با AT93C46 با کدویژن

                با تلاش شبانه روزی متخصصان ، تونستیم توابع رو راه بندازیم
                توابع :

                define های ابتدایی میکرو:
                کد:
                #define CS PORTC.0
                #define SK PORTC.1
                #define DI PORTC.2
                #define DO PINC.3


                توابع :


                کد:
                void Serial_Write_8(unsigned char Data)
                 { 
                  unsigned char x; 
                  DI=1; 
                  delay_ms(5);  //5
                  SK=1; /* send start bit */ 
                  delay_ms(5);  //5 
                  DI=0;
                  delay_ms(5);
                  SK=0;
                
                  for (x=0;x<8;x++) { 
                   if (Data&0x80) 
                     DI=1; // DI_SET; 
                   else 
                     DI=0; //DI_CLEAR; 
                   delay_ms(7);  
                   SK=1; //SK_SET; 
                   delay_ms(10); 
                   SK=0; //SK_CLEAR; 
                   delay_ms(10);   
                   Data*=2; 
                  }  
                  DI=0;
                } 
                
                void EWEN(void) 
                { 
                  CS=1; 
                  delay_ms(5); 
                  Serial_Write_8(0x30); /* EWEN instruction 3*/ 
                  CS=0; 
                  delay_us(1); 
                } 
                
                void WRITE(unsigned int num,unsigned char addr) 
                { 
                  unsigned char x; 
                  CS=1; 
                  delay_ms(20);//20 
                
                  Serial_Write_8(0x40 | addr); //send command for write operation & address 
                  delay_ms(55); //5
                
                  for (x=0;x<16;x++) { 
                   z = num>>15; 
                   if (z) 
                     DI=1; // DI_SET; 
                   else 
                     DI=0; //DI_CLEAR; 
                   delay_ms(7); 
                   SK=1; //SK_CLEAR; 
                   delay_ms(10);  
                   SK=0;
                   num*=2; 
                  } 
                  CS=0; 
                  delay_ms(1);
                } 
                
                
                
                
                unsigned int READ(unsigned char addr)
                 { 
                  unsigned char x,b; 
                  unsigned int Data=0; 
                  CS=1; 
                  delay_ms(5); //5
                  Serial_Write_8(0x80 | addr); /* send write address */
                  delay_ms(5);   
                  b=DO; //to get the dummy bit before reading actual data 
                  SK=0; 
                  delay_ms(7);  //7
                
                  for (x=0;x<16;x++) { 
                   Data*=2; 
                   SK=0; // data is obtained on the rising edge of the sck clock so first make 
                   delay_us(2); // PORTD.1 pin low for some time & again make it high. 
                   SK=1; 
                   delay_ms(7); 
                   Data|=DO; 
                   SK=0; 
                   delay_ms(7);
                  } 
                  CS=0; //CE_CLEAR; 
                  delay_us(2); 
                  return(Data); 
                }

                دیدگاه


                  #9
                  پاسخ : کتابخانه و کار با AT93C46 با کدویژن

                  آقا SD ما هم راه افتاد :wow:
                  یه سوال مگه این ارتباط سه سیمه نیستش پس چرا چهار تا سیم داره؟؟؟
                  یه سوال دیگه کلاکش با صفر و یک کردن پایه های میکرو هست دیگه؟بله؟

                  دیدگاه


                    #10
                    پاسخ : کتابخانه و کار با AT93C46 با کدویژن

                    نوشته اصلی توسط شهریار رجب زاده
                    آقا SD ما هم راه افتاد :wow:
                    یه سوال مگه این ارتباط سه سیمه نیستش پس چرا چهار تا سیم داره؟؟؟
                    یه سوال دیگه کلاکش با صفر و یک کردن پایه های میکرو هست دیگه؟بله؟
                    مبارکه...

                    پروتکل ارتباطیش 3 سیمه هست...یکیش CS یا همون Chip Select هست و جزء پروتکل حساب نمیشه!

                    بله ، با صفر و یک کردن پایه هست...

                    دیدگاه


                      #11
                      پاسخ : کتابخانه و کار با AT93C46 با کدویژن

                      پس بر این حساب spi هم سه سیمه میشه :-? :-? :-?

                      دیدگاه

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