Notlar..

320volt / Elektronik Kaynakları/

PIC16F628 Hakkında

Elektronik Kaynakları, blog arşivinde PIC16F628 HAKKINDA konusu "16f628 özellikleri* 16f628 türkçe* 16f628a* 16f628a kullanımı* 16f628a özellikleri* PIC16F628* " ile etiketlendi

Hazırlayan: Esin POLAT
PIC16F628 Mikrodenetleyicisi

Bu bölümde PIC16F628 mikrodenetleyicisi hakkında bilgi verilecektir. PIC16F628 ismini İngilizce “Peripheral Interface Controller” kelimesinin baş harflerinden alır. Türkçe çevirisi ise “Çevresel üniteleri denetleyici arabirim”’dir. RISC (Reduced Instrucition Set Computer) mimarisi adı verilen bir yöntem kullanılarak üretildiklerinden bir PIC16F628’i programlamak için kullanılacak komutlar oldukça az ve kolaydır. Bir tasarım yöntemi plan RISC mimarisindeki temel düşünce, daha kolay ve az sayıda komut kullanılmasıdır. Şekil 2.15’de PIC16F628’in dış görünüşü görülmektedir.

16f628_1.jpg

PIC16F628 ile PIC16F84’ün Karşılaştırması

• PIC16F84 en fazla 10 MHz hızında çalışabilirken PIC16F628 en fazla 20 MHz hızında çalışabilmektedir. Bu PIC16F628’in işlemleri iki kat hızlı yapabilmesine olanak sağlamaktadır. Bu, özellikle işlem yükü fazla olan uygulamalarda avantaj sağlamaktadır [4].

• PIC16F84’ün program belleği 1k iken PIC16F628’in program belleği 2k’dır. Gelişmiş uygulamalarda program kodunun uzun olması daha geniş bellek alanı gerektirebilir. 2k program belleği ile PIC16F628 daha avantajlıdır. Ayrıca PIC16F628’in RAM belleği ve EEPROM veri belleği PICI6F84’ün iki katından daha fazladır.

• PIC16F628 sahip olduğu 37 kHz/4 MHz’lik dahili osilatör ile, PIC16F84’ün çalışması için gerekli olan harici osilatöre olan ihtiyaç ortadan kaldırılmıştır. Böylece fazladan 2 I/0 ucu kullanılabilmektedir. Ayrıca MCLR ucu isteğe bağlı olarak giriş ucu olarak da kullanılabilmektedir.

• PIC16F84’te sadece 8-bitlik bir zamanlayıcı (TIMER) varken PIC16F628’de iki adet 8 bitlik ve bir adet 16 bitlik zamanlayıcı bulunmaktadır.

PIC16F84, 13 giriş/çıkış ucuna sahipken PIC16F628’de 16 giriş/çıkış ucu vardır. PIC16F628 daha fazla I/O uç sayısına ihtiyaç olan uygulamalarda PIC16F84’ün yerine kullanılabilir.

• PIC16F628’de PIC16F84’te bulunmayan analog karşılaştırıcı modülü, PWM modülü ve seri haberleşmeye donanımsal olarak olanak sağlayan USART/SCI (Universal Synchronous/Asynchronous Receiver/Transmitter) modülü bulunmaktadır.

• PIC16F628 piyasada kolay bulunabilmektedir ve fiyatı PIC16F84’e göre daha düşüktür (PIC16F84’ün 2004 yılında ABD satış fiyatı 4.38$ iken PIC16F628’in 1.61$’dır). PIC16F84’ün fiyatı 33 I/0 ucuna sahip olan P1C16F877’ye oldukça yakındır.

PIC16F628 ile PIC 16F877’nin Karşılaştırılması

• PIC 16F877, 33 giriş/çıkış ucuna sahipken PIC 16F628’de 16 giriş/çıkış ucu vardır.

• Hem PIC16F877 hem de PIC16F628 en fazla 20 MHz’de çalışmaktadır.

• PIC16F877’nin program belleği 8k iken PIC16F628’in ise 2k dır. 8k program belleği ile PIC16F877 daha avantajlıdır. Ayrıca PIC16F877’in RAM belleği 368 byte, PIC16F628’in ise 224 byte’tır.

• PIC16F877’nin EEPROM veri belleği 256 byte iken PIC16F628’in ise 128 byte’tır.

• PIC16F877 ve PIC16F628’in iki adet 8 bitlik ve bir adet l6 bitlik zamanlayıcı bulunmaktadır.

• Her ikisinde de PWM modülü, analog karşılaştırıcı modülü ve seri haberleşmeye donanımsal olarak olanak sağlayan modüller bulunmaktadır.

• PIC16F877’nin analog girişleri bulunmakla beraber PIC16F628’in analog girişleri çoktur.

• PIC16F877’in piyasa değeri PIC16F628’den daha pahalıdır.

PIC16F628’in Özellikleri

PIC16F628, diğer picler gibi RISC yapısı üzerine kurulu Harvard mimarisi ile üretilmiştir ve flaş program belleğine sahip PIC16CXX ailesinden 8 bitlik bir mikrodenetleyicidir. PIC16F628’in mimari yapısından dolayı program ve veri bellekleri fiziksel olarak ayrı birimlerdedir ve bunlara farklı veri yolları ile erişilmektedir. Tablo2.12’de PIC16F628’in genel özellikleri görülmektedir.

Saat Frekansı En Yüksek Çalışma Frekansı 20 MHz
Bellek Flash Program belleği 2 k
RAM Belleği 224 byte
EEPOM Belleği 128 byte
Çevresel Birimler Zamanlama (TIMER) modüleri TMR0, TMR1, TMR2
Analog Karşılaştırıcı 2
YakalaKarşılaştırPWM Modülü 1
Seri Haberleşme USART
Diğer Özellikleri Kesme Kaynağı 10
GirişÇıkış Uç Sayısı 16
Çalışma Gerilimi Aralığı 3-5.5V
Brown-out Algılama Var
Kılıf (Package) Biçimi 18-pin DIP, SOIC 20 pin SSOP

16f628 özellikleri, 16 f 628 özellikleri

Şekil 2.16’de ise PIC16F628’in bacak yapısının açık şekli görülmektedir
16f628_2.png

Şekil 2.17’de ise PIC16F628’in iç yapısının blok şeması görülmektedir. PIC16F628’de her bir komutun (operation code – opcode) uzunluğu 14-bit, işlenecek verinin (operand) uzunluğu ise 8-bittir.

16f628_diagram.png

RISC Mimarisinin PIC16F628’ e Kazandırdığı Özellikler

