Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: Mucit23 - 08 Ekim 2018, 00:16:57

Başlık: MAX6675 Okuma Sorunu
Gönderen: Mucit23 - 08 Ekim 2018, 00:16:57
Selamlar

STM32F103 çipim ile Şu MAX6675 çipini okumaya çalışıyorum. Akşamdan beri bir türlü doğru düzgün okuyamadım.
Datasheette Data Telegramı verilmiş. Bu referansa göre birşeyler yapmaya çalışıyorum.

(https://i.postimg.cc/6pz1DXSj/Ekran_3.jpg)

Bu yapıya göre okumak için şöyle bir kod parçası yazdım
uint16_t MAX6675_ReadReg(void)
{
  int i=0;
uint16_t temp=0;

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
  HAL_Delay(1);

for(i=0;i<16;i++)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_SET);
     HAL_Delay(1);
     HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_RESET);
     HAL_Delay(1);

if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14)) temp |= (uint8_t)1<<i;
}

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);

temp=temp>>3;

return temp;
}

Bu kodu çalıştırıp CS, SCK ve DO pinlerini Logic analyser ile izliyorum. STM32'den sabit değer okuyorum sürekli. Logic analyser ile data hattını izlediğimde Termocupl'ı ısıtmama rağmen gelen dataların değişmediğini görüyorum.

Sonradan çip bozukmu değilmi diye kontrol etmek için Arduinoya bağladım. Onda çalıştı. Aradaki iletişimi lojik analyser ile incelediğimde veriyi 16 bit olarak okumak yerine 8 bit 8 bit olarak iki parça halinde okumuş. Ve 2 Byte arası CS pini anlık olarak lojik 1 olup tekrar lojik 0 oluyor. Anlayamadım dolayısıyla. O şekilde denedim yine çalıştıramadım.

Fikri olan varmı?
 
Başlık: Ynt: MAX6675 Okuma Sorunu
Gönderen: baran123 - 08 Ekim 2018, 00:26:48
Ben direk SPI ile okudum verileri.

CS 0 yap.
2 Byte Oku
CS 1 yap.

Bir arduino örneği var oldukça basit.
double MAX6675::readCelsius(void) {

  uint16_t v;

  digitalWrite(cs, LOW);
  _delay_ms(1);

  v = spiread();
  v <<= 8;
  v |= spiread();

  digitalWrite(cs, HIGH);

  if (v & 0x4) {
    // uh oh, no thermocouple attached!
    return NAN;
    //return -100;
  }

  v >>= 3;

  return v*0.25;
}
Başlık: Ynt: MAX6675 Okuma Sorunu
Gönderen: baran123 - 08 Ekim 2018, 00:29:02
Hatta SPI Read kısmıda varmış.
Kaynak : https://github.com/adafruit/MAX6675-library/blob/master/max6675.cpp#L42
byte MAX6675::spiread(void) {
  int i;
  byte d = 0;

  for (i=7; i>=0; i--)
  {
    digitalWrite(sclk, LOW);
    _delay_ms(1);
    if (digitalRead(miso)) {
      //set the bit to 0 no matter what
      d |= (1 << i);
    }

    digitalWrite(sclk, HIGH);
    _delay_ms(1);
  }

  return d;
}
Başlık: Ynt: MAX6675 Okuma Sorunu
Gönderen: RaMu - 08 Ekim 2018, 00:45:22
Datasheet te conversion time a bak, 170~220 ms.
220ms den daha sık aralıklarla okuma yapılırsa
entegre sıcaklık okuyup dönüştürme işlemini yapamıyor,
sonuç olarak en son hangi değeri bulmuşsa onu gönderiyor,
sıcaklık dönüştürme işleminede kaldığı yerden devam etmiyor
sil baştan yeniden dönüşüm yapmaya başlıyor.

Ne diyeceğimi bilemediğim bir saçmalık entegrenin bu tasarımı.
Başlık: Ynt: MAX6675 Okuma Sorunu
Gönderen: Mucit23 - 08 Ekim 2018, 01:07:10
Arduinodaki Kodu kopyalamayı deneyeceğim.  Bu şekilde çalıştırırım umarım.

Bunun dışında Bu sensörün Çözünürlüğü Bana biraz düşük geliyor 0.25C Çözünülükte okuma yapılıyor. 0-200C için Termocupl kullanmak yerine Min 0.1C çözünürlükte ölçüm alabilmek için RTD veya PT100 gibi Termistörler kullanmak daha mantıklı.  Bu termistörler için MAX6675 gibi Hazır sıcaklık dönüşümü yapan bir çip varmıdır?

DS18B20 gibi sıcaklık sensörleri Endüstriyel ortamlarda kullanıma uygun değiller.
Bana bayonet tipi hassas ölçüm yapabileceğim bir sıcaklık sensörü lazım.
Başlık: Ynt: MAX6675 Okuma Sorunu
Gönderen: Mucit23 - 08 Ekim 2018, 01:16:40
Alıntı yapılan: RaMu - 08 Ekim 2018, 00:45:22Datasheet te conversion time a bak, 170~220 ms.
220ms den daha sık aralıklarla okuma yapılırsa
entegre sıcaklık okuyup dönüştürme işlemini yapamıyor,
sonuç olarak en son hangi değeri bulmuşsa onu gönderiyor,
sıcaklık dönüştürme işleminede kaldığı yerden devam etmiyor
sil baştan yeniden dönüşüm yapmaya başlıyor.

Ne diyeceğimi bilemediğim bir saçmalık entegrenin bu tasarımı.

Conversiyon TimeDan dolayı sorun yaşamışım. İki okuma arası süreyi 300ms yaptım düzeldi.

Fakat Hassas endüstriyel ısı ölçümü hakkında yine sorum güncel.

Ekleme: RTD için Yine Maxim'in MAX31865 diye bir Çipi varmış.
Başlık: Ynt: MAX6675 Okuma Sorunu
Gönderen: Murat Mert - 08 Ekim 2018, 20:35:25
Alıntı yapılan: Mucit23 - 08 Ekim 2018, 01:16:40Conversiyon TimeDan dolayı sorun yaşamışım. İki okuma arası süreyi 300ms yaptım düzeldi.

Fakat Hassas endüstriyel ısı ölçümü hakkında yine sorum güncel.

Ekleme: RTD için Yine Maxim'in MAX31865 diye bir Çipi varmış.

Ferhat pahalı, pahalı, pahalı çok pahalı. mcp3421, mcp3553 ile kendin yap.
Başlık: Ynt: MAX6675 Okuma Sorunu
Gönderen: Mucit23 - 08 Ekim 2018, 21:41:39
Bakayım bi abi. Varmı bi örnek uygulama?