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

[AVR] - "zmienna flash'owa" - zapis do flasha

regrom 12 Gru 2010 18:17 4171 15
REKLAMA
  • #1 8859893
    regrom
    Poziom 16  
    Witam,

    Istnieje takie coś jak pgm_read_byte w bibliotekach <avr/pgmspace.h>.

    Czy istnieje może takie coś jak pgm_write_byte?

    Czy w ogóle jest możliwość zapisu czegoś do flasha (pamieci programu) w programie?

    Chciałbym z zewnętrznego eeproma odczytać sobie tablicę(5 kilobajtow) i przepisać ją da flasha, na niej coś tam zrobić, żeby nie odczytywać z epromaa, potem nastepną tablice itp.
  • REKLAMA
  • #2 8860050
    tmf
    VIP Zasłużony dla elektroda
    Nie ma takiego makra, ale można je stworzyć. Z tym, że zapis do FLASH możliwy jest tylko z poziomu bootsectora, stąd też stworzona funkcja zapisująca musiałaby w nim się znajdować, a to oznacza zabawę z sekcjami pamięci i linkerem. Dodatkowo FLASH programowany jest stronami - nie da się bezpośrednio przeprogramować jednej komórki, zawsze zapisywana jest strona, to także znaczy, że zawsze cała strona jest kasowana.
  • #3 8860098
    regrom
    Poziom 16  
    dzieki za info tmf.

    Nie bawiłem się bootsector'em do tej pory.

    Także jak się do tego zabrać, gra warta świeczki?
  • REKLAMA
  • Pomocny post
    #4 8860126
    tadzik85
    Poziom 38  
    W twoim przypadku zupełnie nie warto i nie rozumiem czemu obawiasz się tak tego odczytu z eeproma.
  • #5 8860173
    regrom
    Poziom 16  
    Znaczy, mam zewnętrzny eeprom 32kbajty. Mam w nim próbki dźwięku, zapisane takie same jak zapisywałem sobie w PROGMEM.

    Problem mam taki, że eeprom idzie po I2C, i ta cała transmisja przedostaje mi się na tor audio, wiec słychać dźwięk ale i pisk od transmisji.

    Kombinuje z masą cyfrową i analogową ale na razie bez skutku, dlatego wpadłem na pomysł żeby użyć flasha jako buffora, i odczytywać te próbki z flasha, jak czytam próbki z flasha wszystko jest ok, zrozumiałe komunikaty.
  • REKLAMA
  • #6 8860185
    tadzik85
    Poziom 38  
    Rozwiązywanie takich problemów na około nie jest najlepszym pomysłem. Zły projekt płytki. Źle napisany program.
  • REKLAMA
  • #7 8860217
    regrom
    Poziom 16  
    No raczej płytka bo stykowa nie za bardzo nadaje się do audio.

    Program, to tylko odczyt z eeproma zewnętrznego bajt po bajcie i wrzucanie na PWMa. Myślę już nad bufforem fifo do tego celu, tylko i tak po I2C muszę szybciej ten bajt odczytać niż wrzucam go na PWMa.
  • #8 8860504
    tmf
    VIP Zasłużony dla elektroda
    To zastosuj pamięć SPI - działa o wiele szybciej, w dodatku jest dostępna w większych pojemnościach. FLASH nie jest dobrym pomysłem, bo ilość zapisów jest ograniczona do 10tys.
  • #9 8860729
    regrom
    Poziom 16  
    To poleciłbyś jakąś sprawdzoną pamięć FLASH bądź EEPROM SPI, powiedzmy tak z przedziału 32 kbajty do 128 kBajtów?

    No i tanią oczywiście?
  • Pomocny post
    #10 8860876
    LordBlick
    VIP Zasłużony dla elektroda
    W przypadku pracy na danych tymczasowych najodpowiedniejsza jest pamięć RAM, każdą inną "zajeździsz" na amen po kilku dniach testów. Nie pochwaliłeś się, jaki µC używasz do projektu, więc trudno coś proponować bliżej.
    P.S. Mam coś w temacie twojego projektu, z tym, ze sample są na karcie SD :
    http://elm-chan.org/works/sd8p/report.html
  • #11 8860898
    regrom
    Poziom 16  
    ATmega16, no ale czy pgm_read_byte, też możemy zajechać flasha? Zanim przerobie te 10k odczytów i zapisów to trochę minie..

    Nad SD myślałem ale nie potrzebuje aż tak dużo pamięci.
  • Pomocny post
    #12 8860913
    tmf
    VIP Zasłużony dla elektroda
    Nie, odczytywać możesz dowolną ilość razy. Co do pamięci SPI to są one niezwykle proste w obsłudze, sam interfejs SPI jest prosty, o wiele łatwiejszy w obsłudze niż I2C. Jaką pamięć wybierzesz, będzie dobrze. Zacznij od TME, mają niezły wybór.
  • #13 8861985
    regrom
    Poziom 16  
    Po długiej i nocnej walce udało mi się rozwiązać problemy.A mianowicie:

    1) Zły zapis do eeproma, zrobiłem zapis stronami po 64 bajty - AT24C256.

    2) Wzmacniacz TBA820m - to on jest głównym powodem zakłóceń, wzmacnia cały syf z swojej okolicy ja by miał podłączoną antenę.

    Głośnik 8Ω, 0,5W podłączony bezpośrednio do PWMa gra pięknie. Żadnych filtrów i cudów, nośna jest ponad 30 kHz więc jej nie słychać.

    Udało mi się wcisnąć prawie 3 sekundową próbkę do AT24C256, 8 bit, 11 000 kHz, PCM. Eeprom ze spokojem wyrabia odczyt trwa wg zegara jakieś 12 us(1 bajt)

    Podłączyłem wyjście do mojego 100 watowego wzmacniacza, i jestem pozytywnie zaskoczony, pięknie zrozumiały komunikat.

    Teraz tylko muszę popracować nad tym wzmacniaczem, albo zastosuje jakiś inny, dobry ekran i załatwi sprawę.

    Pozdrawiam.
  • #14 8862034
    Konto nie istnieje
    Poziom 1  
  • #15 8862063
    LordBlick
    VIP Zasłużony dla elektroda
    regrom napisał:
    Głośnik 8Ω, 0,5W podłączony bezpośrednio do PWMa gra pięknie. Żadnych filtrów i cudów, nośna jest ponad 30 kHz więc jej nie słychać.
    [...]
    Podłączyłem wyjście do mojego 100 watowego wzmacniacza, i jestem pozytywnie zaskoczony, pięknie zrozumiały komunikat.
    Mam nadzieję, że przy podłączaniu wzmacniacza zastosowałeś jakiś filtr RC ze stałą czasową τ=100µs, bo w przeciwnym razie możesz załatwić układ mocy...
    BTW. zamiast SD na tej samej magistrali SPI pięknie funkcjonują EEPROM-y, Flash-e, a nawet FRAM-y.
  • #16 8862708
    regrom
    Poziom 16  
    atom1477 napisał:
    Zrób po prostu buforowanie transmisji I2C. I żadne cuda z Flashem wtedy nie będą potrzebne.


    Masz racje :) zaimplementuje bufor fifo zapewne, na razie mam 2 flagi i też działa :p

    Light-I napisał:

    Mam nadzieję, że przy podłączaniu wzmacniacza zastosowałeś jakiś filtr RC ze stałą czasową τ=100µs, bo w przeciwnym razie możesz załatwić układ mocy...


    Tak :) na szczęście doczytałem gdzieś o tym zanim zacząłem z tym zabawę.
REKLAMA