Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: xoom - 08 Aralık 2013, 12:58:22

Başlık: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: xoom - 08 Aralık 2013, 12:58:22
Arkadaşlar eeprom konusunda ilk defa çalışma yapacağım internette araştırdım ama tam istediğim bilgiye erişemedim. sizden yardım bekliyorum.

Elimde 72 Byte'lık dizi var.
int Dizi2[72]={0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33
};

Bu diziyi 24LC64 eepromuna nasıl kaydedebilirim ve daha sonra eepromdan nasıl okuyabilirim.
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: xoom - 09 Aralık 2013, 18:15:24
Ups. Bugünkü araştırmalarımlada çözemedim.
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: Gökhan BEKEN - 09 Aralık 2013, 19:11:31
https://320volt.com/ccs-c-ornek-uygulama-kod-arsivi-c-ve-hex/ (https://320volt.com/ccs-c-ornek-uygulama-kod-arsivi-c-ve-hex/)
burda ccs c için eeprom uygulaması var
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: xoom - 09 Aralık 2013, 19:30:20
Kitabı var bende zaten belki cevabıda kitapta olabilir. ama ben anlamadım o yüzden temsili bir kod rica ediyorum.
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: olemiss - 09 Aralık 2013, 19:36:34
Alıntı yapılan: xoom - 09 Aralık 2013, 19:30:20
Kitabı var bende zaten belki cevabıda kitapta olabilir. ama ben anlamadım o yüzden temsili bir kod rica ediyorum.
https://320volt.com/wp-content/uploads/2008/10/ccs-c-dosyalarini-kullanarak-24c02-harici-eeprom-uygulamasi.c (https://320volt.com/wp-content/uploads/2008/10/ccs-c-dosyalarini-kullanarak-24c02-harici-eeprom-uygulamasi.c)
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: xoom - 09 Aralık 2013, 19:41:43
Yazdığınız programlar ve kitap bende var. ama kitaptaki bu bilgilerden anladığımla bahsettiğim diziyi eeproma halen daha nasıl kaydedip okuyacağımı anlamadım.
Lütfen bir diziyi eeproma kaydetmeye örnek verirseniz daha faydalı olacak..
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: olemiss - 09 Aralık 2013, 19:50:04
Alıntı yapılan: xoom - 09 Aralık 2013, 19:41:43
Yazdığınız programlar ve kitap bende var. ama kitaptaki bu bilgilerden anladığımla bahsettiğim diziyi eeproma halen daha nasıl kaydedip okuyacağımı anlamadım.
Lütfen bir diziyi eeproma kaydetmeye örnek verirseniz daha faydalı olacak..

Şu ana kadar herhangi bir datayı EEPROM'a başarılı bir şekilde yazdınız mı?  Evet ise o programı burada gösterebilir misiniz?
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: xoom - 09 Aralık 2013, 19:55:25
Alıntı YapArkadaşlar eeprom konusunda ilk defa çalışma yapacağım internette araştırdım ama tam istediğim bilgiye erişemedim. sizden yardım bekliyorum.
İlk mesajımda sorunuza cevap vermiştim.. Bugüne kadar eeproma ihtiyaç duymadım ama hep öğrenmek istemiştim. ve öğrenmek için çaba sarfedeceğim bir uğraş buldum. ve takıldım..
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: olemiss - 09 Aralık 2013, 20:01:41
Alıntı yapılan: xoom - 09 Aralık 2013, 19:55:25
İlk mesajımda sorunuza cevap vermiştim.. Bugüne kadar eeproma ihtiyaç duymadım ama hep öğrenmek istemiştim. ve öğrenmek için çaba sarfedeceğim bir uğraş buldum. ve takıldım..
Anlıyorum, fakat soruyu sormamın nedeni, ısrarla dizi yazdırmak istemeniz.  Yerinizde olsam önce tek byte yazdırarak basit bir şekilde başlarım.  Yazdırdığınız söz konusu byte'ı sağlıklı bir şekilde geri okuyabilirseniz, bir sonraki aşamaya geçebilirsiniz.

