Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Teploměr s DS18b20 a LED display
Jdi na stránku Předchozí  1, 2, 3, 4, 5  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další)
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Valdano



Založen: Jan 01, 2023
Příspěvky: 1708
Bydliště: Česká Lípa

PříspěvekZaslal: ne duben 21 2024, 15:55    Předmět: Citovat

Tak ještě zkuste hodnotu updateWithDelays změnit na false viz úprava níže a pokud ani to nepomůže tak už to zřejmě lepší nebude a v takovém případě si hodnotu eventInterval zvyšte na 5000 nebo 10000 a načítání bude probíhat jen jednou za 5 nebo 10 sekund i s tím bliknutím. Případně ještě můžete zkusit snížit rozlišení sensor.setResolution(9) jestli to bude mít nějaký vliv na to mrkání.

Pokud jde o ty odchylky teploty o 2°C. Nejprve jste psal, že starý teploměr co jste dělal cca před dvěma lety ukazuje teplotu o 2°C vyšší a pak jste psal, že s ATmega8 ten příklad ukazuje teplotu o 2°C nižší zatímco s ATmega168 ukazuje správně. To jsou tedy tři varianty a každá z nich zobrazuje teplotu jinak. U tohoto vážně nevím v čem je problém.

kód:
#include <OneWire.h>
#include <DallasTemperature.h>

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

#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 = false;
bool leadingZeros = false;
bool disableDecPoint = false;
bool cekaniNaKonverzi = false;
float tempC;

void setup()
{
  sensor.begin();
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins,
               resistorsOnSegments, updateWithDelays, leadingZeros,
               disableDecPoint);
  sevseg.setBrightness(90);
  sensor.setResolution(9);
  sensor.getAddress(deviceAddress, 0);
}

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
      tempC = sensor.getTempC(deviceAddress);
      sevseg.setNumberF(tempC, 1);
    };
  };

  sevseg.refreshDisplay();
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
buchar



Založen: Oct 28, 2007
Příspěvky: 88
Bydliště: Násedlovice

PříspěvekZaslal: ne duben 21 2024, 16:17    Předmět: Citovat

Tak to asi lepší nebude. Chová se to stejně jestli je v updateWithDelays true nebo false.
A co se týká toho dvou stupňového rozdílu mezi A8 a A168, nebylo to myšleno tak ,že A168 ukazuje správnou teplotu a A8 špatnou, o 2°C nižší. Je to jen rozdíl v zobrazené teplotě na displeji při stejném kódu, který byl nahrán do A8 a A168. Který ukazuje správnou teplotu, to teprve zjistím. Teď jsme řešili hlavně to mrkání. Ale jak se ukazuje, nemá to řešení.
Přesto vám Valdano moc děkuji za váš čas a snahu vyřešit můj problém.
PS: Chtěl bych mít vaše znalosti.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Valdano



Založen: Jan 01, 2023
Příspěvky: 1708
Bydliště: Česká Lípa

PříspěvekZaslal: ne duben 21 2024, 16:33    Předmět: Citovat

buchar napsal(a):
Tak to asi lepší nebude. Chová se to stejně jestli je v updateWithDelays true nebo false.

A mrká to i když se použije sensor.setResolution(9) namísto sensor.setResolution(11)?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
buchar



Založen: Oct 28, 2007
Příspěvky: 88
Bydliště: Násedlovice

PříspěvekZaslal: ne duben 21 2024, 16:40    Předmět: Citovat

Ano mrká to i při sensor.setResolution(9) i (10) úplně stejně. Ale je i zajímavé, že když jsem nedávno dělal tento teploměr https://www.youtube.com/watch?v=ZvlMptNAw9A&list=PL86H7PGdidG1YxqHJvlHy_KH0ELEokHL7&index=12 a nahrál jsem kód z počítače, tak mi displej blikal a když jsem nahrál kód z notebooku tak už jen jemně mrkal jako to mrká teď. Autorce to neblikalo a použil jsem stejné verze knihoven jako ona. Asi je něco mezi nebem a zemí.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Cowley



Založen: Feb 04, 2005
Příspěvky: 3295

PříspěvekZaslal: ne duben 21 2024, 16:58    Předmět: Citovat

Jelikož si displej obsluhuje TM1637 sám, bude to s ním rozhodně lepší než multiplex přímo z Arduina.
EDIT: mezitím Valdano smazal odkaz na 4-místný displej s řadičem TM1637.


Naposledy upravil Cowley dne ne duben 21 2024, 17:00, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
buchar



Založen: Oct 28, 2007
Příspěvky: 88
Bydliště: Násedlovice

