Image37 (10)

Image37 (10)



Programowanie

Programowanie

L.r.J .... I


return;


Listing 50

Modyfikacja pliku harddej.h.

// nterfejs i2l #def1ne i2c_sua^oki b *define 12c_sda 0 fldefine I2C_SCL=>0RT & #define I2C_SCL 1 4define I2C_SPEED 100000

// Wyświetlacz *define LCD.RS 2 *define LCO_RSPORT O #define LCD_C 4 Adcfine LCD.CPORT D #define LCD_RW 3 Jdcfinc LCD_RWPORT D


Listing 51 Modyfikacja pliku harddef.h int raam(void)

{

// Dzielenie 2egara przez 2

CLKPP - 1«CLKPCE!

CLKPR ■ 1«CLKPS0J

// Inicjacja

portb ■ l «I2C_sru | i«T?r_sri.;

p^rtp ■ ~(l«i.rn f. j l«T.nn rw);

nrmn - 1«t.cd f. 7 1«lcd_rs~ I ;«lcd_rw;

DDRB ■ 0x0F«LCD_D4 | 1«I2C_SCLJ

lcd_initO;

// Koniec inicjacji (...)


interesujących bitów a nawet ich rozmieszczenie są identyczne. Znaczenie bitów CS02..CSO0 jest w obu układach takie samo Okazje się, że pozostawiając niewystępujące w poprzednim układzie bity wyzerowane, uzyskamy licznik działający w praktycznie identyczny sposób jak do tej pory. Bardzo nas to cieszy, ponieważ oszczędza nam dalszej pracy. Program powinien dać się teraz skompilować i uruchomić. Pojawi się jednak kilka ostrzeżeń. Nie jest to mc groźnego i zaraz się nimi zajmiemy. Niezależnie od występujących ostrzeżeń program już działa.

Rys. 36 Porównanie rejestrów sterujących licznikiem TO w obu procesorach

TCCRO

-    |    -1    -    1 002 l C8Q1 | C9C0 | ATOOS2313

oa*>ąć^Tfta>»i] c»ca I oaoi | caoo | ATmega102

TIMSK

I Km tOCSIAl - I - ITIOSII ■ MMI - 1 ATB0S2313 | lam |oa*iAloałi»l ccm [ nogi | ioe2    ATmegal62

Trochę o stałych, ich typach i obcinaniu

Nie będę dokładnie opisywał wszystkich możliwości typów stałych w programach C. Teraz skupimy się tylko na tym. dlaczego nasz zmieniony program zaczął nagle generować ostrzeżenia.

Kompilator domyślnie nadaje wszystkim stałym typ ze znakiem o wielkości najmniejszej, która jest w stanic pomieścić podaną liczbę. Zauważmy, że w płytce AVT3500 bit 7 portu B połączony był z kropką dziesiętną, co sprawiło, że nie był przez nas wykorzystywany. Teraz sytuacja jest inna, co daje nam możliwość zwrócenia uwagi na pominięty poprzednio szczegół. Ile wynosi liczba 1«7? Jest to 128. W zmiennej ośmiobitowej ze znakiem możemy zapisać wartości z przedziału -128.. 127. Tak więc jeśli ustawiamy najstarszy bit (włączamy segment G wyświetlacza), kompilator domyślnie przypisuje danej stałej typ szesnastobkowy. Stała ta ma wyzerowany starszy bajt. Jednak już po chwili wszystkie wyzerowane bity zmieniamy w jedynki za pomocą operatora negacji bitowej. Ostatecznie, kompilator „zauważa”, żc wpisujemy stałą szesnastobitową do ośmiobitowej zmiennej lub tablicy. Operacja taka zostanie prawidłowo wykonana - starsze bajty zostaną obcięte. Jednak kompilator ostrzeże nas lojalnie, że tracimy część informacji.

Niech nie wprowadzi Cię w błąd moje określenie „już po chwili ". Pisząc to, mam na myśli kolejność wykonywania operacji. Procesor nic nie będzie oblicza!. W kodzie pojawi się tylko wynik całego działania, jako że złożone jest ono jedynie ze stałych.

Ponownie, tak jak zrobiliśmy to w- części 5, aby nie pogubić się w gąszczu ostrzeżeń, ozna czymy, że wiemy, co robimy za pomocą rzutowania. Zapis przypominam na listingu 49, jednocześnie wskazując miejsca modyfikacji.

Listing 41) Zabieg usuwający ostrzeżenia /Hijun iujucc się pinie ca s kompilacji

picy uinL8 L y WiutCyftClG] »

r _

// O

(...), // 1

mm

V0id WyswietlDEC(uir.tl 6_t var) uint8 t n;

i f(var > 9999)

for(n*0; n<4; n++)

g DaneWyswietlacza[n]

l~(l«LED g);

}

(...)

Przenoszenie programu PCF8591

