Pic Basic ile yazılmış, PIC16F877 ve DS1302 kullanılmış lcd'li saat arıyorum.

Başlatan certy, 20 Nisan 2013, 18:01:27

certy

Pic Basic ile yazılımı yazılmış, PIC16F877 ve DS1302 kullanılmış lcd'li saat devresi arıyorum. Link verirseniz sevinirim. Saygılar. :)
TA1USS

Extreme


certy

Alıntı yapılan: Extreme - 20 Nisan 2013, 19:25:55
neden illaki 16f877 istiyorsunuz 16f628a deyil ?

Saat özelliği haricinde başka özellikler eklenecek. Fazla port kullanımı olacak. Zaten 16f628 için yazılmış bir saat devresi yazılımını 16f877 için düzenlemeye çalıştım, olmadı.
TA1USS

ete

Madem şimdiden kodu değiştirmeyi düşünüyorsun,  neden hepsini oturup güzelce yeniden yazmıyorsun?.
Öyle siparişle devre yada program aranmazki? Pardon aranmaz demiyeyim bulunmazki diyeyim bari.
Muhtemelen Google amca ya sormuşsundur. O da yok dedi ise geriye fazla alternatifin kalmıyor maalesef.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

certy

Alıntı yapılan: ete - 21 Nisan 2013, 10:09:49
Madem şimdiden kodu değiştirmeyi düşünüyorsun,  neden hepsini oturup güzelce yeniden yazmıyorsun?.
Öyle siparişle devre yada program aranmazki? Pardon aranmaz demiyeyim bulunmazki diyeyim bari.
Muhtemelen Google amca ya sormuşsundur. O da yok dedi ise geriye fazla alternatifin kalmıyor maalesef.

Ete

Daha yeniyim program yazma konusunda. Şimdilik sadece hazır kodlar üzerinde değişiklik yapabiliyorum veya kodları birleştiriyorum vs. Google dışında birçok siteye baktım ama bulamadım.
TA1USS


certy

TA1USS

ete

%10111110 sayısı binary bir sayıdır ve 8 bit olmalıdır. Sayı şu şekilde yazılmış %101111108,  mantıklı düşünürsen binary bir sayının en yüksek değeri 1 olmalıdır. Dolayısıyla 8 rakamı oraya ait olmamalıdır öyle değilmi. 8 rakamını silersen düzelecektir. Bir alt satırda da aynı hata var ve derleme esnasında oradada hata vermesi  gerekir.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

certy

Alıntı yapılan: ete - 22 Nisan 2013, 07:15:57
%10111110 sayısı binary bir sayıdır ve 8 bit olmalıdır. Sayı şu şekilde yazılmış %101111108,  mantıklı düşünürsen binary bir sayının en yüksek değeri 1 olmalıdır. Dolayısıyla 8 rakamı oraya ait olmamalıdır öyle değilmi. 8 rakamını silersen düzelecektir. Bir alt satırda da aynı hata var ve derleme esnasında oradada hata vermesi  gerekir.
Ete

Düzelttim. Teşekkürler. Ancak şimdi de programdaki main kısmı çalışmıyor. Kafayı yedirtecek.

@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
'-----------------------------------------------------------------
LCDOUT $FE,$40, 6, 9, 9, 6, 0, 0, 0, 0
'-----------------------------------------------------------------
DEFIne LCD_DREG PORTb
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTb
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTb
DEFINE LCD_EBIT 7
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
'-----------------------------------------------------------------
LCD1_Disable var PORTb.5
LCD2_Disable VAR PORTb.6
'-----------------------------------------------------------------
Comm_Pin1   VAR   PortC.0
Comm_Pin2   var PortC.1
Comm_Pin3   var PortC.2
Busy        VAR BIT
HAM         VAR   WORD
ISI         VAR WORD
SIGN        VAR BYTE
SIGN_BITI   VAR HAM.Bit11
NEGAT_ISI   CON 1
TEMP        VAR BYTE
Float       VAR WORD
a var word
son_deger var word
deger var word
hiz var word
hiz_dev var word
devir_sayisi var word
input portC.3
input portC.4
CPIN    VAR     PORTC.7     
DPIN    VAR     PORTC.6
RST     VAR     PORTC.5
SANIYE  VAR     BYTE     
DAKIKA  VAR     BYTE
SAAT    VAR     BYTE
GUN     VAR     BYTE
AY      VAR     BYTE
HFTGUNU VAR     BYTE
YIL     VAR     BYTE
KONTROL VAR     BYTE
GIRIS   VAR     BYTE
SANIYE  = $00           
DAKIKA  = $05
SAAT    = $15
GUN     = $20
AY      = $06
HFTGUNU = $00
YIL     = $05
KONTROL = $00
GIRIS   = %00000011
'-----------------------------------------------------------------
CLEAR
PAUSE 200
LCDOUT $FE,1
'-----------------------------------------------------------------
BASLA:
GOSUB USE_LCD1
LCDOUT $FE,$CF,"*****"
LCDOUT $FE,$9D,"TARAFINDAN"
GOSUB USE_LCD2
LCDOUT $FE,$C1,"****"
LCDOUT $FE,$94,"YAPILMISTIR"