Ayrıca kullanacağınız yazılım ve donanım sistemi hakkında hiç bilgi vermiyorsunuz.  Aklınızı okuyacak sistem üzerinde çalışmalarımız halen devam ediyor ama henüz sonuçlanmadı!  ;)

Edit: 24LC64 yazmışsınız şimdi gördüm.  Hangi MCU, hangi derleyici, hangi kütüphane?

mesaj birleştirme:: 09 Aralık 2013, 20:04:07

... ayrıca hangi arayüz? I2C?

mesaj birleştirme:: 09 Aralık 2013, 20:07:06

Soru CCS klasöründe açılmış... puzzle parçaları yavaş yavaş biraraya geliyor!  :-[
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: xoom - 09 Aralık 2013, 20:18:42
Ben  tamamen yapmak istediğim şeyi burada yazmadım çünkü gerek görmedim. dediğim gibi eeproma veri yazıp okumak için birşeyler yapmak amacım.
madem sordunuz ne yapmak istediğimi 1-2 cümle ile söylemesem olmaz artık.
-Dotmatrixe "XOOM" kelimesini oluşturan Sütun bilgileri Yani yukaridaki gibi bir diziyi atmak ve MCU hafızasından yer açmak istiyorum..
Dotmatrixlere "XOOM" yazısını yazdırabiliyorum orda sıkıntım yok fakat XOOM'u oluşturan sutün bilgilerini Eepromdan çekmek istiyorum.
16f876'yı tercih ettim.(Herhangi bir sebebi yok)
I2C mi sorunuza gelince bilgim yok herhalde I2C olucak.
Gerekiyorsa İSİS şemamıda ekleyeyim.
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: olemiss - 09 Aralık 2013, 20:57:08
Şu linkde çalışan (ve ödül kazanmış!) bir program var: http://www.ccsinfo.com/forum/viewtopic.php?t=22587 (http://www.ccsinfo.com/forum/viewtopic.php?t=22587)

Programın comment'lerini Türkçe'ye çevirdim.
/* Harici EEPROM için I2C adresi. */

#define EEpromWrite      0b10100000
#define EEpromRead       0b10100001
#define ACK                     0
#define NoACK                 1

//------------------------------------
// EEPROM'dan oku.
//------------------------------------
int1 ReadExtMem(int16 Address, char *data, int16 length)
{
   int16 i, blockmask;
   BlockMask=0;
   if (address>0x7FFF)
      blockmask=0b00001000;
   disable_interrupts(global) // Interrupt'ları engelle.
   i2c_start();
   if (i2c_write(EEpromWrite | blockmask)||
       i2c_write(make8(Address, 1))||
       i2c_write(make8(Address, 0)))
   {
       enable_interrupts(global);
       return ERROR;
   }
   i2c_start(); // start'ı tekrarla.
   if (i2c_write(eePromRead | blockmask))
   {
       enable_interrupts(global);
       return ERROR;
   }
   for( i = 0; i < length-1 ; i++)
      *Data++ = i2c_read(ACK);  // En son byte hariç tüm verileri oku.
   *Data = i2c_read(NoACK);     // En son veri byte'ını oku (NoACK modu kullanarak).
   i2c_stop();
   enable_interrupts(global);
   return noError;
}

//------------------------------------
// EEPROM'a yaz.
//------------------------------------

int1 WriteExtMem(int16 Address, char *data, int16 length)
{
   int8 i, blockmask, waiting;
   BlockMask=0;
   if (address>0x7FFF)
      blockmask=0b00001000;
   if (length==0) return NoError;
   disable_interrupts(global);
   i2c_start();
   if (i2c_write(EEpromWrite | blockmask))
       return ERROR;
WriteStart:                                         //  GOTO kullanılmasını mazur gösteren bir durum!
   if (i2c_write(make8(Address, 1))||
       i2c_write(make8(Address, 0)))
   {
       enable_interrupts(global);
       return ERROR;
   }
   for (i=0; i<64 && length; i++, length--)          //  Her bir seferde maximum 64 byte yazılabilir.
   {
      if(i2c_Write(*Data++)==NoACK)
         {
            enable_interrupts(global);
            Return ERROR;
         }
   }
   i2c_stop();
   enable_interrupts(global)
   if (length)                                      // 64 byte yazdıktan sonra başka yazacak veri var mı?
   {
      Address=address+64;
      i2c_start();
      while (i2c_write(EEpromWrite | blockmask)==1)  //NoACK // yazma işleminin bitmesini bekle.
         i2c_start() ;
      disable_interrupts(global);
      goto WriteStart;
   }
   return noError;

}


Not: Çalışan bir LCD olması güzel, debugging için çok yararlı olur.
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: xoom - 09 Aralık 2013, 21:06:24
Hocam Sizce ben bu kodları anlayabilecek olsaydım bu soruyu burda sorarmıydım:)
Neyse Teşekkürler bir çözüm bulmaya çalışacağım.
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: olemiss - 09 Aralık 2013, 21:11:46
Alıntı yapılan: xoom - 09 Aralık 2013, 21:06:24
Sizce ben bu kodları anlayabilecek olsaydım bu soruyu burda sorarmıydım:)
Ben sizin bilgi seviyenizi bilmiyorum ki - önce dotmatrix'e yazı yazdırabiliyorum, sonra kodu anlamıyorum diyorsunuz.  Madem elinizde kitap var, önce kitaptaki adımlardan geçin.

