Óra, hőmérő, gombok, waveshield - gond
Óra, hőmérő, gombok, waveshield - gond
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!
Ú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!
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!
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.
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.