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í 

Arduino Nano, DS18B20 a OLED - prosím o radu (vyřešeno)
Jdi na stránku 1, 2  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
JirkaZ



Založen: Feb 26, 2021
Příspěvky: 3010

PříspěvekZaslal: st červenec 26 2023, 18:41    Předmět: Arduino Nano, DS18B20 a OLED - prosím o radu (vyřešeno) Citovat

Našel jsem a zkouším dvě konstrukce s Arduinem pro DS18B20 a OLED display s řadičem SSD1306. Tady je první, zde je prakticky identická druhá (pouze s I2C adresou 0x3D se po zapnutí vůbec nic neděje, po opravě na 0x3C to cosi dělá).

No a v tom "cosi" je právě ten problém... Oba zdrojáky se přitom chovají stejně (koneckonců jeden je v podstatě kopie druhého). Po resetu se v závislosti na verzi programu po chvíli na displayi zobrazí text

HOW2ELE
CTRONICS

(právě takto - zalomený na dva řádky, velké písmo), popř.

ARDUINO + DS18B20
SSD1306 OLED

(opět na dvou řádcích pod sebou, malé písmo). No a to je všechno, dál se neděje nic... Tento problém taky kdosi popisuje v komentářích u první konstrukce.

DS18B20 napájím z pinu 3V3 Arduino Nano (je to klon - napětí stabilizuje CH340G), předpokládám přitom, že vstup A0 (PC0/ADC0 pro ATmega328P) je 3V kompatibilní. I kdyby ale nebyl (a tedy se korektně nečetl stav DS18B20), tak by měl program hlásit chybu, jak je psáno na příslušném místě zdrojáku.

Mohl by někdo zkušeným okem kouknout na ten zdroják a tipnout, kde by mohla být chyba?

Dodávám, že HW je v pořádku, provozuju na té sestavě program 2,4GHz scanner (alternativně zde) a vše normálně funguje (jen je k Arduinu Nano místo DS18B20 odpovídajícím způsobem připojený TRx nRF24L01).

Díky.

_________________
Kdo chce, hledá způsob;
kdo ne - hledá důvod.

Ze dvou možností často volím tu třetí.


Naposledy upravil JirkaZ dne čt červenec 27 2023, 21:08, celkově upraveno 2 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Valdano



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

PříspěvekZaslal: st červenec 26 2023, 19:43    Předmět: Citovat

Myslím, že to bude obdobný problém s nedostatkem paměti v Arduino NANO, který popisuji v jiném tématu viz tento odkaz (i tam šlo o použití OLED displeje). Knihovny pro Arduino k obsluze OLED displejů alokují paměť dynamicky, takže se spotřeba paměti neprojeví při výpisu v rámci překladu programu, ale projeví se to až za běhu programu v Arduinu, a to může za určitých okolností, které zhruba popisuji v tom tématu, způsobit přetečení části paměti používané pro zásobník do části paměti používané pro haldu. Důsledkem je pak obvykle havárie/zatuhnutí programu běžícího v Arduinu. Zkuste si tam to měření spotřebované paměti jak to v tom tématu popisuji, ale je možné, že to zatuhne ještě dříve než se to měření nějak projeví.

Případně zkuste z toho programu vyseparovat obsluhu OLED displeje a veškeré výpisy směrujte na sériový port jako při ladění. Tím by se měla výrazně snížit spotřeba paměti programu. Bez OLED to pravděpodobně bude fungovat bez problému. Bohužel někteří autoři podobných návodů si neuvědomují jak jsou knihovny pro obsluhu OLED paměťově náročné a pak v případě použití Arduina s malou pamětí jako je právě NANO stačí jen něco málo navíc doplnit a je problém.

Pokud použijete Arduino NANO Every, které má 3 krát více paměti než obyčejné Arduino Nano tak by to mělo tento problém rovněž vyřešit. Ostatně to také i udělal Celeron v tom tématu.


Naposledy upravil Valdano dne st červenec 26 2023, 20:03, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
asdf



Založen: Oct 06, 2022
Příspěvky: 318

PříspěvekZaslal: st červenec 26 2023, 20:01    Předmět: Citovat

Možná bych zkusil v souboru Adafruit_SSD1306.h na řádce 28-30 to udělat takhle:
kód:
#define SSD1306_128_64 ///< DEPRECTAED: old way to specify 128x64 screen
//#define SSD1306_128_32 ///< DEPRECATED: old way to specify 128x32 screen
//#define SSD1306_96_16  ///< DEPRECATED: old way to specify 96x16 screen
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
JirkaZ



Založen: Feb 26, 2021
Příspěvky: 3010

PříspěvekZaslal: st červenec 26 2023, 20:34    Předmět: Citovat

Tak jsem věc vyřešil, sice "dirty workaround" způsobem, ale prostě to funguje...

Pro mě coby sw téměř laika není jiná možnost a nechtěl jsem tomu věnovat moc času (ani zneužívat čas ostatních).

