"Enter"a basıp içeriğe geçin

16f877A ve Grafik LCD ile Basit Osiloskop Yapmak

Merhaba arkadaşlar, iş master ve derslerden arta kalan zamanlarda yazdığım için bir çok yazımda daha sonra şunu da yapacağım yazmışım ama yapmadığım için yazmamışım da.  Bende elimin altında olan ve elektronik ve yazılıma yani başlamış arkadaşlara farklı bakış açısı katmak için basit uygulamalardan örnekler paylaşayım dedim.

Bir grafik LCD yi oldukça basit. CCS C ‘nin hazırlanmış olan driverları oldukça iyi. Bu uygulamada kullanacağımız “HDM64GS12.c” ve  “GRAPHICS.c” kütüphanlerini, C:\Program Files\PICC\Drivers klasöründe bulabilirsiniz.

Tek kanaldan okuma yapacağız bu yüzden programda sadece a0’ı açacağız. Ayrıca yapacağımız osiloskopu kullanmak istiyorsanız girişe bir filtre ve koruma devresi koymalısınız. İnternette bulduğum örnek bir koruma devresi zener diyorlar 4.2 Volt olabilirler.

osi_koruma

Devre şemamız aşağıdaki gibi olacak. simülasyon devresi olduğu için kristal falan bağlamadım. devreyi kuracağınız zaman gerekli malzemeleri eklemeyi unutmayın.

glcd

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

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#include "HDM64GS12.c"
#include "GRAPHICS.c"

float Gerilim=0.0,MaxGerilim=0.0,MinGerilim=5.0;
unsigned int8 Vpixel=0,i=0;
char Metin[21]={"Max   V Min   V    V"};

void Analog_Oku()
{
   Gerilim = read_adc();
}

void Ekran()
{  
   glcd_text57(0, 0, Metin, 1, ON);
   glcd_line(0, 63, 4, 63, ON);
   glcd_line(0, 53, 4, 53, ON);
   glcd_line(0, 43, 4, 43, ON);
   glcd_line(0, 33, 4, 33, ON);
   glcd_line(0, 23, 4, 23, ON);
   glcd_line(0, 13, 4, 13, ON); 
   for(i=7;i<127;i++)
   {
      Analog_Oku();
      Gerilim *= 0.0049;  //Gerilim = Gerilim * 0.0049;
      if(Gerilim>MaxGerilim)MaxGerilim=Gerilim;
      if(Gerilim<MinGerilim)MinGerilim=Gerilim;
      Vpixel = (int8)(Gerilim * 10.0);
      Vpixel = 63 - Vpixel;
      glcd_pixel(i,Vpixel,ON); 
   }
   sprintf(Metin,"%1.1fV Max%1.1fV Min%1.1fV",Gerilim,MaxGerilim,MinGerilim);
   glcd_text57(0, 0, Metin, 1, ON);
   delay_ms(50);
   glcd_fillScreen(OFF); 
}

void main()
{
   SETUP_ADC(ADC_CLOCK_INTERNAL);
   SETUP_ADC_PORTS(AN0);
   set_adc_channel(0);
   glcd_init(ON);
   delay_ms(500);
   while(TRUE)
   {
      Ekran();
   }
}

Proteus simülasyon görüntüleri. Gerçekte deneme fırsatım olmadı ancak aynı kodun düzenlenmemiş halini denedim. bir sorun çıkarsa lütfen benimle iletişime geçin.

osiloskop dc

osiloskop sinüs

İlk Yorumu Siz Yapın

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir