Skocz do zawartości
SOYER

Odzyskanie stanu zmiennej po resecie

Pomocna odpowiedź

1 godzinę temu, SOYER napisał:

Jestem ciekaw czy te, dajmy na to, umowne 100000 operacji odczyt/zapis to jest dla całej pamięci, czy dla każdej komórki osobno.

Dla każdej osobno, to z resztą wynika też z tego co napisał Marek. Osobiście jestem jednak zwolennikiem używania zewnętrznych pamięci bo:

  • są nieporównywalnie szybsze
  • ich dolutowanie do arduino nie stanowi problemu nawet dla początkujących
  • mają nieporównywalnie większą pojemność
  • są nie do zajechania kiedy obchodzi się z nimi odpowiednio

Taka pamięć może mi służyć za eeprom i ram jednocześnie i można w niej przechowywać co się zechce (np. dane inicjalizacyjne, tablicę odczytów temperatury, resource do wyświetlania, książki do przeczytania i zdjęcie diewczyny bez ubrania) aktualizując jej zawartość bez ograniczeń 😉

Nawet pamięci flash zużywają się z czasem a te scalaczki nie, więc można je stosować w różnych projektach naprzemiennie w zależności od potrzeby. Na upartego nawet można z nich zbudować "wieczną" kartę pamięci dla arduino itp. wynalazków.

Dziwię się natomiast, że producenci nie stosują do tej pory pamięci FRAM w mikrokontrolerach, która też niestety jest "zużywalna" ale utrzymuje swoją zawartość bez zasilania jednocześnie posiadając wszystkie zalety pamięci SRAM.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
4 minuty temu, atMegaTona napisał:

też niestety jest "zużywalna"

Tyle że ta "zużywalność" jest o ładnych kilka rzędów wielkości mniejsza niż EEPROM.

Udostępnij ten post


Link to post
Share on other sites
3 minuty temu, atMegaTona napisał:

Osobiście jestem jednak zwolennikiem używania zewnętrznych

wierzę;), dla mnie jednak takie eeprom to nowość, do wczorajszego postu @marek1707nie wiedziałem o jej istnieniu w Arduino i o tym, że tak prosto można z niej korzystać... na razie zapisuję tylko 1, lub 2 lub 0...:)).

Czy ta pamięć trzyma to co się zapisze, tak długo aż się jej nie nadpisze? 

Czyli nawet po wgraniu innego szkicu w eeprom jest to co tam zapisaliśmy  np. tydzień temu pod warunkiem, że nikt tego nie ruszał... tak? 

Udostępnij ten post


Link to post
Share on other sites

Dokładnie. Sprawdź sam 🙂

16 minut temu, ethanak napisał:

Tyle że ta "zużywalność" jest o ładnych kilka rzędów wielkości mniejsza niż EEPROM.

Zgadza się, dlatego tym bardziej nie rozumiem czemu się jej nie stosuje w uC. Jakiś czas temu natknąłem się na ksero wystawione do utylizacji więc zapewne działało co najmniej kilka ładnych lat a moduły FRAM, które z niego wyciągnąłem działają mi bez problemu do tej pory więc zakładam, że też będę je miał "na zawsze".

Udostępnij ten post


Link to post
Share on other sites

Witam.

Robiłem kiedyś pozytywkę na Attiny13. Programowałem z poziomu ArduinoIDE. Melodyjkę przechowywałem w EEPROM-ie. Najpierw wgrałem szkic, który wpisał do EEPROM-u melodię, a potem drugi, który ją odtwarzał. Tak więc nie ma problemu z reprogramowaniem.

Warto zwrócić uwagę na to, że zapis jednego bajta w EEPROM-ie jest znacznie szybszy od zapisu dwóch bajtów. Wynika to z tego, że zapis drugiego bajta zaczyna się dopiero po zakończeniu zapisu pierwszego. Jeśli więc kluczowa jest szybkość programu, to warto zapisywać po jednym bajcie zachowując odstęp czasowy w trakcie którego możemy wykonać spory kawałek kodu.

Pozdrawiam.

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites
3 minuty temu, Jamik napisał:

Najpierw wgrałem szkic, który wpisał do EEPROM-u melodię, a potem drugi, który ją odtwarzał.

Ciekawe zastosowanie, dopytam więc, jaką jest pojemność tej pamięci w UNO przykładowo? Da się tam wgrać np. 4-5 krótkich informacji głosowych, dajmy na to "alarm uzbrojony", "odbieram połączenie"...? 

