628a dan 648a ya göç edemiyorum.

Başlatan erhanzeynel, 05 Ekim 2012, 20:31:29

erhanzeynel

Merhabalar.
Yaptığım bir programda 16f628a nın hafızasını doldurmayı başardım. Daha ekleyeceklerim olduğu için 16f648a ya göç etmek zorundayım.

program, mcsp den 16f628a işlemcisini seçip derlediğimde proteusta doğru çalışıyor. hatta bu hex dosyasını proteusta 16f648a ya yüklesem de düzgün çalışıyor.

Ama mcsp den 16f648a işlemcisini seçip derlediğimde aynı program anormal çalışıyor, isisten, "lcd işlemcisi meşgulken bilgi gönderildi" anlamında uyarı geliyor. LCD de bozuk karakter yok.

program ete hocamızın sht11 programı temeline kurulu ve hata da buradaki bir komutta gerçekleşiyor.

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 SENYOK
        NEXT W
        HATA=1
SENYOK:  IF HATA=1 then 
         gosub SENSORYOK


sht11 DTA bacağını 0'a çekmesine ramen, program "sensör yok" hata mesajını lcd ye yansıtıyor.

derlerken denetleyiciyi 16f628a seçtiğimde ne lcd meşgulken komut gönderme ne de sensör yok hatası oluşmuyor.   

Bu arada kullandığım programlar;

PBP 2.60A - mcsp 2.3  Ayrıca programda assembly dilinde kesme kullandığım için derlemede mpasm kullanıyorum.

Konfigürasyon bitlerim de şu şekilde.
@ __CONFIG _WDT_OFF & _PWRTE_ON  & _CP_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF

;@ DEVICE pic16F648A
;@ DEVICE pic16F648A, WDT_ON
;@ DEVICE pic16F648A, PWRT_ON
;@ DEVICE pic16F648A, PROTECT_OFF
;@ DEVICE pic16F648A, MCLR_OFF
;@ DEVICE pic16F648A, INTRC_OSC_NOCLKOUT

DEFINE OSC 4
DEFINE LCD_DREG PORTA
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 6
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 7
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE INTHAND KESME      'ASSEMBLER KESME ALT PROGRAMININ ADI KESME

erhanzeynel

Evet arkadaşlar, hatayı çözemeyince pic basic 3.0 a terfi ettim.
sonuç ; lcd meşgulken data ve komut gönderildi hataları kesildi.
sht11 okuyamama devam ediyor.

Artık proteusun model dosyasından şüphelenmeye başladım. Elimde 16f648a olmadığından devre uygulansa sonuç ne olacak bilemiyorum.

Arkadaşlar; pic 16f648a ile daha önce çalışmış olanınız, 2kw üstünde hex atmış olanınız yok mu?

OG

64 bit sebebiyle PBP kullanamıyorum ama en ufak birşeye ihtiyaç olmadan 628A dan 648A ya gecebilmen lazım. Çünkü yazılımda isim değiştirmekten başka yapacağın herşey birebir aynı.
Tek uyarı alırsın Branch kullanırsan BranchL yap der, aynı şekilde Lookup yerine LookupL yap der gibi. Bunlar da önemli değil.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

erhanzeynel

#3
Programda brunch ya da lookup bulunmuyor, programdaki en karmaşık durum tmr0 kesmesini asm kesme programıyla donanımsal olarak sağlamak, bunu yapmasam program 16f648a ya da sığmayabilir.   :o

isisteki pic16f6 kütüphanesini değiştirdim durum aynı.

edit: compare it! programıyla .asm leri karşılaştırdım;
bankend değişkenleri 268 ile 648 de farklı (gayet normal)
648 de DEFINE  CODE_SIZE 4 diye bir tanımlama var (bu da gayet normal)
başka da bir farklılık yok, sonuçta aynı pbp programı.

erhanzeynel

#4
Adım adım çözüme yaklaşıyorum.

Daha önce de dediğim gibi programdaki en "alengirli" durum asm kesme kullanmamdı.

Programdan kesmeyi iptal ederek tekrar derledim, normal çalışıyor.
PBP pic16f648a'nın asm kesmeleriyle pek iyi geçinemiyor sanırım.


Evet arkadaşlar konu çözülmüştür.

Her nedense TMR0 kesmesi, ne yaparsam yapayım çok kritik bir zaman olan sensörün cevap verme anına denk geliyordu.
TMR1 kesmesine terfi edilerek sorun çözülmüştür.