Raspberry Pico İle LM35 Sıcaklık Sensörü Kullanımı

Bu kütüphane ile ilgili bir sorun olabilir. Belki de kütüphane ADC'nin 12 bit olduğunu bilmiyor, 10 bite göre sonuç üretiyor.
 
Bu kütüphane ile ilgili bir sorun olabilir. Belki de kütüphane ADC'nin 12 bit olduğunu bilmiyor, 10 bite göre sonuç üretiyor.
Arduinoya sığmayacak kadar kod yazmışda, 12bit için kodumu yazıp sığdıramamış acaba :katil2:

Neyse ben aşağıdaki şekilde doğru sonuca ulaştım. Evdeki civalı termometreyi referans aldım. Buna göre adc yi 1824 olarak hesaplamam gerekti. Sence bu bir sıkıntı çıkarır mı?

Şu vaziyette tam doğru gösteriyor.
Şimdilik böyle kalsın. Mantıklı bir çözüm bulana kadar.

C:
// LM35 Sıcaklık Sensörü
  for (int i = 0; i < 350; i++) // daha kararlı ortalama bir sonuç almak için 50 kez okuma yapma
  {
    lm35 = lm35 + analogRead(lm35Pin);
    delay(1);
  }
  lm35 = lm35 / 350;
  sicaklik_gerilim = (5000.0 / 1824.0) * lm35;
  sicaklik = sicaklik_gerilim / 10.0;
 
Problemi anlayamadığımız için sıkıntı çıkarmaz diyemiyorum. İşte böyle kütüphanelerle çalışınce birçok belirsizlik ile karşılaşıyorsun. Belki de bu kütüphaneler arduino ile uyumlu olmaya çalışıyor ve 12 bit ADC den okuduğu veriyi 10 ADC ye göre ölçekliyor. O yüzden diyorum sana, boşver şu kütüphaneleri, donanım registerlerine doğrudan erişim yap :)
 
Problemi anlayamadığımız için sıkıntı çıkarmaz diyemiyorum. İşte böyle kütüphanelerle çalışınce birçok belirsizlik ile karşılaşıyorsun. Belki de bu kütüphaneler arduino ile uyumlu olmaya çalışıyor ve 12 bit ADC den okuduğu veriyi 10 ADC ye göre ölçekliyor. O yüzden diyorum sana, boşver şu kütüphaneleri, donanım registerlerine doğrudan erişim yap :)
ben biraz core dosyasını kurcalasam bulabilir miyim abi bu analogRead komutunun nasıl işlem görüdğünü
 
Problemi anlayamadığımız için sıkıntı çıkarmaz diyemiyorum. İşte böyle kütüphanelerle çalışınce birçok belirsizlik ile karşılaşıyorsun. Belki de bu kütüphaneler arduino ile uyumlu olmaya çalışıyor ve 12 bit ADC den okuduğu veriyi 10 ADC ye göre ölçekliyor. O yüzden diyorum sana, boşver şu kütüphaneleri, donanım registerlerine doğrudan erişim yap :)
Bak gene iş çıkarıyorsun başıma. Bitmeyecek bu proje. :katil2:

Bu donanım registerlerine erişme işini anlatan - öğreten bir Türk babayiğit var mı bildiğin?
Hatta Türk olmasada olur. Hindistanlıya da rağzıyım. Türkçe anlatsın yeter. :katil2:
 
Bak gene iş çıkarıyorsun başıma. Bitmeyecek bu proje. :katil2:

Bu donanım registerlerine erişme işini anlatan - öğreten bir Türk babayiğit var mı bildiğin?
Hatta Türk olmasada olur. Hindistanlıya da rağzıyım. Türkçe anlatsın yeter. :katil2:
Ben bildiğim 328p için bütün registerleri Great Scott videolarından öğrendim her yazdığı programa sıkıştırıyor.
 
Onun dışında bırak türkçe kaynağı ingilizcesi bile pek yok registerlerin ne olduğunu anlatan
 
