Fórum témák

» Több friss téma
Fórum » Több óra IC egy I2C buszon
 
Témaindító: Foxkid, idő: Dec 22, 2012
Lapozás: OK   1 / 1
(#) Foxkid hozzászólása Dec 22, 2012 /
 
Hogy tudnám megvalósítani, hogy 3 - 4 RTCC azonos I2C buszon legyen megcímezhető.
Sajnos több, egymástól független időt kellene mérnem, egy mikrokontrollerrel, és azokat folyamatosan, csatornánként (indítani, megállítani, nullázni), tárolni. Nagyon megköszönném ha megosztanátok a tapasztalataitokat, esetleges ötleteiteket a témában.
A "vas" eddig: 18f4550, ds1307, ami működik is (egy csatornán).
Előre is köszönöm az érdemi hozzászólásokat.
A hozzászólás módosítva: Dec 22, 2012
(#) _vl_ válasza Foxkid hozzászólására (») Dec 22, 2012 /
 
a) Lehet SPI-buszos RTCC-ket használni
b) Lehet több I2C buszt használni (akár bit-banged módon, sima GPIO lábakra)
c) Gondolom lehet olyan RTCC-ket kapni, amik címezhetőek (van pár lába, amivel beállítható a címük), bár erre nyilván nem szoktak a gyártók rágyúrni, hiszen kinek kell egynél több...
d) Minek ehhez RTCC? Relatív idő méréséhez (az abszolút idő pedig sosem áll meg, tehát ott fölösleges az indítás/megállítás/nullázás) akármilyen számláló teljesen jó, 60-nal osztani a 18f4550 is tud.
A hozzászólás módosítva: Dec 22, 2012
(#) DecebaL válasza Foxkid hozzászólására (») Dec 22, 2012 /
 
DS1307-ből csak egyet használhatsz egy csatornán mert nem változtatható a címe. Vagy használj több i2c csatornát, Vagy válasz a 1307 mellé 2 db másik típusú rtc ic-t aminek más a slave címe
(#) t0bi válasza Foxkid hozzászólására (») Dec 22, 2012 /
 
Sajnos a címet (device address) nem tudod változtatni, mint például az EEPROM-oknál, kénytelen vagy multiplexelni. Ezt szerintem úgy lehet a legjobban megcsinálni, ha a kontroller I/O portjait használod fel külön-külön vagy a felhúzó ellenállások tápjainak, vagy közvetlenül az RTCC tápjainak használva.
Ha kevés az I/O port, akkor külön multiplexer.
(#) _JANI_ válasza Foxkid hozzászólására (») Dec 22, 2012 /
 
Az ds1307-es adatlapjából nekem is az jött le, hogy fix címekkel lehet elérni... Vagy teljesen külön I2C porton kezeled az egyes eszközöket. Persze ha van még szabad port. Vagy kétirányú adatválasztóval szeded szét az I2C buszt. Így csak az adatválasztót kell megcímezni, soros vagy párhuzamos címzéssel. Az adatválasztó címzését akár bináris számlálóval is meg lehet oldani. Lehet egyszerűbb lesz a programot módsítani, mint kiegészítő áramkört építeni.
(#) Stefan válasza Foxkid hozzászólására (») Dec 22, 2012 / 1
 
És ha csak egyszerűen NAND kapukkal kikapuznád a CLK jelet? Szerintem nem kell ide semmi kétirányú adatválasztó, ha a SCLfolyamatosan magas szinten van a nem használt RTCknél, tökmind1 ( ha jól emlékszem ) mi történik az SDA lábon, mehetnek párhuzamosan szokás szerint.
(#) Hp41C válasza Foxkid hozzászólására (») Dec 22, 2012 /
 
Szia!
Használj PCF8583 -akat, annak van A0 címlába. Ennek felhasználásával mindjárt két RTC lehet egy I2C buszon. Ha több RTC A0 lábait a PIC18F4550 port lábairól vezérled, és mindig a 0xA0 - 0xA1 címet használod, akor mindig az válaszol, amelyiknek az A0 lábán alacsony szint van. Az adatlapja nem említi, hogy tárolná az A0 -ról beolvasott szintet.
(#) Foxkid hozzászólása Dec 23, 2012 /
 
Köszönöm az eddigi segítségeket.
Külön öröm számomra, hogy segítő, és nem kioktató hangnemben válaszoltatok. Természetesen végig gondolom a "hallottakat", és biztos, hogy közülük ki is fogok egyet, kettőt próbálni. Ha van még ötlet, nagyon nagy örömmel fogadom, és remélem, hogy ebből a kialakult tapasztalat cseréből mások is tudnak ötletet meríteni.
(#) kaqkk válasza Foxkid hozzászólására (») Dec 23, 2012 /
 
Nem olvastam végig minden hsz-t, de : mi lenne ha csak egy rtcc -t használnál időalapként ,és
ahhoz viszonyítva a pic számolgatná a különböző időket ??
(#) Foxkid válasza kaqkk hozzászólására (») Dec 24, 2012 /
 
Eddig azt csináltam, de mindig elcsúszott az aktuális időhöz képest.
Szerintem a számolási algoritmusom megvalósításával volt gond. Mert (szerintem) az alábbi képlet helyes.
Eltelt idő= Aktuális idő - Induláskori idő
Szerintem ennél egyszerűbben nem lehet kiszámolni, csak valamit elbénáztam!
Csak hát a másodpercek, percek, órák, stb átszámolásakor valami nincs rendben.
Remélem majd tudom pontosítani.
(#) t0bi válasza Foxkid hozzászólására (») Dec 24, 2012 / 1
 
Bocs, hülyeséget írtam, a felhúzó ellenállások tápját külön nem lehet kapcsolgatni, mert akkor a többi RTCC sem működne.
Viszont az RTCC táp kapcsolgatását I/O portról innen vettem: 2-2 fejezet
Bővebben: Link
(#) Stefan válasza Foxkid hozzászólására (») Dec 24, 2012 /
 
Ha gondolod, akkor a hardveres mókolás helyett, a kódban is tudunk segíteni. Lehet ez célravezetőbb lenne, már többen is írták, hogy 1 RTC-vel is megoldható a dolog, bár nem tudjuk pontosan mit szeretnél.
(#) _vl_ válasza Foxkid hozzászólására (») Dec 24, 2012 /
 
Idézet:
„Csak hát a másodpercek, percek, órák, stb átszámolásakor valami nincs rendben.”

Ha timert használnál, akkor nem kéne átszámolgatni...

Az RTCC-nek csak akkor van értelme, ha abszolút időt akarsz számolni (év/hó/nap és társai).
(#) Foxkid válasza _vl_ hozzászólására (») Dec 25, 2012 /
 
Sajnos szükség van a napok, hónapok számára is
(#) Hp41C válasza Foxkid hozzászólására (») Dec 25, 2012 /
 
Azok számítása sem ördöngősség egy kontroller számára... Sőt időtartam számítására ajánlom a JDN használatát.
A hozzászólás módosítva: Dec 25, 2012
(#) dcsabi válasza Foxkid hozzászólására (») Dec 25, 2012 /
 
Ha a topic ciméhez ragaszkodunk, akkor címezhető RTC kell, vagy kellene, továbbá lehetne kapuzgatni is, ezt ki kell próbálni. Viszont az adott feladatot én úgy oldadám meg, hogy a PIC-ben "virtuális" órákat járatnák olyan felbontással amolyen széles időzítést akarok. Gondolom ez néhány óra esetleg nap nagyságrend. Ha nem kell szinkronban járni a naptárral akkor egyszerűbb. Pl az 1s idóalapot veszem az RTC től. Ha igen akkor a virtuális óráid időtartamot mérjnek, esetleges áramszünet esetén letárolják az aktuális állást bekapcsoláskor újra szinkronizálnak. Régebben csináltam gép kihasználtság és üzemóra listázót, az hasonló elvet használt. Viszont ott minden gépen egy pic és egy rtc (pcf8583) volt. A PCF 8583-nak 240byte RAM-ja is van, ezt is lehet használni, Pl az adott feladatra is. Aztán lehet, pl, egy "kis" pic olvas egy olcsó RTC ből. soros adatkét elküldi a központi feladatot ellátó PIC-nek. Ennek a soros adatnak az első byte-ja egy cím, innéttől akár 10db RTC-t is felfűzhatsz. Aztán az I2C protokollt meg lehet írni szoftveresen is az előbb említett soros adat helyett...
Közben jött egy Hsz. látom kell naptár, akkor az üzemóra említett megvalósítását ajánlom.
A hozzászólás módosítva: Dec 25, 2012
(#) _vl_ válasza Foxkid hozzászólására (») Dec 25, 2012 /
 
Idézet:
„Sajnos szükség van a napok, hónapok számára is.”


"Napok, hónapok száma" nem egyenlő "év/hó/nap".

Ha felmerül, hogy átszámolgasd a másodperceket, perceket, órákat, stb., akkor tuti nem abszolút időt akarsz mérni. Szóval újra kéne gondolni, hogy mit is szeretnél mérni.
(#) Stefan válasza Foxkid hozzászólására (») Dec 25, 2012 /
 
Még mindig nem értem miért kell ehhez n darab RTC. Írtam egy rövid kódot (szigorúan elvi megoldás, le se fordítottam...). Ez nem elégíti ki az igényeket?
A hozzászólás módosítva: Dec 25, 2012

rtc_timers.c
    
(#) _JANI_ válasza Stefan hozzászólására (») Dec 30, 2012 /
 
Tényleg egyszerűbb lenne kikapuzni, csak az órajeleket. ( Ha a hardveres megoldás lesz a nyerő. )
Egy próbát mindenesetre megérne!
A hozzászólás módosítva: Dec 30, 2012
(#) 77blsoft hozzászólása Jan 7, 2014 /
 
Szia,
Ha hw megoldás kell mindenképpen, akkor:
1, Létezik i2C multiplexer. Lehet ingyenes mintaként kérni a gyártótól. Pl: PCA9548A a Texas-tól.
Bár SMT, de kezelhető tokozás.
http://www.ti.com/paramsearch/docs/parametricsearch.tsp?family=anal..._PGE_T
2, CD4066 - cmos bilaterialis kapcsolót is használhatsz az SDA és SCL kapuzására, de pl 10kohm-mal tarsd a lecstlakoztatott eszközök vonalát mindig magas szinten. 

3, Bár én is a SW-es uC-s megoldást választanám. Az adott időzítő indításkor a dátumidőt le kell menteni számmá konvertálva, majd miden ellenőrzéskor kiszámítható az eltelt idő. (Az excel is relatívként kezeli az dátumidőt.)

Remélem tudtam segíteni.
(#) Foxkid válasza 77blsoft hozzászólására (») Jan 8, 2014 /
 
Köszi, én még mindig az sw megoldás mellett vagyok. Egy kicsit leállt a project, mert más irányú elfoglaltságaim miatt ez a vonal egyelőre megállt. Amint lesz rá időm ismét nekiállok, és kipróbálom az általad javasolt multiplexert is.
A hozzászólás módosítva: Jan 8, 2014
Következő: »»   1 / 1
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu