avatar_elektro77

lcd de ondalık yazma

Başlatan elektro77, 11 Nisan 2016, 18:51:51

elektro77

Merhaba arkadaşlar ve üstadlar;
A=37,2
B=30,5
C=156
D=13,5
E=98
F=?
FORMÜL     F=(A+B+C+D)/E
Yukarıdaki verileri formülde yerine koyup hesapladığımızda sonuç ondalıklı çıkıyor.Pic Basic proda, 16 bit çözünürlükte, bu sonucu "dec" komutları kullanarak LCD de, 2 hane tam sayı ve 3 hane onndalıklı olarak nasıl yazdırabilirim.  Örn: 01,325 gibi
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

İşin tek yolu sonucu 1000 ile çarpışmış olarak bulacaksın.
A B C D  (E hariç) Değerlerini 1000 ile çarpıp sonucu hesapladıktan sonra, ekrana yazdırırken şu şekilde bir yol takip edeceksin.
Lcdout $FE,$C0, dec (F/1000),",",dec (F//1000)

Ete

elektro77

#2
LCDOUT $FE,$D4,"KURULUK=",DEC (KURU/1000),",",DEC (KURU//1000)RUZGARAL:       ADCIN 0,HAM1       LCDOUT $FE,$94, "RUZ=",DEC3 RUZGAR,",",DEC1 MRUZGAR,"KM PH=",DEC2 PH,",",DEC MPH                       Ham1=ham1+1                          RUZGAR=(ham1 */2499)       MRUZGAR=RUZGAR//10       RUZGAR=RUZGAR/10       GOSUB PHAL RETURN               '-----------------------------ADC 2---------------------------------------------PHAL:                ADCIN 1,HAM2        LCDOUT $FE,$94,"RUZ=",DEC3 RUZGAR,",",DEC1 MRUZGAR,"KM PH=",DEC2 PH,",",DEC MPH        Ham2=ham2+1        PH=(ham2 */35)        MPH=PH//10        PH=PH/10 LCDOUT $FE,$D4,"KURULUK=",DEC (KURU/1000),",",DEC (KURU//1000) KURUAL:KURU=(RUZGAR*1000)+(ISI*1000)+(ISI1*1000)+(PH*1000)/U1GOSUB GONDERRETURN


hocam yazılımın bazı kısımları yukardaki gibi.ısı ve ısı1 sht11 ve 18b20. u1 ise yine sht11.Söylediğiniz formülü kurual formülünde uyguladım. ondalık olarak alıyorum fakat hesaplama yanlış sonucu veriyor.
çarpma işlemlerini nerde yapacağız.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Sende hesapta kulandığın kuru değerini eski sistemde elde et ve kullan gösterirken benim önerdiğimi kullan.
Yani bir Kuru değişkeni daha tanımlaman gerekiyor.

Ete

Not. Bu kadarcık kod parçasından neyin yanlış olduğunu anlayamadım maalesef. Hangi hesap yanlış çıkıyor oda belli değil.
Biraz ip ucu vermek lazım değilmi?


elektro77

#4
 
km       var    byte     TERM     VAR    BYTE     NEM      VAR    BYTE     KONTROL  VAR    BYTE     ISI1     VAR    BYTE     ISI2     VAR    BYTE     U1       VAR    BYTE     U2       VAR    BYTE     C0       VAR    BYTE     H0       VAR    HAMISI.BYTE0     H1       VAR    HAMISI.BYTE1     HAMISI   VAR    WORD     ISISHT   VAR    WORD     RUT      VAR    WORD     P1       VAR    WORD     P2       VAR    WORD     P3       VAR    WORD     W        VAR    WORD     KURU     VAR    WORD     KURU1      VAR BYTE     MKURU    VAR    WORD     CLK      VAR    PORTA.5     DTA      VAR    PORTA.2     RUZGAR   VAR    word     PH       VAR    word     MPH      VAR    BYTE     MRUZGAR  VAR    BYTE      HAM1     VAR    WORD     HAM2     VAR    WORD     ISARETSHT VAR   BIT   'sensor değeri 0 ise artı, 1 ise eksi     SIGN     VAR    BIT      'ısı isareti 0 ise artı 1 ise eksi     HATA     var    BIT'-------------------------------------------------------------------------------    '     SYMBOL CIKIS=PORTb.0     VERICI VAR BYTE ' VERICI=0'------------------------------------------------------------------------------- Busy        VAR BIT         ' Busy Status-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 ISARET_BITI VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık EKSI_ISI   CON 1           ' Sıfır altında isaret biti=1  oluyor kontrol için DERECE     CON 223         ' ° işareti ISARET     VAR BYTE        '  ISI değeri için  +/-  işaret TEMP       VAR BYTE       ' Div32 bit hesap için geçici değişken SYMBOL COMM_PIN=PORTB.1   ' One-wire Data-Pin "DQ" PortB.0 da '-----------------------------B A Ş L A N G I Ç ------------------------------     PAUSE 500:ISARET=0         LCDOUT $FE,$40,$6,$9,$9,$6,$0,$0,$0,$0        'derece işareti dataları         LCDOUT $FE,$48,$04,$0e,$0e,$0e,$1f,$04,$04,$0         LCDOUT $FE,$50,10,0,17,17,17,17,14,0 'LCD 2. KARAKTER HAFIZASI Ü HARFİ'-------------------------------------------------------------------------------BASLANGIC:BASLA:                KONTROL=%00000011:HAMISI=0   'SHT 11 SICAKLIK ÖLÇME        GOSUB OLCUMAL        Gosub ISIHESAP              KONTROL=%00000101:HAMISI=0   'SHT11 NEM ÖLÇME        GOSUB OLCUMAL        GOSUB RUTHESAP:GOSUB SENSOROKU        GOSUB KURUAL        GOSUB EKRAN1        GOSUB GONDER        GOSUB RUZGARAL        GOSUB PHAL           goto BASLA  '----------------------------ACD1-----------------------------------------------RUZGARAL:       ADCIN 0,HAM1       LCDOUT $FE,$94, "RUZ=",DEC3 RUZGAR,",",DEC1 MRUZGAR,"KM PH=",DEC2 PH,",",DEC MPH                       Ham1=ham1+1                          RUZGAR=(ham1 */2499)       MRUZGAR=RUZGAR//10       RUZGAR=RUZGAR/10       GOSUB PHAL RETURN               '-----------------------------ADC 2---------------------------------------------PHAL:                ADCIN 1,HAM2        LCDOUT $FE,$94,"RUZ=",DEC3 RUZGAR,",",DEC1 MRUZGAR,"KM PH=",DEC2 PH,",",DEC MPH        Ham2=ham2+1        PH=(ham2 */35)        MPH=PH//10        PH=PH/10        RETURN     '---------------------------------------EKRANA YAZ ----------------------------- EKRAN1:         lcdout $FE,$80,"ORT=",DEC2 ISI1,",",DEC1 ISI2,0,"  VUC=",DEC2 ISI,",",DEC1 (FLOAT),0        lcdout $FE,$C0,"NEM=%",DEC2 U1               LCDOUT $FE,$D4,"KURULUK=",DEC (KURU/1000),",",DEC (KURU//1000) '-------------------------------------------------------------------------------RETURNSENSOROKU:            OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini okuBekle:           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: 'VUC SICAKLIĞI Ham değerden Santigrat derece hesabı: BU DEĞERLER SENSÖRDEN GELN HAM BİLGİYİ SANTİGRATA ÇEVİRİR    ISARET  = "+"   IF ISARET_BITI = EKSI_ISI THEN       ISARET   = "-"         ham=~ham+2    endif    float = (HAM*10)/16            ISI=FLOAT/10    RETURN  '-------------------------------SHT11 İŞLEM START -----------------------------------T_START:      OUTPUT DTA:OUTPUT CLK        HIGH DTA         LOW CLK       PAUSE 1        HIGH CLK         LOW DTA       PAUSE 1         LOW CLK       PAUSE 1        HIGH CLK       PAUSE 1        HIGH DTA         LOW CLKRETURN'-----------------------SHT11 SENSORÜNE KOMUT GÖNDER ---------------------------OLCUMAL:           GOSUB T_Start        SHIFTOUT DTA,CLK,1,[KONTROL]           INPUT DTA         PULSOUT CLK,10                 HATA=0             FOR W=0 to 65500              IF DTA=0 then GIT            NEXT W                 HATA=1GIT:                       IF HATA=1 then            endif         SHIFTIN DTA,CLK,0,[H1]          OUTPUT DTA             LOW DTA         PULSOUT CLK,10           INPUT DTA         SHIFTIN DTA,CLK,0,[H0]         PULSOUT CLK,10RETURN'----------------------ISI HESAP ALT PROGRAMI-----------------------------------     ISIHESAP:             If HAMISI<4000 then               ISARETSHT=1 'sıcaklık eksi değerde demek              ISI1=(4000-HAMISI)/100              ISI2=((4000-HAMISI)//100)/10            goto ISISON        endif                            ISI1=(HAMISI-4000)/100              ISI2=((HAMISI-4000)//100)/10                            ISISON:                  ISI1=(HAMISI-4000)/100              ISI2=((HAMISI-4000)//100)/10RETURN     '------------------SHT11 RUTUBET HESAP ALT PROGRAMI---------------------------- RUTHESAP:               p1=(26542-(54722**HAMISI+hamISI))**HAMISI-40                   P2=655+(HAMISI*5)+(HAMISI**15917)                     P3=(P2**(ISISHT*10+2480))-(P2**2730)+P1                 U1=p3/10:U2=p3//10           IF HAMISI>3710 THEN              U1=0:U2=0        ENDIF  returnGOSUB PHAL '--------FORMÜL-----------------------------------------------------------------KURUAL:KURU=RUZGAR+ISI+ISI1+PH/U1GOSUB GONDERRETURN'ISI= VUC SICAKLIĞI ,ISI1=ORT SICAKLIK  ,ISI2=ORT SICAKLIĞI VİRGÜL SONRASI, U1=NEM  'FLOAT=VUCUT SICAKLIĞININ SON İKİ HANESİNİN 10 İLE ÇARPIMI   '-----------------------GONDER:SEROUT2 PORTB.0,396,["E","Z",KURU,MKURU]SEROUT2 PORTB.0,396,["E","Z",KURU,MKURU]SEROUT2 PORTB.0,396,["E","Z",KURU,MKURU]SEROUT2 PORTB.0,396,["E","Z",KURU,MKURU]RETURN END


hocam kodların tamamıdır. Yardımcı olursanız sevinirim.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#5
 
DEFINE OSC 4@ DEVICE pic16F877@ DEVICE pic16F877, WDT_on@ DEVICE pic16F877, PWRT_ON@ DEVICE pic16F877, PROTECT_OFF@ DEVICE pic16F877, XT_OSC'-------------------------- TRISA=%00001011 TRISB=%00000000 TRISC=%00000111 TRISD=%00000000 TRISE=%00000000 PORTA=0 PORTB=0 PORTC=0 PORTD=0 PORTE=0 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_BITS        4 DEFINE LCD_LINES       4 DEFINE ADC_BITS 10     ' ADCIN resolution  (Bits) DEFINE ADC_CLOCK 1     ' ADC clock source  (Fosc/8) DEFINE ADC_SAMPLEUS 20 ' ADC sampling time (uSec) ADCON1=%10000100       ' 10 BİT DEĞER İÇİN '---------------------------değişkenler-----------------------------------------      km       var    byte     TERM     VAR    BYTE     NEM      VAR    BYTE     KONTROL  VAR    BYTE     ISI1     VAR    BYTE     ISI2     VAR    BYTE     U1       VAR    BYTE     U2       VAR    BYTE     C0       VAR    BYTE     H0       VAR    HAMISI.BYTE0     H1       VAR    HAMISI.BYTE1     HAMISI   VAR    WORD     ISISHT   VAR    WORD     RUT      VAR    WORD     P1       VAR    WORD     P2       VAR    WORD     P3       VAR    WORD     W        VAR    WORD     KURU     VAR    WORD     KURU1      VAR  WORD     MKURU    VAR    BYTE     CLK      VAR    PORTA.5     DTA      VAR    PORTA.2     RUZGAR   VAR    word     PH       VAR    word     MPH      VAR    BYTE     MRUZGAR  VAR    BYTE      HAM1     VAR    WORD     HAM2     VAR    WORD     ISARETSHT VAR   BIT   'sensor değeri 0 ise artı, 1 ise eksi     SIGN     VAR    BIT      'ısı isareti 0 ise artı 1 ise eksi     HATA     var    BIT'-------------------------------------------------------------------------------    '     SYMBOL CIKIS=PORTb.0     VERICI VAR BYTE ' VERICI=0'------------------------------------------------------------------------------- Busy        VAR BIT         ' Busy Status-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 ISARET_BITI VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık EKSI_ISI   CON 1           ' Sıfır altında isaret biti=1  oluyor kontrol için DERECE     CON 223         ' ° işareti ISARET     VAR BYTE        '  ISI değeri için  +/-  işaret TEMP       VAR BYTE       ' Div32 bit hesap için geçici değişken SYMBOL COMM_PIN=PORTB.1   ' One-wire Data-Pin "DQ" PortB.0 da '-----------------------------B A Ş L A N G I Ç ------------------------------     PAUSE 500:ISARET=0         LCDOUT $FE,$40,$6,$9,$9,$6,$0,$0,$0,$0        'derece işareti dataları         LCDOUT $FE,$48,$04,$0e,$0e,$0e,$1f,$04,$04,$0         LCDOUT $FE,$50,10,0,17,17,17,17,14,0 'LCD 2. KARAKTER HAFIZASI Ü HARFİ'-------------------------------------------------------------------------------BASLANGIC:BASLA:                KONTROL=%00000011:HAMISI=0   'SHT 11 SICAKLIK ÖLÇME        GOSUB OLCUMAL        Gosub ISIHESAP              KONTROL=%00000101:HAMISI=0   'SHT11 NEM ÖLÇME        GOSUB OLCUMAL        GOSUB RUTHESAP:GOSUB SENSOROKU        GOSUB KURUAL        GOSUB EKRAN1        GOSUB GONDER        GOSUB RUZGARAL        GOSUB PHAL           goto BASLA  '----------------------------ACD1-----------------------------------------------RUZGARAL:       ADCIN 0,HAM1       LCDOUT $FE,$94, "RUZ=",DEC3 RUZGAR,",",DEC1 MRUZGAR,"KM PH=",DEC2 PH,",",DEC MPH                       Ham1=ham1+1                          RUZGAR=(ham1 */2499)       MRUZGAR=RUZGAR//10       RUZGAR=RUZGAR/10       GOSUB PHAL RETURN               '-----------------------------ADC 2---------------------------------------------PHAL:                ADCIN 1,HAM2        LCDOUT $FE,$94,"RUZ=",DEC3 RUZGAR,",",DEC1 MRUZGAR,"KM PH=",DEC2 PH,",",DEC MPH        Ham2=ham2+1        PH=(ham2 */35)        MPH=PH//10        PH=PH/10        RETURN     '---------------------------------------EKRANA YAZ ----------------------------- EKRAN1:         lcdout $FE,$80,"ORT=",DEC2 ISI1,",",DEC1 ISI2,0,"  VUC=",DEC2 ISI,",",DEC1 (FLOAT),0        lcdout $FE,$C0,"NEM=%",DEC2 U1               LCDOUT $FE,$D4,"KURULUK=",DEC (KURU1/1000),",",DEC (KURU1//1000) '-------------------------------------------------------------------------------RETURNSENSOROKU:            OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini okuBekle:           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: 'VUC SICAKLIĞI Ham değerden Santigrat derece hesabı: BU DEĞERLER SENSÖRDEN GELN HAM BİLGİYİ SANTİGRATA ÇEVİRİR    ISARET  = "+"   IF ISARET_BITI = EKSI_ISI THEN       ISARET   = "-"         ham=~ham+2    endif    float = (HAM*10)/16            ISI=FLOAT/10    RETURN  '-------------------------------SHT11 İŞLEM START -----------------------------------T_START:      OUTPUT DTA:OUTPUT CLK        HIGH DTA         LOW CLK       PAUSE 1        HIGH CLK         LOW DTA       PAUSE 1         LOW CLK       PAUSE 1        HIGH CLK       PAUSE 1        HIGH DTA         LOW CLKRETURN'-----------------------SHT11 SENSORÜNE KOMUT GÖNDER ---------------------------OLCUMAL:           GOSUB T_Start        SHIFTOUT DTA,CLK,1,[KONTROL]           INPUT DTA         PULSOUT CLK,10                 HATA=0             FOR W=0 to 65500              IF DTA=0 then GIT            NEXT W                 HATA=1GIT:                       IF HATA=1 then            endif         SHIFTIN DTA,CLK,0,[H1]          OUTPUT DTA             LOW DTA         PULSOUT CLK,10           INPUT DTA         SHIFTIN DTA,CLK,0,[H0]         PULSOUT CLK,10RETURN'----------------------ISI HESAP ALT PROGRAMI-----------------------------------     ISIHESAP:             If HAMISI<4000 then               ISARETSHT=1 'sıcaklık eksi değerde demek              ISI1=(4000-HAMISI)/100              ISI2=((4000-HAMISI)//100)/10            goto ISISON        endif                            ISI1=(HAMISI-4000)/100              ISI2=((HAMISI-4000)//100)/10                            ISISON:                  ISI1=(HAMISI-4000)/100              ISI2=((HAMISI-4000)//100)/10RETURN     '------------------SHT11 RUTUBET HESAP ALT PROGRAMI---------------------------- RUTHESAP:               p1=(26542-(54722**HAMISI+hamISI))**HAMISI-40                   P2=655+(HAMISI*5)+(HAMISI**15917)                     P3=(P2**(ISISHT*10+2480))-(P2**2730)+P1                 U1=p3/10:U2=p3//10           IF HAMISI>3710 THEN              U1=0:U2=0        ENDIF  returnGOSUB PHAL '--------FORMÜL-----------------------------------------------------------------KURUAL:KURU=RUZGAR+ISI+ISI1+PH/U1KURU1=KURU*1000/U1GOSUB GONDERRETURN


YENİ BİR KURU TANIMI YAPIP YENİDEN YUKARIDAKİ GİBİ DENEDİM KURU1 SONUCU YANLIŞ ÇIKIYOR HOCAM

edit: code tag (# butonu) kullanın lütfen
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#6
Hocam ben formüldeki ISI, ISI1,U1 GİBİ değerleri doğru yerlerden aldığıma emin değilim.
Sonuç bu nedenle hesap makinesinde hesapladığım gibi çıkmıyor olabilir.
birde dec komutlarını heryerde doğru kullandığıma emin değilim. buda etkiliyor olabilir sanırım.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Programa bakınca insan ürküyor. Öyle hemen inceleyip sorun bulunacak bir şey değil.
Konsantre olup epeyce incelemek gerek. En güzeli çalıştırıp adım adım gitmek bence. Ama simulasyonu ekleyememişsin maalesef.

Ete

elektro77

Hemen ekledim hocam. ektedir.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Programda bir çok kusur var. En önemlisi ISIHESAP adlı etiketin altındakiler.
O satırları bir incele bir birinin aynı şeyleri üst üste yazmışsın.
Ayrıca KURULUK hesabı da bana göre pek doğru değil.
Rüzgar değişkeni rüzgar değerinin tam sayı kısmını tutuyor. Mrüzgar ise ondalık kısmı tutuyor.
Sen ikisini topluyorsun bu yanlış bir uygulama. Bütün kullanılan değerler aslında xx,x şeklinde 1 hanelik ondalık hesaplanacak şekilde ayarlanmış zaten. Yapman gereken Kuruluk hesabında tamsayıya çevirilmemiş hallerini yani 10 ile çarpılmış hallerini kullanarak bu hesabı yapman.
Mesela RÜZGAR değeri başlangıçta ondalık kısmıda içerecek şekilde hesaplanıyor. Sonra , Mrüzgar=Rüzgar//10 Rüzgar=rüzgar/10  şeklinde değerler hesaplanıyor. Halbuki Rüzgar=Rüzgar/10 yapmadan önceki konumda rüzgar değeri ondalık kısmıda ihtiva ediyor idi. Bu şekilde Kuruluk hesabında kullanılmalı idi.

Benzer şekilde ISI hesabında Float değeri ISI değerinin 10 ile çarpılmış halini ihtiva etmekte. Ama sen formülde hem ISI değerini hemde Float değerini kullanarak daha büyük bir hata yapmış oluyorsun. Burada da formülde yalnızca Float değerini kullanarak işi çözmek lazım. 

ISI1 hesabında kullanılan sistemin yanlı olduğunu söylemiştim. Doğrusu şöyle olmalı;
ISIHESAP:             If HAMISI<4000 then               ISARETSHT=1 'sıcaklık eksi değerde demek              ISI1=(4000-HAMISI)/10              ISI2=ISI1//10              GOTO ISISON           endif                                          ISI1=(HAMISI-4000)/10              ISI2=ISI1//10  ISISON:                  ISI1=ISI1/10   'burada ISI1 tam sayı kısmı hesaplanıyor. Ondalık kısmı ISI2 değişkeninde                  RETURN

Formülde ISI2 yani ISI1 ondalık kısmınıda kullanmamışsın. Burada da ISI1/10 dan önce ISI1 değerinin 10 ile çarpılmış halini Kuruluk formülünde kullanmak lazım.
Benzer şekilde PH hesabında da PH değeri başlangıçta ondalık kısmı ihtiva etmektedir. Böylece formülün tamamını bu sisteme uygun olarak kullanmak mümkün.
Karışıklığa meydan vermemek için ben olsam ondalık kısım hiç hesaplamam. Nerede ekrana yazdırıyor isem orada tam sayı ve ondalık şeklinde gösteririm. Ama hesaplamada hep 10 ileçarpılmış hallerini kullanırım. Sonuçta,
KURU1=KURU/10*U1 şeklinde de asıl sonuca ulaşırım.
Yeri gelmiş iken hemen belirteyim burada kullandığın o KURU1=KURU*1000/U1 formülüde yanlış. Sonucu 1000 ile çarpmak işi çözmüyorki sonucu iyice bozmuşsun burada. Hepten yanlış.

Ete


elektro77

yazdıklarınızı anlamaya çalışıyorum hocam.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

#11
İlişikteki programı düzenledim. Virgülden sonra 3 hane ondalık vererek kuruluk hesaplıyor. Doğru çalışıyor.
Bir kerede sen dene ve hesap makinesi ile yaptığın hesap ile karşılaştır bakalım sonucu.

Önceden söyledim mantığı uyguladım. Kuruluk hesabında yalnızca 32 bit çarpma yapmak gerekti. Zira sayılar 16 biti aşıyor rakamları büyüttüğün zaman. Ama en son uygulamada 32 bite dönüp sonucu o şekilde alıyorum.
KURUAL:KURU=RUZGAR*10+Float*10+ISI1*10+PH*10KURU1=(KURU**100)KURU1=DIV32 P3

Burada önce KURU değişken değerini parametreleri 10 ile çarparak hesaplıyorum. Zaten asıl değerler 10 ile çarpılmış olarak kullanıldı ama Nem değerine bölerken Nem in 10 katı haline böleceğimiz için onu göz ardı ediyoruz.
Bulunan sonucu  birde 100 ile çarpıyorum ve 32 bitlik bir sayı elde ediyorum. Sonra bunu p3 değerine yani NEM'in 10 ile çarpılmış haline bölüyorum. Böylece işlem sonucunda,
Kuru değeri x 1000 hesaplanıyor. Bu nedenle ekrana yazdırıken;
LCDOUT $FE,$D4,"KURULUK=",DEC kuru1/1000,",",DEC KURU1//1000,"  " şeklinde tam sayı kısmını 1000 e bölerek buluyorum. Ondalık kısmı içinde Mod 1000 işlemini uyguluyorum. Böylece sonu doğru çıkıyor.

Ete

not:
bir tavsiye, dosya isimlerinde Türkçe harf kullanma bu bir. İkincisi çok uzun dosya ismide kullanma. En fazla 8 karekter olsun. Aksi halde bir çok noktada sıkıntı yaşarsın özellikle derlemede epeyce sıkıntı çıkartır.

elektro77

Siz bu işte mükemmelsiniz hocam.
çok güzel çalışıyor.
fakat hocam ben rüzgarın tam sayı kısmını biliçli olarak 3 haneli yapmıştım. tekrar 3 haneli yapsak formülünüze etkisi olurmu
çünkü dc motor fanı saç kurutma makinesi  etkisi ile döndürüldüğünde 100 ü aşıyor.
yani saç kurutma makinesinin de kuruluğa olan etkisini ölçebilmek için 100 aşırmamız gerekli.
birde hocam sht11 im mi bozuk bilmiyorum ama gerçek devrede nemi çok fazla gösteriyor. %47 nemi %87 gösteriyor.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

birde hocam hatalı olan yazılımda bir şekilde rf ile  verip almayı başarmıştım.
vericide ne göndereceğim alıcıda ne alacağım.
yardımcı olurmusunuz.
saygılarımla.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

#14
Mesaj yazarken kod tag kullan demiştim ama hala ısrarla kullanmıyorsun. Kod tag kullanılmayan mesajları sileceğim artık.
Mesaj yazarken hemen üstte üzerinde # işareti olan butondur. Basınca köşeli parantez içinde Code yazısı görülecektir. Bu ibareden sonrasına kodarını yazıp sonrada yine köşeli parantez içinde "/code" ibaresi ile kapatacaksın.

Ete

Powered by EzPortal