Haberler:

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

Ana Menü

Vakitmatik projesi hakkında

Başlatan ronin_2000, 11 Nisan 2011, 22:04:08

Klein

Floating point hatası biraz derleyici , biraz kullanılan kütüphane , biraz da kaç bit floating point kullanıldığı ile ilgili.
Sonsuz bit kullanılamadığı için  bir yerde yuvarlama yapılmak zorunda kalınıyor. Birbirini takip eden işlemlerde , her yuvarlama hatası diğerinin sonucunu değiştiriyor. 
Buher zaman derleyici hatası ya da yuvarlama hatası olmayabiliyor. Belki sayı doğru oluyor ama sayıyı göstermekte kullandığınız kütüphanenin de hatası veya kodu hafifletmek için bırakılmış hata payı olabiliyor.
IAR C derleyicide CLIB kütüphanesini kullandığınızda
float x= 637.0
printf("%f",x) sonucu
637.00000000 şeklinde görünmesi gerekirken 637.00000984 görünebiliyor. (değer uydurma. Gerçek değerleri hatırlamıyorum. ama son 3 hane çok saçmaydı)
ama aynı operasyon DLIB kütüphanesi kullandığınızda 637.00000000 şeklinde görünüyor.
Ama DLIB kütüphanesi CLIB kütüphanesine göre daha fazla kod alanı kaplıyor.

EGEHAYDAR

#16
Device = 16F877A           'MCU 16F877A
 
Xtal = 4                       'KRİSTAL 4MHZ

ADCON1 = 7  ; ANALOG GİRİŞLER İPTAL

 
TRISA=%00111111   ;SIRALAMA= BOŞ,BOŞ,A5,A4,A3,A2,A1,A0 PORTA GİRİŞ
TRISB=%00000000   ;PORTB ÇIKIŞ
TRISC=%00000000  ;PORTC ÇIKIŞ
TRISD=%00000011   ;PORTD ÇIKIŞ
TRISE=%00000111   ;SIRALAMA= BOŞ,BOŞ,BOŞ,BOŞ,BOŞ,E2,E1,E0 PORTE GİRİŞ

All_Digital= TRUE         'ADC PORTLARININ TAMAMI DİJİTAL GİRİŞ VEYA ÇIKIŞ
LCD_DTPort = PORTB      'GLCD DATA PORTLARI PORTB'YE BAĞLI
LCD_ENPin = PORTC.7      'GLCD ENABLE PİNİ PORTC.1 BAĞLI
LCD_CS1Pin = PORTC.6    'GLCD CS1 PİNİ PORTC.2 BAĞLI
LCD_CS2Pin = PORTC.5    'GLCD CS2 PİNİ PORTC.3 BAĞLI
LCD_RWPin = PORTC.4     'GLCD RW PİNİ PORTC.4 BAĞLI
LCD_RSPin = PORTD.3      'GLCD RS PİNİ PORTC.5 BAĞLI
LCD_Type =  GRAPHIC      'GLCD TİPİ GRAFİK KS0108 128*64B WİNSTAR
Internal_Font = On
Font_Addr = 0
GLCD_EXTERNAL_PRINT = PPRINT


DelayMS 500    

                              'GLCD EKRANINI TEMİZLE
Dim  Xpos    As Byte	;XPOS BİLGİSİ 0....127
Dim  Ypos    As Byte	;'YPOS BİLGİSİ 0....63
Dim  Addr    As Word     ;'EPROM ADRES BİLGİSİ
Dim  char    As Byte     ;'FONT KARAKTER BİLGİSİ


Dim  SAYI    As Byte
Dim  SAYI1    As Byte
Dim  DEGER    As Byte

Busy        VAR Bit         ' Busy Status-Bit
ISI         VAR Word        ' Hesaplanmış ISI değeri
KESIR       VAR Word        ' Holds remainder for + temp C display
TEMP        VAR Byte         ' Div32 bit hesap için geçici değişken



