CCS C Delay Fonksiyonları Sorunu

Başlatan hakansefau, 24 Nisan 2016, 22:51:02

hakansefau

Merhabalar,

Pic 12F629 işlemcisiyle basit bir uygulamam var, delay fonksiyonları neden çalışmaz acaba daha öncesinde veya sonrasında yapmam gereken bir ayar mı var, daha önce böyle bir soruna rastladınız mı?

#include <12F629.h>
#FUSES NOWDT, XT, PUT, NOMCLR, NOBROWNOUT, PROTECT
#use delay(clock=4000000)

baran123

Bence başka bir hatadan kaynaklı olabilir.Kodların tamamını ve şema eklersen çözüm bulabiliriz.

remzi

#include <12F675.h>
#FUSES WDT                      //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES CPD                      //No EE protection
#FUSES PROTECT                  //Code not protected from reading
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset

#use delay(clock=4000000,RESTART_WDT)

Birde bu şekilde dene bakalım.

hakansefau

Aslında durumum şu:

while içinde output_high(LED);
delay_us(5);

buradaki delay us çalışmıyor doğru düzgün, osiloskoptan ölçtüğümde output_high, delay, output low, delay diye döndürdüğümde çok anormal rakamlar çıkıyor nasıl yapabilirim? yani ben tabi hex oluşturuyorum sonra bunu pickit3 programlama cihazımla atıyorum. Hex doğru çıkıp pickit3 programım hatalı yüklüyor falan olamaz değil mi?



baran123

Delay_us(x)
x mikro saniye bekleme yapar. Osilaskoptan nasıl ölçüyorsunuz ki ? Kodda sadece LED yak ve bekle var.
Bu şekilde deneyin.
output_high(LED);
delay_us(5);
output_low(LED);
delay_us(5);

hakansefau

Osiloskopta sizin delay_us(5); dediğinizde 5 mikrosaniye high, 5 mikrosaniye low görmem gerekmez mi?

baran123


Faruk53

Hocam tam olarak görmeniz gereken şey bu. similasyonda çalışıyor. kolay gelsin.



#include <12F629.h>
#FUSES NOWDT, XT, PUT, NOMCLR, NOBROWNOUT, PROTECT

#use delay(clock=4000000)

#define LED pin_a0

void main ()
{


while(true)
{
output_high(LED);
delay_us(5);
output_low(LED);
delay_us(5);
}}

hakansefau

Evet görmem gereken bu kesinlikle, ama bir türlü bunu gerçekte göremiyorum. CCS C - PIC C Compiler ile derliyorum, versiyon 5.050, PCM 14 Bit ile, yükleme yaptığım cihaz da orjinal pickit3, Pickit3 Programmer arayüzü ile de yüklüyorum. Yüklerken de hiç bir ayar yapmıyorum, sadece import ediyorum .hex dosyasını sonra da yüklüyorum. Eksik ya da yanlış yaptığım bir şey var mı?

Faruk53

#9
Hocam bu güne kadar pickit3 ün yanlış program attığına şahit olmadım. Şuan okuldaym akşam bi deneyip sonuçları sizinle paylaşacağım. İmport edip write dedikten sonra programming successful gördüyseniz program başarıyla atılmıştır. Şuan anlattıklarınız arasında eksik veya hatalı bişey göremedim hocam. Akşam canlı olarak kurup bende bi deniyim sonuçları paylaşırım. İyi çalışmalar

mesaj birleştirme:: 25 Nisan 2016, 10:49:04

Hocam bi de kurulu olan devrede kristal bağlı mı? Yukarıdaki programda dahili osilatörü aktif etmedik çünkü.

hakansefau

Teşekkürler,

Kurulu devrede 4MHz Kristal var, 22pF kondansatörüyle beraber. Tamamdır siz de denedikten sonra bana söylersiniz, yani picle uğraşmayalı çok zaman oldu. Keil gibi derleyicilerde böyle bir durum hiç olmadığı için ilk kez başıma geliyor, olmadı başka bir bilgisayarda CCS C kurup deneyeceğim belki benim IDE de programsal bir hata vardır bu mümkün mü?

Faruk53

Hocam Ccs c yapıyo böyle şeyler. Bir gün kodu yazdım yazdım derledim çalışmadı sorun arıyorum ama yok bi sorunda bulamıyorum başka bi bilgisayard denedim çalıştı. Yani başıma gelmedi desem yalan olur. Şuan Xc8 de yazıyorum gayette memnunum. Kısmetse yaz tatilinde bende Arm mimarisine bi başlangıç yapmak istiyorum. Hocam bi de hazır konusu açılmışken Arm mimarisi olarak hangi markayı önerirsiniz, gönlüm nxp den yana ama Sizinde bi fikrinizi almak isterim

pwm.c

12f629 ve 12f675 gibi PIC türlerinde dahili osilatörün OSCCAL ile kalibre edilmesi gerekiyor aksi halde tam 4mhz alamazsınız.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

Faruk53

Hocam kusura bakmayın biraz geç oldu. kod isis dosyası ve osilaskop görüntüsünü paylaşıyorum. MCLR ucunu 1K5'lik bir direnç ile Vcc'ye çekmeniz gerekiyor bide. Onu kaçırmış olabilirsiniz hocam. Birde ek olarak kristali bağlamanıza gerek yok hocam. Dahili osilatörü aktif ettik.

@pwm.c hocam osilaskop ekranında elde edilen görüntüde elde edilen kare dalganın tam kare dalga olmamasının sebebi OSCCAL'daki kalibre ayarlarının yapılmaması mı?


İsis dosyası:



osilaskop görüntüsü:



#include <12F629.h>
#FUSES NOWDT,INTRC_IO, PUT, NOMCLR, NOBROWNOUT, PROTECT

#use delay(clock=4000000)

#define LED pin_a0

void main ()
{


while(true)
{
output_high(LED);
delay_us(5);
output_low(LED);
delay_us(5);
}}

pwm.c

PIC dahili osilatörü RC olduğu için ortam sıcaklığından ve beslemeden etkilenir. bu nedenle doğru 4mhz alamıyoruz. OSCCAL registeri ise sadece osilatör hızını düzenler. karedalgada aksaklık varsa muhtemelen besleme kaynağında parazit geliyor olabilir.

Bu arada, CCS derleyicisi porların I-O durumunu otomatik ayarlıyor ancak bunun için porta her değer yazmada TRIS değerini sürekli güncellediği için fazladan süre harcıyor. #use fast_io(A) kumutunu kullanarak bunu önleyebilirsiniz. bu komuttan sonra SET_TRIS_A( 0x00 ); fonksiyonu ile port durumlarını elle belirtmek gerekir.

#include <12F629.h>
#FUSES NOWDT,INTRC_IO, PUT, NOMCLR, NOBROWNOUT, PROTECT
#use fast_io(A)
#use delay(clock=4000000)

#define LED pin_a0

void main ()
{
SET_TRIS_A( 0x00 );

while(true)
{
output_high(LED);
delay_us(5);
output_low(LED);
delay_us(5);
}}
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-