Ben bildiğim 328p için bütün registerleri Great Scott videolarından öğrendim her yazdığı programa sıkıştırıyor.
Bir örnek link atabilir misin?
Ben şöyle bişey buldum. Bakim ne anlatıyor.
 
Evet gerçekten analogRead her zaman 0 - 1023 arası döndürür diyor.


Ama bir de analogReadResolution var. Bununla ADC bit sayısını değiştirebiliyorsun.

 
Ben bu adamın klon nano üretiminde çalıştığını düşünüyorum.
Her videosunda yeni nano.
Veya onun için 2 euro olduğu için ekmek almak yerine nano alıyor olabilir
 
Evet gerçekten analogRead her zaman 0 - 1023 arası döndürür diyor.


Ama bir de analogReadResolution var. Bununla ADC bit sayısını değiştirebiliyorsun.

Bir saatdir core dosyasını okuyorum analog çatısı altında adam birtek analogReadResolution bunu yazmış başka birşey yazmamış analog okumayla ilgili birde bunun parantez içine (int bits) yazmış bende boş boş bakıyorum bu ney diye
 
rp2040.png
 
Bir saatdir core dosyasını okuyorum analog çatısı altında adam birtek analogReadResolution bunu yazmış başka birşey yazmamış analog okumayla ilgili birde bunun parantez içine (int bits) yazmış bende boş boş bakıyorum bu ney diye
analogReadResolution diye bir fonksiyon oluşturmuş içine interger olarak oluşturduğu "bits" değişkeni ile veri gönderiyor işte.

analogReadResolution(1024);
Yazsa adc yi 1024 olarak ayarlatmış demektir.
Tabi fonksiyonu başka bir amaçla yazmadıysa.
 
analogReadResolution diye bir fonksiyon oluşturmuş içine interger olarak oluşturduğu "bits" değişkeni ile veri gönderiyor işte.

analogReadResolution(1024);
Yazsa adc yi 1024 olarak ayarlatmış demektir.
Tabi fonksiyonu başka bir amaçla yazmadıysa.

Bit sayısı olacak Gökhan. Yani 12.
 
Yalnız tabi sıcaklık ölçümü için 12 bite gerek yok. Onu normal 0 - 1024 ile halledersin. Voltaj ve akım ölçümü için 12 bit faydalı olur.
 
Bit sayısı olacak Gökhan. Yani 12.
Abi dur, beyin fena yanmış durumda benim.
1 saattir 8bit 1bayt ise 10 bit nasıl 1024 byte oluyor diye düşünüyorum. Vikiyi açtım ordanda anlamadım. Benim bu bit leri, baytları, hex leri, binary leri öğrenmem lazım. Çok çıkıyor karşıma ama kafamı karıştırmaktan başka işe yaramıyorlar.
 
Abi dur, beyin fena yanmış durumda benim.
1 saattir 8bit 1bayt ise 10 bit nasıl 1024 byte oluyor diye düşünüyorum. Vikiyi açtım ordanda anlamadım. Benim bu bit leri, baytları, hex leri, binary leri öğrenmem lazım. Çok çıkıyor karşıma ama kafamı karıştırmaktan başka işe yaramıyorlar.
Sayın @Gokrtl "bit" demek veri iletişiminde kullanılan binary verinin basamakları demek. Binary yani 1 ve 0 rakamlarından oluşan 2lik sayı sistemidir.
8bit yani 8 basamaklı bir verinin hafızada kapladığı alanın boyutu ise 1 bayt tutuyor...
Örneğin biz 10luk sayı sistemini kullanıyoruz. Bu sistemin her bir basamağı 0 ile 9 arasında değer alabiliyor. Yani her basamak 10 farklı değer alıyor. Böylece 2 basamaklı bir sayı ise 10 x 10 (0-99 arasında) 100 farklı değer alabiliyor...
2lik sayı sistemindeki bir sayı ise -her basamak 2 farklı değer alabildiğinden- basamak sayısının 2nin kuvveti olarak hesaplanan adette değer alabilir.
Bu nedenle 10 bit yani 10 basamaklı bir sayı 2^10 kadar farklı değer alabilir. Bu da 0-1023 arasında toplam 1024 farklı değer eder.12 bit ise 4096 farklı değer alabilir.
Örnek olarak:
2 bit yani basamaklı binary bir sayı da
00
01
10
11 olmak üzere 4 farklı şekilde olabilir...

