return kodu ve kod birleştirme

Başlatan feslegenli, 27 Şubat 2024, 04:49:40

feslegenli

merhaba arkadaşlar pic16f877a için  iki kodu birleştirmek istedim fakat iki kodu birturlu aynı anda çalıştıramadım ekteki kodda

Print At 1,10,"A=",Dec2 AMPER,".",Dec2 MA
Print At 1,1,"W=",Dec2 GUC   
          Return
Print At 2, 1, "ISI=:"
Print At 2, 9, "HIZ=:"
   
burdaki return kodunu silince kod
 Print At 2, 1, "ISI=:"
Print At 2, 9, "HIZ=:"
bu kod çalısıyor return kodunu yazınca
Print At 1,10,"A=",Dec2 AMPER,".",Dec2 MA
Print At 1,1,"W=",Dec2 GUC   
bu kod çalışıyor bu kodları aynı anda nasıl çalıştırabilirim
     Device 16F877A
     Xtal = 4
Declare LCD_DTPin = PORTD.0
Declare LCD_ENPin PORTC.0
Declare LCD_RSPin PORTC.1
Declare LCD_RWPin PORTB.2
Declare LCD_Interface 4
Declare LCD_Lines 2
Declare Adin_Res 10
Declare Adin_Tad FRC
Declare Adin_Stime 50
ADCON1 = %10000000 ' PORTA ve PORTE analog ölçüm girisler aktif.
TRISA = %11111111   ' PORTA'nın tüm pinlerinin giriş 
TRISB = 0            'PORTB'nin tüm pinlerinin çıkış 
TRISC = 0             'PORTC'nin tüm pinlerinin çıkış
TRISD = 0              'PORTD'nin tüm pinlerinin çıkış


Dim VOLT As Word
Dim HAM As Word
Dim HVD As Word
Dim AMPER As Word
Dim MV As Byte
Dim MA As Byte
Dim GUC As Float
Dim GUCA As Float
Dim GUCV As Float
Dim p As Byte
Dim pa As Byte = 1
Dim analogdeg As Word
Dim temp As SWord
Dim tempu As SWord
Dim tempa As SWord
Dim duty As Byte
Dim aux As Dword
  
 BASLA:
ADIn 0,HAM

BAK:
If ADCON0.2=1 Then BAK
DelayMS 5
 
GoSub HESAPV

ADIn 1,HAM

DelayMS 5
GoSub HESAPA
GoSub EKRAN
DelayMS 1500
GoTo BASLA
EKRAN:
GUC=GUCA*GUCV


Print At 1,10,"A=",Dec2 AMPER,".",Dec2 MA
Print At 1,1,"W=",Dec2 GUC    
          Return
Print At 2, 1, "ISI=:"
Print At 2, 9, "HIZ=:"         

 
  
 Do 
  
   analogdeg = ADIn 7 ' Gerilim ölçüm pini PORTE.2 LM 35 bagli. LM35 10 mv/C olacak sekilde çikis verirR
    aux = analogdeg * 500 / 1023
    temp = aux
       
    If temp <> tempu Then
        tempu = temp
        Print At 2, 5, SDec temp, "C "  
          
        
        Select Case temp
            Case < 40
                p = 0
            Case < 45
                p = 40
            Case < 50
                p = 50
            Case < 55
                p = 75
            Case Else
                p = 100
        End Select

        duty = 255 * p / 100

        
        If Abs(temp - tempa) > 1 And p <> pa Then
            pa = p
            tempa = temp
            Print At 2, 13, Dec p, "% "
            HPWM 1, duty, 5000 
             
           
       
        End If
    End If       
   Loop

 HESAPV:
HVD=((HAM+1)*/875)/10
VOLT=HVD/10
MV=(HVD)//10
GUCV=VOLT+(MV/100)
Return
HESAPA:
HVD=(HAM+1)*/250
AMPER=HVD/100
MA=HVD//100
GUCA=AMPER+(MA/100)
Return

 
End
      
   
  

