Stránka 2 z 5

Napsal: 19 dub 2024, 22:03
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 ?

Napsal: 19 dub 2024, 22:04
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

Napsal: 19 dub 2024, 22:04
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();
}

Napsal: 19 dub 2024, 22:16
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.

Napsal: 19 dub 2024, 22:27
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.

Napsal: 19 dub 2024, 22:42
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.

Napsal: 20 dub 2024, 06:56
od Cowley
Dumitru: nebo 4094 či 8574 :)

Napsal: 20 dub 2024, 08:27
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.

Napsal: 20 dub 2024, 10:20
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

Napsal: 20 dub 2024, 10:28
od buchar
Já myslím, že nemusím. Nepotřebuji znát teplotu každou vteřinu.

Napsal: 20 dub 2024, 11:46
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 ?

Napsal: 20 dub 2024, 12:40
od buchar
Dumitru, myslíš, že je to chyba kódu?
Dokázal by jsi tu chybu najít?

Napsal: 20 dub 2024, 13:24
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

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

Napsal: 20 dub 2024, 14:04
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.