• Sadece 35 komut ile kontrol
• Çalışma hızı: DC – 20 MHz’lik giriş zamanı
• DC – 200 ns’ lik komut periyodu
• 14 – bit uzunluğunda komutlar
• 8- bit uzunluğunda veri yolu
• 15 özel fonksiyonlu donanım Register’leri
• 8 seviyeli derin donanım stack’i
• Doğrudan – dolaylı ve izafi adresleme yöntemi
• 1000 kere program silip yazma özelliğine sahip Flash bellek

PIC16F628 Portları

PIC16F628’in DIP (Dual Inline Package) kılıf için uçlarının genel görünüşü Şekil 3.2’de görülmektedir. Bu şekilde görüldüğü gibi PIC16F628, A portu ve B portu olmak üzere 8 uçlu iki porta sahiptir. B portunun her bir ucu ayrı ayrı giriş/çıkış olarak ayarlanabilirken, A portunun RA5/ ucu hariç diğer uçları ayrı ayrı giriş/çıkış olarak ayarlanabilmektedir. Bu uç sadece giriş olarak düzenlenebilir. Diğer PIC’lerde olduğu gibi, az sayıdaki uçların etkin kullanımı için bazı uçların birden fazla kullanım özelliği vardır. Böylece fazladan uç kullanımına gerek kalmadan birçok özellik kullanılabilmektedir [5]

PIC16F628 Port A

Port A 8-bit uzunluğundadır. Tablo 2.13 de Port A’nın uçları ile ilgili açıklamalar görülmektedir.
Tablo 2.13. Port A uçları hakkında açıklamalar

Uç adı Uç no IO tipi Açıklama
RA0/AN0 17 IO İki yönlü I/O ucu ve analog karşılaştırıcı girişi
RA1/AN1 18 IO İki yönlü I/O ucu ve analog karşılaştırıcı girişi
RA2/AN2/VREF 1 IO İki yönlü I/O ucu ve analog karşılaştırıcı girişi ve VREF çıkışı
RA3/AN3/CMP1 2 IO İki yönlü I/O ucu ve analog karşılaştırıcı girişi ve analog karşılaştırıcı çıkışı
RA4/TOCKI/CMP2 3 IO İki yönlü I/O ucu, TMR0 saat işareti girişi ve analog karşılaştırıcı çıkışı
RA5//THV 4 I Giriş ucu ve reset girişi
RA6/OSC2/CLKOUT 17 IO İki yönlü I/O ucu ve kristal osilatör çıkışı
RA7/OSC1/CLKIN 18 IO İki yönlü I/O ucu, kristal osilatör girişi ve harici saat kaynağı girişi

Port A’nın bütün uçları Schmitt Trigger (ST) yapıdadır. TTL (Transistor Transistor Logic) yapıdaki uçlarda ‘0’dan ‘1’e ve ‘1’den ‘0’a geçiş için aynı geçiş bölgesi darken (veya tek bir değer iken), ST yapıdaki uçlarda ‘0’dan ‘1’e ve ‘1’den ‘0’a geçiş bölgesi daha geniştir. Bu farklılık şekil 2.18’te görülmektedir.

16f628_2.jpg
Şekil 2.18 Schmitt Trigger ve TTL uç yapıları arsındaki fark: a) Schmitt Trigger b)TTL

5V besleme gerilimi altında PIC16F628’in ST yapıdaki ucu 1V’un (Ve1) altına indiğinde “0” , 4V’un (Ve2) üstüne çıktığında “1” olmaktadır. TTL yapıdaki ucu ise 0.8V’un (Ve3) altında “0”, 2V’un (Ve4) üzerinde “1” olmaktadır. Sonuç olarak ST yapıdaki uçlarda “0” dan “1”’e geçişler daha kesindir. RA4 ucu çıkış olarak kullanılmak istenildiğinde, open drain özelliğinden dolayı, mutlaka harici bir dirençle (pull-up) besleme gerilimine bağlanmalıdır. RA4 ucu aynı zamanda TMR0 (Timer 0 – Zamanlayıcı 0) için saat (clock) işareti girişi (TOCKI -Timer 0 ClocK In) olarak da kullanılabilir. TMR0 normalde PIC’in kullandığı saat çalışırken, istenilirse program kodları ile bu uçtan girilecek farklı bir saat işaretine göre de çalıştırılabilir. RA5 ucunun çıkış özelliği bulunmamakta, bunun dışındaki bütün uçlar ayrı ayrı giriş/çıkış olarak kullanılabilmektedir.

PIC16F628 Port B

Port B 8-bit uzunluğundadır. Tablo 2.14’de Port B ‘nin uçları ile ilgili açıklamalar görülmektedir.

Uç adı Uç no IO tipi Açıklama
RB0/INT 6 IO İki yönlü I/O ucu ve harici kesme girişi
RB1/RX/DT 7 IO İki yönlü I/O ucu, USART alıcı ucu ve senkron veri giriş/çıkış ucu
RB2/TX/CK 8 IO İki yönlü I/O ucu, USART verici ucu ve senkron saat darbesi giriş/çıkış ucu
RB3/CCP1 9 IO İki yönlü I/O ucu, yakala karşılaştır PWM modülü giriş/çıkış ucu
RB4/PGM 10 IO İki yönlü I/O ucu, düşük gerilimle programlama giriş ucu
RB5 11 IO İki yönlü I/O ucu
RB6/T1OSO/T1CK1 12 IO İki yönlü I/O ucu, TIMER1 osilatör çıkış ve TIMER1 saat darbesi girişi
RB7/T1OSI 13 IO İki yönlü I/O ucu ve TIMER1 osilatör girişi

Port B’nin bütün uçları genel amaçlı giriş/çıkış olarak kullanıldığında TTL yapıdadır. RB5 dışındaki uçlar özel amaçlı fonksiyonlar (seri haberleşme, düşük gerilimle programlama v.b.) için kullanıldığında ise ST yapıdadır.Port B’nin bütün uçları özel amaçlı bir saklayıcı kullanılarak dahili pull-up dirençlerine bağlanabilir. Bu özellik kullanılmadan, ilgili uca bağlanacak direncin besleme gerilimine çekilmesi de aynı işleme karşılık gelir. Çıkış olarak koşullanan uçtaki pull-up direnci PIC tarafından otomatik olarak kaldırılır. Şekil 2.19 da, pull-up direncinin kullanımına örnek görülmektedir.

16f628_3.jpg

Şekil 2.19 Port B’ye a) harici direnç kullanarak b) dahili pull-up direnci kullanarak buton bağlama

