Gönderen Konu: Pic Basic Pro Öğreniyoruz - 1  (Okunma sayısı 10069 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Karadağ

  • Global Moderator
  • General
  • *****
  • İleti: 8470
  • Cinsiyet: Bay
  • R & D ENGINEER
    • TeknolojiEkibi
Pic Basic Pro Öğreniyoruz - 1
« : 18 Temmuz 2007, 22:14:35 »
Pic Basic Pro Öğreniyoruz - 1   

Ön Söz:
----------
Pic Basic Pro programlama dilinin kullanımı ve komutları konusunda bilgiler vermek komutların
kullanım şekillerini açıklama ve sonuçta örnekler vererek yeni başlayanlara bu dili öğretmeyi amaçlıyorum.
Basic bilenler ise dersleri takip ederlerse bazı enteresan programlama teknikleri öğrenebilirler.
Zira Basic dili her ne kadar üniversal bir dil olsa da bazı komutlar akıllıca kullanılarak programlamada
karşılaşılan zorluklar kolaylıkla aşılabilir.

Derslerimizde temel amaç örnekler vererek öğretmektir. Zira en iyi öğrenme yolu görsel olanıdır.
Sözü fazla uzatmadan derslerimize başlayalım.

Ders -1 :
----------
Pic Micro işlemciler hakkında kısa bilgi.
-----------------------------------------
Pic mikro işlemciler teknik özellikleri ve kılıfları açısından farklılıklar gösterirler. Her şeyden önce birden
fazla bacağa (pin) sahip olan işlemcilerin bacakları giriş veya çıkış olarak çalıştırılabilirler. Özellikleri açısından
da bir kere programlanabilenler (C serisi) programları ultraviyole ile silinip yeniden programlanabilenler ve
birden fazla silinip programlanabilenler olarak sınıflandırılabilirler.

Biz genelde FLASH olarak tarif edilen birden fazla silinip programlanabilen tipler üzerinde çalışacağız.
Pic'ler taşıdığı ekstra özellikler açısından da bir kaç kategoriye ayrılırlar. Örnek olarak üzerin de;
1) Analog-Digital Çeviricisi olanlar,
2) Komparatör olanlar,
3) Donanımsal olarak seri haberleşme ünitesi olanlar,
4) HPWM ünitesi olanlar gibi Pic’ler mevcuttur. İleriki bölümlerde bunların kullanımına ait örnekler vereceğiz.

Pic işlemcilerin pinlerinin hem giriş hem de çıkış olarak çalıştırılabildiğinden bahsetmiş idik. Açıklamalarımızla
ilgili uygulamalarımıza "Proje" adını vereceğiz ve her projemizin bir numarası olacaktır. Şimdi Pic lerinin
organizasyonu işlemlerine kısa bir göz atalım.

Kullanacağımız Pic 16F84A olacak. Bu işlemcinin toplam 18 bacağı vardır.5 nolu bacak(-),ve 14 nolu bacak(+) besleme ,
15-16 nolu bacaklar (XTAL) osilatör bacakları ve PortA (0-4 arası 5 adet pin) < 17,18,1,2,3 nolu bacaklar > ve
PortB (0-7 arası 8 adet pin) <6,7,8,9,10,11,12,13 nolu bacaklar > olmak üzere toplam 13 adet (Giriş-Çıkış) pin'e sahip bir işlemcidir.
 
İlk projemize geçmeden, anlatımda lazım olacak olan BASIC de kullanılan sayı gösterim formatları konusunda
biraz bilgi vermek istiyorum. Bildiğiniz gibi kullanacağımız 3 tür sayı formatı vardır. Formatlar ve gösterim şekilleri
aşağıda verilmiştir.

1) Desimal Sayılar (10 tabanına göre düzenlenmiş sayılar):
direkt kullanılırlar 12 -23 gibi

2) Hexadesimal Sayılar (16 tabanına göre düzenlenmiş sayılar) :
başlarına $ işareti koyularak gösterilirler. $1F , $31 gibi

3) Binary Sayılar (2 tabanına göre düzenlenmiş sayılar) :
ise başlarına % işareti koyularak gösterilirler. %111000 , %0001 gibi.

Sıklıkla kullandığımız sayı sistemi desimal olduğundan diğer sayıların kolayca anlaşılabilmesi için zaman zaman
bu sayıların 10 tabanına çevrilmesi gerekir. Aşağıda bu işlemin nasıl yapıldığını basitçe göreceksiniz. Bu işlemde
temel formül; aynı on tabanına göre sayılarda olduğu gibidir. Sağdan sola doğru haneler sayı tabanının katları
şeklinde değer alırlar. Yani değişen tek şey taban çarpım değeridir. Örnekle daha iyi anlayacaksınız.