End
 

pretous dosyası

ete

#1
Komutlar konusunda biraz zayıf olduğunu hissederek az bir şey ders vereyim istiyorum.

GOSUB xxxx komutu bir etikete gidilip oradan da mutlaka RETURN ile dönülmesi gereken bir komuttur.
Biz bu gidilen kısma Alt_Program diyoruz. Alt programlar hiç bir zaman ana programın içinde yer almamalıdır. Sende biraz öyle bir durum var.

İki Print komutunu aynı anda çalıştırmak istiyor isen EKRAN isimli alt programın aşağıdaki şekilde düzenlenmelidir.

    EKRAN:
    GUC=GUCA*GUCV      
    Print At 1,10,"A=",Dec2 AMPER,".",Dec2 MA
    Print At 1,1,"W=",Dec2 GUC    
    Print At 2, 1, "ISI=:"
    Print At 2, 9, "HIZ=:"              
Return

Bundan da önemlisi bu alt programdan sonra gelen ve "DO" ile başlayan ve "LOOP" komutuna kadar olan satırlar dizisi havada kalıyor. Bu nedenle oraya yani DO komutundan evvel bir Etiket adı vermen ve o kısmı bir alt program gibi çalıştırman gerekir. Ancak bu kısım öyle bir kısım ki program DO-LOOP arasına hapsedilmiş olacak ve programı başka bir yere yönlendirecek bir komut olmadığı için sonsuza dek program orada çalışır halde kalacaktır.
Bu nedenle en iyisi o kısmı (Do ve Loop arasını) alıp aşağıda işaret ettiğim kısma yerleştirmen daha uygun olacaktır.
    DelayMS 1500
         Do - Loop lar dahil arasındaki kodlar bu aralığa yerleştirilecek.
    GoTo BASLA

Bu işlemden sonra istediğini elde edebilirsin.
Sorunun alt programların arasına ana program bölümünü sokmuş olman. Yerlerini iyi ayarlamalısın.

Ete

feslegenli

Ete hocam çok teşekkür ederim akşam deneyecegim

feslegenli

Alıntı yapılan: ete - 27 Şubat 2024, 09:25:43Komutlar konusunda biraz zayıf olduğunu hissederek az bir şey ders vereyim istiyorum.

GOSUB xxxx komutu bir etikete gidilip oradan da mutlaka RETURN ile dönülmesi gereken bir komuttur.
Biz bu gidilen kısma Alt_Program diyoruz. Alt programlar hiç bir zaman ana programın içinde yer almamalıdır. Sende biraz öyle bir durum var.

İki Print komutunu aynı anda çalıştırmak istiyor isen EKRAN isimli alt programın aşağıdaki şekilde düzenlenmelidir.

    EKRAN:
    GUC=GUCA*GUCV      
    Print At 1,10,"A=",Dec2 AMPER,".",Dec2 MA
    Print At 1,1,"W=",Dec2 GUC    
    Print At 2, 1, "ISI=:"
    Print At 2, 9, "HIZ=:"              
Return

Bundan da önemlisi bu alt programdan sonra gelen ve "DO" ile başlayan ve "LOOP" komutuna kadar olan satırlar dizisi havada kalıyor. Bu nedenle oraya yani DO komutundan evvel bir Etiket adı vermen ve o kısmı bir alt program gibi çalıştırman gerekir. Ancak bu kısım öyle bir kısım ki program DO-LOOP arasına hapsedilmiş olacak ve programı başka bir yere yönlendirecek bir komut olmadığı için sonsuza dek program orada çalışır halde kalacaktır.
Bu nedenle en iyisi o kısmı (Do ve Loop arasını) alıp aşağıda işaret ettiğim kısma yerleştirmen daha uygun olacaktır.
    DelayMS 1500
         Do - Loop lar dahil arasındaki kodlar bu aralığa yerleştirilecek.
    GoTo BASLA