Tedy: našel jsem třetí konstrukci, lehce modifikoval některé věci v programu (jsou popsány v hlavičce zdrojového textu) a vše běhá jak z praku, viz foto bastlu v příloze.

V příloze je i onen modifikovaný zdroják, kdyby se někomu hodil.



20230726_211632_cropped_320x875_q97.jpg
 Komentář:
 Velikost:  263.89 kB
 Zobrazeno:  90 krát

20230726_211632_cropped_320x875_q97.jpg



Temp_meter_DS18B20_and_OLED_circuitsdiy_modified_and_tested.zip
 Komentář:

Stáhnout
 Soubor:  Temp_meter_DS18B20_and_OLED_circuitsdiy_modified_and_tested.zip
 Velikost:  1.24 kB
 Staženo:  91 krát


_________________
Kdo chce, hledá způsob;
kdo ne - hledá důvod.

Ze dvou možností často volím tu třetí.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



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

PříspěvekZaslal: čt červenec 27 2023, 0:11    Předmět: Citovat

Kolik ti to píše při kompilaci, že zůstává volný RAM pro proměnný? Jestli míň než cca 1200 byte, tak je to OLED klasika, stejnej problém jsem tu popisoval já.
_________________
Jirka

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



Založen: Feb 26, 2021
Příspěvky: 3010

PříspěvekZaslal: čt červenec 27 2023, 7:49    Předmět: Citovat

První odkaz:
kód:
Globální proměnné zabírají 433 bytů (21%)  dynamické paměti, 1615 bytů zůstává pro lokální proměnné. Maximum je 2048 bytů.


resp.

Druhý odkaz:
kód:
Globální proměnné zabírají 451 bytů (22%)  dynamické paměti, 1597 bytů zůstává pro lokální proměnné. Maximum je 2048 bytů.


Ale jak píšu výše, ten třetí projekt to vyřešil.

_________________
Kdo chce, hledá způsob;
kdo ne - hledá důvod.

Ze dvou možností často volím tu třetí.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
asdf



Založen: Oct 06, 2022
Příspěvky: 318

PříspěvekZaslal: čt červenec 27 2023, 9:52    Předmět: Citovat

A nemůže to být tím, že ty první dva projekty používají starý konstruktor, který používá pro určení rozlišení ty konstanty v Adafruit_SSD1306.h na řádce 28-30? A tam je implicitně vybraný 128x32. Takže by mohlo pomoci změnit ty konstanty v Adafruit_SSD1306.h na řádce 28-30, nebo volat novější konstruktor, což by šlo okoukat z toho třetího projektu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
JirkaZ



Založen: Feb 26, 2021
Příspěvky: 3010

PříspěvekZaslal: čt červenec 27 2023, 13:49    Předmět: Citovat

asdf: aha....sice nevím, co je konstruktor (tedy ani po přečtení toho textu), ale zkusit to můžu (pokud se k tomu dostanu)...

Nicméně můj laický dojem je, že i kdyby to špatně definovalo geometrii na displayi (který je 128x64, myslím ten můj kus), tak by se to snad nekouslo na uvítacím textu, ale "lítaly" by tam nějaké nesmysly.

Nebo ne?

P.S.: právě jsem došel k závěru, že jsem schopen jakžtakž chápat základy imperativního programování, a to ještě nejspíš v Basicu. Cokoliv vyššího (třeba objektového), ale na druhou stranu i nižšího, např. assembler nebo dokonce strojový kód, jdou zcela mimo mě.

Dlouho jsem neuměl pojmenovat, v čem se nějak alespoň minimálně orientuju a v čem vůbec. Takže teď už tomu můžu dát alespoň název Wink

_________________
Kdo chce, hledá způsob;
kdo ne - hledá důvod.

Ze dvou možností často volím tu třetí.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
asdf



Založen: Oct 06, 2022
Příspěvky: 318

PříspěvekZaslal: čt červenec 27 2023, 14:02    Předmět: Citovat

Já myslel, že by možná ta spodní půlka s teplotou nebyla vidět.

Konstruktor: Myslel jsem tuhle řádku:
kód:
Adafruit_SSD1306 display(OLED_RESET);
Tam se vyrábí proměnná display a volá se na ní konstruktor s jedním parametrem. To je jakási inicializace. V tom 3. projektu je tam těch parametrů víc.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
JirkaZ



Založen: Feb 26, 2021
Příspěvky: 3010

PříspěvekZaslal: čt červenec 27 2023, 21:07    Předmět: Citovat

Takže finální závěr:

asdf měl pravdu (díky!), pro můj OLED 128x64 stačilo upravit knihovnu Adafruit_SSD1306.h (v Linuxu je defaultně v adresáři /home/uzivatel/Arduino/libraries/Adafruit_SSD1306/) takto:

původní část:
kód:

