16f877 ile a/d çevrimi yapıp bilgisayara göndermek?

Başlatan anafor, 18 Nisan 2004, 20:09:05

anafor

Merhabalar bana ADC çevrimini CCS ile yapmada YARDIM edebilecek varsa lütfen yardım etsin . 16f877 de referans gerilimlerini vcc ve gnd aldım ayrıca A0 DAN OKUMA YAPACAĞIM. benim sormak istediğim okumada 10 bitlik veriyi hangi tip değişkene kopyalamalıyız (int,float...?)
ve aldığımız veriyi mesala (2.325 V ) gibi nasıl printf ile seri porttan bilgisayara yollarım?. :roll:  çok teşekkürler

Analyzer

Selam,

Önce adc kanalını  set_adc_channel( int ch) ile set etmen gerekir.Daha sonra adc portlarını analog'a ayarlaman gerekir.Daha sonra  adc'nin saat frekansını setup_adc(xx) ile ayarlaman gerekir. Min. 10 ms bekleyip ilk okuma işlemini yapabilirsin. v = read_adc(); gibi.. Zaten rs232'yi konfigure ettiysen  printf(); ile değerleri seri porta yollarsın.Her voltaja göre sabit integer bir değer gönderdiği için integer kullanman gerekir. read_adc() prosedürünün prototipinde yazar ;)

Kolay gelsin.

Analyzer
Üşeniyorum, öyleyse yarın!

Erol YILMAZ

@ Analyzer
Min 10 mS cok uzun değil mi?
1 mS olsa olcumun sonucu degisir mi?
Kolay Gelsin...

Erkan Gench

877'nin datasheet'inde gerekli zamanı hesaplamak için bir formül vermiş (Tacq=acquisition time) buna göre 50 derecede yaklaşık 20us yeterliymiş. CCS'nin helpinde de 10us yazıyor.

öncelikle kodun başında (başlık dosyasında)
#device adc=10
şeklinde bir tanımlama lazım bu adc'yi 10 bit olarak okumak için.

read_adc() ile aldığın verileri en azında 16 bitlik bir değişkene atamalısın (mesela int16)

vdd'yi referans aldığına göre 5/1024=0.0048828 eder yani read_adc() ile okuduğun sayı '1' ise girişteki gerilim 0.0048828Volttur. eğer '1024' ise 5 volttur. buna göre giriş gerilimini hesaplaman lazım.
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

es-es

Bir ADC çevrim zamanı 13 usn civarı sürüyor. Eğer sadece bir kanaldan ADC okunuyorsa arka arkaya çevrim başlatılabilir. Ama arka arkaya değişik kanallar okunacaksa kanal değiştirdikten sonra  15 usn civarı bir bekletme yapmak gerekiyor.

anafor

merhabalar
peki ben float bir değişkeni nasıl printf ile seri porttan yollarım.??(integera çevirmeden)
mesela 12.55 sayısını nasıl ekranda görebilirim.

Erkan Gench

printf("%f",sayi);

şeklinde virgülden sonra ve önce kaç sayı görmek istiyorsan ona göre 1.1 den 9.9' kadar sayılarını kullanabilirsin.
yani virgülden önce iki virgülden sonra üç karakter görmek istiyorsan

printf("%2.3f",sayi);

şeklinde yazmalısın.
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

Analyzer

Selam,

Mikro yerine mili yazmışım.m aslında u olacak ;)

Analyzer
Üşeniyorum, öyleyse yarın!