Bu işlemden sonra istediğini elde edebilirsin.
Sorunun alt programların arasına ana program bölümünü sokmuş olman. Yerlerini iyi ayarlamalısın.

Ete

olmadı ete hoca bir turlu olmuyor return kodunu yazınca lcd nin birinci stırı çalısıyor return kodunu silince lcd nin 2 satırı çalışıyor

alisumer

#4
Ekranın iki satır ise böyle yaz aynı adresi kullandıklarından ya birini ya diğerini yazmak zorunda zaten ilk hangisini yazacaksan onu çağır gerekli beklemeyi yap ekranı sil ve ikinci yazdıracağın kodu çağır ayrı ayrı çağır yani başarılar
GOSUB EKRAN
GOSUB EKRAN1
GOTO LOOP
EKRAN:
....
....
... 
RETURN
EKRAN1:
....
...
...
RETURN

Hep meraktan

ete

#5
Bütün kodu buraya koyman gerekir. Aksi halde diğer kısımları doğru yapıp yapmadığını anlayamam.
Olmuyor deme çünki mantığa aykırı. Her şey doğru ve olmuyor ise o zaman o derleyici yanlıştır.

Kodun tamamını koyarsan anlaşılacak.

Ete

Not: koyacağın kod aşağıdaki şekilde olmalı idi. Sen koymadın ben koyuyorum.

Device 16F877A
     Xtal = 4
Declare LCD_DTPin = PORTD.0
Declare LCD_ENPin PORTC.0
Declare LCD_RSPin PORTC.1
Declare LCD_RWPin PORTB.2
Declare LCD_Interface 4
Declare LCD_Lines 2
Declare Adin_Res 10
Declare Adin_Tad FRC
Declare Adin_Stime 50
ADCON1 = %10000000 ' PORTA ve PORTE analog ölçüm girisler aktif.
TRISA = %11111111   ' PORTA'nın tüm pinlerinin giriş 
TRISB = 0            'PORTB'nin tüm pinlerinin çıkış 
TRISC = 0             'PORTC'nin tüm pinlerinin çıkış
TRISD = 0              'PORTD'nin tüm pinlerinin çıkış
 
 
Dim VOLT As Word
Dim HAM As Word
Dim HVD As Word
Dim AMPER As Word
Dim MV As Byte
Dim MA As Byte
Dim GUC As Float
Dim GUCA As Float
Dim GUCV As Float
Dim p As Byte
Dim pa As Byte = 1
Dim analogdeg As Word
Dim temp As SWord
Dim tempu As SWord
Dim tempa As SWord
Dim duty As Byte
Dim aux As Dword
  
BASLA:
      ADIn 0,HAM
 
BAK:
    If ADCON0.2=1 Then BAK
    DelayMS 5
 
    GoSub HESAPV
 
    ADIn 1,HAM
 
    DelayMS 5
    GoSub HESAPA
    GoSub EKRAN
    DelayMS 1500
    
    Do   
      analogdeg = ADIn 7 ' Gerilim ölçüm pini PORTE.2 LM 35 bagli. LM35 10 mv/C olacak sekilde çikis verirR
      aux = analogdeg * 500 / 1023
      temp = aux
       
       If temp <> tempu Then
         tempu = temp
        Print At 2, 5, SDec temp, "C "            
                
        Select Case temp
            Case < 40
                p = 0
            Case < 45
                p = 40
            Case < 50
                p = 50
            Case < 55
                p = 75
            Case Else
                p = 100
        End Select
 
        duty = 255 * p / 100
 
        
        If Abs(temp - tempa) > 1 And p <> pa Then
            pa = p
            tempa = temp
            Print At 2, 13, Dec p, "% "
            HPWM 1, duty, 5000 
        End If
     End If       
     Loop    
    GoTo BASLA

