اطلاعیه

Collapse
No announcement yet.

ارسال رشته توسط i2c برای EEProm

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

    ارسال رشته توسط i2c برای EEProm

    سلام ،

    من یک EEProm خارجی به شماره 24C64 رو به میکرو Mega8 وصل کردم و توسط کد زیر مقدار متغییر Y رو روش ذخیره کردم و بعد دوباره خوندم و تو X ریختم و درست کار میکنه ، حالا میخوام یک رشته چندین کارکتری رو روی EEProm ذخیره کنم ولی نمیدونم چه طوری توسط i2c رشته رو به EEProm ارسال کنم ، آیا باید کد اسکی هر کارکتر رشته رو بفرستم یا راه سریعتری هم هست ؟

    کد:
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    $swstack = 10
    $framesize = 40
    
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Configurations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Config Serialin = Buffered , Size = 20
    Config Serialout = Buffered , Size = 20
    
    Config Scl = Portc.5
    Config Sda = Portc.4
    
    Enable Interrupts
    
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Variable ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Dim Y As Byte : Y = 7
    Dim X As Byte : X = 0
    Dim Count As Byte : Count = 0
    
    Dim Addresshigh As Byte
    Dim Addresslow As Byte
    
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ initionaliz ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    I2cinit
    
    Addresshigh = High(&H0000)
    Addresslow = Low(&H0000)
    
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Main program ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Do
     ' Write Y to EEprom
     I2cstart
     I2cwbyte 160
     I2cwbyte Addresshigh                    'Highaddress of EEPROM
     I2cwbyte Addresslow                    'Lowaddress of EEPROM
     I2cwbyte Y
     I2cstop
     ' delay
     Waitms 10
     ' Read from EEprom & store to X
     I2cstart                          'generate start
     I2cwbyte 160                        'slave adsress (write!)
     I2cwbyte Addresshigh                    'Highaddress of EEPROM
     I2cwbyte Addresslow                    'Lowaddress of EEPROM
     I2cstart                          'repeated start
     I2cwbyte 161                        'slave address (read)
     I2crbyte x , Nack
     I2cstop                          'generate stop
    
     Incr Count
     ' print data on LCD
     Cls
     Locate 1 , 1
     Lcd "Y is : " ; Y
     Locate 2 , 1
     Lcd "X is : " ; X
     Locate 3 , 1
     Lcd "This is the " ; Count ; " Loop"
     Waitms 
    Loop
    
    End
    لطفا کد رو برای ارسال رشته اصلاح کنید ؛ ممنون .

    #2
    پاسخ : ارسال رشته توسط i2c برای EEProm



    آقای تاجیک باسلام وخیر مقدم.لطفا اگر اشتباهی دکمه "موضوع بنتیجه رسیده است "رو زدید ،با زدن دوباره دکمه "موضوع بنتیجه نرسیده است" اصلاح بفرمائید.ضمنا اگه میشه فایل پرتئوسش رو هم بزارید.متشکرم
    آدرس پلود سنتر سایت:http://www.ecapic.ir/index.php?eror=5
    وقتی همه نیروهای جسمی و ذهنی متمرکز شوند توانایی فرد برای حل مشکلات به طور حیرت انگیزی چند برابر می شود .
    نرمن وینسنت پیل

    دیدگاه


      #3
      پاسخ : ارسال رشته توسط i2c برای EEProm

      نوشته اصلی توسط javad1354

      آقای تاجیک باسلام وخیر مقدم.لطفا اگر اشتباهی دکمه "موضوع بنتیجه رسیده است "رو زدید ،با زدن دوباره دکمه "موضوع بنتیجه نرسیده است" اصلاح بفرمائید.ضمنا اگه میشه فایل پرتئوسش رو هم بزارید.متشکرم
      آدرس پلود سنتر سایت:http://www.ecapic.ir/index.php?eror=5
      سلام ،

      نه اشتباهی نزدم ، با کمی ور رفتن و خوندن Help خود Bascom و چند تا پست تو Avr Freaks خودم برنامه رو اصلاح کردم به طوری که کد اسکی هر کارکتر رو تو یکی از خونه های EEProm میریزه و ازشون میخونه .

      اگر بهش نیازی دارید قرار بدم .

      دیدگاه


        #4
        پاسخ : ارسال رشته توسط i2c برای EEProm

        دوست عزیز آقای تاجیک ممنون میشم اگه لطف کنید و کدشو قرار بدید .اگه شماتیکشو هم دارید لطفا بزارید .ضمنا من میخوام این ارتباطو با 24C16 بر قرار کنم .بنظر شما تفاوتی در کد نویسیش داره یا نه ؟
        وقتی همه نیروهای جسمی و ذهنی متمرکز شوند توانایی فرد برای حل مشکلات به طور حیرت انگیزی چند برابر می شود .
        نرمن وینسنت پیل

        دیدگاه


          #5
          پاسخ : ارسال رشته توسط i2c برای EEProm

          سلام ،

          این شماتیک :


          و این هم کد :

          کد:
          $regfile = "m8def.dat"
          $crystal = 1000000
          
          $swstack = 10
          $framesize = 40
          
          '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Configurations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          
          Config Serialin = Buffered , Size = 20
          Config Serialout = Buffered , Size = 20
          
          Config Scl = Portc.5
          Config Sda = Portc.4
          
          Enable Interrupts
          
          '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Variable ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          
          Dim Addresshigh As Byte                   ' High address of 16bit
          Dim Addresslow As Byte                   ' Low address Of 16 Bit
          Dim Address As Word                     ' 16 bit address
          
          Dim Str_a As String * 20 : Str_a = "12345678901234567890"
          Dim Str_b As String * 20 : Str_b = ""
          Dim Temp_str As String * 1
          Dim Asc_code As Byte
          
          Dim I As Byte
          
          '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ initionaliz ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          
          I2cinit
          
          '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Main program ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          Do
           ' Write Str_A to EEprom
           For I = 0 To 20
            ' Address
            Address = I
            Addresshigh = High(address)
            Addresslow = Low(address)
            ' Mid string
            Temp_str = Mid(str_a , I , 1)
            Asc_code = Asc(temp_str)
            ' Write
            I2cstart
            I2cwbyte 160                       ' Like to write
            I2cwbyte Addresshigh                   ' Highaddress of EEPROM
            I2cwbyte Addresslow                   ' Lowaddress of EEPROM
            I2cwbyte Asc_code
            I2cstop
            Waitms 5
           Next I
          
           ' Read from EEprom & store to Str_B
           For I = 0 To 20
            ' Address
            Address = I
            Addresshigh = High(address)
            Addresslow = Low(address)
          
            I2cstart                         ' generate start
            I2cwbyte 160                       ' Like to read
            I2cwbyte Addresshigh                   ' Highaddress of EEPROM
            I2cwbyte Addresslow                   ' Lowaddress of EEPROM
            I2cstop
            I2cstart                         ' repeated start
            I2cwbyte 161                       ' slave address (read)
            I2crbyte Asc_code , Nack
            I2cstop                         ' generate stop
          
            Str_b = Str_b + Chr(asc_code)
           Next I
          
           Cls
           Locate 1 , 1
           Lcd Str_a
           Locate 2 , 1
           Lcd Str_b
           Waitms 2000
          Loop
          
          End
          من Mega8 رو به یک LCD کارکتری 20*4 وصل کردم و تست کردم .
          در مورد اتصال 24C16 هم تفاوتی نداره مگر در آدرس دهی برای نوشتن و خوندن که باید ببینی دیتا شیت چی گفته ، با همون 160 و 161 که تو کد هست تست کن ، در مورد کد هم سوالی داشتی همین جا بپرس .

          موفق باشید .

          دیدگاه


            #6
            پاسخ : ارسال رشته توسط i2c برای EEProm

            تشکر میکنم آقا مجتبی .میشه بفرمائید این 2 خط دستور برای چیه؟
            $swstack = 10
            $framesize = 40
            البته اینجا کد ها بهم میریزه و $ جای خودش قرار نگرفته.مشکل اینه که من وقتی میخوام کد رو کمپایل کنم به این دوخط گیر میده و خطا میگیره .ورژن بسکامم هم 1.11.7.4 هستش .میدونید علتش چیه؟
            وقتی همه نیروهای جسمی و ذهنی متمرکز شوند توانایی فرد برای حل مشکلات به طور حیرت انگیزی چند برابر می شود .
            نرمن وینسنت پیل

            دیدگاه


              #7
              پاسخ : ارسال رشته توسط i2c برای EEProm

              نوشته اصلی توسط javad1354
              تشکر میکنم آقا مجتبی .میشه بفرمائید این 2 خط دستور برای چیه؟
              $swstack = 10
              $framesize = 40
              البته اینجا کد ها بهم میریزه و $ جای خودش قرار نگرفته.مشکل اینه که من وقتی میخوام کد رو کمپایل کنم به این دوخط گیر میده و خطا میگیره .ورژن بسکامم هم 1.11.7.4 هستش .میدونید علتش چیه؟
              تو راهنمای Bascom کامل توضیح داده ، برای تغییر مقدار سایز پی فرض Stack ، البته اون کد رو من بسته به نیازم نوشتم ، شما میتونی حذفش کنی .

              دیدگاه

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