PİC16F877 Hakkında ufak bir sorun

voltaj=123 gibi sabit bir değer atayıp ekranda yazdırmayı deneyin. Yazılıyorsa read_adc de sorun vardır.
AN0 da multimetre ile ölçünce değer okuyor musunuz?
 
voltaj=123 gibi sabit bir değer atayıp ekranda yazdırmayı deneyin. Yazılıyorsa read_adc de sorun vardır.
AN0 da multimetre ile ölçünce değer okuyor musunuz?
Devreye değiştirmeden aşağıdaki kodu yazdım. Çalıştırdığımda ekranda hiç bir şey çıkmadı boş. Hata nerede acaba?
Kod:
#include <123.h>
#include <lcd.c>
#define LCD_ENABLE_PIN PIN_B2
#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_DATA4 PIN_C4
#define LCD_DATA5 PIN_C5
#define LCD_DATA6 PIN_C6
#define LCD_DATA7 PIN_C7

void main()
{
   lcd_init();
   delay_ms(10);
   float voltaj;
   while(TRUE)
   {
      voltaj=8.7;
      printf(lcd_putc,"\f Voltaj= %f V", voltaj);
      delay_ms(100);
   }

}
 
Görünüşe göre analog sayısal dönüşüm yapmıyorsunuz.

LM35 sıcaklık ölçeden gelen verileri ekrana yazan örnek bir uygulamayı burada bulabilirsiniz.

 
Peki aşağıdaki resimde Güneş Paneli gerilimini, batarya gerilimini, batarya akımını pic üzerinden nasıl ölçeceğim?
 

Ekli dosyalar

  • AZ6_Fig_1.jpg
    53.4 KB · Görüntüleme: 7
Orada güneş paneli nereye bağlanmış pek anlamadım.

Bence şu devre daha açık çizilmiş.


Kaynak :

Solar energy measurement using pic microcontroller

Ama bu devreyi yapmak için şu konuların parça parça üzerinden geçmenizi tavsiye ederim.

-PIC ile analog sayısal dönüştürücü kullanımı
-PIC ile dalgalı akım ölçümü (AC)
-PIC ile akım ölçümü
-PIC ile Lcd Ekran kullanımı

Ben şimdilik AVR cephesine geçtim ;-)
 
Arkadaşlar ekrana voltajı farklı değer olarak yansıtıyor. Sorun nedir tam olarak yardımcı olabilir misiniz? Yaptığım hesaplama mı yanlış acaba? Birkaç gündür bu sorunu çözmeye çalışıyorum. Yazdığım kod (CCS C) aşağıdaki gibi;

Kod:
#include <321.h>
#include <stdio.h>
#define LCD_ENABLE_PIN PIN_B2
#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_DATA0 PIN_D0
#define LCD_DATA1 PIN_D1
#define LCD_DATA2 PIN_D2
#define LCD_DATA3 PIN_D3
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7

#include <lcd.c>


void main()
{
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);
   unsigned int16 adc_giris=0;
   float voltaj=0;
   lcd_init();

   while(TRUE)
   {
      set_adc_channel(0);
      delay_ms(100);
      adc_giris=read_adc();
      voltaj=adc_giris*(12.0/1024.0);
      delay_ms(10);
      printf(lcd_putc, "\f voltaj= %f V",voltaj);
      delay_ms(2000);
   }

}
 

Ekli dosyalar

  • resim.PNG
    108.7 KB · Görüntüleme: 9
Sorun nedir tam olarak yardımcı olabilir misiniz?

Burada 321.h, Lcd.c ve read_adc() işlevini göremiyoruz. TRISB ve TRISA'ya değer atanmamış.

Tahminen analog sayısal çevrim doğru yapılmıyor olabilir. Önceki iletide paylaştığım sıcaklık göstergeli LCD Ekran örneğini kurup çalıştırmayı deneyiniz.
O uygulama da CSS C ile yazılmıştı.

Ya da daha basiti A0'a LM35 sıcaklık ölçer bağlanmış. B0'a bir LED bağlanmış. Sıcaklık belirli bir düzeyin üzerindeyse BO'ı yakan bir uygulamayı buradan bulabilirsiniz.

Hatta sıcaklık ölçer olmasına da gerek yok basitçe bir ayarlı direnç ("potansiyometre") bile olabilir.
 
321.h > proje adı (rastgele oluşturuldu)
lcd.c > lcd kullanımı için dahil edildi projeye.

Buradaki TP3 noktasından batarya gerilimi okunacak. Fakat burası en fazla 5V olması gerekiyor PİC ten dolayı. Yani potansiyometreyi oynatamayız. Peki potansiyometreyi oynatmadan bataryanın ne kadar şarj olduğunu (Yani akünün ne kadar dolduğunu) nasıl öğreneceğiz? Fikri olan? Teşekkürler.
 

Ekli dosyalar

  • AZ6_Fig_1.jpg
    53.4 KB · Görüntüleme: 10
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…