derleyici versiyonu hatası

Başlatan onurinci, 10 Aralık 2022, 13:24:18

onurinci

Yıllar evvel Picproje'den Maxiboost ricam üzerine bu Proton programını yazmıştı,Picproje'nin açıldığı aydan beri üyesiyim,genel terbiyesizlik üzerine ayrıldım,bana bir form örneğini doldurmam gerektiğini zorladılar,benim için etik değildi.beni 25 yıldır tanımadıysan birdahada tanıyamazsın ilkesiyle ayıpsız haragürelesiz.seviyeli bir şekilde kendi rızam ile ayrıldım.fakat Eray'ada mesaj yazamadım bu durumda.benim için yazdığı programda bir Bar değişikliği yapmam gerekti.daha evvel kusursuzca derlediğim program    Case < 10.0   : Print Dec2 FLD0, " Volt","   "  satırına olumsuz cevabı veriyor.yıllar geçtiği için versiyor farkına yordum. acaba ne değişmiş olabilir diye merak ediyorum sevgiler..
Device 16F876
Declare Xtal 4

Declare LCD_DTPin	PORTC.4
Declare	LCD_RSPin	PORTC.1
Declare	LCD_ENPin	PORTC.0
Declare	LCD_Interface	4
Declare	LCD_Lines	2
DelayMS 200 

Adin_Res = 10 			
Adin_Tad = FRC 			
Adin_Stime = 50 			

Dim ADC_KANAL1      As Float              
Dim Fullbars 	    As Byte			
Dim Barval 		    As Byte				
Dim Partbar 	    As Byte				
Dim Pad 		    As Byte				       
Dim TEMP1           As Byte    
Dim W1              As Word       
Dim W2              As Float        
Dim FLD0            As Float            
Dim OLCUM_VOLTAJI   As 30        
Dim ADC_ORNEKSAYISI As 50

GoTo RESET_VECTOR

PRJ_LOOP:
Asm
    Nop
    Nop
    Clrwdt
    Nop
    Nop
EndAsm
Call    ADC_OKU
DelayMS 1
GoTo PRJ_LOOP

RESET_VECTOR:
Asm
    Bcf	    INTCON,GIE
    Btfsc   INTCON,GIE
    GoTo    RESET_VECTOR
EndAsm

DelayMS 1000
    
TRISA=%11111111
ADCON1=%10000000
INTCON=%00100000
    
Print $fe,$2
Print " 0-30 Voltmetre"
DelayMS 1500
Print $FE,$C0
Print "  elektro ERAY"    
DelayMS 500
Cls
        
Print $FE,64,Rep $0\8	
Print $0,Rep $10\6,$0	
Print $0,Rep $14\6,$0	
Print $0,Rep $15\6,$0		
	    
Cls
	    
TEMP1=ADC_ORNEKSAYISI
    
ADC_KANAL1=0 
    
GoTo PRJ_LOOP

ADC_OKU:
ADC_OKU_1:    

ADCIN 0,W1
ADC_KANAL1=ADC_KANAL1+W1 
    
TEMP1=TEMP1-1
If TEMP1>0 Then Return 
	
ADC_KANAL1=ADC_KANAL1/ADC_ORNEKSAYISI
		
W2=OLCUM_VOLTAJI        
W2=W2/1023
           
ADC_KANAL1=ADC_KANAL1*W2 
        
Call EKRANI_YAZ

TEMP1=ADC_ORNEKSAYISI
ADC_KANAL1=0
	               
Return

EKRANI_YAZ:

FLD0=ADC_KANAL1
Print $FE, $82
Print "DC "
GoSub DEC_FLD0
        
Barval = (FLD0 /0.55) + 1	
GoSub Bargraph	    

DEC_FLD0:
    Select FLD0  
    Case < 10.0   : Print Dec2 FLD0, " Volt","   " 
    Case < 100.0  : Print Dec2 FLD0, " Volt","  " 
    Case < 1000.0 : Print Dec2 FLD0, " Volt"," " 
    Case Else     : Print Dec2 FLD0, " Volt","" 
    EndSelect 
Return

Bargraph:
Select Barval
    Fullbars = (Barval Min 60) / 3
    Partbar = (Barval Min 60) // 3		 
    Pad = 19 - Fullbars			
    Print $FE, $C0 
    Print Rep $03\Fullbars, Partbar, Rep " "\Pad	
EndSelect
Return
End
                           

dnaci

Öncelikle geçmiş olsun picproje kan kaybediyor. Bu şekilde kullanırsanız sorun olmaz 3.5.8.1 versiyonu manualde case kullanımı örneği böyle:

    Select FLD0  
    Case < 10.0   
    Print Dec2 FLD0, " Volt","   " 
    Case < 100.0  
    Print Dec2 FLD0, " Volt","  " 
    Case < 1000.0 
    Print Dec2 FLD0, " Volt"," " 
    Case Else     
    Print Dec2 FLD0, " Volt","" 
    EndSelect

onurinci

çok teşekkür ederim sıkıntı çıkaran satırı geçti..biraz alltaki satırları beğenmedi.

Fullbars = (Barval Min 60) / 3 gibi yanlış parametre girdiniz diyor..

dnaci

#3
Durum şimdi kötüleşti. Proton manuelde min komutundan bahsedilmiyor. Sizde hangi proton versiyonu var. En son sürümü indirmenizi tavsiye ederim bendeki de eski sürümlerden.

Ancak amicus proton 2010 manuelinde min komutu var, kod kullanım doğru ve zaten eski sürümde derlendiğinden bahsetmiştiniz. Demek ki min komutunun başına bişey gelmiş :-) proton forumundan destek alabilirsiniz Les yeni sürüm çıkarttı belki onda bu sorun yoktur.