Normalde besleme gerilimini (‘1’) gören uç, butona basıldığında toprak potansiyelini (‘0’) görür. Böylece butona basılıp basılmadığı anlaşılabilir. Şekil 2.10’da görüldüğü gibi dahili pull-up direncinin kullanımı sayesinde harici bir dirence gerek kalmadan aynı işlem yapılabilir. PIC’e enerji verildiğinde (power-on reset durumu) pull-up dirençleri aktif değildir.

Port B’nin 0 numaralı ucu (RB0/INT) kesme girişi olarak da kullanılabilir. Port B’nin 4-5-6-7 numaralı uçlarındaki verideki bir değişiklik durumunda istenirse PIC uyku (sleep) durumundan normal çalışma durumuna geçirilebilir. Uyku durumu, PIC’in sürekli işlem yapması gerekmediği durumlarda az enerji harcaması (3V besleme gerilimi için l A’ den daha az) için kullanılan bir çalışma biçimidir

PIC16F628’in Diğer Donanım Özellikleri

Besleme Gerilimi

PIC16F628’in besleme gerilimi 3-5.5V arasında seçilebilir. Daha düşük gerilimle çalışması gereken sistemler için 2-5.5V gerilim aralığında çalışan PIC16LF628 kullanılabilir. PIC16F628’in beslemesi VDD ve VSS uçlarından verilmektedir. DIP kılıf yapısı için 14 numaralı uç olan VDD’nin + beslemeye, 4 numaralı uç olan VSS ise toprağa bağlanması gerekir.

PIC’e besleme gerilimini sağlayan gerilim kaynağı ilk açıldığında besleme gerilimindeki dalgalanmaları ve yüksek akım çeken devre elemanlarının devreye girip çıkması ile besleme gerilimindeki ani ve istenmeyen değişimleri engellemek için VSS ile VDD uçları arasına bir kondansatör bağlanmalıdır. Böylece PIC’in istenmeyen şekilde resetlenmesi engellenmiş olur. Şekil 2.20 de PIC16F628’in besleme bağlantı şeması görülmektedir.

16f628_4.jpg

PIC16F628 Osilatör Tipleri

PIC16F628 işlemleri gerçekleştirmesi için gerekli olan saat işaretleri birçok farklı devre ile elde edilebilir. Mikroişlemcilerin program kodlarını çalıştırma süresi saat işaretine bağlıdır. Yüksek saat işareti hızında çalışan bir mikroişlemci aynı sürede saat işareti hızı düşük olan bir mikroişlemciye göre daha fazla komutu işler. Öreğin 3 GHz’de çalışan bir işlemci 1 GHz’de çalışan aynı işlemciye göre 3 kat daha hızlı komut işler [5].

PIC16F628 en fazla 20 MHz saat işaretinde düzgün çalışabilir. Saat işareti farklı yollarla elde edilebilir;

• LP (Low Power Crystal) : Düşük güçlü kristal
• XT (Crystal/Resonator) : Kristal/rezonatör
• RS (High Speed Crystal/Resonator) : Yüksek hızlı kristal/rezonatör
• ER (External Resistor) Harici direnç (2 çalışma biçimi)
• INTRC (Internal Resistor/Capacitor) : Dahili RC (2 çalışma biçimi)
• EC (External Clock In) : Harici Saat Girişi
• LP, XT veya RS tipi osilatörler OSCI ve OSC2 uçlarına bağlanırlar. Bu tip osilatör devrelerinin PIC16F628’e bağlantısı Şekil 2.21’de görülmektedir.

16f628_5.jpg
Şekil 2.21 LP, XT ve HS tipi osilatörlerin PIC16F628’e bağlanması

RS direnci bazı tipteki kristaller için gerekebilir. Osilatör olarak genellikle kristal kullanıldığından Tablo 3.4’te kullanılacak kristal frekansına göre seçilecek C1 ve C2 kondansatör değerleri görülmektedir.

Tablo 2.15.Kristal osilatör için kondansatör değerleri

Çalışma biçimi Frekans C1 C2
LP 32 kHz 68-100 pF 68-100 pF
200 kHz 15-30 pF 15-30 pF
XT 100 kHz 68-150 pF 150-200 pF
2 MHz 15-30 pF 15-30 pF
4 MHz 15-30 pF 15-30 pF
HS 8 MHz 15-30 pF 15-30 pF
10 MHz 15-30 pF 15-30 pF
20 MHz 15-30 pF 15-30 pF

Daha büyük kondansatör değerleri osilatörün düzenli çalışmasını sağlarken enerji verildikten sonra PIC’in çalışmaya başlama süresini uzatır.

Zamanlamanın çok önemli olmadığı uygulamalarda ER tipi osilatör kullanılabilir. Bu çalışma biçiminde OSC1 ucu ile Vss arasına bağlanacak tek bir direnç ile dahili osilatörün çalışma frekansı ayarlanır. Tablo 3.5’te bu uca bağlanacak direnç değerine göre PIC16F628‘in çalışma frekansı görülmektedir.

ER tipi osilatör kullanılması durumunda, kullanılmayan OSC2 ucu normal giriş/çıkış ucu olarak kullanılabilir. Ayrıca bu uç, diğer harici donanımlarla eşzamanlı (synchronous – senkron) çalışmada kullanılmak üzere osilatör frekansının ¼’ünde saat işareti üretmek için de kullanılabilir.

Dahili RC osilatör (INTRC) kullanımında OSC1 ve OSC2 uçlarına herhangi bir devre elemanı bağlamaya gerek yoktur. Bu uçlar giriş/çıkış ucu olarak kullanılabilir. İsteğe bağlı olarak OSC2 ucu ER tipi osilatör çalışmadaki gibi kullanılabilir, Dahili RC tipi çalışmada 4 MHz veya 37 kHz çalışma frekansı seçilebilir. Bu değerler 5V çalışma gerilimi ve 25°C ortam sıcaklığında geçerlidir.

Tablo 2.16. ER osilatör biçiminde çalışma frekansının belirlenmesi

Direnç Frekans
0 10.4 MHz
1 K 10 MHz
10 K 7.4 MHz
20 K 5.3 MHz
47 K 3 MHz
100 K 1.6 MHz
220 K 800 kHz
470 K 300 kHz
1 M 200 kHz

Donanım reset

PIC16F628’i donanımsal olarak resetlemenin iki yolu vardır. Bunlardan ilki, besleme verildiğinde PIC’in kendini resetlemesi ve reset vektörüne giderek program kodlarını çalıştırması şeklinde olur. İkincisi ise donanım resetidir. MCLR ucunun ‘0’a çekilmesi ile gerçekleşir. Bu iş için kullanılabilecek devre Şekil 2.22’de görülmektedir.

donanim_reset.jpg

Şekil 2.22.PIC’in MCLR ucu kullanılarak resetlenmesi

