I znowu trudne wybory

Kiedy już przebrniemy przez teorie elektroniki analogowej, przychodzi czas na coś więcej. Mnogość opisywania układów z wykorzystaniem mikrokontrolerów w czasopismach i książkach elektronicznych, jest tak duża, że prędzej czy później zapragniemy tworzyć takie układy. Na wstępie trzeba dowiedzieć się trochę, a to trochę w świecie elektroniki to bardzo dużo, o samych mikrokontrolerach i ich działaniu. Jak już poznamy trochę cyfrową część elektroniki, następuje moment, w którym musimy wybrać najbardziej odpowiadający nam procesor do programowania. Niby można uczyć się programować układy cyfrowe z kilu popularnych rodzin, ale wiąże się to z dodatkowymi kosztami kupna lub zbudowania samemu kilku programatorów. Niestety z tego co sie dowiedziałem różne mikrokontrolery programuje się w inny sposób. Do tego do pierwszych programów potrzebne nam będzie opanowanie architektury danego układu cyfrowego. Między innymi dlatego najrozsądniejszym rozwiązaniem jest kupno programatora pod daną rodzinę mikrokontrolerów i nauka programowania w nich.

Co ja wybrałem

Ja również w pewnym momencie doszedłem do wniosku, że w dzisiejszych ?cyfrowych? czasach nauka elektroniki analogowej powinna iść w parze z nauką jej cyfrowej strony. W sumie to nie ja zadecydowałem o tym jaką rodzinę mikrokntrolerów będę programował. Dostałem w prezencie programator razem z całym ?osprzętem? do programowania mikrokontrolerów z rodziny PIC. Na początku, kiedy dopiero czytałem podstawowe informacje o układach cyfrowych , chciałem zacząć naukę od programowania AVR-ów. Dlaczego? Ponieważ jest masa książek i darmowych artykułów w internecie o ich programowaniu, budowie itp. Ja jednak zacząłem się uczyć wszystkiego co można o PIC-ach. I wiesz co? Naprawdę nie żałuje tego. Im więcej o nich czytam tym bardziej podziwiam ich zalety i cieszę się że nie wybrałem AVR-ów :) . Rzecz jasna jak już liznę trochę programowania PIC-ów zajmę się rodziną AVR.

PIC, pierwszy program

listopad 5th, 2008

Lekcja IV zaczynamy

Na trzech ostatnich lekcjach zwięźle pisałem o niezbyt ciekawej teorii. Niestety, albo i stety, trzeba ją poznać. Chcąc programować musisz poznać budowę i najważniejsze rejestry PIC-a, więc jeżeli jeszcze nie przeczytałeś poprzednich lekcji radze choć po łebkach je przeczytać.

Pierwszy program

Wreszcie trochę praktyki. Nasz pierwszy program ustawi jeden z pinów na stan wysoki, czyli przykładowo włączy diodę LED podłączoną do jednego z portów PIC-a. W programie nie będą stosowane synonimy adresów rejestrów. Będą one podawane w normalnej formie. Na dalszych lekcjach nauczymy się podkładać adres pod nazwę. Mieliśmy zacząć, więc zaczynamy. Na samym początku musimy zmienić Bank 0 na Bank 1. Wiesz już jaki rejestr odpowiada za tą zmianę i jaki bit musimy wysłać? Oczywiście jest to rejestr o nazwie STATUS. Pod adres, na którym się znajduję, musimy wysłać bit 1. Znajduję się on pod adresem 03h, więc wysyłamy tam do bitu 5 jedynkę. W języku asemblera będzie to wyglądało tak:

BSF 03h,5

Po angielsku znaczy to Bit Set F, gdzie litera F oznacza, że chcemy użyć pamięci logicznej. Po polsku znaczy to: ustaw stan wysoki (czyli logiczne 1) na bicie 5.

Jesteśmy już w Banku 1, więc możemy przejść trochę dalej. Teraz ?włożymy? ciąg liczbowy do rejestru W. Mówiąc ciąg liczbowy mam na myśli liczby, które ustawią porty na wyjściowe i wejściowe. Robimy to za pomocą komendy:

MOVLW 06h

