Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Bascom]Odczytywanie danych z pamięci eeprom procesora

14 Lip 2013 15:46 3588 26
  • Poziom 15  
    Witam, napisałem taki sobie kod do odczytywania zmiennej freq z pamięci eeprom procesora:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod



    I teraz mam mały problem, ponieważ używając klawisza minus nie wyświetla mi prawidłowych danych gdy używam klawisza wszystko jest dobrze.
  • Poziom 33  
    Witam
    Pierwsze co mi wpadło w oko, wywal z funkcji sprawdzanie stanu przycisków. Po to właśnie masz debounce . Druga sprawa, zrob sobie zminne które tylko będą czytane z pamięci eeprom przy starcie programu , poczytaj helpa a załapiesz o jaką definicję zmiennch chodzi. Następnie pracujesz sobie na innch zmiennych, gdy zajdzie potrzeba zapisania czegos do pamięci, to tylko przyrównujesz sobie odpowidnio zmienne .
    Pozdrawiam
  • Poziom 15  
    fajnie a możesz mnie naprowadzić z tym kodem , bo jak się siedzi kilka dni nad tym to podstawowych błędów człowiek nie widzi :-)
  • Poziom 43  
    A po co stosujesz te cudowane funkcje odczytu z EEPROMu zamiast zrobić po prostu:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    ?
  • Poziom 15  
    By zapanować nad adresami w pamięci eeprom :-) wiesz każda częstotliwość jest przypisana do odrębnego numeru , ostatni numer jest zawsze zapisywany w pamięci
  • Poziom 43  
    Ale po co Ci te adresy?
    Pozatym, i tutaj można zapanować nad adresami (można je narzucić).
    Pozatym #2, skoro zapisujesz tylko ostatni numer to tak naprawdę nie potrzebujesz adresu.
  • Poziom 15  
    nie nie nadpisuje właśnie chce zbudować taki bank pamięci ,po którym będę się poruszał za pomocą dwóch klawiszy ... OK to jak mogę narzucić tu adresy ?
  • Poziom 43  
    Nie rozumiem. Jeżeli zapisujesz tylko 1 wartość, to nie potrzebujesz adresów.
    Ale pewnie źle tłumaczysz. I to nie jest jedna wartość tylko kilka.
    Ale i tak nie potrzebujesz adresów. Nie tędy droga.
    Zrób tablicę i poruszaj się po niej za pomocą indexów.
    Tablicę w EEPROMie deklaruje się podobnie jak zwykłą tablicę. Wystarczy że dodasz "As Eram" przy deklaracji.
  • Poziom 15  
    co chcę uzyskać zapis zmiennej freq w różnych komórkach pamięci co takie jak masz w radiu samochodowym
  • Poziom 43  
    Acha, czyli chcesz zapisywać to jako różne stacje?
    No ale czy potrzebujesz do tego znać te adresy?
    Czy w radiu użytkownik zna adresy? Albo czy ta znajomość była by dla nie go wygodna?
    Nie zna i nie była by wygodna.
    On to zna jako numery stacji. 1, 2, 3...
    I to samo proponuję Tobie.
    Wystarczy Ci 1 zmienna Index. Zmieniasz ją 2 przyciskami góra/dół.
    Przy każdej zmianie robisz odczyt z tablicy w EEPROMie.
    Freg = Freq_EEPROM[Index]
    I odczytaną Freq wysyłasz do układu PLL (czy czegoś tam czym stroisz radio).
    A gdy użytkownik zmieni częstotliwość ręcznie (dostroi stację), to może potem zrobić zapis:
    Freq_EEPROM[Index] = Freg
    I jednocześnie możesz zapisywać ostatnią stację żeby po wyłączeniu zasilania była pamiętana:
    Index_EEPROM = Index
    Czy to nie jest dużo prostsze?
  • Poziom 15  
    Właśnie mam jedną zmienną , która jest indeksem i ostatni index zapisany jest w eepromie też za pomocą jednego przycisku

    czyli tak Freg = Freq_EEPROM[Index] gdzie np.Index jest zmienną , ok tylko nie zbyt dużo wiem na temat tablic , tylko jak wpisałem Freg = Freq_EEPROM[Index] wywala mi error 46
  • Poziom 36  
    slavcio2012 napisał:
    Właśnie mam jedną zmienną , która jest indeksem i ostatni index zapisany jest w eepromie też za pomocą jednego przycisku

    czyli tak Freg = Freq_EEPROM[Index] gdzie np.Index jest zmienną , ok tylko nie zbyt dużo wiem na temat tablic , tylko jak wpisałem Freg = Freq_EEPROM[Index] wywala mi error 46


    Tu masz przykład konfiguracji eeprom dla array; wpisu i odczytu wartości z indexem. Dla ułatwienia posłużyłem sie automatycznymi pętlami 'for..next' z incrementacją zmiennch wewnątrz pętli.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Dla twoich potrzeb zmienisz to sobie na ręczne wpisy/odczyty wg. zaistniałych warunków , posługując się indexem (idx)./
    Podczas symulacji otwórz dodatkowo okno z "Memory" i obserwuj "SRAM" a póżniej 'EEPROM'.
    Dodałem extra przycisk (Pind.3) i subrutynę dla testowego odczytu zawartości pamięci eeprom i wyświetlenia jej w polu "Terminal Emulator" symulatora.
    Powinieneś otrzymac cos takiego:

    [Bascom]Odczytywanie danych z pamięci eeprom procesora

    e marcus
  • Poziom 15  
    Dziękuje ... wpis i odczyt działają a jak mam przechodzić po po szczególnych zapisach bo jak dodam wyświetlanie
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    to dodaje i odejmuje mi częstotliwości , które nie były wpisane w pamięci eeprom ?
  • Poziom 36  
    slavcio2012 napisał:
    Dziękuje ... wpis i odczyt działają a jak mam przechodzić po po szczególnych zapisach bo jak dodam wyświetlanie
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    to dodaje i odejmuje mi częstotliwości , które nie były wpisane w pamięci eeprom ?


    Zmiany zmiennej incrementownej/decrementowanej w subrutynach: 'PLUS:', 'MINUS:' dotyczą tylko zmiennej o takiej nazwie jaka jest wpisana w subrutynie i aktualnej jej wartości w RAM. Dlatego sugerowałem obserwowac zmiany memory zarówno w zakladce 'SRAM' jak i 'EEPROM' podczas symulacji.

    Aby osiągnąc effekt wpisu nowej częstotliwości do eeprom (w ogólności nowej wartości), wymagałoby najpierw określic lokację tej wartości poprzez wybranie "idx", następnie nową wartośc wpisac do tej location.
    Możesz także odczytac 'starą'/aktualną wartośc do zmiennej pomocniczej np 'Freq_0', zmienic tą wartośc na nową i dokonac wpisu do eeprom już zmienionej wartości.

    przykład subrutyny:
    idx = 5
    freq_0 = freq(idx)
    freq_0 = freq_0 + 700
    freq(idx) = freq_0

    Możesz oczywiście pominąc odczyt i nową wartośc wpisac bezpośrednio do odpowiedniej location określonej indexem (idx) w eeprom.

    e marcus
  • Poziom 15  
    czyli zmieniając wartość idx jak napisałeś np. na 5 zmienia się również adres zapisu freq w pamięci eeprom i nie nastąpi nadpisanie jej w eepromie ?

    A tak ogólnie to układ syntezy do sterowania radia mam , ale właśnie brakuje mi zapisu częstotliwości tak aby nie nadpisywać poprzedniej
  • Poziom 36  
    slavcio2012 napisał:
    czyli zmieniając wartość idx jak napisałeś np. na 5 zmienia się również adres zapisu freq w pamięci eeprom i nie nastąpi nadpisanie jej w eepromie ?

    A w tym miejscu już mnie zgubiłeś; nie bardzo rozumiem pytanie...
    Wybór (nie zmiana) wartości idx np. na 5 wskazuje jedynie na konkretną wartośc zmiennej przypisanej temu wskaźnikowi podobnie jak address (Bascom zadba aby index skierował pod odpowiedni adres w pamięci eeprom). A to co ty z tym później zrobisz; czy tylko odczytasz, czy go nadpiszesz inną wartościa to już jest tylko wybór programisty.

    e marcus
  • Poziom 15  
    obrazkowo :-)

    naciskam przycisk + - przechodzę po kolei według lp

    1. freq =212000
    2. freq=212500
    3. freq=211000

    itd w zależności ile razy naciskam przycisk Write_EEMem albo inaczej kiedyś w telefonach było tzw.szybkie wybieranie numerów telefonów przypisanym numerom na klawiaturze telefonu
  • Poziom 43  
    Tylko dlaczego wybieranie ma powodować zapis?
    Albo dlaczego wybieranie ma być dokonywane przyciskiem zapisu?
  • Poziom 15  
    nie jednym zapis a dwoma wybieranie
  • Poziom 43  
    No to jak dla mnie za dużo kombinujecie.
    Potrzeba więcej przycisków (stacja+, stacja-, freq+, freq-, zapis).
    I wtedy wystarczy:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
  • Poziom 15  
    Niestety ten kod powyżej nadpisuje freq_0 zawsze jest ostatnia zapisana
  • Poziom 43  
    Co to znaczy?
    I jeszcze pare pytań:
    1. Czy w ogóle masz podłączony wyświetlacz?
    2. Czy dodałeś ten czwarty przycisk?
    3. Czy chcesz żeby zapamiętywało która stacja była ostatnio włączona?
  • Poziom 15  
    sorki , jest ok zjadłem jedną linię kodu działa :-)
  • Poziom 15  
    A jak zrobić coś takiego podczas dodawania przeszukiwania klawiszem plus i minus możne przechodzić po wszystkich idx 1 do 9 a chciałbym tylko po tych gdzie rzeczywiście jest zapisana nowa freq ? czyli np. zapisałem 4 freq i chcę poruszać się tylko od 1 do 4 idx
  • Poziom 43  
    Ale zapis 4 freq nie oznacza że one będą na pozycjach od 1 do 4. Możesz przecież zapisać na 1, 2, 3 i 5.
  • Poziom 15  
    właśnie chcę aby było to chronologicznie :-) dopiero po dojściu do 9 następuje nadpisanie od numeru 1