
Potansiyometre ile PWM Kontrolü

Merhaba arkadaşlar, bu yazımızda Trudyo Geliştirme Kartı ile 2×16 Karakter LCD ekran ve Potansiyometre kullanarak Potansiyometre ile PWM Kontrolü uygulaması yapacağız. Eğer PWM hakkında bilgi sahibi değilseniz “PWM Nedir ve Nasıl Çalışır?” başlıklı yazımızı incelemenizi öneririz.
Potansiyometre, LCD ve Trudyo Geliştirme Kartı Bağlantısı



Yukarıda görüldüğü üzere Potansiyometre A1 pinine bağlanmıştır. Potansiyometre ile ayarlanan analog değere karşılık olarak PWM sinyali CCP1 çıkışı yani C2 pininden alınacaktır. 2×16 Karakter LCD Ekran ise Trudyo Geliştirme Kartı‘nın D portuna bağlanmıştır. Ayrıca haricen eklenmiş bir 10K Ohm değerinde potansiyometre ile LCD ekranın kontrast ayarı yapılabilmektedir.
Bu Uygulamada Kullanılan Malzemeler


Trudyo Geliştirme Kartı




Başlamadan Önce
2×16 LCD Ekran Kullanımı
2×16 karakter LCD ekran kullanımı hakkında ayrıntılı bilgi ve örnek uygulamayı incelemek için daha önce yayınlanan “2×16 LCD Ekran Kullanımı” yazımızı okuyabilirsiniz.
Trudyo Konfigürasyon Ayarları
Trudyo Geliştirme Kartı ile programlama yapabilmek için kartınızın konfigürasyon ayarlarını yapmanız gerekmektedir. Gerekli konfigürasyon ayarlarını yapmak için “Trudyo Konfigürasyon Ayarları” yazımızı okuyabilirsiniz.
Potansiyometre ile PWM Kontrolü Uygulama Kodları
// Connections
sbit LED at LATA4_bit; // Dahili LED RA4 Pinine Bagli
// LCD module connections
sbit LCD_RS at LATD7_bit;
sbit LCD_EN at LATD6_bit;
sbit LCD_D4 at LATD5_bit;
sbit LCD_D5 at LATD4_bit;
sbit LCD_D6 at LATD3_bit;
sbit LCD_D7 at LATD2_bit;
sbit LCD_RS_Direction at TRISD7_bit;
sbit LCD_EN_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD2_bit;
unsigned int adc=0; // adc degeri kayit degiskeni
unsigned int duty=0; // PWM duty cycle degeri kayit degiskeni
char txt[7]; // String donusumu icin kayit degiskeni
void main() {
// Port Giris-Çikis Seçimi (0:Çikis, 1:Giris)
TRISA=0b00000000;// [][][][LED][][][][]
TRISB=0b00000000;// [][][][][][][][]
TRISC=0b00000000;// [][][][][][PWM][][]
TRISD=0b00000000;// [LCD_RS][LCD_EN][LCD_D4][LCD_D5][LCD_D6][LCD_D7][][]
TRISE=0b00000000;// [][][][][][][][]
// Port Analog-Dijital Giris Seçimi (0:Dijital, 1:Analog)
ANSELA=0b00000000;// [][][][][][][ADC][]
ANSELB=0b00000000;// [][][][][][][][]
ANSELC=0b00000000;// [][][][][][][][]
ANSELD=0b00000000;// [][][][][][][][]
ANSELE=0b00000000;// [][][][][][][][]
// Port Temizleme
LATA=0x00;
LATB=0x00;
LATC=0x00;
LATD=0x00;
LATE=0x00;
// PWM hazirlama
PWM1_Init(5000); // PWM 5kHz
PWM1_Set_Duty(0); // Duty Cycle degeri 0/255
PWM1_Start(); // PWM baslat
// Ekrana yazdirma
Lcd_Out(1,1,"Frekans: 5kHz");
Lcd_Out(2,1,"Duty: XXX/255");
// Sonsuz Dongu
while(1){
adc=ADC_Read(1); // ADC degeri 0-1023 arasinda degisen bir deger dondurur.
duty=adc/4; // "duty" degeri 0-255 araliginda olmalidir. Bu sebeple 4'e bölüyoruz.
PWM1_Set_Duty(duty); // "duty" degerini PWM'e uygula
IntToStr(duty,txt); // "duty" degerini String formata donusur
Lcd_Out(2,7,txt); // "duty" degerini ekrana yaz
delay_ms(50); // 50ms'lik zaman gecikmesi
}
}
Uygulamaya ait dosyaları buraya tıklayarak indirebilirsiniz. Merak ettiğiniz ve aklınıza takılan soruları aşağıda 👇 yorum olarak bize iletebilirsiniz. İyi çalışmalar. 🙂 #geliştirmeyebaşla
Yorum yapmak için giriş yapmalısınız.