i2c ile harici eeproma tarih ve zaman yazdırma

Başlatan ihsan_kubat, 14 Eylül 2010, 09:58:51

ihsan_kubat

Slm
Arkadaşlar ds1302 den aldıgım tarihi ve saati
B Portundaki harhangi bir butona basınca
24c02 serial eeproma yazdırmak istiyorum.
Fakat bir türlü yapamadım.
Yardımınız için teşekkürler...

erhanzeynel

Bu kayıdı ne şekilde tutmak istiyorsunuz?

Harici eepromlara ürüne bağlı olmakla birlikte pekçok veri yazılabilinir. Siz en son basılan tarih ve saati mi kayıt edeceksiniz yoksa basılan tüm tarih ve saatler kayıt altında mı olacak?

ihsan_kubat

İlginiz için teşekkür ederim.

Aslında program şu şekilde:

PİC C ile ADC den bir veri alıyorum..
Bu verinin en büyügünü her günün sonunda seri eeproma kayıt ettirmek istiyorum...
sonra istedigim bir zamanda herhangi bir tuşa basarak sırayla lcd ye yazdırmak istiyorum..
Kayıt edecegim degerler..
gün,ay,yıl saat,dakika ve adc'den alınan float deger...
rtc ve 24c02  kullanıyorum...

ihsan_kubat

write_ext_eeprom(adres,gün); yapıyorum.
sora read_ext_eeprom(adres) yapıp
lcd ye yazdırınca cok farklı degerler ekrana geliyor...

subram

yazdığınız progaramı koyarsanız PİC C bilen arkadaşların yardımcı olabileceğini düşünüyorum...  size önerim programı parçalara ayırıp sonra bunları birleştirin.sorun sadece harici eepromda ise bir program yazın sadece eeproma veri yazıp okuyun. bunu yaptıktan sonra yazdığınız programı ana programa uyarlarsanız. bu şekilde biraz daha kolay olur sizin için!
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

ihsan_kubat

arkadaşlar ilginiz için teşekkürler.

decimal veriyi hexsadesimal veriye dönüştürp kaydettirmem gerekiyormuş
fakat hexadecimale cevirme işlemini yapamadım.

örneğin gün 10 iken hex 0x0a yapamadım yardımınız için teşekkürler..

omereliusuk

#6
hocam hexadecimal değil o okuduğun
8 bitlik veride birler ve onlar basamağı var
ilk dört bit birler basamağını ifade eder
ikinci dört bit ise onlar basamağını ifade eder

okunan veri =00000001=1(desimal karşılığı) 0000 (onlar basamağı) 0001 (birler basmağı)
okunan veri =00010000=10(desimal karşılığı) 0001 (onlar basamağı) 0000 (birler basmağı)
okunan veri =00020001=21(desimal karşılığı) 0002 (onlar basamağı) 0001 (birler basmağı)
gibi okuduğun değerler bunlar
sen bunları hex yapmaya çalışıyorsun
peki direkt böyle kaydetsen
sonra okuduklarını desimale çevirsen olmuyor mu?
bence böyle yapsan daha kolay olur bellekten de harcamazsın.

ihsan_kubat

unsigned int g,a,y,s,d;
byte saniye,dakika,saat,gun,ay,yil,haftanin_gunu,adres,data;

rtc_get_time(saat,dakika,saniye);
rtc_get_date(gun,ay,yil,haftanin_gunu);

a=ay;

init_ext_eeprom();
write_ext_eeprom(0x00,a);
delay_ms(10);
a=read_ext_eeprom(0x00);
delay_ms(10);
printf(lcd_putc,"\f%d",a);

ekrana hep farklı degerler cıkıyor...
bu örnekte  -1,15,15,63,31 gibi degerler okuyorum lcd den...

omereliusuk

#8
hocam baştan başla
önce proteusta güzelce lcd li saat devreni kur
saniye dakika ve saati güzelce bin8 olaraak alt alta yazdır
en son satıra da
hex olarak yazdır.
sonra görüşelim
yukarıda anlatmaya çalıştığım durumu anlayacaksın
sonrası kolay
hex A değerinin karşılığı decimal 10 dur
ama bunu ds1302
öyle vermiyor
A yerine
10(hex) veriyor bunun da decimal karşılığı 16(desimal) dır sen buraya biraz dikkat et gerisi gelecek

proteusta güzelce lcd li saat devreni kur

ihsan_kubat

ilginiz için teşekkür aderim sy omereliusuk,

LCD de hex olarakta yazdırıyorum fakat
seri eeproma write yapıp sonra
read edip lcd yazdırınca farklı rakamlar lcd de gözüküyor...

sanki gün , ay,yıl,saat ve dakikayı hex yapıp sonra write edmem gerekiyor gibi...
tarih ve zamanı  hex yapamıyorum...

 

omereliusuk

#10
1302 den aldığın verinin sıralaması yanlış hatırlamıyorsam
saniye ,dakika, saat, haftanın günü ,gün, ay, yıl

1302 den aldığın veriyi hiç bir çevirme yapmadan eproma gönder
ardından al
lcd ye de veri aktarırken hex olarak aktar
direkt çalışması gerekiyor
1302 den aldığın veri BCD

bir de mümkünse 1307 kullan i2c protokolu var 1 pin kara geçersin
aynı mantığı kullanıyor.

ihsan_kubat

omereliusuk hocam telefonla görüşebilir miyiz?

hala kayıt yapıp ekrana decimal olarak yazdıramıyorum...
Bütün bildiğim yöntemleri denedim.

omereliusuk

#12
hocam mailinize mesaj attım
hala diyorum decimal'e gerek yok ama
bu arada 256*8 eeprom
256 sayfa 8 byte oluşuyor
yani bir sayfaya zamanı
ikinci sayfaya almak istediğiniz float bilgisini byte byte yazmalısınız


ama bu durum da size ancak 128 günlük bir kayıt yapabilme imkanı sağlar inşallah bu yeterli olur
biraz sizi sıkıntıya düşürecek gibi

ihsan_kubat

hocam teşekkür ederim meilleriniz için

gönderdiginiz dosyaları açamadım
proteus 7.2 kullanıyorum.
yazilım dosyasını nodped te gönderir misiniz...

hafta sonu evde denedim yine olmadı..
35-40 günlük

gün,ay,yıl,saat,dakika,float deger

bilgilerini kaydettirmem gerekiyor...
saygılar iyi çalışmalar..

omereliusuk

Eğer sadece bnlarsa bu değer 2 katına çıkar
yazdırdığın şekilde geri alırsın olur biter