DAKIKA    VAR Byte
SAAT      VAR Byte
HAFTA     VAR Byte
GUN       VAR Byte
AY        VAR Byte
YIL       VAR Byte
SAY       VAR Byte
SANIYE    VAR Byte
TARIH     VAR Byte
KONTROL   VAR Byte
DAY       VAR Byte
Sayac     var Byte



SARJ  var Byte
RTCCmd VAR Byte

Symbol ENTER=PORTE.0	
Symbol YUKARI=PORTE.1
Symbol ASAGI=PORTE.2       

;****************SAAT TANITMA RUTİNİ *****************
Symbol RESET1=PORTC.3
Symbol DTA=PORTC.2
Symbol SCLK=PORTC.1
;************************************************
Symbol DQ=PORTC.0   	' One-wire Data-Pin "DQ" PortC.0 da  DS18B20 ISI SENSÖRÜ

Cls

Tric CON %10010000

'Trickle time charger settings
O_FF CON %11110000 'turns off trickle charge
D1R1 CON %10100101 '1 diode 1 resistor
D1R2 CON %10100110 '1 diode 2 resistor
D1R3 CON %10100111 '1 diode 3 resistor
D2R1 CON %10101001 '2 diode 1 resistor
D2R2 CON %10101010 '2 diode 2 resistor
D2R3 CON %10101011 '2 diode 3 resistor


  

SARJ = D1R2 'changes this variable to off or the setting that you want the ds1302 to charge at see data sheet
RTCCmd = TRIC
;Print $FE,1
DelayMS 200


GoSub Trick
GoTo START
;GoTo KAYDET

Trick:
High RESET1
SHOut DTA,SCLK,lsbfirst, [RTCCmd,SARJ]
Low RESET1
Return

;***********OKUMA İŞLEMİ RUTİNİ ***************************

OKUMA:


 
         High RESET1
        SHOut DTA,SCLK,lsbfirst,[$BF]
        ; SHOut DTA,SCLK,0,[$BF]
        SHIn DTA,SCLK,lsbpre,[SANIYE,DAKIKA,SAAT,GUN,AY,HAFTA,YIL,KONTROL]  'OKU
         ;SHIn DTA,SCLK,1,[SANIYE,DAKIKA,SAAT,GUN,AY,HAFTA,YIL,0]  'OKU
         
        Low RESET1
         
         
         KONTROL= SANIYE  
         GoSub CEVIR 
         SANIYE=SAYI
         
         KONTROL=DAKIKA  
         GoSub CEVIR
         DAKIKA=SAYI
         
         KONTROL=SAAT 
         GoSub CEVIR 
         SAAT=SAYI
         
         
         KONTROL=GUN  
         GoSub CEVIR
         GUN=SAYI
         
         KONTROL=AY   
         GoSub CEVIR
         AY=SAYI
         
                 
         KONTROL=YIL  
         GoSub CEVIR 
         YIL=SAYI
         
    
         
Return  

     
CEVIR:
SAYI = ((KONTROL >> 4) * 10) + (KONTROL & $0F)
Return


;***********OKUMA İŞLEMİ RUTİNİ BİTİŞ ***************************


SENSOROKU:     
       
