Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Trwały zapis zmiennej single basom Mega8

michal2666 07 Paź 2009 18:56 1726 12
  • #1 07 Paź 2009 18:56
    michal2666
    Poziom 20  

    Witam !
    Zbudowałem miernik energii oddawanej przez elektrownię wiatrową, posiada ona chopper prądowy, który reguluje stopień odbioru mocy by korzystać ze wszystkich prędkości wiatru - dostosowuje wartość obciążenia.

    co 1 s próbkuję napięcie i prąd, uśredniam, obliczam moc chwilową i energię chwilową.
    teraz energię chwilową sumuję w zmiennej i tu pojawia się mój problem - obok pracuje 5 kW chopper, który sieje zakłuceniami i przy dużej mocy mega 8 czasami wariuje i muszę go zresetować tracąc wartość zmiennej. Ma ktoś jakiś pomysł jak tą zmienną trwale zapisywać, myślałem o eepromie, ale ma on ograniczoną liczbę zapisów więc chyba bym go zamęczył. Bardzo proszę o pomoc, wiem, że wyszukiwarka nie gryzie ale ostatnio pracuję po 20 h/d i już nawet myślenie mi nie idzie a ktoś może zna rozwiązanie.

    0 12
  • #2 07 Paź 2009 19:17
    janbernat
    Poziom 38  

    Np. pamięć SRAM 23K256 microchipa z szyną SPI i oddzielnym podtrzymaniem bateryjnym zasilania.
    Jak się zawiesi w trakcie zapisu to najwyżej ostatni zapis stracisz.
    Ale prawdopodobieństwo jest małe bo SPI jest szybkie.

    0
  • #3 07 Paź 2009 19:19
    arnoldziq
    Moderator Programowanie

    Jeżeli jest taka możliwość, dodaj do układu jakiś EEPROM np. 24c01 na I2C.

    0
  • #4 07 Paź 2009 19:35
    michal2666
    Poziom 20  

    a czy do wewnętrznego eproma mogę zapisywać zmienną single bascomowymi writeeprom i readeeprom, wiem że zmienne przeznaczone do zapisu w epromie trzeba inaczej definiować, jak to zrobić, spróbuję pomęczyć wewnętrznego eproma bo mam już zajęte wszystkie piny megi a nie mam czasu budować nowego układu z większym prockiem choć docelowo będę musiał tak uczynić. chciałbym zrobić tak: odczytać zmienną z eproma, dodać wartość chwilową i znów zapisać.

    0
  • Pomocny post
    #5 07 Paź 2009 20:05
    janbernat
    Poziom 38  

    Jak wszystkie nóżki zajęte to tylko wewnętrzny EEPROM.
    Single zajmuje 4bajty, trwałość EEPROM wynosi 100000 zapisów.
    EEPROM ma 512 bajtów.
    Wychodzi mi że EEPROM 148 dni wytrzyma.
    Oczywiście jeśli każdy kolejny zapis będzie w kolejnej grupie komórek.
    A z tą zajętością nóżek...
    Jak programujesz w układzie (ISP) to SPI wykorzystuje te same nóżki.
    Wystarczy dać jakieś oporniki dodatkowe.
    Chyba że procesor jest programowany poza układem i naprawdę nie da się tego zmienić.

    0
  • #6 07 Paź 2009 20:15
    michal2666
    Poziom 20  

    Niestety zajęte są wszystkie, programuje coprawda w układzie ale korzystam z nóżek które normalnie obsługują kawałek lcd, podczas programowania mam śmietnik na wyświetlaczu ale póżniej jest ok. Nie muszę definiować zmiennej jako Eram ? wystarczy zrobić odczyt przed operacją i póżniej zapis ?

    Code:
    Energia:
    
    Energy_chwil = Moc * 0.2
    Readeeprom Energy , 2
    Energy = Energy + Energy_chwil
    Writeeeprom Energy , 2
    Energy_wh = Energy / 3600


    zmianę co jakiś czas na inny obszar pamięci w jakiejś pętli dorobię by nie eksploatować tych samych komórek.

    0
  • #7 07 Paź 2009 20:24
    janbernat
    Poziom 38  

    i zobacz tu: https://www.elektroda.pl/rtvforum/topic1440163.html
    Te 148 dni wyliczyłem jako max wytrzymałości deklarowanej przez producenta przy zmianie zapisu za każdym razem co 4 komórki.
    Jak zmiana będzie co jakiś czas to trwałość może być niższa.
    A co Ci przeszkadza jak na wyświetlaczu będą krzaki nie tylko przy programowaniu ale co sekundę przy zapisie danych przez SPI?

    0
  • #8 08 Paź 2009 07:49
    seba_x
    Poziom 31  

    masz miejsce na płytce ? gdybyś użył 74ls541 i sterował go z pinu "E" lcd to mógłbyś w łatwy sposób korzystać z tych samych pinów dla lcd i dla zew. eeproma .

    0
  • #9 08 Paź 2009 08:22
    michal2666
    Poziom 20  

    Witam i dziękuję za wszystkie podpowiedzi, niestety aktualnie przebudowa płytki nie wchodzi w grę, nie mam już czasu, układ jest częścią mojej pracy magisterskiej termin zakończenia prac zbliża się bardzo szybko a ja muszę jeszcze wykonać pomiary co przy restartującej się od czasu do czasu medze jest dość kłopotliwe :D (mam dziś dobry chumor więc bardzo łądnie się wyraziłem)

    Nie będzie to urządzenie które ma pracować nie wiadomo jak długo. choć powinno :) Postanowiłem stworzyć licznik i będę rzadziej zapisywał do eeproma niż sam cykl pomiarowy tylko pojawił się problem bo w rzadem sposób nie mogę zapisać zmiennej single, może trzeba ją rozbić na 4 bajty ?? jak to zrobić

    0
  • #10 08 Paź 2009 08:59
    seba_x
    Poziom 31  

    może tak :

    Code:
    S_plyty = High(plyty_skladanie)
    
    M_plyty = Low(plyty_skladanie)

    0
  • #11 08 Paź 2009 10:08
    pixel7
    Poziom 22  

    spróbuj dać $NORAMCLEAR.
    Co prawda jest to niepewne rozwiązanie, ale u mnie działa. Procek zasypia, jest budzony przez watchdog (więc dostaje reset) a wartości i tak pozostają w pamięci.

    0
  • #12 24 Gru 2009 09:43
    michal2666
    Poziom 20  

    Witam po długiej przerwie w temacie.
    W swoim urządzeniu zastosowałem wewnętrzny eprom i naprawdę mocno się zdziwiłem bo wytrzymał naprawdę długo. Zapisywałem do niego i odczytywałem dwa razy na sekundę na początku urządzenie chodziło 24 h/d później już różnie więc nie potrafię dokłądnie powiedzieć jak długo. Przed wczoraj po dłóższej przerwie włączyłem zasilanie i na ekranie w miejscu wyświetlania pamiętanej zmiennej śmieci. Chyba pamięć się skończyła :D
    Mam zamiar przebudować urządzenie i zastosować sugerowaną pamięć SRAM 23k256. Podłączyłem ją na płytce testowej do M8 wg. poniższego schematu:
    Trwały zapis zmiennej single basom Mega8
    Ale nie mogę sobie jakoś poradziś z zapisem, Stosował ktoś tę pamięć w Bascom ??

    0
  • #13 24 Gru 2009 09:51
    gothye
    Poziom 33  

    janbernat napisał:
    Jak wszystkie nóżki zajęte to tylko wewnętrzny EEPROM.
    Single zajmuje 4bajty, trwałość EEPROM wynosi 100000 zapisów.
    EEPROM ma 512 bajtów.
    Wychodzi mi że EEPROM 148 dni wytrzyma.
    Oczywiście jeśli każdy kolejny zapis będzie w kolejnej grupie komórek.
    A z tą zajętością nóżek...
    Jak programujesz w układzie (ISP) to SPI wykorzystuje te same nóżki.
    Wystarczy dać jakieś oporniki dodatkowe.
    Chyba że procesor jest programowany poza układem i naprawdę nie da się tego zmienić.


    są jeszcze pamięci typu FRAM;) wg noty : 100 Billionów cykli zapisu

    0