Teploměr s DS18b20 a LED display

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
Dumitru
Příspěvky: 254
Registrován: 11 pro 2015, 00:00
Bydliště: Slovensko,Bratislava
Kontaktovat uživatele:

#16 Příspěvek od Dumitru »

buchar píše:Valdano: Přepsal jsem na setNumberF a funguje to. A v tom ostatním máte asi pravdu. Zakomentoval jsem čtení z čida, vepsal celé číslo místo tempC a displej nebliká. Takže budu muset přepsat celý kód. Díky za vaše znalosti.


A teda z novým kódom už ukazuje teplotu správnu nie posunutú o dva stupne ?
petrfilipi
Příspěvky: 2901
Registrován: 13 zář 2005, 00:00

#17 Příspěvek od petrfilipi »

Pokud bys nepotřeboval takovou přesnost měření, dostal bys data z čidla rychleji. Při přesností 0,0625°C (12 bitů) trvá převod 750 ms, při přesností 0,5°C (9 bitů) trvá převod 94 ms. Přesnosti pro 10 a 11 bitů jakožto i časy převodu jsou popsány v datasheetu.

PF
Naposledy upravil(a) petrfilipi dne 19 dub 2024, 22:04, celkem upraveno 1 x.
Uživatelský avatar
Valdano
Příspěvky: 3117
Registrován: 01 led 2023, 00:00
Bydliště: Česká Lípa

#18 Příspěvek od Valdano »

Mrkněte ještě na úpravu níže. Ta by měla odstranit i to blikání. Dá se totiž nastavit neblokující provádění konverze dat teplotního senzoru viz níže v upraveném příkladu.

Kód: Vybrat vše

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensor(&oneWire);

#include "SevSeg.h"
SevSeg sevseg;

const unsigned long eventInterval = 1000;
unsigned long previousTime = 0;
unsigned long currentTime = 0;
byte numDigits = 4;
byte digitPins[] = {A5, A4, A3, A2};
byte segmentPins[] = {2, 13, 6, 4, 3, 12, 7, 5};
bool resistorsOnSegments = true;
byte hardwareConfig = COMMON_CATHODE;
bool updateWithDelays = true;
bool leadingZeros = false;
bool disableDecPoint = false;
bool cekaniNaKonverzi = false;
float tempC;

void setup()
{
  Serial.begin(9600);
  sensor.begin();
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins,
                      resistorsOnSegments, updateWithDelays, leadingZeros,
                      disableDecPoint);
  sevseg.setBrightness(90);
  sensor.setResolution(11);
}

void loop()
{
  currentTime = millis();

  if (!cekaniNaKonverzi && (currentTime - previousTime) >= eventInterval) {
    previousTime = currentTime;
    // nastavit neblokující volání
    sensor.setWaitForConversion(false);
    // následující volání skončí hned bez čekání a konverze bude probíhat na pozadí
    // na dokončení konverze se bude čekat bez blokování viz níže
    sensor.requestTemperatures();
    // nastavit příznak neblokujícího čekání na dokončení konverze dat senzoru na pozadí
    cekaniNaKonverzi = true;
  };

  if (cekaniNaKonverzi) {
    // neblokující dotaz zda konverze dat na pozadí již byla dokončena
    if (sensor.isConversionComplete()) {
      // konverze dat dokončena
      cekaniNaKonverzi = false;
      // teprve nyní načíst a zobrazit data
      // a to by již mělo být rychlé bez bliknutí
      tempC = sensor.getTempCByIndex(0);
      Serial.println(tempC);
      sevseg.setNumberF(tempC, 1);
    };
  };

  sevseg.refreshDisplay();
}
Naposledy upravil(a) Valdano dne 19 dub 2024, 22:17, celkem upraveno 1 x.
Uživatelský avatar
buchar
Příspěvky: 173
Registrován: 28 říj 2007, 00:00
Bydliště: Násedlovice

#19 Příspěvek od buchar »

Valdano, hned zítra vyzkouším vaši úpravu kódu. Dnes už nemám prostor. Zatím moc díky a ostatním taky. Zítra dám vědět jak to bude chodit.
Uživatelský avatar
bum
Příspěvky: 290
Registrován: 04 zář 2011, 00:00
Kontaktovat uživatele:

#20 Příspěvek od bum »

"Dumitru" samotný řadič je DPS s osazeným PIC který se osadí na piny znakového LCD displeje. Více je na www.snailshop.cz.
Uživatelský avatar
Dumitru
Příspěvky: 254
Registrován: 11 pro 2015, 00:00
Bydliště: Slovensko,Bratislava
Kontaktovat uživatele:

#21 Příspěvek od Dumitru »

bum píše:"Dumitru" samotný řadič je DPS s osazeným PIC který se osadí na piny znakového LCD displeje. Více je na www.snailshop.cz.


Ďakujem :) za informáciu ale ostanem pri 74HC595.
Uživatelský avatar
Cowley
Příspěvky: 3557
Registrován: 04 úno 2005, 00:00

#22 Příspěvek od Cowley »

Dumitru: nebo 4094 či 8574 :)
Uživatelský avatar
buchar
Příspěvky: 173
Registrován: 28 říj 2007, 00:00
Bydliště: Násedlovice

#23 Příspěvek od buchar »

Dobré ráno všem.
Valdano, vyzkoušel jsem tvoji úpravu kódu. Bohužel už nevleze na ATmegu8 což je mi líto, že je nemůžu s tvým kódem použít, ale musel jsem použít ATmegu168.
Při spuštění displej po 1s mrkne.
petrfilipi
Příspěvky: 2901
Registrován: 13 zář 2005, 00:00

#24 Příspěvek od petrfilipi »

A musíš tu teplotu měřit opravdu v každém cyklu programu? Nestačilo by ji měřit v každém x-tém cyklu, kde x= 10, 20, 200, ...?

PF
Uživatelský avatar
buchar
Příspěvky: 173
Registrován: 28 říj 2007, 00:00
Bydliště: Násedlovice

#25 Příspěvek od buchar »

Já myslím, že nemusím. Nepotřebuji znát teplotu každou vteřinu.
Uživatelský avatar
Dumitru
Příspěvky: 254
Registrován: 11 pro 2015, 00:00
Bydliště: Slovensko,Bratislava
Kontaktovat uživatele:

#26 Příspěvek od Dumitru »

buchar píše:Dobré ráno všem.
Valdano, vyzkoušel jsem tvoji úpravu kódu. Bohužel už nevleze na ATmegu8 což je mi líto, že je nemůžu s tvým kódem použít, ale musel jsem použít ATmegu168.
Při spuštění displej po 1s mrkne.


Za prvé nedostať meranie teploty cez 1wire a zobrazenie teploty na
7-tovku do 8kb je úplná šialenosť attiny13 by to zvládla.

Za druhé už vieme že posunutie o 2 stupne je chýba kódu ?
Uživatelský avatar
buchar
Příspěvky: 173
Registrován: 28 říj 2007, 00:00
Bydliště: Násedlovice

#27 Příspěvek od buchar »

Dumitru, myslíš, že je to chyba kódu?
Dokázal by jsi tu chybu najít?
Uživatelský avatar
Dumitru
Příspěvky: 254
Registrován: 11 pro 2015, 00:00
Bydliště: Slovensko,Bratislava
Kontaktovat uživatele:

#28 Příspěvek od Dumitru »

buchar píše:Dumitru, myslíš, že je to chyba kódu?
Dokázal by jsi tu chybu najít?


Ja neviem zatiaľ či je to v kóde ale ty už máš aj kód z arduina ten síce bliká ale meria ja som myslel že si to porovnaš či teplota je v poriadku alebo tiež je posunutá od toho sa môžeme ďalej odraziť .

Ak dva rôzne kódy posúvajú teplotu tak to v kóde nebude

Ak kód z arduino ukazuje dobre tak nájdeme chybu v C kóde


Treba len zistiť kde je presne problém SW či HW
Uživatelský avatar
buchar
Příspěvky: 173
Registrován: 28 říj 2007, 00:00
Bydliště: Násedlovice

#29 Příspěvek od buchar »

Tento nový kód od Valdano ukazuje přesně (+-0,5°C). Takže asi chyba v původním kódu?
Uživatelský avatar
Dumitru
Příspěvky: 254
Registrován: 11 pro 2015, 00:00
Bydliště: Slovensko,Bratislava
Kontaktovat uživatele:

#30 Příspěvek od Dumitru »

buchar píše:Tento nový kód od Valdano ukazuje přesně (+-0,5°C). Takže asi chyba v původním kódu?


Ak všetky 3 teplomery bez žiadneho zásahu do pcb len prepalenim nového kódu z arduino ukazujú správne tak chýba bude v kóde.
Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“