EKRAN:
      GUC=GUCA*GUCV
 
      Print At 1,10,"A=",Dec2 AMPER,".",Dec2 MA
      Print At 1,1,"W=",Dec2 GUC              
      Print At 2, 1, "ISI=:"
      Print At 2, 9, "HIZ=:"         
      RETURN
         
 
HESAPV:
HVD=((HAM+1)*/875)/10
VOLT=HVD/10
MV=(HVD)//10
GUCV=VOLT+(MV/100)
Return
HESAPA:
HVD=(HAM+1)*/250
AMPER=HVD/100
MA=HVD//100
GUCA=AMPER+(MA/100)
Return
 
End

feslegenli

Alıntı yapılan: ete - 27 Şubat 2024, 16:16:08Bütün kodu buraya koyman gerekir. Aksi halde diğer kısımları doğru yapıp yapmadığını anlayamam.
Olmuyor deme çünki mantığa aykırı. Her şey doğru ve olmuyor ise o zaman o derleyici yanlıştır.

Kodun tamamını koyarsan anlaşılacak.

Ete

Not: koyacağın kod aşağıdaki şekilde olmalı idi. Sen koymadın ben koyuyorum.

Device 16F877A
     Xtal = 4
Declare LCD_DTPin = PORTD.0
Declare LCD_ENPin PORTC.0
Declare LCD_RSPin PORTC.1
Declare LCD_RWPin PORTB.2
Declare LCD_Interface 4
Declare LCD_Lines 2
Declare Adin_Res 10
Declare Adin_Tad FRC
Declare Adin_Stime 50
ADCON1 = %10000000 ' PORTA ve PORTE analog ölçüm girisler aktif.
TRISA = %11111111   ' PORTA'nın tüm pinlerinin giriş 
TRISB = 0            'PORTB'nin tüm pinlerinin çıkış 
TRISC = 0             'PORTC'nin tüm pinlerinin çıkış
TRISD = 0              'PORTD'nin tüm pinlerinin çıkış
 
 
Dim VOLT As Word
Dim HAM As Word
Dim HVD As Word
Dim AMPER As Word
Dim MV As Byte
Dim MA As Byte
Dim GUC As Float
Dim GUCA As Float
Dim GUCV As Float
Dim p As Byte
Dim pa As Byte = 1
Dim analogdeg As Word
Dim temp As SWord
Dim tempu As SWord
Dim tempa As SWord
Dim duty As Byte
Dim aux As Dword
  
BASLA:
      ADIn 0,HAM
 
BAK:
    If ADCON0.2=1 Then BAK
    DelayMS 5
 
    GoSub HESAPV
 
    ADIn 1,HAM
 
    DelayMS 5
    GoSub HESAPA
    GoSub EKRAN
    DelayMS 1500
    
    Do   
      analogdeg = ADIn 7 ' Gerilim ölçüm pini PORTE.2 LM 35 bagli. LM35 10 mv/C olacak sekilde çikis verirR
      aux = analogdeg * 500 / 1023
      temp = aux
       
       If temp <> tempu Then
         tempu = temp
        Print At 2, 5, SDec temp, "C "            
                
        Select Case temp
            Case < 40
                p = 0
            Case < 45
                p = 40
            Case < 50
                p = 50
            Case < 55
                p = 75
            Case Else
                p = 100
        End Select
 
        duty = 255 * p / 100
 
        
        If Abs(temp - tempa) > 1 And p <> pa Then
            pa = p
            tempa = temp
            Print At 2, 13, Dec p, "% "
            HPWM 1, duty, 5000 
        End If
     End If       
     Loop    
    GoTo BASLA

EKRAN:
      GUC=GUCA*GUCV
 
      Print At 1,10,"A=",Dec2 AMPER,".",Dec2 MA
      Print At 1,1,"W=",Dec2 GUC              
      Print At 2, 1, "ISI=:"
      Print At 2, 9, "HIZ=:"         
      RETURN
         
 