Normalde “1” seviyesini gören MCLR ucu, butona basıldığında ‘0’ olur. Bu durumda da PIC yine reset vektörüne giderek program kodlarını çalıştırmaya başlar. MCLR ucu istenirse donanımsal resetleme yerine giriş ucu olarak kullanılabilir. Bu durumda PIC, besleme gerilimi kesilmediği sürece harici olarak resetlenemez.


PIC16F628’in Bellek Yapısı

PICI6F628’in 2k boyutunda program belleği vardır. Bu bellekteki her bir göz 14-bit uzunluğundadır. Bu gözlerin uzunluğu ve içindeki veriler programcıyı doğrudan ilgilendirmemektedir. Şekil 3.9’da PIC 16F628’in program belleği haritası verilmektedir. Görüldüğü gibi 0-7FFh arasındaki program belleği 2k uzunluğundadır.

PIC16F628’in RAM bölgesinin 4 parçaya (bank) ayrıldığından ve bu 4 RAM bölgesinde genel amaçlı saklayıcılar (general purpose registers) ve özel amaçlı saklayıcılar (special function registers) bulunmaktadır. Her bir RAM bölgesinin ilk 32 byte’lık kısmı özel amaçlı saklayıcılar tarafından kullanılmaktadır. Genel amaçlı saklayıcılar için ise 224 byte’lık bir alan ayrılmıştır. Bu saklayıcılarda program yazarken kullanılan değişkenler tutulur. Şekil 2.23 de PIC16F628’in RAM bölgesinin haritası görülmektedir.

pic_ram.png
Şekil 2.23 PIC16F628’in program bellek yapısı

Özel amaçlı saklayıcılar kullanılmak istendiğinde ilgili RAM bölgesine geçiş yapılmalıdır. Örneğin PORTA özel amaçlı saklayıcısına erişmek için mutlaka sıfırıncı RAM (Bank 0) bölgesine geçilmelidir. Bazı özel amaçlı saklayıcılar bütün RAM bölgelerinde bulunmaktadır ve bu saklayıcılara bank değiştirmeden erişilebilir. RAM bölgeleri arasında geçiş STATUS saklayıcısı kullanılarak yapılır. Microchip firması yukarıda bahsedilen RAM bölgesindeki 8-bitlik gözlere veri saklayıcısı (file register) adını vermektedir.

PIC işlemlerini genellikle veri saklayıcıları ve W saklayıcısı (Working register) üzerinden yapar. W saklayıcısı 8-bitlik bir saklayıcıdır ve birçok işlem bu saklayıcı üzerinden yapılmak zorundadır. Aşağıdaki şekilde PIC 16F628’in RAM bölgesi haritasının şekli görülmektedir.

ram_harita.jpg

Kesmeler – Hakkında Temel Bilgiler

Mikrodenetleyicinin rutin olarak yaptığı işler dışında bazı özel durumlar oluştuğunda, rutin işlerini bırakıp bu özel durumla ilgili görevleri yerine getirmesi gerekir. Burada bahsedilen, özel durumun oluşup oluşmadığının sürekli kontrol edilmesi yerine, kesme kullanılarak özel durumun oluştuğu mikrodenetleyiciye otomatik olarak bildirilir ve böylece gereksiz kontrollerden kurtulunur. Burada bahsedilen özel durum öncelikli bir görev olabileceği gibi, nadiren yapılması gereken bir görev de olabilir.

Örneğin PIC16F628 ile bir sıcaklık kontrolü yapıldığını düşünelim. Ortam sıcaklığı belirli bir değerin (ayar noktasının) üstüne çıktığında klima devreye sokulsun. Ayar noktası iki butonla kontrol edilsin. Sistem sıcaklığı ölçüp ayar noktasına göre klimayı kapatıp açmaktadır. Ayar noktasının değiştirilmesi işlemi nadiren yapılacağından bu işlem kesme ile yapılabilir.

Böylece bu butonların sürekli olarak kontrolüne gerek kalmaz. Sadece butonlara basıldığında ayar noktasının değeri kesme hizmet programı ile değiştirilir ve sistem ana programa dönerek rutin sıcaklık kontrolü işlemine devam eder.

Kesme Durumunda PIC’in Yaptığı İşler

Herhangi bir program kodu çalışırken bir kesme gelmesi durumunda PIC l6F628’in otomatik olarak yapacağı işler aşağıda listelenmiştir. Şekil 2.25’te ise kesmelerin çalışma mantığı görülmektedir.

1. Kesme gelmeden önce çalıştırılan komuttan sonraki komutun program belleğindeki adresi yığına (stack) otomatik olarak atılır. Böylece kesmeden dönüldüğünde programın nerede kaldığı PIC tarafından bilinecektir

pic_kesme.jpg
Şekil 2.25. Kesmelerin çalışma mantığı

2. PIC16F628’in kesme vektörü olan program belleğinin 0×0004 adresine gidilir ve buradaki program kodları çalıştırılmaya başlanır. Dolaysıyla kesme kullanılması durumunda 0×0004 adresine ana programa ilişkin program kodu yazılmamalıdır.

3. 0×0004 adresindeki “kesme hizmet programı (interrupt service routine-ISR)” olarak da adlandırılan kesme programı çalıştıktan sonra RETFIE komutu ile kesmeden geri dönüş sağlanır. Bu durumda PIC otomatik olarak yığından ana programda döneceği yerin adresini alır ve program sayıcısına (PC) yükler.

4. Ana program kaldığı yerden çalışmaya devam eder.
Şekil 3.12’de bir kesme gelmesi durumunda kesme hizmet programının çalıştırılması görülmektedir. Şekil 2.26.a’da kesme hizmet programının program belleğinin 0×0004 adresinden itibaren yazıldığı durum, Şekil 2.26.b’de ise 0×0004 adresinden başka bir etikete dallanılarak kesme programının bu etiketten itibaren yazıldığı durum görülmektedir. Genellikle Şekil 2.26.b’deki bu yöntem kullanılmaktadır.Şimdi Şekil 2.26.b’deki durumu ayrıntılı olarak inceleyelim. 0×03 adresindeki movlw h’FF’ komutu işletilirken bir kesme geldiğini düşünelim. Bu durumda öncelikle movlw komutunun işini bitirmesi beklenir.

Daha sonra 0×035 adresindeki movwf PORTB komutu işletilmeden 0×035 adresi yığına geri dönüş adresi olarak atılır. Bu işlem PIC tarafından otomatik olarak yapılır. Daha sonra yine otomatik olarak 0×0004 kesme vektörüne gidilir. Kesme vektöründe goto ACIL komutu ile ACIL etiketi altındaki program çalıştırılır. Bu programın sonundaki retfie komutunun çalıştırılması ile yığından geri dönüş adresi olan 0×035 alınarak programın bu adresten itibaren çalışmaya devam etmesi sağlanır. PIC16F628’de kesme ile ilgili işlemleri kontrol etmek için INTCON, PIE1 ve PIR1 özel amaçlı saklayıcıları kullanılır.

