12F675 Program Sorunu

Başlatan ÖmerA, 30 Ekim 2022, 14:54:38

ÖmerA

 Merhaba ,
Daha önce başka arkadaş tarafından 12F675 için yazılmış ve çalışan programı Pickit3 ile yüklüyorum , yükleme başarılı görünüyor , geri okutunca da aynı HEX kodları alıyorum , ama devreye enerji verince çalışmıyor. Sanki program yokmuş gibi.
 Aynı programı hiç değişiklik yapmadan 12F683' e yüklüyorum , direk çalışıyor. Fakat elimdeki 12F675' leri kullanmam gerekiyor. Çok kısa olan aşağıdaki programda terslik ne olabilir ? Program sadece 7 No'lu girişe gelen pulslar için 5 mili saniyelik puls üretiyor. Bir de hem 7 hem 6 No' lu girişler high ise , 5 No' lu çıkış high oluyor. 12F683' de çalışan neden 12F675' te çalışmıyor acaba ?  Teşekkürler.


' 12f675 pin3 ten her sensor palsı sonunda v/f entegresi için 5msn +pals verir

 
'@ DEVICE pic12F675
'@ DEVICE pic12F675, WDT_OFF
'@ DEVICE pic12F675, PWRT_ON 
'@ DEVICE pic12F675, BOD_ON                             
'@ DEVICE pic12F675, PROTECT_ON                             
'@ DEVICE pic12F675, MCLR_OFF
'@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT

'cw or ccw ...   f675 ile
ansel=0    ' adc ler off
cmcon=7     'comp off
intcon=0
option_reg.7=1     ' pull up olmasin
trisio=3          ' pin7 ve pin6 sensor girişleri

dly var word
dly=0
dl var word
dl=0
 
symbol ina = gpio.0
symbol inb =gpio.1
symbol out =gpio.2
 

lop:   

dly=dly+1
if dly<50000 then
high gpio.5
else
low gpio.5
bb:
if not gpio.0 then bb
endif
     
if not gpio.0 then lop
pauseus 100
if not gpio.0 then lop

if gpio.1 then
high gpio.2                  ' + yön belirlenir, role çeker
else               ' veya
low gpio.2             ' - yön belirlenir, role bırakır
endif

bek:

dl=dl+1
if dl<50000 then
high gpio.5
else
low gpio.5
b:
if gpio.0 then b
endif


if gpio.0 then bek

high gpio.4
pause 5                        ' 5msn pals üretir v/f girişi için..
low gpio.4
dly=0
dl=0
goto lop

end

dnaci

Osccal değeri vermeniz gerekiyor linkte açıklamalar mevcut;

https://etepic.com/index.php?topic=225.0

ÖmerA

 Merhaba ,
Entegreler gelirken kendi OSCAL değerleri mevcut. Onları hiç değiştirmeden program yüklüyorum , yükleme sonrası kontrolde değerlerin değişmediğini de görüyorum. Hiç bir entegreyi çalıştıramadım. Fabrikadan gelen değer dışında bir şey mi yüklemem gerekli ?

mehmet

Simülasyonda çalılıyor mu?
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

ete

Sıfır entegrede OSCCAL değeri elbette mevcuttur. Ancak işlemci programlanırken önce hafıza silinip üzerine yeni program yazılıyorsa ki genelde bu böyle oluyor veya yeni program komple hafızayı kapsayacak şekilde yazıldığı zaman şayet tedbir almazsanız OSCCAL değeriniz silinir zira program hafızasının son adresinde yer almaktadır.
BASIC de alınması gereken tedbir;
"DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor"
komut satırının programın başlarında bir yere eklenmesi şeklindedir. Satır açıklamasında yazdığı gibi bu komut olunca mevcut OSCCAL değeriniz önce okunur ve işlemci programlanırken yeniden kendi yerine yazılır. Bu komut satırı olmaz ise hiç bir işlem yapılmaz OSCCAL değeriniz silinir.

Ete

İlyas KAYA

D...net den aldıysan ordan aldığım tüm 12f675 ler bozuk. Ya oscall değeri yok yada olsa bile isitinca çalışıyor soğuyunca çalışmıyor. Kabul de etmiyorlar. Aldığım 50 pic den 20 sini ancak çalışır duruma pickit2 ile getirebildim.
Başka yerden aldıklarım cayır cayır çalışıyor.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

ÖmerA

 Evet oradan aldım. Hala uğraşıyorum . Yaptığım ek araştırmalara göre , OSCAL değeri program yüklemede korunsa bile , bulunduğu adreste işe yaramıyor , özel komutlarla bu değerlerin kopyalanarak kullanılacağı adreslere taşınması gerektiği , aksi takdirde entegrenin çalışmayacağı  bilgisine ulaştım. Gelişmiş  yazılım programları , programlama esnasında bu OSCCAL değerini otomatik yükleyecek satırları kendisi programın başına ekliyormuş. Pickkit3 kullanıyorum ve içinde böyle bir özellik göremedim. Tecrübesi olan var mı ?

mehmet

MPLABX IDE/IPE içerisinde ayar mevcut.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

