logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATmega32A-AU - Czy aktywacja fusebitów BODEN i BODLEVEL jest konieczna?

Daniel_GSM 14 Lis 2015 16:32 2385 17
  • #1 15150485
    Daniel_GSM
    Poziom 25  
    Witam,

    Mam pytanie odnośnie fusów BODEN i BODLEVEL.

    Nigdy ich nie włączałem a poczytałem, że powinny być włączone w przypadku wykorzystywania wewnętrznej pamięci EEPROM.
    Wiem tylko, że aktywacja tych bitów powoduje reset procesora w przypadku obniżenia napięcia zasilania.
    Czy to prawda?

    Mikro-kontroler to ATMEGA32A-AU zasilana 5V.

    Czy aktywacja tych fusebitów może być zaletą czy może zaszkodzić?
    No i co się stanie kiedy zostanie wykonany reset od BOD a będzie trwał zapis do eeprom?
  • #2 15150534
    tmf
    VIP Zasłużony dla elektroda
    Tak, służą one do wykrywania obniżenia napięcia poniżej określonego progu. Jeśli dojdzie do takiej sytuacji to MCU będzie utrzymywany w stanie reset. Jeśli akurat zapisuje do EEPROM to oczywiście ta operacja zostanie przerwana. BOD ma na celu uniemożliwienie pracy MCU przy niepewnym zasilaniu, co może skutkować jego nieprawidłowym działaniem.
  • #3 15150565
    Daniel_GSM
    Poziom 25  
    tmf napisał:
    Jeśli akurat zapisuje do EEPROM to oczywiście ta operacja zostanie przerwana


    Co jest równoznaczne z błędami w zapisie i pojawieniem tzw. "krzaków"?

    Zupełnie jakbym odciął całkowicie zasilanie podczas zapisu?
  • #4 15150592
    tmf
    VIP Zasłużony dla elektroda
    Tak. Cudów nie ma, to na tobie spoczywa odpowiedzialność za prawidłowy projekt układu. BOD daje tyle, że np. nie skasuje ci się cały EEPROM na skutek nieprawidłowego działania MCU.
  • #5 15150652
    Konto nie istnieje
    Konto nie istnieje  
  • #7 15150668
    Daniel_GSM
    Poziom 25  
    Więc aktywować warto bo nie zaszkodzi a może pomóc.
    Rozumiem, że jak aktywuję BODEN i BODLEVEL dla AT32 to reset zostanie uruchomiony po obniżeniu napięcia poniżej 4V - dobrze wyczytałem?

    Swoją drogą to chciałbym jeszcze podpytać odnośnie dwóch rzeczy - dotyczy programowania w Bascom.
    1. Kwestia wear leveling przy zapisie do eprom w Bascom - zupełnie nie wiem jak się do tego zabrać a przykładów nie znalazłem
    2. CRC przy zapisie do eeprom również w Bascom - chciałbym zapisywać daną wartość w dwóch albo nawet trzech komórkach naprzemiennie - załóżmy, że będzie to zmienna typu word. W przypadku kiedy wystąpi jakiś błąd w zapisie - np podczas zapisu zasilanie zostanie nagle odcięte.
    Po ponownym uruchomieniu zasilania (lub po resecie) sprawdzam wartość i jesli jest poprawna to zostaje przepisana do RAM - jeśli nie to wykorzystuję inną komórkę w której wartość będzie prawidłowa.
    Tylko - jak się do tego zabrać? Podczas ponownego uruchomienia urządzenia chciałbym aby do RAM została załadowana najbardziej aktualna wartość - o ile jest poprawna.
    Nadmienię, że dotyczy to czasu działania urządzenia - godziny (word) i minuty (byte).

    Aktualnie procedura zapisywania czasu do eeprom wygląda tak jak poniżej i generalnie nie mam nad tym żadnej kontroli

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #8 15150686
    tmf
    VIP Zasłużony dla elektroda
    ad 1. Wear leveling robi się identycznie niezależnie od języka.
    ad 2. Po prostu zapisujesz wszystko podwójnie i przy odczycie przepisujesz tą kopię, która ma poprawne CRC. Warto też pomyśleć nad sprzętem - zapewnić detekcję zaniku zasilania i podtrzymanie na czas zapisu EEPROM. Prawdę mówiąc na twoim miejscu wybrałbym z AVR jakąś XMEGA, gdyż ma możliwość mapowania EEPROM w SRAM i zapisywania blokami po 32 bajty, co skraca operację zapisu EEPROM do czasu wymaganego do zapisu jednej komórki. No i procek ma sprzętowe CRC i jest tańszy :)
  • #9 15150730
    Daniel_GSM
    Poziom 25  
    I tu się zaczynają schody.
    Dziękuję za dyskusję, ale wszystko co napisałeś to czysta teoria z której nadal nie zrealizuję tego czego potrzebuję.

    Poszukuję jakiś przykładów w Bascom a tego nie znalazłem.

    Może na początek coś odnośnie punktu 2?
    W jaki sposób wykonać taką kontrolę CRC?
    Poza tym zapis ten zapis podwójny - jeśli będzie wykonany w tym samym czasie to może się zdarzyć, że obie wartości będą błędne - to tak na logikę.

    Mój schemat, który rodzi mi się w głowie musi wyglądać tak:
    Co godzinę zapisuję zmienną godziny do eeprom.
    W przypadku braku zasilania zapisuję zmienną godziny do innej komórki eeprom.
    Następnie w przypadku braku zasilania, jakiegoś zakłócenia, resetu program odczytuje komórkę, która została zapisana po zaniku zasilania - jeśli jest ok przepisuje ją do RAM, jeśli nie to przepisuje ostatnią poprawną wartość, która została zapisana wcześniej.
    Czy to ma jakiś sens?

    To póki co ma być półśrodek do czasu kiedy urządzenie nie zostanie przeprojektowane w całości
  • #10 15150791
    tmf
    VIP Zasłużony dla elektroda
    Nikt poważnie w bascom nie programuje, stą zapewne niewiele takich przykładów znajdziesz. Może koledzy coś wskażą. Co do logiki - jeśli zapisujesz dwa bloki danych i padnie zasilanie to albo masz już zapisany pierwszy blok i pada podczas zapisu drugiego, albo pada podczas zapisu pierwszego i masz do dyspozycji stare dane z drugiego bloku.
    Co do twojego schematu - zapis co godzinę ok, wear leveling niezbędny, nie rozwiązuje to ciągle problemu padu. Jak ci braknie zasilania to już nic nie zapiszesz, więc punkt drugi twojego pomysłu to klapa.
    Tak jak pisałem najlepsze rozwiązanie to rozwiązanie sprzętowo-programowe. Masz detekcję padu zasilania + podtrzymanie na czas zapisu EEPROM. W handlerze przerwania wywoływanego podczas padu zapisujesz co potrzeba i wyłączasz się. Dodatkowo CRC i dwie kopie jak najbardziej są wskazane. Na bascomie się nie znam więc kodu nie pokażę, natomiast kody w C są w przykładach do moich książek, gdzie takie rozwiązanie pokazuję - można je ściągnąć za free i się zapoznać.
  • #11 15150821
    Daniel_GSM
    Poziom 25  
    No to muszę poczekać na kogoś kto robił podobne cuda w bascom.
    W każdym bądź razie bardzo dziękuję za pomoc.
  • #12 15151137
    Konto nie istnieje
    Konto nie istnieje  
  • #13 15152864
    Daniel_GSM
    Poziom 25  
    Za trudne... jak dla mnie - osoby, która tylko od czasu do czasu coś prostego programuje.

    A tak przy okazji - nie mogę odszukać tych przykładów z książki TMF?
    Może ktoś wrzucić link?
  • #14 15169472
    Daniel_GSM
    Poziom 25  
    wracając jeszcze do BODEN i BODLEVEL dla Atmega32 - zasilana 5V

    Jeśli dobrze zrozumiałem to jeśli ustawię tak:

    ATmega32A-AU - Czy aktywacja fusebitów BODEN i BODLEVEL jest konieczna?

    to atmega wykona reset jeśli napięcie spadnie poniżej 4V?
    gdybym BODLEVEL odhaczył to reset zadziała dopiero poniżej 2,7V

    Dobrze rozumiem?
  • #15 15174154
    Daniel_GSM
    Poziom 25  
    Pomoże ktoś z tym moim poprzednim postem?
    Czy tak zaznaczone fusebity w AT32 przy zasilaniu 5V spowoduje, że restart nastąpi przy 4V?
  • #16 15175226
    Konto nie istnieje
    Konto nie istnieje  
  • #17 15176209
    Daniel_GSM
    Poziom 25  
    niveasoft napisał:
    Jak ustawisz BOD na 4V to procek na pewno na prądzie z przejściówki chodzić nie będzie :D - ot taki test i bonus :P


    A jednak na mojej przejściówce działa - i wszystko mam zaznaczone tak jak pokazałeś :)
  • #18 15176341
    yokoon
    Poziom 29  
    Daniel_GSM napisał:
    niveasoft napisał:
    Jak ustawisz BOD na 4V to procek na pewno na prądzie z przejściówki chodzić nie będzie :D - ot taki test i bonus :P


    A jednak na mojej przejściówce działa - i wszystko mam zaznaczone tak jak pokazałeś :)


    Post #16 BOD jest wyłączony.
REKLAMA