'-----------------------------------------------------------------
GOSUB USE_LCD1
PAUSE 2000
LCDOUT $FE,1
GOSUB USE_LCD2
LCDOUT $FE,1
GOSUB SENSOROKU1
GOSUB SENSOROKU2
GOSUB SENSOROKU3
goSUB SAAT
GOSUB MAIN
GOTO BASLA
'----------------------------ISI OKU-----------------------------
SENSOROKU1:
           
           OWOUT   Comm_Pin1, 1, [$CC, $44]
Bekle1:
           OWIN    Comm_Pin1, 4, [Busy]   
           IF      Busy = 0 THEN Bekle1 
           OWOUT   Comm_Pin1, 1, [$CC, $BE]
           OWIN    Comm_Pin1, 2, [HAM.Lowbyte, HAM.Highbyte]
           GOSUB   Hesapla1
           RETURN
   
Hesapla1:                 
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10
       GOTO GEC1   
    endif
    TEMP = 625 * (HAM+1)       
    ISI = DIV32 10         
GEC1:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-1
   
    GOSUB USE_LCD1
    lcdout $FE,$80,"MOTR",":",Sign,DEC ISI,".",DEC1 (Float),0,"C"
    if ISI=65535 then
     
        GOSUB USE_LCD1
        lcdout $FE,$85,"       "
        lcdout $FE,$85,"SNSR TK"
   
    endif
   
    RETURN
'---------------------------ISI OKU2-----------------------------
SENSOROKU2:
           
           OWOUT   Comm_Pin2, 1, [$CC, $44]
Bekle2:
           OWIN    Comm_Pin2, 4, [Busy] 
           IF      Busy = 0 THEN Bekle2
           OWOUT   Comm_Pin2, 1, [$CC, $BE]
           OWIN    Comm_Pin2, 2, [HAM.Lowbyte, HAM.Highbyte]
           GOSUB   Hesapla2
           RETURN
   
Hesapla2:         
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10
       GOTO GEC2   
    endif
    TEMP = 625 * (HAM+1)     
    ISI = DIV32 10       
GEC2:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-1
   
    GOSUB USE_LCD1
    lcdout $FE,$8C,"/DIS",":",Sign,DEC ISI
    GOSUB USE_LCD2
    lcdout $FE,$80,".",DEC1 (Float),0,"C"
   
    if ISI=65535 then
       
        GOSUB USE_LCD1
        lcdout $FE,$91,"   "
        lcdout $FE,$91,"SNS"
        GOSUB USE_LCD2
        lcdout $FE,$80,"    "
        lcdout $FE,$80,"R TK"                 
   
    endif
   
    RETURN
'---------------------------ISI OKU3-----------------------------
SENSOROKU3:
           
           OWOUT   Comm_Pin3, 1, [$CC, $44]
Bekle3:
           OWIN    Comm_Pin3, 4, [Busy] 
           IF      Busy = 0 THEN Bekle3
           OWOUT   Comm_Pin3, 1, [$CC, $BE]
           OWIN    Comm_Pin3, 2, [HAM.Lowbyte, HAM.Highbyte]
           GOSUB   Hesapla3
           RETURN
   
Hesapla3:         
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10
       GOTO GEC3   
    endif
    TEMP = 625 * (HAM+1)     
    ISI = DIV32 10       
GEC3:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-1
   
    GOSUB USE_LCD2
    lcdout $FE,$84,"/JENERTR",":",Sign,DEC ISI,".",DEC1 (Float),0,"C"

  if ISI=65535 then
       
        GOSUB USE_LCD2
        lcdout $FE,$8D,"       "
        lcdout $FE,$8D,"SNSR TK"                 
   
    endif
   
    RETURN
'-------------------------------------------------------------
PAUSE 100
son_deger=0
MAIN:

count portc.3,1000,deger

son_deger=son_deger+deger
devir_sayisi=son_deger
hiz=deger*60                           
                           
if portc.4=0 then son_deger=0
GOSUB USE_LCD1
lcdout $fe,$94,"DEViR:",dec hiz
lcdout $fe,$9F,"RPM"
lcdout $fe,$A3,"DEViR"
GOSUB USE_LCD2
lcdout $fe,$94,":",dec devir_sayisi

goto main

SAAT BOLUM:
     GOSUB TARIHSAATOKU
     GOSUB USE_LCD1
     LCDOUT  $FE,$D4
     LCDOUT  "SAAT:",HEX(SAAT),":",HEX(DAKIKA),":",HEX(SANIYE)
     LCDOUT  $FE,$E2
     LCDOUT  "TARIH:"
     GOSUB USE_LCD2
     LCDOUT  $FE,$D4,HEX(GUN),"/",HEX(AY),"/20",HEX(YIL)
     PAUSE   1000
GOTO SAAT BOLUM
END

TARIHSAATAYARI :
     HIGH RST
    SHIFTOUT DPIN,CPIN,0,[%10111110,SANIYE,DAKIKA,SAAT,GUN,AY,HFTGUNU,YIL,KONTROL]
     LOW RST
    RETURN

TARIHSAATOKU:
    HIGH RST
    SHIFTOUT DPIN,CPIN,0,[%10111111]
    SHIFTIN  DPIN,CPIN,1,[SANIYE,DAKIKA,SAAT,GUN,AY,HFTGUNU,YIL,KONTROL]
     LOW RST
    RETURN

GECIKME:
     PAUSE   1000
     RETURN
END

USE_LCD1:
INPUT LCD1_Disable
LOW LCD2_Disable
RETURN

USE_LCD2:
LOW LCD1_Disable
INPUT LCD2_Disable
RETURN
TA1USS

pwm.c

"SAAT" adında hem değişken hemde etiket isimi kullandığından dolayı derleyici hata veriyor.
etiketi ve buna yönlendirdiğin komutlarıda değiştirince derleme yaptı ama devre şeması olmadığı için deneyemedim.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

ete

Programın MAIN isimli etiketine GOSUB ile gidiliyor ama oradan dönüş yok maalesef.
Program bu mevcut hali ile Main etiketine hapsolmuş gözüküyor.
Bir şekilde RETURN ile geri dönüş olması gerekir ve GOTO MAIN yerine RETURN yazılması gerektiğini düşünüyorum.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

certy

Alıntı yapılan: pwm.c - 22 Nisan 2013, 17:34:39
"SAAT" adında hem değişken hemde etiket isimi kullandığından dolayı derleyici hata veriyor.
etiketi ve buna yönlendirdiğin komutlarıda değiştirince derleme yaptı ama devre şeması olmadığı için deneyemedim.

Etiketle değişken farklı isimdeydi. Ben buraya yazarken karışıklık olmasın diye değiştirdim. Sorun yok yani.
TA1USS

certy

Alıntı yapılan: ete - 22 Nisan 2013, 17:39:02
Programın MAIN isimli etiketine GOSUB ile gidiliyor ama oradan dönüş yok maalesef.
Program bu mevcut hali ile Main etiketine hapsolmuş gözüküyor.
Bir şekilde RETURN ile geri dönüş olması gerekir ve GOTO MAIN yerine RETURN yazılması gerektiğini düşünüyorum.
Ete

Return yazarakta denedim. Olmadı malesef.
TA1USS

certy

Alıntı yapılan: pwm.c - 22 Nisan 2013, 17:34:39
"SAAT" adında hem değişken hemde etiket isimi kullandığından dolayı derleyici hata veriyor.
etiketi ve buna yönlendirdiğin komutlarıda değiştirince derleme yaptı ama devre şeması olmadığı için deneyemedim.

Şema:

https://hotfile.com/dl/204078410/3cba806/ikiekran.DSN.html
TA1USS

certy

Alıntı yapılan: ete - 22 Nisan 2013, 17:39:02
Programın MAIN isimli etiketine GOSUB ile gidiliyor ama oradan dönüş yok maalesef.
Program bu mevcut hali ile Main etiketine hapsolmuş gözüküyor.
Bir şekilde RETURN ile geri dönüş olması gerekir ve GOTO MAIN yerine RETURN yazılması gerektiğini düşünüyorum.
Ete

Ne yapmalıyım sizce?
TA1USS