Hexadesimal sayılar :0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F: Örnek sayımız <3F> olsun. 16 tabanlı sayı formatı
olduğundan;16'lar hanesi olan 3 sayısı 16 ile çarpılıp F sayısının desimal karşılığı bu sayıya eklenir.
Dolayısıyla;3F = 3 x 16 + 15 = 63 olarak bulunur.
Şayet sayı 23F olsa idi sayımız= 2 x 256 + 16 x 3 + 15= 575 olarak bulunacak idi.

Binary sayılar; 0-1 , örnek sayımız %11101101 olsun. Hanelerin taban sayısının katları şeklinde gittiğini biliyoruz.
O halde sağdan itibaren ilk sayımız hane değerleri şöyle olacaktır. sayı sırasına göre verir isek
128 - 64 - 32 - 16 - 8 - 4 - 2 – 1
Bu sisteme göre sayımızı desimal değere çevirelim;
%11101101: 128x1 + 64x1 + 32x1 + 16x0 + 8x1 + 4x1 + 2x0 + 1= 128+64+32+8+4+1=237 olarak bulunacaktır.

En çok kullanacağımız sayı formatlarından birisi olan Binary sayı formatının kullanım yerine bir örnek vermek
bu aşamada iyi olacaktır sanırım. Bir Pic'in B portuna bağlı olan Led lerden 0-3-4-6-ve 7 nolu pinlere bağlı olanları
bir seferde yanar hale getirebilmek için porta verilecek değeri desimal olarak hesaplayalım. Bu durumda
PortB=%11011001 olacaktır.Desimal değeri = 128+64+16+8+1= 217 olarak bulunur.

İlk projemiz, 16F84A işlemcinin Tüm bacaklarını çıkış olarak ayarlamak ve bu çıkışlara bağlanacak LED lerin değişik
aralıklar ile yanmasını gösteren bir program olacaktır. Bu arada amaç, Pic lerin bacaklarının nasıl çıkış olarak
ayarlandığını öğrenmek olacaktır.

Pic lerde bacakların giriş veya çıkış olarak ayarlanmasını üstlenen bir REGISTER (Türkçe’si YAZMAÇ) vardır.
Her bir port için ayrı olan bu registerler A portu için TRISA , B portu için ise TRISB olarak adlandırılır. Tris yazmaçları aslında
Pic’in hafızasında 8 bitlik birer hafızadırlar. Buraya yerleştirilen sayının Binary formatındaki şekline bağlı olarak Pic bacaklarını giriş
veya çıkış olarak ayarlar.8 bitlik değer sırası ile port'a ait pinleri temsil etmektedir.

Şöyle ki;

A) %00000000, ifadesi 8 bitlik Binary bir sayıdır. Desimal karşılığı 0 (sıfır) dır. Bu değeri her.gi bir TRIS registerine verir isek
tüm pinlerin OUTPUT yani çıkış olarak ayarlanacağını ifade eder.

B) Şayet değer %11111111 olur ise tüm bacakların INPUT yani giriş olarak ayarlanacağını ifade eder.

Binary değerin bazılarının sıfır (0) bazılarının bir(1) olması ise bazı pinlerin çıkış bazılarının ise giriş olarak ayarlandığını gösterir.
Şimdi açıklamamızı program şeklinde verelim.

TRISA=%00000 'A portu Çıkış olarak ayarlandı
TRISB=%00000000 'B portu Çıkış olarak ayarlandı

Çıkış olarak belirlediğim portun çıkış değerini Low (0) olarak ayarlamak için şu şekilde bir ifade yazabilirim.

PORTA=0 'A portu tüm çıkışlar Low (0)
PORTB=0 'B portu tüm çıkışlar Low (0) Eğer High yapmak isteseydim
(PORTA=1),(PORTB=1) şeklinde yazacaktım.

Gördünüz mü ne kadar basit. Pinleri çıkış olarak ayarladım ve tüm çıkışları Low yaptım.
Her.gi bir portun bir pin'inin gösterilme şekli port ismi devamında nokta ve pin numarası verilerek yapılır.
Örnek A portunun 2 nolu pini için PORTA.2 şeklinde bir gösterim kullanılır.
Şimdi diyelim ki PORTA.0 yani A portunun sıfır biti yani ilk pin'e bağlı LED'i yakalım ;Komutumuz bir kaç mantıklı şekilde olabilir. Sırası ile;

PORTA.0=1 'PortA.0 High yani 1 oldu ve LED yandı.veya
HIGH PORTA.0 'PortA.0 High oldu yani LED yandı,