kesme.png
Şekil 2.26. Kesme durumunda hizmet programının çalışması

PIC16F628’in Kesme Kaynakları

PIC16F628’de kesmeye neden olan 10 farklı durum mevcuttur ve bunlar kesme kaynağı (interrupt source) olarak adlandırılır. Aşağıda PIC16F628’in kesme kaynakları listelenmiştir.

• Harici RB0INT kesmesi
• TMR0 taşma kesmesi
• PORTB<4:7> bitlerindeki değişim kesmesi
• Karşılaştırıcı kesmesi
• USART TX kesmesi
• USART RX kesmesi
• CCP kesmesi
• TMR1 taşma kesmesi
• TMR2 kesmesi
• EEPROM kesmesi
Burada Karşılaştırıcı kesmesi, USART TX kesmesi, USART RX kesmesi, CCP kesmesi, TMR1 taşma kesmesi, TMR2 kesmesi, EEPROM kesmesi ‘çevresel kesmeler’ olarak adlandırılır.

Zamanlayıcılar-Zamanlayıcılar Hakkında Temel Bilgiler

PIC mikrodenetleyicilerinde zamanlayıcı/sayıcı olarak kullanılmak üzere donanımsal birim(ler) mevcuttur. Bu zamanlayıcı/sayıcılarla yapılacak işlemler yazılımsal olarak da kısmen yapılabilmektedir. Ancak bu birim(ler)in donanımsal olarak PIC’in içerisinde bulunması yazılım açısından büyük kolaylıklar sağlamaktadır.
PIC16F628’de 3 farklı zamanlayıcı/sayıcı bulunmaktadır. Şimdi sırasıyla bunları inceleyelim.

Zamanlayıcı-0 (TIMER-0)

PIC16F84’de de bulunan bu zamanlayıcının özellikleri aşağıda listelenmektedir.
• 8-bitlik bir zamanlayıcı/sayıcıdır (0-255 arası sayabilir).
• TMR0 özel amaçlı saklayıcısı ile bu zamanlayıcının değeri okunabilir veya bu saklayıcıya veri yazılabilir.
• 8-bitlik ön bölücü kullanılarak zamanlama süresi/sayma miktarı ayarlanabilir.
• Dahili komut çevrimi veya harici saat işareti ile çalışabilir.
• TMR0 saklayıcısının değeri 255’den 0’a geçtiğinde kesme üretir.
• Harici saat işareti için kenar seçimi yapılabilir (saat işaretinin düşen/yükselen kenarında çalışmasının seçilebilmesi).

Zamanlayıcı-0 kurulduğunda çalışmaya başlar, yani sayması için herhangi bir komut kullanılmaz. Ayarlanan ön bölücü değerine bağlı olarak belirli bir komut çevrimi sonra veya harici saat işaretine (veya bir olaya) bağlı olarak otomatik olarak ‘1’ artar. Kesme veya başka özel durumlarda bu zamanlayıcı/sayıcı çalışmaya devam eder. Zamanlayıcı -0 ’ın kontrol işlemleri için OPTION saklayıcısı kullanılır.

Zamanlayıcı-1 (TIMER-1)
PIC16F84’de bulunmayan bu zamanlayıcının özellikleri aşağıda listelenmektedir:

• 16-bitlik bir zamanlayıcı/sayıcıdır. (0-65535 arası sayabilir)
• 8-bitlik TMR1H ve TMR1L özel amaçlı saklayıcıları ile bu zamanlayıcının değeri okunabilir veya bu saklayıcılara veri yazılabilir. TMR1H yüksek anlamlı 8-biti, TMR1L ise düşük anlamlı 8-biti içerir.
• 3-bitlik ön bölücü kullanılarak zamanlama süresi/sayma miktarı ayarlanabilir.
• Taşma durumunda kesme üretebilir. (65535’den 0’a geçişte)
• RB6/T1OSO/T1CKI ucundan girilen harici saat işareti ile sayıcı olarak kullanılabilir.
• Bu zamanlayıcı için CCP biriminden reset üretilebilir.
• Bu zamanlayıcı için harici osilatör kullanılabilir. Bu durumda osilatör RB7/T1OSI ile RB6 T1 OSOT1CK1 uçlarına bağlanmalıdır. Bu modda TRIS<7:6> bitlerinin durumu gözardı edilerek bu uçlar giriş olarak ayarlanır. Zamanlayıcı-l’in kontrol işlemleri için T1CON özel amaçlı saklayıcısı kullanılır.

Zamanlayıcı-2 (TIMER-2)

PIC16F84’de bulunmayan diğer bir zamanlayıcı olan TMR2’nin özellikleri aşağıda listelenmektedir.
• 8-bitlik bir zamanlayıcıdır. Sayıcı özelliği yoktur
• 4-bitlik ön bölücü ve son bölücülere sahiptir
• Normal zamanlama amaçlı kullanılabileceği gibi CCP birimini PWM modunda çalıştırılması durumda, PWM süresini belirlemede kullanılabilir
• TMR2 saklayıcısı okunabilir ve yazılabilirdir. Reset durumunda sıfırlanır.
• Zamanlayıcı-2 birimi PR2 adında 8-bitlik bir periyot saklayıcısına TMR2, 0’dan PR2’deki değere kadar artar bu değere ulaştığında tekrar sıfırlanır. PR2 saklayıcısı da okunabilir ve yazılabilirdir. Bu saklayıcının reset sonrası ilk değeri 0xFF’dir.
Zamanlayıcı-2’nin kontrol işlemleri için T2CON özel amaçlı saklayıcısı kullanılır.

Watchdog Timer (WDT)

WDT, bir programın çalışması gereken süreyi aşması durumunda PIC’i resetleyerek program kontrolünü sağlayan zamanlayıcı birimdir. WDT, aslında yazılımın bekçiliğni yapmaktadır. Çalışma mantığı, bir fabrikadaki bekçinin belirli sürelerle bir saati kurması mantığına dayanır. Eğer bu saat belirtilen sürede kurulmazsa alarm verir veya durur. Burada saatin kurulması bekçinin uyumadığını ve saatin bulunduğu yere gittiğini göstermektedir. Yazılımsal olarak bu işlem, saatin kurulması durumunda programın sorunsuz çalıştığını, saatin kurulmamasını ve dolayısıyla alarm vermesinin bir durum oluşturduğunu göstermektedir. WDT, son bölücünün 1:1 kullanılması durumunda yaklaşık 18 ms’de bir PIC’i resetler. Bu süre çalışma gerilimine, ortam sıcaklığına göre ve PIC’den PIC’e değişir. Ayrıca son bölücü değeri ayarlanarak en fazla 2.3 s civarı bir sürede PIC’in resetlenmesi sağlanabilir.