3 bit olsa idi
000
001
010
011
100
101
110
111 bu şekilde 8 farklı sayı yazabilirdik ki bu da görüleceği üzere 2 üzeri 3e eşit olurdu.

 
Sayın @Gokrtl "bit" demek veri iletişiminde kullanılan binary verinin basamakları demek. Binary yani 1 ve 0 rakamlarından oluşan 2lik sayı sistemidir.
8bit yani 8 basamaklı bir verinin hafızada kapladığı alanın boyutu ise 1 bayt tutuyor...
Örneğin biz 10luk sayı sistemini kullanıyoruz. Bu sistemin her bir basamağı 0 ile 9 arasında değer alabiliyor. Yani her basamak 10 farklı değer alıyor. Böylece 2 basamaklı bir sayı ise 10 x 10 (0-99 arasında) 100 farklı değer alabiliyor...
2lik sayı sistemindeki bir sayı ise -her basamak 2 farklı değer alabildiğinden- basamak sayısının 2nin kuvveti olarak hesaplanan adette değer alabilir.
Bu nedenle 10 bit yani 10 basamaklı bir sayı 2^10 kadar farklı değer alabilir. Bu da 0-1023 arasında toplam 1024 farklı değer eder.12 bit ise 4096 farklı değer alabilir.
Örnek olarak:
2 bit yani basamaklı binary bir sayı da
00
01
10
11 olmak üzere 4 farklı şekilde olabilir...

3 bit olsa idi
000
001
010
011
100
101
110
111 bu şekilde 8 farklı sayı yazabilirdik ki bu da görüleceği üzere 2 üzeri 3e eşit olurdu.
Vallahi anladım :saril:
20220323_210134.jpg


Şimdi bu 1024 - 2048 - 4096 ne işimize yarıyor onu anlamaya geldi sıra.
 
Vallahi anladım :saril:
16306 eklentisine bak

Şimdi bu 1024 - 2048 - 4096 ne işimize yarıyor onu anlamaya geldi sıra.
3.3 volt azami voltaj var ölçebileceğimiz.
ADC bu voltajı ölçüm çözünürlüğü (resolution) kadar parçalar halinde ölçüyor. Yani 10bit ise 3.3voltu 1024 parçaya ayırıyor; 12bit ise 4096 parçaya... Yani bir ölçtüğü voltajı paydası ölçüm çözünürlüğüne eşit olan bir kesir olarak algılıyor.
Bu şöyle oluyor:
3.3 volt / 4096 = 0,000805664063 volt parçaları olarak
0 volt = 0/4096
(1 x 0,000805664063=) 0,000805664063 volt = 1/4096
(2 x 0,00161132813=) 0,00161132813 volt = 2/4096
.
..
...
(4096 x 0,000805664063=) 3.3 volt = 4096/4096
gibi...
Bu hesaplamanın ardından adc verisi olarak elimize dönen binary veri ise yukarıdaki kesirin pay kısmından elde edilmektedir...
1
2
3
.
..
4096 gibi.
Bunun da karşılığı
0 = 000000000000
1 = 000000000001
2 = 000000000010
3 = 000000000011
4 = 000000000100
.
..
4095 = 111111111111

Buradaki nüans, bu değerin 0 olması da gözetilmek suretiyle 0 dahil 4096 farklı değer taşımak üzere azami 4095e kadar değer içermesidir...




 

Çevrimiçi personel

Forum istatistikleri

Konular
6,952
Mesajlar
118,759
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top