Min komutu eşitlenen değişkenin değerinin 60'ı geçmemesini sağlıyor burada. Başka kodlama yöntemiyle min komutuna ihtiyaç ortadan kaldırılabilir belki.

Üst versiyon proton basic derleyicilerini linkten indirip deneyebilirsinz:

https://www.elektroinfo.org/2010/02/proton-ide-programi-ve-kullanim.html



dnaci

#4
@onurinci kodu deneyebilirmisiniz sorunlu kodun olduğu etikette düzenleme yaptım ve adc bildirimleri başına Declare ekledim  kod sorunsuz derleniyor.

Device 16F876
Declare Xtal 4
 
Declare LCD_DTPin	PORTC.4
Declare	LCD_RSPin	PORTC.1
Declare	LCD_ENPin	PORTC.0
Declare	LCD_Interface	4
Declare	LCD_Lines	2
DelayMS 200 
 
Declare Adin_Res = 10 			
Declare Adin_Tad = FRC 			
Declare Adin_Stime = 50 			
 
Dim ADC_KANAL1      As Float              
Dim Fullbars 	    As Byte			
Dim Barval 		    As Byte				
Dim Partbar 	    As Byte				
Dim Pad 		    As Byte				       
Dim TEMP1           As Byte    
Dim W1              As Word       
Dim W2              As Float        
Dim FLD0            As Float            
Dim OLCUM_VOLTAJI   As 30        
Dim ADC_ORNEKSAYISI As 50
 
GoTo RESET_VECTOR
 
PRJ_LOOP:
Asm
    Nop
    Nop
    Clrwdt
    Nop
    Nop
EndAsm
Call    ADC_OKU
DelayMS 1
GoTo PRJ_LOOP
 
RESET_VECTOR:
Asm
    Bcf	    INTCON,GIE
    Btfsc   INTCON,GIE
    GoTo    RESET_VECTOR
EndAsm
 
DelayMS 1000
    
TRISA=%11111111
ADCON1=%10000000
INTCON=%00100000
    
Print $fe,$2
Print " 0-30 Voltmetre"
DelayMS 1500
Print $FE,$C0
Print "  elektro ERAY"    
DelayMS 500
Cls
        
Print $FE,64,Rep $0\8	
Print $0,Rep $10\6,$0	
Print $0,Rep $14\6,$0	
Print $0,Rep $15\6,$0		
	    
Cls
	    
TEMP1=ADC_ORNEKSAYISI
    
ADC_KANAL1=0 
    
GoTo PRJ_LOOP
 
ADC_OKU:
ADC_OKU_1:    
 
ADCIN 0,W1
ADC_KANAL1=ADC_KANAL1+W1 
    
TEMP1=TEMP1-1
If TEMP1>0 Then Return 
	
ADC_KANAL1=ADC_KANAL1/ADC_ORNEKSAYISI
		
W2=OLCUM_VOLTAJI        
W2=W2/1023
           
ADC_KANAL1=ADC_KANAL1*W2 
        
Call EKRANI_YAZ
 
TEMP1=ADC_ORNEKSAYISI
ADC_KANAL1=0
	               
Return
 
EKRANI_YAZ:
 
FLD0=ADC_KANAL1
Print $FE, $82
Print "DC "
GoSub DEC_FLD0
        
Barval = (FLD0 /0.55) + 1	
GoSub Bargraph	    
 
DEC_FLD0:
    Select FLD0  
    Case < 10.0   
    Print Dec2 FLD0, " Volt","   " 
    Case < 100.0  
    Print Dec2 FLD0, " Volt","  " 
    Case < 1000.0 
    Print Dec2 FLD0, " Volt"," " 
    Case Else     
    Print Dec2 FLD0, " Volt","" 
    EndSelect 
Return
 
Bargraph:
Select Barval
    Fullbars = Barval / 3
    If Fullbars >= 61 Then Fullbars = 60 
    Partbar = Barval // 3
    If Partbar >= 61 Then Partbar = 60 		 
    Pad = 19 - Fullbars			
    Print $FE, $C0 
    Print Rep $03\Fullbars, Partbar, Rep " "\Pad	
EndSelect
Return
End


onurinci




sonsivriden indirmiştim. bu program hariç yüze yakın eski topladığım arşive sadece Declare ve Xtal = 4 yazarak sorunumu çözmüştüm.ilk defa 64bit makinam oldu yeni şeylere alışık değilim.her yenilik yeni sorunlarıda beraberinde getiriyor.sizde derlendiğine göre kullandığım program kullanışlı değilmiş onu anladım.bende derlenmedi ASM GIE hatası verdi..

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

onurinci

Reset vector ASM macrosunu iptal edersem derleniyor LCD'de çalışıyor ama ADC'ye tepki vermiyor.bir anlam veremedim bu programda merak iki katı arttı..

onurinci

@mehmet hocam bingo...!  @dnaci yüreğinize klavyenize sağlık..

dnaci

@onurinci önemli değil. 0-30 volt ölçümü için adc girişinde gerilim bölücü dirençmi kullandınız.

onurinci

evet .en zor kısım burasıydı.öyle potansiyometre ile olmadı.alt kısmı ayarlasanız üst kısım tutmuyordu.ama en doğrusu oraya bir Opamp feda etmekti .zira gerilim bölücü dirençler ADC port'tunun empedansınıda bozuyordu.şu an dirençlerin değerini hatırlamıyorum.yine Picprojeden Bunalmış hesaplamıştı.

Powered by EzPortal