OWrite DQ, 1, [$CC, $44] ' ISI değerini OKU   
Repeat 
DelayMS 10 ' Wait until conversion is complete 
ORead DQ, 4, [Busy] ' Busy değerini OKU 
Until Busy <> 0 ' the DS1820 is finished. 
OWrite DQ, 1, [$CC, $BE] ' scratchpad memory OKU
ORead DQ, 2,[ISI.LowByte,ISI.HighByte] 


 
               
        
              
      ISI = 625 * ( ISI +1)       ' 
      ISI = Div32 10                 ' Div32 hassas derece hesabı için 32 bit bölme yapıyoRUZ   
   
    
    KESIR = (ISI //1000)/100
    ISI=ISI /1000
    
      
        Return    


        ;*************************  SAAT KAYIT RUTİNİ ******************

KAYDET:




 
Low RESET1        
Low SCLK

;SANIYE=0

;KONTROL=0

         
         
         KONTROL=SANIYE 
         GoSub CEVIR1 
         SANIYE=SAYI
         KONTROL=DAKIKA  
         GoSub CEVIR1
         DAKIKA=SAYI
         KONTROL= SAAT  
         GoSub CEVIR1 
         SAAT=SAYI
         KONTROL=GUN 
         GoSub CEVIR1
         GUN=SAYI
         KONTROL=AY   
         GoSub CEVIR1
         AY=SAYI
         KONTROL=YIL 
         GoSub CEVIR1 
         YIL=SAYI   
         
         
      

High RESET1        'OKUMA İŞLEMİNİ BAŞLAT    
SHOut DTA,SCLK,lsbfirst,[$8E,0]
Low RESET1         'RESETİ SIFIRLA
High RESET1
SHOut DTA,SCLK,lsbfirst,[$BE,SANIYE,DAKIKA,SAAT,GUN,AY,HAFTA,YIL,0] '  $A5 Write trickle = %10100101  PİL ŞARJ KOMUTU
 
Low RESET1  
                       
Return

CEVIR1:
    SAYI=0
hx: 
If KONTROL>=10 Then
        KONTROL=(KONTROL -10)
        SAYI=(SAYI +16) ;$10
        GoTo hx
    Else
        SAYI=(SAYI + KONTROL)
        GoTo ex
    EndIf
ex:
 Return

 ;************* SAAT KAYIT BİTİŞ *************************

KAYIT:
Cls

Print At 1,1,"AYARLAR KAYDEDILDI"
GoSub KAYDET
DelayMS 1000

KAYIT1:
If ENTER=1 Then START
GoTo KAYIT1

START:
Cls

DENEME:
GoSub AY_YAZ
GoSub GUN_YAZ
;Print Font Bookm16K
Print Font Bookm11
Print At 1,1,Inverse 1,"       ",Dec2 SAAT,"  :  ",Dec2 DAKIKA,"  :  ",Dec2 SANIYE,"       "
Print Font Bookm11   
Print At 21,1,Inverse 0,Dec2 GUN," - ",Dec2 AY," - 20",Dec2 YIL,"   ", Dec2 HAFTA
Print At 37,1,Dec2 GUN

DelayMS 700
GoSub OKUMA
If ENTER=0  Then SAATAYAR
GoTo DENEME




GUN_YAZ:   
    Select Case HAFTA   
        Case 1   
            Print At 52,1,"PAZARTESI"  
        Case 2   
            Print At 52,1,"SALI"  
        Case 3   
            Print At 52,1,"CARSAMBA"  
        Case 4   
            Print At 52,1,"PERSEMBE"  
        Case 5   
            Print At 52,1,"CUMA"  
        Case 6   
            Print At 52,1,"CUMARTESI"  
        Case 7   
            Print At 52,1,"PAZAR"  
    End Select   
Return  

AY_YAZ:   
    Select Case AY   
        Case 1   
            Print At 37,25,"OCAK"  
        Case 2   
            Print At 37,25,"SUBAT"  
        Case 3   
            Print At 37,25,"MART"  
        Case 4   
            Print At 37,25,"NISAN"  
        Case 5   
            Print At 37,25,"MAYIS"  
        Case 6   
            Print At 37,25,"HAZIRAN"  
        Case 7   
            Print At 37,25,"TEMMUZ"  
        Case 8   
            Print At 37,25,"AGUSTOS"  
        Case 9   
            Print At 37,25,"EYLUL"  
        Case 10   
            Print At 37,25,"EKIM"  
        Case 11   
            Print At 37,25,"KASIM"  
        Case 12   
            Print At 37,25,"ARALIK" 
    End Select   
Return 

;********** SAAT AYAR RUTİNİ *****************

SAATAYAR:
Cls
Print At 1,1," SAAT AYARI  "
Print At 30,10,Dec2 SAAT

ARK:
If ENTER=1  Then SAATAYAR1 
DelayMS 100
GoTo ARK

SAATAYAR1:
If YUKARI=0 Then SAATCIK
If ASAGI=0  Then SAATIN  
If ENTER=0  Then DAKAYAR 
DelayMS 100
GoTo SAATAYAR1   
      
SAATCIK:
SAAT=SAAT + 1
If SAAT >=24 Then SAAT=0
Print At 30,10,Dec2 SAAT
GoTo SAATBEKLE

SAATIN:
SAAT=SAAT - 1
If SAAT <1 Then SAAT=23
Print At 30,10,Dec2 SAAT

SAATBEKLE:
DelayMS 100
If YUKARI=1 And ASAGI=1 Then SAATAYAR1
GoTo SAATBEKLE



;********** DAKİKA AYAR RUTİNİ *****************

DAKAYAR:
Cls
Print At 1,1,"DAKIKA AYARI "
Print At 30,10,Dec2 DAKIKA

ARK1:
If ENTER=1  Then DAKAYAR1 
DelayMS 100
GoTo ARK1

DAKAYAR1:
If YUKARI=0 Then DAKCIK
If ASAGI=0  Then DAKIN  
If ENTER=0  Then YILAYAR 
DelayMS 100
GoTo DAKAYAR1   
      
DAKCIK:
DAKIKA=DAKIKA + 1
If DAKIKA>=60 Then DAKIKA=0
Print At 30,10,Dec2 DAKIKA
GoTo DAKBEKLE

DAKIN:
DAKIKA=DAKIKA - 1
If SAAT <1 Then DAKIKA=59
Print At 30,10,Dec2 DAKIKA

DAKBEKLE:
If YUKARI=1 And ASAGI=1 Then DAKAYAR1
DelayMS 100
GoTo DAKBEKLE

;********** YIL AYAR RUTİNİ *****************

YILAYAR:
Cls
Print At 1,1,"YIL AYARI "
Print At 30,10,"20",Dec2 YIL

ARK2:
If ENTER=1  Then YILAYAR1 
DelayMS 100
GoTo ARK2

YILAYAR1:
If YUKARI=0 Then YILCIK
If ASAGI=0  Then YILIN  
If ENTER=0  Then AYAYAR 
DelayMS 100
GoTo YILAYAR1   
      
YILCIK:
YIL=YIL + 1
If YIL>=20 Then YIL=1
Print At 30,10,"20",Dec2 YIL
GoTo YILBEKLE

YILIN:
YIL=YIL - 1
If YIL <1 Then YIL=99
Print At 30,10,"20",Dec2 YIL

YILBEKLE:
If YUKARI=1 And ASAGI=1 Then YILAYAR1
DelayMS 100
GoTo YILBEKLE

;********** AY AYAR RUTİNİ *****************

AYAYAR:
Cls
Print At 1,1,"AY AYARI "
Print At 30,10,Dec2 AY

ARK3:
If ENTER=1  Then AYAYAR1
DelayMS 100
GoTo ARK3

AYAYAR1:
If YUKARI=0 Then AYCIK
If ASAGI=0  Then AYIN  
If ENTER=0  Then GUNAYAR 
DelayMS 100
GoTo AYAYAR1   
      
AYCIK:
AY=AY + 1
If AY>=13 Then AY=1
Print At 30,10,Dec2 AY
GoTo AYBEKLE

AYIN:
AY=AY - 1
If AY <1 Then AY=12
Print At 30,10,Dec2 AY

AYBEKLE:
If YUKARI=1 And ASAGI=1 Then AYAYAR1
DelayMS 100
GoTo AYBEKLE

;********** GUN AYAR RUTİNİ *****************

GUNAYAR:
Cls
Print At 1,1,"GUN AYARI "
Print At 30,10,Dec2 GUN

ARK4:
If ENTER=1  Then GUNAYAR1 
DelayMS 100
GoTo ARK4

GUNAYAR1:
If YUKARI=0 Then GUNCIK
If ASAGI=0  Then GUNIN  
If ENTER=0  Then HAFAYAR
DelayMS 100
GoTo GUNAYAR1   
      
GUNCIK:
GUN=GUN + 1
If GUN>=32 Then GUN=1
Print At 30,10,Dec2 GUN
GoTo GUNBEKLE

GUNIN:
GUN=GUN - 1
If GUN <1 Then GUN=31
Print At 30,10,Dec2 GUN

GUNBEKLE:
If YUKARI=1 And ASAGI=1 Then GUNAYAR1
DelayMS 100
GoTo GUNBEKLE

;********** HAFTA AYAR RUTİNİ *****************

HAFAYAR:
Cls
Print At 1,1,"HAFTA AYARI "
Print At 30,10,Dec2 HAFTA

ARK5:
If ENTER=1  Then HAFAYAR1 
DelayMS 100
GoTo ARK5

HAFAYAR1:
If YUKARI=0 Then HAFCIK
If ASAGI=0  Then HAFIN  
If ENTER=0  Then KAYITLA
DelayMS 100
GoTo HAFAYAR1   
      
HAFCIK:
HAFTA=HAFTA + 1
If HAFTA>=8 Then HAFTA=1
Print At 30,10,Dec2 HAFTA
GoTo HAFBEKLE

HAFIN:
HAFTA=HAFTA - 1
If HAFTA <1 Then HAFTA=7
Print At 30,10,Dec2 GUN

HAFBEKLE:
If YUKARI=1 And ASAGI=1 Then HAFAYAR1
DelayMS 100
GoTo HAFBEKLE

KAYITLA:
SANIYE=0
GoTo KAYIT


Include "BOOK11.inc"
Include "BOOK16K.inc"

TOPLUMA FAYDALI OLMAK İSTİYORSAN DOĞRU BİLDİĞİNİ PAYLAŞ.

EGEHAYDAR

Bu denediğim ve uyguladığım saat + tarih + ısı uygulaması. Buradan yola çıkarak namaz vakitlerini de yazmanız mümkün.Ben olsam namaz vakitlerini 24c bir eproma kaydeder oradan okurdum.Hayırlı çalışmalar.
TOPLUMA FAYDALI OLMAK İSTİYORSAN DOĞRU BİLDİĞİNİ PAYLAŞ.

Maxim

şunu birisi açıklayabilirmi?

protonda :
Temp = Cos 23.4375
çıkan sonuç : -0.124124

xp de hesap programı ile :
cos[A(rad)] ile -0.12412394718862
cos[A(deg)] ile 0.91749449644749

aralarındak fark nedir ?

ronin_2000


Arkadaşlar yaptığım prototip çalışmaya ait bir resim az önce çektim size fikir vermesi açısından.
Cep ile çekildiğinden kalite biraz düşük kusura bakmayın.
Namaz vakitleri ve hicri tarih manuel girildi hesaplanamadı  ;)

