problem s unixtime() v rtclib.

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

Používateľov profilový obrázok
straciam
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1319
Dátum registrácie: 06 Jan 2009, 00:00
Bydlisko: Podbrezova
Vek: 38

problem s unixtime() v rtclib.

Príspevok od používateľa straciam » 25 Jan 2022, 21:30

zdravim vas,
potreboval by som pomoc od niekoho skusenejsieho, kto sa vyzna v arduino zalezitostiach.
mam rozpracovany jeden projekt inkubatoru/liahne.
pouzivam kniznice:
SoftwareSerial, LiquidCrystal_I2C, SHTSensor, AutoPID, RTClib...
popisem aky mam problem.
RTClib pouzivam s ds1307 aby som mohol neskor ukladat cas do eeprom, kvoli vypadku elektriny, externemu watchdogu. su to casy v sekundach a hodinach.
v programe pracujem s unixtime().. pripocitavam pozadovane intervaly pre otacanie v liahni, pre upload dat na thingspeak, pre alarmy, pre davkovanie vlhkosti atd..
priklad:

Kód: Vybrať všetko

unit32_t sekunda;
unit32_t thing_time;
...
//setup

//loop
DateTime now = rtc.now();
sekunda=now.unixtime();
....
if (sekunda > thing_time) {
    esp.print(t);
    esp.print(";");
    esp.println(h);
    thing_time = sekunda + 300;  //300s = 5min
  }
  
problem je, ze niekedy mi now.unixtime() vrati zlu hodnotu (v sekundach samozrejme). stava sa to nahodne. potom vsetky nasledne vypocty zlyhaju, funkcie sa zacyklia, prestavaju sa vykonavat v pravidelnostiach atd. jasne, mozem to osetrit dakym ifom porovnavnim aktualneho roku atd. ale to nechcem. chcem aby to fungovalo tak ako ma.
vedel by mi s tym niekto pomoct?
hladal som kade tade po forach ale nic k veci som nenasiel.
najprv som mal podozrenie, ze su chybne vypocty, ale aj pri obycajnom

Kód: Vybrať všetko

lcd.print(now.unixtime());
nahodne vratilo blbost. samozrejme o sekundu neskor to uz bolo v poriadku.
niekedy je to castejsie a niekedy to trva dlhsie.
cele zapojenie pred rokom fungovalo (na kontaktnom poli s OLED I2C displejom) a fungovalo to celu sezonu. teraz to mam na vlastnom DPS a s 2004 I2C displejom.to su jedine dve veci co sa zmenili oproti povodnemu zapojeniu.
na I2C zbernici je ds1307 (5v), 2004 lcd(5v) a sht85(3.3v), neskor bude aj eeprom na i2c zbernici
najde sa niekto, kto by vedel pomoct?
0
Ponukam vysokokvalitnu 3D tlac na SLA tlaciarni Anycubic Photon.
No password, no problem.
Ins-piration

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: problem s unixtime() v rtclib.

Príspevok od používateľa peterple » 25 Jan 2022, 23:04

V prvom rade si nechaj vypísať čo načíta now() z rtc. Takto to vyčítaš z objektu now po vyčítaní RTC. Samozrejme si daj vypisovať aj ten unix time. V momente keď to bude zmršené uvidíš či to počíta na základe OK času alebo nejakého bludu prečítaného z RTC.
V prvom prípade je problém s výpočtom unix time. V druhom prípade je problém s čítaním z RTC.
Typujem na druhý prípad. Potom nastupuje logický analyzátor a nepríjemné hľadanie blbnutia I2C na drôtoch.

Kód: Vybrať všetko

DateTime now = rtc.now();
uint8_t sek = now.second();
uint8_t min = now.minute();
uint8_t hod = now.hour();
uint8_t den = now.day();
uint8_t mesiac = now.month();
uint16_t rok = now.year();
uint8_t denTyzdna = now.dayOfTheWeek();
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1146
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: problem s unixtime() v rtclib.

Príspevok od používateľa Atlan » 26 Jan 2022, 08:20

Daj tu schemu, a fotku alebo navrch plosneho spoja. Kombinovat 5v a 3,3 i2c neje najlepsie riesenie. Treba pozriet ci bude tolerovat 5V predpokladam ze nie, tak ze budes musiet vyhodit pullupy na 5v a nechat len tie na 3.3V.

A zamysli sa cicti nestaci 100kHz frekvencia na zbernici i2c. Neviem ci ti teraz nebezi na 400kHz c oje zbyticne vela.
0

