Sketch uses 30 296 bytes (93%) of program storage space. Maximum is 32 256 bytes. Global variables use 1 530 bytes (74%) of dynamic memory, leaving 518 bytes for local variables. Maximum is 2 048 bytes.
Sketch uses 27080 bytes (83%) of program storage space. Maximum is 32256 bytes. Global variables use 1540 bytes (75%) of dynamic memory, leaving 508 bytes for local variables. Maximum is 2048 bytes. Low memory available, stability problems may occur.
Sketch uses 26730 bytes (82%) of program storage space. Maximum is 32256 bytes. Global variables use 1530 bytes (74%) of dynamic memory, leaving 518 bytes for local variables. Maximum is 2048 bytes.
Viszont különbözik a méret az verziótól függően is, a fenti IDE 1.8.0v, az előbbi IDE 1.6.4v volt.
Viszont csak IDE 1.6.4v-val jeleníti meg helyesen a 4x20 soros I2C lcd a karaktereket.
Sketch uses 29 816 bytes (92%) of program storage space. Maximum is 32 256 bytes. Global variables use 1 520 bytes (74%) of dynamic memory, leaving 528 bytes for local variables. Maximum is 2 048 bytes.
Át kellett írni a kódot, az SD kártyára nem írt ki adatot:
Ez alapjan kotottem ossze a mega-t es az uno-t. 2:12-nel van az, amikor inditja a bootloader feltoltest, nekem akkor hibat ir ki, amire ezt talaltam itt: "2. When getting this error: avrdude: stk500_getsync(): not in sync: resp=0x00 You did not put an 100nF capacitor between +5v and RESET pin on the Arduino Mega 2560". Szo szerint nem ez a hibauzenet amit kapok, de ugyaningy kezdodik. Szoval a jovo heten vmikor kiprobalom 100n-s kondit a +5 es a reset koze, ahogy irjak.
Ezt en sem ertem, azert (is) vettem nano/uno/megat, hogy valamelyiken csak jo lesz, de nem. A masik ok pedig az, hogy igy egyikkel tudjam a masikon frissiteni a bootloadert.
A bootloader-t verziojat ki lehet valahogyan olvasni, vagy pl. ezzel a wdt-s teszttel lehet tudni hogy nem a legutolso verzio?
Alapvetően az a véleményem, hogy az MCU státuszregiszterei vannak némileg elbarmolva (ez nem a te hibád, de csak te tudod rendbeszedni őket). Javaslom még azt, hogy a wdt_enable() mellett a wdt_reset() is legyen meghívva még a setup vége felé.
eddig barmivel probaltam, mindig az volt a vegeredmeny, hogy latszolag probal ujraindulni, de ott mindig lefagy.
Most ezzel probalom.
A setup-ban eloszor letiltom, utana varok 1000ms-ot, a led-et kikapcsolom, utana engedelyezem ujra a wdt-t.
Az indulaskor meg is csinalja szepen, 3x gyorsan villogtatja a ledet, majd kb. meg 2x 1mp-es kesleltetessel, utana indulna ujra, de mar a led-et sem tudja lekapcsolni, odaig sem jut el.
Probaltam ugy is, hogy az ujraindulaskori led kikapcsolast tettem rogton a setup elso soraba, de ugyanez tortent akkor is.
===
#include <Arduino.h> #include<avr/wdt.h> const int onboardLED = 13;
void setup() { wdt_disable();
digitalWrite(onboardLED, LOW); delay(1000); wdt_enable (WDTO_4S); pinMode(onboardLED, OUTPUT); int k; pinMode(13,OUTPUT); pinMode(onboardLED, OUTPUT); for (k = 1; k <= 3; k = k + 1) { digitalWrite(onboardLED, HIGH); delay(250L); digitalWrite(onboardLED, LOW); delay(250L); } }
A felállást úgy kell érteni, hogy hogyan van a projektbe építve a watchdog. Milyen időközönként avatkozik be, mennyi ideig vár ki stb.
Ezzel a kóddal valószínűleg mindenen meg fog állni induláskor. A korábban általad küldött mintában elég egyértelműen le van írva pár szabály, amit érdemes betartani:
-- setup alatt ki kell kapcsolni (ha a void setup nem fut le, ott azért súlyos bajok vannak),
-- kivárás az élesítés előtt (wathdog, hogy ne forduljon végtelen reset-körbe a kártya és kelljen bootloadertől újra húzni),
-- megfelelő időközönként nullázni kell a watchdogot.
Igen, erre gondoltam, hogy mit csinálsz éppen a kontrollerrel.
Ami a kódot illeti. A loop-on belüli while(1) nem tudom, honnan jött, de teljesen felesleges. A loop() az Arduino keretrendszerben while(1)-ként funkcionál. A kódnak kb. 8 mp-ig kellene futnia, utána reset. Én elvetném egyelőre a Serial.print-et, és helyette a ledet villogtatnám (mint a példaprogramban). Ahogy azt nálam hozzáértőbbek néhányszor már alaposan kitárgyalták a Serial (így a Serial Monitor megnyitása) nem várt hatásokhoz vezethet.
E mellett még megpróbálnám a példaprogramban írt megoldást (wdt_disable(); a setup-ban), illetve ha már ragaszkodsz hozzá, több és informatívabb kiírást (Serial.print) mindenféle helyeken, különös tekintettel az időre ( millis() ). Ha reset után történik a baleset, tisztázni kellene, hogy mikor és mi történik, valóban van-e reset (tehát elindul újra a program a setup-tól vagy sem).
> Az jó, ha most nem számít. De mit is jelent? És ezt a Nanoból kapta vissza? Akkor valami kommunikáció már van, vagy ez még nem jelenti azt?
A nano, mint minden Arduino, két fő részből áll. A cél mikrokontrollerből, ami itt ATmega 328P-PU, és a soros USB illesztő mikrokontrollerből, ami itt CH340. Tehát ez az információ semmi mást nem jelent, mint azt, hogy sikeresen lekérdezte USB kapcsolaton az illesztő VID/PID párosát.