Elektronik / Mikrodenetleyici Projeleri/

Direnç renk kod hesaplayıcı devre Nokia 3310 lcd PIC16F88

Devremiz piyasada bulunan 4 renkli karbon dirençlerin renk kodlarını kendiliğinden hesaplar. Devremiz yapı itibari ile oldukça sadedir. Malzeme olarak PIC16F88 Nokia 3310 lcd 4×3 tuş takımı ve bir kaç basit elemandan oluşmaktadır. Uygulamanın çalısması ise tuş takımı üzerinde bulunan 12 tustan her biri sırasıyla SiYAH, KAHVERENGi, KIRMIZI, TURUNCU, SARI, YEŞiL, MAVi, MOR, GRi, BEYAZ, ALTIN, GÜMÜŞ renkleri ile ifade edilir.

Tuş takımı ile girilen renkler sırası ile ekranın 3, 4, 5 ve 6. satırlarında görüntülenir. Son rengin girilmesiyle direnç değeri otomatik olarak hesaplanır. Hesaplanan direnç değeri ekranın 1. satırına yazdırılır.  Direncin tolerans değeri ise 2. satırda görüntülenir. Devre ile renk kodlarının elverdiği ölçüde 0.1 ohm ile 99 giga ohm’a kadar olan dirençlerin değeri hesaplanabilir.

Uygulamada yanlış satıra yanlış renk kodu girilmesine izin verilmez. 1.renk olarak siyah, altın, gümüs hariç her renk girilebilir. 2. renk olarak altın, gümüş hariç her renk girilebilir. 3. renk olarak her renk girilebilir. 4. renk olarak sadece tolerans renkleri olan altın veya gümüş girilebilir.

nokia-3310-proteus-isis-pic16f88-direnc-renk-lcd

Şekil 1 Devre şeması

Şekil 1 de görüldüğü gibi devremizin yapısı oldukça basittir. Devremiz 5v dc gerilimle çalışır. Devre üzerindeki 1n4001 diyodu tam 5v vermeyen 5.5v civarı çıkış veren regülatörlerin çıkısını yaklaşık 5 volta indirmek için eklenmistir. Kararlı bir 5 volt kaynağınız varsa iptal edebilirsiniz.

Bunun yanı sıra devrede önemli olan bir kısımda Nokia 3310 ekranının beslemesidir. Bilindiği üzere PIC16F88 5 volt , Nokia 3310 ekranı ise 3.3 volt ile çalışmaktadır. Nokia 3310 ekranın beslemesini sağlamak için 5 volt besleme gerilimi 330Ω ve 220Ω dirençler ile yapılan gerilim bölücü vasıtası ile 3.3 volta düsürülür. Bu sayede dirençler üzerinden 5.5v/550Ω=10 mili ampere kadar akım çekilebilir.

Bu akımda ekranı sürmek için yeterlidir ve ekranı sorunsuzca çalıstırmaktadır. Ekranın PIC16F88 ile haberlesmesi ise 10 kΩ dirençler üzerinden sağlanmıstır. PIC16F88’in çıkışları 10 kΩ dirençler üzerinden geçirilerek ekranın girişlerine yaklaşık 500 mikro amper bir akım akıtmaktadır. Sağlanan bu akım ekrana her hangi bir zarar vermemek ile birlikte düzgün bir sekilde çalışmasını sağlamaktadır.

Devrede giriş düğmeleri ise 4×3 şeklinde portb’ye bağlanmıştır.Ayrıca kurma düğmesi de bulunmaktadır. Devremizde kullanılan PIC16F88 ise 4mhz dahili osilatör ile 1 mips hızında çalışmaktadır.

nokia-3310-proteus-isis-pic16f88-ares-pcb

Şekil 2 : Baskı devre şeması

Devrenin baskı devresinde dikkat edilmesi gerekilen nokta kullanılan düğmelerin hepsinin 2 bacaklı düğmeler olmasıdır. Baskı devre 2 bacaklı düğmeler için çizilmiştir onun dışında Nokia 3310 ekran soketi ise standart bacaklar arası 100th aralık bulunan piyasadaki soketler ile yapılabilir. Diğer malzemeler ise normal boyutlarındadır. Uygulamamızın yazılım kısmı ise hitech c dili kullanılarak yazılmıştır.

