MCS de 16f88 derleme hatası

Başlatan . Kağan, 22 Ocak 2014, 23:40:46

. Kağan

16f88 derlemesi yaparken aşağıdaki hataları alıyorum. Yardım edermisiniz.




' PIC16F88     
@ __config _INTRC_OSC_NOCLKOUT&_WDT_OFF&_MCLRE_OFF&_CP_OFF&_PWRT_ON&_PROTECT_ON
                                             

TRISA=%00000001  'porta.0 giriş
TRISB=%00000000  'portb.0 çıkış


ADCON1=7  'ANALOG GİRİŞLER DİGİTİAL YAPILDI
portb=0      'portb yi temizle
PAUSE 300  'AÇILIŞ GECİKMESİ VERİLDİ

basla:

if porta.0=1 then     'eğer porta.0 1 ise portb.0 dakii ledi yak ve 500ms sonra sondür
high portb.0
pause 500
low portb.0
pause 500
else                        'değilse basla etiketine git ve tekrar kontrol et
goto basla
endif                       'if i bitir

end                          'program sonu


Teşekkürler.

onurinci

ANALİZ de Büyük İ var,bunu I yaparmısın.

ete

Programında yer alan sigorta aayrlarını aşağıdakilerle değiştir ve derle.

@ __config _CONFIG1, _INTRC_IO & _WDT_OFF & _MCLR_OFF & _CP_OFF & _PWRTE_ON  & _WRT_PROTECT_OFF
@ __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF

Unutma MPASM ile derleme yaparken sigorta ayarları formatını PBP klasöründe yer alan 16Fxxx.INC dosyasında başına ; koyup kapattığımız satırdan alıyoruz.

Ayarların neler olduğunu ve yazılış şekillerini ise, MPASM klasöründe yer alan  P16Fxxx.INC dosyasının altlarında doğru yer alan sigorta ayar seçeneklerinden elde ediyoruz.
Seninkilere baktım yazılış şekilleri ve format yanlış idi. Dediğim yerlerden doğrularını aldım ve derledim sorunsuz derlendi.

Ete

. Kağan

    Sorunsuz derlendi teşekkürler.

. Kağan

Derlemede hata olmasa da aşağıda denediğim tüm sigorta ayarlarına rağmen "led flasör" çalışmıyor.
Özellikle denemeleri silmedim başına kesme koyup bıraktım. Programı yükledikten sonra enerji verince led yaklaşık 1/4 sn yanıp sönüyor ve sonra sönük kalıyor. Yardım lütfen.

Teşekkürler

' PIC16F88  
'************************************************************
   
'@ __config _CONFIG1, _INTRC_IO & _WDT_OFF & _MCLR_OFF & _CP_OFF & _PWRTE_ON  & _WRT_PROTECT_OFF
'@ __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF

'@ __config _CONFIG1, _INTRC_IO & _WDT_OFF & _LVP_OFF & _MCLR_OFF &_CP_OFF                                             

@ __CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
@ __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF

'**************************************************************
TRISA=%00000001  'porta.0 giriş
TRISB=%00000000  'portb.0 çıkış


ADCON1=7  'ANALOG GİRİŞLER DİGİTİAL YAPILDI
portb=0      'portb yi temizle
PAUSE 300  'AÇILIŞ GECİKMESİ VERİLDİ

basla:

'if porta.0=1 then     'eğer porta.0 1 ise portb.0 dakii ledi yak ve 500ms sonra sondür
high portb.0
pause 500
low portb.0
pause 500
'else                        'değilse basla etiketine git ve tekrar kontrol et
goto basla
'endif                       'if i bitir

end                          'program sonu

ete

Bir işlemci çalışmak için seçilince onun ne gibi özellikleri var öğrenmek gerekir.
Data Sheet'e bakma alışkanlığını bir türlü edinemiyorsunuz. O yüzdende bocalayıp duruyorsunuz.

16F88 deki özellikler ve senin programına etkileri;
- Bu  işlemcinin dahili OSC si birden fazla frekansa sahip. 1MHz-4Mhz-8Mhz gibi seçenekleri var. Bu nedenle sigorta ayrından dahili OSC seçilince hangi frekansta olacağınıda OSCCON registerinden seçmen gerekiyor. Bunu yapmazsan işlemci default seçim neyse (Khz mertebesinde bir şeyde olabilir) o frekansta çalışır.

- Bu işlemcide Analog Port Seçimi ANSEL registeri ile yapılır. ADCON1 ile değil. ANSEL bitlerini sıfır yaparsan bütün Analog Pinler Digital olmuş olacaktır.

- Yine Bu işlemcide Comparatör vardır ve iptal etmezsen Analog pinler önce Comparatör olarak çalışırlar. Iptal etmek için CMCON=7 komutunu vermen gerekiyor