X-Fi

Bende böyle bir ekran hazırladım daha üzerinde çalışıyorum soldakiler vakit ezanları okunmuş ezanlar renk değiştirecek ok okunacak ezan vaktini gösterecek ezan okunurkende ekranda ayrı bir görüntü yüklemeyi planlıyorum.

kolay gelsin.

http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

ronin_2000

Gayet güzel olmuş hocam elinize sağlık.
Bu const unsigned int tablo_2011[365][5]={ olayını protonda nasıl yaparız?
Protondan başka bir dil ile çalışmaya niyetim yok.

X-Fi

bende C de yazıyorum malesef proton hiç kullanmadım temel bir işlem sayılır C deki kadar fonksiyonel ve kolay olacağını sanmam ama muhakkak vardır bir yolu.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Maxim

bu tablonun farkı şu mu ?
bir tablo yapıyoruz ama "ayrıca" her satırda istediğimiz değeri ayrıca seçebiliyoruz ?
365 gün + her gün içinde 5 seçenek

ronin_2000

Alperen ile bende benzer bir tablo hazırladım aradaki : ve baştaki "0" ları kaldırdım.

4 12   500 627 1312 1650 1944 2105 şeklinde devam ediyor.

Soldan sağa ay, gün, sabah, öğle, ikindi, akşam, yatsı şeklinde.

Dim DestString As String * 32
DestString = Mid$ (Source, 6, 3)
Print DestString
Source:
CData "4 14 456 624 1311 1650 1946 2107", 0

Bu kod ekrana 456 çıktısı veriyor.
Daha parlak bir fikri olan var mı?

ronin_2000

Include "PROTON18_G4.INT"

Dim GUN         As Byte
Dim AY          As Byte

Dim IMSAK       As Word
Dim GUNES       As Word
Dim OGLE        As Word
Dim IKINDI      As Word
Dim AKSAM       As Word
Dim YATSI       As Word


Print At 0,0, "imsak  :", Dec IMSAK 
Print At 1,0, "Gunes  :", Dec GUNES    
Print At 2,0, "Ogle   :", Dec OGLE 
Print At 3,0, "ikindi :", Dec IKINDI 
Print At 4,0, "Aksam  :", Dec AKSAM 
Print At 5,0, "Yatsi  :", Dec YATSI

table:
CData 4,15,455,623,1311,1649,1947,2107,_
      4,16,453,621,1311,1650,1948,2108,_
      4,17,452,620,1310,1650,1949,2110,_
      4,18,450,618,1310,1650,1950,2111,_
      4,19,448,617,1310,1650,1951,2112,_
      4,20,446,616,1310,1650,1952,2113,_
      4,21,445,614,1310,1651,1953,2115 

Include "font.inc"


Yukarıdaki şeklide bir format oluşturdum. CData nın ilk ve ikinci verisini okuyarak şayet  gün ve ay tutuyorsa geri kalan 6 veriyi çekmem lazım.
Bu yazdığım format sizce doğru mu? Cread komutunu nasıl kullanmam gerekiyor. Yardımcı olursanız sevinirim.

bymrz

Namaz vakitleri konusunda yabancı kaynaklı sitelerde bu işlemlerin nasıl yapılacağı konusunda bi takım formüller vardı. Yalnız çok basit formüller de değil tabi. trigonometrik fonksiyonlar var...

google da " how to calculate salat(salah) times" gibi bişeyler yazarsanız bulursunuz sanırım...

Mucit23

Acaba diyanetin resmi sistesinden günlük olarak namaz saatlerinin alımı yapılamazmı. Şu döviz panoları var. Kendisi ethernet üzerinden kendini güncelliyor. Buna benzer bir sistem yapılamazmı??

ronin_2000

#28
Alıntı yapılan: alone_lover - 16 Nisan 2011, 08:54:43
Namaz vakitleri konusunda yabancı kaynaklı sitelerde bu işlemlerin nasıl yapılacağı konusunda bi takım formüller vardı. Yalnız çok basit formüller de değil tabi. trigonometrik fonksiyonlar var...

google da " how to calculate salat(salah) times" gibi bişeyler yazarsanız bulursunuz sanırım...

Hocam yabancı sitelerden derlediğim formuller bende mevcut zaten 1. sayfaya bakarsanız formul olayında sorunlar çıktığından dolayı vazgeçtim. Amacım sadece verileri pice yazdırıp okumak.

ronin_2000

Alıntı yapılan: Mucit23 - 16 Nisan 2011, 09:13:40
Acaba diyanetin resmi sistesinden günlük olarak namaz saatlerinin alımı yapılamazmı. Şu döviz panoları var. Kendisi ethernet üzerinden kendini güncelliyor. Buna benzer bir sistem yapılamazmı??
Güzel bir ayrıntı düşünmüşsünüz. Fakat öncelikle sabit veriyi yazıp okuyabilirsek bir sonraki aşamada ethernet üzerine yoğunlaşabiliriz.