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í 

Záznam do EEPROM při vypnutí napájení
Jdi na stránku 1, 2, 3  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další)
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Celeron



Založen: Apr 02, 2011
Příspěvky: 17508
Bydliště: Nový Bydžov

PříspěvekZaslal: pá březen 10 2023, 23:49    Předmět: Záznam do EEPROM při vypnutí napájení Citovat

Potřebuju těsně před vypnutím napájení ATtiny85 uložit jednu hodnotu v rozsahu 0-64 do EEPROM aby byla k dispozici pro následný zapnutí. EEPROM nesnese moc cyklů, takže přepisovat ji při změně hodnoty v cyklu Loop by dlouho nezvládala.
Napadlo mě řešení ale nevím, jestli to bude makat. Zařízení je napájený v autě z batarie 12V a vypíná se vyškubnutím konektoru z autozásuvky. Z napájení 12V se dělá stabilem 5V pro napájení ATtiny. Co vzít těch 12V a přes dělič ho snížit na cca 3V a poslat do vstupu INT0, kterej bude reagovat na sestupnou hranu a v obsluze přerušení zapsat požadovanou hodnotu do EEPROM? Pokud bude za stabilem větší elyt, tak snad napájení 5V podrží na těch pár instrukcí, než se EEPROM zapíše. Nebo to je celý blbost?

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zaky



Založen: Oct 30, 2010
Příspěvky: 6569
Bydliště: Praha

PříspěvekZaslal: so březen 11 2023, 0:04    Předmět: Citovat

Úplně běžně se to tak dělá.
_________________
Krátce před tím, než se to rozbilo, tak to ještě fungovalo...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 17508
Bydliště: Nový Bydžov

PříspěvekZaslal: so březen 11 2023, 1:05    Předmět: Citovat

No jo, ale proč mi to teda na UNO nejde?
V setup mám:
pinMode(2, INPUT);
attachInterrupt(0, button, FALLING); // INT0, PB2, sestupná hrana


A za koncem loop mám:
// obsluha přerušení na sestupnou hranu
void button() {
EEPROM.write(adr,hodnota); // zápis do EEPROM
Serial.println("Zapis"); // kontrolní výpis
while (1); //zažvejknutí před ztrátou napájení
}

Zkouším to že mám poťák mezi +5V a 0 a běžec na PB2. Když jedu od 5V k nule, tak by to mělo někde pod 1V vyvolat přerušení, zapsat do EEPROM a napsat na sériovým monitoru "Zápis" a program by se měl zakousnout (prostě aby už nic nedělal do ztráty napájení). Bohužel nic a netuším proč. Něco blbě nadefinovanýho kolem toho vstupu pro přerušení PB2?

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nixdorf



Založen: May 06, 2017
Příspěvky: 570

PříspěvekZaslal: so březen 11 2023, 3:37    Předmět: Citovat

PB2 na Une nemôžeš použiť na hardwarové prerušenie, iba PD2 a PD3. Ten attachInterrupt s nulou na vstupnom argumente ti ho namapuje na PD2, takže pripoj poťák tam a malo by to fungovat. Vôbec, miesto tej nuly radšej použi digitalPinToInterrupt(pin_na_doske); potom si nemusíš dávať pozor na číslovanie vývodov MCU vs. vývodov označených na doske.

Nezabudni potom v setupe na Serial.begin() s rovnakou prenosovou rýchlosťou i na termináli. Vôbec, obsluhu prerušenia chceš vyriešiť v najkratšom čase, takže potom miesto Serial.println tam skús prebliknúť ledkou na doske, pripojenú na pine 13 (PB5) hned na začiatku, aby si videl, či sa to tam dostane.
BTW zápis do EEPROM trvá 3,3ms na bajt. Až to rozbeháš, použi update miesto write - to najskôr zavolá read a porovná, či nie je cieľový bajt ten istý, ušetrí to potom zápisný cyklus.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3268

PříspěvekZaslal: so březen 11 2023, 6:53    Předmět: Citovat

nixdorf: sice píše PB2, ale používá vstup 2 (PD2).

Celeron: pro FALLING co tu sestupnou hranu "zrychlit" nějakým klopákem?
Anebo to přes dělič pošli do analogového vstupu a při poklesu měřené hodnoty to celé rozjeď.

Anebo nahraď Interrupt hodnotou LOW.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ondraN



Založen: Aug 16, 2022
Příspěvky: 375
Bydliště: Roztoky

PříspěvekZaslal: so březen 11 2023, 7:59    Předmět: Citovat

