fpganedir.com'da ara

fpganedir mail

           
 YAZAR HAKKINDA

 
  Ersen  Çelik

  Üniversite 2. Sınıf
  Öğrencisi

    ersen.celik94@gmail.com

 
Yazarın Yayınlanmış Makaleleri

 

     

PIC I2C UYGULAMASI

Bu projemde sizlerle daha önceden PIC16F887A üzerinde yaptığım bir projeyi paylaşmak istiyorum. Projemde i2c bus arayüzüne sahip 4 dijit bir LED sürücüsü olan SAA1064 ile bir seven segment display süreceğim. SAA1064'in bilgilerine ve i2c ile nasıl sürüleceğine SAA1064'ın kendi datasheet'inden ulaşabilirsiniz.

Örneğimize geçmeden önce kısaca bir i2c protokolüne göz atalım. i2c Inter-Integrated Circuit ifadesinin kısaltması olup, iki tel arayüz olarak anılır. i2c protokolü philips firması tarafından bulunmuş olup, düşük hızlı çevre birimlerini bir3birine bağlamak için kullanılır. Anlatımı biraz basitleştirerek konuya devam edelim.

Bir kart tasarladığımızı düşünelim. Kart üzerinde bir mikrodenetleyici ve onlarca çevresel eleman olduğunu farz edelim. Bu çevresel elemanlarla iletişim normal olarak yapıldığı zaman(paralel bağlantı) hem mikrodenetleyicinin bacak sayısı yetmeyecek hemde bir sürü bağlantı kirliliği oluşacak. Bunun yerine bir sistem düşünelim. Bu ssitemde saat ve veri adında iki hattımız oldun. Bütün cihazlar yalnızca bu iki hatta bağlı olsunlar ve verileri bu hat üzerinden alsınlar. Mikrodenetleyiciyi master yapalım ve diğer bütün çevresel elemanlara birer adres verelim. Master ile diğer cihazlar bu adres vasıtasıyla haberleşsin ve böylece verinin nereye gittiği belli olsun. Aslında bu yöntem i2c'nin ta kendisidir.

Daha detaylı bilgiye wikipedia ve i2c arayüzü olan cihazların datasheetlerinden ulaşabilirsiniz. Beni sorarsanız ben i2c ile bilgileri pic mikroişlemcilerinin datasheet'inden (pic18f452) öğrendim.

Artık projemize kaldığımız yerden devam edebiliriz.

Projenin kaynak kodunu PIC C programında oluşturdum. PICC programının yeni proje oluşturma sihirbazından i2c için gerekli ayarlamaları yapabilirsiniz. Aşağıda benim projemde kullandığım ayarlamaları bulabilirsiniz.

1

PICC programının hoşuma giden diğer özelliği help'inin çok kulanışlı olması. Çoğu konu ile ilgili örnek uygulamaları help menüsünden bulabilirsiniz. Hatta örnek kodları copy/paste ile kendi kodunuzda bile kullanabilirsiniz. Ben örneğimde aşağıdaki örnek kodları kullandım.

2

Projemin kaynak kodu aşağıdaki gibidir.

#include <16F877A.h>
#device adc=16

#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(clock=10000000)

#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3)

int map[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
int i=0;

void main() {
   i2c_start();
   i2c_write(0x70); //Cihaz adresi ADR= GND=VEE
   i2c_write(0x00); //Control Register Adresi
   i2c_write(0x00); //static mode, i.e. continuous display of digits 1 and 2
   i2c_stop();
   while(TRUE){
     for(i=0;i<10;i++){
        i2c_start();
        i2c_write(0x70); // Cihaz adresi
        i2c_write(0x01); // Digit 1 ()
        i2c_write(map[i]); // to change data direction P8..P1
        i2c_stop();
        delay_ms(300);
      }
   }
}

Artık örneğimizin simülasyonunu yapıp çalışmasını gözlemleyebiliriz. Ben bu projede simülasyon aracı olarak proteus ISIS'i kullanacağım. Simülasyonda i2c hattını izlemek için bir adet I2C Debugger koyacağım.

Mikrodenetleyicide I2C hattı GND ve NC prensibine göre çalışır. Bunun için hatta Voltaj algılayabilmek için hem saat hemde veri hatlarına birer adet pull-up direnci bağlamamız gerekecek.

4

Artık play tuşuna basıp simülasyonu başlatabiliriz. İyi eğlenceler

5

 

Anasayfa | Fpga | VHDL | VHDL Sözlüğü | Embedded Sistem | Android | Sayısal Tasarım | Simulasyon | PCB | Örnekler | Forum | İletişim
Copyright © 2010-2013 FPGAnedir. All Rights Reserved.