Maxim

pickit2 ve pickit3 de tools altında OSCCAL diye bölüm var

ÖmerA

Pickkit 3' de OSCCAL menüsünde sadece manual giriş imkanı mevcut. Zaten sorun artık OSCCAL değil. O değeri kaybetmiyorum. Fabrikadan geldiği gibi duruyor. Ama programın başına o değeri olması gereken yere taşıyacak komutların kullanılması gerekiyor gibi.

İlyas KAYA

Alıntı yapılan: ÖmerA - 31 Ekim 2022, 11:30:37Evet oradan aldım. Hala uğraşıyorum . Yaptığım ek araştırmalara göre , OSCAL değeri program yüklemede korunsa bile , bulunduğu adreste işe yaramıyor , özel komutlarla bu değerlerin kopyalanarak kullanılacağı adreslere taşınması gerektiği , aksi takdirde entegrenin çalışmayacağı  bilgisine ulaştım. Gelişmiş  yazılım programları , programlama esnasında bu OSCCAL değerini otomatik yükleyecek satırları kendisi programın başına ekliyormuş. Pickkit3 kullanıyorum ve içinde böyle bir özellik göremedim. Tecrübesi olan var mı ?

Pickit2 de var ancak pickit3 de bu özellik yok malesef.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

ete

Pickit3 kullanıyorum ve 12F675 programladığım zaman OSCCAL değerini otomatik alıp kopyalıyor kendi yerine.
Bir şeye açıklık getirelim tekrar söylüyorum.
OSCCAL değeri en son program hafızasında tutuluyor.
Programınızdaki DEFINE OSCCAL_1K 1 komut satırı programlayıcıya OSCCAL değerini alıp tekrar eski yerine yaz emrini verdiriyor. Bu komut olmazsa OSCCAL değeri siliniyor.

OSCCAL değeri aslında o işlemcinin dahili OSC ile en stabil 4Mhz osc frekansını verdirmesi için bir kalibrasyon ayarı. Bu ayar olmaz ise işlemci yine çalışır ama kimbilir çalışma frekansı ne olur. Bu ayarı kendiniz de bulup yazdırabilirsiniz. Pickit2 bunu otomatik yapabiliyor.
Yapılan iş şu. İşlemcinin OSC pinlerinden birisi OSC çıkışı olarak ayarlanıyor ve işlemci çalıştırılıp o pinden frekans ölçülüyor. 4Mhz'i buluncaya kadar OSCCAL değerini artırıyoruz. Sonunda bir değer tutması gerek. Bunu kendim de kısa bir program yazarak bizzat yapmıştım. O zaman Pickit2 programlayıcım yok idi.

'Bulunduğu adreste işe yaramıyor" diye bir tabir kullanmışsın. Buda yanlış Bulunduğu adres depolama alanı ve işlemcinin içindeki rom bu adresten değeri okuyup OSCCAL regsterine yazdırıyor hepsi bu.Bu işi kendi kodunuzla yapmak isterseniz yani önceden bildiğiniz OSCCAL değerini depolama yerine ilk programlamada kayıt etmek isterseniz işte size komut satırları

@ ORG 3FFh
@ RETLW 34h 'bu OSCCAL değeri

Ete

ÖmerA

 Merhaba ,
Kutusundan yeni çıkarttığım 12F675' i Pickkit 3' e taktığımda bana OSCCAL değerini ekranda gösteriyor. Bunu bir yere yazıyorum unutmamak için. Paylaştığım kodları içeren HEX dosyasını PIC'e yükledikten sonra da OSCCAL değeri hala aynı görünüyor. Hatta tekrar okutuyorum PIC içini ve hem gönderdiğim HEX kodlarının yüklendiğini , hem de en son adresinde de OSCCAL değerinin durduğunu görüyorum. Yani , yazdığınız gibi Pickkit 3 program yükleme sırasında OSCCAL değerini silmiyor. Peki deneme yaptığım 10 taneye yakın PIC' te bu program neden çalışmıyor olabilir ? Aynısını 12F683' e yükleyince sorunsuz çalışıyor. Aldığım bütün PIC' ler bozuk olabilir mi ? Kodlarda 12F675 için ters bir şey var mı gözünüze çarpan ? Özel bir komut vermeden de , ROM içerisindeki sabit kodlar son adreste saklı olan OSCCAL değerine ulaşıp kullanabiliyor mu ?

ÖmerA

 Selam.
Sorunu çözdüm. Problem sigorta ayarlarındaymış. Ete arkadaşımızın konuyla ilgili eski yazılarını okudum ve 32/64 bit bilgisayarların derleme farklarını , derleyicinin INC dosyası içerisinde ; konması gereken satır gibi önemli ayrıntıları öğrendim. Sonunda doğru derleme ile sonuca ulaştım. Program içindeki sigorta ayarları ile INC dosyasındaki ayarlar çakıştığı için ya da uyuşmadığı için , derleme sırasında sigorta ayarları yapılamıyordu. Yardım ve ilgi için herkese teşekkürler.

Powered by EzPortal