Ete


. Kağan

#6
   Merhaba ETE.
Datasheetini indirdim ve yazdırdım. 230 sayfa ve ingilizce. Hatmetmek oldukça uzun sürecek galiba. :)

Kodda 500 ms üreyi 100 ms düşürünce 12 sn yanıp 12 saniye sönüyor. Yani dediğiniz gibi frekansla ilgili gibi. Peki frekansı hangi komutla ayarlayacağım.   XT_OSC sigortası yeterli omaz sanırım. 0,5-1-2-4-8 MHZ çalıştırıyor. Ama birisini nasıl seçebilirim.

@ __config _CONFIG1, _HS_OSC & _WDT_ON & _LVP_OFF & _CP_OFF


sigortasıyla 12 sn ON, 12 sn OFF çalışıyor.

ANSEL ve CMCON yanlışlığımı düzeltsemde sonuç aynı.

. Kağan

' PIC16F88  
'************************************************************
' SİGORTA AYARLARI

@ __config _CONFIG1, _XT_OSC & _WDT_OFF & _LVP_OFF & _CP_OFF & _INTRC_IO & _MCLR_OFF & _PWRTE_ON  & _WRT_PROTECT_OFF
@ __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF

'**************************************************************

TRISA=%00000001  'porta.0 giriş
TRISB=%00000000  'portb.0 çıkış

CMCON = 7      ' TÜM KOMPARATÖRLER KAPALI
ANSEL = 0      ' ANALOG GİRİŞLER DİGİTAL YAPILDI
portb = 0      ' port b yi temizle
PAUSE 300      ' AÇILIŞ GECİKMESİ VERİLDİ

basla:

high portb.0
pause 100
low portb.0
pause 100

goto basla


Bu kod 12 sn. aralıkla yanıp sönüyor.

MS_59

data sheet sayfa 42ye bak orada kaç mhz istiyorsan osccon registerine ver
örnek OSCCON=%01100000 '4Mhz
mehmet

. Kağan

OSCCON= %01001100 '1 Mhz olarak derledim yine olmadııı.  :-\

MS_59

osilatör frekansını osccon registerinin 6-4. bitleri belirler dikkat et
mehmet

. Kağan


@ __config _CONFIG1, _INTRC_IO & _WDT_ON & _LVP_OFF & _CP_OFF & _MCLR_OFF & _PWRTE_ON  & _WRT_PROTECT_OFF

OSCCON = %01100000 ' iNTERNAL OSİLATÖRÜ 4mhz E AYARLA
ANSEL = 0 ' TÜMÜ DİJİTAL
CMCON = 7 ' KOMPARATÖRLER KAPALI

TRISA = %00000000 ' HEPSİ ÇIKIŞ
TRISB = %00000000 ' HEPSİ ÇIKIŞ
PORTA = 0 'PORTA SIFIRA ÇEK

Pause 100 ' 100 ms AÇILIŞ GECİKMESİ

BASLA:
High PORTA.6 ' LED YAK
Pause 1000
Low PORTA.6 ' LED SÖNDÜR
Pause 1000
GoTo BASLA 'BASLA ETİKETİNE DÖN



Çok uğraştım ama bu şekilde çalıştı.
İşin garip yanı yeni bir PIC'e geçince bir ledi yakıp söndürmek için bu kadar uğraşıyoruz ya ona hayret ediyorum.

Hepinize Teşekkür ederim.

ete

En baştan yazılması gerek şekil bu idi zaten ama sen en sonda bunu yaptın. Dahili osc kullanmaya çalışırken sigorta ayarlarında XT_OSC parametresi verdin peki neden .? Unutmadan söyleyeyim Osccon yalnızca dahili osc yi ayarlar harici osc ler için bir etkisi yoktur.
Bunun adına acemilik deniyor. Bu aşamaları atlatmak için epeyce çalışmak gerekiyor. Programda hiç bir zaman sağdan soldan satır kopyalayıp iş yapmayın. Her bir satırın anlamını iyice öğrenirseniz bu tür sorunları yaşamazsınız. Data sheet okumak yada değerlendirmek için illa ingilizce bilmeye gerek yok. İçindekiler listesine şöyle bir bakınca o işlemcide ,
Adc olup olmadığı comparatör olup olmadığı ve buna benzer bazı diğer özelliklerin olup olmadığı kolaylıkla anlaşılıyor. Sizi ilgilendiren şeyler register lerin bitleri onlara da bakınca her şey anlaşılıyor.
Yalnıca bakmayı bilecek ve alışkanlık haline getireceksiniz o kadar.
Ete

. Kağan

Tüm söylediklerine kesinlikle katılıyorum ETE. Özellikle bunun adına acemilik denir kısmına. Acemiyim ve öğrenmeye istekliyim.  :)

Powered by EzPortal