Şimdi Ara

PIC eeprom ulaşımı

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
55
Cevap
3
Favori
6.999
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 123
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • PIC in eepromuna bilgisayardan programlarken ulaşabilir miyiz? Örneğin bir sürü değişken atamamız gerekiyor ve Ram bölgesi yeterli kalmıyor.Bunları programlarken eeproma atabilir miyiz?

    Atamazsak söyle bir şey yapsak olur mu?

    Mesela bir program yazacağız program sadece değişkenleri eeproma yazdıracak yani setup dosyası gibi.Sonra PIC i tekrar programlayacağız ve kaydedilmiş değişkenleri kullanacağız.

    Teşekkürler



  • İlk soruna maalesef cevap veremiyorum fakat ikinci yöntem mümkün olduğunu düşünüyorum. Bir programcık yazılarak hafıza bölgelerine istediğiniz değerler atılarak daha sonra çağrılacak şekilde kullanılabilir. Lakin bu gecikmelere sebeb olacaktır. Eprom bölgesinden veri çekmek bir miktar gecikme yaratacaktır programda. İkinci sakınca ise eğer bu değişkenlerin değeri sıkça değişiyorsa ve değerin kaydedilmesi gerekiyorsa yazım işlemi de gecikmeye sebep olacaktır ayrıca eeprom ömrü kısalacaktır. Maalesef yaptığım aramda ortalama bir eeprom yazım süresine ulaşamadım. Voltaja ve sıcaklığa göre yazım süresinin entegreden entegreye değiştiğini öğrenebildim.

    Ekleme-1: Bir forumda okuduğuma göre ( ne kadar doğrudur emin değilim) :"EEPROM veri bellek E/W cycle zamanı 10ms aşabilmektedir." diyor. Daha önce yaptığım bir simülasyon uygulamasında da proteus sıkça değişen değerler için hata vermişti. O yüzden eproma yazım ve okuma işlemleri arasına bir miktar gecikme eklemek durumunda kalmıştım.

    Ekleme-2 : Yaptığım araştırmada daha programlama aşamasında eeproma direk veri yazılabildiğini gördüm. Sanırım kullanılan programlayıcıya göre değişmekle birlikte eproma direk değer atanabiliyor. Dolayısıyla ikinci yönteme gerek kalmıyor gibi.

    NOT: Benim de aklıma takıldı araştırmaya devam ediyorum.



    < Bu mesaj bu kişi tarafından değiştirildi muuzoo -- 19 Aralık 2007; 14:58:49 >




  • EEPROM'a veri yazabilir ve okuyabilirsiniz programlama esnasında.

    Unutmadan; EEPROM biraz yavaştır :)
  • Cevaplar için teşekkürler.PIC i programlarken veri yazabiliyorsak bunu nasıl yapacağız?
  • quote:

    Orjinalden alıntı: 90alper90

    Cevaplar için teşekkürler.PIC i programlarken veri yazabiliyorsak bunu nasıl yapacağız?


    Hangi dili kullannıyorsun?
    --------------------
    Eğer PBP kullanıyorsan EEPROM komutuyla sadece PIC'i progragramlarken yazarsın.(yani RAM filan kullanılmaz bilgisayrdan Direkt olarak eeproma yazarsın)
    Eğer program içerisinde aktif olarak değiştireceksen WRITE komutunu kullanabilirsin.
    --------------------
    PROTON+'ta yazıyorsan EDATA komutuyla yine PIC programlanırken bir kereliğine veri yazılır..(aynı şekilde Direkt olarak eeproma yazarsın)
    Program içerisinde aktif olarak değiştirmek için EWRITE komutu işini görecektir.
    -------------------
    Diğer diller hakkında bilgim yok.Ancak PBP veye Proton'da yazıyorsan daha ayrıntılı bilgi HELP bölümünde bulmak mümkün...

    Saygılar,,,



    < Bu mesaj bu kişi tarafından değiştirildi ElektroEmre -- 19 Aralık 2007; 23:37:47 >




  • Cevabınız için teşekkür ederim. ASM için bir bilginiz var mı acaba?
  • quote:

    Orjinalden alıntı: 90alper90

    Cevabınız için teşekkür ederim. ASM için bir bilginiz var mı acaba?


    Maalesef yok
    Bu arada Allah kolaylık versin ASM ile yazmak zor iş...
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • Teşekkürler

    ASM ile yazmak biraz külfetli ama PIC in içinde ne oluyor ne bitiyor onun hakkında bayağı bilgi sahibi oluyorsunuz.PIC e direkt hüküm edebildiğiniz bir dil
  • ORG 2100H

    DATA 0x06 ; Address 0
    DATA 0x02
    DATA 0x02
    DATA 0x04
    DATA 0x03

    veya
    ----------

    ORG 2100H
    DE 1, 2, 3, 4



    PIC16F84'te bu şekilde asm'nin içine yazıp derledikten sonra, işlemciye yazdığında buradaki bilgiler de direk EEPROM'a yazılır. 16F84 ü belirtmemin sebebi, şu en baştaki 2100 Hex adresi işlemciden işlemciye değişir. Yanlış hatırlamıyorsam 16f628 ve 16F877 de de aynı adresti. Kullandığın işlemcinin adresini değiştirip yukarıdaki gibi kullanabilirsin. Bu adresler datasheet'de yer almaz. Kesin emin olabilmek için "Programming Specification" dökümanına bakman gerekir.

    Şu adreslere de bakmanı tavsiye ederim.
    http://www.phanderson.com/PIC/PICC/eeprom.htm
    http://www.embeddedrelated.com/usenet/embedded/show/48782-1.php



    < Bu mesaj bu kişi tarafından değiştirildi zorbey77 -- 24 Aralık 2007; 10:02:53 >




  •  ORG 2100H 

    DATA 0x06 ; Address 0
    DATA 0x02
    DATA 0x02
    DATA 0x04
    DATA 0x03


    Kullanımında sırayla 0X06 0x02 ... datası 2100H tan sonraki adreslere kaydedilmeye mi başlıyor?
  • DATA işlemci tarafından ele alınanan bir komut değil, bir directive. Aynı INCLUDE, LIST veya __CONFIG gibi. Yani derleyici (assembler) tarafından işleniyor.

    Başka bir cümle ile, asm dosyanı hex'e çeviren derleyiciye, hex dosyasını nasıl şekillendireceğini bildiriyor. Dolayısıyla "kullanımda .... kaydetmeye başlıyor" demek yanlış olur. Bu şekilde PIC i programladığında o bilgilerde EEPROM'a programlanmış oluyor.



    < Bu mesaj bu kişi tarafından değiştirildi zorbey77 -- 24 Aralık 2007; 13:17:33 >
  • Evet, dediğinizi anladım.Mesela eepromun bir baytına 0x06 bilgisi bir sonraki byte a0x02 değeri mi kaydediliyor?
  • Aynen öyle arkadaşım. 0x06 eepromun sıfırıncı adresine, 0x02 eepromun birinci adresine gibi.

    istersen

    ORG 2106H deyip direk altıncı adresten de başlatabilirsin. Bu kısmı ASM dosyasının en sonunda END'den önce yapman gerektiğini de aklından çıkarma lütfen.



    < Bu mesaj bu kişi tarafından değiştirildi zorbey77 -- 25 Aralık 2007; 9:44:44 >
  • O zaman programın en sonuna yapmak mantıklı gözüküyor.Verdiğiniz bilgiler için teşekkür ederim.
  • Sabit sayi kullanmak istiyorsan neden program hafizasini kullanmiyorsun? Degisken olarak kullanmak istiyorsan neden once ilk degerleri bilgisayardan yazdirmaya calisiyorsun? Yani kafam karisti (cep telefonundan okuma yazma denemesi yapiyorum da zormus valla:) ayrinti atlamis olabilirim o zaman affola) ama farketmez cunku zaten daha iyi bir islemciye gecme zamanin coktan gelmis. Assembly tercih ediyorsan atmel atmega serisine gec siir gibi assembly yaz, 2,9$'lik bir islemci ile 1kB ram ve 10~20 mips islemci gucunun tadini cikar. (atmega88:) Ha bir de super bir GNU aracgerec ortami var benden soylemesi. Not: Turkce harfler gorunuyor mu? Çğşıİ
  • Konu ile alakalı değil ama eeprom'un ( 16f877 nin mesela) okuma yazma ömrü ne kadardır.
    Mesela saniyede yada 500 ms de bir okuma yazma gibi bir döngüde nasıl bir perfonmans verir.
    Bu anlamda böyle bir durumda harici eeprom çipi kullanmak mı daha mantıklı olur.
  • Yok şu an zaten böyle bir yöntem kullanmıyorum.Fakat meraktan sordum.Bilgisayardan müdahele edebiliyormuyuz diye.

    @Qklavye

    Ezberimde yok ama sanırsam 1.000.000 kadar olabiliyordu ama tamamen kafadan söylüyorum.Datasheetlerde yazıyor.
  • Qklavye arkadaşım,

    Yazma ömrü 1 milyonda olsa 10 milyonda olsa. Dediğin gibi 500 ms aralıkla yazılarak, RAM gibi kullanılması uygun değil.

    10 milyon okuma yazma ömrü olan ve 24 saat çalışan bir sistem 500 ms de bir okuma yazma yapsa

    10000000/(24*60*60*2) ~ 58 günde bozuluyor. Tabii sadece bu üstün körü bir hesaplama, çünkü eeprom 10 milyonda değilde 8 milyon küsürde de bozulabilir. Ayrıca bu bozulmayı bit bazında düşünmek lazım, yani 0xc7 yazıp sonra bir bakmışsın 0xc6 okuyorsun.

    Çözüm şudur, eepromu sadece enerji kesilip geri geldiğinde aynı değerde bulmak istenen değerleri saklamalıyız. Ayrıca değişim var ise saklamak.

    Şöyle bir method var. Eeprom'a saklanan bütün değerler programın en başında 2 kopya olarak RAM'e alınır, sonraki bütün değişimler bunlardan 1. kopya üzerinde yapılır. Sonra periyodik olarak (bir timer kesmesi olabilir) 1. ve 2. kopya karşılaştırılır eğer değişim varsa, sadece değişen bytelar, hem 2. kopyaya hem de eeproma yazılır.




  • quote:

    Orjinalden alıntı: zorbey77

    Şöyle bir method var. Eeprom'a saklanan bütün değerler programın en başında 2 kopya olarak RAM'e alınır, sonraki bütün değişimler bunlardan 1. kopya üzerinde yapılır. Sonra periyodik olarak (bir timer kesmesi olabilir) 1. ve 2. kopya karşılaştırılır eğer değişim varsa, sadece değişen bytelar, hem 2. kopyaya hem de eeproma yazılır.



    Düşündüğüm yöntemlerden biri de buydu.
  • Güzel paylaşımlar için teşekkürler dostlar.
    Eğer yanlış anlamadıysam olay şu; Program koşmaya başladığında eepromdaki X verisi X1 ve X2 olarak alınacak. X2 diyelimki bir döngüde kullanılacak ve istendiğinde X1 ile kıyaslanarak X yerine yazılacak.
    Ama şöyle bişi var,ya X2 kullanılırken pic'in enerjisi kesilir ve bu esnada diyelimki X2 olmuş X+10 ama kayıt edilemediği için yanlış veri X olarak kaldı.Çünkü yapmak istediğim olayda X verisi her zaman döngüsünde artıyor dolayısıyla X1 in X2 ile farklı olmama gibi bir olasılık yok.Ne olcak şimdi
    Ben mi yanlış anladım algoritmayı :)
    Bu arada 16f877 nin flash memory miktarı 8K word değilmi.Dolayısıyla bu pic'e atılabilecek maximum hex dosya büyüklüğü 8Kword * 2 = 16 K byte değilmidir. Yok şimdiden 9 kb lık hex dosyam olduda olmasasa 18f452 nin flashı daha büyükmüşte ona yöneleceğim.
  • 
Sayfa: 123
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.