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

Atmega162/C - Odczyt eepromu zwraca 0xFF zamiast zapisanej wartości 0xAA

siedemsiedemosiem 24 Paź 2012 19:43 1140 5
REKLAMA
  • #1 11446631
    siedemsiedemosiem
    Poziom 2  
    Witam,

    Piszę program na atmege j/w i mam problem z odczytem wartości z eepromu. Napisalem prosty testowy programik:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    i jak sobie podejrze w debugu to wartośc zmiennej abc = 0xAA, potem wyrzucam z tego programu fragment z zapisem do eepromu i uruchamiam jeszcze raz program - wtedy wartość zmiennej abc = 0xFF. Oczywiście fusebit eesave jest zaznaczony, co wiecej jak zrzuce przez avrstudio zawartosc eepromu do hexa to wyglada on tak:
    :10000000FFFFFFFFFFFFFFFFFFFFAAFFFFFFFFFF55
    :10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
    :10002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
    :10003000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
    :10004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
    :10005000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
    :10006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
    :10007000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
    :10008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
    :10009000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
    :1000A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
    :1000B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
    :1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
    :1000D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
    :1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
    :1000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10
    :10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    :10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF
    :10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
    :10013000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF
    :10014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF
    :10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF
    :10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F
    :10017000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F
    :10018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F
    :10019000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F
    :1001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F
    :1001B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F
    :1001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F
    :1001D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F
    :1001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F
    :1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F
    :00000001FF


    Dlaczego nie moge odczytac tej wartosci?
  • REKLAMA
  • #2 11446893
    excray
    Poziom 41  
    Czy przypadkiem między zapisem a odczytem nie powinieneś sprawdzić czy eeprom nie jest zajęty? Zapis jakby nie było trwa kilka milisekund. Konkretnie eeprom_busy_wait();.
  • REKLAMA
  • #3 11446978
    siedemsiedemosiem
    Poziom 2  
    eeprom_busy_wait() jest wewnątrz read'a i write'a.

    Jednak sie pomylilem - eeprom jest czyszczony podczas programowania(dla pewnosci sprawdzilem obie konfiguracje eesave).

    Gdzie jeszcze moze byc przyczyna czyszczenia eepromu?
  • REKLAMA
  • #4 11448227
    xamrex
    Poziom 28  
    Chyba tylko fusy..
    Ale jak mówisz, że eesave sprawdzałeś w 2 konfiguracjach to naprawdę dziwne

    Dodano po 4 [minuty]:

    Wgrywasz hexa,
    Potem wgrywasz plik .eep


    I przy odczycie zmienna abc wynosi FF?

    W jaki sposób sprawdzasz co siedzi w zmiennej abc?
  • REKLAMA
  • #5 11451201
    siedemsiedemosiem
    Poziom 2  
    Sprawdzam albo przez eeprom_read_byte() albo zrzucam sobie zawartość eepromu do hex-a.
    Po prostu każde programowanie powoduje wyczyszczenie pamieci eeprom, bez wzgledu na stan bitu EESAVE.
  • #6 11467261
    GienekS
    Poziom 32  
    A nie jest tak że do tego procesora jest potrzebna inna biblioteka do eeproma? Bo coś miałem z ATmega169
REKLAMA