Menü

PIC16F628 ile REFLEKS ÖLÇER

8 Aralık 2017 - Baskı Devre, Genel
PIC16F628 ile REFLEKS ÖLÇER
4.9 (97.25%) 80 votes

Proje Adı : PIC16F628 mikro denetleyicisi ile kişinin tepki süresini ölçen LCD göstergeli elektronik devre

Devrenin Amacı;

Projede Kişinin Görsel uyarılara karşı verdiği tepki süresinin hesaplanması amaçlandırılmıştır.Devrede bulunan 2 adet Başlat ve Durdur  butonları ile kişinin görsel uyarıya verdiği tepki süresi LCD ekran üzerinde ms  biriminde okunmaktadır.

Devrede Kullanınlan Malzemeleri Listesi

5v ‘ Luk Regülatör  Devresi

 

Devre Şeması

5V’Luk  Regülatör  Devresi  Şeması

Devrenin PROTEUS programında çizilmiş hali ve Devrenin Çalışma Akışı

 

STEP-1  Programı Başlat tuşuna basınca devre çalışır konuma geçiyor ve LCD Ekranda ‘Refleks Ölçer Başlat’a Basın’ Komutu geliyor.

STEP-2

Başlat Butona basınca Devremizde PIC16F628 Devreye giriyor  ve Kırmızı Led ışık Yanıyor. Kırmızı Led ışığın ne kadar  süre yanacağı bilinmiyor

.

STEP-3

Kırmızı Led sönüp Yeşil Led yanmaya başladığında PIC16F28 zamanlayıcı çalışıyor her 1ms’de bir kesme üretiyor.Durdur  Butonuna basıncaya kadar geçen süredeki  her kesme  oluştuğunda Cx adlı sayıcı değeri artıyor durdur butonuna basıncaya kadar.

STEP-4

Durdur butonuna basıldığında zamanlacı duruyor Ölçülen Cx Tepki süresi LCD Ekrana Yazdırılıyor.

 

PIC16F628 Mikrodenetleyicisinin C++ Programındaki Yazılımın Yüklenmesi

PIC16F628 için Kullandığımız Kodlar Aşağıda Belirtilmiştir

#include <pic.h>

#include <delay.c>

#include <lcd.c>

#include <stdio.h>

#include <stdlib.h>

 

// Butonlar ve LED’ler için pin tanımlamaları

#define            BASLAT            RB4

#define DURDUR        RB5

#define            KIRMIZI           RB6

#define YESIL  RB7

 

// Konfigürasyon ayarları

__CONFIG(WDTDIS&LVPDIS&PWRTEN&XT);

 

// Global değişkenler

unsigned int CX;

unsigned char kontrol;

 

// TIMER Kesme Alt Programı

void interrupt kesme(void){

CX++;

if(CX>2000)kontrol=1; // Zaman aşımı için

T0IF=0; // Bayrağı temizle

TMR0=131; // TIMER’ı tekrar yükle

}

 

//———— ANA PROGRAM —————–

main(void)

{

unsigned char sonuc[]=”GECiKME=        “;

unsigned int i,deger;

unsigned char sayi,hata;

 

// Port ayarları

TRISA=0x00; // Bütün pinler çıkış

TRISB=0x30; // RB4,RB5 giriş, diğerleri çıkış

PORTA=0; PORTB=0;

CMCON=0x07;

 

// TIMER işlemleri

T0CS=0; // Dahili clock

PSA=0; // Prescaler TMR0 için ayarlı

PS0=0; PS1=1; PS2=0; // Oran 1:8

ei(); // Bütün kesmeler etkin

T0IE=0; //Başlangıçta TIMER pasif

T0IF=0; // Bayrağı temizle

 

DelayMs(250); // 250 ms bekle

lcd_init(); // LCD hazırlık aşaması

lcd_clear(); // LCD’yi temizle

lcd_write(0x0C); // imleci gizle

lcd_goto(0x00); lcd_puts(” REFLEKS OLCER  “);

lcd_goto(0x40); lcd_puts(” BASLAT’A BASIN “);

 

for(;;){ // Ana işlem döngüsü

kontrol=0; CX=0; hata=0;

 

while(BASLAT==0); // Butona basılana kadar bekle

 

lcd_clear(); // Butona basılınca LCD’yi temizle

 

KIRMIZI=1; YESIL=0; // Kırmızı LED’i yak

lcd_goto(0x00); lcd_puts(” YESiL YANINCA  “);

lcd_goto(0x40); lcd_puts(” DURDUR’A BASIN “);

 

sayi=rand(); // rand() ile rastgele sayı üret

deger=3*sayi;

if(deger<=75)deger=deger+75; //en düşük 75 yap

 

// Rastgele bir süre bekle. Süre=degerx(10 ms)

for(i=0;i<deger;i++){

DelayMs(10);

if(DURDUR==1){hata=1; break;}

}

 

if(hata==1){ // Kırmızı ışıkta durdur’a basılırsa

lcd_goto(0x00); lcd_puts(“BUTONA COK ERKEN”);

lcd_goto(0x40); lcd_puts(”   BASTIN !!!   “);

KIRMIZI=0;

}

 

else{

YESIL=1; KIRMIZI=0;  // Yeşil LED’i yak

 

TMR0=131;//125 sayım için değer yükle (256-131=125)

T0IE=1; // TIMER’ı başlat

 

while(DURDUR==0); //Durdur’a basılmadıysa bekle

 

T0IE=0; // TIMER’ı durdur

 

lcd_clear();

lcd_goto(0x00);

 

if(kontrol==0){//CX değerine göre uygun mesajı yaz

if(CX<=100)lcd_puts(”   TEBRiKLER !  “);

if(CX>100&CX<=200)lcd_puts(”    MUKEMMEL    “);

if(CX>200&CX<=300)lcd_puts(” DAHA HIZLI OL  “);

if(CX>300&CX<=600)lcd_puts(“BiRAZ PRATiK YAP”);

if(CX>600&CX<=1000)lcd_puts(”  COK YAVASSIN  “);

if(CX>1000&CX<2000)lcd_puts(“UYUYORSUN GALiBA”);

 

// Tepki süresini milisaniye cinsinden yaz

sprintf(sonuc+8,”%d ms”,CX);

lcd_goto(0x40); lcd_puts(sonuc);

}

// Zaman aşımı durumunu dikkate al

else lcd_puts(”  YENiDEN DENE  “);

 

}

} // İşlemleri tekrarla

}// Programın sonu

Devremizin Proteus Programındaki Baskı Devre Çizimi

Devremizin Baskı Devre Şeması Ve Üstten Görünüş Şeması

 

 

Devrenin 3D Şeması  Devrenin Yapım Aşaması

Baskı Devrenin Ütü İle Plakete Aktarılması

Bakır Plaketin Eritilmesi

Devre Elemanlarının Lehimlenmesi ve Devre Montajı

Devrenin Çalışma Prensibi

Proje Ekibi ;

Burak SAPMAZ

Fatih Sultan Mehmet ÇULHACI

Alper ÇELİK

Sercan ÖZLÜ

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Araç çubuğuna atla