Uygulamaya ait yazılım aşağıda verilmiştir. Kodlar üzerinde programa dahil edilen htc.h ve stdio.h dosyaları derleyicinin kendi dosyaları olup çeşitli tanımlamaları içermektedir. Diğer dosyalar ise delay.h program içerisinde zaman gecikmesi sağlamak için hazırlanmıstır. 3310.h dosyası ise Nokia 3310 ekranı ile ilgili bütün fonksiyonları içerir. resim.h dosyası ise açılış ekranında gösterilen direnç resminin verilerini içerir. Son olarak açılış kısmında gösterilen direnç resmi fastlcd isimli programda hazırlanıp yazılıma dahil edilmistir. Bir başka uygulamada görüşmek üzere.

main.c yazılım içeriği;


/*****************************************************************
*  isim    : Direnc değeri hesaplayıcı                           *
*  Yazan   : Erhan YILMAZ (tekniker_erhan)                       *
*  tarih   : 25.03.2010                                          *
*  Sürüm   : 1.0                                                 *
*  Notlar  : Devre 4 renk dirençlerin direnç ve tölerans değerini *
*          :hesaplar ekranda gösterir. 							 *
*****************************************************************/

#include <htc.h>
#include <stdio.h>
#define	XTAL_FREQ	4MHZ
#include "delay.h"
#include "3310.h"
#include "resim.h"

__CONFIG(UNPROTECT	&	CCPRB0	&	DEBUGDIS	&	UNPROTECT	&	UNPROTECT	&	LVPDIS	&	BORDIS	&	MCLREN & PWRTEN & WDTDIS & INTIO & FCMDIS & IESODIS);

unsigned char tus,tus_sayi=0;
char direnc [4];//4 elemalık direnc renk kodu dizisi

//4x3 tuş takımı süren fonksiyon
void  tus_tara (void){
tus=0xFF;
RB0=0;RB1=1;RB2=1;
if (!RB3)tus=0;
if (!RB4)tus=3;
if (!RB5)tus=6;
if (!RB6)tus=9;
RB0=1;RB1=0;
if (!RB3)tus=1;
if (!RB4)tus=4;
if (!RB5)tus=7;
if (!RB6)tus=10;
RB1=1;RB2=0;
if (!RB3)tus=2;
if (!RB4)tus=5;
if (!RB5)tus=8;
if (!RB6)tus=11;
bekle_ms(400);
}
//Tuş numarasına uygun renk kodu ilgili satırda yazan fonksiyon
void tablo (unsigned char deger){
switch (deger)
{
case 0: nokia_printchar ("Siyah  ");break;
case 1: nokia_printchar ("Kahve ");break;
case 2: nokia_printchar ("Kirmizi");break;
case 3: nokia_printchar ("Turuncu");break;
case 4: nokia_printchar ("Sari ");break;
case 5: nokia_printchar ("Yesil ");break;
case 6: nokia_printchar ("Mavi ");break;
case 7: nokia_printchar ("Mor ");break;
case 8: nokia_printchar ("Gri ");break;
case 9: nokia_printchar ("Beyaz  ");break;
case 10: nokia_printchar("Altin ");break;
case 11: nokia_printchar("Gumus ");break;}
}

// Bu fonksiyonda direnç değeri hesaplanır 3. renk koduna göre dierncin
// ohm cinsinden değerini belirtir. 0,1 ohm ile 99 Giga ohm arasıdna direnç değerini hesaplar.
void direnc_hesap (void){
char gosster[6];
nokia_gotoxy(1,0);nokia_printchar("Direnc=");

if (direnc[2]==0)
{nokia_print(direnc[0]+0x30);nokia_print(direnc[1]+0x30);nokia_printchar("ohm");}

if (direnc[2]==1)
{nokia_print(direnc[0]+0x30);nokia_print(direnc[1]+0x30);nokia_printchar("0ohm");}

if (direnc[2]==2)
{nokia_print(direnc[0]+0x30);if (!direnc[1]==0){nokia_print(',');nokia_print(direnc[1]+0x30);}nokia_printchar("Kohm");}

if (direnc[2]==3)
{nokia_print(direnc[0]+0x30);nokia_print(direnc[1]+0x30);nokia_printchar("Kohm");}

if (direnc[2]==4)
{nokia_print(direnc[0]+0x30);nokia_print(direnc[1]+0x30);nokia_printchar("0Kohm");}

if (direnc[2]==5)
{nokia_print(direnc[0]+0x30);if (!direnc[1]==0){nokia_print(',');nokia_print(direnc[1]+0x30);}nokia_printchar("Mohm");}

if (direnc[2]==6)
{nokia_print(direnc[0]+0x30);nokia_print(direnc[1]+0x30);nokia_printchar("Mohm");}

if (direnc[2]==7)
{nokia_print(direnc[0]+0x30);nokia_print(direnc[1]+0x30);nokia_printchar("0Mohm");}

if (direnc[2]==8)
{nokia_print(direnc[0]+0x30);if (!direnc[1]==0){nokia_print(',');nokia_print(direnc[1]+0x30);}nokia_printchar("Gohm");}

if (direnc[2]==9)
{nokia_print(direnc[0]+0x30);nokia_print(direnc[1]+0x30);nokia_printchar("Gohm");}

if (direnc[2]==10)
{nokia_print(direnc[0]+0x30);if(!direnc[1]==0){nokia_print(',');nokia_print(direnc[1]+0x30);}nokia_printchar("ohm");}

if (direnc[2]==11)
{nokia_printchar("0,");nokia_print(direnc[0]+0x30);if(!direnc[1]==0)nokia_print(direnc[1]+0x30);nokia_printchar("ohm");}

//son renk koduna bakılarak tölerans değeri hesaplanır.
nokia_gotoxy(6,1);nokia_printchar("Tolerans=%");
if (direnc[3]==10)nokia_printchar("5 ");
if (direnc[3]==11)nokia_printchar("10");
}
//basılan tuşun değeri renk olarak diziye eklenir.
void renk_ekle (void){
nokia_gotoxy(15,tus_sayi+2);
tablo (direnc[tus_sayi]);
tus_sayi++;
tus=0;
}
//Ekran satırlarını siler ve satırlara 1,2,3,4 rakamlarını yazar.
void ekran_temizle(void){
char i,j;
for (j=0;j<2;j++){nokia_gotoxy(0,j);for(i=0;i<14;i++)nokia_print(' ');}
for (i=1;i<5;i++)
{nokia_gotoxy(3,i+1);
nokia_print(i+0x30);
nokia_print('-');
for(j=0;j<9;j++)nokia_print(' ');}}