// ONE of the following three lines must be #defined:
//#define SSD1306_128_64 ///< DEPRECTAED: old way to specify 128x64 screen
#define SSD1306_128_32 ///< DEPRECATED: old way to specify 128x32 screen
//#define SSD1306_96_16  ///< DEPRECATED: old way to specify 96x16 screen
// This establishes the screen dimensions in old Adafruit_SSD1306 sketches
// (NEW CODE SHOULD IGNORE THIS, USE THE CONSTRUCTORS THAT ACCEPT WIDTH
// AND HEIGHT ARGUMENTS).


změněná část:
kód:

// ONE of the following three lines must be #defined:
#define SSD1306_128_64 ///< DEPRECTAED: old way to specify 128x64 screen
//#define SSD1306_128_32 ///< DEPRECATED: old way to specify 128x32 screen
//#define SSD1306_96_16  ///< DEPRECATED: old way to specify 96x16 screen
// This establishes the screen dimensions in old Adafruit_SSD1306 sketches
// (NEW CODE SHOULD IGNORE THIS, USE THE CONSTRUCTORS THAT ACCEPT WIDTH
// AND HEIGHT ARGUMENTS).


Po novém překladu a nahrání do Arduino Nano už fungují všechny výše uvedené verze programů.

_________________
Kdo chce, hledá způsob;
kdo ne - hledá důvod.

Ze dvou možností často volím tu třetí.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pocitujlasku



Založen: Dec 12, 2005
Příspěvky: 2384
Bydliště: SR, Poprad

PříspěvekZaslal: čt červenec 27 2023, 22:25    Předmět: Citovat

pozor na to, lebo po aktualizacii kniznice sa ti to prepise. Navyse je to deprectaed - cize tato moznost moze coskoro zmiznut.
Skus priamo v projekte pouzit to, co je v prikladoch

v prvych priklade pouzi namiesto
kód:
Adafruit_SSD1306 display(OLED_RESET);

nieco taketo a malo by to fungovat
kód:

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET        4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
...
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

_________________
No vidis, a tak si sa bal
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
JirkaZ



Založen: Feb 26, 2021
Příspěvky: 3010

PříspěvekZaslal: pá červenec 28 2023, 9:34    Předmět: Citovat

1) jo, to je mi jasné, že s aktualizací knihovny se to přepíše. Zatím to mám řešené tak, že jsem tu upravenou knihovnu uložil do jejího adresáře s jinou extenzí (jako zálohu).

Smaže se tento "cizí" soubor onou případnou aktualizací a mám to raději dát jinam?

2) změna části kódu u první a druhé konstrukce (ve smyslu, jak navrhuješ): možná to z čistě studijních důvodů vyzkouším, ale tak nějak mi připadá, že použití třetí rovnou funkční konstrukce je lepší...

_________________
Kdo chce, hledá způsob;
kdo ne - hledá důvod.

Ze dvou možností často volím tu třetí.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pocitujlasku



Založen: Dec 12, 2005
Příspěvky: 2384
Bydliště: SR, Poprad

PříspěvekZaslal: pá červenec 28 2023, 10:34    Předmět: Citovat

nevidel som tu tretiu, ale podla komentarov pouziva ten novy konstruktor. ja som len z toho prveho prikladu upravil podla toho, ako to pouziva autor kniznice.
Je bezne, ze casom nejake starsie funkcne kody prestanu fungovat a musis ich trocha upravit.
ja som napr. svoj kod za 2 roky upravoval asi 3x kedze aj tie kniznice sa vylepsuju a optimalizuju a nie vzdy sa to da tak, ze su 100% kompatibilne

_________________
No vidis, a tak si sa bal
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
asdf



Založen: Oct 06, 2022
Příspěvky: 318

PříspěvekZaslal: pá červenec 28 2023, 11:05    Předmět: Citovat

Ještě si ale asi dávej pozor na tu paměť, jak psal Valdano a Celeron. Jestli to budeš nějak upravovat, tak tě to možná potká.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



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

PříspěvekZaslal: pá červenec 28 2023, 23:29    Předmět: Citovat

JirkoZ, tou změnou jsi nevyřešil naprosto nic. Vše, co je za dvojtým lomítkem je komentář, kterej se nijak při překladu neuplatňuje. To znamená, že v původním a novým kódu je funkční jen jedinný řádek začínající dvojtým křížkem, tedy
kód:
#define SSD1306_128_64 ///< DEPRECTAED: old way to specify 128x64 screen

A to, co je za ///< je až do konce řádku opět komentář, takže se zase při překladu neuplatní. Takže před a po úpravě je výsledek překladu stejný.
Navíc správný termín v komentáři je "DEPRECATED," což znamená, že daný způsob je zastaralý a již se nedoporučuje používat.
Že ti to začalo chodit bude v něčem jiným. U těch OLEDů někdy stačí text, co se píše na displej zkrátit o pár znaků a začne to chodit.

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
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 1, 2  Další
Strana 1 z 2

 
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.17 sekund