подключить DS18b20 к LCD5110

Тема в разделе "Arduino & Shields", создана пользователем MESS, 31 дек 2015.

  1. MESS

    MESS Гик

    По неопытности считал что освоил дисплей LCD5110. Однако с моим любимым DS18b20 не желает работать. скетч компилируется, ошибки не выдает. но я вижу (по светодиодам), что никакого обмена по шине 1-Wire не происходит. Помогите пожалуйста разобраться :
    Код (C++):
    // пытаюсь  на  NANO  подключить DS18b20 к  LCD5110

    #include <OneWire.h>

    #include <DallasTemperature.h>
    #include <LCD5110_Basic.h>

    LCD5110 myGLCD(3,4,5,7,6);
    OneWire  ds(10);

    extern uint8_t MediumNumbers[];


    void setup()
    {
      myGLCD.InitLCD();
    }

    void loop(){

      byte data[12];
      byte addr[8];

      if (!ds.search(addr)) {
        Serial.println("No more addresses.");
        return;
      }
       ds.reset_search(); //      должен искать,   не мигают  Rx, Tx????   или  не так считаю?
      if (OneWire::crc8(addr, 7) != addr[7]) {
          Serial.println("CRC is not valid!");
          delay(1000);
          return;
      }
      //это здесь не нужно? у меня 3 конца
              //write(byte, 1)   //Передает информационный байт на устройство, работающее в паразитном режиме питания

             //read()//Считывает информационный байт с устройства

             //crc8(dataArray, length)//Вычисляет CRC код байтов из массива dataArray, длиной length

      //ds.reset();   // сброс шины перед связью с датчиком
      ds.select(addr);   //выбор устройства после сброса, передается ROM Код устройства.
     
      ds.write(0x44);   //0x44  провести измерение температуры и записать данные в оперативную память
      delay(1000);

      ds.reset();  // должен искать, но  ведь не мигают  Rx, Tx
      ds.select(addr);
      ds.write(0xBE);    //   0xBE – считать последовательно 9 байт оперативной памяти  0xB4 – вернет тип питания (0 – паразитное, 1 – внешнее)

      for (int i = 0; i < 9; i++) {      
        data[i] = ds.read();
      }

      int raw = (data[1] << 8) | data[0];

      // Переводим в температуру

      if (data[7] == 0x10) raw = (raw & 0xFFF0) + 12 - data[6];
      float temperature = raw / 16.0;
        myGLCD.setFont(MediumNumbers);
        myGLCD.printNumF(temperature, 2, CENTER, 0);
        delay(100);
     
      myGLCD.clrScr();
    }
     
     
    Последнее редактирование: 31 дек 2015
  2. MESS

    MESS Гик

    Тесты из загруженных библиотек выполняются нормально. Однако подключение шины на 2 пин не проходит. Только начиная с 8 и выше.
     
  3. так в коде 10 нога указана
     
  4. MESS

    MESS Гик

    Это описка. Подключение шины соответствует скетчу. Перебирал, думал пины не работают, пробовал на других НАНО и УНО. компилируется без вопросов ... и не пишет.
     
  5. MESS

    MESS Гик

    Все получилось! не указал шрифт
    Вот работающий код
    Код (C++):
     Работает!

    #include <OneWire.h>
    //#include <DallasTemperature.h>
    #include <LCD5110_Basic.h>
    LCD5110 myGLCD(3,4,5,6,7);
    OneWire  ds(8);
    extern uint8_t BigNumbers[];  //
    extern uint8_t SmallFont[];  //

    void setup()
    {
      myGLCD.InitLCD();
    }

    void loop(){

      byte data[12];
      byte addr[8];
      if (!ds.search(addr)) {
        Serial.println("No more addresses.");
        return;
      }
        ds.reset_search(); //поиск нового устр в сети

    ds.reset();   // сброс шины перед связью с датчиком  
      ds.select(addr);    
     
      ds.write(0x44);  
      delay(10);

      ds.reset();
      ds.select(addr);
      ds.write(0xBE);    //   0xBE – считать последовательно 9 байт оперативной памяти    
     
      for (int i = 0; i < 9; i++) {        
        data[i] = ds.read();
      }
      int raw = (data[1] << 8) | data[0];
    //Переводим в температуру

      if (data[7] == 0x10) raw = (raw & 0xFFF0) + 12 - data[6];
      float temperature = raw / 16.0;
        myGLCD.setFont(BigNumbers);
        myGLCD.printNumF(temperature, 2, CENTER, 0);
     
      myGLCD.clrScr();
    }
     
     
    Последнее редактирование: 11 янв 2016