PIC

PICkit™ Serial Analyzer && Explorer 16 Geliştirme Kartı


Herkese selamlar bu yazımda Microchip firması tarafından üretilen PICkit™ Serial Analyzer kartının kullanımını , Explorer 16 geliştirme kartı üzerinde programladığım PIC24FJ128GA010 ile göstereceğim.

PICkit™ Serial Analyzer kartı gömülü cihazlar ile haberleşmemizi sağlayan bilgisayara usb ile bağlanarak analiz ettiğimiz kendi arayüzüne sahip bir kart. I2C , LIN ,SPI , UART  ,microwire protokollerini analiz edebiliyorsunuz.

Ürünün datasheetine buradan ulaşabilirsiniz. Ürün fiyatı farnell sitesinde 45€ , Microchip sitesinde ise 50$ . Şuradan ürün linkine ulaşabilirsiniz. Ürünü aldığınızda yanında PIC16F886  barındıran küçük ölçekli bir geliştirme kartı ile beraberinde geliyor.

Arayüzü indirmek için buraya tıklayın. Sitede alt tarafta PICkit™ Serial Analyzer GUI v2.2 (exe/dll installation) dosyayı indirmeniz gerekmekte. Kurulumu yaptıktan sonra size açılan pencere hangi protokol üzerinde işlem yapacağınıza dair kutucuklar var , kurulum için yukarda linkini verdiğim datasheetten faydalanabilirsiniz. Orada ayrıntılı bir şekilde gösteriyor.

USART prokolünü kullanacağımız için , RX TX GND hattına ihtiyacımız var analyzer  üzerinde bulunan pin atamalarını aşağıda görebilirsiniz.Biz 1 ,3 ve 6 pinleri kullanıyoruz. VDD ayarını 0-5 arasında arayüzden ayarlayabiliyorsunuz ancak bu uygulamada VDD pinini bağlamamıza gerek yok.

Capture.PNG

Mplab XC16 üzerinde hazırladığım program :

#include “p24Fxxxx.h”#include “p24Fxxxx.h”
// Setup configuration bits_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx2) _CONFIG2( FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRIPLL )
#define SYSCLK  32000000UL

void UART2Init(const unsigned long int BAUDRATE){     unsigned long int BAUDRATEREG = (((SYSCLK/2)+(8ul*BAUDRATE))/16/BAUDRATE-1);    U1BRG = BAUDRATEREG;     U1MODE = 0;     U1MODEbits.BRGH = 16;      U1STA = 0;     U1MODEbits.UARTEN = 1;     U1STAbits.UTXEN = 1;     _U1RXIF = 0; }

char UART2CharReady() { return _U1RXIF; }
char UART2GetChar(){    while(! _U1RXIF); _U1RXIF = 0;     return U1RXREG;}
void UART2PutChar(const char ch ){    while(U1STAbits.TRMT == 0);     U1TXREG = ch; }

 

int main(void){    UART2Init(57600ul);       UART2PutChar(‘>’);   while (1)    {        if(UART2CharReady()) UART2PutChar(UART2GetChar());   }}

Program üzerinde başlangıçta “>” verisini gönderiyoruz , pc tarafından gelen veriyi de tekrar ekrana basıyoruz.

Çıktılar

1.PNG

Arayüzde sol üst tarafta bulunan communication -> Basic Operation sekmesine tıklayarak veri gönderim işlemini yapabilirsiniz.

2.PNG

Göndereceğiniz veriyi yazdıktan sonra “Execute” butonuna basmanız gerekmekte ya da “Send One Character at a time” kutucuğuna işaretleyerek sadece göndereceğiniz karakterleri yazmanız yeterli.

Capture.PNG

Bit Operatörleri


Bit operatörleri bit düzeyinde işlem yapan operatörlerdir ;yani sayıları bit bütün olarak değil , bit bit ele alarak işleme sokarlar.Bit operatörlerinin aldığı değişkenlerin (operand’ların) türü tamsayı türlerinden olması gerekir. (char,short ,int,long), float ya da double türleri bu operatörler ile işleme sokulamaz.

–> Bit değil(bitwise not)

<< –> Sola öteleme (bitwise left)

>> –>Sağa öteleme (bitwise right)

–>Bit VE (bitwise AND)

^ –> Bit özel veya (bitwise EXOR)

–>bit veya (bitwise OR)

Bit Değil(~) Operatörü

Bit değil operatörü 1’e tümleme işlemi yapar.Yani 1 olan bitleri 0; 0 olan bitleri 1’e dönüştürür.Örneğin;

unsigned int a=0x1423;

unsigned int b;

a=~b

Yukarıda ki örneğe bakıcak olursak , öncelikle a’yı binary sistemine dönüştürelim.
a=0001 0100 0010 0011
A’nin bit değerini alırak b’ye atarsak..
~b=1110 1011 1101 1100 = 0xEBDC şeklini alacaktır.

Diğer operatörleri kısa olarak açıklayacağım.

& OPERATÖRÜ –>Mantıksal çarpma yapar.
l VEYA OPERATÖRÜ –> Mantıksal toplama işlemi yapar.
<< SOLA ÖTELEME –> Sola öteleme operatönün sol tarafındaki operand öteleme işlemininy yapılacağı değişkeni ya da sabiti , sağ tarafında ki operand ise öteleme sayısını göstermektedir.
değişken<<öteleme sayısı

