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

Atmega32: Problem z zapisem do EEPROM na przerwaniach - kod nie działa poprawnie

squelch 15 Sie 2017 18:56 978 5
REKLAMA
  • #1 16643789
    squelch
    Poziom 11  
    Witam wgrałem do megi poniższy kod
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I na LCD nic nie widać. W tym kodzie jest delay tylko dla testu wiem że przerwania i delay to nie ma sensu ale tu chodzi tylko o przetestowanie. Co do kodu to nie zgadzam się z jednym zapisem, w przerwaniu mamy 2 razy
    EECR|=_BV(EERIE); //W³¹cz przerwania EEPROM

    oraz poniżej
    if(EEPROMWrBytes) EECR|=_BV(EERIE); //W³¹cz przerwania EEPROM
    powinno być według mnie tylko linia poniżej bo tak to odblokowywujemy przerwania nawet jak mamy wszystko wysłane.

    Pozdrawiam
  • REKLAMA
  • #2 16644093
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 16644123
    squelch
    Poziom 11  
    Ale co mam poprawiać pytam się czy jest ok czy może pomyłka zaistniała. Wkład pracy w rozwiązanie problemu to wiele prób bo to nie jest w całości przepisany kod dodałem trochę przypraw np. struktura w ram i fun. przepisująca. Nie myśl sobie że kod nie działa to odrazu wbijam na forum prubuję coś pozmieniać zastanowić się.
  • REKLAMA
  • #4 16644622
    electronics_design

    Poziom 14  
    W pierwszym przypadku powinieneś mieć EECR &= ~(_BV(EERIE)); żeby wyłączyć przerwanie, a na końcu sprawdzasz czy jest jeszcze coś do wysłania - jak tak to włączasz przerwanie. Teraz Twój program siedzi cały czas w przerwaniu od EEPROM'a k
  • REKLAMA
  • #6 16644871
    electronics_design

    Poziom 14  
    Nie mówię o fladze tylko o włączeniu przerwania, skoro przerwanie EE_RDY jest generowane cały czas kiedy pamięć jest gotowa do zapisu (jak wskazuje dokumentacja) to musisz je ręcznie wyłączać. Poza tym ten bit nie jest flagą przerwania tylko ENABLE czyli włącznie przerwania.
REKLAMA