Ayrıca kodun neresini anlamadınız, söyleyin anlatalım.
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: xoom - 10 Aralık 2013, 12:03:19
Kodun hiçbiryerini anlamadım..
-Arkadaşlar Elimde 
Kayit1[40]={0x00,0x01,0x02,0x03,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
şeklinde 60 tane dizim var.. ( bu dizilerde 40 sutunlu dotmatrixe yazdırılacak olan 60 farklı yazının sütun bilgileri var )}
Bukadar veriyi MCU'nun hafızasına sığdırmam sanırım imkansız.(yada ben bilmiyorum)
ben bu 60 adet 40Bytelik Dizilerdeki veriyi 1 kereye mahsus EEPROM'a yazmak istiyorum..
ve daha sonra istediğimde
Kayit1[40]={}; istediğimde Kayit2[40]={}; adlı 60 diziden hangisini istersem onu okumak istiyorum.
------
Eprom hakkında hiçbilgim yok.. bu konuda sadece yol göstermek için fikirlerinize veya kod örneklerine ihtiyacım var..
Yol göstermek için yapmam gerekenleri  veya Temsili bir örnek C veya CCS kodu ile yardımınızı bekliyorum.
---

Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: xoom - 10 Aralık 2013, 23:14:27
en azından bir yol haritası vermenizi istiyorum. ne yapmalıyım?
Başlık: Ynt: Harici Eeprom Yazma ardından Okuma Hakkında.
Gönderen: Gökhan BEKEN - 10 Aralık 2013, 23:28:51
Denemedim etmedim ezberden yazdım büyük ihtimal çalışacaktır.
#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor

#use i2c(master,sda=pin_c4, scl=pin_c3, slow=100000) // I2C Fonksiyonu,SDA ve SCL pinleri ve iletişim hızı belirleniyor

#include <input.c> // input.c dosyası programa ekleniyor
#include <2402.c>  // 2402.c dosyası programa ekleniyor

byte veri,adres; // byte tipinde değişken tanımlanıyor

int Dizi2[72]={0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33,
               0x33,0x33,0x33,0x3F,0x3F,0x33,0x33,0x33
};
int okunanlar[72];

/******************* ANA PROGRAM FONKSİYONU *************************/

void main ()
{
         int i=0;
         for(i=0;i<=72;i++)
         {           
               write_ext_eeprom(i,Dizi2[i]); // ilk parametredeki adrese, ikinci parametredeki dizideki değeri yaz   
         }

         for(i=0;i<=72;i++)
         {           
               okunanlar[i]=read_ext_eeprom(i) ; // okunanlar dizinin i. elemanına, eepromun i. adresindeki veriyi yaz   
         }
         while(1); //sonsuz döngü
}


Yalnız bu böyle gitmez, c öğrenin böyle basit işler için millete ağız eğmeyin.