Používateľov profilový obrázok
straciam
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1319
Dátum registrácie: 06 Jan 2009, 00:00
Bydlisko: Podbrezova
Vek: 38

Re: problem s unixtime() v rtclib.

Príspevok od používateľa straciam » 26 Jan 2022, 18:16

now.hour() aj now.minute() vypisujem standardne. vyzera to, ze z rtc modulu pride nejaka blbost.
prehodil som snimac SHT85 na napajanie 5V, cize uz su vsetky i2c zariadenia na 5V.
SHT85, tinyRTC (ds1307) aj LCD (este pribudne eeprom).
prikladam aj schemu, je to pracovna verzia, ktora sa bude este upravovat (napr. o tc4420 pre kazdy mosfet)
schema.png
dnes dokonca vypadava cely displej - obrazovka je prazdna alebo nulty a druhy driadok su "stvorceky". akokeby nekomunikoval. pritom program pracuje dalej. asi vyhadzem vsetky pull-up odpory na i2c zbernici a dam tam 10k odpory. lebo ak beriem ze su paralelne (3k3 na ds1307 a 4k7 na lcd) tak moze byt vysledny odpor maly. minuly rok ked som mal oled displej, tam su 10k pull up odpory a vysledna hodnota bola vyssia. mohlo by to pomoct?
0
Ponukam vysokokvalitnu 3D tlac na SLA tlaciarni Anycubic Photon.
No password, no problem.
Ins-piration

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1146
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: problem s unixtime() v rtclib.

Príspevok od používateľa Atlan » 26 Jan 2022, 19:00

Nebiju sa ti kniznice? Nastavuje sa vzdy spravna a dresa a konci stopom? Ta 555 je tam naco?
0

Používateľov profilový obrázok
straciam
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1319
Dátum registrácie: 06 Jan 2009, 00:00
Bydlisko: Podbrezova
Vek: 38

Re: problem s unixtime() v rtclib.

Príspevok od používateľa straciam » 26 Jan 2022, 19:11

napadlo mi aj to, ze sa biju kniznice. ale pouzivam tie iste ako minuly rok (okrem liquidcrystal_i2c, predtym som pouzival u8x8). minuly rok to na kontaktnom poli fungovalo asi 5 mesiacov s mensimi prestavkami.
co myslis tym
Nastavuje sa vzdy spravna a dresa a konci stopom?
?

555 je externy watchdog, ak sa program zasekne, 555 arduino resetuje.
0
Ponukam vysokokvalitnu 3D tlac na SLA tlaciarni Anycubic Photon.
No password, no problem.
Ins-piration

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: problem s unixtime() v rtclib.

Príspevok od používateľa peterple » 26 Jan 2022, 21:10

Odsekávaj hydre hlavy. Odpoj všetko z I2C čítaj RTC nerob žiadne unix konverzie. a loguj na sériak čo ti prišlo. Nie len hodiny a minúty ale všetko. Podľa toho zbadáš či blbne len nejaký jeden byte alebo všetko.
Trochu to tam komplikuje to že sa volá aj prevod z BCD na bin, takže priamo neuvidíme čo si prečítal. Ale to sa dá neskôr zvládnuť vlastným čítaním.
Máš možnosť zaznamenať cvrkot na I2C drôtoch (skop, logiký analyzátor)?
Ja to vidím na hw problém nie na sw. Aj keď ťažko povedať či tam niečo nebeží v prerušení (napr obsluha displeja alebo inej potvory), ktorá môže nabúrať príležitostne čítanie I2C v hlavnom programe.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
straciam
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1319
Dátum registrácie: 06 Jan 2009, 00:00
Bydlisko: Podbrezova
Vek: 38

Re: problem s unixtime() v rtclib.

Príspevok od používateľa straciam » 26 Jan 2022, 21:48

nemam ani osciloskop ani analyzator.
nejak podobne som na to siel aj ja.. sice som to fyzicky neodpojil ale program bol na zaciatku len lcd a rtc. fungovalo bez problemov. postupne som pridaval dalsie veci (stale len v sw). a ked som pridal meranie teploty a vlhkosti z SHT85 sa to zacalo babrat.
ale pojdem na to tak ako pises. dam to na serial port, fyzicky odpojim sht aj lcd a necham to chvilu bezat.. problem je ze niekedy to ide aj hodiny dobre a potom sa to zosype (bud sa zosype cas alebo zblbne lcd, a za par sekund zaseknutie programu)... odpozoroval som jednu vec, ze sa to zvykne zosypat +- v tom istom case od startu programu.

