[Bascom]Modyfikacja tylko wewnętrznego eepromu
[Bascom]Modyfikacja tylko wewnętrznego eepromu
Pytanko jest, czy da się modyfikować tylko zawartość wewnętrznego eepromu mikrokontrolerów AVR?
Chciałbym widzieć to w ten sposób że podpinam się kompem przez usb<=>RS232 i korzystając z linii RxD i TxD w procku modyfikuję zawartość wewnętrznego eepromu korzystając z możliwości przyjmowania komend po RS'ie.
Albo lepiej było by gdybym mógł podpiąć pendrive'a lub chociaż kartę pamięci i modyfikacja następowała by samoczynnie.
Ostatecznie mogę zastosować bootloader i ładować całość, łącznie z programem.
Wiem na ten przykład że program MkAVRKalkulator ma opcję wpisu tylko samego eepromu z tym że musi być plik z rozszerzeniem .EPP a skąd ja mam go wziąć w bascomie?
I czy MkAVRKalkulator zapisze mi pamięć wewnętrzną eeprom czy w tym przypadku chodzi o pamięć zewnętrzną?
Chciałbym widzieć to w ten sposób że podpinam się kompem przez usb<=>RS232 i korzystając z linii RxD i TxD w procku modyfikuję zawartość wewnętrznego eepromu korzystając z możliwości przyjmowania komend po RS'ie.
Albo lepiej było by gdybym mógł podpiąć pendrive'a lub chociaż kartę pamięci i modyfikacja następowała by samoczynnie.
Ostatecznie mogę zastosować bootloader i ładować całość, łącznie z programem.
Wiem na ten przykład że program MkAVRKalkulator ma opcję wpisu tylko samego eepromu z tym że musi być plik z rozszerzeniem .EPP a skąd ja mam go wziąć w bascomie?
I czy MkAVRKalkulator zapisze mi pamięć wewnętrzną eeprom czy w tym przypadku chodzi o pamięć zewnętrzną?
Oczywiście, jeżeli napiszesz oprogramowanie które to zrobi. Czasami jest to funkcja Bootloaderów, po prostu w oprogramowaniu jest zakładka CONFIG i w niej modyfikujesz jakieś ustawienia urządzenia, czyli konkretnie fragmenty EEPROMu.
Teoretycznie twoje wymagania powinien spełniać ATMELowski Bootloader bo powinien umożliwiać programowanie FLASHa jak i EEPROMu nie zależenie od siebie.
Teoretycznie twoje wymagania powinien spełniać ATMELowski Bootloader bo powinien umożliwiać programowanie FLASHa jak i EEPROMu nie zależenie od siebie.
Bascomem możesz skonwertować pliki BIN na HEX i odwrotnie.
Plik z rozszerzeniem EPP nie jest programem dla procesora tylko danymi ładowanymi w pamięć eeprom, dlatego dla odróżnienia ma inną końcówkę. Nie zmienia to jednak faktu, że wsad epromu musi być zapisany w jednym z powyższych formatów (nie pamiętam jaki, ale tylko HEX i BIN masz do wyboru).
Na upartego możesz zmienić mu rozszerzenie, załadować go jako kod programu, następnie zapisać w drugim formacie i ponownie dowolnie zmieniać rozszerzenie.
Natomiast samo wygenerowanie pliku EPP wymaga stworzenia kilku stałych i poprzedzeniu ich informacją dla kompilatora że te dane mają trafić do eepromu.
Odnośnie pierwszego pytania: z mojego punktu widzenia najłatwiej było by zastosować bootloader.
Jeśli masz wolny pin przerwania zewnętrznego (dowolnie INT0 lub INT1), drugi pin w tym samym porcie, trzeci pin w dowolnym porcie, 2kB wolnej pamięci i możesz zastosować kwarc np. 12Mhz lub 16Mhz, to do procesora ładujesz bootloader o nazwie UsbAspLoader i po USB możesz programować flash oraz eeprom procesora (fusów nie popsujesz w ten sposób).
Mogę pomóc z konfiguracją tego bootloadera.
Plik z rozszerzeniem EPP nie jest programem dla procesora tylko danymi ładowanymi w pamięć eeprom, dlatego dla odróżnienia ma inną końcówkę. Nie zmienia to jednak faktu, że wsad epromu musi być zapisany w jednym z powyższych formatów (nie pamiętam jaki, ale tylko HEX i BIN masz do wyboru).
Na upartego możesz zmienić mu rozszerzenie, załadować go jako kod programu, następnie zapisać w drugim formacie i ponownie dowolnie zmieniać rozszerzenie.
Natomiast samo wygenerowanie pliku EPP wymaga stworzenia kilku stałych i poprzedzeniu ich informacją dla kompilatora że te dane mają trafić do eepromu.
Odnośnie pierwszego pytania: z mojego punktu widzenia najłatwiej było by zastosować bootloader.
Jeśli masz wolny pin przerwania zewnętrznego (dowolnie INT0 lub INT1), drugi pin w tym samym porcie, trzeci pin w dowolnym porcie, 2kB wolnej pamięci i możesz zastosować kwarc np. 12Mhz lub 16Mhz, to do procesora ładujesz bootloader o nazwie UsbAspLoader i po USB możesz programować flash oraz eeprom procesora (fusów nie popsujesz w ten sposób).
Mogę pomóc z konfiguracją tego bootloadera.
A gdzie napisałem że to plik programu?Ertew pisze:Plik z rozszerzeniem EPP nie jest programem dla procesora tylko danymi ładowanymi w pamięć eeprom,
No więc dlatego miałem zdziwko bo wpisałem ze 20 stałych które mają zostać wpisane do eepromu i pliku z rozszerzeniem .epp brak.Ertew pisze:Natomiast samo wygenerowanie pliku EPP wymaga stworzenia kilku stałych i poprzedzeniu ich informacją dla kompilatora że te dane mają trafić do eepromu.
Jeśli o to chodzi to mogę władować Mirkowy bootloader i korzystać z programu MkBootloader bo mam w pełnej wersji (legalnie).Ertew pisze:Odnośnie pierwszego pytania: z mojego punktu widzenia najłatwiej było by zastosować bootloader.
Jeśli masz wolny pin przerwania zewnętrznego (dowolnie INT0 lub INT1), drugi pin w tym samym porcie, trzeci pin w dowolnym porcie, 2kB wolnej pamięci i możesz zastosować kwarc np. 12Mhz lub 16Mhz, to do procesora ładujesz bootloader o nazwie UsbAspLoader i po USB możesz programować flash oraz eeprom procesora (fusów nie popsujesz w ten sposób).
1) Nie napisałeś że plik z rozszerzeniem EEP to program. Ja napisałem że rozszerzenie pliku jest inne aby rozróżnić go od kodu programu.
2) U mnie wszystko działało, plik eeprom generował się bez problemu, wystarczyło dać dyrektywę '$eeprom', trochę danych poprzedzonych słowem 'Data' i na koniec $data oznajmiające kompilatorowi że tutaj jest program ładowany do flasza.
Obecnie więcej nie pomogę, bo bascoma dawno się pozbyłem.
Zerknij tuta: http://www.forbot.pl/forum/topics49/wgr ... vt6903.htm może znajdziesz jakiś szczegół który naprawi wszystkie problemy.
3) Nie neguję idei używania bootloadera na port szeregowy. Ma on mniejsze wymagania odnośnie kwarcu i pamięci programu. Ja zaproponowałem wersję na usb ponieważ nie mam na zbyciu konwertera usb->rs, a podłączenie usb do avra wymaga tylko kilku tanich elementów.
No i decydująca kwestia - lenistwo. Ten bootloader zgłasza się w systemie tak jak używany przezemnie programator UsbAsp. Nie muszę zmieniać konfigów i programowanie przez bootloader przebiega identycznie jak dla programatora zewnętrznego.
2) U mnie wszystko działało, plik eeprom generował się bez problemu, wystarczyło dać dyrektywę '$eeprom', trochę danych poprzedzonych słowem 'Data' i na koniec $data oznajmiające kompilatorowi że tutaj jest program ładowany do flasza.
Obecnie więcej nie pomogę, bo bascoma dawno się pozbyłem.
Zerknij tuta: http://www.forbot.pl/forum/topics49/wgr ... vt6903.htm może znajdziesz jakiś szczegół który naprawi wszystkie problemy.
3) Nie neguję idei używania bootloadera na port szeregowy. Ma on mniejsze wymagania odnośnie kwarcu i pamięci programu. Ja zaproponowałem wersję na usb ponieważ nie mam na zbyciu konwertera usb->rs, a podłączenie usb do avra wymaga tylko kilku tanich elementów.
No i decydująca kwestia - lenistwo. Ten bootloader zgłasza się w systemie tak jak używany przezemnie programator UsbAsp. Nie muszę zmieniać konfigów i programowanie przez bootloader przebiega identycznie jak dla programatora zewnętrznego.
Tylko że ja nie używam polecenia $eeprom. Nie jest mi ono do niczego potrzebne. Wprowadzając dane do pamięci eeprom robię to w ten sposób:
Kod: Zaznacz cały
Dim lampa_eprom As Eram ByteW ten sposób mówisz kompilatorowi, że ta zmienna ma znajdować się w w pamięci eeprom. Nie podajesz w tym przypadku wartości początkowej (dobrze, bo ta ma być pamiętana w eeprom po włączeniu zasilania) oraz miejsca umieszczenia tej zmiennej w pamięci (źle).
- Po pierwsze: na kartce stwórz spis zmiennych, ich wielkości (bajt, dwa, cztery, ilość znaków w ciągu znaków +1), wartości początkowych i przyporządkuj im kolejne adresy pamięci eeprom.
- Dwa: dla każdej zmiennej dopisz adres, coś na kształt tego:
- Trzy: znając adresy, dodaj do kodu programu dyrektywę i wartości początkowe zmiennych w takiej kolejności w jakiej umieściłeś je w pamięci eeprom:
To powinno wygenerować wsad dla pamięci eeprom który będzie się pokrywać z umiejscowieniem odpowiednich zmiennych w pamięci.
- Po pierwsze: na kartce stwórz spis zmiennych, ich wielkości (bajt, dwa, cztery, ilość znaków w ciągu znaków +1), wartości początkowych i przyporządkuj im kolejne adresy pamięci eeprom.
- Dwa: dla każdej zmiennej dopisz adres, coś na kształt tego:
Kod: Zaznacz cały
Dim lampa_eprom As Eram Byte At 2Kod: Zaznacz cały
$eeprom
Data: 0, 2, 51, 230, 154, ....No właśnie chciałem uniknąć ręcznego adresowania w pamięci eeprom bo w ten sposób muszę pamiętać co gdzie wpisałem, a tak wpisuję zmienną lampa do zmiennej lampa_eprom i trafia mi tam gdzie ma trafić. We wcześniejszych projektach realizowałem zapis do eeprom deklarując adresy w eepromie jako:
Kod: Zaznacz cały
dim zmienna_eprom as eram byte at&h02No niestety, mniejwięcej na tym zakończyła się moja przygoda z bascomem. Nie wiem czy jest w bascomie mechanizm pozwalający nadać zmiennej w eeprom wartość początkową na zasadzie że ta wartość nie jest ustawiana na początku programu a generowana w do pliku EEP.
Inna sprawa że przy ręcznym zarządzaniu wiesz gdzie co masz, zmienne nie rozjadą się gdy wraz z rozwojem programu usuniesz lub dodasz jakąś, oraz masz jasno oznaczone który bajt pamięci edytować żeby konkretną zmienną poprawić.
Inna sprawa że przy ręcznym zarządzaniu wiesz gdzie co masz, zmienne nie rozjadą się gdy wraz z rozwojem programu usuniesz lub dodasz jakąś, oraz masz jasno oznaczone który bajt pamięci edytować żeby konkretną zmienną poprawić.