M41T81 RTC İLE ALARMLI SAAT PROJESİ

Başlatan tolganor, 15 Aralık 2017, 13:32:37

tolganor

Sadece Pic basic kullanarak M41T81 RTC entegresini tarih okuma ve yazma aynı zamanda alarm okuma ve yazma işlemlerini nasıl yapabilirim?

M41T81 RTC entegresi ile DS1307 entegresi bacak bağlantıları aynı görünüyor. birbirinin yerine kurgulanabilir mi?

ETE hocam Pic Basic dilinde yazılmış ve DS1307 entegresi kullanılmış açık kodlu hazır bir proje var mı?

Bu tür RTC entegreleri neden Khz frekansında çalışıyor? Veri almak yada yazmak için Khz frekansın damı haberleşiyorlar?

ETE Hocam ve forumdaki arkadaşlar , şimdiden teşekkür ederim.

ete

#1
Öncelikle bu entegreyi tanımıyorum. İlk defa duydum adını. Bilgilerine baktım I2C haberleşiyor. Ama registerler farklı. Device adresi farklı değil ikisinde de $D0. Sonuçta DS1307 ile aynı program parçasını kullanamazsınız. Ama kolaylıkla adapte edebilirsiniz.
DS1307 ile yapılmış proje var elbette. Matrix ve digital saat projeleri DS1307 ile çalışıyor.
Okuma ve yazma işlemlerini nasıl yapabilirim diye sormuşsun. Bu soruya nasıl cevap vereceğime karar veremedim. Okuma yazma işlemini nasıl yapacağın data sheet de yazıyor. Bu işi biliyorsan oradan öğrenip yaparsın. Onu yapamıyorsan sana anlatmam için bir kaç sayfa yazı yazmam lazım. İşe kestirmeden gidersek data sheet 13. cü sayfada "Clock Register Map" diye bir tablo var. İşin tamamen bu tabloya göre yapılacak. DS1307 ile ilgili olan okuma yazma program parçalarını incele.
Data sheet deki tablo da farklı olan sıfır nolu adreste yer alan salise registeri. Sana lazım değil bu sen 1 nolu adresten itibaren okuyacaksın. DS1307 de ki sıfır nolu adreste yer alan saniye registeri bunda 1 nolu adreste yer almakta. Register yerleşimleri aynı. 0-3 nolu bitler birler hanesini , 4-7 nolu bitler ise onlar hanesini veriyor. Bu özellik DS1307 de de aynı.
Sonuçta DS1307 kodlarına bakarak buna uyarlayacaksın.

Osilatör frekansına gelince. Gerekli hassasiyeti sağlamak amacı ile frekans mümkün olduğunca yüksek tutulup bölünerek istenilen 1 hz lik saat palsi elde edilir. Temel prensip budur. Frekans ne kadar yüksek olursa hassasiyet o kadar artar.
Ama sanırım optimum noktayı 32768 de bulmuşlar.

Ete


tolganor

ETE Hocam bu cevap çok yararlı oldu. Birinin araştırmadan soru sorması doğru değil. Tabiki sizde bunu hemen anlıyorsunuz. Halen yazılarınızı okuyorum.

Konuyla ilgili değil ama sormak istiyorum. PIC entegresi nereye gidiyor. Arduino yayılmakta. Ben bu kartı programlamayı bilmiyorum. Öğrenmek çok cazip gelmiyor. Çünkü kartı standart . Kendime özgü kart yapma özgürlüğümü elimden alıyor. Bu konudaki fikriniz nedir?

ete

İsteyen istediği sistemi seçer. Sürekli bir karta bağımlı çalışmak isterseniz Arduino ile çalışabilirsiniz. Ama özgür tasarımlar yapmak için pic yada Atmel üzerinde bağımsız çalışmak gerekir.
Gerçi Arduino da bir Atmel işlemci barındırıyor. Denemeyi orada yapıp  kendi kartınıza aktarabilirsiniz ama uzun iş galiba.
Ete

tolganor

#4
ETE Hocam günaydın . DS1302 saat entegresini Pic 16F628 ile kurmak istiyorum. Elimde yine forumdan bulduğum hazır kodlar var.