ak to nepojde inak, pouzijem esp, ktore tam je tiez pripojene a cez neho budem ziskavat cas z ntp servra.
0
Ponukam vysokokvalitnu 3D tlac na SLA tlaciarni Anycubic Photon.
No password, no problem.
Ins-piration

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: problem s unixtime() v rtclib.

Príspevok od používateľa peterple » 26 Jan 2022, 22:18

Skús znižiť rýchlosť hodín na 100kHz ako to už niekto navrhoval.

Kód: Vybrať všetko

Wire.setClock(100000L);
daj to do setupu niekde kde inicializuješ komunikáciu s RTC.

Investícia do LA za 10€ v takomto prípade vie ušetriť veľa času. Aj keď to tiež nie je isté a najlepší by na to bol skop.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1146
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: problem s unixtime() v rtclib.

Príspevok od používateľa Atlan » 26 Jan 2022, 22:35

Program sa nema co zasekavat, a okrem toho uP obsahuje WDT.
0

Používateľov profilový obrázok
straciam
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1319
Dátum registrácie: 06 Jan 2009, 00:00
Bydlisko: Podbrezova
Vek: 38

Re: problem s unixtime() v rtclib.

Príspevok od používateľa straciam » 27 Jan 2022, 05:51

Suhlasim, program sa nema co zasekavat.
Mne sa zda ze arduino standardne pouziva 100khz na i2c. Ale mal som to tam aj predtym v setupe.
0
Ponukam vysokokvalitnu 3D tlac na SLA tlaciarni Anycubic Photon.
No password, no problem.
Ins-piration

Používateľov profilový obrázok
straciam
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1319
Dátum registrácie: 06 Jan 2009, 00:00
Bydlisko: Podbrezova
Vek: 38

Re: problem s unixtime() v rtclib.

Príspevok od používateľa straciam » 30 Jan 2022, 12:46

tak som upratal i2c zbernicu, vsetko dal na 5V, vsetky pullup odpory na moduloch vyhadzal a dal tam 10k pullup odpory. teraz to slape bez zaseknutia, bez bludov.
niekde som cital, ze ak su niektore zariadenia na 5v a niektore na 3.3v tak by mali byt pullup odpory len na 3.3v vetve ale ani to nebolo dobre. az ked som dal vsetko na 5v vetvu sa to unormalnilo.
dakujem vam za pomoc.
0
Ponukam vysokokvalitnu 3D tlac na SLA tlaciarni Anycubic Photon.
No password, no problem.
Ins-piration

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 983
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: problem s unixtime() v rtclib.

Príspevok od používateľa budvar10 » 30 Jan 2022, 13:14

Odporúčam prečítať si AN97055.pdf (Philips), ako prepojiť 5V a 3,3V.
Obrázok
Prílohy
levelshifter.png
levelshifter.png (6.41 KiB) 3303 zobrazení
0

Používateľov profilový obrázok
lucky62
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1151
Dátum registrácie: 14 Feb 2012, 20:16
Bydlisko: Liptovský Mikuláš, SK

Re: problem s unixtime() v rtclib.

Príspevok od používateľa lucky62 » 30 Jan 2022, 13:22

a sú k dispozícii aj hotové moduly:
https://www.aliexpress.com/wholesale?Se ... ter+3v3+5v
0
....môj bazar....

...Nikdy sa nehádaj s blbcom...

Používateľov profilový obrázok
straciam
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1319
Dátum registrácie: 06 Jan 2009, 00:00
Bydlisko: Podbrezova
Vek: 38

Re: problem s unixtime() v rtclib.

Príspevok od používateľa straciam » 30 Jan 2022, 14:12

ano, aj na to som uz prisiel. ze jedna moznost je pouzit prevodnik logickych signalov.
https://techfun.sk/produkt/i2c-logicky- ... er-5v3-3v/
to bol plan "B".
mal som tam este nejake problem zo zapisom do externej eeprom, ale nakoniec som ju nemusel pouzit. takze liahen je kompletna. upravil som DPS a objednal som 5ks z jlcpcb. Potom to budem moct sfinalizovat a zverejnit.
0
Ponukam vysokokvalitnu 3D tlac na SLA tlaciarni Anycubic Photon.
No password, no problem.
Ins-piration

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok