Óra, hőmérő, gombok, waveshield - gond

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Avatar
rostasc3
Biztosítékgyilkos
Hozzászólások: 52
Csatlakozott: 2009. október 20. kedd, 6:00

Óra, hőmérő, gombok, waveshield - gond

Hozzászólás Szerző: rostasc3 »

Sziasztok!
Úgy tűnik elakadtam, nagy tapasztalatú kolléga segítségét keresem.
Breadboard + avr-duino atmega328-on egy működő projektem van: hőmérő (Dallas1820), óra (ds1307), három gomb, sleep üzemmóddal, watchdoggal az alacsony fogyasztás miatt.
A három gombbal be tudom állítani az órát, dátumot, és egy minimum/maximum hőmérsékletet, ami alatt v. fölött jelzek (8 mp-nként megszakítás, hőmérsékletet ellenőrzök (tulajdonképpen fűtés miatt), ha ok, újra sleep), ha nyomok egy gombot megszakítás keletkezik (hiszen sleep van) , hőmérséklet, óra, dátumkiírás majd megint sleep. Minden remekül megy. De nekem ez úgy kellene, hogy beszéljen (aki használná, nem lát - ezért van benne az óra is, de beállíthatom, hogy a hőmérő ne riasszon, ilyenkor tehát csak magyarul beszélő óra).
Waveshieldet használnék a beszédre. A beszéd megy is, de csak önállóan, vagy a hőmérővel. Ahogy az óra bekerül a programba, az egész meghal.
Szerintem valahogy a használt könyvtárakkal lehet baj.
Amikor nem beszél ezeket használom:
<OneWire.h>, <DallasTemperature.h>, <Wire.h>, <EEPROM.h>, <avr/sleep.h>, <avr/power.h>, <avr/wdt.h>
ha beszél(ne) ezek jönnek hozzá: <WaveHC.h>, <WaveUtil.h>, de itt el is romlik.
Első gyors kérdésem: elképzelhető, hogy az #include-ok sorrendje is fontos lehet? Természetesen a sorrendjükkel már variáltam, de sikertelenül.
Az óra az analóg 4-5 (I2C) lábon van, és mindig be van kötve, akkor is amikor a waveshield működik, csak akkor a programban nincs benne az órához tartozó kód.
Előre is köszönöm a hozzászólásokat!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Ott memóriahiány van....

A WaveShield-et én I2C slave-ként oldanám meg...
Avatar
rostasc3
Biztosítékgyilkos
Hozzászólások: 52
Csatlakozott: 2009. október 20. kedd, 6:00

Hozzászólás Szerző: rostasc3 »

SRAM-ra gondolsz mint memóriahiány?
Az I2C slave mint különálló avr-duino+waveshield? Ez lett volna a következő kérdésem...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Az SD lejátszás a WaveShieldről ~1300-1400 byte SRAM-ot igényel.
És elég sok függvény/rutin van egymásba ágyazva....

Ha 2 chipre szétszeded, szerintem az a legkorrektebb....
Avatar
rostasc3
Biztosítékgyilkos
Hozzászólások: 52
Csatlakozott: 2009. október 20. kedd, 6:00

Hozzászólás Szerző: rostasc3 »

Köszönöm, ebben az irányban indulok tovább!
Avatar
rostasc3
Biztosítékgyilkos
Hozzászólások: 52
Csatlakozott: 2009. október 20. kedd, 6:00

Hozzászólás Szerző: rostasc3 »

Adtam még egy esélyt a projektnek. Külön-külön megmértem a használt sram mennyiségét a waveshield és a hőmérő-óra-gombok részben, s az órás részben minden stringemet áttettem a program memóriába, a waveshieldnél pedig visszavettem a ram bufferből, éppen úgy. ahogyan az atmega168-nál is van. Az optimalizálás után még maradt kb. 600byte szabad sram, és minden működik egyszerre!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Gratula!
A memóriát miből lehetett faragni?
Soros buffert ismerem. Másutt mi volt még? SD kezelésben valamerre?
Avatar
rostasc3
Biztosítékgyilkos
Hozzászólások: 52
Csatlakozott: 2009. október 20. kedd, 6:00

Hozzászólás Szerző: rostasc3 »

Köszönöm! :-)
A WaveHC könyvtárban állítottam a buffert, 512-ről 256 bytera, bőven elég, a hangfájlok lejátszásában semmi észrevehető különbséget nem okoz (eredetileg úgy volt beállítva, hogy az atmega168-nál volt 256, a 328-nál 512), a többit meg a változók progmem-be tételével nyertem. Egy csomó változóm volt ami a lejátszandó wav fileok nevét tartalmazta (az ismétlődő részeket itt is csak egy példányban hagytam meg (.WAV), meg a gombok kezeléséhez voltak változók a minimum-maximum értékek tárolására.
Válasz küldése