Dej ten potenciometr přes SKO nebo komparátor a uvidíš že to bude chodit.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Celeron



Založen: Apr 02, 2011
Příspěvky: 17508
Bydliště: Nový Bydžov

PříspěvekZaslal: so březen 11 2023, 9:15    Předmět: Citovat

ondraN napsal(a):
Dej ten potenciometr přes SKO nebo komparátor a uvidíš že to bude chodit.

Chtěl jsem to mít nakonec co nejmenší, dát tam po odladění pouze SMD ATtiny85, FETa na výstup PWM, SMD stabil 0,8A ty dva odpory děliče, SMD tantal na +5V a dvě tlačítka nahoru a dolů. Je to náhradní PWM "regl" do rukojeti pájky Ersa kde před lety odešel nějakej asi zákaznickej šváb. Takže přidávání dalších součástek je nežádoucí aby se to vůbec rozumně vešlo na destičku původní velikosti.

to Cowley: Máš pravdu, překlep, je to PD2. Ke klopáku jsem se už vyjádřil. Analogový vstup prý trvá na 8 MHz 130 ms. A musel by být ve smyčce Loop a ta je už tak zaměstnaná testem tlačítek pro nastavení. To je proti obsluze přerušení a zápisu do EEPROM strašně dlouhá doba. Nevím, co myslíš tím "Anebo nahraď Interrupt hodnotou LOW." Jako čtením v Loop?

to Nixdorf: Jak jsem již psal, překlep. DigitalPinToInterrupt sice můžu zkusit ale ATtiny ho stejně nemá. Ten Serial.printnl je tam jen na test provozovanej na UNO, pak tam už nebude. U toho testu zatím napájecí napětí nevypínám, jen poťákem simuluju pokles z 5V na nulu, takže Serial.print má dost času a nakonec se to zažvejkne na While (1).
Write jsem použil záměrně, určitě je kratší než update, kterej nejdřív čte, rozhodne jestli zapsat a případně zapíše. Pokud by se zápis do EEPROM dělal jen při tom vypnutí pájky třeba 10 x za den, 365 x za rok tak je to na věky i při zápisu do stále stejný adresy.
Jdu zkoušet dál. V nejhorším si napíšu jen krátkej test na vyhodnocení přerušení aby se to třeba nemotalo s něčím jiným.

Zatím díky všem za pomoc.

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
bdn



Založen: Jan 16, 2020
Příspěvky: 467

PříspěvekZaslal: so březen 11 2023, 10:36    Předmět: Citovat

AVR101: High Endurance EEPROM Storage
Je trik se zvýšením životnosti zápisu do EEPROM.
Jde o to, že namísto zápisu do fixní adresy v EEPROM se pokaždé zapíše do další pam. buňky (kruhový buffer).
Kruhové buffery jsou celkem dva, jeden obsahuje data, druhý obsahuje "ukazatel", kde je poslední hodnota.
http://ww1.microchip.com/downloads/en/appnotes/doc2526.pdf

edit1: jestli máš 2 kanál. osciloskop, tak si zobraz kanál 1-signál do INT, a kanál 2-napájení MCU. Samozřejmě paralelně k MCU vhodný kondenzátor, který udrží V po dobu zápisu. Případně ještě oddělit shottky diodou od zbytku větve napájení..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 17508
Bydliště: Nový Bydžov

PříspěvekZaslal: so březen 11 2023, 12:06    Předmět: Citovat

bdn napsal(a):
AVR101: High Endurance EEPROM Storage

O těch kruháčích vím, ale moc tomu po zběžným přečtení nerozumím. Ale tady to vzhledem k počtu zápisů určitě nebude potřeba.
Už mi to chodí. Dělič jsem nastavil z 12 na 3V. Pokud odpojím 12V, tak se mi EEPROM bez problému zapíše. Ale zatím to je na nepájivým poli s napájecí destičkou podobnou týhle. Za 5V stabilizátorem je elyt 100M/25V. Musím to nabastlit ze samotný 7805 a vyzkoušet jakej elyt je potřeba na spolehlivej zápis. Jde o to, aby se vešel. Tantal v obdélníkovým SMD pouzdře 4 x 7 mm 47M/16V co tu mám, je tak maximum, co se vejde.

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
samec



Založen: Dec 19, 2017
Příspěvky: 4079

PříspěvekZaslal: so březen 11 2023, 12:07    Předmět: Citovat

