pic programlama

Başlatan dgtlygtabi, 14 Ekim 2009 - 21:24:17

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

gnukarabatak

sdcc nin standart kodlarında yani kütüphane dosyalarında 16F serisi için hazır delay.h dosyasının olmadığını görebilirsiniz. Bu konuda sdcc geliştirme ekibiyle de görüştüm. Yalnız delay.h 18F serisi için hazır olarak sdcc kodları içinde var. İlla 16F877 ile kod yazmakta kararlı isen kullanıcıların kendi ihtiyaçlarını gidermek üzerine oluşturdukları delayus ve delayms rutinleri var. Ancak bu rutinler çok hassas işlemlerde iş görmez. Misal 1-wire iletişim gibi. Fakat led yakıp söndürmek gibi işler için kullanılabilir. Benim naçizane bu konuda yaptığım daha doğrusu hazırladığım dersler var. Bu dersler içinde 16F877A için delay rutinlerinin kullanım örnekleri var. duralikiraz.blogspot.com

Ekleme: Yakın zamanda 18F serisi ile ilgili derslerin sdcc ile ilgili olanlarına başlamayı umuyorum. Buna sebepte delay kullanımlarının 18F de sağlıklı bir şekilde kullanılabiliyor olmaları ve ayrıca geliştirici ekibine göre en fazla destek ve geliştirmenin 18F serisine olması.
Linux kullanmak bir farklılık, linux'te kod yazmak ise ayrıcalıktır.

Amenofis

Aslında delay kullanmak bir hata, cpu çevrimlerini boşa harcamış oluyorsun. Cpu'nun boş zamanı varsa bunu uyuyarak geçirmeli, boşa cycle harcayarak değil.

gnukarabatak

Mikrodenetleyici programlarken zamanlama gerektiren durumlarda delay bir zorunluluk haline gelir. Misal ledlerle efetk yapacaksın; bunu yapabilmenin tek yolu zamanlamayı kontrol etmek. İyide kaç mikrodenetleyici çevrimi ne kadar mikrosaniye ediyor bilmek gerekir. Yada 1-wire iletişimle ds18b20 sıcaklık sensörü ile haberleşme yapman gerekiyor. 5 mikrosaniye hassasiyetli bir delay komutu üretemezseniz "sittin sene" bu sıcaklık sensörünü okuyamazsınız. Ayrıca zamanlama aralıkları vermeden bir program yazarsanız yazdığını program o kadar hızlı işlerki ne yaptığını kimse göremez. Bu yüzden delay kullanımı kesinlikle bir hata değil aksine çoğu durumda gerekliliktir.
Linux kullanmak bir farklılık, linux'te kod yazmak ise ayrıcalıktır.

Amenofis

İşte o hassas işlemlerde delay a güvenemezsin zaten. Tam 5 us bitmek üzereyken kesme geldi ve 10 us de orada oyalandı ne olacak? Periyodik işlemlerde, hassas zamanlamalarda yazılımsal değil donanımsal çözüm gerekli. Bunu da timer + kesme (interrupt) ile sağlayabilirsin ancak. Tabi mikrodenetleyicinin yetenekleri de önemli, pic ler kesme konusunda biraz zayıf.

w01ky

Ellerine sağlık dostum.güzel konu hazırlamışsın.Merakım vardı bilgi sahibi oldum.

gnukarabatak

Ben sdcc ile timer kullanarak hassas zamanlama işini yapamadım. Bunun timerlarla yapılabildiğini söyleyenleri duydum birkaç yerde. Şayet delay rutinleri yerine timer kullaranarak mikrosaniye ve milisaniye hassasiyeti sağlayabilen bir kod örneğini burada paylaşırsan bende bloğumda senin adına alıntı yaparak yayınlamaktan mutluluk duyarım.
Diğer bir konu ise 5 mikro saniye delay geçtikten sonra durduk yere 10 mikro saniye oyalanma yada kayıp kesinlikle olmaz. Şayet böyle kaçak durumu olsa kimse mikrodenetleyici için program yazamaz. En temel seviye debugger la bile kaç mikrosaniyede nerede ne yaptığını anlık olarak görmen mümkün. Bu yüzden dediğiniz şey maalesef şehir efsanesi.
Linux kullanmak bir farklılık, linux'te kod yazmak ise ayrıcalıktır.

Amenofis

@gnukarabatak

Sen hiç mcu kodu yazmadın mı? Durduk yere olmuyor zaten. delay sırasında ya da program işletilirken kesme gelirse program akışı başka yere dallanır. Ha kesme açmadıysan bölünmez tabi ama kesme olmadan yapabileceğin şeyler çok sınırlıdır.

pic timer interrupt diye arat. Örnekler sdcc ile de çalışır.

gnukarabatak