@ DEVICE pic16F628A 'işlemci 16F628
@ DEVICE pic16F628A, WDT_on 'Watch Dog timer kapalı
@ DEVICE pic16F628A, PWRT_ON 'Power on timer açık
@ DEVICE pic16F628A, PROTECT_ON 'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_off 'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, XT_OSC   'harici osilatör kullanılacak
@ DEVICE pic16F628A, LVP_OFF
@ DEVICE pic16F628A, BOD_OFF

'-------------------------------------------------------------------------------

DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?

DEFINE LCD_EREG PORTA 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 2 'LCD Enable Bacağı Hangi bite bağlı ?

DEFINE LCD_RSREG PORTA 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 3 'LCD RS bacağı Hangi Bite bağlı  ?

DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor

DEFINE LCD_COMMANDUS 1000
DEFINE LCD_DATAUS 225



'-------------------------------------------------------------------------------

CMCON=7           '16F628 de komparatör pinleri iptal hepsi giri? çyky?
OPTION_REG.7=1    'Dahili pull-up lar pasif yapyldy
'-------------------------------------------------------------------------------
OPTION_REG=%10000101 'Pull up dirençleri  PTAL- Bölme oranı 1/64.

'-------------------------------------------------------------------------------
TRISA=%00000000
TRISB=%00000000
PORTA=0
PORTB=0



'-----------------------------B A S L A N G I Ç ---------------------------

CLEAR
PAUSE 2000
PORTB=0 'tüm çıkıslar low seviyesinde
'-------------------------------------------------------------------------------
'*****RTC DS1302  TANIMLAMALARI*****

RESET VAR PORTA.0
SCLK VAR PORTA.1
IO VAR PORTA.2

'*****RTC DS1302 DEĞİŞKENLERİ*****
GUN     VAR BYTE
AY      VAR BYTE
YIL     VAR BYTE
TARIH   VAR BYTE
SAAT    VAR BYTE
DAKIKA  VAR BYTE
SANIYE  VAR BYTE
KONTROL VAR BYTE

BASLA:
'RESET VE CLOCK PİNLERİ SIFIRLADIK
LOW RESET
LOW SCLK
gun=$11
ay=$03
YIL=$07
TARIH=$23
SAAT=$23
DAKIKA=$59
SANIYE=$55
GOSUB SETTIME
GOTO ANA_DONGU

ANA_DONGU:
GOSUB GETTIME
LCDOUT $FE,1,"SAAT  "
LCDOUT HEX2 SAAT,":",HEX2 DAKIKA,":",HEX2 SANIYE
LCDOUT $FE,$C0,"TARIH "
LCDOUT HEX2 GUN,"/",HEX2 AY,"/",HEX2 YIL
PAUSE 250
GOTO ANA_DONGU

SETTIME:
RESET=1         'OKUMA İŞLEMİNİ BAŞLAT
SHIFTOUT IO,SCLK,LSBPRE,[$8e,0]
RESET=0         'RESETİ SIFIRLA
RESET=1
SHIFTOUT IO,SCLK,LSBFIRST,[$BE,SANIYE,DAKIKA,SAAT,TARIH,AY,GUN,YIL,0]
RESET=0         'RESETİ SIFIRLA
RETURN

GETTIME:
RESET=1
SHIFTOUT IO,SCLK,LSBFIRST,[$BF]
SHIFTIN IO,SCLK,LSBPRE,[SANIYE,DAKIKA,SAAT,TARIH,AY,GUN,YIL,KONTROL]
RESET=0
RETURN
END


SHIFTOUT Komutları sürekli hata veriyor. HATA: error line 102:bad expression.(RTC SAAT.pbp)

Bu hatayı düzenleyici üzerinde araştırdığımda LSBFIRST mod ile ilgili kelimenin hata verdiğini anladım.
Neden hata veriyor olabilir ? LSBFIRST Kelimesi yerine mod ayarı olarak ne kullanmalıyım ?

Şimdiden teşekkür ederim.

ete

Programın başına ;
INCLUDE "modedefs.bas"
satırını ilave edersen hata vermez. Ama aşağıdaki tabloya göre de düzenleyebilirsin.
Mode.......ModNo...... Açıklama
----------- -------      ---------------------------------------------------
LSBFIRST ,   0 ,         Shift data out lowest bit first. Clock idles low.
MSBFIRST ,  1 ,         Shift data out highest bit first. Clock idles low.
                   4 ,         Shift data out lowest bit first. Clock idles high. 
                   5 ,         Shift data out highest bit first. Clock idles high.

