Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

eeprom kayıt proplemi

Başlatan turksan, 08 Şubat 2016, 15:31:11

turksan

selam arkadaşlar yardım edermisiniz

proplemim şu 4 digit 7 segmentli bir 0-9999 ileri sayıcı
epromu okuyup kaydedebiliyorum
ama eprom  displayde  örnek veriyorum 300 iken sadece 255 e kadar kaydediyor ve sadece okuduğunda 45 rakamını görebiliyorum sayıcı eproma sadece her 255 de bir kayıt yapıyor sonra başa dönüp o dan itibaren eski kaydı yineliyor.

number = EEPROM_Read(0x00) ;//                     //EPROM read; //

     do{

      if(Button(&PORTB,7,1,0)){                  //EPROM write
                              Delay_ms(50);
                              digit++ ;
                              number = number +1;
                              PORTB = number;
                              EEPROM_Write(0x00, number);
                             }

ferit06

#1
Şu kısmına cevap vereyi;
"ama eprom  displayde  örnek veriyorum 300 iken sadece 255 e kadar kaydediyor ve sadece okuduğunda 45 rakamını görebiliyorum" 8 bitlik bir hücreye 255 e kadar yazabilirsin. 300 yazmak için 9. bite ihtiyacın var, 9. bit olamdığı için 300-255=45 görüyorsun. Number değişkenin de 8 bit olduğu için 255 e kadar yazabiliyorsun. Fazlasını yazmak için 16 bitlik değişken kulllan. 

tekosis

ferit06 ya ilaveten,
number sayısını 16 bit olarak tanımla.
eeproma yazdıracağın zaman 16 bitlik bu sayıyı 8+8 iki baytlık kısımlara ayır.
sonra iki adet eeprom adresine bu sayıları kaydet.

eepromdan okuyacağın zamanda bu işlemleri tersten yap
iki adet 8 bitlik sayıyı bir tane 16 bitlik sayı olarak birleştir, işlemlerini bu sayı üzerinden yap.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

turksan

Arkadaşlar teşekkür ederim.
picbasicde bu proplemi çok çabuk çözüyorum ama oradada arada ABCD encoder kullanıyorum microc c de oldukca yeniyim. bu konuda bir örnek verebilirmisiniz.

turksan

teşekkür ederim proplemi micro c de çözdüm

OzkanAtas

255 ten fazla yazdırmayı nasıl yaptınız? rica etsem paylaşabilir misiniz?

volkanunal

Alıntı yapılan: OzkanAtas - 13 Aralık 2020, 23:54:52255 ten fazla yazdırmayı nasıl yaptınız? rica etsem paylaşabilir misiniz?

Bu şekilde yapabilirsiniz hocam,
https://www.youtube.com/watch?v=Pi9X6CNtQbE

kantirici


OzkanAtas

Alıntı yapılan: volkanunal - 14 Aralık 2020, 09:54:27Bu şekilde yapabilirsiniz hocam,
https://www.youtube.com/watch?v=Pi9X6CNtQbE

Hocam teşekkür ederim bilgi verdiğiniz için; ama benim bilgisizliğime sayın lütfen, bunu mikroc ye dönüşümünü yapamadım. mikroc için yardımcı olabilir misiniz rica etsem?

OzkanAtas

Alıntı yapılan: kantirici - 14 Aralık 2020, 10:47:49Merhaba,
Burada anlatılan yöntem işinizi görecektir.

https://ozcanfatih.wordpress.com/2016/02/01/c-dilinde-union-yapisi-ve/

Hocam size de teşekkür ederim, fakat yine diğer arkadaşımıza dediğim şeyleri diyeceğim, lütfen kusura bakmayın tamamen benim eksik bilgimden kaynaklı. Mikroc ye aktaramadım bu yapıyı. rica etsem mikroc için yardımcı olabilir misiniz?

bir butona basınca sayacı arttırıyorum. bu sayacı lcd ekrana yazdırıyorum

volkanunal

Alıntı yapılan: OzkanAtas - 14 Aralık 2020, 16:53:07Hocam teşekkür ederim bilgi verdiğiniz için; ama benim bilgisizliğime sayın lütfen, bunu mikroc ye dönüşümünü yapamadım. mikroc için yardımcı olabilir misiniz rica etsem?

Merhabalar hocam union bir C keywordü olduğu için genel bir tabir. Platform ile akalı değil yani. orada platform bağlı olan yapı EEPROM.write olan kısım onu zaten kendinizde hangi apiye karşılık geliyorsa yapı.

volkanunal

İnternetten mikro c için kod örneği buldum hocam, veriyi 8bit 8bit parçalayarak kullanmışlar, sayıcı değişkeninizi 16bit olarak tanımlamayı unutmayın. Örnekte X değişkeni sizin sayıcı değişkeniniz.

dim temp as byte               ' will be used to store the lower and higher 8-bits of x
temp = lo(x)                   ' get the lower byte of X
EEPROM_Write(address, temp)
Delay_ms(20)                   ' delay between successive use of routines Eeprom_Write
temp = hi(X)                   ' get the higher byte of X
EEPROM_Write(address+1, temp)  ' store it in the next location of "address"
Delay_ms(20)                   ' delay between successive use of routines Eeprom_Write

xtemp = Eeprom_Read(1) * 256 + Eeprom_Read(0)

Adresten okuyup tekrar 16bitlik sayı haline getirdim. Bu şekilde kullanablirsiniz. 0. ve 1. adreslerini kullandığınızı düşünüyorum.

EEPROM_Write(address, temp)

address değişkeninin başlangıç değerini 0 olarak ayarlamayı unutmayın. Doğru adrese okuma yazmak yapmak için.