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.

[ATMEGA162][C] - [AVRSTUDIO4] brak zapis do EEPROM

IRFP640 29 Lip 2012 22:10 797 3
  • #1 29 Lip 2012 22:10
    IRFP640
    Poziom 9  

    W zasadzie skopiowałem przykładowy kod z noty, nie działa mi zapis do wewnętrznego EEPROM'a, odczytuje ciągle 0xFF.

    Piszę w C, AVRStudio4, procek kręci się na 12MHz, nie mam włączonej żadnej optymalizacji (-00), nie wykorzystuje bibliotek, programuje mkAVRcalculator.
    Fuse bit's: LOW = 0xFF, HIGH = 0xD9, Extended = 0xFF, lock byte = 0x3F.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Wywołuję je tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Zapisuje tylko EEARL bo chce wykorzystać tylko 6 bajtów tej pamięci. Aplikacja będzie nimi manipulowała ale niezbyt często, to znaczy raz na kilkanaście sekund/kilka minut. Jest to zbyt często, by wykorzystywać zewnętrzną pamięć flash, wewnętrzny EEPROM byłby znakomity. Jednak nie wiem czemu ten kod nie działa.
    Pozdrawiam

    0 3
  • Pomocny post
    #3 30 Lip 2012 03:14
    szulat
    Poziom 23  

    IRFP640 napisał:
    nie mam włączonej żadnej optymalizacji (-00)
    REG->EECR |= 1<<EEMWE;
    REG->EECR |= 1<<EEWE;

    żeby zapis się wywołal to druga zmiana bitu musi odbyć się w ciągu 4 cykli zegarowych a tymczasem ten kod skompilowany bez optymalizacji daje w gcc coś takiego:
    Kod: asm
    Zaloguj się, aby zobaczyć kod

    czyli troszkę jak gdyby za dużo... a wystarczy włączyć optymalizację i wtedy jest tak:
    Kod: asm
    Zaloguj się, aby zobaczyć kod

    0
  • #4 30 Lip 2012 09:27
    IRFP640
    Poziom 9  

    Zamiast odwołania przez wskaźnik napisałem tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Nie wiem skąd wziąłem w pętli 0x08, ma być 0x01, dalej z ASM próbowałem ale wpisywałem 4 i 2. Teraz wszystko jest ok.
    Dziękuję za wskazówki.

    0