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.

[ATtiny2313][asm] - zapis do EEPROM w asemblerze

LM2574 15 Sie 2012 17:00 1212 3
  • #1 15 Sie 2012 17:00
    LM2574
    Poziom 6  

    Witam wszystkich.

    Walczę z zapisem danych do EEPROM w ATtiny2313 i późniejszym ich odczytem. Mój kod opiera się o przykłady
    z datasheet, lecz gdy okazało się, iż nie chce poprawnie działać, przewertowałem jeszcze sporo różnych stron
    (w tym elektrodę). Zazwyczaj radzę sobie sam po krótszym bądź dłuższym czasie, a tu wymiękam - pewnie jakiś
    kruczek, którego nie jestem w stanie dostrzec.

    Kod zminimalizowany do samego istotnego fragmentu.

    Jeśli w programie następuje zapis do EEPROM i następujący po nim odczyt (jak w kodzie poniżej), to wartość (wart)
    na końcu jest równa tej, jaką zapisana została na początku (dane). Dla odmiany, jeśli po uprzednim zapisaniu
    uruchomię program tylko z częścią odpowiedzialną za odczyt, to wartość końcowa jest równa 255 (czyli tyle, ile
    wg. datasheetu początkowo powinno być w nowej kości).

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    Od razu uprzedzając: kość jest zasilana poprawnym napięciem (5,08 V) - datasheet sugerował, że nieprawidłowe
    napięcie może być przyczyną problemów z dostępem do EEPROM. Kondensator 100nF przy samych nóżkach uC,
    reset przez 10k do Vcc i takie tam. Wartości fuse bitów, szybkość taktowania i preskaler mają fabryczne wartości.

    0 3
  • Pomocny post
    #2 15 Sie 2012 19:35
    excray
    Poziom 39  

    W datasheet jest zapisana przykładowa procedura zapisu i odczytu pamięci EEPROM. O ile nie zaznaczyłeś odpowiedniego bitu w fusebits to pamięć EEPROM jest standardowo kasowana przy programowaniu kości.

    0
  • #3 15 Sie 2012 20:14
    LM2574
    Poziom 6  

    excray napisał:

    [...]
    O ile nie zaznaczyłeś odpowiedniego bitu w fusebits to pamięć EEPROM jest standardowo kasowana przy programowaniu kości.


    I o to chodziło. Dziękuję. :-) Wgrałem program w wersji tylko odczytującej wartość z EEPROM, po czym wgrałem spreparowany
    wsad do EEPROM i zadziałało (no, przynajmniej odczyt zadziałał ;-)). Avrdude nie chwalił się każdorazowo programując
    mikrokontroler, że oprócz kasowania pamięci flash przed zapisem, kasuje też inne dane (tym bardziej, że do tego ma
    stosowne opcje).

    Poprzednio też robiłem próbę z wgraniem wsadu, tylko... nie w tej kolejności.

    0
  • #4 15 Sie 2012 22:47
    LordBlick
    VIP Zasłużony dla elektroda

    LM2574 napisał:
    Avrdude nie chwalił się każdorazowo programując
    mikrokontroler, że oprócz kasowania pamięci flash przed zapisem, kasuje też inne dane
    Chip Erase to operacja niepodzielna przeprowadzana wewnątrz procesora, więc avrdude nie ma tu nic do rzeczy.

    0