Ete



tolganor

ETE Hocam cevabınız için çok teşekkür ederim. Biz bilmeyenler hakkınızı nasıl ödeyeceğiz bilemiyorum.

tolganor

DS1302 RTC saat entegresi TARİH: 00/00/00   SAAT:00:00:00 olması problemi

Bu RTC entegresinin okunmadığı anlamına geliyor.

Olasılıklar:

1-  Okumadan önce CE (RST) ucunu Low (0) yap veya yazmaya geçeceğin vakit CE (RST) ucunu High (1) yap. Sonra okuma veya yazma işlemi bittikten sonra tekrar Low yapıldığına dikkat edilmeli.

2-  DS1302 ye saat ayarı vermezseniz çalışmaz. Çünki Saniye registeri 7. biti fabrikasından 1 olarak ayarlanıp çıkar. Bu saati durdurma bitidir. Bu bit sıfır oluncaya kadar saat çalışmaz. O da ancak ayar verilirse sıfırlanır.
Control registeri 7. biti ise write protect olarak çalışır. 1 olduğu müddetçe saat ayarı yapabilirsiniz. sıfır olursa bilgi yazamazsınız.

3-  OPTION_REG.7=0 'dahili Pull up dirençleri aktif edildi ayrıca pullup direncine gerek yok.
Pull up dirençlerini aktif etmeyi unutmayın.

IO=DATA

4-CLK , DATA , RESET uçlarının doğru bağlandığına dikkat edin.

Bu bilgileri netten edindim.


tolganor

ETE hocam iyi akşamlar. Çalıştırmış olduğum yukarıdaki kodlarda yazan bazı bölümlerin anlamlarını çözmek istiyorum.
SETTIME Bölümünde
SHIFTOUT IO,SCLK,LSBPRE,[$8e,0] 

'Örneğin bu bölüm ne iş yapıyor $8e,0 bu değer ne anlama geliyor. Bunu bir türlü çözemedim. Yardım edebilir misiniz?

Ve GETTIME Bölümünde

SHIFTOUT IO,SCLK,LSBFIRST,[$BF]

$BF ne iş yapıyor.

Cevabınız için teşekkür ederim

tolganor

Erol Tahir hocam araştırma yapıyorum. Bulamıyorum. Yardımlarınızı bekliyorum. Bunlar sabit değerler mi.

ete

Data sheet de yazan bilgileri burada araştırıyorum bulamıyorum diye belirtmen hiç de hoş değil.
DS1302 bir RTC dir yani gerçek zaman saat entegresi. Böyle bir entegre kendi osilatirü ile zamanı tutar. Sende bu tutulan zamanı komutlar vererek okursun. Bu entegre bir torba değilki içne dal ve istediğini oradan al. Elbette mantıklı düşünürsen önce bir komut vereceksin bu senin RTC içinde ne yapacağını RTC ye söyleyecek sonrada o komut peşine eklediğin işlem ile istediğine kavuşacaksın.
Burada bahsini ettiğin sayılar birer komut, Komutlar sabit sayılardan oluşur. Adama ver şurdan saniye bilgisini diyemeyeceğine göre bir rakam yollayıp istediğini belirtmen gerekiyor.
Data sheet de bunların neler olduğu yazılmış;
https://datasheets.maximintegrated.com/en/ds/DS1302.pdf
linkinde yer alan data sheet'i açarsan,
Table 3. Register Address/Definition tablosunda komutlar ve bu komutların neye karşılık geldiğini görebilirsin.
Mesela $8E bilgisine bakarsan Control Registerine bilgi yazma komutu olduğunu görürsün. Bu register yalnızca WP yani yazma korumasını aktive eder. Bu registere 0 yazarsan koruma kaldırılmış olur. Kaldırmaz san saati ayarlayamazsın bir şey yazamayacağın için. O komutla yazma koruması kaldırılmış.
Diğerine bakalım, $BF kullanılmış Tabloya bakarsan Bu komutun CLK Burst modunu aktif ettiğini görürsün. Bu RTC de iki modlu bir çalışma söz konusu. Ya bağımsız ve peş peşe zaman registerlerine ulaşacaksın (CLK BURST) yada  RAM_BURST moduna geçip 31 adet RAM lokasyonunu ardışık olarak okuyacaksın. Sana alzım olan CLK BURST modu olduğu için $BF komutu verilerek bu moda geçilmiş.
Register tablosuna bakarsan,
- $80-$81 =Saniye registeri
- $82-$83= Dakika registeri
....
Şeklinde hangi komutun hangi adrese komuta ettiğini göstermiş. İstersen direk $BF yi verip sıfır nolu adresten itibaren sırası ile bütün zaman registerlerini okursun istersen adres verip istediğin bir registeri okuyabilirsin.
Ete


