Strana 1 z 1

problem s unixtime() v rtclib.

Napísané: 25 Jan 2022, 21:30
od používateľa straciam
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?

Re: problem s unixtime() v rtclib.

Napísané: 25 Jan 2022, 23:04
od používateľa peterple
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();

Re: problem s unixtime() v rtclib.

Napísané: 26 Jan 2022, 08:20
od používateľa Atlan
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.

Re: problem s unixtime() v rtclib.

Napísané: 26 Jan 2022, 18:16
od používateľa straciam
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?

Re: problem s unixtime() v rtclib.

Napísané: 26 Jan 2022, 19:00
od používateľa Atlan
Nebiju sa ti kniznice? Nastavuje sa vzdy spravna a dresa a konci stopom? Ta 555 je tam naco?

Re: problem s unixtime() v rtclib.

Napísané: 26 Jan 2022, 19:11
od používateľa straciam
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.

Re: problem s unixtime() v rtclib.

Napísané: 26 Jan 2022, 21:10
od používateľa peterple
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.

Re: problem s unixtime() v rtclib.

Napísané: 26 Jan 2022, 21:48
od používateľa straciam
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.

Re: problem s unixtime() v rtclib.

Napísané: 26 Jan 2022, 22:18
od používateľa peterple
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.

Re: problem s unixtime() v rtclib.

Napísané: 26 Jan 2022, 22:35
od používateľa Atlan
Program sa nema co zasekavat, a okrem toho uP obsahuje WDT.

Re: problem s unixtime() v rtclib.

Napísané: 27 Jan 2022, 05:51
od používateľa straciam
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.

Re: problem s unixtime() v rtclib.

Napísané: 30 Jan 2022, 12:46
od používateľa straciam
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.

Re: problem s unixtime() v rtclib.

Napísané: 30 Jan 2022, 13:14
od používateľa budvar10
Odporúčam prečítať si AN97055.pdf (Philips), ako prepojiť 5V a 3,3V.
Obrázok

Re: problem s unixtime() v rtclib.

Napísané: 30 Jan 2022, 13:22
od používateľa lucky62
a sú k dispozícii aj hotové moduly:
https://www.aliexpress.com/wholesale?Se ... ter+3v3+5v

Re: problem s unixtime() v rtclib.

Napísané: 30 Jan 2022, 14:12
od používateľa straciam
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.