Komutu mümkün olduğu sürece şeklinde kullanmayı tercih edin.

Proje 1a :
 
Şimdi de birden fazla pin'e bağlı Led lerin aynı anda yakılmasını gerçekleştirelim.
PortA=%10101 şeklin de bir komut yazarsam, sağdaki ilk değer olan 1 (Bir) PortA.0'a verilir.
Sonra sırası ile yani soldan sağa doğru olan Binary değerler PORTA nın 0-4 nolu pinlerine verilirler.
Değer sıfır ise pin Low, değer bir ise pin High olur. Sonuçta bu komut ;

TRISA=%00000 'A portu Çıkış olarak ayarlandı
PortA.0=1
PortA.1=0
PortA.2=1
PortA.3=0
PortA.4=1 '( Bu pin diğerlerinden farklıdır.Open kollektör olduğu için "pullup" direnci kullanılır.
Aksi halde istediğimiz çıkışı alamayız.) şeklinde karşılık gelen Binary değerleri port pinlerine verir.

Demek ki bir port'a bağlı pinlerin birden fazlasına hükmetmek için port'a sekiz bitlik bir Binary veya desimal değer verilir.
Şimdi port pinlerinin ne amaçlı çıkış olarak kullanıldığı üzerine biraz bilgi verelim.

Diyelim ki port pin'ine bağlı bir Role yi bir transistor aracılığı ile çalıştırmak istiyorsun. İşte yolu, pin çıkışını bir direnç ile (1K-2k2)
bir transistor ün (B)eys'ine bağla. NPN tipi bir transistör kullanırsan transistör ün (E)mitterini GND ye bağla.
Port Pin'inden High (1) çıkartırsan transistör iletime geçecek ve (C) kollektör ünden GND çıkaracaktır.
Bunu bir role ye bağla ve rölenin diğer ucunu +5V'a bağlar isen pinden röleyi çalıştırıp kapatabilirsin.

Bunu bir örnekle açıklayalım;
Diyelim ki PortB.1 pinine bir transistör üzerinden role bağladık ve bu röleyi açıp kapayacağız.İşte basit programımız;

Proje 1b :
 
1 TRISB=%00000000 'B portu çıkış yapıldı
2 PortB=0 'B portunun çıkışı Low(0) yapıldı.
3 ROLEAC:
4 HIGH PORTB.1
5 PAUSE 1000 '1000 ms lik bir gecikme yaratır.
6 LOW PORTB.1
7 PAUSE 500
8 GOTO ROLEAC

1. Satırda PortB yi çıkış olarak ayarladık.
2. Satırda PortB pinlerinin tamamını LOW yaptık.
3. cü satırda ROLEAC isimli bir etiket yarattık.(Yaptırmak istediğimiz diğer komutlar için ismini
kendimizin koyduğu başka etiketler yaratıp programın daha fazla işlem yapmasını sağlarız.)
4. satırda PortB.1 pinini High yaptık.
5. satırda 1000 ms lik bir gecikme yarattık. Yani role 1000 ms süresince çekili kaldı.
6. Satırda PortB.1 pinini LOW yaptık. Yani role bıraktı.
7. satırda tekrar 500 ms lik bir gecikme yarattık.

Sonra programı tekrar aynı işleri yapması için ROLEAC etiketine yönlendirdik.

Buraya kadar öğrendiklerimizi toparlar isek;
- Sayı gösterim formatlarını öğrendik.
- Port pinlerinin nasıl giriş nasıl çıkış yapılacağını öğrendik.
- Port ve port pinlerine nasıl ulaşabileceğimizi öğrendik.
- Milisaniye cinsinden gecikmenin nasıl yaratıldığını öğrendik.
- Program içinde etiket kullanarak aynı işlemlerin nasıl tekrarlanabileceğini öğrendik.
Bütün bu öğrendiklerimizi tek program üzerinde göstermeye çalışalım.

Proje 1c :
 
Program PortA.0 pinine bağlı LED i kontrol edecek ve ayrıca PortB.0 pin'ine bağlı röleyi açıp kapayacaktır.
Role çekildiğinde PortA.0 pinine bağlı LED yanacak. Role bırakınca LED’de sönecektir.
Role çekili kalma süresi 1 sn. yani 1000 ms. olacaktır.

TRISA=0 'bu ifade “ TrisA=%00000 ” e eşdeğerdir.
TRISB=0
PortA=0
PortB=0
ROLEAC:
HIGH PORTB.0 'role çektirildi
PAUSE 500 '500 ms bekleme
HIGH PORTA.0 'Led yandı
PAUSE 500 '500 ms bekleme
LOW PORTA.0 'Led söndü
PAUSE 500 '500 ms bekleme
LOW PORTB.0 'Role bıraktı
PAUSE 500 '500 ms bekleme
GOTO ROLEAC 'Roleac etiketine git
END 'programın burada bittiğini ifade eder.