tolganor

Erol Tahir hocam çok güzel açıklamışsınız. Göz bakıyor ama görmüyor görsede bilgi eksikliğinden ve Araştırma yapma tembelliğinden sonuca ulaşamıyor. Ellerinize sağlık.

tolganor

Erol Tahir Hocam Merhaba. Yine yardımınıza ihtiyacım var. 16F877 ve DS1307 RTC kullanarak hazır kodlardan şu anda saat ve tarih okuyabiliyorum.  DS1307 RTC entegresinin SQW çıkışını RS1-RS0 bitleri ile  0       0   yaparak  frekansı 1 Hz olarak ayarladım ve LED bağladım çıkış alabiliyorum.

DS1307 RTC entegresinin yine SQW çıkışından kristal frekansını okumak ve LCD ekranında görmek istiyorum. Yine RS1-RS0 bitlerini 1 1 yapacağım . Bunu kurgulamam gereken RB0/INT KESMESİ ise her saniyede 32768 Hz frekansı nasıl okutacağım ?

Her saniyede frekansı sayan değişkeni nasıl sıfırlatabilip çıkış frekansını tespit edebilirim?

16F877 ve DS1307 RTC için komutlar ne olmalıdır ? Yardımcı olabilir misiniz?

ete

Frekans okumanın temeli 1 sn içinde gelen palslerin adedini saydırmaktan geçer.
Bunun için 1 sn zaman tutup frekans çıkışını PORTB.0 kesmesine yada harici kaynaktan beslemeli TMR1 kesmesine bağlaman gerekir. Bunun için bir word değişkeni tanımlayacaksın. Değişkeni sıfırlayıp kesmeyi aktif edeceksin.
1 sn lik zaman tutacaksın (yada 500 ms zaman tutup sayılan değeri 2 ile çarpacaksın) yada 100 ms zaman tutup gelen pals adedini 10 ile çarpacaksın yollar bunlar. İşlem sırasını bir kez daha söylüyorum.
- değişkeni sıfırla
- zamanı tutmaya başla
- süre sonunda okunan değeri değişkenine aktar.
Elbette bu işlemi peryodik olarak yapmak zorundasın.
SQW çıkışını 32768'e ayarlaman gerektiğini unutma. 1Hz ye ayarladım diyorsun o zaman 1 hz ölçersin.
Bana göre çok anlamsız bir iş ve bu işi yapayım derken asli görevleri aksatabilirsin. Tabiiki sen bilirsin.

RTC yi okuyabildiğine göre daha ne komutu soruyorsun bunu anlamadım. Açıklarsan yardımcı olurum.
Ete

tolganor

Erol Tahir hocam. Sizi hiç görmedim ama size çok şey borçluyum,  borçluyuz. RTC okuyabiliyorum sayenizde. Sayenizde PIC BASİC ile ses kontrollü kart bile yaptım. Youtube deki videolar bana ait. Bütün bunlara rağmen sizin verdiğiniz bilgiler olmasa hiç bir şey yapamam. Birinin kapıyı göstermesi tarif etmesi gerek. Aynı anda iki kesmeyi birden çalıştırabileceğimizi yazmışsınız. Bunu deneyeceğim. İstiyorum ki üstte saat ve tarih bilgisi olsun altta ise RTC Kristal frekansı yazsın. Umarım başarılı olurum. Cevabınız için de çok teşekkür ederim.

Powered by EzPortal