Watchdog pro MCU

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
kolaloka139
Příspěvky: 66
Registrován: 31 kvě 2014, 00:00

Watchdog pro MCU

#1 Příspěvek od kolaloka139 »

Ahoj všem, potřebuji zprovoznit externí watchdog pro mcu. Vstupem by měl být pin z mcu, na kterém budou pulzy. Po watchdogu chci aby zresetoval, když bude na vstupu jak log.0 i log.1 déle něž časová prodleva. Může se jednat o speciální IO nebo o nějaký chytrý čítač. Hlavní podmínkou je jednoduchost zapojení, věcí vedlejší je nastavení časové prodlevy.

Udělal jsem si watchdog z 555, funguje parádně ovšem detekuje "zamrznutí" mcu pouze v jednom logickém stavu WDI pinu.

Pokud máte někdo nějaký nápad, tak sem s ním. Díky moc!
termit256
Příspěvky: 10029
Registrován: 06 pro 2007, 00:00

#2 Příspěvek od termit256 »

Obvodu pro tohle se dala mraky
https://www.google.cz/webhp?hl=cs&tab=T ... atchdog+ic
vyber si co se ti nejvic libi
hakamusai
Příspěvky: 939
Registrován: 17 dub 2007, 00:00

#3 Příspěvek od hakamusai »

Lze to řešit i tak,že WDT bude kontrolovat pouze běh MCU a EXT vstup přerušení bude řešit délku pulzu -při změně dojde k resetování counteru,jinak timerem při přerušení inkrementace counteru.Jde to řešit více způsoby -tohle jen první myšlenka.
Uživatelský avatar
frpr666
Příspěvky: 1051
Registrován: 28 pro 2009, 00:00

#4 Příspěvek od frpr666 »

Co tak připojit jeden 'externí' MCU, který má interní watchdog (např. 12f508, nebo attiny13a) ?
Hardwerově ošetřit tak, aby když se zacyklí 'externí' MCU bude podřízený taky resetován (rezistor).
Program by mohl být něco takového:

Kód: Vybrat vše

setup()
{
  delay(100); // reset
  setup_io();
  setup_wdt();
}

uint32_t timeout;
uint8_t helpflag;

loop()
{
  for(;;) // forever
  {
    helpflag = 0;

    timeout = 1000; // cekani na 0
    do
    {
      if(InputIsZero)
      {
        helpflag++;
        break;
      }
    }
    while(--timeout != 0);

    timeout = 1000; // cekani na 1
    do
    {
      if(InputIsOne)
      {
        helpflag++;
        break;
      }
    }
    while(--timeout != 0);

    if(helpflag == 2) // proběhlo ?
    {
      clrwdt();
    }
  }
}
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“