
Pic16f628 Pic Basic ile Saat Termometre Devreleri
12.01.2008 tarihinde yayımlanan 04.05.2017 tarihinde güncellenen Pic16f628 Pic Basic ile Saat Termometre Devreleri ile 23 yazısı var. Yazar; Ete
Devre-3: Bu devrede Saat-Dakika-Saniye göstergesi bulunmakta ve 7 segment display ile oluşturulmuştur. Saat sinyali kesme yöntemi ile elde edilmiştir.
'************************************** '* Name : KESMETMR0.BAS '* Author : [Erol Tahir Erdal] '* Notice : Copyright (c) 2005 [ETE] '* : All Rights Reserved '* Date : 23.04.2005 '* Version : 1.0 LED (3 ) '* Notes : SICAKLIK KUSURAT YAZMIYOR AMA EKSI SICAKLIK '* : GOSTEREBİLİYOR '*************************************** PORTA=255:portb=0 TRISB=0 'PortB tamamı giriş yapıldı. TRISA=%00011111 'A portu tamamı çıkış yapıldı. '----------------------------------------------------------------- @ DEVICE pic16F628 'işlemci 16F628 @ DEVICE pic16F628, WDT_ON 'Watch Dog timer açık @ DEVICE pic16F628, PWRT_ON 'Power on timer açık @ DEVICE pic16F628, PROTECT_OFF 'Kod Protek kapalı @ DEVICE pic16F628, MCLR_off 'MCLR pini kullanılMIYOR. @ DEVICE pic16F628, XT_OSC '@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak '----------------------------------------------------------------- 'DEFINE OSC 4 '---------------------------------------------------------------- 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 CMCON=7 '16F628 de komparatör pinleri iptal hepsi giriş çıkış '---------------------------------------------------------------- Comm_Pin VAR PortA.4 ' One-wire Data-Pin "DQ" PortB.0 da Busy VAR BIT ' Busy Status-Bit POZ var BIT HAM VAR WORD ' Sensör HAM okuma değeri ISI VAR WORD ' Hesaplanmış ISI değeri Float VAR WORD ' Holds remainder for + temp C display X VAR WORD Y VAR BYTE SAYI VAR BYTE SIGN_BITI VAR HAM.Bit11 ' +/- sıcaklık İşaret biti, 1 = olursa eksi sıcaklık NEGAT_ISI CON 1 ' Negatif_Cold = 1 Deg CON 223 ' ° işareti SIGN VAR BYTE ' ISI değeri için +/- işaret TEMP VAR BYTE ' Div32 bit hesap için geçici değişken SAYAC VAR BYTE SN VAR BYTE DAK VAR BYTE SAAT VAR BYTE GUN VAR BYTE symbol SEC =PORTA.0 SYMBOL ASAGI =PORTA.1 SYMBOL YUKARI=PORTA.2 '------------------------------------ CLEAR 'tüm değişkenler sıfırlandı PAUSE 200 Y=1 :POZ=0 '------------------------------------ PORTB=0 BASLA: IF Y>6 THEN IF Y>=11 THEN Y=1 GOSUB EKRAN1 GOTO ATLA ENDIF GOSUB EKRAN0 ATLA: if SEC=0 THEN AYAR 'MODE TUŞUNA BASILMIŞ İSE AYAR'A GİT gosub SENSOROKU 'SONSÖR OKU VE SICAKLIĞI EKRANA YAZ GOTO BASLA EKRAN0: if sayac=30 then low porta.3 X= SAAT DIG 1:GOSUB AL SHIFTOUT PORTB.0,PORTB.1,1,[SAYI] HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2 X= SAAT DIG 0:GOSUB AL SHIFTOUT PORTB.0,PORTB.1,1,[SAYI] HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3 X= DAK DIG 1:GOSUB AL SHIFTOUT PORTB.0,PORTB.1,1,[SAYI] HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4 X= DAK DIG 0:GOSUB AL SHIFTOUT PORTB.0,PORTB.1,1,[SAYI] HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5 X= sn DIG 1:GOSUB AL SHIFTOUT PORTB.0,PORTB.1,1,[SAYI] HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6 X= SN DIG 0:GOSUB AL SHIFTOUT PORTB.0,PORTB.1,1,[SAYI] HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7 RETURN AL: LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :RETURN EKRAN1: LOW PORTA.3 :SAYI=0 SHIFTOUT PORTB.0,PORTB.1,1,[SAYI] HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2 IF SIGN_BITI = NEGAT_ISI THEN SAYI=64 SHIFTOUT PORTB.0,PORTB.1,1,[SAYI] HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3 x=(ISI DIG 1):GOSUB AL SHIFTOUT PORTB.0,PORTB.1,1,[SAYI] HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4 x=(ISI DIG 0):GOSUB AL SHIFTOUT PORTB.0,PORTB.1,1,[SAYI] HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5 X=10:GOSUB AL SHIFTOUT PORTB.0,PORTB.1,1,[SAYI] HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6 X=11:GOSUB AL SHIFTOUT PORTB.0,PORTB.1,1,[SAYI] HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7 RETURN AYAR: POZ=1:gosub FLASH WHILE SEC=0 WEND HOUR: GOSUB EKRAN0 LOW PORTA.3 IF SEC=0 THEN MINBIR IF YUKARI=0 THEN SAAT=SAAT+1 IF SAAT=24 THEN SAAT=0 ENDIF IF ASAGI=0 THEN SAAT=SAAT-1 IF SAAT=255 THEN SAAT=23 ENDIF GOSUB GECIKME GOTO HOUR MINBIR: GOSUB FLASH WHILE SEC=0 WEND MINUTE: GOSUB eKRAN0 LOW PORTA.3 IF SEC=0 THEN ara IF YUKARI=0 THEN DAK=DAK+1 IF DAK=60 THEN DAK=0 ENDIF IF ASAGI=0 THEN DAK=DAK-1 IF DAK=255 THEN DAK=59 ENDIF GOSUB GECIKME GOTO MINUTE SECBIR: WHILE SEC=0 WEND GECIKME: FOR X=0 TO 3500 PAUSEUS 10 NEXT RETURN ARA: GOSUB FLASH HIGH PORTA.3 WHILE SEC=0 wend POZ=0:SN=0 goto BASLA FLASH: TOGGLE PORTA.3:PAUSE 150:TOGGLE PORTA.3:PAUSE 150 TOGGLE PORTA.3:PAUSE 150:TOGGLE PORTA.3:PAUSE 150 return '-------------ISI SENSÖR OKUMA BÖLÜMÜ ------------------- SENSOROKU: ham=$ff5e:Gosub hesapla:return 'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK OWOUT Comm_Pin, 1, [$CC, $44]' ISI değerini oku Bekle: OWIN Comm_Pin, 4, [Busy] ' Busy değerini oku IF Busy = 0 THEN Bekle ' hala meşgulmü? , evet ise goto Bekle..! OWOUT Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku OWIN Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir. GOSUB Hesapla RETURN Hesapla: ' Ham değerden Santigrat derece hesabı Sign = "+" IF SIGN_BITI = NEGAT_ISI THEN Sign = "-" temp=($ffff-ham+1)*625 ISI = DIV32 10 GOTO GEC endif TEMP = 625 * (HAM+1) ' ISI = DIV32 10 ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz. ' ISI = (HAM & $0FF0) >> 4 'ortadaki 8 biti maskele, ve sağa doğru 4 hane kaydır. GEC: FLOAT = (ISI //1000)/100 ISI=ISI/1000 ' Float = ((HAM.Lowbyte & $0F) * 625) ' Küsürat hesabı ' LCDOUT $FE,$C4,Sign,DEC ISI,".",DEC1 (Float)," ",Deg,"C " '2. satırda ısı RETURN DISABLE KESME: IF POZ=1 THEN CIK SAYAC=SAYAC+1 'kesme sayacı 1 sn= 61(sayac) x 256 (Tmr0) x 64 (bölme) IF SAYAC=58 then '61 adet kesme olunca 1 sn. süre geçiyor.(999424 us) SAYAC=0 'sayaç sıfırlanıyor SN=SN+1 Y=Y+1 'saniye değeri bir artırılıyor if y<7 then high porta.3 IF SN=60 THEN 'saniye 60 olmuş ise 1 dakika süre geçti ohalde SN=0 ' saniye sıfırlanıyor DAK=DAK+1 ' dakika değeri bir artırılıyor IF DAK=60 then 'dakika 60 olmuş ise 1 saat süre geçti DAK=0 ' dakika sıfırlanıyor SAAT=SAAT+1 ' saat değeri bir artırılıyor IF SAAT=24 THEN 'saat 24 olmuş ise 1 gün geçti SAAT=0 'saat sıfırlanıyor ' GUN=GUN+1 'gün değeri bir artırılıyor ' IF GUN=365 THEN GUN=0 'gün 365 olmuş ise endif 'gün sıfırlanıyor 1 yıl geçti ENDIF ENDIF ' lcdout $fe,$89,":",DEC2 SN ENDIF CIK: INTCON.2=0 'TMR0 Kesme bayrağı sıfırlanıyor RESUME ENABLE END
Devre-4: Bu devrede Saat-Dakika-Saniye göstergesi bulunmakta ve 7 segment display ile oluşturulmuştur. Saat sinyali harici bir duvar veya masa saatinin saat palslerinden elde edilmiştir. Çok doğru çalışan bir saattir.
'**************************************** '* Name : SAAT-TERMO.BAS '* Author : [Erol Tahir Erdal] '* Notice : Copyright (c) 2005 [ETE] '* : All Rights Reserved '* Date : 23.06.2005 '* Version : 1.0 LED (4) '* Notes : SICAKLIK KUSURAT YAZMIYOR AMA EKSI SICAKLIK '* : GOSTEREBİLİYOR '**************************************** PORTA=255:portb=0 TRISB=1 TRISA=%00011111 '----------------------------------------------------------------- @ DEVICE pic16F628 'işlemci 16F628 @ DEVICE pic16F628, WDT_ON 'Watch Dog timer açık @ DEVICE pic16F628, PWRT_ON 'Power on timer açık @ DEVICE pic16F628, PROTECT_OFF 'Kod Protek kapalı @ DEVICE pic16F628, MCLR_off 'MCLR pini kullanılMIYOR. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak '----------------------------------------------------------------- 'DEFINE OSC 4 '------------------------------------------------------------------------- ON INTERRUPT GoTo KESME 'kesme oluşursa KESME adlı etikete git. OPTION_REG=%0100000 'dahili Pull up dirençleri aktif edildi ayrıca pullup direncine gerek yok. INTCON=%10010000 'Kesmeler aktif ve RB0/INT kesmesi aktif CMCON=7 '16F628 de komparatör pinleri iptal hepsi giriş çıkış '---------------------------------------------------------------------------- Comm_Pin VAR PortA.4 ' One-wire Data-Pin "DQ" PortB.0 da Busy VAR BIT ' Busy Status-Bit POZ VAR BIT HAM VAR WORD ' Sensör HAM okuma değeri ISI VAR WORD ' Hesaplanmış ISI değeri Float VAR WORD ' Holds remainder for + temp C display X VAR WORD Y VAR BYTE SAYI VAR BYTE SIGN_BITI VAR HAM.Bit11 ' +/- sıcaklık İşaret biti, 1 = olursa eksi sıcaklık NEGAT_ISI CON 1 ' Negatif_Cold = 1 Deg CON 223 ' ° işareti SIGN VAR BYTE ' ISI değeri için +/- işaret TEMP VAR BYTE ' Div32 bit hesap için geçici değişken SAYAC VAR BYTE SN VAR BYTE DAK VAR BYTE SAAT VAR BYTE GUN VAR BYTE symbol SEC =PORTA.0 SYMBOL ASAGI =PORTA.1 SYMBOL YUKARI=PORTA.2 SYMBOL DTA=PORTA.6 SYMBOL CLK=PORTB.1 '--------------------------------- CLEAR 'tüm değişkenler sıfırlandı PAUSE 200 Y=1 :POZ=0 '--------------------------------- PORTB=0 BASLA: IF Y>6 THEN IF Y>=11 THEN Y=1 GOSUB EKRAN1 GOTO ATLA ENDIF GOSUB EKRAN0 ATLA: if SEC=0 THEN AYAR 'MODE TUŞUNA BASILMIŞ İSE AYAR'A GİT gosub SENSOROKU 'SONSÖR OKU VE SICAKLIĞI EKRANA YAZ GOTO BASLA EKRAN0:if PORTB.0=1 then low porta.3 X= SAAT DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2 X= SAAT DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3 X= DAK DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4 X= DAK DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5 X= sn DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6 X= SN DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7 RETURN AL: LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :RETURN EKRAN1:LOW PORTA.3 SAYI=0 SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2 IF SIGN_BITI = NEGAT_ISI THEN SAYI=64 SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3 x=(ISI DIG 1):GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4 x=(ISI DIG 0):GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5 X=10:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6 X=11:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7 RETURN AYAR: POZ=1:SN=0 gosub FLASH WHILE SEC=0 WEND HOUR: GOSUB EKRAN0 LOW PORTA.3 IF SEC=0 THEN MINBIR IF YUKARI=0 THEN SAAT=SAAT+1 IF SAAT=24 THEN SAAT=0 ENDIF IF ASAGI=0 THEN SAAT=SAAT-1 IF SAAT=255 THEN SAAT=23 ENDIF GOSUB GECIKME GOTO HOUR MINBIR: GOSUB FLASH WHILE SEC=0 WEND MINUTE: GOSUB eKRAN0 LOW PORTA.3 IF SEC=0 THEN ara IF YUKARI=0 THEN DAK=DAK+1 IF DAK=60 THEN DAK=0 ENDIF IF ASAGI=0 THEN DAK=DAK-1 IF DAK=255 THEN DAK=59 ENDIF GOSUB GECIKME GOTO MINUTE SECBIR: WHILE SEC=0 WEND GECIKME: FOR X=0 TO 1800 PAUSEUS 100 NEXT RETURN ARA: GOSUB FLASH HIGH PORTA.3 WHILE SEC=0 wend POZ=0 goto BASLA FLASH: TOGGLE PORTA.3:PAUSE 150:TOGGLE PORTA.3:PAUSE 150 TOGGLE PORTA.3:PAUSE 150:TOGGLE PORTA.3:PAUSE 150 return '--------------ISI SENSÖR OKUMA BÖLÜMÜ ---------------- SENSOROKU: ham=$ff5e:Gosub hesapla:return 'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK OWOUT Comm_Pin, 1, [$CC, $44]' ISI değerini oku Bekle: OWIN Comm_Pin, 4, [Busy] ' Busy değerini oku IF Busy = 0 THEN Bekle ' hala meşgulmü? , evet ise goto Bekle..! OWOUT Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku OWIN Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir. GOSUB Hesapla RETURN Hesapla: ' Ham değerden Santigrat derece hesabı Sign = "+" IF SIGN_BITI = NEGAT_ISI THEN Sign = "-" temp=($ffff-ham+1)*625 ISI = DIV32 10 GOTO GEC endif TEMP = 625 * (HAM+1) ' ISI = DIV32 10 ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz. GEC: FLOAT = (ISI //1000)/100 ISI=ISI/1000 RETURN DISABLE KESME: IF POZ=1 then CIK SN=SN+1 Y=Y+1 'saniye değeri bir artırılıyor if y<7 then high porta.3 IF SN=60 THEN 'saniye 60 olmuş ise 1 dakika süre geçti ohalde SN=0 ' saniye sıfırlanıyor DAK=DAK+1 ' dakika değeri bir artırılıyor IF DAK=60 then 'dakika 60 olmuş ise 1 saat süre geçti DAK=0 ' dakika sıfırlanıyor SAAT=SAAT+1 ' saat değeri bir artırılıyor IF SAAT=24 THEN 'saat 24 olmuş ise 1 gün geçti SAAT=0 'saat sıfırlanıyor ENDIF ENDIF ENDIF CIK: INTCON.1=0 'TMR0 Kesme bayrağı sıfırlanıyor RESUME ENABLE END
Devre-5: Bu program 7 segment led display ile çalışır. Saat bilgisini (RTC) DS1302 den alır. Saniye gösterir. Eksi sıcaklık gösterir.
'*************************************** '* Name : SAAT-TERMO.BAS '* Author : [Erol Tahir Erdal] '* Notice : Copyright (c) 2005 [ETE] '* : All Rights Reserved '* Date : 23.06.2005 '* Version : 1.0 LED (5) '* Notes : SICAKLIK KUSURAT YAZMIYOR AMA EKSI SICAKLIK '* : GOSTEREBİLİYOR SAAT RTC DS1302 ile çalışıyor '**************************************** PORTA=0:portb=0 TRISB=0 TRISA=%11100000 '----------------------------------------------------------------- @ DEVICE pic16F628 'işlemci 16F628 @ DEVICE pic16F628, WDT_ON 'Watch Dog timer açık @ DEVICE pic16F628, PWRT_ON 'Power on timer açık @ DEVICE pic16F628, PROTECT_OFF 'Kod Protek kapalı @ DEVICE pic16F628, MCLR_off 'MCLR pini kullanılMIYOR. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak '----------------------------------------------------------------- 'DEFINE OSC 4 '------------------------------------------------------------------------- OPTION_REG.7=0 'dahili Pull up dirençleri aktif edildi ayrıca pullup direncine gerek yok. CMCON=7 '16F628 de komparatör pinleri iptal hepsi giriş çıkış '---------------------------------------------------------------------------- Comm_Pin VAR PortA.4 ' One-wire Data-Pin "DQ" PortB.0 da Busy VAR BIT ' Busy Status-Bit GOR VAR BIT HAM VAR WORD ' Sensör HAM okuma değeri ISI VAR WORD ' Hesaplanmış ISI değeri Float VAR WORD ' Holds remainder for + temp C display X VAR WORD Y VAR BYTE SAYI VAR BYTE SIGN_BITI VAR HAM.Bit11 ' +/- sıcaklık İşaret biti, 1 = olursa eksi sıcaklık NEGAT_ISI CON 1 ' Negatif_Cold = 1 Deg CON 223 ' ° işareti SIGN VAR BYTE ' ISI değeri için +/- işaret TEMP VAR BYTE ' Div32 bit hesap için geçici değişken SAYAC VAR BYTE SN VAR BYTE DAK VAR BYTE SAAT VAR BYTE GUN VAR BYTE AY VAR BYTE YIL VAR BYTE MEM var byte ' Temporary data holder OUTBYTE var byte ' Second byte to ds1302 REG_ADR var byte ' First byte to DS1302 ONLAR VAR BYTE BIRLER VAR BYTE ESN VAR BYTE '--------------------------------------------- SYMBOL DTA=PortB.0 SYMBOL CLK=PORTB.1 SYMBOL RTC_DTA=PORTA.0 SYMBOL RTC_CLK=PORTA.1 SYMBOL RTC_RST=PORTA.2 symbol SEC =PORTA.5 SYMBOL ASAGI =PORTA.6 SYMBOL YUKARI=PORTA.7 '--------------------------------------------- CLEAR 'tüm değişkenler sıfırlandı low RTC_RST low RTC_CLK PAUSE 200 esn=0:GOR=0 '--------------------------------------------- PORTB=0 gosub ZAMAN_OKU:esn=SN BASLA: GOSUB ZAMAN_OKU IF ESN<>SN THEN y=SN/5:IF GOR=0 THEN TOGGLE porta.3 IF (Y*5)=SN THEN GOR=1-GOR ENDIF IF GOR=1 THEN GOSUB EKRAN1 GOTO ATLA ENDIF GOSUB EKRAN0 ATLA: if SEC=0 THEN AYAR 'MODE TUŞUNA BASILMIŞ İSE AYAR'A GİT gosub SENSOROKU 'SONSÖR OKU VE SICAKLIĞI EKRANA YAZ ESN=SN GOTO BASLA EKRAN0:'high porta.3 X= SAAT DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2 X= SAAT DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3 X= DAK DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4 X= DAK DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5 X= sn DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6 X= SN DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7 RETURN AL: LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :RETURN EKRAN1:LOW PORTA.3 SAYI=0 SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2 IF SIGN_BITI = NEGAT_ISI THEN SAYI=64 SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3 x=(ISI DIG 1):GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4 x=(ISI DIG 0):GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5 X=10:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6 X=11:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7 RETURN AYAR: gosub FLASH SN=0 WHILE SEC=0 WEND HOUR: GOSUB EKRAN0 LOW PORTA.3 IF SEC=0 THEN MINBIR IF YUKARI=0 THEN SAAT=SAAT+1 IF SAAT=24 THEN SAAT=0 ENDIF IF ASAGI=0 THEN SAAT=SAAT-1 IF SAAT=255 THEN SAAT=23 ENDIF GOSUB GECIKME GOTO HOUR MINBIR: GOSUB FLASH WHILE SEC=0 WEND MINUTE: GOSUB EKRAN0 LOW PORTA.3 IF SEC=0 THEN ara IF YUKARI=0 THEN DAK=DAK+1 IF DAK=60 THEN DAK=0 ENDIF IF ASAGI=0 THEN DAK=DAK-1 IF DAK=255 THEN DAK=59 ENDIF GOSUB GECIKME GOTO MINUTE SECBIR: WHILE SEC=0 WEND GECIKME: FOR X=0 TO 1800 PAUSEUS 100 NEXT RETURN ARA: GOSUB FLASH HIGH PORTA.3 WHILE SEC=0 wend MEM=SN:GOSUB TERSCEVIR:SN=SAYI MEM=DAK:GOSUB TERSCEVIR:DAK=SAYI MEM=SAAT:GOSUB TERSCEVIR:SAAT=SAYI MEM=GUN:GOSUB TERSCEVIR:GUN=SAYI MEM=AY:GOSUB TERSCEVIR:AY=SAYI MEM=YIL:GOSUB TERSCEVIR:YIL=SAYI GOSUB ZAMAN_YAZ goto BASLA FLASH: TOGGLE PORTA.3:PAUSE 150:TOGGLE PORTA.3:PAUSE 150 TOGGLE PORTA.3:PAUSE 150:TOGGLE PORTA.3:PAUSE 150 return '----------------ISI SENSÖR OKUMA BÖLÜMÜ ----------------------- SENSOROKU: '-----------------DİKKAT İSİS'de BU SATIR AKTİF EDİLECEK---------------------- ham=$ff5e:Gosub hesapla:return 'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK '------------------------------------------------------------------------------ OWOUT Comm_Pin, 1, [$CC, $44]' ISI değerini oku Bekle: OWIN Comm_Pin, 4, [Busy] ' Busy değerini oku IF Busy = 0 THEN Bekle ' hala meşgulmü? , evet ise goto Bekle..! OWOUT Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku OWIN Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir. GOSUB Hesapla RETURN Hesapla: ' Ham değerden Santigrat derece hesabı Sign = "+" IF SIGN_BITI = NEGAT_ISI THEN Sign = "-" temp=($ffff-ham+1)*625 ISI = DIV32 10 GOTO GEC endif TEMP = 625 * (HAM+1) ' ISI = DIV32 10 ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz. GEC: FLOAT = (ISI //1000)/100 ISI=ISI/1000 RETURN ZAMAN_OKU: sayac=1-sayac: 'if sayac=1 then low porta.3 high RTC_RST shiftout RTC_DTA, RTC_CLK, 0, [$BF] SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, MEM, YIL, MEM] 'OKU MEM=SN:GOSUB CEVIR:SN=SAYI MEM=DAK:GOSUB CEVIR:DAK=SAYI MEM=SAAT:GOSUB CEVIR:SAAT=SAYI low RTC_RST :PAUSE 100 return ZAMAN_YAZ: high RTC_RST SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0] 'YAZMAK İÇİN HAZIRLA low RTC_RST:PAUSE 1 high RTC_RST SHIFTOUT RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, 0, YIL, 0] 'YAZ low RTC_RST PAUSE 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 END
Bu devreyi yapıp bu hale getiren kişinin ellerine emeğine sağlık. Bu devre ile ilgili soracağım tek konu lcd ekranda veya 7sekment de o anlık değerleri okuduk peki bu değerleri kaydedebilmek için bir hafıza kartına nasıl bağlayabilirim. bağlandıkdan sonra bu verileri 15 sn de bir karta taşımasını istesek bu programı nasıl değiştirmeliyiz ve nasıl bağlamalıyız devremize. Şimdiden teşekkür ederim kolay gelsin iyi çalışmalar.
arkadasım projen çok güzel ama bana sadece ldc de gösteren lazım kodlarla birlike eger bulursan bana ulaşırmısın
Tam aradığım proje çok teşekkür ederim
teşekkürler 🙂
Hocam emeğiniz için teşekkürler.
Program-7’yi uyguladım. Bir sorum olacak. Saniye düzgün ilerlemiyor. 6 nın hemen ardından 7 geliyor. 8 daha sonra geliyor. Ancak saat doğru, yani ertesi gün saniyesi saniyesine doğruydu.
Çalışmalarınızda başarılar…
kardeşim çok saol ama ben isis ten bi açmayı denedim sadece program 3 çalışıyor diğerlerinde hata veriyor acaba nedendir
İyi günler devre için teşekkür ederim bir sorum olacaktı pic in kodunu hangi programı kullandını yardımcı olursanız sevinirim
Şimdiden teşekkür ederim
Only the GPS / GLONASS synchronization is missing. )
devreyi isiste kurdum çalıştırdım. fakat son 2 displayde dakika yerine saniye değeri görüntüleniyor. ayrıca sıcaklık değeri sabit 10 derece gösteriyor
devre 2 yi kurdum. çalıştırdım. fakat dakika yerine saniye değeri son 2 displayde görüntüleniyor. ayrıca sıcaklık değerini değiştirmeme rağmen displayde sabit -10 değeri görüntüleniyor. lütfen yardım edin…
Bu devrede ortak katot display kullanılmış ,elimde yeteri kadar ortak anot display var ,bunları bu devreye nasıl bağlarım ,pic16f628 in kaçıncı pinine bağlamam gerekli ,
2. Devrede 16f628 15-1-2-3-4-5-6 pinler displayde a-b-c-d-e-f-g olarak bağladım çalışmadı
merhaba
aynı görüntü için oled ekran kullanılabilir mi?
aşağıdaki linkdeki cihaz için devre varmıdır? damla entegre var.
tr.aliexpress.com/item/4000218878524.html?spm=a2g0o.cart.0.0.f28a3c00oUehfq&mp=1