W dosłownym tłumaczeniu znaczy to włóż ciąg liczb do rejestru W. Znowu użyłem ciąg licz, bo naprawdę nie ma pojęcia jak to inaczej nazwać :( . 06h to liczba w zapisie heksagonalnym. W zapisie binarnym wyglądała by ona tak 00110 Wówczas nasza komenda wkładania do rejestru W wyglądałaby tak:

MOVLW b?00110?

Idziemy dalej. Zajmiemy sie teraz rejestrem TRISA. Musimy włożyć do niego ciąg liczb z rejestru W. Robimy to za pomocą asemblerowskiej komendy:

MOVWF 85h

Jest to coś w rodzaju ?przenieś z rejestru W do TRISA?, dzięki temu stawiamy2 i 3 pin PORTA na wyjściowy. Już jest dobrze ustawiliśmy dwa piny na wyjściowe teraz trzeba nadać im stan wysoki, aby nasz dioda zaczęła świecić. Najpierw dodajemy ciąg liczb do rejestru W za pomocą komendy MOVLW 06h, która ustawi na pinach 2 i 3 stan wysoki. Wartość tą przerzucamy teraz do rejestru PORTA, znajdującego się pod adresem 05h. Pewnie domyślasz się już jak będzie wyglądała ta komenda. Jednak jeszcze przed tą instrukcją musimy wrócić do Banku 0. Robimy to za pomocą takiej funkcji:

BCF 03h,5

Komenda ta jest analogiczna do tej pierwszej z tym, że zamiast set mamy clear. Czyli zamiast ustawiać 1, ustawiamy 0.

MOVWF 05h

Ustawiliśmy już stan wysoki na pinach 2 i 3, więc dioda podłączona do nich powinna się zapalić. Na koniec jeszcze zapętlimy program przy małej pomocy komendy goto.

Cały program powinien wyglądać tak:

BSF 03h,5 ;zmiana Banku na 1
MOVLW 06h ;włożenie 00110 do rejestru W
MOVWF 85h ;przeniesienie wartości z rejestru W do TRISA
BCF 03h,5 ;zmiana Banku na 0
MOVLW 06h ;włożenie do rejestru W 00110
MOVWF 05h ;przeniesienie wartości z rejestru W do PORTA
stop:
goto stop ;zapętlenie
end ;koniec programu

Mam nadzieję, że wszystko będzie pięknie działało. Następna lekcja dopiero jak sam nauczę się wyższego poziomu :) .

Młody programista

listopad 5th, 2008

Wybór języka

Najtrudniejszą rzeczą jaką miałem zrobić przed zabawą z PIC-ami był wybór języka programowania. Niby to takie proste, ale jednak nie zupełnie. Na początku, kiedy nie miałem jeszcze gotowego programatora rozpocząłem kurs C++. Poczytałem trochę i zrobiłem nawet własny kalkulator taki, gdzie liczby wpisujemy do programu, a potem wybieramy co z nimi zrobić. Wszystko ładnie, ale czy tak samo programuje się mikroprocesory?  Chyba nie?  Zacząłem szukać na forum i znajdowałem tylko kursy programowania PIC-a w C. Jakoś ten C mi nie zbyt pasował, bo naczytałem się że jest on już przestarzały i nie powinno uczyć sie w nim programować. Musiałem jednak zacząć lekturę kursów C, ponieważ nie mogłem znaleźć nic innego. Kupiłem ciekawie zapowiadającą się książkę ?Programowanie PIC w C? i rozpocząłem owocną lekturę. Autor tej książki pisał, że nawet jeżeli ktoś nie ma zamiaru nigdy programować w asembler, to powinien chociaż pozna podstawy tego języka. Idąc za radą autora znalazłem bardo fajni angielski kurs o programowaniu PIC-ów w asemblerze. Właśnie teraz uczę się tej trudnej sztuki :) .

PIC, charakterystyka rejestrów

listopad 5th, 2008

Lekcja III rejestry i porty

Ostatni pisałem o tym jak zbudowany jest PIC wewnątrz. Teraz czas na poznanie najważniejszych rejestrów, ich działania i adresów. Jest to niezbędne do nauki programowania w asemblerze.

STATUS

Rejestr status znajduję się pod adresem 03h. Używamy go do przechodzenia z Bank 1 do Bank 0 i na odwrót. Ustawiając 1 na piątym bicie STATUS przechodzimy z Bank 0 do Bank 1. Natomiast ustawiając 0 na bicie piątym powracamy do Banku 0.

TRISA i TRISB

Znajdują się w adresach 85h i 86h. Służą do zmiany funkcji potów. Czyli dzięki nim ustawiamy czy dany pin ma być wyjściowy (output), czy wejściowy (input). W celu ustawiania portów, wysyłamy bity 0 lub 1. W PORTA mamy 5 pinów, czyli wysyłamy 5 bitów, ponieważ za każdy pin odpowiada inny bit. Chcąc ustawić pin 3 jako port wejścia, a resztę portów jako porty wyjścia wysyłamy kod 00100. Wynika z tego, że wysyłając 1 ustawiamy port jako wejściowy, a wysyłając 0 jako port wejścia.

PORTA i PORTB

Znajdują sie one w adresach 05h i 06h. Za ich pomocą ustawiamy stan na pinach danego rejestru. Możemy ustawić stan wysoki, za pomocą jedynki lub stan niski, za pomocą 0. Stany ustawiamy tak samo jak rodzaj portów w TRISA i TRISB. Dzięki nim możemy również odczytywać stan na pinach, w przypadku ustawienia portów na wyjściowe.

