Szanowni koledzy,
chciałbym zrobić projekt, w którym mikrokontroler będzie generował pewne określone wartości napięcia analogowego za pomocą DACa (16 bit, podłączony przez SPI). Rozdzielczość czasowa jednego okresu sygnału wynosiłaby 2^12 (czyli 4096) próbek na okres. W sumie, na jeden okres spróbkowanego sygnału potrzeba 8kB pamięci. Mikrokontroler ma mieć możliwość zdalnego (przez Bluetooth, dokładnie moduł HC05 UART-Bluetooth) zmieniania sekwencji generowanego napięcia bez konieczności przeprogramowania. Najłatwiej byłoby oczywiście zapisać wszystko do RAMu, ale to niemożliwe, bo ATMega 328P (taki scalak został wybrany) tyle go nie ma. Czy jest możliwość (i jak to zrobić) aby zapisywać otrzymaną przez UART (BT) sekwencję danych (8kB) do pamięci Flash (ma 32kB) i stamtąd odczytywać ją poprzez pgm_read_byte? Funkcja realizująca zapis do Flasha pobierałaby dane z UARTa do jakiegoś bufora zawartego w RAM (np. 256 bajtów) i zapisywała pełnymi blokami do Flasha.
Zrobiłem pewne rozeznanie dotyczące projektu i wiem, że:
*Do komunikacji przez BT mogę użyć HC05 i wypróbowałem go - działa
*Z pamięci Flash mogę czytać poprzez pgm_read_byte
*Flash zapisuje się blokami i ma on ograniczoną liczbę operacji zapisu, stąd nie należy tego robić za często
*Można używać DACa zrobionego z PWM, ale dla mnie ma za mało bitów (albo jest za wolny, bo jedno od drugiego zależy)
*Wiem że można jakoś zapisywać do Flash, ale nie mogę znaleźć (i zrozumieć) precyzyjnej informacji jak to zrobić (często przewija się słowo bootsector i bootloader, więc coś pewnie jest z nimi na rzeczy)
*Nie istnieje makro pgm_write_byte
pozdrawiam i proszę o pomoc!
PS: Napisałem powyższy post w temacie
[AVR] - "zmienna flash'owa" - zapis do flasha
ale administratorzy kazali mi założyć nowy, co niniejszym czynię
chciałbym zrobić projekt, w którym mikrokontroler będzie generował pewne określone wartości napięcia analogowego za pomocą DACa (16 bit, podłączony przez SPI). Rozdzielczość czasowa jednego okresu sygnału wynosiłaby 2^12 (czyli 4096) próbek na okres. W sumie, na jeden okres spróbkowanego sygnału potrzeba 8kB pamięci. Mikrokontroler ma mieć możliwość zdalnego (przez Bluetooth, dokładnie moduł HC05 UART-Bluetooth) zmieniania sekwencji generowanego napięcia bez konieczności przeprogramowania. Najłatwiej byłoby oczywiście zapisać wszystko do RAMu, ale to niemożliwe, bo ATMega 328P (taki scalak został wybrany) tyle go nie ma. Czy jest możliwość (i jak to zrobić) aby zapisywać otrzymaną przez UART (BT) sekwencję danych (8kB) do pamięci Flash (ma 32kB) i stamtąd odczytywać ją poprzez pgm_read_byte? Funkcja realizująca zapis do Flasha pobierałaby dane z UARTa do jakiegoś bufora zawartego w RAM (np. 256 bajtów) i zapisywała pełnymi blokami do Flasha.
Zrobiłem pewne rozeznanie dotyczące projektu i wiem, że:
*Do komunikacji przez BT mogę użyć HC05 i wypróbowałem go - działa
*Z pamięci Flash mogę czytać poprzez pgm_read_byte
*Flash zapisuje się blokami i ma on ograniczoną liczbę operacji zapisu, stąd nie należy tego robić za często
*Można używać DACa zrobionego z PWM, ale dla mnie ma za mało bitów (albo jest za wolny, bo jedno od drugiego zależy)
*Wiem że można jakoś zapisywać do Flash, ale nie mogę znaleźć (i zrozumieć) precyzyjnej informacji jak to zrobić (często przewija się słowo bootsector i bootloader, więc coś pewnie jest z nimi na rzeczy)
*Nie istnieje makro pgm_write_byte
pozdrawiam i proszę o pomoc!
PS: Napisałem powyższy post w temacie
[AVR] - "zmienna flash'owa" - zapis do flasha
ale administratorzy kazali mi założyć nowy, co niniejszym czynię
