Odeslat nové téma Odpovědět na téma  [ Příspěvků: 75 ]  Přejít na stránku 1, 2, 3, 4, 5  Další
Autor Zpráva
 Předmět příspěvku: Arduino Watchdog
PříspěvekNapsal: úte 21.10.2014 14:11 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
Zdravím,
nemáte prosím Vás někdo zkušenost s WDT na arduinu. Mám tento problém:
když dojde k resetu prostřednictvím WD arduino se nerozjede a červená LED rychle bliká. v tomto režimu nedojde ani k resetu prostřednictvím TX RX a deska nejde flasnout. Musím vypnout zapnou napajení.

bootloader mám původní. Nemusím ho změnit za nějaký speciální pro WD ?

Děkuji za případné rady.


Nahoru
 Profil  
 
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: úte 21.10.2014 14:30 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 11876
Bydliště: ČR
Obrázky: 1
Tento problém bývá v bootloaderu. Řešením je nahradit bootloader jiným, se kterým WDT funguje správně. Je to popsáno v článku viz tento odkaz.


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: úte 21.10.2014 14:33 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
dik
jdu studovat.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 7:12 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
tak jsem zmenil bootloader za opti 5 a 6 . pri zapnuti led problikava 3x pauza 3x pauza ..

a nedari se mi nahrat vlastni code. exted fuse bit ma byt 0x05 a to mi avr studio nedovoli.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 7:28 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
upload už chodí je třeba poeditovat board.txt


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 7:45 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
wdt a optiboot v6 funguje super.
Diky za typ.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 9:37 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
Drondys nevíš prosím tě zda je možné načísta následně mazat registr o stavu rebootu následkem WDT nebo to vynuluje bootloader


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 10:27 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 11876
Bydliště: ČR
Obrázky: 1
jaroslav.falcon píše:
Drondys nevíš prosím tě zda je možné načísta následně mazat registr o stavu rebootu následkem WDT nebo to vynuluje bootloader

Podle zrojáku viz tento odkaz bootloader nuluje příznaky restartu v registru MCUSR, ale předtím je to načteno do proměnné a pak se to předává v parametru při volání funkce appStart.

Kód:
  ch = MCUSR;
  MCUSR = 0;
  if (ch & (_BV(WDRF) | _BV(BORF) | _BV(PORF)))
      appStart(ch);

Ve funkci appStart se příznak ukládá do registru R2 a je tam zmíněno i to, že si lze do vlastního programu dopsat funkci zařazenou do kódové sekce ".init0" a v této vlastní funkci si lze hodnotu z registru R2 uložit do nějaké globální proměnné deklarované ve vlastním programu.

Kód:
void appStart(uint8_t rstFlags) {
  // save the reset flags in the designated register
  //  This can be saved in a main program by putting code
  //  in .init0 (which  executes before normal c init code)
  //  to save R2 to a global variable.
  __asm__ __volatile__ ("mov r2, %0\n" :: "r" (rstFlags));
  ...


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 10:50 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
Dekuji,
ale stracim se .init(),

to deklaruji jako setup a loop a code bude mojepromena = R2 ?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 11:11 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 11876
Bydliště: ČR
Obrázky: 1
Do svého zdrojáku pro Arduino by mělo stačit doplnit následující.

Kód:
// toto je globální proměnná, ve které bude stav po resetu
uint8_t MyRstFlags __attribute__ ((section(".noinit")));

// deklarace vlastní funkce pro umístění do kódové sekce .init0
void SaveResetFlags(void) __attribute__ ((naked))
                          __attribute__ ((section (".init0")));

// tělo funkce
void SaveResetFlags(void)
{
  // uložení stavu resetu z R2
  // do vlastní globální proměnné MyRstFlags
  __asm__ __volatile__ ("mov %0, r2\n" : "=r" (MyRstFlags) :);
}

// zbytek budou tvoje další funkce a klasické funkce
// setup() a loop(), ve kterých budeš číst stav po resetu
// z globální proměnné MyRstFlags.

...

Funkci SaveResetFlags ty sám nikde explicitně nevoláš. Zavolá se automaticky při startu díky tomu, že je umístěna v kódové sekci ".init0".


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 11:31 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
compilace probehla OK.
hodnota je vzdy 8 dec bey ohledu yda to nastartuje normalne nebo po WD


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 11:41 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
I my Arduino Sktech I have as you suggested

uint8_t resetFlags __attribute__ ((section(".noinit")));
void resetFlagsInit(void) __attribute__ ((naked)) __attribute__ ((section (".init0")));
void resetFlagsInit(void)
{
// save the reset flags passed from the bootloader
__asm__ __volatile__ ("mov %0, r2\n" : "=r" (resetFlags) :);
}

so my global var resetFlags reflect the ch passed to me by bootloader. like this I know in my main program that I'm coming from bootloader and that this one (bootloader) done nothing else started us quickly if bit 7 = 1 (0x80).

my setup is as follow
void setup()
{
// Get reset flags
resetFlagsInit();

Serial.begin(115200);
Serial.print(F("I received from optiboot => "));
Serial.println(resetFlags, HEX);
}


testoval jsem i toto a vysledek byl stejny porad 8
a oni jeste vali tu funkci v setupu


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 11:47 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 11876
Bydliště: ČR
Obrázky: 1
jaroslav.falcon píše:
compilace probehla OK. hodnota je vzdy 8 dec bey ohledu yda to nastartuje normalne nebo po WD

Ano je to zmíněno viz tento odkaz kde někdo zkoušel upravit i i to volání appStart v bootloaderu a ve svém programu volal tu funkci a stejně mu to nepomohlo. Zřejmě bude jediným řešením to co je v té diskusi zmíněno na konci tj. upravit bootlodar tak, aby registr MCUSR jen četl, ale nenuloval.


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 11:52 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
8 odpovidá

• Bit 3 – WDRF: Watchdog System Reset Flag
This bit is set if a Watchdog System Reset occurs. The bit is reset by a Power-on Reset, or by
writing a logic zero to the flag


nemusi se nejak vynulovat ?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino Watchdog
PříspěvekNapsal: stř 22.10.2014 12:00 
Mazák
Mazák
Uživatelský avatar

Registrován: 8.10.2012
Příspěvky: 1539
Bydliště: Kladno
uprava boot loaderu by spocivala jen v zakomentovani ? MCUSR = 0;
pokud ano tak jak to prelozim na hex ?

.............
/*
* modified Adaboot no-wait mod.
* Pass the reset reason to app. Also, it appears that an Uno poweron
* can leave multiple reset flags set; we only want the bootloader to
* run on an 'external reset only' status
*/
ch = MCUSR;
MCUSR = 0;
if (ch & (_BV(WDRF) | _BV(BORF) | _BV(PORF)))
appStart(ch);

#if LED_START_FLASHES > 0
// Set up Timer 1 for timeout counter
TCCR1B = _BV(CS12) | _BV(CS10); // div 1024
#endif

#ifndef SOFT_UART


...............


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 75 ]  Přejít na stránku 1, 2, 3, 4, 5  Další

 


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 10 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  

 

  Powered by phpBB® Forum Software © phpBB Group  Český překlad – phpBB.cz 

 

NAVRCHOLU.cz