m32

background image

Moduł z mikrokontrolerem

ATMEGA32

Białystok, sierpień 2015

background image

Andrzej Pawluczuk: „Moduł z mikrokontrolerem ATMEGA32”

-2/9-

Copyright (C) 2015, Andrzej Pawluczuk. email: apawluczuk@vp.pl

Wszystkie prawa zastrzeżone.

Redystrybucja i używanie, czy to w formie tekstu źródłowego, czy w formie kodu

wykonywalnego, są dozwolone pod warunkiem spełnienia poniższych warunków:

1. Redystrybucja tekstu źródłowego musi zawierać powyższe zastrzeżenie

własności praw autorskich, niniejszą listę warunków oraz poniższe oświadczenie
o wyłączeniu odpowiedzialności.

2. Redystrybucja kodu wykonywalnego musi zawierać w dokumentacji lub w

innych materiałach dostarczanych wraz z kopią oprogramowania powyższe
zastrzeżenie własności praw autorskich, niniejszą listę warunków oraz poniższe
oświadczenie o wyłączeniu odpowiedzialności.

3. Nazwisko autora nie może być użyte celem sygnowania lub promowania

produktów pochodzących od tego opracowania, bez szczególnego, wyrażonego
na piśmie zezwolenia.

To opracowanie jest dostarczone przez posiadacza praw autorskich „takim, jakie jest”.

Każda, dorozumiana lub bezpośrednio wyrażona gwarancja, nie wyłączając dorozumianej
gwarancji przydatności handlowej i przydatności do określonego zastosowania, jest
wyłączona. W żadnym wypadku posiadacz praw autorskich nie może być odpowiedzialny
za jakiekolwiek bezpośrednie, pośrednie, incydentalne, specjalne, uboczne i wtórne
szkody (nie wyłączając obowiązku dostarczenia produktu zastępczego lub serwisu,
odpowiedzialności z tytułu utraty walorów użytkowych, utraty danych lub korzyści, a
także przerw w pracy przedsiębiorstwa) spowodowane w jakikolwiek sposób i na
podstawie istniejącej w torii odpowiedzialności kontraktowej, całkowitej lub deliktowej
(wynikłej zarówno z niedbalstwa, jak i innych postaci winy), powstałe w jakikolwiek
sposób w wyniku używania lub mające związek z używaniem oprogramowania, nawet
jeśli o możliwości powstania takich szkód ostrzeżono.

Zastrzeżonych nazw firm, nazw produktów i znaków towarowych użyto w celu ich

identyfikacji.

background image

Andrzej Pawluczuk: „Moduł z mikrokontrolerem ATMEGA32”

-3/9-

rzydatność różnych modułów, szczególnie zawierających rozbudowane (w
sensie liczby wyprowadzeń) elementy przewidziane do montażu SMD nie
podlega dyskusji. Takimi elementami z pewnością są mikrokontrolery. Sam

mikrokontroler ma kilkadziesiąt delikatnych wyprowadzeń. Taki komponent musi
zostać do czegoś przylutowany. Jak przylutowany, to koniecznie należy
„wyprodukować” odpowiednią płytkę PCB. Warto przewidzieć na tej płytce jakieś
dodatkowe elementy, które często występują w środowisku testowym
mikrokontrolera. Zdecydowałem się na zabudowę zestawu LED'ów oraz interfejsu
RS232. Nieodzownym również elementem jest przyłącze do programatora pamięci
FLASH wewnątrz mikrokontrolera. Pozostałe porty są wyprowadzone na złącze
szpilkowe, które pozwoli na integrację modułu z płytą “Solderless Breadboard”. Tak
określone wymagania spełnia moduł, którego schemat przedstawiają kolejne
ilustracje.

P

Ilustracja 1 zawiera mikrokontroler i niezbędne do jego działania elementy:

zespół resetowania, rezonator kwarcowy do „napędzania” procesora oraz przyłącze
do programatora ISP.

W konstrukcji zostało przewidzianych 8 LED'ów, które są przyłączone do portu B