Uyku (Sleep) Modu

Uyku modu, PIC16F628’in yapması gereken herhangi bir iş olmadığı durumlarda güç tüketimini en aza indirmek için kullanılmaktadır. sleep komutu kullanılarak PIC uyku moduna sokulur. Bu komut çalıştırılıp uyku (Tl) moduna geçildiği anda, WDT ve WDT son bölücüsü sıfırlanır ve STATUS saklayıcısındakito_biti.gifbiti “1″, pd_biti.gif biti “0″ yapılır. Uyku modunda iken, giriş/çıkış uçlarının sleep komutundan önce sahip olduğu konum korunur. Bu moddayken düşük güç tüketimi için kullanılmayan uçlar ya besleme gerilimine ya da toprağa çekilmelidir. PIC aşağıda belirtilen durumlarda uyku modundan çıkar:

•MCLR ucundan harici reset darbesi geldiğinde
• WDT taşması oluştuğunda
• RB0/INT kesmesi, RB<4:7> değişim kesmesi veya, çevresel kesmelerden biri geldiğinde

Karşılaştırıcılar ve Referans Gerilim Birim

Karşılaştırıcı Birimi

PIC16F628’de analog sayısal dönüştürücü bulunmamasına karşın, içindeki 2 analog karşılaştırıcı ile analog işaretleri de doğrudan değerlendirebilir. Bu analog karşılaştırıcılar RA<0:3> uçlarında bulunmaktadır.

Şimdi bir karşılaştırıcının nasıl çalıştığına bakalım. Şekil 2.27.a’da PIC 16F628’in içerisindeki bir analog karşılaştırıcı görülmektedir. Karşılaştırıcının VIN+ ucundaki işaretin VIN- ucundaki işaretten büyük olması durumunda çıkış PIC’in besleme gerilimi olan VDD (“1”), VIN+ ucundaki işaretin VIN- ucundaki işaretten küçük olması durumunda ise çıkış sıfırdır. (VSS) Şekil 2.27.b’de VIN+ sinüsoidal bir işaret iken VIN- sabit genlikli (DC) bir işarettir. Bu şekilde VIN+’nın VIN-‘den büyük olması durumunda karşılaştırıcı çıkışının “1” olduğu, küçük olması durumunda “0” olduğu görülmektedir.

analog_karsilastirici.jpg

Şekil 2.27 (a) Analog karşılaştırıcı, (b) çalışması
Analog karşılaştırıcının kullanımı için gerekli ayarlar CMCON özel amaçlı saklayıcısı ile yapılmaktadır.Şekil 2,28’te karşılaştırıcı çalışma modları görülmektedir.

karsilastirici_mod.PNG

Şekil 2.28 Karşılaştırıcı çalışma modları

Referans Gerilim Birimi

Referans gerilim birimi (VREF), karşılaştırı referans gerilimi için 16 farklı gerilim seviyesi üretir. Şekil 2.28’de görülen karşılaştırıcı çalışma modlarından CM2:CM0=010 çalışma modunda kullanılır. Referans gerilim biriminin devre şeması Şekil 2.29’te görülmektedir. Bu birimin kontrolü VRCON özel amaçlı saklayıcısı ile yapılır [5].

referans_gerilim_birimi.png
Şekil 2.29 Referans gerilim birimi devre şeması

YakalaKarşılaştırPWM Birimi

2.5.10.1 YakalaKarşılaştırPWM (CaptureComparePWM-CCP) Birimi
Bu birim 16-bit’lik bir yakalama saklayıcısı, 16-bit’lik bir karşılaştırıcı saklayıcısı veya bir PWM saklayıcısı olarak çalışabilen 16-bitlik bir saklayıcı içerir. Yakalama modu, RB3/CCP1 ucunda herhangi bir olay olduğunda 16-bit’lik TMR1 saklayıcısının değerini saklar. Bu özellik bu uçtan girilecek bir işaretin frekansının hesaplanması gibi uygulamalarda kullanılabilir. Karşılaştırıcı modu, CCPR saklayıcısındaki değer ile TMR1 saklayıcısıdaki değeri karşılaştırır. Bu özellik CCPR1 ve TMR1 saklayıcılarındaki değerlere bağlı olarak periyodik şekilde kesme üretmek ıçin kullanılabilir. PWM (Pulse Width Modulation — Darbe Genişlik Modülasyonu) modu, periyodik darbeler üretmek için kullanılır. Bu özellik, oluşturulacak darbelerin genişliklerini değiştirerek harici bir devreyi kontrol etmek için kullanılabilir.

PIC16F628 Yakalama Modu

Yakalama özelliği kullanıldığında, aşağıdaki olaylardan önceden belirlenen biri oluştuğunda TMR1 saklayıcısının değeri CCPR1H:CCPR1L saklayıcılarına atılır. Bu olaylar RB3/CCP1 ucunda;
• Her düşen kenar işareti
• Her yükselen kenar işareti
• Her 4. yükselen kenar işareti
• Her 16. yükselen kenar işareti

oluştuğunda meydana gelir. Bu olaylar CCP1CON saklayıcısı kullanılarak seçilir. Bir yakalama yapıldığında PIR1 saklayıcısının CCP1IF (2.) biti “1” olur. Bu bit, yakalama işleminin tekrar yapılabilmesi için program kodları aracılığı ile “0” yapılmalıdır. CCPR1 saklayıcısının içeriği okunmadan başka bir yakalama işlemi yapılırsa yeni değer CCPR1 saklayıcısına yazılacağından eski değerin kaybolacağı unutulmamalıdır. Yakalama özelliği kullanıldığında RB3/CCP1 ucu giriş olarak koşullanmalıdır. Bu bit çıkış olarak koşullanıp, porta bir yazma işlemi yapıldığında da yakalama işlemi gerçekleşir.

yakalama_birimi.jpg

Şekil 2.30 Yakalama biriminin blok şeması

Şekil 2.30’da yakalama biriminin blok şeması görülmektedir. CCP biriminin yakalama özelliği kullanılırken Timer1, zamanlayıcı veya senkron sayıcı modunda çalıştırılmalıdır. Asenkron sayma modunda yakalama işlemi çalışmayabilir. Yakalama modu değiştirildiğinde hatalı bir yakalama kesmesi üretilebilir.

