kursC_czesc000_programowanie.pdf

(270 KB) Pobierz
26 Programowanie Bascom Koppel.qxd
Programowanie
Programator BASCOM−a
pomocą przy programowaniu
w C, asemblerze, itd...
Jeśli do tej pory programowałeś procesory
tylko i wyłącznie z wykorzystaniem środo−
wiska BASCOM, zupełnie nie musiałeś się
przejmować powstającymi przy kompilacji
plikami. Programowanie idzie jak po maśle
i nie ma żadnych problemów.
A czy już natknąłeś się na problem, jak
wpisać do procesora AVR „obcy”, ściągnię−
ty ze strony internetowej plik programu,
który powstał w asemblerze lub z użyciem
kompilatora C?
Czy wiesz, że do „spuszczania” do proce−
sora takich „obcych” plików doskonale nada−
je się… BASCOM AVR w wersji DEMO?
Jeśli wpisywanie do procesora plików
wynikowych skompilowanych przez kogoś
innego sprawia Ci problem lub też chcesz
zająć się innym narzędziem i martwisz się,
jak poradzi sobie z nim posiadany przez
Ciebie programator – ten artykuł jest właś−
nie dla Ciebie. Znajdziesz w nim szereg
informacji, które uspokoją i rozwieją Twoje
wątpliwości. Zakładam, że posiadasz wiedzę
na temat BASCOM−a, ale chcę zaznaczyć, że
nie jest to konieczne do zrozumienia treści
artykułu – może po prostu pomóc .
Późna noc... Projekt powoduje coraz większą
frustrację. Płytka została już dawno złożona,
wszystkie połączenia są sprawdzone. Podłą−
czone zostały odpowiednie napięcia zasilania.
W środek trzeba włożyć jeszcze jeden układ,
jeden niewielki element, który wymaga jed−
nak zaprogramowania... Tym razem program
nie powstał w BASCOM−ie... Niebo przecina
złowieszcza błyskawica.
Nie stresuj się, naprawdę nie ma problemu.
Zerknij na rysunek 1 . Pokazuje on sche−
mat pracy z każdym kompilatorem.
Okazuje się, że niezależnie od rodzaju
kompilatora, niezależnie od tego, w jakim ję−
zyku program jest napisany, zawsze na koniec
powstaną, co najwyżej dwa najważniejsze
pliki wynikowe: plik programu oraz plik
danych dla pamięci EEPROM. Zawsze też
pliki te mają znany i ogólnie przyjęty format.
Jeżeli przykładowo chcesz wpisać do pro−
cesora program udostępniony na stronie
„Elektroniki dla Wszystkich” przez któregoś
z autorów, nie będziesz się musiał nawet mar−
twić kompilacją. Autorzy zwykle umieszczają
tutaj zarówno program źródłowy, jak i oma−
wiane pliki wynikowe.
Jeśli nadal budzi to Twoje obawy – przyj−
rzyj się dowolnemu programowi, jaki two−
rzyłeś w BASCOM−ie. Zajrzyj do wnętrza
jego katalogu. Jeśli kod został poprawnie
skompilowany, gwarantuję Ci, że znajdziesz
plik z rozszerzeniem .HEX , ewentualnie .BIN
– zależy to od ustawień kompilatora. Jeśli
program korzysta dodatkowo z pamięci
EEPROM, najprawdopodobniej znajdziesz
także plik z rozszerzeniem .EEP .
BASCOM, zupełnie Cię o tym nie infor−
mując, stworzył pliki takie, jak każdy inny
normalny kompilator. Potem automatycznie
wczytał je do programatora.
Jeśli chcesz skorzystać z „obcych” plików
wynikowych, to jedyne, czego potrzebujesz
się nauczyć w tej chwili, jest samodzielne
wczytanie tych „obcych” plików wynikowych
do BASCOM−owego narzędzia obsługujące−
go programator. Nie jest to czynność trudna,
w swej podstawowej formie wręcz banalna.
Okazuje się jednak, że niektórzy dają złapać
się w pewne czyhające tu pułapki. Jeśli więc
program wciąż nie działa, a przeczytałeś już
instrukcje, sprawdziłeś, czy urządzenie jest
włączone do prądu, wypróbowałeś uderzenia
pod różnymi kątami – ten tekst jest być może
właśnie dla Ciebie.
mator jest od takiego ograniczenia całkowi−
cie wolny . Sam programator możemy potrak−
tować w uproszczeniu jako program darmowy!
4. Obsługa różnych programatorów jest
bardzo do siebie zbliżona. Jeśli więc rozsze−
rzysz swoją wiedzę na temat już wstępnie
okiełznanego programu, nie będziesz miał
problemów, jeśli postanowisz poznać coś
innego.
Rozpoczęcie pracy
Jako przykład wykorzystam tutaj projekt
„Cyfrowej stacji lutowniczej” (EdW 7/2004),
co do którego niektórzy stwierdzili, iż okazał
się „pełen pułapek”. Aby moja sytuacja była
teraz identyczna jak Twoja, wchodzę na stro−
nę EdW i ściągam plik programu AVT−2727.
Uruchom teraz środowisko BASCOM. W tej
chwili powinieneś mieć przed sobą samo
Programator BASCOM−a
Na początek proponuję poznać dobrze pro−
gram wbudowany w środowisko BASCOM.
Dlaczego? Przedstawię garść argumentów jed−
nocześnie omawiających mniej więcej, z czym
mamy do czynienia:
1. Pojawiło się przynamniej kilka
kursów, jak zaprogramować procesor z po−
ziomu bardzo wygodnego środowiska, ja−
kim jest BASCOM. Chyba przy każdym
opisanym na łamach tego pisma projekcie
programatora znalazło się troszkę miejsca
na opisanie sposobu jego współpracy z tym
programem. Nie będzie więc konieczne
poznawanie nowego programu, ponowna
konfiguracja do współpracy z nowym
narzędziem. Jednym zdaniem: mniej pracy
i stresu na początek.
2. Program jest wciąż rozwijany. Sam
w sobie obsługuje znacznie większą listę
układów niż niejeden odpowiednik freeware.
3. I co niezmiernie ważne: o ile kompila−
tor wbudowany w wersję DEMO pakietu ma
ograniczenie odnośnie do długości genero−
wanego kodu (2kB), wbudowany progra−
Rys. 1
26
Elektronika dla Wszystkich
215232773.007.png 215232773.008.png 215232773.009.png
Programowanie
środowisko, bez otwartego kodu programu.
Jeśli otwarty został program, nad którym pra−
cowałeś ostatnio, polecam jego zamknięcie.
Dzięki temu nie zmienisz przez przypadek
ustawień swojego projektu.
Napotkamy teraz pierwszy problem: Oka−
zuje się, że nie można odpalić programatora
przy pustym obszarze pracy. Rozwiązanie,
chociaż nie jest eleganckie, jest bardzo proste:
tworzymy nowy projekt, najszybciej zrobisz
to chyba, wciskając kombinację CTRL+N.
W nowo otwartym oknie nie będziemy nic
pisać. Chodziło nam tylko o to, aby w menu
uaktywniła się potrzebna nam funkcja.
Możemy teraz wreszcie uruchomić program
obsługujący programator. Znów polecam tutaj
skrót klawiaturowy (F4). Uważaj na urucham−
ianie programatora z poziomu paska narzędzi.
Pojawi się rozwijalne menu, z którego należy
wybrać opcję „Manual Program”. W innym
przypadku programator zaraz po uruchomie−
niu rozpocznie próbę wpisania do procesora
programu aktualnie otwartego w edytorze.
Zapewne ujrzysz teraz kilka komunikatów
ostrzegających o błędzie. Po pierwsze – pro−
gramator nie może znaleźć pliku skompilo−
wanego programu – ignorujemy to ostrzeże−
nie – przecież odpowiedni plik chcemy wska−
zać samemu. Możliwe także, że zostaniesz
poinformowany o braku zgodności wykrytego
procesora z tym dla jakiego ustawiona została
kompilacja. Ten fakt także nie ma dla nas zna−
czenia – odpowiedni typ procesora został
zapewne wybrany podczas kompilacji progra−
mu i plik wynikowy zawiera kod przystoso−
wany specjalnie dla niego.
Gdy tylko uda nam się przebrnąć przez te
wstępne czynności, będziemy mieli przed
sobą okno dość wygodnego narzędzia progra−
mującego. Teraz trzeba tylko zmusić go do
pracy z innymi plikami niż to zwykle bywa.
Rysunek 2 będzie pomocny przy wyjaśnianiu
zasady pracy. Najbardziej interesujące nas
elementy interfejsu programu zaznaczyłem tu
różnymi kolorami Dalej, dla naszej wspólnej
wygody, będę się do tego odwoływał.
„świeże” dane, z których ja teraz korzystam,
wczytasz go bez trudu – obecne na stronie
pliki zostały przygotowane, żebyś bez żadne−
go trudu z nich skorzystał. O problemach
jakie mogą się pojawić, napiszę za chwilę.
Teraz nie chcę za bardzo utrudniać sprawy.
Wczytajmy więc przykładowe dane do bu−
fora pamięci EEPROM. Koniecznie przełącz
zakładki buforów tak, aby aktywna była teraz
zakładka EEPROM (zaznaczyłem ją na zielo−
no). Jeśli tego nie zrobisz, mimo tego, że
wczytujesz plik z rozszerzeniem EEP, nasz
programator wczyta dane do aktywnego bufo−
ra, a nie do pamięci EEPROM. Jest to dość
ważny szczegół, o którym należy pamiętać.
Samo wczytywanie danych przebiega tak
jak poprzednio i nie powinno sprawić trud−
ności. W oknie wyboru pliku, z listy „Pliki
typu” należy wybrać pozycję „EEPROM
image”. Dzięki temu widoczne staną się pliki
posiadające rozszerzenie EEP.
Pliki, formaty...
Zabierzmy się więc do wpisywania danych do
pamięci programu. Przypilnuj, aby aktywną
w tej chwili zakładką była FlashROM (zakreś−
lona kolorem czerwonym). Następnie wczytaj
do niej dane. Najprościej to zrobić, wybierając
z paska narzędzi ikonę folderu (kolor fioletowy).
Pojawi się typowo Windowsowe menu wyboru
pliku. Plik, który musimy odszukać, może być
zapisany w jednym z dwóch formatów. Najczę−
ściej będzie on miał rozszerzenie .HEX, rzadziej
– .BIN. Są to dwa zupełnie różne formaty zapi−
su, a umiejętność ich odróżnienia na podstawie
zawartości już niedługo okaże się bardzo przy−
datna. W tej chwili nie ma to znaczenia. Nie−
zależnie od formatu zostanie on automatycz−
nie rozpoznany przez programator na pod−
stawie rozszerzenia i dane zostaną poprawnie
zinterpretowane, a następnie wczytane.
Ja wczytuję tutaj plik lutown.hex . Jeśli ro−
bisz to samo – pamiętaj o ustawieniu w liście
wyboru zatytułowanej „Pliki typu” pozycji
„Intel HEX”. Inaczej pliki z rozszerzeniem
HEX nie będą widzialne. Ilustruje to rysunek 3 .
W obszarze podglądu zawartości bufora,
który do tej pory zapisany był samy−
mi wartościami FF (szesnastkowo),
zobaczysz teraz wczytane właśnie
dane. Po prawej stronie na niebies−
kim tle dostępny będzie podgląd tych
samych danych, reprezentowanych
jednak jako znaki w kodzie ASCI.
Istnieje co prawda możliwość
modyfikowania bufora zarówno
poprzez podanie odpowiedniej war−
tości szesnastkowej, jak i wpisanie
znaków bezpośrednio z klawiatury
w niebieskim polu, jednak możli−
wość ta jest raczej zupełnie nieprzy−
datna w przypadku pamięci programu.
W tej chwili posiadamy już w
buforze dane, jakie należy zapisać do pamięci
programowanego układu. Jest to jednak tylko
pamięć programu. Jak wiadomo, większość
procesorów AVR posiada także nieulotną
pamięć danych EEPROM. Program, który
chcemy uruchomić może wymagać wpisania
odpowiednich danych także do tej pamięci.
Jeśli tak jest istotnie, wśród wygenerowanych
przez kompilator plików znajdziesz plik z roz−
szerzeniem .EEP.
Tak też jest w przypadku przykładowej
stacji lutowniczej. Z plikiem tym było troszkę
problemów, jednak jeśli pobrałeś te same
Programowanie samo
w sobie
Podsumujmy naszą aktualną sytuację: Progra−
mator wczytał już wszystkie dane, które chce−
my zapisać do procesora. Dotyczy to zarówno
pamięci programu, jak i danych. Przełączając
się między zakładkami, możemy podejrzeć,
a nawet edytować zapisywane dane.
Oczywiście to, że dane znajdują się w bu−
forze, wcale nie oznacza, że są już w naszym
docelowym urządzeniu. Jeśli jeszcze tego
nie zrobiłeś, podłącz teraz programator do
procesora. Umieść procesor w programatorze.
Przyda się teraz przycisk identyfikacji proce−
sora. Na rysunku 2 jest to bardziej wysunięty
na lewo przycisk z otoczonych żółtym kolo−
rem. Jeśli połączenie z programowanym ukła−
dem przebiegło pomyślnie, zostanie on ziden−
tyfikowany i automatycznie wybrany z listy
dostępnych układów (kolor niebieski).
W przeciwnym wypadku pojawi się okienko
informujące o kłopocie z identyfikacją układu
– może to oznaczać błędne podłączenie kabla
programującego.
Gdy procesor został już poprawnie wykry−
ty, sprawa jest już bardzo prosta. Aby zapro−
gramować układ, wystarczy użyć przycisku
„Autoprogram”. Ale... tu przykra niespo−
dzianka…
Niestety, nie zawsze się to udaje, a czasem
Automat nie programuje pamięci danych,
tylko pamięć programu.
Ja osobiście preferuję pełną kontrolę nad
układem. W praktyce programowanie prze−
prowadzam więc w następujący sposób, który
przy odrobinie wprawy wcale nie jest dużo
trudniejszy niż programowanie automatyczne,
a pozwala ominąć ewentualne przykre niespo−
dzianki:
Rys. 2
Rys. 3
1. Jeśli nie mam do czynienia z nowym
układem, czyszczę jego pamięć za pomocą
najbardziej wysuniętego na prawo przycisku
spośród oznaczonych na pomarańczowo.
Elektronika dla Wszystkich
27
215232773.010.png 215232773.001.png 215232773.002.png
Programowanie
2. Przełączam zakładkę na FlashROM
i programuję pamięć za pomocą przycisku
oznaczonego na biało (tego z czerwoną
strzałką). Program automatycznie wykonuje
także sprawdzenie poprawności zapisu.
3. Jeśli to konieczne, przełączam się na
zakładkę EEPROM i programuję pamięć
identycznie jak pamięć programu. Trzeba
pamiętać tutaj, że w procesorach AVR nie
da się wyzerować pamięci programu bez
czyszczenia pamięci danych. Ma to na
celu ochronę danych przed niepowoła−
nym dostępem.
Między innymi z tych względów format ten
jest stosowany raczej rzadko. Dużo częściej
spotkamy się z formatem IntelHEX.
Nie będę się wdawał tutaj w szczegółowy
opis całej specyfikacji IntelHEX. Skupię się
jedynie na tak zwanym formacie uproszczo−
nym, mającym zastosowanie przy przestrzeni
adresowej do 64KB.
Na pierwszy rzut oka to, że mamy do czy−
nienia z plikiem formatu IntelHex, a nie z pli−
kiem binarnym, można stwierdzić poprzez
otwarcie pliku za pomocą dowolnego edytora
tekstowego. W przypadku pliku binarnego
zobaczymy prawdopodobnie dość dużą ilość
„chaszczy”, a same dane będą wizualnie cha−
otyczne. Natomiast plik IntelHEX jest pli−
kiem ASCII. Oznacza to, że zapisane w nim
dane kodowane są do poziomu znaków, które
można odczytać w dowolnym edytorze tekstu.
IntelHEX tak jakby był to plik binarny. Ilus−
truje to rysunek 6 .
Gdy okaże się, że posiadany plik obrazu
pamięci EEPROM jest w formacie IntelHEX,
BASCOM nie zechce wczytać go bezpośrednio .
Listing 1
Napisałem oto, jak możesz zorientować
się, że rzeczywiście masz problem. Teraz pora
wyjaśnić, jak sobie z tą trudnością poradzić.
Wydawałoby się, że jedynym sensownym
rozwiązaniem jest wykorzystanie jakiegoś
programu, który umożliwi dowolne przejście
między opisanymi formatami. Na stronie
„Elektroniki Praktycznej” znaleźć można pro−
gram o wdzięcznej nazwie Konwerter HEX−
>BIN. Można i tak, ale chce Ci pokazać dużo
prostszą drogę. Można zastosować małą
sztuczkę. Aby BASCOM „zrozumiał“, że
ma do czynienia z plikiem w formacie
IntelHEX, a nie ze zwykłym formatem
binarnym, konieczne jest, aby posiadał on
rozszerzenie HEX. Zmieńmy więc całą
nazwę naszego pliku na eeprom.hex.
Teraz po wybraniu zakładki EEPROM
wczytujemy do niej nasz plik o zmienio−
nej nazwie (pamiętaj o odpowiednim
ustawieniu pola „Pliki typu”).
I to cała filozofia. Plik zostanie prawi−
dłowo wczytany do bufora, który jest
aktualnie aktywny (do bufora EEPROM).
I o to nam chodziło!
Uwaga 1: Doświadczenie wykazuje, że przy−
cisk odświeżenia zawartości bufora ( Buffer−>
Reload ) nie działa prawidłowo z plikami
spoza projektu utworzonego poza BASCOM’−
em. W praktyce oznacza to, że w przypadku
gdy kod programu został poprawiony i chce−
my wczytać nowy kod do bufora, trzeba po
prostu ponownie otworzyć odpowiedni plik.
Uwaga 2: Jeśli sam procesor nie ma pod−
piętego zasilania, możliwa będzie jego iden−
tyfikacja. Okazuje się jednak, że moc dostar−
czana przez programator nie umożliwia już
prawidłowego przebiegu procesu programo−
wania. Jeśli więc pasek postępu progra−
mowania zatrzymuje się w miejscu – sprawdź
zasilanie urządzenia (programatora), w któ−
rym znajduje się programowany element.
Według powyższego opisu bez żadnych
problemów zaprogramujesz procesor w więk−
szości sytuacji. Mimo tego, że często pora−
dzisz sobie bez informacji, jakie zawarłem
dalej – polecam ich przeczytanie. Może się to
okazać przydatne w przyszłości.
Rys. 4
Plik składa się z rekordów, każdy zakończony
znakiem końca linii oraz powrotu karetki (13,
10 dziesiętnie). Koniec pliku oznaczony jest
przez specjalną sekwencję. Ogólną zasadę
tworzenia rekordu pokazuje rysunek 4 .
Każdy bajt jest reprezentowany przez kod
szesnastkowy zapisany za pomocą dwóch
znaków ASCII. Listing 1 pokazuje dane
pamięci EEPROM zapisane w formacie Intel−
HEX. Jest to dokładnie to, co ujrzysz, gdy
otworzysz plik w formacie IntelHEX w zwyk−
łym notatniku. Dla porównania rysunek 5
pokazuje wczytane dane.
Rozumiesz już, jak łatwo jest odróżnić te
pliki od siebie? Zwykle, gdy wczytasz dane
do bufora i ujrzysz w niebieskiej części
okienka, że dane układają się w coś podob−
nego do tego
co widzisz na lis−
tingu 1, możesz
mieć pewność,
że poleciłeś
programatorowi
wczytać plik
Uwagi końcowe
Podczas pisania artykułu korzystałem z ma−
teriałów zamieszczonych na stronie semmix.pl .
Dokładny link do opisu formatu IntelHEX:
http://semmix.pl/mipc/specyf/filehex/inhexup.htm
Opisałem tutaj, jak posłużyć się do
naszych celów programem−programatorem
wbudowanym w pakiet BASCOM. Choć pro−
gramuję także w innych językach, bardzo chęt−
nie posługuję się opisanym programem. Jest on
dla mnie zupełnie wystarczający, a przy tym
prosty w obsłudze. W sieci dostępny jest dar−
mowy program PonyProg, który, jak wynika
z opisu, również umożliwia obsługę naszego
sprzętu. Interfejs wygląda dość interesująco.
Zainteresowanych odsyłam na stronę źródłową:
http://www.lancos.com/prog.html
Mimo że program ten jest inny niż opisany,
trzeba pamiętać, że zasady jego obsługi się nie
zmieniają. Nadal istnieją bufory, przyciski
kasujące procesor, zapisujące do niego dane.
To bardzo dobra wiadomość: jeśli dobrze
poznałeś jeden programator –
będziesz umiał obsłużyć je
wszystkie.
Na koniec życzę efektywnego
i bezbolesnego programowania!
HEX, BIN,
a pamięć EEPROM
Poprzednio wspomniałem o ewentualnych
problemach z plikiem zawierającym obraz
(image) pamięci danych. Pamiętasz – plik
z danymi pamięci programu można spotkać
z dwoma rozszerzeniami. Będzie to HEX albo
BIN. Oba te rozszerzenia oznaczają dwa różne
formaty. Okazuje się, że obraz pamięci EEP−
ROM także może zostać wygenerowany przez
kompilator w jednym z tych dwóch formatów.
Jednak rozszerzenie zawsze będzie takie samo
(EEP)... Programator BASCOM nie posiada
możliwości ich automatycznego rozróżnienia,
co może spowodować zapisanie do pamięci
zupełnie innych danych, niż byśmy chcieli.
Przy odrobinie wiedzy jednak rozpoznamy
bez problemu format pliku sami i w razie
potrzeby przeprowadzimy jego konwersję.
Dużo prostszy w konstrukcji jest tak
zwany format binarny. Plik taki zawiera po
prostu dokładny obraz danych, jakie należy
wpisać bezpośrednio do pamięci. Nie ma tutaj
informacji, pod jaki adres należy zapisać dane
– domyślnie będą wpisywane od początku
pamięci. Brak jakichkolwiek mechanizmów
synchronizacji czy wykrywania błędów.
Koniec danych wyznacza tutaj koniec pliku.
Rys. 5
Rys. 6
Radosław Koppel
radoslaw.koppel@edw.com.pl
28
Elektronika dla Wszystkich
215232773.003.png 215232773.004.png 215232773.005.png 215232773.006.png
Zgłoś jeśli naruszono regulamin