alıntıdır hazırlayan arkadaşa teşşekür ederiz..

insanlar sizi eskisi gibi kullanmadıklarında değiştiğinizi söylerler…

Eğer bir aptala laf anlatmaya çalışırsan dışarıdan bakanlar iki aptalın sohbet ettiğini sanırlar.

Kamburlar ülkesinde sırtı düze sakat denir.

Çevrimdışı Müslim yavuz

  • Yüzbaşı
  • ***
  • İleti: 414
  • Cinsiyet: Bay
  • technician and photographer
    • www.muslimyavuz.com
Ynt: Pic Basic Pro Öğreniyoruz - 1
« Yanıtla #1 : 08 Ekim 2007, 14:00:28 »
Bu bilgilergerçekten güzel sağol karadağ.

Asm de iyi yada kötü bir bilgi edindikten sonra bazı arkadaşılarımın tavsiyesi üzerine plus öğrenmeye karar verdim ve bu notlardan faydalanıyorum.

Çevrimdışı humhum

  • Yüzbaşı
  • ***
  • İleti: 623
  • humhum
Ynt: Pic Basic Pro Öğreniyoruz - 1
« Yanıtla #2 : 13 Nisan 2010, 22:08:14 »
 Merhaba Karadağ,  PBP 'de  ( CodeDesigner Lite ) ile yazılan komutlar   Compile yapıldığında
 ortaya   .Hex  dosyası oluşuyor.    
 
 Benim sorum şu :

 Her.gi bir   .Hex  oluşmuş dosyasının içindeki komutları  okumak için hangi programı kullanmalıyız. ( Tekrardan Hex dosyasının içindeki   Basic komutlarını okumak için)  ,Bildiğim kadarı ile .Hex ten Assembler'e dönüşüyor ,ama  .Hex ten PBP ye dönüşüyor mu?

 Saygılar.
 

 Örnek PBP komutları:

loop:

Low PORTB.4
Pause 50
Low PORTB.2
Low PORTB.5
Pause 50
Low PORTB.1
Low PORTB.6
Pause 50
Low PORTB.0
Low PORTB.7        
Pause 300

GoTo loop

End
« Son Düzenleme: 13 Nisan 2010, 22:12:01 Gönderen: humhum »

Çevrimdışı ...SİNYALCİ...

  • Yarbay
  • **
  • İleti: 2242
  • Cinsiyet: Bay
  • ...İNCİNSENDE İNCİTME...
Ynt: Pic Basic Pro Öğreniyoruz - 1
« Yanıtla #3 : 14 Nisan 2010, 17:52:12 »
hocam derslerinizi büyük dikkatle takip edecem teşk.
...DÜŞMANIN ATTIĞI TAŞTAN , DOSTUN ATTIĞI GÜL AĞIR GELİR BANA...

Çevrimdışı Karadağ

  • Global Moderator
  • General
  • *****
  • İleti: 8470
  • Cinsiyet: Bay
  • R & D ENGINEER
    • TeknolojiEkibi
Ynt: Pic Basic Pro Öğreniyoruz - 1
« Yanıtla #4 : 21 Nisan 2010, 20:00:05 »
destop yazılımlarda(.net) bu tür uygulamalar mevcut(örn:fox decompiler) ama daha embadded yazılımda daha buna rastlamadım.
insanlar sizi eskisi gibi kullanmadıklarında değiştiğinizi söylerler…

Eğer bir aptala laf anlatmaya çalışırsan dışarıdan bakanlar iki aptalın sohbet ettiğini sanırlar.

Kamburlar ülkesinde sırtı düze sakat denir.

Çevrimdışı yanlızkurt

  • Yüzbaşı
  • ***
  • İleti: 357
  • Cinsiyet: Bay
Ynt: Pic Basic Pro Öğreniyoruz - 1
« Yanıtla #5 : 20 Mayıs 2010, 11:58:38 »
bende çok araştırdım bu konuyu özellikle makinaların beyinlerini okutup kodlarını anlamak yada ilaveler yapmak için ama bulamadım. asm ye döndüren programlarda tam anlamı ile çeviremiyor diyorlar. sanırım çin kökenli dillerini bilemediğim için bişey diyemiyorum tam olarak ama bir çok entegrenin kodlarını alıp asm ye çeviren programları var. ama yetersiz diyorlar. bu konu hakkında bilgi edinebilirsen bizlerede haber verirmisin Humhum.