mikrokontrolera. Wybór portu jest podyktowany tym, że port ten jest współużywany
również przez programator ISP i w trakcie jego działania nie mogą być zakłócane
odpowiednie linie. Zespół LED'ów odseparowany od mikrokontrolera przez układ
ULN2803 nie generuje żadnych sygnałów na liniach programatora. Dodatkowo
odciąża prądowo port mikrokontrolera (ilustracja 2). Zastosowane rozwiązanie
oznacza również, że zapalenie diody LED wymaga ustawienia na porcie stanu
wysokiego.

Ilustracja 1: Mikrokontroler i jego "żywotnie” istotne okolice

background image

Andrzej Pawluczuk: „Moduł z mikrokontrolerem ATMEGA32”

-4/9-

Kolejnym istotnym elementem jest interfejs RS232 pozwalający na eksperymenty

z transmisją szeregową (ilustracja 3). Zastosowany jest tu układ ST3232, będący

mutacją znanego układu MAX232, który może być zasilany napięciem obniżonym.
Pozwala to na eksperymenty z zasilaniem procesora ze źródła napięcia o wartości
zarówno +5V jak i +3,3V.

Pozostałe niewykorzystane w module wyprowadzenia są przyłączone do złącz

szpilkowych przewidzianych do stworzenia elektrycznego kontaktu tych portów z
płytą „dziurkowaną” (ilustracja 4).

Ilustracja 2: Zespół LED'ów

Ilustracja 3: Interfejs RS232

background image

Andrzej Pawluczuk: „Moduł z mikrokontrolerem ATMEGA32”

-5/9-

Zgodnie ze schematem połączeń, zaprojektowana jest

niewielka płytka PCB (ilustracje 5, 6, 7).

Po przylutowaniu wszystkich elementów powstaje wyrób

finalny (ilustracja 9).

Ilustracja 4:
Niewykorzystane piny są
wyprowadzone na złącze

Ilustracja 5: Ścieżki strony TOP

Ilustracja 6: Ścieżki strony BOTTOM

background image

Andrzej Pawluczuk: „Moduł z mikrokontrolerem ATMEGA32”

-6/9-

Finalny wyrób:

Do sprawdzenia modułu powstaje prosty program (co prawda program nie

weryfikuje całości modułu, nie transmituje przykładowo nic przez interfejs RS232).
Jego zadaniem jest wyświetlanie na 8-bitowym zestawie LED'ów kolejnych

Ilustracja 7: Rozmieszczenie elementów

Ilustracja 9: Moduł docelowy

Ilustracja 8: Rozmieszczenie styków modułu

background image

Andrzej Pawluczuk: „Moduł z mikrokontrolerem ATMEGA32”

-7/9-

inkrementowanych liczb w postaci binarnej. Pierwsze „włączenie do prądu”
przebiega pomyślnie. Programator „zobaczył” nowego proca. W takim wypadku
zostają przestawione fabryczne „fuse” na takie, które mi odpowiadają. Operacja się
powidła, procek żyje.

Tekst programu jest następujący.

;
(…)

.nolist

;*******************************************************
.include "m32def.inc"
;*******************************************************

.list
.listmac

;-----------------------------------------------------------------------------
.def acc

= r16

;-----------------------------------------------------------------------------
.dseg
;

;VAR

Cnt : .byte 1

; Cnt : BYTE ;

;-----------------------------------------------------------------------------

.cseg

;*******************************************************
;*******************************************************
;** **
;** CODE SEGMENT **
;** **
;*******************************************************
;*******************************************************
;-----------------------------------------------------------------------------

.org

0

;

rjmp

ResetProcessor

;

;-----------------------------------------------------------------------------

.org

INT0addr

; External Interrupt Request 0

reti

;

;-----------------------------------------------------------------------------

.org

INT1addr

; External Interrupt Request 1

reti

;

;-----------------------------------------------------------------------------

.org

INT2addr

; External Interrupt Request 2

reti

;

;-----------------------------------------------------------------------------

.org

OC2addr

; Timer/Counter2 Compare Match

reti

;

;-----------------------------------------------------------------------------

.org

OVF2addr

; Timer/Counter2 Overflow

reti

