Proton 3.5.1.2 Version problemleri

Başlatan pcb, 03 Mart 2011, 07:42:49

pcb

Merhaba arkadaşlar
yeni versiyon proton 3.5.1.2 yükledim , daha önce 12F675 için 3.5.4.8 versiyon ile yazılı programı tekrar compile ettiğimde işlemci hafızası için programın bir kısmının silinmesi gerektiği uyarısını verdi , neyse program tekrar düzenlendi-küçültüldü işlemciye yüklendi ama port ayarlarında sorun var, I/O olarak ayarlanan pin sanki seri iletişim için portlar hiç tanımlanmamış gibi default porttan clock sinyalini gönderiyor.

Eski versiyon a 3.5.0.8 i geri yüklediğimde sorunlar düzeldi.

bu versiyonu kullanırsanız temkinli yaklaşın

Maxim

fuse ve config ayarlarını alabilirmiyim ? ben de deneyeyim 12F675 üzerinde

pcb

Device=12F675
Set_OSCCAL            
Config MCLRE_OFF,BODEN_Off,CP_OFF,CPD_OFF,INTRC_OSC_NOCLKOUT,PWRTE_OFF, WDT_OFF
'BODEN  , VDD GERİLİMİ DÜŞERSE RESETLE

Declare Adin_Res	10
Declare Adin_Tad	FRC					'CLK options are 0, 1, 2, 3 (0-2 are based on internal cycles)
Declare Adin_Stime	50

'//////////////I2C//////////////////
Declare SDA_Pin GPIO.4 ' Alias the SDA (Data) line
Declare SCL_Pin GPIO.5 ' Alias the SCL (Clock) line
Input    GPIO.4
Input    GPIO.5
'Dim PP4 As Byte System ' Bring the system variable into the BASIC program
'////////////////////////////////////

Symbol ANS0 = ANSEL.0   ' Analog Selection bit
ANS0    =   1           'AN0 ANALOG OKUMA YA AYARLI
Symbol ADFM = ADCON0.7
ADFM    =   1           'A/D Result Formed Select bit 1 = Right justified
Symbol VCFG = ADCON0.6
VCFG    =   0           'Voltage Reference bit 1 = VREF pin 0 = VDD

Symbol GP5 = GPIO.5       ' Bi-directional I/O pin (with interrupt-on-change)
Symbol GP4 = GPIO.4       ' Bi-directional I/O pin (with interrupt-on-change)
Symbol GP2 = GPIO.2


Symbol AN0 = GPIO.0       ' AN A/D Channel 0 input

Symbol GP1 = GPIO.1       ' Bi-directional I/O pin (with wake up on change)


GP5 =   1
GP4 =   1
GP2 =   1
GP1 =   1

AN0 =   1

pcb

ADC okumada da problem olduğunu düşünüyorum çünkü seri bağlı lityum piller için yazdığım programda gereksiz balans yapmaya çalışıyordu. Buda yalnış ADC okumasından kaynaklanıyor, Kart çok ısındı, ciddi projelerde sakıncalı bir durum

Maxim

tam olarak "pin pin" yazarmısınız
bu derleme sonucunda nasıl olmalıydı, ne oluyor ?
hemen deneme yapıcam, söylediğin gibi oluyorsa kötü

Maxim

yanlız bu kodda ne trisio ne ansel tanımları yapılmamış ?

pcb

önce adc okuması bir değeri aştığında GPIO.1 high durumunda, 1 olduktan sonra I2C iletişime geçtiğinde aşağıdaki döngü ile iletişim kuruluyor.

    BStart
    BusOut %01010000                    'yaz
    'If PP4.0 = 1 Then GoTo NACK_ERROR
    BusOut REG_Add                      'adres   
    'If PP4.0 = 1 Then GoTo NACK_ERROR 
    BusOut  REG_Data                    'data
    'If PP4.0 = 1 Then GoTo NACK_ERROR
    BStop

bu döngüye girdiğinde GPIO.1 low a geçiyor. Halbuki seri iletişimin GPIO.1 ile alakası yok.

pcb

#7
Ansel için sadece GPIO.0 portunun ADC için ayarladım, diğerleri I/O

GPIO.1 için (with wake up On change) diye bir durum var , pin 1/0-0/1 değişimi olduğunda uyan diye ama uyku durumunda değil işlemci

Hadi yazılımda hata yaptım diğer işlemci kapasitesi farklılığı da enteresan

Maxim

#8
hata var demedim, yanlış anlama olmasın
ama merak ettim gerçekten

böyle sonuca ulaşamayız, sizin kullandığınız programla test etmek zorunda değiliz aslında
şöyle yapınca bu olmaması lazım dediğimiz bir kod yokmu ?
yani siz giriş ayarladınız, adc okuma yaptınız , orası çıkış oldu aniden ?? gibi

ayrıca versiyonlar arasında derleme sonucunda boyut farkı hep oluyor
büyük boyutlu derleme onun daha kötü olduğunu göstermiyor, belki çok daha sağlam çalışacak ? diye düşünüyorum ben

edit:
şu an bende bunların hepsi yüklü, tek tek deneyebiliriz.
3.5.1.2
3.4.0.8
3.2.5.5

pcb

ben daha küçük boyutlu bir şeyler yazayım hatanın görülebileceği gibi

Maxim

Alıntı yapılan: pcb - 03 Mart 2011, 10:00:30
ben daha küçük boyutlu bir şeyler yazayım hatanın görülebileceği gibi

yoğunmusun?
bekliyorum ilgili bir kod.
selam

pcb

kusura bakmayın dün yazdım ama yayınlayamadım,
evet hata benim yazdığımda, 3.5.4.8 de yazdığım 12F675 için kapasitesi uygun olan program 3.5.1.2 de işlemci belleği yetersiz diye ikaz edince;
       
        ADFM    =   1   'A/D Result Formed Select bit 1 = Right justified
        VCFG    =   0   'Voltage Reference bit 1 = VREF pin 0 = VDD
        CHS1    =   0   'AN0 AYARLI
        CHS0    =   0
        ANS0    =   1   'AN0 ANALOG OKUMA YA AYARLI
        ANS1    =   0
        ANS2    =   0
        ANS3    =   0
        Symbol GP1 = GPIO.1
        GP1 =   1

yukarıda üzeri çizili olanları sildim ve bir led e bağlı olan GPIO.1 portunu sadece aşağıdaki gibi GP1 I/O olarak ayarladığıma güvendim, AN1 = 0 eklediğimde GIO.1 I/O port olarak çalışıyor.

       Symbol GP1 = GPIO.1
        GP1 =   1
       
       Farklı verssiyonlarda işlemcilerin kapasitelerini farklı uygulaması çok garip

Maxim

tamam kolay gelsin o zaman..

bu üretilen kodların versiyonlar arasındaki farkı dediğim gibi ben olumlu olarak düşünüyorum
şöyleki , biliyoruzki komutların aslında altında yatan bilmem ne asm kodları var
yani biz print deyince onun bilmem kaç satırlık bir temel kodu var .
adam, bu kodlarda iyileştirme yapıyor olabilir, belki o yüzden ufak tefek büyümeler oluyor.

mesela yukarıda verdiğin örnek kodu bendeki 3 versiyonda derlediğimde
sırasıyla (not almıştım şimdi tam hatırlamıyorum)
en eski versiyon 17 word yer kaplamıştı
bir sonraki 18 word
son versiyon ise 19 word yer işgal etti işlemci üzerinde

t2