Przy przenoszeniu ostatnio napisanego programu na nowa płytkę napotkamy podstawowy problem: Nowy układ nie ma na pokładzie przetwornika, dla którego program został napisany. Jednak posiadacze AV13500 mogą wykorzystać zawarty na niej element. Wystarczy podłączyć nowa płytkę do złącza wyprowadzającego interfejs I2C. Konieczne jest także wyjęcie z podstawki procesora AT90S2313 tak aby jego działanie nie zajmowało interfejsu. Połączenie pokazałem na fotografii 2. Nie zapomnij o odpowiednim ustawieniu zworki LCDK na płytce wykonawczej AYT3505. Po wykonaniu połączenia zgodnie z fotografią spójrzmy na tabclkę 5. Przedstawia ona aktualne porównanie przypisania końcówek.

Skopiuj poprzednią wersję programu. 1 rozpocznijmy jej modyfikację. Pamiętaj o zaznaczeniu zmiany procesora w pliku

Tabela 5 Przyporządkowanie połączeń na obu płytkach dla programu PCF8591

Funkcja

AVT3500

AVT3505

LCD RS

PortbB.2

Por.D.2

icn_Rw

-

PortD 3

LCD_E

PoitB 1

PonD.4

lCD_LED

-

Pon.D.5

LCD_DU

-

PortB.U

LCD_D1

-

PonB.1

LCD_D2

.

PortB.2

LCD„D3

-

PonB.3

LCD_D4

PortB4

PoftB.4

LCD_D5

PoftB 5

PonB.5

LCD_D6

PortB6

PonB.6

LCD D7

PoftB 7

P0ftB.7

SDA

PortDfi

PortBf)

SCL

PoitD.5

PortB.1

3W1

PuitD 0

■■

SW2

Portu 1

pont.2

m a k efi l e.

Następnie otwieramy plik harddef.h i zaznaczamy w nim zmiany, jakie zaszły, zgodnie z tabelą 5.

Zmodyfiko wany fragment pliku pokazuje listing 50. Zauważ, że dodana została definicja LCD KW.

Dalej, tak jak poprzednio, podzielimy częs totliwość zegara przez 2. Dodatkowo jednak, w funkcji main, konieczna jest modyfikacja inicjacji portów. Jest to ważne z dwóch powodów. Po pierwsze, z wyprowadzeniami proce sora mamy teraz połączone wyprowadzenie RW wyświetlacza, na którym musi znaleźć się stan niski, aby wyświetlacz był widziany od strony programowej, tak jak ten zainstalowa ny na poprzedniej płytce. Po drugie, musimy

pamiętać, że porty konfigurowaliśmy, operu jąc bezpośrednio na ich nazwach. Wszystkie zmiany funkcji main pokazuje listing 51.

W tym momencie program jest gotowy do kompilacji oraz powinien działać prawidłowo na nowej płytce. Zmodyfikowane kody źród łowe oraz skompilowane programy, jak zwyk-lc, dostępne są na Elportalu.

Podsumowanie

W dzisiejszym, nietypowym odcinku, uruchomiliśmy stare programy na nowym układzie, jednocześnie oswajając płytkę. Okazało się, żc z pewnym uproszczeniem, procesor ATme-ga!62 można traktować jako rozwinięcie AT90S2313, co oznacza w praktyce, że może my uzyskać bardzo podobne działanie jego peryferii, po prostu nie ruszając dodatkowych, pojawiających się bitów. Pokazałem ogólnie, jak dokonać modyfikacji programu, by działał prawidłowo przy innej konfiguracji sprzętu. Bardzo wcześnie zaczęliśmy pisać programy tak, aby ich prosta modyfikacja była możliwa, co dzisiaj przyniosło wymierne korzyści.

W najbliższym odcinku zajmiemy się funkcjami, które nic mogły się pomieścić w AT90S2313.

Radosław Koppcl

radoslaw. koppel(ą).elportaLpi

Elektronika dla Wszystkich Styczeń2006 47


Wyszukiwarka

Podobne podstrony:
Image35 (10) Programowanie Rys. 35 Konfiguracja procesora Dzisiejszy odcinek będzie dość nietypowy.
img1 (10) Program wykładu Zadania administratora DBMS na przykładzie PostgreSGL: ♦    
12 Paweł Stacewicz być może programy komputerowe działające i/lub modyfikowane w sposób losowy lepie
Actualitć dc Kardiologie. 123 10    - PROGRAMMATION DE LA RECHERCHE. — Cest sous ce t
82216 IMG717 (2) 10 Program estetyki strukturalne} jednego kierunku literaturoznawczego. Jakobson z
TMP32 144 5 Języ ki specyfikacji dla układów programowalnych sygnałów grupowych Zatem modyfikacja
T0P-10 PROGRAMÓW DO SZKOŁY!
010 1 10 Programuję w językach C/C++ i C++ Builder •    prekompilacja - na tym etapie
10 2. Programowanie podstawowych funkcji logicznych ’■ T Prawie wszystkie zadania sterownicze można
110 111 I 10 Programowanie liniowe całkowito!iczbowe jest celowy, gdyż nie jest możliwe wygenerowani

więcej podobnych podstron