;

;-----------------------------------------------------------------------------

.org

ICP1addr

; Timer/Counter1 Capture Event

reti

;

;-----------------------------------------------------------------------------

.org

OC1Aaddr

; Timer/Counter1 Compare Match A

reti

;

;-----------------------------------------------------------------------------

.org

OC1Baddr

; Timer/Counter1 Compare Match B

reti

;

;-----------------------------------------------------------------------------

.org

OVF1addr

; Timer/Counter1 Overflow

reti

;

;-----------------------------------------------------------------------------

background image

Andrzej Pawluczuk: „Moduł z mikrokontrolerem ATMEGA32”

-8/9-

.org

OC0addr

; Timer/Counter0 Compare Match

reti

;

;-----------------------------------------------------------------------------

.org

OVF0addr

; Timer/Counter0 Overflow

reti

;

;-----------------------------------------------------------------------------

.org

SPIaddr

; Serial Transfer Complete

reti

;

;-----------------------------------------------------------------------------

.org

URXCaddr

; USART, Rx Complete

reti

;

;-----------------------------------------------------------------------------

.org

UDREaddr

; USART Data Register Empty

reti

;

;-----------------------------------------------------------------------------

.org

UTXCaddr

; USART, Tx Complete

reti

;

;-----------------------------------------------------------------------------

.org

ADCCaddr

; ADC Conversion Complete

reti

;

;-----------------------------------------------------------------------------

.org

ERDYaddr

; EEPROM Ready

reti

;

;-----------------------------------------------------------------------------

.org

ACIaddr

; Analog Comparator

reti

;

;-----------------------------------------------------------------------------

.org

TWIaddr

; 2-wire Serial Interface

reti

;

;-----------------------------------------------------------------------------

.org

SPMRaddr

; Store Program Memory Ready

reti

;

;-----------------------------------------------------------------------------
LongDelay :

;PROCEDURE LongDelay ( ) ;

;****************

;BEGIN (* LongDelay *)

ldi zl,0 ;
ldi

zh,0

;

LoDe_0 :

;

adiw zl,1 ;

mov acc,zl ;

or acc,zh ;

brne LoDe_0 ;

ret ;END (* LongDelay *) ;

;-----------------------------------------------------------------------------
Pause

:

;PROCEDURE Pause ( ) ;

;****************

;BEGIN (* Pause *)

rcall LongDelay

; LongDelay ( ) ;

rcall LongDelay

; LongDelay ( ) ;

rcall LongDelay

; LongDelay ( ) ;

rcall LongDelay

; LongDelay ( ) ;

rcall LongDelay

; LongDelay ( ) ;

ret

;END (* Pause *) ;

;-----------------------------------------------------------------------------
ResetProcessor :

;

ldi

acc,HIGH(RAMEND)

;

out

SPH,acc

;

ldi

acc,LOW(RAMEND)

;

out

SPL,acc

;

Main :

;BEGIN (* Main *)

ldi

acc,0xFF

;

out

DDRB,acc

; [PORTB] := [output] ;

background image

Andrzej Pawluczuk: „Moduł z mikrokontrolerem ATMEGA32”

-9/9-

ldi

acc,0

; [PORTB] := 0 ;

out

PORTB,acc

;

sts

Cnt,acc

; Cnt := 0 ;

Main_0

:

; LOOP

rcall Pause

; Pause ( ) ;

lds

acc,Cnt

; Cnt := Cnt + 1 ;

inc

acc

;

sts

Cnt,acc

;

out

PORTB,acc

; PORTB := Cnt ;

rjmp

Main_0

; END (* LOOP *) ;
;END (* Main *) ;

;-----------------------------------------------------------------------------
.exit

Po wygenerowaniu wersji binarnej programu, mikrokontroler pomyślnie został

zaprogramowany, czego efektem jest oczekiwane „mruganie” LED'ami.

Ilustracja 10: Układ działa


Wyszukiwarka

Podobne podstrony:
skrzynia M32 gearbox M32 Opel, Vauxhall, Fiat, Saab, Alfa Romeo
M32 33 K

więcej podobnych podstron