HESAPV:
HVD=((HAM+1)*/875)/10
VOLT=HVD/10
MV=(HVD)//10
GUCV=VOLT+(MV/100)
Return
HESAPA:
HVD=(HAM+1)*/250
AMPER=HVD/100
MA=HVD//100
GUCA=AMPER+(MA/100)
Return
 
End
merhaba ete hoam sizin gönderdiginiz koddada aynısı oluyor ekranın 2 satırındaki ısı ve fan hızı kısmı çalışıyor fakat ekranın 1 satırındaki watt ve amper kısmı gene çalışmıyor

ete

LCD fiziksel olarak sağlam ise bu kodların çalışması gerekir idi.
LCD nin sağlam olduğunu varsayarak programa odaklanıyorum ve LCDE tanımlamalarında kusur olabileceğini düşünüyorum.

Bu nedenle mevcut LCD tanımlamalarını silip yerine,
    LCD_DTPin       =PORTD.0
    LCD_RSPin       =PORTC.1
    LCD_ENPin       =PORTC.0
    LCD_RWPin       =PORTB.2
    LCD_INTERFACE   =4       
    LCD_Lines       =2       
    LCD_TYPE        =0
    LCD_CommandUs   =2000
    LCD_DataUs      =50	
kodlarını eklemeni ve tekrar denemeni istiyorum. Bakalım farkeden bir şey olacakmıdır.

Normal şartlarda Proton derleyici kullanmıyorum. Bu nedenle komutlara çok hakim değilim.
Olaya mantıksal yaklaşıyorum.

Ete

feslegenli

Alıntı yapılan: ete - 27 Şubat 2024, 23:38:08LCD fiziksel olarak sağlam ise bu kodların çalışması gerekir idi.
LCD nin sağlam olduğunu varsayarak programa odaklanıyorum ve LCDE tanımlamalarında kusur olabileceğini düşünüyorum.

Bu nedenle mevcut LCD tanımlamalarını silip yerine,
    LCD_DTPin       =PORTD.0
    LCD_RSPin       =PORTC.1
    LCD_ENPin       =PORTC.0
    LCD_RWPin       =PORTB.2
    LCD_INTERFACE   =4       
    LCD_Lines       =2       
    LCD_TYPE        =0
    LCD_CommandUs   =2000
    LCD_DataUs      =50	
kodlarını eklemeni ve tekrar denemeni istiyorum. Bakalım farkeden bir şey olacakmıdır.

Normal şartlarda Proton derleyici kullanmıyorum. Bu nedenle komutlara çok hakim değilim.
Olaya mantıksal yaklaşıyorum.

Ete
ete hocam bu kodları poteus da denemesini yapıyorum 
gene aynı çalışmadı

Pepe


feslegenli

Alıntı yapılan: Pepe - 28 Şubat 2024, 01:58:47proteus
PEPE hocam allah razı olsun ayrıyeten ETE hocamada teşekkur ederim iyiki varsınız

Pepe

#11
Proteus 16f887

Pepe

Tekrar yükle Lcd_prog.zip

Pepe

;-------------------------------------------------------------------------------
;**** Added by Fuse Configurator ****
; Use the Fuse Configurator plug-in to change these settings

Device = 16F887
Xtal = 20

Config1 FOSC_HS, WDTE_OFF, PWRTE_OFF, MCLRE_OFF, CP_ON, CPD_OFF, BOREN_OFF, IESO_OFF, FCMEN_OFF, LVP_OFF, DEBUG_OFF
Config2 BOR4V_BOR40V, WRT_OFF

;**** End of Fuse Configurator Settings ****
;-------------------------------------------------------------------------------
 All_Digital TRUE

Declare Create_Coff On
Declare Bootloader off
Declare Watchdog off
Declare Float_Display_Type = Fast

Declare Reminders Off
Declare Hints Off

Declare LCD_DTPin PORTD.4
Declare LCD_ENPin PORTD.3
Declare LCD_RSPin PORTD.2
Declare LCD_RWPin PORTD.1
Declare LCD_Interface 4
Declare LCD_Lines 2
Declare LCD_Type  0