Zakomentuj riadok
EEPROM.write(adr,hodnota); // zápis do EEPROM
A skús, či ti pôjde aspoň
Serial.println("Zapis"); // kontrolní výpis

V inej časti kódu ti Serial.println funguje?

Premenné adr a hodnota musia byť volatile, inak ich prerušenie neuvidí.

Ďalšia vec je, že hardverové prerušenie má najvyššiu prioritu, takže ak EEPROM.write a Seril.println využívajú prerušenia, tak s nemôžu vykonať, kým sa hardverové prerušenie neukončí. A tomu bráni while(1).
Lepšie, ak v prerušení nastaviš pomocnú premennu a na základe nej vykonáš všetko ostatné v loop v nejakej podmienke aj s tým while(1).

EDIT: neskoro, tak potom nič, keď už to chodí
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crifodo



Založen: Oct 11, 2005
Příspěvky: 15005

PříspěvekZaslal: so březen 11 2023, 16:28    Předmět: Citovat

Jaký parametr pájky je potřeba uložit do paměti před vypnutím? nastavenou teplotu?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Celeron



Založen: Apr 02, 2011
Příspěvky: 17508
Bydliště: Nový Bydžov

PříspěvekZaslal: so březen 11 2023, 16:35    Předmět: Citovat

Zkusil jsem napájení ProMini z 12V stáhnout 7805-kou, dělič pro přerušení před ní a zkoušel jakej elyt to potřebuje mezi zemí a VCC aby bylo dost energie pro zápis do EEPROM. A zjistil jsem, že externí žádnej. Tedy že stačí interní 10M, co je na VCC 5V za stabilem MIC5205 přímo na desce.
Dokonce to chodí i když pošlu 12V na RAW a beru dělič na přerušení od něho. Ale protože to nakonec bude na ATtiny85, tak nad tím RAW nemá cenu dál bádat.
Tak to jdu zkusit přenýst na ATtiny85. U něj za stabec budu muset něco dát, počítám 22-47M.
Přerušení by mělo makat na PB2, PWM na PB1 a tlačítka nahoru a dolů musím dát na PB3 a PB4. No uvidíme...

edit: tak to šlo přenýst na první šlápnutí. Akorát jsem musel dát za stabec elyt 47M jinak to do EEPROM nestíhalo zapisovat. ATTiny na 8MHz žere 15mA, ProMini na 16MHz s tím samým programem 22mA. Takže spotřebou to není. Divný, ještě zkusím ATtiny zapnout předděličku na hodinách, jestli se spotřeba výrazně nezmenší. Nojo, ale zase se srát s předěláním časování v celým programu...

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 17508
Bydliště: Nový Bydžov

PříspěvekZaslal: so březen 11 2023, 18:15    Předmět: Citovat

Crifodo napsal(a):
Jaký parametr pájky je potřeba uložit do paměti před vypnutím? nastavenou teplotu?

Krok od tlačítek v rozsahu 0-64 ze kterýho se přepočítává PWM.
kód:

          // (krok min, krok max, PWM min, PWM max)
pwm = map(krok, 0, 64, 160, 255);


Když tak nad tím přemejšlím, jaký s tím je sr aní a z těch tlačítek nahoru a dolů stejně není bez nějaký indikace moc jasný, jaká je vlastně nastavená hodnota, asi se vrátím k prachsprostýmu řízemí PWM napětím z plochýho potenciometru, co jsem se tady už ptal jestli se ještě vyrábí. Na něm je hned vidět co je nastavený, pamatuje si a je to zlomek kódu proti tlačítkům.

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crifodo



Založen: Oct 11, 2005
Příspěvky: 15005

PříspěvekZaslal: so březen 11 2023, 18:27    Předmět: Citovat

Když jsem kdysi dělal s attiny přijímač DO a přepínač vstupů nf zesilovače, ukládal jsem nastavenou hlasitost a zvolený zdroj signálu do eeprom ne v okamžiku vypnutí, ale po pár sec po poslední změně tlačítkama nebo enkodérem, jedna buňka paměti jako ukazatel do začátku dat. Po určitým počtu zápisů se inkrementovala hodnota v ukazateli a jelo se dál. Takže se eeprom "opotřebovala" cyklicky.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
jova1



Založen: Dec 20, 2007
Příspěvky: 1249
Bydliště: Chýnov - to je kousek od Tábora

PříspěvekZaslal: so březen 11 2023, 18:29    Předmět: Citovat

A oddělovací diodu mezi tím měřením na vstupu a stabilizátorem máš?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další) Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3  Další
Strana 1 z 3

 
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.13 sekund