M

Saat tarih lcd devresi

Başlatan M26, 30 Mayıs 2013, 14:26:49

M26

arkadaşla rben şu saat ve rtc kullanımını tam kavrayamadım nasıl bir kodu olmalı bu seri iletişimde ne çıkacak ne girecek ? ben basit olarak bu devrede deneme yapıyorum




ETE  hocanın paylaştığı rtc ile ilgili konuyu okudum ama kavrayamadım gerçek hayatta nasıl uygulayacağız  kodlarımda bunlar

TRISA=255
TRISB=0
TRISC=0
ADCON1=7

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG  PORTB
DEFINE LCD_RSBIT  2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT  1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
define LCD_COMMANDUS 2000
define LCD_DATAUS 50

SYMBOL  RTC_DTA=PORTD.2
SYMBOL  RTC_CLK=PORTD.1
SYMBOL  RTC_RST=PORTD.0

    ONLAR       VAR BYTE
    BIRLER      VAR BYTE
    SN          VAR BYTE
    DAK         VAR BYTE
    SAAT        VAR BYTE
    MEM         VAR BYTE
    GUN         VAR BYTE
    AY          VAR BYTE
    YIL         VAR BYTE
    HGUN        VAR BYTE
    BOS         VAR BYTE
    TEMP        VAR BYTE
    SAYI        VAR WORD
    ARTIKYIL    VAR BYTE
ARTIKYIL=1
HGUN=1
AY=1
YIL=13
GUN=1
SN=1
DAK=1
SAAT=1
   
   
BASLA:
        GOSUB ZAMAN_YAZ
        GOSUB ZAMAN_OKU
        GOSUB EKRAN
    GOTO BASLA
    end
   
ZAMAN_OKU:
         HIGH RTC_RST:OUTPUT rtc_dta
         SHIFTOUT RTC_DTA, RTC_CLK, 0, [$BF]:INPUT RTC_DTA
         SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, MEM, YIL, MEM]
         MEM=SN:GOSUB CEVIR:SN=SAYI
         MEM=DAK:GOSUB CEVIR:DAK=SAYI
         MEM=SAAT:GOSUB CEVIR:SAAT=SAYI
         MEM=GUN:GOSUB CEVIR:GUN=SAYI
         MEM=AY:GOSUB CEVIR:AY=SAYI
         MEM=YIL:GOSUB CEVIR:YIL=SAYI
         LOW RTC_RST
         return

ZAMAN_YAZ:
     
         high  RTC_RST:OUTPUT RTC_DTA
         SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0]   
         low RTC_RST:PAUSEUS 10
         high RTC_RST         
         SHIFTOUT  RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, 0, YIL, 128]
         low RTC_RST
         PAUSEUS 10
         return
               
CEVIR:
         ONLAR=MEM & %01110000
         ONLAR=ONLAR>>4
         BIRLER=MEM & %00001111
         SAYI=ONLAR*10+BIRLER
         RETURN 

TERSCEVIR:               
         ONLAR=MEM DIG 1
         ONLAR=ONLAR<<4
         BIRLER=MEM DIG 0
         SAYI=ONLAR+BIRLER
         RETURN
       
         
EKRAN:
    lcdout $FE,$C0,"  TARIH  :",dec2 GUN,"/",dec2 AY,"/",dec2 YIL
    LCDOUT $FE,$94,"  SAAT   :",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
    RETURN




İkinci bir saat uygulamasında kesme kullanarak yaptım ama 4 sn de bir sn ilerliyor 1/64 bölme oranıyla ....  bölme oranın 1/32 yapınca 2sn de bir sn atıyor  1/128 yapınca 8 sn de bir atıyor ama 1/16 bölme oranı yapınca saçmalıyor 1. küsür sn de ilerliyor ama bölme oranı düştükçe aynı hep.




devre bu kodlar da aşağıda :

TRISA=255
TRISB=0
TRISC=0
ADCON1=7

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG  PORTB
DEFINE LCD_RSBIT  2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT  1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
define LCD_COMMANDUS 2000
define LCD_DATAUS 50

SAYAC  VAR BYTE
SAAT   VAR BYTE
DAKIKA VAR BYTE
SANIYE VAR BYTE
YIL VAR BYTE
AY VAR BYTE
GUN VAR BYTE
ARTIKYIL VAR BYTE

AY=1
GUN=1
YIL=1
SAAT=1
DAKIKA=1
SANIYE=1


ON INTERRUPT GoTo KESME   'kesme oluşursa KESME adlı etikete git.
OPTION_REG=%10000101   'Pull up dirençleri İPTAL- Bölme oranı 1/64.
INTCON=%10100000  'Kesmeler aktif ve TMR0 kesmesi aktif
TMR0=0
ADCON0=7

LCDOUT $FE,1
PAUSE 500

BASLA:

    lcdout $FE,$C0,"  TARIH  :",dec2 GUN,"/",dec2 AY,"/",dec2 YIL
    LCDOUT $FE,$94,"  SAAT   :",DEC2 SAAT,":",DEC2 DAKIKA,":",DEC2 SANIYE