Declare Adin_Res 10
Declare Adin_Tad FRC
Declare Adin_Stime 50


ADCON1 =%10000000        ' PORTA'nýn dijital giriþ olarak ayarlanmasý  
ANSEL=%00000011
ANSELH=0	 

TRISA = %00000011 ; PORTA'nýn tüm pinleri giriþ olarak ayarlanýr
TRISB = %11111111 ; PORTB'nin tüm pinleri giriþ olarak ayarlanýr 
TRISC = %00000000 ; PORTC'nin tüm pinleri çýkýþ olarak ayarlanýr
TRISD = %00000000 ; PORTD'nin tüm pinleri çýkýþ olarak ayarlanýr

PORTB=1
PORTA=1


Dim VOLT As Word
Dim HAM As Word
Dim HVD As Word
Dim AMPER As Word
Dim MV As Byte      
Dim MA As Byte
Dim GUC As Float
Dim GUCA As Float
Dim GUCV As Float
Dim p As Byte
Dim pa As Byte = 1
Dim analogdeg As Word
Dim temp As SWord
Dim tempu As SWord = 1
Dim tempa As SWord
Dim duty As Byte
Dim aux As Dword

  
Print At 1,1,"W="
Print At 1,10,"A="

Print At 2,1,"ISI="
Print At 2,9,"HIZ=:"


Do
ADIn 0,HAM
GoSub HESAPV
ADIn 1,HAM
GoSub HESAPA
GoSub EKRAN
Loop
 
  
EKRAN:
GUC=GUCA*GUCV
 
Print At 1,12,Dec2 AMPER,".",Dec2 MA
Print At 1,3,Dec2 GUC
     

analogdeg=ADIn 13   'Gerilim ölçüm pini PORTb.13 LM 35 bagli. LM35 10 mv/C olacak sekilde çikis verir
aux = analogdeg * 500/1023
temp= aux  
    
If temp <> tempu Then
                      tempu = temp
                      Print At 2,5,SDec temp ,"C "

                      Select Case temp
      
                        Case < 40
                           p = 0
                        Case < 45
                           p = 40
                        Case < 50
                           p = 50
                        Case < 55
                           p = 75
                        Case Else
                           p = 100
                      End Select
               
                      duty = 255* p/100
    
                      If Abs(temp - tempa)> 1 And p <> pa Then
                                                                pa = p
                                                                tempa = temp
                                                                Print At 2,13,Dec p ,"% "
                                                                HPWM 1, duty,5000
                                                                
                                                                
  
                                                               
                      EndIf
EndIf
     
     
If temp>40  Then High PORTE.0  ' sýcaklýk 22 derecenin üzerinde olursa portcnin 6.  pinini aktif '
If temp<40 Then Low PORTE.0   ' sýcaklýk 22 derecenin altýnda olursa portc 6 pini kapalý ' 
If temp<40  Then High PORTE.1  ' sýcaklýk 22 derecenin üzerinde olursa portcnin 6.  pinini aktif '
If temp>40 Then Low PORTE.1   ' sýcaklýk 22 derecenin altýnda olursa portc 6 pini kapalý '  

Return
 
HESAPV:
HVD=((HAM+1)*/875)/10
VOLT=HVD/10
MV=(HVD)//10
GUCV=VOLT+(MV/100)
Return
HESAPA:
HVD=(HAM+1)*/250
AMPER=HVD/100
MA=HVD//100
GUCA=AMPER+(MA/100)
   
Return   
 
End
 


feslegenli

merhabalar degerli ustalarım aşagıdaki kodu hasbel kader hazırlamaya çalıştım pic16f887 de kullanmak için de sizden ricam kodları kontrol edermisiniz bi eksigimiz yanlışımız varmı
birde proteus similasyonda devre gecikmeli çalışıyor bu normalmı
çevaplarınız için şimdiden teşekkğr ederim

