8-bit microchip ailesinden PIC12f675 yada benzer özellikteki PIC12f629 ‘un bendeki yeri her zaman farklı olmuştur. 8 bacaklı ve oldukça küçük olmasıyla minimal uygulamalarda kullanmak için oldukça el verişli bir arkadaşımızdır kendisi…
Fiyatı da oldukça uygun olup 1-2 tl gibi fiyatı bulunmaktadır.
Öncelikle bu mikro denetleyicinin özelliklerine bi’ göz atalım. Sık sık uğrayacağımız datasheeti de bu adreste.
Datasheet’tin ilk sayfasında oldukça güzel şekilde açıklanmış. Kısaca özetlemek gerekirse;
- Yüksek performanslı RISC CPU (RISC CISC nedir?)
- Harici kaynak osilatör frekansı 4 ile 20 MHz arasında, dahili de ise 4 MHz,
- 7 adet kesme kaynağı
- 6 adet yönlenebilir giriş/çıkış
- 10bit, 4 Analog giriş ile ADC
- 25 mA akım çıkışı
- 35 adet assemler komutu
- Geniş çalışma voltaj aralığı – 2.0V to 5.5V
- Geniş çalışma sıcaklık aralığı
- Düşük güç güç-reset (POR)
- Brown-Detect (BOD çıkış)
- Watchdog Timer (WDT)
- 2 adet Timer
- Programlanabilir kod koruma
- FLASH 100.000 defa yazılıp silinebilir
- EEPROM 1.000.000 defa yazılıp silinebilir
- FLASH / EEPROM veriyi 40 yıldan fazla tutabilir
PIC12F675 ve PIC12F629 pin
Bir pin farklı modlarda da kullanılabiliyor. Programlama sırasında bunu belirtmemiz gerekecek.
PIC12F675 ve PIC12F629 pin açıklamaları
Ayak (pin) adı | Fonsiyon | Giriş tipi | çıkış tipi | Açıklama |
---|---|---|---|---|
GP0/AN0/CIN+/ICSPDAT | GP0 | TTL | CMOS | Yönlenendirilebilen giriş/çıkış bacağı |
AN0 | AN | A/D Analog/Dijital çevirici 0 kanal | ||
CIN+ | AN | Analog karşılaştırıcı girişi | ||
ICSPDAT | TTL | CMOS | I/Q Seri programlama için data girişi | |
GP1/AN1/CIN-/VREF/ ICSPCLK | GP1 | TTL | CMOS | Yönlenendirilebilen giriş/çıkış bacağı |
AN1 | AN | A/D Analog/Dijital çevirici 1 kanal | ||
CIN- | AN | Analog karşılaştırıcı girişi | ||
VREF | AN | Harici voltaj referansı | ||
ICSPCLK | ST | I/Q Seri programlama için clock sinyal girişi | ||
GP2/AN2/T0CKI/INT/COUT | GP2 | ST | CMOS | Yönlenendirilebilen giriş/çıkış |
AN2 | AN | A/D Analog/Dijital çevirici 2 kanal | ||
T0CKI | ST | TMR0 clock sinyal girişi | ||
INT | ST | Harici kesme girişi | ||
COUT | CMOS | Analog karşılaştırıcı çıkışı | ||
GP3/MCLR/VPP | GP3 | TTL | Giriş bacağı | |
MCLR | ST | Harici resetleme girişi | ||
VPP | HV | Programlama voltajı | ||
GP4/AN3/T1G/OSC2/ CLKOUT | GP4 | TTL | CMOS | Yönlenendirilebilen giriş/çıkış bacağı |
AN3 | AN | A/D Analog/Dijital çevirici 3 kanal | ||
T1G | ST | TMR1 kapısı | ||
OSC2 | XTAL | Kristal osilatör bacağı | ||
CLKOUT | CMOS | Komut saykıl clock sinyal çıkışı (Fos/4) | ||
GP5/T1CKI/OSC1/CLKIN | GP5 | TTL | CMOS | Yönlenendirilebilen giriş/çıkış bacağı |
T1CKI | ST | TMR1 clock sinyal girişi | ||
OSC1 | XTAL | Kristal osilatör bacağı | ||
CLKIN | ST | Harici clock sinyal girişi (RC osilatör bağlantısı) | ||
VSS | VSS | Power | Şase – | |
VDD | VDD | Power | Besleme + |
Kodlamaya başlayalım…
Bu yazımda ezbere kodlama yapmayıp datasheet okuyarak kodlama yapmaya özen göstereceğim. Platformdan bağımsız gömülü sistem felsefesi kazanmaya çalışacağız.
Öncelikle amacımızı gözden geçirelim. Biz ne yapacağız?
İlk etapta LED yakmak istemiştik. LED’i bağlayacağımız pin GPIO 0 yani 7 numaralı pin olsun.
Fritzing devre şeması da şu şekilde olacak.
Datashetten sayfa 21 GPIO açıklamaları kısmına göz atarsak ne yapmamız gerektiği hakkında fikir edinebiliriz.
Özetlemek gerekirse burayı GPIO ve TRISIO adında iki adet register var.
GPIO 6-bit’lik veri tutan bir register ve TRISIO’ya bağlıdır.
TRISIO’nun herhangi bir bitini 1 yapmamız o pinin Input olduğunu, 0 yapmamız ise o pinin Output olduğunu ayarlıyor.
Bir istisna olarak GP3 her zaman 1 olarak okunur. MCLR EN = 1 olduğunda ise GP3 0 olarak okunur.
TRISIO registarları pinin çıkış yada giriş olduğunu belirtip analog girişlerde de bu kullanılır.
Şimdi işimize yarayacak registerlara göz atalım.
Tris register adındaki 8-bit’lik registerın sadece 6-biti kullanılabiliyor ve pininin çıkış olup olmadığını ayarlamıza yarayıp kullanmadığımız bitlere 0 yazmayalıyız.
GPIO registerı 6-bitlik olduğunu söylemiştik kullanılmayan 2 bitler de 0 olarak kalmalıdır. İstediğimiz bitin çıkış (5volt) vermek istediğimizde 1 yapacağız.
Konfigurasyon Bitlerinin ayarlanması
Kullanmadığımız tüm özellikleri şimdilik kapılı tutalım. Dahili osilatörü de aktifleştirelim bunun için şu şekilde ayarlamalar yapmalıyız. Generate Source Code to Output diyip yaratılan kodu kütüphane altına yapıştıralım.
Tüm kodları bir araya getirdiğimizde şu şekilde olacaktır.
/* * Title : PIC12F675 - LED Blinking * File : main.c * Author : Hakan Kaya * Mail : [email protected] * Web : www.hakankaya.kim * Description : GPIO 0'a bağlı LED'i 500 ms aralıklarla yakıp söndürme * */ #include <xc.h> // CONFIG #pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-Up Timer Enable bit (PWRT disabled) #pragma config MCLRE = ON // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) #define _XTAL_FREQ 4000000 // clock frekansı void main(void) { TRISIO = 0x00; GPIO = 0x00; while(1){ __delay_ms(500); GPIO0 = 0; __delay_ms(500); GPIO0 = 1; } }
Kaynakça:
http://ww1.microchip.com/downloads/en/devicedoc/41190c.pdf
http://ww1.microchip.com/downloads/en/devicedoc/33023a.pdf
https://www.allaboutcircuits.com/textbook/digital/chpt-3/logic-signal-voltage-levels/
http://320volt.com/pic12f675-ve-pic12f629-hakkinda-turkce-bilgiler/ ‘den yararlanılmıştır.
Leave a Reply