GOTO BASLA
   
DISABLE
KESME:
      SAYAC=SAYAC+1  'kesme sayacı  1 sn= 61(sayac) x 256 (Tmr0) x 64 (bölme)
      IF SAYAC=61 then  '61 adet kesme olunca 1 sn. süre geçiyor.(999424 us)
         SAYAC=0
         IF SANIYE < 59 THEN
            SANIYE=SANIYE+1
         ELSE
            SANIYE=0
            IF DAKIKA < 59 THEN
                DAKIKA=DAKIKA+1
            ELSE
                DAKIKA=0
                IF SAAT<23 THEN
                    SAAT=SAAT+1
                ELSE
                    SAAT=0
                    SELECT CASE AY
                        CASE 1
                            IF GUN<30 THEN
                                GUN=GUN+1
                            ELSE
                                GUN=1
                                AY=AY+1
                            ENDIF
                        CASE 2
                            IF ARTIKYIL=4 THEN
                                IF GUN<28 THEN
                                    GUN=GUN+1
                                ELSE
                                    GUN=1
                                    ARTIKYIL=1
                                    AY=AY+1
                                ENDIF
                            ELSE
                                IF GUN<27 THEN
                                    GUN=GUN+1
                                ELSE
                                    GUN=1
                                    AY=AY+1
                                ENDIF
                            ENDIF
                            CASE 3
                            IF GUN<30 THEN
                                GUN=GUN+1
                            ELSE
                                GUN=1
                                AY=AY+1
                            ENDIF
                        CASE 4
                            IF GUN<29 THEN
                                GUN=GUN+1
                            ELSE
                                GUN=1                     
                                AY=AY+1
                            ENDIF
                        CASE 5
                            IF GUN<30 THEN
                                GUN=GUN+1
                            ELSE
                                GUN=1
                                AY=AY+1
                            ENDIF
                        CASE 6
                            IF GUN<29 THEN
                                GUN=GUN+1
                            ELSE
                                GUN=1
                                AY=AY+1
                            ENDIF
                        CASE 7
                            IF GUN<30 THEN
                                GUN=GUN+1
                            ELSE
                                GUN=1
                                AY=AY+1
                            ENDIF
                        CASE 8
                            IF GUN<30 THEN
                                GUN=GUN+1
                            ELSE
                                GUN=1
                                AY=AY+1
                            ENDIF
                        CASE 9
                            IF GUN<29 THEN
                                GUN=GUN+1
                            ELSE
                                GUN=1
                                AY=AY+1
                            ENDIF
                        CASE 10
                            IF GUN<30 THEN
                                GUN=GUN+1
                            ELSE
                                GUN=1
                                AY=AY+1
                            ENDIF
                        CASE 11
                            IF GUN<29 THEN
                                GUN=GUN+1
                            ELSE
                                GUN=1
                                AY=AY+1
                            ENDIF
                        CASE 12
                            IF GUN<30 THEN
                                GUN=GUN+1
                            ELSE
                                GUN=1
                                AY=1
                                YIL=YIL+1
                                ARTIKYIL=ARTIKYIL+1
                            ENDIF
                        CASE ELSE
                    END SELECT
                ENDIF
            ENDIF   
        ENDIF
    ENDIF
CIK:     INTCON.2=0        'TMR0 Kesme bayrağı sıfırlanıyor
         RESUME
         ENABLE
         
END

haberlesme

şu projeyi bir inceleyin isterseniz anlamadıgınız yer olursa yine yardımcı olmaya çalışalım.

http://etepic.com/index.php/topic,1123.0.html

M26

O bağlantıdaki devreyi denedim devrede doğru çalışıyor ama derleme zamanında hata veriyor. anlayamadım nasıl olduğunu. amacım otomatik sulama devresine saat dahil etmek ayrıca forumlarda onu da sordum ama sadece saat olarak yapıyım sonra dahil ederim diye düşündüm. sadece ds1302 veya ds1307 yi nasıl kullanacağımı öğrenemedim bir türlü. sadece pause ile yapıp animasyonda bir hafta oynatsam hata vermezse gerçek hayatta da normal çalışırmı sizce çünkü şu an onu yaptım bekliyorum sapma olacakmı diye   ::)

haberlesme

Bana sorarsan saat entegresi en saglam yöntemdir.Diğer yöntemlerde hep sapma olacaktır.Ete hocanın en son yayınladıgı açıklamaya bak birde onun herşeyi ayrıntılı bir şekilde yazıyor ayrıca benim saat projesinden sadece saat kısmını alabilirsin.Tavsiyem de RTC 1307 kullanmandır.Bu aşagıdaki Ete hocanın açıklamasını dikkatlice oku bence herşey tüm ayrıntısıyla anlatılmış ete hocamız.

http://etepic.com/index.php/topic,458.0.html

bu aşağıdaki linktede yine ete hocamızın alarmlı saat uygulaması var.Sen burda alarm çıkış kısmını sulama çıkışı olarak da kullanabilirsin.
http://etepic.com/index.php/topic,66.0.html


Powered by EzPortal