Hatalı kesmelerin gelmesini engellemek için PIE1 saklayıcısının CCP1E (2.) biti sıfırlanmalı ve yakalama modu değiştirildiğinde PIR1 saklayıcısının CCPlIF (2.) biti sıfırlanmalıdır.

Yakalama modu için 4 ön bölücü ayarı bulunmaktadır. Bu ayarlar CCP1CON saklayıcısı aracılığı ile yapılır. CCP birimi kapatıldığında veya CCP birimi yakalama modunda olmadığında ön bölücü değerleri sıfırlanır. Yani herhangi bir reset durumunda ön bölücü değeri sıfırlanır. Bir yakalama ön bölücü değerinden diğerine geçmek bir kesme üretebilir. Ön bölücü sayıcısı sıfırlanmayacağından, değişim sonrası ilk yakalama işlemi sıfırdan farklı bir ön bölücüden kaynaklanabilir. Bu sorunu gidermek amacı ile özellikle CCP1CON birimi kapatılmalı, daha sonra yeni ön bölücü değeri yüklenerek CCP birimi aktif hale getirilmelidir.,

Karşılaştırıcı Modu

Karşılaştırıcı modunda, 16 bitlik CCPR saklayıcısındaki değer, TMR1 saklayıcısındaki değer ile karşılaştırılır. Karşılaştırılan değerlerin eşitliği durumunda RB3CCP ucu o anki durumunda bırakılabilir, “0” veya “1” yapılabilir (Bu çalışma modunda RB3/CCP1 ucu çıkış olarak koşullanmalıdır). Bu işlem, CCP1CON saklayıcısının 3:0 bitleri kullanılarak yapılır. Karşılaştırılan değerlerin eşitliği durumunda, PIR1 saklayıcısındaki CCPlIF biti de “1” olur.

karsilastirici_blok.jpg
Şekil 2.31. Karşılaştırma biriminin blok yapısı

CCP1CON saklayıcısını sıfırlamak, RB3/CCP1 karşılaştırıcı çıkışını da sıfırlamaya zorlar. CCP biriminin karşılaştırma özelliği kullanılırken Timer1, zamanlayıcı veya senkron sayıcı modunda çalıştırılmalıdır. Asenkron sayma modunda karşılaştırma işlemi çalışmayabilir.

PIC16F628 PWM Modu

PWM modunda RB3/CCP1 ucu 10 bit çözünürlüğe kadar PWM çıkışı üretir. Bu uç PORTB veri tutucusu ile çoklandığından (aynı ucu kullandığından), TRISB’nin 3. biti sıfırlanarak RB3/CCP1 ucu çıkış yapılmalıdır. CCP biriminin PWM modundaki basitleştirilmiş blok gösterimi şekil 2.32’de görülmektedir.

pwm_birimi.jpg

Şekil 2.32 PWM biriminin basitleştirilmiş blok gösterimi
PWM birimi ile oluşturulan işaretin periyodu ve darbe doluluk oranı (duty cycle) değiştirilebilir. Şekil 2.33’de PWM çıkışındaki işaretin periyodu ve darbe doluluk oranı görülmektedir.

pwm_cikis.jpg

Şekil 2.33 PWM çıkış işareti

PWM Periyodunun Belirlenmesi

PWM periyodu, PR2 özel amaçlı saklayıcısına yazılan değer ile belirlenir ve aşağıdaki şekilde hesaplanabilir:
PWM periyodu = [(PR2)+1]x 4 x TOSC x (TMR2 ön bölücü değeri)
TMR2 değeri PR2’ye eşit olduğunda, TMR2’nin sonraki artışında aşağıdaki üç olay oluşur:
• TMR2 sıfırlanır.
• RB3/CCP1 ucu “1” yapılır (darbe doluluk oranı %0 ise bu uç “1” yapılmaz).
• PWM darbe doluluk oranı CCPR ve CCPR1H saklayıcılarına yüklenir.
Yukarıda verilen formülde de görüldüğü üzere TMR2 son bölücüsü PWM periyodu hesaplanırken dikkate alınmaz. Son bölücü, PWM çıkışından farklı bir frekansta kesme üretmek için kullanılabilir.

PWM Darbe Doluluk Oranının Belirlenmesi

PWM darbe doluluk oranı, CCPR1L saklayıcısına ve CCP1CON<5:4> bitlerine yazılan değerle belirlenir Doluluk oranı 10 bite kadar çözünürlüğe sahiptir. PWM darbe doluluk oranını hesaplamak için aşağıdaki eşitlik kullanılır:
PWM darbe doluluk oranı = (CCPR1L: CCP1CON<5:4>) x TOSC x (TMR2 ön bölücü)
CCPR1L ve CCP1CON<5:4> herhangi bir zamanda yazılabilir fakat PR2ve TMR2 eşit olana kadar bu değer CCPR1H saklayıcısına yazılmaz. Yani PWM periyodu tamamlanmadan yeni darbe doluluk oranı aktif olmaz PWM modunda CCPR1H sadece okunabilir, CCPR1H saklayıcısı ve 2-bitlik bir dahili tutucu (latch), PWM darbe doluluk oranını çift tamponda saklamak için kullanılır. Bu çift tamponlama sorunsuz PWM işlemi için gereklidir.
Belirli bir PWM frekansı için en büyük PWM çözünürlüğü aşağıdaki gibi hesaplanır:

PWM çözünürlüğü=pwm_hesap.gif

PWM darbe doluluk oranı, PWM periyodundan büyük olursa RB3CCP1 ucunun sıfırlanmayacağı bilinmelidir.

PWM Modunun Çalışması İçin Yapılması Gerekenler

CCP birimini PWM modunda kullanmak için aşağıdaki işlemler yapılmalıdır:
1. PR2 saklayıcısına gerekli değer yazılarak PWM periyodu ayarlanır.
2. CCPR1L saklayıcısına ve CCP1CON<5:4> bitlerine PWM darbe doluluk oranı yazılır.
3. TRISB saklayıcısının 3. biti “0” yapılarak RB3/CCP1 ucu çıkış yapılır.
4. TMR2 ön bölücü değeri ayarlanır ve T2CON saklayıcısı kullanılarak TMR2 aktif hale getirilir [5].

USART Birimi

