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