Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

attiny, prebúdzanie z "power down" watchdogom

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
iginoiii



Založen: Jul 01, 2010
Příspěvky: 364
Bydliště: Bratislava

PříspěvekZaslal: st duben 20 2011, 10:11    Předmět: attiny, prebúdzanie z "power down" watchdogom Citovat

zdravím, zas sa našiel nejaký voľný čas k programovaniu attiny, tak otravujem Smile. K aplikácii riadeniu čerpadla potrebujem, aby sa procesor vypol na 15 minút každú polhodinu(kvôly zníženému odberu). Dopracoval som sa zatiaľ k niečomu nasledovnému.

Od kódu som očakával, že na úvod a=0 vypne procesor, po dvoch sekundách ho prebudí watchdog, inkrementuje a=1, a viac už procesor nevypne. Ale poďla behu programu predpokladám, že po watchdog resete sa mi premenna 'a' vždy vynuluje, takže podmienka je splnená vždy, a po každom prebudení procesor opäť zaspí. Nasvedčuje tomu meranie spotreby procesoru. Takže by som chcel požiadať o nasmerovanie. Či riešiť ukladanie premennej 'a' do eeprom, alebo je nejaké elegantnejšie riešenie, resp. som vec úplne zle pochopil.

ps: pre úplnosť, o čo mi vo finále ide: potrebujem, aby procesor spal približne 15 minút, a chcel som to riešiť tak, že pri prebúdzaní každé dve sekundy napočítať 450 watchdog resetov. vďaka, i
kód:

#define F_CPU 1E6 // 1 MHZ rychlost uPC

 #include <avr/io.h>
 #include <avr/sleep.h>
 #include <avr/wdt.h>
 #include <avr/delay.h>
 #include <avr/interrupt.h>
 
int a;

/*tato cast neviem presne, ako funguje, len som si ju odniekial vypozical*/
 void reset_wdt(void) \         
    __attribute__((naked)) \
    __attribute__((section(".init3")));
  void reset_wdt(void)
  { MCUSR = 0;
     wdt_disable();
 sleep_disable();
  _delay_ms (1000);
a=a+1; }

 void init_sleep(void)
 { set_sleep_mode(SLEEP_MODE_PWR_DOWN);
        wdt_enable(WDTO_2S);
      sleep_enable();
      sleep_mode();  }

 int main(void)
  {
 if(a==0)
 {init_sleep();
 sleep_disable();}
 else
 {_delay_ms (1000);}
 
  return 0;
  }
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st duben 20 2011, 10:38    Předmět: Citovat

Víš, co se stane, když se ukončí main?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
hakamusai



Založen: Apr 17, 2007
Příspěvky: 943

PříspěvekZaslal: st duben 20 2011, 11:04    Předmět: Citovat

Andrea napsal(a):
Víš, co se stane, když se ukončí main?


Mě by to zajímalo.
Setkal jsem se se situací,kdy bylo potřeba nastavit výstupy MCU do určitýho stavu a zůstal tak.Zůstane ten MCU ve stavu když opustí hlavní smyčku main ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st duben 20 2011, 11:13    Předmět: Citovat

Já to nevím, v C neprogramuju, ale co jsem viděla pár programů v C pro jednočipy bez OS, tak se main nikdy neukončoval. Vždy to běželo v nekonečné smyčce, což mi přijde logické, main nemá nic nad sebou, do čeho by se mohl vrátit.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
iginoiii



Založen: Jul 01, 2010
Příspěvky: 364
Bydliště: Bratislava

PříspěvekZaslal: st duben 20 2011, 11:18    Předmět: Citovat

ja som blbec, však to nemám v žiadnom for cykle, ktorý by bežal vkuse dokola a kontroloval premennú a.... ale mám pocit, že som to skúšal všeliako, škoda že to nemôžem hneď vyskúšať. Táto verzia už je zdatne zúfalá, po vyskúšaní všetkého možného...

plus to return 0 netuším čo spraví. vráti 0, ale v tomto prípade asi nemá kam Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st duben 20 2011, 11:27    Předmět: Citovat

To nejasné ukončení mainu samozřejmě není jediný problém. Reset znamená reinicializaci proměnných a tudíž ztrátu stavu. Musel by se udělat zásah do inicializace před mainem a v případě resetu od WDT si to zařídit po svém. Možná by bylo lepší použít přerušení od WDT, místo resetu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
iginoiii



Založen: Jul 01, 2010
Příspěvky: 364
Bydliště: Bratislava

PříspěvekZaslal: st duben 20 2011, 11:51    Předmět: Citovat

prerušenie od wdt použiť nemôžem, pretože ako čítam datasheet attiny26, tak tá toto prerušenie nemá(viem, že som tieto veci mal uviesť hneď na úvod, ale musím sa priznať, že som ani netušil o uvedených rozdieloch)..

takže keď to zhrniem, keďže externý signál nemám aký použiť, a na

citace:
Musel by se udělat zásah do inicializace před mainem a v případě resetu od WDT si to zařídit po svém.
si určite neverím, lebo by som musel vidieť príklad, podľa ktorého postupovať. Tak výsledne riešenie bude asi najjednoduchšie idle mód a prebúdzanie timerom.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st duben 20 2011, 11:59    Předmět: Citovat

Ta část programu, co nevíš, jak funguje, je nejspíš zásah do té inicializace před mainem, ale asi je to část, co se vykoná ještě před inicializací proměnných, takže to a++ se neprojeví.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
iginoiii



Založen: Jul 01, 2010
Příspěvky: 364
Bydliště: Bratislava

PříspěvekZaslal: st duben 20 2011, 12:19    Předmět: Citovat

vďaka za diskusiu, ušetrilo mi to kopec času, čo by som ďalších 5 hodín ťukal rôzne hlúposti a očakával niečo, čo už hneď od úvodu nejde tak ako by som chcel(a vedel), i
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: st duben 20 2011, 16:39    Předmět: Citovat

Takto deklarujeme proměnnou "temp", která se nemá změnit při resetu od wdt:
kód:
unsigned char temp  __attribute__((section(".noinit")));
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
p32



Založen: Jan 13, 2007
Příspěvky: 15597
Bydliště: Olomouc

PříspěvekZaslal: st duben 20 2011, 19:38    Předmět: Citovat

Pokud chceš řídit čerpadlo a přitom vypnout procesor na 15 minut, tak to udělej po selsku.
Dej tam někde na výstup klopný obvod, který po "příkazu k aktivaci" prostě vypne procesor a za 15 minut zase nastartuje procesor a je to Laughing
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
iginoiii



Založen: Jul 01, 2010
Příspěvky: 364
Bydliště: Bratislava

PříspěvekZaslal: st duben 20 2011, 21:52    Předmět: Citovat

p32: podobné riešenie ma samozrejme napadlo, ale mám už hotovú DPS, a som lenivý robiť novú Smile

AB1: skrátim to: Love, vďaka moc
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata 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 hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.17 sekund