Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

pic12f675 tepkisiz

Başlatan pea, 10 Temmuz 2011, 00:04:27

pea

İlk PBP kodumu yazmak için bugün kolları sıvadım.
Programming Pic MCU with PicBasic Compiler kitabını okudum , gerekli bilgilerin çoğu bölümünü kenara yazdım.
Microcode studio'da deneme amaçlı bir kod yazdım ve derleyerek Proteus'a attım.
Atış o atış.2 saattir deniyorum , Proteus'ta tık yok.AN0 pin'ini pot ile 5V'a bağladım , analog okuyacak oradan.
GP1 ve GP2 pin'lerine Led attım.Led'ler sürekli sönük , analog giriş de kırmızı-gri-mavi oluyor pot'la oynadıkça.Büyük olasılıkla High-kararsız-Low olsa gerek.
Trisio , adcon , ansel değerlerini kurcaladım , internette bakındım ama fayda etmedi.

Bir hata gören var mı acaba?

TRISIO = %000001    'GP0/AN0 input , gerisi output 
CMCON = 7           
ADCON0=%10000001  'Vdd referans , AN0 analog kanalı , A/DC bitik , modül çalışıyor 
ANSEL= %00110001  'RC osilatör clock , AN0 analog giriş

define ADC_SAMPLEUS 50
DEFINE   ADC_BITS   10
DEFINE   ADC_CLOCK   3 

led0 var gpio.1       'led0=GP1
led1 var gpio.2       'led1=GP2

deger var word

GPIO = 0
Pause 50

dongu:
adcin 0 , deger        'deger değişkenine AN0'dan gelen değeri ata
if deger>0 then        
    high led0             'GP1'i 1 yap
else
    high led1
endif
pause 200
goto dongu

ipek

MCLR'yi belirtmemişsin eğer internalse belirtmen gerekir , dışarıdan ise bu bacağı + 5 volta vermen gerekir....

pea

MCLR'ı 5V'a bağlayınca sorun çözüldü haklısın.
Koda eklemem gereken bir şey var mı acaba?

ete

Öncelikle pic e ait sigorta ayarlarını programın başına yerleştirmeyi alışkanlık haline getirsen iyi olacak.
Nedir bunlar dersen;
@ DEVICE pic12F675                      'işlemci 16F628                                
@ DEVICE pic12F675, WDT_ON              'Watch Dog timer açık
@ DEVICE pic12F675, PWRT_ON             'Power on timer açık
@ DEVICE pic12F675, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic12F675, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak


Daha sonra 12F675 işlemecisine dışarıdan kristal bağlamıyor isen yani dahili OSC yi kullanıyor isen bu işlemci fabrikada dahili OSC si kalibre edilerek kalibrasyon değeri son program hafızasına ($3FF) yazılmıştır. Pic i programlar iken tedbir almaz isen bu değer silinir ve picin rastgele bir frekansta çalışır yada çalışamaz. Bunu önlemek için programa;
DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor

komutunu ilave etmen gerekir.
Yukarıda verdiğim örnek sigorta ayarları ile MCLR pinine bir şey bağlaman gerekmediği gibi bu pini giriş olarak kullanabilirsin.
Aynı şekilde kristal bağlamadan dahili OSC yi (4Mhz) kullanabilirsin.

Kolay Gelsin
Ete

Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

pea

Cevap ve bilgiler için çok teşekkür ederim.Ancak şöyle bir durum var :

Assembly kodlarını girmeye çalışınca "Warning[207]  ... found label after column 1.(DEVICE)" ve "Error[122] ...... illegal opcode (pic12f675)"  hatalarını alıyorum.
PBP klasöründe "12F675.INC" dosyası da var.
pbp/inc klasöründe de "M12F675.INC" dosyası var.
Assembly kullanmayınca sorunsuz derliyor ama assembly girince hata başlıyor.

MicroCode Studio'nun 'Compile and Program Options' bölümünde assembler olarak nedense Proutes'u seçmiş program.Hatayı büyük olasılıkla bundan veriyor.
MPLAB ve dolayısıyla MPASM yükledim , programa otomatik/manual olarak tanıtmaya çalıştım.Yine Proteus'u seçti.
Ne yapmak gerekir acaba?

ete

MCS de PBP kullanarak derleme yapabilmek için,
Makinanızın C ana klasöründe PBP2xx derleyicisi kurulu olması gerekir.
Daha sonra MCS de view menüsünde Compile & Program Options seçeneği seçilerek,
gelen ekranda ilk buton olan Compiler seçeneği (default seçili gelmesi gerek) seçilir ve "Find manuelly" butonu yardımı ile C ana klasörüne kurduğunuz PBP2xx klasörünün yeri gösterilir.
Daha sonra Ortada yer alan Assembler butonuna basılarak ekranın sağında yer alan "Use MPASM" kutusunun seçili olup olmadığı kontrol edilir. Seçili ise seçim üzerine tıklayarak iptal edilir.
Bu şekilde MCS programlarınızı PBP derleyicisi ile derlemeye hazır hale gelir.

Veridğiniz hata mesajları MCS nin derleme işini MPASM kullanarak yaptığını gösteriyor. Bu nedenle Assembler seçeneğini seçerek MPASM kutucuğunu iptal ediniz.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

pea

Tekrar teşekkürler.

Ancak 64bit sistem kullandığım için MPASM'ı kapatınca PM.exe uyumsuz hatası alıyorum.Programın yardım bölümünde de PBP'nun MPASM dışında bir seçeneği olmadığı yazılmış.
ASM kodu kullanmamak ya da 32 bit sanal makine kullanmak dışında bir seçeneğim yok sanırım.Doğru mudur?

pea

MPASM kullanırken sigorta ayarları
@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _MCLRE_OFF

şeklinde yapılıyormuş.Ancak bu sefer de 'Overwriting' hatası veriyor.Bunun için de Pic'in INC dosyasından sigorta ayarlarını silmek lazımmış sanırım.
Biraz sakat gibi

ete

64 bit lik makinalarda PM assembler çalışmıyor. Bu nedenle derleme MPASM kullanılarak yapılması gerekiyor.
Bu durumda MCS de Assembler seçeneğinde MPASM kutucuğu seçili olması gerekir.
Diğer yapılacak ilemler sırası ile şöyle;

PBP klasöründe 12F675.INC dosyasını MCS içinde açın.
Sigorta ayarları ksımında yalnızca MPASM ye ait olan kısmı kapatın. Dosyayı yüklerseniz aşağıdaki satırlar ekrana gelecektir. Ben kapatmanız gereken satırı kapttım oradan anlayabilirsiniz.

        NOLIST
    ifdef PM_USED
        LIST
        include 'M12F675.INC'	; PM header
        device  pic12F675, intrc_osc_noclkout, wdt_on, mclr_on, protect_off
        XALL
        NOLIST
    else
        LIST
        LIST p = 12F675, r = dec, w = -302
        INCLUDE "P12F675.INC"	; MPASM  Header
 ;       __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_ON & _CP_OFF
        NOLIST
    endif
        LIST


Bu aşamadan sonra sigorta ayarlarının veriliş formatına dikkat etmek gerekiyor. Format aşağıdaki şekildedir;

@ __config _XT_OSC & _WDT_ON & _PWRTE_ON & _BODEN_ON & _MCLRE_OFF & _LVP_OFF & _CP_OFF
ben genel olarak verdim sen işlemciye göre bunları değiştirebilirsin. Mesela 12F675 için olması gereken şekli aşağıda veriyorum.

@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _PROTECT_OFF & _MCLRE_OFF

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

pea

Eve gidince deneyeceğim , çok teşekkürler.