;-------------------------------------------------------------------------------
;**** Added by Fuse Configurator ****
; Use the Fuse Configurator plug-in to change these settings

Device = 16F887
Declare Xtal=20




;**** End of Fuse Configurator Settings ****
;-------------------------------------------------------------------------------
 All_Digital TRUE

Declare Create_Coff On
Declare Bootloader off
Declare Watchdog off
Declare Float_Display_Type = Fast

Declare Reminders Off
Declare Hints Off

Declare LCD_DTPin PORTD.4
Declare LCD_ENPin PORTD.3
Declare LCD_RSPin PORTD.2
Declare LCD_RWPin PORTD.1
Declare LCD_Interface 4
Declare LCD_Lines 2
Declare LCD_Type  0


Declare Adin_Res 10
Declare Adin_Tad FRC
Declare Adin_Stime 50


ADCON1 =%10000000        ' PORTA'nın dijital giriş olarak ayarlanması  
 ANSEL=%00000011
ANSELH=0	 

TRISA = %00000011 ; PORTA'nın tüm pinleri giriş olarak ayarlanır
TRISB = %11111111 ; PORTB'nin tüm pinleri giriş olarak ayarlanır 
TRISC = %00000000 ; PORTC'nin tüm pinleri çıkış olarak ayarlanır
TRISD = %00000000 ; PORTD'nin tüm pinleri çıkış olarak ayarlanır
TRISD = %00000000 ; PORTD'nin tüm pinleri çıkış olarak ayarlanır
PORTB=1
PORTA=1
VOLT=0


Dim VOLT As Word
Dim HAM As Word
Dim HVD As Word
Dim AMPER As Word
Dim MV As Byte      
Dim MA As Byte
Dim GUC As Float
Dim GUCA As Float
Dim GUCV As Float
Dim p As Byte
Dim pa As Byte = 1
Dim analogdeg As Word
Dim temp As SWord
Dim tempu As SWord
Dim tempa As SWord
Dim duty As Byte
Dim aux As Dword

  
 Print At 1,1,"W="
 Print At 1,10,"A="

Print At 2,1,"ISI="
Print At 2,9,"HIZ=:"

 
BASLA:
ADIn 0,HAM
BAK:
If ADCON0.2=1 Then BAK
DelayMS 5
GoSub HESAPV
ADIn 1,HAM
DelayMS 5
GoSub HESAPA
GoSub EKRAN
DelayMS 1500
GoTo BASLA
 
  
EKRAN:
GUC=GUCA*GUCV
 
Print At 1,12,Dec2 AMPER,".",Dec2 MA
Print At 1,3,Dec2 GUC
     
      

  analogdeg=ADIn 13   'Gerilim ölçüm pini PORTb.13 LM 35 bagli. LM35 10 mv/C olacak sekilde çikis verir
aux = analogdeg * 500/1023
temp= aux  
    
 If temp <> tempu Then
                      tempu = temp
                      Print At 2,5,SDec temp ,"C "

                      Select Case temp
      
                        Case < 40
                           p = 0
                        Case < 45
                           p = 40
                        Case < 50
                           p = 50
                        Case < 55
                           p = 75
                        Case Else
                           p = 100
                      End Select
               
                      duty = 255* p/100
    
                      If Abs(temp - tempa)> 1 And p <> pa Then
                                                                pa = p
                                                                tempa = temp
                                                                Print At 2,13,Dec p ,"% "
                                                                HPWM 1, duty,5000
                                                                
                                                                
  
                                                               
                      EndIf
 EndIf
     
  
   Return
 
 GoTo BASLA 
 HESAPV:
HVD=((HAM+1)*/875)/10
VOLT=HVD/10
MV=(HVD)//10
GUCV=VOLT+(MV/100)
Return
HESAPA:
HVD=(HAM+1)*/250
AMPER=HVD/100
MA=HVD//100
GUCA=AMPER+(MA/100)
 
   
Return   
 
End
 
  

 


Powered by EzPortal