Örneğin;
a=0xE4 sayısı , binary olarak 11001000 değerine eşittir.
b=a<<2; //a'nın 2 kere öteleneceğini belirtir.

İlk öteleme işlemi sonucunda 10010000  yani b=0xC8 olur.
İkinci öteleme işlemi sonucunda
>> SAĞA ÖTELEME –>Yukardaki işlemin tersidir.

VOLKAN ÜNAL

74HC595 entegresi ile display sürme


#include <volkan.h>

int digit[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
#define SH_CP pin_b0
#define DATA pin_b1
#define ST_CP pin_b2

void yolla(unsigned char veri)
{
char i;
output_low(ST_CP);
for(i=0; i<8; i++)
{
output_low(SH_CP);
if((veri<<i)&0x80)
output_high(DATA);
else
output_low(DATA);
output_high(SH_CP);

}
output_high(ST_CP);

}

void main()
{
set_tris_b(0x00);
output_b(0x00);
int a;
for(;;)
{
yolla(digit[a]);
delay_ms(1000);
a++;
if(a>9)
a=0;
}
}

Çalışma videosu aşağıdadır 🙂

izlediğiniz için teşekkür ederim.

7-Segment Display Kullanımı


Arkadaşlar bugün videolu şekilde displaylerin nasıl kullanılacağını anlatmaya çalıştım.Videonun ilk partını yüklüyorum , Aslına bakarsanız tek part şeklinde çekmiştim.Ancak kullandığım programdan dolayı sadece 10dklık kısmı kayıt altına alınmış.Yakın bir zaman da diğer partını da çekip paylaşacağım.

Videoda ki kod;

#include <volkan.h>

int digit[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};
void main()
{
set_tris_b(0x00);
output_b(0x00);
int i=0;
do
{
output_b(digit[i]);
delay_ms(1000);
i++;
if(i>9)
i=0;
}while(1);
}

En kısa zamanda 74HC595 ile nasıl süreleceğini de göstererek buraya yükleyeceğim.
Son anlarda Q0-Q7 giriş demişim heyecandan ancak onlar veri çıkışı arkadaşlar kusura bakmayın.
İzlediğiniz için teşekkür ederim.

LEDLERLE HAVADA KAYAN YAZI


Ne zamandır aklımdaydı havada ledlerle kayan yazı yapmak , dün bi gayret yapalım da aradan çıksın dedik.Genel bilgilere buradan erişebilirsiniz arkadaşlar.Ha ben oradan baktıydım da harflerin nasıl çıktığını pek anlayamadım diyenler yazının devamına geçebilirler.

Öncelikle devre kurma olayına gelelim.Devreyi yukarda bahsettiğim linkten aldım.Devre şemasını tekrardan paylaşıyorum.

volkankayan

Böyle bir devre şemamız var.Haricinde siz devreyi kurarken 4Mhz bir kristal ekliyorsunuz.

Devrede harf çıkarma mantığı göz yanılmasından oluşuyor ve biraz hex ve binary kodlarından.Aslında yazılımdan çok olay , mekanik kısmında bitiyor.Yalpalamar  falan oluyor.Ben devremi elimde sallayarak test ettiğimden dolayı bir video paylaşamayacağım.Ancak yapım aşamlarını paylaşabileceğim.Ne de olsa elinde bir devre sallayan adam çok hoş bir video olmayabilir 🙂

11017300_10206269660569298_377257438_o 11028532_10206269660889306_1600407320_o11025471_10206269661249315_1816048750_o

11034860_10206269667609474_475228919_o

Gelelim kodlamaya , İsterseniz buradan karektermatik indirererk pratik olarak yapabilirsiniz.Harflerin mantığına gelecek olursak:

11045809_10206269776332192_233754757_o

Arkadaşlar eğer en baştaki linke tıklayıp pdf dosylarını incelediyseniz A harfinin nasıl olduğunu bir nebze anlamışsınızdır.Mantık bi çizelge yapıyoruz ve bu çizelge de harfleri yerleşirdiğimiz yerler 1 yerleştirmediğiz yerler 0 konumunu alıyor.Bu değerleri 2lik tabandan 16lı çevirdiğimizde de karşımıza hex kodları çıkıyor ve bu değerleri bir diziye atıyoruz.

#include <volkan1.h>

void main()
{

int i;
char vlkn[]={0x1F,0x20,0x40,0x80,0x40,0x20,0x1F, //v
0x7E,0x81,0x81,0x81,0x81,0x81,0x7E, //O
0xFF,0x80,0x80,0x80,0x80,0x80,0x80, //L
0xBF,0x10,0x18,0x24,0x42,0x81,0x0, //K
0xF8,0x14,0x12,0x11,0x12,0x14,0xF8, //A
0xFF,0x04,0x08,0x10,0x20,0x40,0xFF, //N
0x00,0x00,0x00,0x00,0x00,0x00,0x00, //Boşluk

};
output_b(0x00);

while(1)
{
for(i=0; i<80; i++)
{
output_b(vlkn[i]);
delay_ms(2);
}
delay_ms(80);//tekrardan başlaması için geçen süre
}

daha sonrasında yazdığımız programı compile edip oluşan hex dosyamızı işlemcimize atıyoruz ve devremiz hazır.Mekanik kısmında kolay gelsin. 🙂