#57
Herhalde nasıl yazıldığını anlatan biri olduğuma göre mcu (mikrodenetleyici) kodu yazmayıda bilirim. Şu an üzerinde çalıştığım ticari üretim projem var. Konuya dönecek olursak siz "delay" sız bir dünyayı çok istiyorsunuz. Fakat delay kullanmadan ne efetkt oluşturabilirsiniz nede 1-wire iletişimi gibi hassas iletişimleri gerçekleyebilirsiniz. Her halükârda delay kullanımınız kaçınılmazdır. Ha, bu delay kullandığın işlemlerin yanında kesme kullanırsın yada kullanmazsanız o sana kalmış. Ancak kullandığın zaman kesme geldiğinde mevcut delay-bekleme işlemini keser ve kesmenin işlettiği kod bloğu bitene kadar geçen zaman sürecinde de senin kullandığın delay kaldığı yerden devam eder ve etmek zorunda olması doğru olandır. Zaten mikrodenetleyici programlayan kişi ne yaptığını bilerek bu işi yapmak zorundadır. Yoksa bu muhtemel ticari projeler zaten çoluk çocuk işi olamayacak kadar ciddi işlerdir. Şunu belirtemekte fayda var; mikrodenetleyici programı gerektiğinde delaysiz olmaz. Kesme kullanımı açıkçası benden daha tecrübeli aşağı yukarı bu mikrodenetleyici programlama işine 15 yılını vermiş profesyonel arkadaşlarım çok gerekmedikçe önermemektedirler. Çünkü kesmede olay donanım kontrollü olduğu için yazılımdaki kontrolü kaybetmeniz kuvvetle muhtemeldir.
Benim yazdığım mikrodenetleyici programlama yazılarını duralikiraz.blogspot.com adresinde okuyabilirsiniz. İşin hem kodlama kısmına hemde teorisine değinmeye çalıştım.
Daha önceki mesajımda timer ile hassas zamanlama işini (delay) yapamadığımı zaten söylemiştim. Ancak bu olmayacağı Timer ile yapılamayacağı anlamına gelmez. Fakat çok sağlam birşekilde kontrol gerektiriyor. Aksi halde herşey çorba olabilir. Kısacası timer ile delay yapmak zor iş. Bu konu şu forumda tartışılmış benim bunun üstüne laf söylememe gerek yok http://www.picproje.org/index.php?topic=46777.0

Düzenleme: Link eklendi.
Linux kullanmak bir farklılık, linux'te kod yazmak ise ayrıcalıktır.

Erdem

#58
Alıntı yapılan: Erdem - 21 Eylül 2012 - 19:17:39
Alıntı yapılan: mcyegen - 10 Eylül 2012 - 03:00:33
bu yazdıklarımdan sonra da yok ben ubuntuda pic programlamayı denemek istiyorum, haklılar diyen arkadaşlar olursa buyursunlar denesinler.

Anlaşıldı. Derslerin yoğunluğu azaldıktan sonra bu konuda bir şeyler karalamam gerekecek.

Bu parça benden Ubuntu'da pic programlamak isteyen arkadaşlara gelsin  :)

http://www.erdem.tk/ubuntu/ubuntu-alt%C4%B1nda-pIc-kit2-kullanarak-pIc-programlama/


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 11 Şubat 2016 - 21:50:12

@heartsmagic bu parça da benden sana gelsin :)

♫ ♫  ♫ ♫ ♫

heartsmagic

Hehe, zevkle dinledim ve kaydettim @Erdem :)
Bu arada, neler neler konuşmuşuz başlıkta, vaktimize yazık cidden. Hani birileri yapamadığını ispat etmeye çalışadursun, daha doğrusu yırtınsın, karşıdakilerin yapabildiklerini ispat etmeleri esasında oldukça kolay. 
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

plazma

@Erdem CCS ile de olmaz mı?

Erdem

Denemedim ama başka derleyiciler ile de kullanabileceğinizi düşünüyorum.

http://www.digitalpeer.com/blog/programming-a-pic-on-linux-tutorial

Örneğin burada PIC kit2 yerine başka bir programlayıcı ve derleyici olarak sdcc kullanmış. O zaman Makefile kütüğünde

Alıntı YapMERHABADUNYA_OLUSTUR=picc --chip=${DENETLEYICI} ${MERHABADUNYA} -O$@.hex

satırını derleyicinizin aldığı parametrelere göre değiştirebilirsiniz.

plazma

Bende msp430g2 var ondan sordum acaba olur mu diye :) Birde pic3 nasıl linux tarafında?

Erdem

TI'nin geliştirme kartlarını hiç kullanmadım.

PIC programlamak için başka bir programlayıcı da kullanılabilir ama  devre üzerinde seri programlama ("ICSP") özelliği olması gerekiyor sanırım.

http://www.electropepper.org/blog/item/linux-terminal-only-pic-programming

Burada birisi PIC kit3 kullanmış. Ama MPLABX geliştirme ortamını kurmak gerekiyormuş.

PIC kit2 için sadece derleyici ve pk2cmd yeterli. avrdude isimli yazılımla Atmel mikro denetleyicilerini de programlıyor hatta gömülü yazılımı sıfırdan yükleyebiliyor.

plazma

Geri dönüş yapamadım klon pic kit 3 aldım geçenlerde geldi, deneme yaptıktan sonra aktarırım gene unutmazsam :)

Erdem

Ama Pickit3 sanırım Arduino programlayamıyor.

Alıntı Yap$ avrdude -c pickit3

avrdude: Can't find programmer id "pickit3"

Valid programmers are:

...

pickit2          = MicroChip's PICkit2 Programmer

...

Benim masamın üzerinde şu an iki tane programlayıcı var. Bir tanesi Arduino ile devre üzerinde seri programlama yapıyorum. Diğeri de PICkit2.

Hatta bir ara Arduino'nun açılış yöneticisini ("bootloader") PICkit2 ile yüklemiştim.

Gerçekten yetenekli bir programlayıcı ;)

Fazla paranız yoksa alın bir tane ATMEGA328p sonra PICkit2 ile açılış yöneticisini yükleyin. En ucuzundan Arduino.

plazma

Arduino pro miniyide ttl/ftdi ile atıyorum bende