Pomijam kwestię, że nie mam pojęcia jak miałbym nagrać te sample, a następnie wgrać je do pamięci i odtworzyć. Choć tu niemałym doświadczeniem pewnie służyłby @ethanak;) 

Udostępnij ten post


Link to post
Share on other sites

Najlepiej do tego celu wykorzystać przerwania. EEPROM jest niestety strasznie powolny.

1 minutę temu, SOYER napisał:

Pomijam kwestię, że nie mam pojęcia jak miałbym nagrać te sample, a następnie wgrać je do pamięci i odtworzyć.

Cóż, bajt po bajcie. Wykorzystaj funkcje wbudowane albo przerwania. Polecam zapoznać się z notą katalogową atmegi i dokumentacją do avr lib c lub arduino.

Udostępnij ten post


Link to post
Share on other sites

W 1kB EEPROM-u raczej żadnych zrozumiałych sampli nie upchniesz :). Choć za starych, dobrych czasów, przy zabawie z ośmiobitowcami to się różne cuda robiło ;).

Udostępnij ten post


Link to post
Share on other sites

Policzmy sobie.

Ponieważ do wyraźnego przeniesienia mowy wystarczy pasmo ograniczone z góry do 3 kHz, częstotliwość samplingu musi wynosić minimum 6 kHz.

Załóżmy, że będziemy przechowywać 4-bitowe próbki (po dwie na bajt). To daje nam konieczną prędkość odczytu 3 kB/s.

Ponieważ typowa sylaba to ok. 1/6 sekundy, na pojedynczą sylabę będziemy potrzebowali 0.5 kB.

Stąd konkluzja: w 1 kB możemy zmieścić dwie sylaby - dość, aby wyraźnie powiedzieć "du*a" 🙂

Oczywiście można się bawić w jeszcze większe ograniczenie pasma (przy 2 kHz jeszcze da się zrozumieć), w dwubitowe próbkowanie, ale i tak nic sensownego tam nie wsadzisz, a i jakość mowy będzie... jak by tu powiedzieć... marna.

Do komunikatów istnieją moduły (np DFPlayer Mini - na Allegro można kupić za paręnaście złotych).

Gdybyś jednak chciał przerzucić się np. na ESP32 - tu już spokojnie można coś wykombinować. Przede wszystkim - ma wbudowany DAC i można go użyć do odtwarzania dźwięku. Ilość RAM-u i prędkość procka wystarczy, aby można było bawić się w jakąś kompresję. A nawet bez kompresji przy samplingu 11025 Hz można trochę tego zmieścić - szczególnie jeśli zrezygnuje się z OTA.

 

 

 

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Przede wszystkim eeprom nie do tego służy i z racji swojego przeznaczenia jest jaki jest czyli słaby i mały. Do wszystkich innych, bardziej skomplikowanych (ale niekoniecznie) celów należy używać pamięci zewnętrznej najlepiej SPI albo dual albo nawet Quad SPI w zależności od potrzeby. Kwestia jedynie kosztu takiego scalaka bo może się okazać że karta pamięci będzie tańsza. Poza tym scalaczka z 8 nóżkami naprawdę łatwo przylutować do płytki arduino na stałe co zdecydowanie poprawia jakość pracy jak i możliwości płytki. Sama obsługa takiej pamięci nie jest trudniejsza od obsługi wbudowanego eepromu a pomiędzy możliwościami takich pamięci nie ma porównania.

Nie ma też potrzeby programowania pamięci przez przeprogramowywanie mikrokontrolera, można przecież załadować pamięć przez UART za pomocą jakiegoś terminala portu szeregowego, często mają też opcję "wyślij plik" dzięki czemu można sobie najpierw przygotować cały wsad i załadować go po zaprogramowaniu atmegi przez uart właśnie.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

@ethanak czyli twierdzisz, że po zmianie UNO na takie esp, dałoby radę zrobić komunikaty głosowe bez dodatkowego osprzętu, jak dodatkowa pamięć np. ? 

Bo i tak nosiłem się z zamiarem przebudowy tego mojego alarmu, to miałbym dodatkową motywację... 😉

Udostępnij ten post


Link to post
Share on other sites
19 minut temu, SOYER napisał:

dałoby radę zrobić komunikaty głosowe bez dodatkowego osprzętu, jak dodatkowa pamięć np

Teoretycznie tak - tylko za dużo byś ich nie mógł do flasha wsadzić bo to tylko 4 MB, a i trochę pamięci przydałoby się na program zostawić 🙂 Poza tym nie ma że bez dodatkowego - a wzmacniacz to gdzie?