W

Bardzo ważny rejestr, do którego można ?włożyć? części kodu. Zapomniałem jak się dokładnie one nazywały? Po takim włożeniu możemy je przenosić lub dodawać do nich kolejne części.

W następnej części będzie przykładowy kod ustawiania stanu wysokiego na jednym z pinów. Przećwiczymy wtedy używanie wszystkich tych rejestrów. Na razie myślę o jakimś pierwszym prostym projekcie na PIC-u :) .

PIC, poznajemy budowę

listopad 5th, 2008

Lekcja II architektura

Jeżeli chcemy zacząć programowanie danego mikrokontrolera musimy najpierw poznać jego budowe. Wieksozść PIC-ów podzielona jest na dwa banki: BANK 0 i BANK 1. W każdym z nich znajdują się inne rejestry. Budowe poszczególnych PIC-ów możesz poznać wpisując w google: nazwapica.pdf. Wyskoczą nam wtedy wyniki z orginalnymi danymi tego PIC-a w pdf. Poznanie architektury mikroprocesora, który programujemy jest bardzo ważen. Bez tej wiedzy nie moglibyśmy skutecznie przenosić danych, bo nie wiedzielibyśmy gdzie i po co.  Osobiście nie musze szukać budowy w internecie, poniewaz zainwestowałem w bardzo ciekawą książkę ?Programowanie mikrokontrolerów w C?. Zawiera ona schemat budowy i funkcje najczęściej występujących PIC-ów. Do tego jej większa część poświęcona jest przykładowym programom na PIC-a. Szkoda tylko że programy sa od razu na wysokim poziomie.

PIC, podstawy

listopad 5th, 2008

Dlaczego różnie się programuje różne mikrokontrolery

Nawet sobie nie wyobrażacie mojego zdziwienia, kiedy w końcu zorientowałem się, że kurs programowania na Atmega nie będzie do niczego potrzebny w programowaniu PIC-a. Może to się wydać śmieszne, ale naprawdę nie wiedziałem, że mają one inne komendy w asemblerze i że ich budowa wpływa na to jak programujemy. Tak się cieszyłem, że znalazłem przystępny kurs programowania autora, którego znam z kilku bardzo ciekawych i napisanych prostym językiem publikacji. Niestety nie było tak kolorowo, bo kurs był pod Atmege. Niestety trzeba było szukać dalej no i znalazłem.

Lekcja I, co będzie nam potrzebne

Do rozpoczęcia zabawy z PIC-ami potrzebujemy programatora. Możemy go złożyć sami, przy okazji ucząc się ciekawych rzeczy lub kupić w sklepie. Ja osobiście sprawiłem sobie cacko, dzięki któremu nie muszę do sprawdzenia działania programu budować układu. Wszystkie potrzebne rzeczy ma w sobie układ, który kupiłem. Trzeba przyznać, że nie jest on tani. Zapłaciłem za niego coś koło 200 złotych, ale jestem bardzo zadowolony z jego działania.

Kolejną potrzebną rzeczą jest programator. W większości kursów polecają pakiet MPLAB, ale ja ze względu na prostotę najpierw zapisuje program w notatniku. Następnie zapisuję z końcówką .asm i programuje za pomocą ICproga. Na razie jestem na niskim poziomie programowania, ale pewnie kiedy w końcu nauczę się programować docenię zalety pakietu MPLAB.

Jutro kolejna lekcja programowania PIC-ów z amatorem :) .

PIC

listopad 5th, 2008

Pic, mój pierwszy mikrokontroler

Jeszcze nie tak dawno temu mikrokontlorery były dla mnie czarną magia. Niby czytałem trochę o nich, ale nie mogłem zrozumieć na jakiej zasadzie działają. Jako, że mój brat robi kolejke sterowaną poprez DCC, przy budowie komponentów do tego systemu używano PIC-ów. Dostałem programator PIC-a z całym osprzętem. Wziąłem sie więc za próby programowania. Nigdy jeszcze tego nie robiłem, więc było dosyć trudno. Na początku szukałem jak zaprogramowac to cudeńko w basicku, ale wyczytałem na jakimś forum że najlepiej zacząć od asemblera, czyli języka maszynowego. Znalazłem polską strone o programowaniu PIC-ów w asemblerze, ale była napisana tak zawodowo, że nic z tego nie zrozumiałem. Na jednym z elektronicznych for ktos polecił angielką stronę na ten temat. Wszedłem więc na nią choć mój angielski jest strasznie kulawy. O dziwo bez trudu rozumiałem o co tam chodzi, dzięki zamieszczanym obrazką i komentarza do programu. Tak więc w kolejnych dniach będę opisywał na blogu to co już wiem o programowaniu.