pcbway

16F877A ile çalışan Dijital Termometre sorunu

Başlatan jokerSM100, 03 Ocak 2012, 19:54:25

jokerSM100

Elimde isis de düzgün çalıştırdığım bir devre var.

pratik uygulamada LCD ekranda hiçbir değişiklik olmuyor.
hex dosyasında problem yok, kristal sağlam, bağlantılarıda defalarca kontrol ettim nerde bir hata yapıyor olabilirim?

yazici67

Simülasyonda çalışabilir gerçek hayata uymayan bir durum vardır.Kaynak kodlarını vs. atarsan yardımcı olabiliriz.

jokerSM100


yazici67

Kaynak kodunun olmaması biraz sıkıntı olur.

yazici67

LCD nin D0-D1-D2-D3 pinlerini devrede de boş bırakmışsan çalışmaz.Onları toprağa çek.Gerisinde bir sıkıntı yok gibi görünüyor.

jokerSM100

#include <pic.h>
#include <delay.c>
#include <lcd.c>
#include <stdio.h>
main (void)
{
// Değişken tanımlamaları
const float lsb=5.0/1024.0;
unsigned char gerilim, ust, alt;
float sicaklik;
unsigned char sonuc[]=\"SICAKLIK = \";

// Port konfigürasyonu
TRISB=0; // PORTB çıkış 
TRISA=1; // RA0 analog giriş

// Ön LCD işlemleri
DelayMs(250); // 250ms bekle
lcd_init(); // LCD’yi hazırla
lcd_clear(); // LCD\'yi temizle

// ADC ayarları
ADCON1=0x8E; // AN0 analog giriş
ADCON0=0x41; // A/D aktif

for(;;){

// A/D çevrimi başlat
ADCON0=0x45;
// Dönüşümün bitmesini bekle
while((ADCON0&4)!=0);

// Dönüşüm sonucunu kaydet
gerilim=ADRESH;
gerilim=256*gerilim+ADRESL;

// Sıcaklık bilgisini oluştur
sicaklik=gerilim*lsb*100.0;

// Tam ve ondalık kısımları ayır
ust=(int)sicaklik;
alt=(int)(10.0*(sicaklik-ust));

// LCD’ye yazdırma işlemlerini yap
sprintf(sonuc+11,\"%d.%dC \",ust,alt);

// 1. satıra geç ve LCD’ye yaz
lcd_goto(0x00);
lcd_puts(\"Bilim ve Teknik\");

// 2. satıra geç ve sıcaklık değerini yaz
lcd_goto(0x40);
lcd_puts(sonuc); 

// Biraz bekle ve ekranı temizle 
DelayMs(250);
lcd_clear();

} // Ölçümü tekrarla
} // Programın sonu
kaynak kodu bu. bilim ve teknik dergisinin sitesinden alıyorum.
http://www.biltek.tubitak.gov.tr/gelisim/elektronik/dosyalar/13/TERMO.C
gerçi ben bunu derlemeyi başarsam da elde ettiğim hex uzantısı simulasyonda bir işe yaramıyor. ben direk hexden assmly e dönerek yaptım.

jokerSM100

Alıntı yapılan: yazici67 - 03 Ocak 2012, 22:11:18LCD nin D0-D1-D2-D3 pinlerini devrede de boş bırakmışsan çalışmaz.Onları toprağa çek.Gerisinde bir sıkıntı yok gibi görünüyor.
yarın okula gidince ona bir bakarım ben boş bıraktım çünkü.

yazici67

Kodda bir sıkıntı yok.LCD bacaklarını denersin...

basker

aynı devre üzerinde bende çalışıyorum ama hala sonuç almış deyilim elimdeki kaynaklar arkadaşın bahsettiği kaynaklarla aynı yardımcı olabilirseniz çok memnun olurum

yazici67

Konu eskimiş ama dikkatli bakınca şunu farkettim:
unsigned char gerilim, ust, alt;gerilim \"unsigned char\" olarak tanımlanmış yani 1 byte, ama atama yani (256 * ADRESH + ADRESH) toplamda 2 bytelık bir değer. Bu kısım;
unsigned short gerilim;
unsigned char ust, alt;
olarak düzeltilmeli.
Ayrıca;
ust=(int)sicaklik;
alt=(int)(10.0*(sicaklik-ust));
Bu kısımda şu şekilde olacak:
ust=(unsigned char)sicaklik;
alt=(unsigned char)(10f * (sicaklik-ust));
Bu haliyle bir deneyin...