[Bascom]Modyfikacja tylko wewnętrznego eepromu

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

[Bascom]Modyfikacja tylko wewnętrznego eepromu

Post autor: matrix » 07 kwie 2013, 11:46

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ą?

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 07 kwie 2013, 16:15

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.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 07 kwie 2013, 18:46

Putałem Mirka Kardasia o modyfikację eepromu za pomocą jego programu MkAvrKalkulator. Modyfikuje tylko i wyłącznie eeprom wewnętrzny. Więc jest ok, tylko bascom nie tworzy plików .EPP wymaganych przez program Mirka.

Muszę przy tym pogrzebać.

Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Post autor: mr_x » 07 kwie 2013, 18:54

A konwertuje HEX na BIN? Jak nie, to użyj konwertera zewnętrznego.

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 09 kwie 2013, 18:03

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.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 10 kwie 2013, 16:07

Ertew pisze:Plik z rozszerzeniem EPP nie jest programem dla procesora tylko danymi ładowanymi w pamięć eeprom,
A gdzie napisałem że to plik programu?
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.
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: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).
Jeśli o to chodzi to mogę władować Mirkowy bootloader i korzystać z programu MkBootloader bo mam w pełnej wersji (legalnie).

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 10 kwie 2013, 21:27

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.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 10 kwie 2013, 21:39

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 Byte

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 11 kwie 2013, 19:46

W 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:

Kod: Zaznacz cały

Dim lampa_eprom As Eram Byte At 2
- 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:

Kod: Zaznacz cały

$eeprom
Data: 0, 2, 51, 230, 154, ....
To powinno wygenerować wsad dla pamięci eeprom który będzie się pokrywać z umiejscowieniem odpowiednich zmiennych w pamięci.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 11 kwie 2013, 20:43

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&h02

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 12 kwie 2013, 12:50

No 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ć.

ODPOWIEDZ