Zpět – pro
návrat na předchozí stránku používejte stand. funkce prohlížeče.
BootLoader-zavaděč
vs WatchDog
Jako bastlíř se věnuju realizacím s mikrokontroléry typu PIC, ATMEL včetně HW i SW. Programy v céčku. V poslední době jsem se začal věnovat projektu Arduino. Přiměla mě k tomu normální zvědavost a intuice mi říkala, že asi uspořím spoustu času . Nemá cenu se podrobněji rozepisovat, ale narazil jsem na několik problému , které jsem vyřešil s pomocí Internetu. Někdy s dost velkými potížemi, jelikož popisy ne vždy byly zcela jasné , a které se někdy zbytečně odvolávaly na podrobnější znalosti. Proto jsem se rozhodl některé snad jasně popsat, a které mám ověřeny. Dále se konkrétně věnuju Arduinu zakoupené na ebay s mikrokontrolérem ATmega328P (MC) a označený NANO. Vývojové prostředí (IDE) používám verze 1.8.2
Pokud WatchDog(WD) resetuje MC pak s originálním zavaděčem se program zacyklí a problém je na světě. Zkoušel jsem různá řešení což mi zabralo spoustu času a bez úspěchu. Naposled jsem vyzkoušel vypálit upravený zavaděč a bylo po problémech. Podívej se na Př.1 .
Pokud bude zájem mohu upravený zavaděč pro ATmega328p dát k dispozici a zájemce si ho může sám vypálit. Sice na tom nic není, ale pokud s tím nemáte žádné zkušenosti , tak doporučuju poohlédnout se po svém okolí.
Toto uvádím jen pro ukázku proč nevadí přetečení proměnné . Kouzlo tkví v tom, že proměnné se musí definoval jako unsigned long (bez znaménka) . Př.1 napoví
/* Ukázka přerušení od
watchdogu po úpravě zavaděče(BootLoader).
* Při původním zavaděči se program zacyklí.
Ověřeno pro Arduino s
* MC ATmega328P.
* Jako vedlejší je ukázka proč
"nevadí" přetečení millis()
*/
#include
<avr/wdt.h> // pro watchdog
void setup()
{Serial.begin(9600);
Serial.println(F("ISR BootLoaderBldPok."));
wdt_enable(WDTO_4S);
//wdt_disable();
}
void loop() { wdt_reset();
//pokud loop bude delší než 4s , pak se
MC resetuje
unsigned long
a,b,c;a=0xffffff00;b=0x0f;c=(b-a);
Serial.print("a=");Serial.print(a);Serial.print("
");
Serial.print("b=");Serial.print(b);Serial.print("
");
Serial.print("c=a-b
");Serial.print(a-b);Serial.print(" ");
Serial.print("c=b-a
");Serial.print(b-a);Serial.println();
Serial.print("nyni pro
b=");b=0xffffffFF; Serial.print(b);//max hodnota
Serial.print(" c=a-b
");Serial.print(a-b);Serial.print(" ");
Serial.print("c=b-a
");Serial.print(b-a);Serial.print(" ");
Serial.println();
// put your main code here, to run
repeatedly:
delay(3000);
}
Konkrétně pro letecké modeláře nemající vysílač s telemetrií a chtějí ji nahradit. Konstrukce spočívá s modulu s ATmega8,BMP0180 (BMP180 Digital Barometric Pressure Sensor Board Module) ,FS1000 (433Mhz RF transmitter and receiver link kit for Arduino )a pro vysílač vysílající data ( zde výška) a modulu přijímače(RXB6 433Mhz Superheterodyne Wireless) s ArduinoNANO-328, hlas. modulWT020 (WTV020 voice module SD card sound U-disk audio player). Vysílající frekvence je 433MHz. Přijímač detekuje vysílající naměřená data a převede je na hlas.
Prozatím vše. Podrobnosti uvedu na požádání.