PIC16F628’de donanımsal olarak seri haberleşmeye olanak sağlayan USART birimi bulunmaktadır. Bu birim aynı zamanda seri haberleşme arabirimi (Seril Communications Interface – SCI) olarak da bilinir. USART birimi, tam çift yönlü (full duplex) eşzamansız (Asenkron-asynchronsus) ya da yarı çift yönlü (half duplex) eşzamanlı (senkron-synchronous) modda çalıştırılabilir. Tam çift yönlü eşzamansız çalışma modunda kişisel bilgisayarlar gibi çevresel cihazlarla; yarı çift yönlü eşzamanlı çalışır modunda, ADC-DAC, seri EEPROM gibi çevresel cihazlarla haberleşilebilir. USART birimi, aşağıdaki haberleşme modlarında çalıştırılabilir:
• Eşzamansız (tam çift yönlü)
• Eşzamanlı — Master (yarı çift yönlü)
• Eşzamanlı — Slave (yarı çift yönlü)

Şimdi yukarıda bahsedilen bu kavramlara kısaca değinelim. Seri veri iletim kanalları Şekil 3.20’de görüldüğü gibi tek yönlü (simplex), yarı çift yönlü ve tam çift yönlü olmak üzere üçe ayrılır:
• Tek Yönlü Veri İletimi: Kanal üzerinden tek yönlü bir veri akışı vardır.
• Yarı Çift Yönlü Veri İletimi: Aynı kanal üzerinden her iki taraf da veri alıp gönderebilir. Fakat herhangi bir anda aynı taraftan hem gönderme hem de alma işlemi yapılamaz.
• Tam Çift Yönlü Veri İletimi: Alma ve gönderme işlemi için iki farklı kanal mevcuttur. Bu nedenle, aynı anda hem alma hem de verme işlemi yapılabilir.

Yukarıda anlatılan veri iletim kanallarında veri gönderen ve alan uçların belirli kurallar doğrultusunda haberleşmesi gerekir. Bu nedenle, iletilen verinin yapısına göre eşzamanlı ve eşzamansız veri iletim protokolleri kullanılabilir. Şimdi bu protokollere değinelim:

seri_veri_iletimi.png

Şekil 2.34 Seri veri iletimi için veri kanal tipleri

• Eşzamansız Veri İletişim Protokolü: Bu protokol genellikle karakter tabanlı işlemler için kullanılır. Gönderilecek her bir veri için, verinin başlangıcını ve bitişini belirten bilgi de gönderilir. Eşzamansız veri iletiminde genel olarak kullanılan veri paketi yapısı Şekil 2.35’de görülmektedir.

zamansiz_veri.jpg

Şekil 2.35 Eşzamansız veri iletiminde veri paketi yapısı

• Eşzamanlı Veri İletişim Protokolü: Veri bloklarının (örneğin; karakter dizisi) gönderimi için kullanılan bir protokoldür. Bu protokolde gönderilecek veri blok olarak ele alındığından, her bir karakter için başlangıç ve bitiş bilgisini göndermeye gerek yoktur. Veri ile birlikte, eşzamanlamayı sağlayan bir saat işareti de gönderilir.

  • Yakup GÖVLER

    Çok güzel bir döküman olmuş. Günlerdir böyle bir kaynak arıyordum, çok teşekkür ederim.

  • admin

    Bende Teşekkür ederim Hocam bana feyz verdiniz yeniden başlıyorum pic programlama çalışmalarına :)

  • Yaşar Moray

    gerçekten çok güzel bir çalışma. herşey için teşekküler. ellerinize, emğinize sağlıkkk

  • özkan

    hocam çok sağolun,ellerinize sağlık…internetteki çok az kalite nottan biri.çok teşekkür ederim.iyi çalışmalar dilerim…

  • muhammet karakoca

    hocam verdiğiniz bilgiler için teşekkürler

  • şahin karakaş

    hocam çok sağalon bizim gibi öğrenciler için yaptığınız bu site çok gerekliydi sağolun

  • muhittin

    slm
    bunu hazırlayana cok tesekkur eder ve benim yıllık ödevim olan pıc16f877 ile ilgili daha iyi ve genel bilgileri yollarsanız cok memnun olurum tesekkurler

  • ismail

    hacam erzurum atatürk anadolu meslek lisesinden ismail arkadaşlarım sizin sitenizdenden yararlanmaya çalışıyoruz bize çok faydalı oluyor

  • Birhan

    hocam slmlar. ilk pic çalışmamda ilginç bir sorun var. vss’ ucuna el değdiği zaman pic çalışıyor , pice elimi yaklaştırdığımda off oluyor. şaşkınım lütfen yardım.

  • zafer tiryaki

    PIC bilmeyenler bu dökümanla programlama uzmanı olurla:)

  • haci ömer

    güzel bir düküman olmuş. devamını bekleriz

  • Fatih

    emeğinize, elinize sağlık gerçekten benim için çok ama çok faydalı bir yazı hazırlayana çok teşekkür ederim.

  • oğuz

    Hazırlayana binlerce kez teşekkür ediyorum tezimi yapmamda yardımcı oldu. tezim ingilizce çeviriydi tüdkçesini burada suldum…:D

  • Ferhat

    Mükemmel Paylaşım.Ellerine sağlık.

  • yasemin vural

    gerçekten çok faydalı bize yardımı dokunacak güzel bir iş çıkarmışsınız teşekkürler emeğinize sağlık

  • FARUK

    Çok teşekkürler harika olmuş.

  • muzaffer

    Mükemmel bir anlatım ve yorum…
    Sağolun hocam…

  • günseli

    Hocam iyi günler gerçekten çok iyi bir döküman olmuş çok işime yaradı.

    Mümkünse 16F628 ‘in eepromunun nasıl kullanıldığını açıklar mısınız ilk defa kullanacağım
    yani bildiğim kadarıyla donanım olarak ekstra bişey kullanılmıyor bütün iş yazılımla mı yapılıyor ?

    Daha ayrıntılı anlaşılır bir dökümana ihtiyacım var ve bulamıyorum eğer cevap verirseniz çok memnun olurum iyi çalışmalar.

  • felektronik

    elleriniz dert görmesin…

    Türk elektronikçilerin belkide en büyük sıkıntısı olan Türkçe kaynak sorununa cevap verecek olan bu kaynakları artırmamız dileğimle, size çok ama çok tesekkür eder saygılarımı sunarım. Başarılar…

  • kerem

    Çok teşekkür ederim ellerinize sağlık hocam.

    Ayrıca bu sitenin bize ulaşmasında yardımcı olan emeği geçen herkese çook teşekkür ederim

  • DevilWarez

    Yabancı dili biz ders gibi görmekten öteye geçemediğimiz için bir çok bilgi bize Fransız kalıyor,

    Yarım yamalak anlıyabiliyoruz, yada bi kaç entegre yaktıktan sonra araştırıp jetonu düşürüyoruz,

    insanların işin inceliklerini anlayabilmesi için bu emeklerin birilerinin harcaması gerekiyor.

  • mustafa

    emeğinize sağlık çok teşekkür ederim