Popatrz sobie na przykłady do ESP8266Audio (nie, to nie pomyłka, biblioteka działa na obu ESP), może sobie coś z tego wybierzesz. Ale na Twoim miejscu nie bawiłbym się w coś takiego tylko zainwestował w DFPlayera Mini i kartę - więcej się zmieści, do DFPlayera podpinasz bezpośrednio głośnik i w ogóle sama wygoda (próbowałem). Na alledrogo znalazłem właśnie za 10.90 PLN ze smartem 🙂

 

 

 

Udostępnij ten post


Link to post
Share on other sites
27 minut temu, SOYER napisał:

dałoby radę zrobić komunikaty głosowe bez dodatkowego osprzętu, jak dodatkowa pamięć np. ? 

Nie rozumiem dlaczego tak się boisz tej pamięci :D ona nie gryzie, poważnie!

Najlepiej byłoby do tego dać jakiegoś nucleo M3 + kartę SD i masz fullwypas. STMy często łatwiej się programuje niż arduino bo nie mają takich ograniczeń a cała obsługa peryferiów sprowadza się do HAL_ZRÓB_CO_KAŻĘ(&hperyferium); czyli podobnie jak w arduino tylko bez void setup() bo setupa robi CubeMX po wyklikaniu potrzebnych pinów. Obsługę SD, FAT32 i inne masz w paczce z oprogramowaniem, blue pill kosztuje 12zł, programator z debugerem 15 i masz dodatkowo w odróżnieniu od arduino real time debuger z pracą krokową na kodzie itd. do tego freeRTOS w pakiecie i robisz z tym co Ci tylko przyjdzie do głowy a jak by było mało blue pilla to można zawsze płytkę z H7 na pokładzie za 50zł od chińczyka zamówić albo własną na ploterze cnc zrobionym na bluepillu wystrugać i masz 480MHz taktowania quad SPI i pamięci ile tylko zechcesz z obsługą dysków twardych włącznie..

Spróbuj sobie tą pamięć doczepić, kosztuje raptem z 5zł i sam się przekonasz, że życie może być prostsze ;D haha

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

@atMegaTona tyle, że sama pamięć mnie nie ratuje, do tego co mam teraz, wystarczy eeprom, a jeśli faktycznie miałbym implementować potwierdzenia głosowe, to i pamięć i wzmacniacz... 

Już szukam tego DFPlayera, martwi mnie tylko czy kolejne urządzenie na software serialu (po sim800l), nie będzie mi się z nim gryzło, chyba nie... 

Dobrze, że ostatnio kupiłem ekspander pinów, bo z pinami też już mam cienko, przy okazji pytanie. Czy taki ekspander może też obsługiwać dwa urządzenia podłączone pod software serial? 

Edytowano przez SOYER

Udostępnij ten post


Link to post
Share on other sites
2 minuty temu, SOYER napisał:

to i pamięć i wzmacniacz... 

Wzmacniacz tda2822 na allegro ze 3zl + głośnik z kompa albo od starej komórki. Mam taki do bluepilla doczepiony z głośnikiem od laptopa i śpiewa pięknie tylko trzeba mu wejście do masy przez 10k zpulować bo szumi bez tego. Cały moduł z tym wzmacniaczem kosztuje z 10 zł na allegro . Stary ale jary, schematy z różnymi wariantami masz w DS od tda.

6 minut temu, SOYER napisał:

Już szukam tego DFPPlayera, martwi mnie tylko czy kolejne urządzenie na software serialu (po sim800l), nie będzie mi się z nim gryzło, chyba nie... 

Dobrze, że ostatnio kupiłem ekspander pinów, bo z pinami też już mam cienko, przy okazji pytanie. Czy taki ekspander może też obsługiwać dwa urządzenia podłączone pod software serial? 

Wszystko zależy od implementacji, jak zkiepścisz procedury to się rozjadą albo zwieszą. Nie mam pojęcia jak ta liba od sim800l jest pisana. Może w nagłówku masz w pliku H jeśli nie ma to trzeba analizować a to trwa. Czasami bebechy z libek arduino do hala przerzucam i trochę czasu to pochłania niestety bo co pisarz to lepszy artysta i trudno się czasem połapać co oni tam nawywijali.

Ale generalnie taki ekspander może obsługiwać tyle seriali ile ma pinów. tak jak z 595 można zrobić 8 PWM sterowanych z SPI.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...