اطلاعیه

Collapse
No announcement yet.

از بین رفتن اطلاعات مدار با قطع برق

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

    #16
    پاسخ : از بین رفتن اطلاعات مدار با قطع برق

    نوشته اصلی توسط ehsanbagheri
    ساده ترین راه ذخیره اطلاعات داخل eeprom آی سی هست میتونم تو برنامه برات درستش.کنم
    ممنون دوست عزیز: با حافظه eeprom مگا8 میشه نوشت؟ حافظ اش کم نیست؟ اگر درست کنید ممنون میشم.
    سپاس

    دیدگاه


      #17
      پاسخ : از بین رفتن اطلاعات مدار با قطع برق

      مقدار حافظه اش را از دیتاشیت ببینید.
      برای استفاده از eeprom خود میکرو از توابع زیر استفاده کنید.
      کد:
      void write_epr(unsigned char data2,unsigned char addr)
      {
          EEDR=data2;
          EEAR=addr;
          EECR=0x04;
          EECR=0x02;
      while( EECR & 0x02 );
      }
      unsigned char read_epr(unsigned char addr)
      {
          unsigned char data1=0;
          EEAR=addr;
          EECR=0x01;
          data1=EEDR;
          return data1;
      }
      آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

      دیدگاه


        #18
        پاسخ : از بین رفتن اطلاعات مدار با قطع برق

        دوستان مد نظر داشته باشید که در eeprom به تعداد محدود (10000 بار) میتوان نوشت و پاک کرد و بیش از این حافظه خراب میشه.پس واسه چیزی مثل ساعت که دایم باید حافظه مجددا نوشته و پاک بشه مناسب نیست.بهتره از همون آی سی مخصوص ساعت استفاده بشه.
        الهم صل علی محمد و آل محمد و عجل فرجهم

        دیدگاه


          #19
          پاسخ : از بین رفتن اطلاعات مدار با قطع برق

          نوشته اصلی توسط shahpoori
          دوستان مد نظر داشته باشید که در eeprom به تعداد محدود (10000 بار) میتوان نوشت و پاک کرد و بیش از این حافظه خراب میشه.پس واسه چیزی مثل ساعت که دایم باید حافظه مجددا نوشته و پاک بشه مناسب نیست.بهتره از همون آی سی مخصوص ساعت استفاده بشه.
          ممنون دوست عزیز: منظور شما از آی سی مخصوص ساعت همان ds1307 هست؟ مگه این ای سی eeprom داخلی داره؟
          سپاس

          دیدگاه


            #20
            پاسخ : از بین رفتن اطلاعات مدار با قطع برق

            نوشته اصلی توسط ircaspianhero
            ممنون دوست عزیز: منظور شما از آی سی مخصوص ساعت همان ds1307 هست؟ مگه این ای سی eeprom داخلی داره؟
            سپاس
            epprom نیست ram هستش و 56 بایت حافظه داره . مدل های دیگری از ic ساعت هست که حافظه بیشتری دارند.
            راه اندازی enc28j60 و enc424j600 برای RL-TCPnet

            راه اندازیks0108 با emwin

            راه اندازی lcd7 اینچ با داریور داخلی stm32f429

            دیدگاه


              #21
              پاسخ : از بین رفتن اطلاعات مدار با قطع برق

              نوشته اصلی توسط dellfogostar
              epprom نیست ram هستش و 56 بایت حافظه داره . مدل های دیگری از ic ساعت هست که حافظه بیشتری دارند.
              ممنون دوست عزیز: به چه صورت صورت باید نوشته شود ؟ نمونه کد لطفا قرار بدهید!
              سپاس

              دیدگاه


                #22
                پاسخ : از بین رفتن اطلاعات مدار با قطع برق

                سلام
                دوست عزیز یه کد راه اندازی تو سیستمم گشتم پیدا کردم برای at24cxx برای eeprom خارجی هستش
                من یخورده دوباره این سردرد و غیره .. فعال شده نمیتونم کار کنم بخاطر این کمتر حضور دارم
                [code=c]#include<mega16.h>
                #define xtal 1000000

                /* the I2C bus is connected to PORTB */
                /* the SDA signal is bit 3 */
                /* the SCL signal is bit 4 */

                #asm

                .equ __i2c_port=0x18
                .equ __sda_bit=3
                .equ __scl_bit=4

                #endasm

                /* now you can include the I2C Functions */

                #include <i2c.h>

                /* function declaration for delay_ms */
                #include <delay.h>

                #define EEPROM_BUS_ADDRESS 0xa0

                /* read a byte from the EEPROM */
                unsigned char eeprom_read(unsigned char address) {
                unsigned char data;
                i2c_start();
                i2c_write(EEPROM_BUS_ADDRESS);
                i2c_write(address);
                i2c_start();
                i2c_write(EEPROM_BUS_ADDRESS | 1);
                data=i2c_read(0);
                i2c_stop();
                return data;
                }

                /* write a byte to the EEPROM */
                void eeprom_write(unsigned char address, unsigned char data) {

                i2c_start();
                i2c_write(EEPROM_BUS_ADDRESS);
                i2c_write(address);
                i2c_write(data);
                i2c_stop();

                /* 10ms delay to complete the write operation */
                delay_ms(10);
                }

                void main(void) {
                unsigned char i;
                DDRD=0xFF;

                /* initialize the I2C bus */
                i2c_init();

                /* write the byte 55h at address 10h */
                eeprom_write(0x10,0x55);

                /* read the byte from address AAh */
                i=eeprom_read(0x10);
                PORTD=i;

                while (1); /* loop forever */
                }
                [/code]
                امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

                دیدگاه


                  #23
                  پاسخ : از بین رفتن اطلاعات مدار با قطع برق

                  ممنون دوست عزیز: من که متوجه زیاد نمیشم ! که این کدها چی به چی هستند !! البته مشکل من با مدار باتری بک اپ هم حل میشه !! که ان هم نتونستم گیر بیارم!!
                  سپاس

                  دیدگاه


                    #24
                    پاسخ : از بین رفتن اطلاعات مدار با قطع برق

                    با سلام
                    دوست عزیز امکانش هست همین مثالی که در مورد ذخیره eeprom زدین را با بسکام توضیح و بنویسید
                    متشکرم

                    دیدگاه


                      #25
                      پاسخ : از بین رفتن اطلاعات مدار با قطع برق

                      با سلام
                      دوست عزیز امکانش هست همین مثالی که در مورد ذخیره eeprom زدین را با بسکام توضیح و بنویسید
                      متشکرم

                      دیدگاه


                        #26
                        پاسخ : از بین رفتن اطلاعات مدار با قطع برق

                        با سلام
                        برنامه زیر یه شمارنده سادست کسی میتونه همینو طوری تغییر بده که با قطع تغذیه میکرو شمارش در eeprom خود میکرو ذخیره بشه و با وصل مجدد تغذیه ادامه شمارش شروع بشه.
                        $regfile = "m16def.dat"
                        $crystal = 1000000
                        Config Lcd = 16 * 2
                        Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , Rs = Portb.0 , E = Portb.1
                        Config Porta = Input
                        Dim Q As Word
                        If Porta.0 = 1 Then Goto Jam
                        Jam:
                        Do
                        Cls
                        Incr Q
                        Lcd Q
                        Waitms 200
                        Loop

                        دیدگاه


                          #27
                          پاسخ : از بین رفتن اطلاعات مدار با قطع برق

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

                          [code=c]dim q2 as eram word[/code]

                          این برنامه روتست کن
                          [code=vbnet]$regfile = "m16def.dat"
                          $crystal = 1000000
                          Config Lcd = 16 * 2
                          Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , Rs = Portb.0 , E = Portb.1
                          Config Porta = Input
                          Dim Q As Word, q2 as eram word
                          q=q2
                          waitms 5
                          If Porta.0 = 1 Then Goto Jam
                          Jam:
                          Do
                          Cls
                          Incr Q
                          q2=q
                          waitms 10
                          Lcd Q
                          Waitms 200
                          Loop
                          [/code]
                          امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

                          دیدگاه


                            #28
                            پاسخ : از بین رفتن اطلاعات مدار با قطع برق

                            نوشته اصلی توسط ircaspianhero
                            ممنون دوست عزیز: به چه صورت صورت باید نوشته شود ؟ نمونه کد لطفا قرار بدهید!
                            سپاس
                            برای دسترسی به آیسی ساعت باید از پروتکل i2c استفاده کنی که با دادن آدرس هر ریجیستر آیسی ساعت می تونی داده های آن را بخونی ,ویا با تابع (WRITE_I2C(address در آدرس مورد نظر بنویسی. حال برای درسترسی به آدرس ram بری تو دیتا شیت و آدرس 08H-3FH هستش که مجموع میشه 56 بایت هست.
                            تمام آدرس ها 8بیتی هستند
                            دیتاشیت رو نگاه کنی همع چی دستت میاد
                            شما حالا با هر زبانی دوست دارید احتیاج به 3 تابع دارید
                            کد:
                            INIT_I2C( )
                            کد:
                            WRITE_I2C(ADDRRESS)
                            کد:
                            U8 READ_I2C(ADDRRESS)
                            حالا با این سه تابع میتونی ساعت ثانیه و .....یا مقدار RAM را تغییر بدی و بخونی.
                            وچون SRAM هستش تا بینهایت بار میتونی بنویسی و بخونی.
                            و البته اگه باتری RTC رو در بیاری مقدار حافظه RAM مثل بقیه المانهای ساعت پاک میشه

                            به همین را حتی. :nice:
                            راه اندازی enc28j60 و enc424j600 برای RL-TCPnet

                            راه اندازیks0108 با emwin

                            راه اندازی lcd7 اینچ با داریور داخلی stm32f429

                            دیدگاه


                              #29
                              پاسخ : از بین رفتن اطلاعات مدار با قطع برق

                              نوشته اصلی توسط dellfogostar
                              برای دسترسی به آیسی ساعت باید از پروتکل i2c استفاده کنی که با دادن آدرس هر ریجیستر آیسی ساعت می تونی داده های آن را بخونی ,ویا با تابع (WRITE_I2C(address در آدرس مورد نظر بنویسی. حال برای درسترسی به آدرس ram بری تو دیتا شیت و آدرس 08H-3FH هستش که مجموع میشه 56 بایت هست.
                              تمام آدرس ها 8بیتی هستند
                              دیتاشیت رو نگاه کنی همع چی دستت میاد
                              شما حالا با هر زبانی دوست دارید احتیاج به 3 تابع دارید
                              کد:
                              INIT_I2C( )
                              کد:
                              WRITE_I2C(ADDRRESS)
                              کد:
                              U8 READ_I2C(ADDRRESS)
                              حالا با این سه تابع میتونی ساعت ثانیه و .....یا مقدار RAM را تغییر بدی و بخونی.
                              وچون SRAM هستش تا بینهایت بار میتونی بنویسی و بخونی.
                              و البته اگه باتری RTC رو در بیاری مقدار حافظه RAM مثل بقیه المانهای ساعت پاک میشه

                              به همین را حتی. :nice:
                              ممنون دوست عزیز: والا ظاهر این کد ها شاید راحت باشه ولی کاربردی نیستند !!! من خیلی جاها گشتم ولی نتونستم یک مثال عملی یا کاربردی ساده پیدا کنم!!
                              مثلا اگر بخام این متغیر ها در این حافظه ذخیره کنم باید به چه صورت بنویسم؟ اگر بلدید لطفا راهنمایی کنید!

                              [code=c]unsigned char en_hr=0,en_min=0,en_sec=0;[/code]
                              سپاس

                              دیدگاه


                                #30
                                پاسخ : از بین رفتن اطلاعات مدار با قطع برق

                                نوشته اصلی توسط ircaspianhero
                                ممنون دوست عزیز: والا ظاهر این کد ها شاید راحت باشه ولی کاربردی نیستند !!! من خیلی جاها گشتم ولی نتونستم یک مثال عملی یا کاربردی ساده پیدا کنم!!
                                مثلا اگر بخام این متغیر ها در این حافظه ذخیره کنم باید به چه صورت بنویسم؟ اگر بلدید لطفا راهنمایی کنید!

                                [code=c]unsigned char en_hr=0,en_min=0,en_sec=0;[/code]
                                سپاس
                                سلام این یک نمونه کد هستش اما تست نشده
                                کد:
                                # include
                                # include
                                #include "lcd.h"
                                
                                void init_i2c()
                                {
                                	TWSR = 0X00;
                                	TWBR = 0X2C;
                                	TWCR = (1<<TWEN);
                                }
                                
                                unsigned char read_i2c()
                                {
                                	TWCR = (1<<TWINT)|(1<<TWEN);
                                	while(!(TWCR & (1<<TWINT)));
                                	return TWDR;
                                }
                                
                                void write_i2c(unsigned char ch)
                                {
                                	TWDR = ch;
                                	TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA);
                                	while(!(TWCR&(1<<TWINT)));
                                }
                                
                                void start()
                                {
                                	TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
                                	while((TWCR &(1<<TWINT))==0);
                                }
                                
                                void stop()
                                {
                                	TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
                                	_delay_ms(1);
                                }
                                
                                void rtc_write(char dev_addr,char dev_loc,char dev_data)
                                {
                                	start();
                                	write_i2c(dev_addr);
                                	write_i2c(dev_loc);
                                	write_i2c(dev_data);
                                	stop();
                                }
                                
                                unsigned char rtc_read(char dev_addr,char dev_loc)
                                {
                                	char ch;
                                
                                	start();
                                
                                	write_i2c(dev_addr);
                                	write_i2c(dev_loc);
                                	
                                	start();
                                	write_i2c(dev_addr|0x01);
                                	ch = read_i2c();
                                
                                	stop();
                                	return ch;
                                }
                                
                                void disp_time_date()
                                {
                                	char ch;
                                	
                                	lcd_string("Time: ");
                                
                                	ch = rtc_read(0xd0 , 0x02);
                                	lcd_char(ch/16+48);
                                	lcd_char(ch%16+48);
                                	lcd_char('-');
                                	
                                
                                	ch = rtc_read(0xd0 , 0x01);
                                	lcd_char(ch/16+48);
                                	lcd_char(ch%16+48);
                                	lcd_char('-');
                                
                                	
                                	ch = rtc_read(0xd0 , 0x00);
                                	lcd_char(ch/16+48);
                                	lcd_char(ch%16+48);
                                
                                
                                	lcd_char(254);
                                	lcd_char(192);
                                
                                	lcd_string("Date: ");
                                
                                	ch = rtc_read(0xd0 , 0x04);
                                	lcd_char(ch/16+48);
                                	lcd_char(ch%16+48);
                                	lcd_char('-');
                                
                                	ch = rtc_read(0xd0 , 0x05);
                                	lcd_char(ch/16+48);
                                	lcd_char(ch%16+48);
                                	lcd_char('-');
                                
                                	ch = rtc_read(0xd0 , 0x06);
                                	lcd_char(ch/16+48);
                                	lcd_char(ch%16+48);
                                
                                
                                
                                }
                                
                                
                                
                                int main()
                                {
                                	DDRC =0XFF;
                                	DDRD =0XFF;
                                	init_i2c();
                                	lcd_init();
                                	lcd_string("ready");
                                	
                                	rtc_write(0xd0,0x00,0x00);
                                	rtc_write(0xd0,0x01,0x27);
                                	rtc_write(0xd0,0x02,0x08);
                                
                                	rtc_write(0xd0,0x04,0x08);
                                	rtc_write(0xd0,0x05,0x09);
                                	rtc_write(0xd0,0x06,0x13);
                                
                                	_delay_ms(1000); 
                                
                                	while(1)
                                	{
                                		disp_time_date();
                                	}
                                
                                }
                                راه اندازی enc28j60 و enc424j600 برای RL-TCPnet

                                راه اندازیks0108 با emwin

                                راه اندازی lcd7 اینچ با داریور داخلی stm32f429

                                دیدگاه

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