sensörden pic'e analog giriş ?

svsilence

Üye
Katılım
21 Ara 2008
Mesajlar
7
Puanları
1
Yaş
38
arkadaşlar hoca projeye 4 tane sensörün pic e analog girip bunları bilgi a iletmesini istedi

kodlar falan yazıldı hazır şu an
ancak sensör olayında kafam karışık

4 tane sensörü şöyle kullanıcam

1 tanesi LM 35 ile sıcaklık bilgisi verecek devreye nasıl bağlanır ne elemenaları kullanılır bilmiyorum

1 tanesi ışık için LDR olacak , 5v---direnç---LDR şeklinde--gnd
şeklinde bağlasam olur mu yani çalışır mı ?

diğer sensör de hoca bulamazsın şimdi en iyisi bir pot bağla gerilimi değiştir azalt çoğalt o bilgi olur sana dedi burayı da biraz anlamadım

son olarak bir mikrofon kullanmayı düşünüyorum , mikrofonun çıkışı az oluyor diye biliyorum opamp kullanmam gerekir mi bir de nasıl bağlayacağım devreye??

ilgilenen arakdaşlar yardım ederse programlama bilgim var da elektronik de biraz zorlanıorum...
 
Anladığım kadarıyla adc çevrimi yapıp, bilgileri rame kaydetmek istiyorsunuz.Bunun için öncelikle kullanacağınız mikroişlemcinin adc yapısı hakkında bilgi sahibi olmanız gerekir. Örneğin adc girişiniz 0-10 V arasında çalışıyor ise, algılayıcı çıkışını da bu gerilim seviyesine uydurmanız gerekmektedir. Sensörler çıkışında düşük akım ve gerilim ürettiği için (mV seviyelerinde) bu çıkışı kuvvetlendirip, mikroişlemcinin adc kanalına girip daha sonra adc çevrimi yaparsınız.

Potansiyometre olayı ise en basit analog giriş üretme yöntemi olduğu için uygulanması çok kolaydır. Bir gerilim bölücü ile adc girişindeki gerilimi potansiyometre ile oynayarak değiştirirsiniz.

Ayrıca programı yazdım demişsiniz ancak, bu temel bilgileri bilmeden nasıl yazdığınızı çok merak ediyorum...
 
-yazdım demedim yazıldı-

16f877 için yazıldı arkadaş ayarladı sanırım o giriş voltaj değerlerini

oraya eklediğim resim var o şekilde çalışır mı acaba ? uygulama da

program bu arkadaş açıklamalı açıklamalı yazmış devreyi yap unuttuğum bir şey yoktur umarım çalışır dedi...





#include <16f877A.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#device ADC=10 // 10 bitlik ADC kullanılacağı belirtiliyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#int_RB // PORTB de B4...B7 pinlerinde meydana gelen değişim kesmesi
void B_degisiklik () // Kesme fonksiyonu ismi
{
if (input(pin_b4)==0)// RB4 pini girişi okunuyor.
{
set_adc_channel(0); // AN0 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi1=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj1=(0.001953125*bilgi1); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital1=%lu",bilgi1); // AN0 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj1=%fV",voltaj1); // AN0 ucundaki sinyalin gerilim değeri
}
if (input(pin_b5)==0) // RB5 pini girişi okunuyor.
{
set_adc_channel(1); // AN1 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi2=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj2=(0.001953125*bilgi2); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital2=%lu",bilgi2); // AN1 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj2=%fV",voltaj2); // AN1 ucundaki sinyalin gerilim değeri
}
if (input(pin_b6)==0) // RB6 pini girişi okunuyor.
{
set_adc_channel(2); // AN2 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi3=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj3=(0.001953125*bilgi3); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital3=%lu",bilgi3); // AN2 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj3=%fV",voltaj3); // AN2 ucundaki sinyalin gerilim değeri
}
if (input(pin_b7)==0) // RB7 pini girişi okunuyor.
{
set_adc_channel(3); // AN3 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi4=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj4=(0.001953125*bilgi4); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital4=%lu",bilgi4); // AN3 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj4=%fV",voltaj4); // AN3 ucundaki sinyalin gerilim değeri
}
delay_ms(1000); // 1 sn gecikme veriliyor.
output_b(0xFF); // B portu çıkışı komple lojik1
}

unsigned long int bilgi1,bilgi2,bilgi3,bilgi4; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
float voltaj1,voltaj2,voltaj3,voltaj4; // ondalıklı tipte voltaj isminde değişken tanıtılıyor

//********** ANA PROGRAM FONKSİYONU*******

void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
setup_adc(adc_clock_div_32); // ADC clock frekansı fosc/32
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
enable_interrupts(INT_RB); // RB çevrimi bitti kesmesi tanıtılıyor
enable_interrupts(GLOBAL); // Tüm kesmeler aktif
set_tris_b(0xFF); // B portu komple giriş

while(1) // sonsuz döngü
{
enable_interrupts(INT_RB); // RB çevrimi bitti kesmesi tanıtılıyor
}
}
 
opamlı devre kullanmanız gerekli kazancıda sensörden gelen bilgi ve çıkışıda 5 volta ayarlayacak şekilde ayrıca pic adc girişlerine 5 voltluk zeber bağlamayı unutmayın.opamlı devreleri inceleyin mesela LM35 bağlanmış op devrelerine bakın pice bağlanan.ayrıca burda ön inceleme yapmadan direk sizden istenen bilgileri sorarsanız konuyu tam anlatmış olmamakla beraber bizlerden de size soru gelebilir.kolaygelsin.
 

Forum istatistikleri

Konular
128,133
Mesajlar
915,308
Kullanıcılar
449,850
Son üye
umutbaysal9

Yeni konular

Çevrimiçi üyeler

Geri
Üst