MPLAB ile PIC Uygulamaları : PIC12F675 ile LED Yakma

wp

 

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.

Ekran Alıntısı

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

 

 

 

 

 

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.

devre

Datashetten sayfa 21 GPIO açıklamaları kısmına göz atarsak ne yapmamız gerektiği hakkında fikir edinebiliriz.

asd

 

Ö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ıo

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.

 

gpıo

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.

conf

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.

Hakan Kaya
Yarı zamanlı mühendis. Yarı zamanlı eğitmen. Biraz da film sever.
error: 5846 sayılı Fikir ve Sanat Eserleri Kanunu tarafında içeriklerin izinsiz kopyalanması, paylaşılması ve çoğaltılması yasaktır.