void main(void)
{	int i;
OSCCON=0x6C;
TRISB = 0xF8;
TRISA = 0X00;
PORTB = 0XFF;
PORTA = 0x00;
CMCON = 0x07;
ANSEL = 0x00;
RBPU = 0;
nokia_init();
nokia_gotoxy(0,0);
for(i=0;i<504;i++)
nokia_write_data(resim[i]);
bekle_ms(500);bekle_ms(500);
bekle_ms(500);bekle_ms(500);
nokia_clean_ddram();
ekran_temizle();
nokia_gotoxy(18,0);
nokia_printchar("Renkleri");
nokia_gotoxy(18,1);
nokia_printchar("Tuslayin");

while(1){
tus_tara();
if(tus!=0xFF){
switch (tus_sayi){
//1. renk olarak siyah ,altın ,gümüş girilmesini önleyen kod
case 0: if ((!tus==0) && tus!=10 && tus!=11){ekran_temizle();;direnc[0]=tus;renk_ekle();}break;
//2. renk olarak altın ve gümüş girilmesini engelleyen kod
case 1: if(tus!=10 && tus!=11){direnc[1]=tus;renk_ekle();}break;
//3. renk olarak bütün renkler girilebilir.
case 2: direnc[2]=tus;renk_ekle(); break;
//4. renk olarak altın ve gümüş harici renk girilmesini önleyen kod
case 3: if(tus==10 || tus==11){direnc[3]=tus;renk_ekle();direnc_hesap();tus_sayi=0;}break;}}
}
}

Tamamlanmış olan devrenin görüntüleri;

Projeye ait kod dosyaları ve proteus ares baskı devre dosyası: Direnç renk kod hesaplayıcı devre Nokia 3310 lcd PIC16F88

Dosya indirme LINK listesi (TXT formatında) link-11884.zip şifre-pass: 320volt.com

  1. osman 2011/03/06
  2. Ahmet 2011/03/06
  3. gevv 2011/03/06
  4. Erhan 2011/03/06
  5. cafer 2011/03/06
  6. Erhan 2011/03/06
  7. Ramazan 2011/03/14
  8. Erhan 2011/03/14
  9. gevv 2011/03/14
  10. HAYDAR 2011/03/14
  11. Erhan 2011/03/14
  12. HAYDAR 2011/03/15
  13. tekniker 2011/03/16
  14. Erhan 2011/03/16
  15. ramazan 2011/03/21
  16. Erhan 2011/03/21
  17. kadir 2011/03/23
  18. Erhan 2011/03/23
  19. kadir 2011/03/25
  20. gürhan 2011/05/26
  21. Erhan 2011/05/26
  22. KD 2012/05/13
  23. Ramazan 2012/05/13
  24. ömer 2013/03/06
    • Ercan 2014/03/13
  25. sadık özdemir 2013/07/21
  26. gdyg 2014/09/01

Yorum

Soru: