
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-6: Bu program 7 segment led display ile çalışır. Saat bilgisini DS1302 den alır. Saniye gösterir. Eksi sıcaklık gösterir. Orta Ledler Kesme yöntemi ile yanıp söner.
'******************************************* '* Name : SAAT-TERMO.BAS '* Author : [Erol Tahir Erdal] '* Notice : Copyright (c) 2005 [ETE] '* : All Rights Reserved '* Date : 23.06.2005 '* Version : 1.0 LED (6) '* 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 '--------------------------------------------------------------------- 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 '--------------------------------------------------------------------- Comm_Pin VAR PortA.4 ' One-wire Data-Pin "DQ" PortB.0 da Busy VAR BIT ' Busy Status-Bit poz var BIT GOR VAR BYTE 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 'TARIH var byte ' Second 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:POZ=0 '--------------------------------------------- PORTB=0 gosub ZAMAN_OKU:esn=SN BASLA: IF Y=11 THEN Y=0 IF Y>5 THEN GOSUB EKRAN1 IF Y<6 THEN 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 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 EKRAN2: HIGH porta.3 X= GUN DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2 X= GUN DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3 X= AY DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4 X= AY DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5 X= YIL DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6 X= YIL DIG 0:GOSUB AL SHIFTOUT DTA,CLK,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 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 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: '-----------------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 MEM=GUN:GOSUB CEVIR:GUN=SAYI MEM=AY:GOSUB CEVIR:AY=SAYI MEM=YIL:GOSUB CEVIR:YIL=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 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=61 then '61 adet kesme olunca 1 sn. süre geçiyor.(999424 us) SAYAC=0 'sayaç sıfırlanıyor Y=Y+1 GOSUB ZAMAN_OKU if Y<5 then HIGH porta.3 ENDIF CIK: INTCON.2=0 'TMR0 Kesme bayrağı sıfırlanıyor RESUME ENABLE END
Devre-7: Bu program 7 segment led display ile çalışır. Saat bilgisini DS1302 den alır. Saniye gösterir. Eksi sıcaklık gösterir. Orta Ledler Kesme yöntemi ile yanıp söner. TARİH gösterir.
Kolay Gelsin,
ETE
'****************************************** '* Name : SAAT-TERMO.BAS '* Author : [Erol Tahir Erdal] '* Notice : Copyright (c) 2005 [ETE] '* : All Rights Reserved '* Date : 23.06.2005 '* Version : 1.0 LED (7) '* 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 '------------------------------------------------------------------------- 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 '---------------------------------------------------------------------------- Comm_Pin VAR PortA.4 ' One-wire Data-Pin "DQ" PortB.0 da Busy VAR BIT ' Busy Status-Bit POZ VAR BIT GOR VAR BYTE 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 'TARIH var byte ' Second 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 GOSUB GECIKME '-------------------------------------- HIGH PORTA.3 gosub ZAMAN_OKU:esn=SN BASLA: IF Y=15 THEN Y=0 IF Y>5 AND Y<11 THEN GOSUB EKRAN1 IF Y>10 THEN GOSUB EKRAN2 IF Y<6 THEN 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=28 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 EKRAN2:IF POZ=0 THEN HIGH porta.3 X= GUN DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2 X= GUN DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3 X= AY DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4 X= AY DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5 X= YIL DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6 X= YIL DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7 RETURN '----------------------------------------------------- AYAR: LOW PORTA.3:SN=0:POZ=1:GOSUB FLASH IF Y>10 THEN TARIHAYAR 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 50 NEXT RETURN DELAY: FOR X=0 TO 1900 PAUSEUS 10 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 GOSUB ZAMAN_OKU y=0:POZ=0 goto BASLA FLASH: TOGGLE PORTA.3:GOSUB DELAY:TOGGLE PORTA.3:GOSUB DELAY TOGGLE PORTA.3:GOSUB DELAY:TOGGLE PORTA.3:GOSUB DELAY return '----------------------------------------------------------------- TARIHAYAR: WHILE SEC=0 WEND GUNAL: GOSUB EKRAN2 IF SEC=0 THEN AYBIR IF YUKARI=0 THEN GUN=GUN+1 IF GUN=32 THEN GUN=1 ENDIF IF ASAGI=0 THEN GUN=GUN-1 IF GUN=255 THEN SAAT=31 ENDIF GOSUB GECIKME GOTO GUNAL AYBIR: GOSUB FLASH WHILE SEC=0 WEND AYAL: GOSUB EKRAN2 IF SEC=0 THEN YILBIR IF YUKARI=0 THEN AY=AY+1 IF AY=13 THEN AY=1 ENDIF IF ASAGI=0 THEN AY=AY-1 IF AY=255 THEN AY=12 ENDIF GOSUB GECIKME GOTO AYAL YILBIR: gosub FLASH WHILE SEC=0:WEND YILAL: GOSUB EKRAN2 IF SEC=0 THEN ARA IF YUKARI=0 THEN YIL=YIL+1 IF YIL=100 THEN YIL=0 ENDIF IF ASAGI=0 THEN YIL=YIL-1 IF YIL=255 THEN YIL=99 ENDIF GOSUB GECIKME GOTO YILAL '----------------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: 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 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 SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0] 'WRT Protek açıldı low RTC_RST:PAUSEUS 10 high RTC_RST SHIFTOUT RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, 0, YIL, 128] 'YAZ 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 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 Y=Y+1 GOSUB ZAMAN_OKU if Y<5 then HIGH porta.3 ENDIF CIK: INTCON.2=0 'TMR0 Kesme bayrağı sıfırlanıyor RESUME ENABLE END
PIC16F628 ile yapılmış 7 adet SAAT ve TERMOMETRE Devresi projesine ait tüm kaynak dosyalar. Proteus isis simülasyonları picbasic kaynak .bas .hex vb. kodları Pic16f628 Pic Basic ile Saat Termometre Devreleri
Dosya indirme LINK listesi (TXT formatında) link-90.zip şifre-pass: 320volt.com
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