PříspěvekZaslal: ne duben 21 2024, 16:58    Předmět: Citovat

Tento displej jsem už použil. Dělal jsem teď kukačky na ESP32 s časem z NTP. S SD karty vložené do DFPlayeru to kuká celou hodinu a gong oznamuje čtvrthodiny.
EDIT: Ano všimnul jsem si smazání.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Valdano



Založen: Jan 01, 2023
Příspěvky: 1708
Bydliště: Česká Lípa

PříspěvekZaslal: ne duben 21 2024, 17:05    Předmět: Citovat

Omlouvám se. Ten displej co jsem smáznul byl pro hodiny. Pro hodnoty jako je teplota je vhodnější spíš tento 4místný segmentový displej I2C a tady je k tomu příklad. S tím by to mrkat nemělo.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
buchar



Založen: Oct 28, 2007
Příspěvky: 88
Bydliště: Násedlovice

PříspěvekZaslal: ne duben 21 2024, 17:08    Předmět: Citovat

To je v pohodě, vím co jste tím chtěl říct. Možná ho vyzkouším.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Celeron



Založen: Apr 02, 2011
Příspěvky: 17796
Bydliště: Nový Bydžov

PříspěvekZaslal: ne duben 21 2024, 17:22    Předmět: Citovat

Asi by ti pomohlo dělat ovládání displeje v přerušení od časovače. Já měl podobnej problém s piezopískačem, když jsem ho ovládal ve smyčce loop, tak cvrdlikal. Převedení na přerušení to vyřešilo.
_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
buchar



Založen: Oct 28, 2007
Příspěvky: 88
Bydliště: Násedlovice

PříspěvekZaslal: ne duben 21 2024, 17:29    Předmět: Citovat

Díky za typ Celeron, ale já nejsem zběhlý v programování. Proto jsem tady žádal o pomoc.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Valdano



Založen: Jan 01, 2023
Příspěvky: 1708
Bydliště: Česká Lípa

PříspěvekZaslal: ne duben 21 2024, 17:40    Předmět: Citovat

Ani to nedoporučuji, protože ta knihovna SevSeg není na použití s přerušením vůbec stavěná. Je o tom zmínka tady. Psát kvůli tomu vlastní knihovnu je zbytečné když lze koupit celkem levně ten I2C displej, který to řeší.

Naposledy upravil Valdano dne ne duben 21 2024, 17:43, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 17796
Bydliště: Nový Bydžov

PříspěvekZaslal: ne duben 21 2024, 17:42    Předmět: Citovat

Valdano napsal(a):
Ani to nedoporučuji, protože ta knihovna SevSeg není na použití s přerušením vůbec stavěná. Je o tom zmínka tady.

Na co knihovna na tak jednoduchou věc jako je změna stavu portů? Rolling Eyes

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
buchar



Založen: Oct 28, 2007
Příspěvky: 88
Bydliště: Násedlovice

PříspěvekZaslal: ne duben 21 2024, 17:46    Předmět: Citovat

Takže nedoporučujete knihovnu "SevSeg" na tyto konstrukce vůbec používat. Takže budu muset poslepovat nějaký jiný kód pro moje teploměry.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Valdano



Založen: Jan 01, 2023
Příspěvky: 1708
Bydliště: Česká Lípa

PříspěvekZaslal: ne duben 21 2024, 17:48    Předmět: Citovat

Celeron napsal(a):
Na co knihovna na tak jednoduchou věc jako je změna stavu portů? Rolling Eyes

SevSeg nemůže použít s přerušením viz už uvedený odkaz a bez toho by si musel napsat vlastní obsluhu těch segmentů, ale klidně sem šoupněte kód, který to vyřeší a je hotovo. Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Valdano



Založen: Jan 01, 2023
Příspěvky: 1708
Bydliště: Česká Lípa

PříspěvekZaslal: ne duben 21 2024, 17:52    Předmět: Citovat

buchar napsal(a):
Takže nedoporučujete knihovnu "SevSeg" na tyto konstrukce vůbec používat. Takže budu muset poslepovat nějaký jiný kód pro moje teploměry.

Dle mého názoru bude řešení s přerušením problematické a já osobně bych do toho nešel. Pokud nechcete číst data tak často a mrknutí třeba jednou za 5 nebo 10s vám nebude vadit tak to neřešte a "SevSeg" vám bude stačit s tím, že prostě jen natáhnete interval toho čtení teploty a občasné mrknutí zkrátka pominete. Pokud se chcete toho mrknutí zbavit jděte do toho displeje s I2C.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další) Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3, 4, 5  Další
Strana 4 z 5

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.16 sekund