Sie sind auf Seite 1von 207

Mittermayr

Roman

AVR.RISC selbstentwickeln
Software
Embedded

AufCD-ROM:
. AVRStudio4.13undwinAVR
Roman
Mittermayr

AVR.RISC
Embedded selbstentwickeln
Software
Ganzgtelch,obSledasHbn Mikoconkoller zuneßtenMal
Hiren,s€itelnlgrnhhrur Sofr$rare"s{hreibenoder
"Enbedded
lnbrmatikünteilchten:Dle6esBuchhllfrlhnenbelmE{enell
umlteEenmd\tut'refun lhrc6wk6€nsSlebekommen dnel{ln€
EinRihrungir dieSFächeAss€mbleründl€nenaußedem die
vrichtigs€nGrundlagEnderC-Pogrammlerung kennen.Filrden
Prdkflkerwidpdgnanterldä4woraufe5belderSofrwate-
enü/vlcldung wirklichankonmt
aufAvR-Poue6soren

Die8-Bit-l,likroconrlolleFserie
vonATlVlELerlaubtlhneneine
rasche
unglaublich VeNirklhhung
wßthiedenster ldeenund
Die
Pojekte. schnelle R|Sc'Architeldur,
dereinheitliche
Aulbau der
Prozessoftmilie
kompletten undnichtzuletztdieattaktiven
Prcisantebote machen
furHobbyentwhkler diesen Contmllerzur
richtisenWahl.
DerAutorhatsichdaEufkonzenfiietda5BuchveFtändlkh
prakrisch
zuSesialten.Dieses
WerkwnddenA'beibtisch ka
verhssen.
EinNachschlägewerk g
fürlhrehoj€kt€rHäufi
Tabellen,
Routinen
undbeknnt€"Fallen"
werden klarund
e [irt.
Eineumbngreiche unleßri:Et
onlireplattform denbse'rnd
beantwodei überdenUmfantdes8u(hsh
Frdg€n,die
zah|?iche
Pra-xisbeispjele
undSchaltulten
stehen
darUber
freizumDownload
zurvefügun8.

r s B N9 7 8 I 7 7 2 3 4 1 0 7 6

||tililil
tililil
illtill tl
9t743772t341076t
Eüo39,5 lDl

Sioun6im Inlongt wwwjranzls.d


Be$rchon
Roman
Mittermayr

AVR.RISC
Embedded
Software entwicketn
selbst

Mit 88 Abbildungen
BibliosrafischeInfor.|'äüod der Deutdren Bihlioüek
DieDeulscheBibliolhekE@ichnet dise Publikation in ds DeutsdenNationalbibli@rafie:
deraileneDaren sindm hternetübprhttr./dnbddb.de äbnilbär.

Adddqrö8Esqql.hmö€frlb''dffiq6r€lhUidufuiEßhafunqw*.
*ft, xonto ltuBiahms rcp'od@a( toEdem tid f€hrer drhr qe aq6d'!€€6 Ds \daq und der ado, *hei s d dr+ärb
evfdereiEc6 ie dh db jük&h

nel|end6bdRdaktdlsdl|G€trüq

Emb.geJdgleÖdgaml)dn|odä'
fmmnqds|-i!Enh.bas'6q|id''

O 2004FränzirVerlägGnbH, 35535Poing

Ale Rechtevorbeh.lren, äuchdie de. fotom{h.nischen wiedersabe undderspeicheruns in e ekt.onischen


Mediei. DasEßlellenuid vedreitenwn Kopienaul Papie':auf Daten$&emoderim r^remet insbeenderea s
PDI st nü mit ausdlüdlider Genehmigunq d6 Ve aq696taner undwid widigenfals malrechnichverfolqr

D e meislei Pmduhbez€ichnunq€n rcn Had- und Softwär€seie Fnmnnamenund Fkmenoqoi, die n d esem
Welk qenännlweden, iind in d€r R€q€lqlei.hailiq au.h €inq€taq€neWarcnei.h€nund soll€n ah solchebe-
lra.hlel weden. DerV€ aqiolqt bejd€nPrcduhbeuidnunq€nimWen ichenden Schrcibwpn der H€ßteler

sats: folosatzPfeifela2166GräIemng
art & d6i9n: w.idehfthzde
Dtuclc Bercke(47623Kdelaer

tsBN978-3-77234107-6
)

Vorwort
crnz gleich,ob Siednswort Mikroantrolbr hette zum erstenMal höien oder seit
Iiinf Iahren ,,EmbeddedSoftware"schreiben:DiesesBuch hilft Ihnen b€im Erler
nen, Umsteigenund Vertiefen Ihres wissens zu diesemThema. Es wird prägnant
erklärt, worauf es bei der Softlyareentwickiungmit AvR-Prozessorenwirklich

Die 8 Bit Mikrocontroiler-Serie von ATMEL erlaubt Ihnen eine rascheVerwirkli


chung verschiedensterldeen und Projekte. Die schnelle RISC Architektur, der
einheitliche Aufbau der kompletten Prozessorfamilieund nicht zuletzt die attrak
tiven Preisängebotefür Hobbyentwickler lassen diesen Controller die dchtige
Wahl sein.
lch hoffe, dassIhnen diesesBüch rücht nur wissen verschafft,sondernauch Freude
bereitet.Um Sofha'arezu entwickeln,braucht man einen klaren Kopf Gönnen sie
sich eire Pause,wenn Sie einmal nicht vorankommensollten. Ich wünschelhn€n
eineVielzahl an erfolgreichenund spännendenProjektenund steheIhnen tur Fra
gen zu diesemBuch gerneüber meine Webseitehttp://M.avrbu.h.de zü Vertu-
cuns

SietollteneinenBlickaufdieWebseitezum Buchwetfenuntel:
http://ww.avrbu<h.de DortfindensieletzteAnderungenund
aktuelleUDdateszu in diesehBuch-
denBeirDiel€n

AIe Preisein diesemBuch sind ohne Gew?i}lr.Bitte be.chten Sie,dasses sich bei
vielen Produldnämenund Unternehmenum eingetragene wafenzeichenhandelt.
Mein Dank gebührt einer Reihevon Menschen,ohne deren Hilfe diesesBüch nur
eine Ideegeblieb€n1eäre.Dazu gehörenAlexanderHuwaldt von der Firma Laser&
Co.SolutionscmbH (www.myAvR.de)und Benedik Sauter(www.embeddedpro'
jects.net)für die großartigeUnterstützung.GroßerDank gilt auchden wahrenHel-
den der ÄVR Community: löig wlrnsch tllld Eric weddington. Ohn€ die beiden
wäe die Softwareentwicklungam AVR nicht mit dem Komfort möglich, der heute
gegebenist. Sehrhilfreich wär die Arbeit von Maria Mitterma).r,die mich beim Ver
fnssendesBuchsunterstützt har. Anke Milndler hat das Proiekt mit wesendichen
Verbesserungsvorscblägenund Andenngen bereichert Die Schaltungenstammen
von Walter Mittermayr. Dank in dies€ Richtung fiir die großartiSe technische
Unterstlitzungb€im Aufbau urd d€r Entwicldüngder Praxisanwendungen.
RomanMitt€rmala
Oktober 2007,Wien
Inhalt
8
9

1 DieVorbereitung
desMikrocontrotters
1.1 Auswahl
Der Markt auf dem Gebiet der Mikoconiroler hat sich im Lauf der tahre ständig
velgröße(. Es gibt mittlerweile eine Vielzahl von Anbietern ünd natürlich eine
noch größereÄnzahl verschiedenerProduktvariänten.Die meisten davon bieten
zwar durchwegähnlicheLeistungen,unterscheidensich aber im Preisangebot,den
Einsatzgebietenund natürlich dem Support seitensdesHeßtellers.
Zu den erstenpopnläen Mod€Ien zähltenetwadie Intel-8osl-Controler sowied€r
SiemensCl66 btr. Cr67 (heute Infineon).Vor allemam Intel 805r habensich
viele Hersteler oientiert und ihre Systemeim Kern kompatibelgehälten.
!s gibt aber einige wesentlicheUnterschiedeb€i der Auswahl€inesMikoconüol-
lers zu beachten:Siemüssenzvi'ischen8 , 16 und 32 Bit Architekturen,der Anz-ahl
der benötigten I/O-Pins, der Größe des Fl,A.SH/SR-AM/EEPROM-Speichers und
noch vielem mehr unrerscheiden.
Grundsätzlichkönnen Sie bei jedem Ihrer Projekteunter den verschiedenenHer
stellernfiei w?il en. Meist gewöhntman sich als Entwickler jedoch sebrschnell,n
eire bestimmte Produktfämilie und müsste wieder erhebtichen LerDaufwand
beteiben, um auf ein anderesSystemümzusteigen.
Bei der Auswahldesrichtigen ControllersbeachtenSiebitte folgendePunkte:
. Wie ist der Controller im Internet?FiDdenSiegenügendErkltuungen
"populär"
und Qudltexte finlicher Projekte?
. Wo und zu welchemPreisbekonmen Sieden Controller?
. Mus lh' 5y'remtur niedfigen Srromvcrbrau(h oplimie'lsein?
. HabenSiedie technischenMögLichkeiten, den Controller instand zu setzen(Con-
üoler nii BGAPinssind für denHobbyentwicklerwahrscheinlichkaum lotbar)?
. wie gut unterstützt Sie der Herstdler bei der Entwicklüng?cibt es ein Forum,
ausr€ichendApplicationNotes,Datashe€tsund ehe Entwicklungsumgebung?
Dies sind natürlich nur einigeAnhaltspunlte. Bei Ihren ProjektenmüssenSie die
Anforderungenan den Controller kennen und wissen,welcherT}? sich am besten
dafiir eisnet.
10 1 Dievorbereitung

Produktfamitie
1.1.1 DieATMEL-AVR-
In diesemBuch werdenwir uns dem HerstellerÄTMEL widmen ATMHL hat eine
selll breite Produkrpalettemit einer Vielzahl erschwinglicherMikocontroller. So
bekommenSie z. B. den beliebtenÄ?nesa8 wie auch das"wildestePferd im AVR
Stall",denA?m€ga128, bereits{iir wenigeEuro.
Die ATMEL A\R-Serie gehört zü 8-BiI-RISC Prozessor-Iamilieund lässtsich im
iD folgendcModelleunterscheiden:
wesentlichen
. AT9OS
Die ktassischeVariante,wird jedoch von ATMEL nicht mehr empfohlen ünd
großteilsvon der ATtiny-Serieabgelöst.
. Altiny
Preislichättraktiv,nur wenigeEinrAusgängeund sehrbe$enzter Speicher,dafür
im \tromrerhrau,h optinierturd..e\rll<h.
. ATmega
GrößererSpeicher,meisi ausrei€hendEinJAusgängeund weitreichendeEinsatz
möglichkeirendurch die sehrbreite Konfiguration.
. Sondermode[e
Optimiertftir CAN,LCD,USB,ZigBee,...
Der ATtiny wird gerne in Auöauten verwendet,in denenGröße und/oder Strom-
verbräuchentscheidend sind.

Modell F{ash SRAII EEPRO[,4l/O Pins r'JDKanäle Schnttstellen

15
15
3
1024

I6 r024 32
512 or_,

'10
?-

Diekompleteubeßkbtrndeigieun /Pbdkß/pönm bb|. *P?rrnilv id=607

Abb.1.1: !bersichtder AT|VIEL'AVR


Serie
Die -ATmegaSerieist, von kleinen Anwendungenbis hin zu großenIndustriesteue
rungen,besondersfiexibel einsetzbarDie verschiedenenT}?en bieten slerlei Kon-
figuration€n an.
Der ÄTmega8bietetmit 8 K! Flash-Speicher(Programmspeicher)genügendPlatztur
kleinereApplikationen,die ohneProblemeauchin C geschrieben
werdenkönnen.

Wird mehr Speicherbenötigt,bietetder mit s3 Pin bestücke(6a Pin Gehäuse)


ATmegnl28mit ganzen 128 KB Flash-SpeichergenügendPlatz tur umfangreiche
Software.

1.2 DasEntwicktungsboard
Mit einemController alleinelasstsichnoch nicht viel erfinden.leder Mikocontrol
ler benötigt eine mehr oder weniger umfängreiche Grundbeschaltung.Diese
bestehtmeistauseinemQuarz und einigenKondensätoren.Damit können Siezwar
Progranme im Controller äusfiilren, aber eben noch keine Programmein den
Controlier schreiben.

Dazu berötigen Sie ein Progrämmiefgerätbzw. ehen Progrämmieradaptef.Wenn


Sie auch noch die serielle Schnittstelleverwendenmöchten, kommen ein Pegel
wandler (tt"ischerweiseder IC: MAX232) und eineRS232Buchsedazu.

Siehabenhiertur z.weiMöglichkeiten:

1 Sie bestellenale Komponenten tur die Grundbeschaltungund den Bau eines


Progrrmmiergerätsbzw.käufendir&t ein Programmiergerät.
2. Sielegensich ganzeinfachein Entwicklungsboardzu.

Ein Entwicklungsboärdverfügt meist über eine integrierte Programmierschnitt-


stelle, mehrere Tastenund LEDS und bietet oft auch eine serielle Schnittstele.
Damit ist esein praltischesKomplettpaket.

Die Preisefür Entwicklungsboardssind in der Vergangeüheiterheblich gesunken,


auch weil viele Pdvatanbieterbz$'. auch Unternebmenihre eigenenEntwicklungs-
platinen z. B. bei eBäyoder ill den im Anhang erwähntenForenanbieten.

1.2.1 5TK500
ATMEL bietet ein gut durchdachtes,preistichvernünftig angesetztes
Entwicklungs-
board mit dem Namen STK500.Auf diesem Board 6nden Sie alle wesendichen
Komponenten,die Siezur Entwicklung Ihrer Projektebenötigen.
72 1 Dievoüercitung

Abb. 1.2rATMEL
STK500

Das Schönedaran ist, dasses möglichst flexibel einsetzbarbleibt. So kann man


jeden Ein- und AusgabepindesControlers aüf eine 8-Bit-LED-Reiheoder einevon
achtverschiedenen Tastenlegen.Au߀rdemunterstützt dasBoard f.st alle Control-
ler der AVR-Serie(Details unter httpr//www.atmel.con/dp/resourceVprod docu
ments/doc1939.pdf). Sie benötigendaher nür ein einzigesBoaid, egalwelchen
-ATMELAVR Controller Sieverwenden.
Die wohl sparsamsteVariante ist jedoch der Kauf eines STK500-kompatiblen
Bo3ds oder gleich def Aufbau einer eigenenPlatine. Dazu können Sie sich die
Links zu verschiedenenEntwicklungsboardsim Anhang ansehen.Viele w€rden
ständigweiterentwickeltund durch die Intemetgemeindegepflegtund betreut.

1.2.2 myAVR
Ein absolüterFavorit unter den Entwicklungsboardsist jedoch ein Projek mit dem
Namen,,myAVR".Siefinden nlle Detailsdazuim Internet unter www.myavr.de.
Sie bekomnen auf der Webseiteden komplefien Schaltplanplus Dokumentation,
wenn Sie das Board selbstaufbauenmöchten. Außerdem wird auch ein Bausatz
angeboten(ca. 39 Buro) bzw das komplett fedg äufgebauteEntlvicklungsboard
(myAVR2 USB-Board,fiir ca.49 Euro). Inkludiert in diesemSet ist ein steckbarer
UsB-Progralnmer(ISP), der d;rekt vom A\R Studio ausverwendbarist (A\R910
komprtibel).
Dies€sBoard ist zwar hauptsächlichIiü die ContIo[€I ATmegn8/48/88/168 ausge-
iegt, da dieseabel zu den meistverwendetenModellen gehören,
stellt dasseltenein
Problemdar.
13

Abb.1.3:DasnyAVR2 USB-Board

Siekörnen übei die Webseitepreiswelt auch alle benötigten Bauteileund Mikro


controler bestellen.DiesesProjekt jst wirlCich gut durchdacht ünd bietet, außer
dem Entwicklungsboard,noch eineReüe zusätzli€herHilfestellungen:
. Ein sehrgut organisiertesSupport-Forum
. Softwareund Literatur
. Schaltpl?ine
zu den Entwicklungsboards
. EMeiterungskadenftir Ihr Entwicklüngsboard(RealtimeClock,Temperatursen-
sor,EEPROM,etc.)
. KomplettePlojektemit Dokumentation (und fertig€Bausätze)
. Aktuele Updatestur die Software

Wenn Sie erst mit der Entwicklung beghnen, ist diesesAngebot empfehlenswert,
Der Preisist moderatund esist dahernicht so schlimm,wenn dasBoarddurch eine
Lrberspanlungversehendichzerstörtwerdenso te oder SiedasganzeBoärd dirck
in Ihr Projekt integrieren woller (wäs beim STK5O0aufgrund der Grö߀ meist
wenigSinn macht).
Sie finden das entsprechendeDatenblatt mit einer umfangreichenFunttionsbe
schreibungunter htQ://w$'wmylw.de/download/techb_myaw_board_20.pdf.
Solten Siesich tu eh Board entscheiden,daskein ISP (In-System-Progiarnmhg)
unteistiltzt, also das Programmierendes CoDtrollersohne diesenaus dem Board
h€rausnehmenzu müssen,finden Sieetwasspäterin diesemKapitel entsprechende
Hinweisezum Bäu soicherkogrammierädapter
74 1 DieVorbercitung

wichtig ist, dassSiesich eineflexibleund vor allen verlässlicheEDtwickluDssrunge-


bungau6auen.Die wescntlichen Komponenten, dieSiedafürbenötigenl

. EinenMikrocontroller
. Ein kleinesSetan Quarzenmit unterschiedlichenlrequcnzen(wird oft zur korrek-
tcnErzeugüng benötigtoderf,ir höhergetaketeÄnwendungen).
einerBaudrate
. Ein Entwicklungsboard(am bestenmit ISP Unterstützung).
. Einen Programmieradapter(ist immer vorteilhaft, vor altem dann, wenn das
tsns{icklungsboard keine Programmierung erlaubt, oder Sie den Contrc er
schonin ein fertigesHardMresystemeingebauthaben).
. Ein IDE (Integrated DevelopmentEnvironment), also eine Soft'yareEnsdck
lungsumgebung.Dazu bietet si.h natürlich dasvon ÄTMEL frei vefügbnre AVR-

. Einen C Compiler. Hier gibt es eine Reihekomnerziell erkiltlicher Produl<te,


die, je nach Hersteller pieiswert angebotenwerden.Wir veMenden jedoch im
RahmendiesesBuchsden frei erhaltlichenOpen SourceCompilerAVRGCC
(bzw winAVR).
. Eine seriele und/oder eine paralele Schnittsteile. DiesebenötigenSie zum
Debuggen und zur Programmi€rung desControllers.
. Unter Umständeneine UsB-Schnittstelle, solltenSieeinenUsB-Programmier
adapterbesitzen.
. Natürlich benötigenSie au.h ein Voltmetereiren Lö&olben und drs nötige
C' JndwcrkTcug 7um..Bd.leln" vonHardwdre.
. EmpfehleDswe ist ein Oszi oskop.Siewcrden währscheinticheine MengeFeh-
ler suchen,die ohne Osziloskop schwerzu finden seinwerden.

1.3 DieGrundbeschaltung
wenn Ihr Projekt nun nm Intwicldungsboard 1äuftund Sie lhre eigenekomplette
Schaltungdarausentwerfenmöchten,benötisen Sie immer ein Grundgeiüst bzw
dieGrundbeschaltung einesAvR-Controlers.Auf Seite15sehenSieein Beispielfür
denATmega8.

DazubenötigenSiefolgendeBruteilc:

. ISPStecker
. Cl-Kondensator 100nF
. C7 , C8 Kondensator 22pF
. Mikrocontroüer -{TmegaS
. Quarz3,686MHz (oderauchgrößer:4, 8, 16MHz)
7.i DieGruhdbeschaltung

PcsfFEsEr) Fco(aoco)
Pc1(aDcr)
Pc2(aDc4
Pca6Dca)
Pc4(aDcr]sDA)
Fcs(aDcrscL)

FDo(Pi(D)
PEToaau4osc2t PDr0aD)
,^r PD2(NIo)
iv Pm(Nrr)
PD4üclJrol
PD5(rrl
PD6(ANO]
PDi(AN1)
c1
l0On armega 6 P B ro c r a l
PB4ssloclBl
P83tMos1oc2l
PBr(Mso)
F85(sc'!

Abb.1.4:Gflrndbeschaltung

Achtung: Der ATmegr8(Lmdandere)sind im Auslieferzustandauf einen


"internen
TaIt" eingestellt.Er berücksichtigtdaher den exrernangehängtenQuärzbzw.Takt-
gebergar nicht. Um \on,,internen" auf,,eterDen" Takt ru schalten,müssenSiedie
Irre Birs entsprechendsetzen.Dazu finden Sie dctaillierte Infornntionen etwas
späterin diesemKapitel.

1.3.1Stromversorgung
Der Almegaswird mit einerVersorgungsspannung (VCC)von s V betrieben.Sie
körnen den Controllei daherentwederdirekt m;t einemregelbarenNetzgerätoder
komfortabler(und sichererl)mit eincmbeLiebigen (9 12V) venor
Steckernetzteil
geD.Dazu benötig€n Sie einen Spannungsregler, der mit der Grundschaltüngin
Abb. 1.5Giehehttp://M.mikocontroller.net/articleyAvRTurorial Equipment)
einfachaufgelxut werdenkinn:
76 l D l ev o t b e r c i t u n.g. ' ...' . '.,

7805

A b b .1 . 5 :B € s c h a l t u n g d e s S p a n n u n g s ß g l e 1 5
K-.
FolgendeBauteilesind dafiir notwendig:
. ICI: 5 V-SpannungsreCler
7805
. Cl: Elko10 pF (PoluDg
beachtenl)
. C2,C3:2xKondensator 100nF
. Dl: Diod€1N4001
Der Spännungsreglermndelt eine b€liebigeEingangsspannung von 9 bis t2 V in
die gewünschtes-V-Versorgungssparnungfur den AvR-Controllel üm. Diese
Schältungschützt d€n Conholler zum Teil auch vor einer eventu€len überspan-
nunc.

1.4 Programmieradapter
Wie bereitserw?ihntlyurde, brauchenSiemöglicherweiseeinenProgrammieradap
tet je nachdem,welchesEntwicklungsboardSie verwenden.Mit einem solchen
Adapter konnen Sie lhreD Mikocontroler programmieren (lasfien), sollte Itu
Boarddasnicht unterstützen.
Es gibt eine große Au$a"hl an kommeziellen Progra$mieradaptem.Wenn Sie
Väriantew?ihlenwolen, seienfolgendein prar ftei erhält-
aberdie kostengünstigere
liche Schaltungenvorgestellt.
Grundsätzlichunterscheidetman die Programmiemdapternach der verwendeten
Schnit$ele. Dazubieten sich an:
. Prr.llele Schnittstelle
. Seriele Schnittstele
. USB

In den direken Links zu den Erfindern 6nden Siedie genaueErklärung der einzel-
nen Schaltungen.
7.4 Prcgranmierodopter t7

1.4.1 Paraltete
Programmieradapter
Rolf Milde hat auf seinerWebseiteeinige sehr handliche und einfäch äufgebaute
Parillel-PrograDmieradapter
vorgestellt.
SeineSchaltungen sindauchmit denVor-
g:ingerndesSTK500,dem STK200und dem STK300,konpatibel.Man findet sie

http://runril.de/hardware/avrisp.htnn
Scott-FalkHübn erkläft auf seinerWebseiteden währscheinlicheinfachstenparal-
lelen Programmieradapter.Er bestehtlediglich aus zwei Widerstinden und einem
Schnittstellenstecker.
Als Programmiersoftware hat er PonyProg2000 gewäh]fein
beliebtcsTool unter A\R'Programmierern. Fernerstellt Herr Hühn auch einen
serieilen Adapter vor und erklärt Schdtt ftu Schritt desseDAnwendung uDter
ht!p://s-huehn.de/elektronik/avr
prog/avrprog.htm.

1.4.2 SerielleProgrammieradapter
Das STK500 ist über die seriele Schnittstele mit dem PC verbunden urd wird
däIer auch seriell programmie . DieseVorgangsweise hat sich etabliert und I'ird
auchdirekt vom AVR-Studiounterstützt.Aus diesemGrund snrddie meistenseriel
len ProgIamDieradapter kompatibelzum STK500.
Empfehlenswertist die SchaltungEvenool (http://wwwsirrarri.ärubi.uni-ld.de/ala_
projects/evertool/).
Dabei hnndeltes sich um eiD Programmiergerat und einen
Debugger,kombiriert in einer Schaltung.Das Evertool ist kompatibel mit dem
AVRISP-/STKs00-Protokoll, der inkludierte Debuggermit einem jTAGICE-/ITAG-
Debugger.Dasbedeutet,dassman diesesGerät direkt mit dem A\R Studio steuen
und venvendenkann.
Es gibt eine modifizierte Version, bestellbar als Bausatz unter httpJ/www.

AuchdasProjektvon KlausL€idingerist eMähnenswert. Es handeltsichhier um


einen AvRgro'koDpatibleD,serienenProgrammieradapter. Ebenfallssteuerbar
vom AVR-Studio ist dieser Adapter eine preiswerte und einfache Lösung.
http://uuw.klaus-leidinger.de/mp/Miko.ontroiler/AvR Prog/AVRProgram
18 1 Die Vorbereitung

1.4.3 USB-Programmieradapter
USBptog
Der USBprogist die attraktivstealler hier vorgesteltenLösungen.Entwickelt von
Ben€diktSauterist dieserProgrammieradapterkompatibel mii dem AVRISPIr .II
und somit auch direkt über dasAVR Studio steuerbar.Es gibt sowohl einen kom-
pletten Bausatz(etwä 22 Euro) alsauch einen bereitsvomontieren Adapter (ca.32
Euro).wirklich intcrcssantan diesemProjekt ist, dassdie Firmwarefrei austäNch-
bar und der Quelltext liei vefüsbar sind. Man kann diesenUsB-Adapter (ohne
Hardwäreinpassmgen)dezeit mit folgenderFirmwareverwendeu
. A\R ISP2 Klon
. OpenOCDInterface(ARM Debuggins)
. FreierITAG Adapter + Bibliothek
. AT89Programmer
. SimplePort(l0I/O Leitucen)
. USBzu RS232wandler(ohneTreiber)
. JTAGICE mk2 Klon (in derEntwicktung)
erhaltenSieunterhttp://www.embedded-projects.nev.
MehrInformatioDen
USBtsp
Matthins weißer hat ein professionellesUsB-Programmiergerätentwickelt. Es ist
kompatibel mit dem AVR Studio. Schaltunsund Dokumentation dnzu Iinden Sie
auf seherwebseitehttp://www.matwei.de/doku.php?id=de:elektronikusbisp.
At rusb500
GuidoSocherhat einenSTK500koDpatiblenProgrämmieradapter entworfen,der
unter wiDdows (A\R-Studio) und LinLrx(AVRDUDB)1äuft.Die Schaltungist auch
icleos101.
ais Bausatz urter http://w wruxgraphics.org/electronics/2005r0/a
shtmlerhä]dich.
HVPToS
TobiasHammer hat das Evertool als Äusgangsentwurftur seinenProgrimlnier-
adaptergenomner.Herausgekommen ist ein UsB-Adapter,
der ale AVR-CoDtrol
ler ünterstützt, kompnlibel mit dem STK500,also steuerbarmit dem A\R Studio
ist, High-Voltage-Programmingunterstützt und einfach aufgebautwerder känn.
http://uvw.der hamner.info/h!?rog/index_en.htm
i,'.':ilr'r, .:ri',' .:.,,' .11.6.&trt/lüüni;{nril4ftiid:Mjtliw|
19

1.5 Programmiersoftware
WennSiesich für ein Entwicklungsboardund./odereinenhogrammieradapterent-
schiedenhaben,benötigenSienoch eine entsprechende Programmiersoftware.Die
meistend€r oben vorgesteltenGefätesind bereitsmit dem AVR-Studiokompati-
bel. Das ist natürlich eine große Erleichterung,da die meisten Entwickler damit

Es gibt €ine Menge ft€i erhältlicher Software für die Programnierung (das
,,Flashen")der AvR-Controller.Die drei meist verwendetenAngebotesind:
. AVR-Studio,erhäIdichüber die ÄTMEL-Webs€it€w$,w.atmel.com
. PonyProg2oo0.Eine ausfii}lrliche Erktitung dazu 6nden Sie hier unter
http://w w.mikrocontroller.nevarticleyPony-Prog_Tutorial.Die Softwär€ ist
€rhüldichunterhttp:// w.lancos.€om/ppwin95.htrnl.
. AVRDUDE,Linutwindows kompatibel,Open-Source,kommandozeilenbasiert
und sehr beliebt. Details unter http://rewwmiloocontroler.net/articl€s/
AVRDUDE.

(Windows)
1.6 Entwicklungsumgebung
NachdemSie die benötigt€ Hardwareausgev/ählthaben,beghnt die Auswahltllld
Konfiguration der Entwicklungsumgebungäuf Ihrem PC. Das wohl populärste
Programm,AVR-Studio,wird von ATMEL kostenlosv€ rieb€D.

1.6.1 AVR-Studio
Siefinden die alftuellsteVersionauf http://www.atmel.com/avrstudio/.
In diesemBuch wi|d ausschließlichdasAVR-Studioveffendet, da es sehr eirfach
zu bedienenist, von ATMIL g€wartetund betreut wird und darüber hinaus ehen
ausgezeicbneten Simulator integriert hat.
Die Übersichtdei Features:
. Ein Assemblerund ein umfangreicherSimulatorsind inkludiert
. Unt€rstütztdie A\aR-Entsvicklungstools
- ICE50,ICE40,ITAGICE mkII, TTAGICE,ICE200
- sTK500/501/502/503/504/s05/520
- AVRISPmldl und AVRISP
AVR Dragon
--.':::r':
20 1 D i ev o r b e r c i t u i i : , . 1, ' i ll ;, i: . l: . ;::1. : : i' ' .rr. :''

. Kompatibelmit
- Microsoft@WindowsVista (32 bit)
Microsofr9 Windows 9,NT/2000/XP

1.6.2lnstatlation
desAVR-Studios
Auf der beigelegtenCD 6nden Sie eine kornplett€VersiondesAvR-Studios.wenn
Sie über Breitbandintemetverfiigen,solten Si€ einen Btick auf die ofdziel€ S€ite
von ATMEL werfen möglicherweiseist schon eine neuereVersion erh:ildich
(http://wuw.atmel.com/avrstudio/).

Wichtig: Beror Sie dasAVR-Studioirstali€ren, müssenSie die Inställation desC


Compilers durchJiihren. Hier verwendenwir den fiei erh:ildichen Open-Source
Compiler AyRGCC,der unter Windows den Namen wiflAl4 trägt. Sie finden das
InstallationsprograDmebenfallsauf der beiliegendenCD oder im Internet unter
hup://winaw.soüceforge.nev.
Die Installationsdateitur winAVR finden Sie auf der CD im Verz€ichnisSo/ivdre\
Wn],\'rR\.
StartenSiedasSetupund lassenSieale Optionen auf den Standardwerteingestelt.
Nach erfolgreicherInstallation können Sie das A\R-Studio Setup starten. Dies€s
finden Sieaufder CD unter Softu/ e\AvRstudio4\.
Auch hier können Si€ale Optionen unberüh lassenund eine einfacheStandard
installation durch{iihren.

1.6.3 InstallationunterMicrosoft@
WindowsVista@
Solten Sie bereitsmit Windows Vista arbeiten,kanll es mit der aktuellenVersion
desAVR Studiosüoch zu Problemenkommen. Siesolten daler auf jeden Fa[ ver-
sucLen, die akuellste Version von der ATMBl-webseite zu v€rw€nden (http://
w watmel.cordavff tudio/).
Wennmit dieserVersiontrotzdem Problemeautueten,können Sieauch ehen Blick
in die ,,Beta-Abteilung"von ATMEL werf€n. Dor finden Sie noch nicht ofdziel
veröffendichteVersion€ndesAvR-StudiosuDd enLtpr€chend€ PatchesIiiI aktuelle
Versionen.DiesenBereichfiDdenSieunterhttp://M.atmel.no/beta_wäre/.
Leider gibt esbei der aktuelen VersiondesAvR-Studioseh Problemmit Windows
Vista (AVR-Studio,,verschwind€t"einfach beim Kompilieren).Aus diesemGrund
finden Sieauf der beigelegtenCD auch einenentsprechenden Patch.Si€instälieren
ehfach ales wie oben erklärt, tuhren iedoch ganzam Sclilussnoch den Patchaus.
(Altemativen)
1.7 Entulicklungsungebarg 27

Diesenfinden Sieauf der CD im Verzeichnisr\soiware\A\,ltlstudio4\SerricePackl\.


Mit diesemPatch müsstedasbeigelegteAVR Studio auf allen Windows Versionen

(Alternativen)
1.7 Entwicklungsumgebung
Esgibt natürlich auchAlternativenzum AVR-Studio:

1.7.1 WinAVR
WinAVR ist die Windows Distribütion voD A\.RGCC,dem auf cNU basierenden
Open-Source'A\TC CoDpiler.Mit WirL{VRwird nicht nui ein CoDpilergelie
fert, sondern auc}l ein Progrnnmiereditor, eine Progrsmmiersoftwarefiir das
,,Flaihen" und eine C StaDdardbibtiothekinklusive guter Dokumentation. Details
und Informätioncn linden Sieunter http://winavr.sourceforge.net/.
SiebenötigenWinAVR zwar alsC-Compiler fit dasAVR Studio,können rber diese
Di.tribrti"rrruuhol-neWR \Ludio\erwendcn
Sollten Sie an der Verwendungvon winÄ\R interessiertsein, empfiehlt sich das
Tutorial von mikJocontroller.net.Mehr da7rlunter hte://w wmikocontroller.net/

1.7.2 myAVR
Workpad
PLUS/5iSy
AVR
DasmyAVRProjekt ist sehr umfingreich und bietet daher auch eine eigenemäch-
tige Entwicklunssumgebungan. Die Softwareist zwar nicht kostenlos,jedochpreis-
wert (zwischen 14,9sund 99 Euro,jenachVersion)erhäldich. Außerdemgibt esein
gutsortiertesForumalsSupportdazu.

1.7.3 Bascom
AVR
Die lirma MCSElectronics (hup://w.mcselec.com)bietereinenBASIC-Compi-
ler tur denAVR an. DieserCompiler hat sich zu einembeliebten liool tu Einsteiger
und Profis entwickelt.DieseSoftwareist kostenpfli.htig(ca. 79 bis 100 Euro),
bringtjedocheineMcngesrpport mit.
22 1 DieVotbercitung

IDE2007
1.7.4 ATmega
KarstenDonat hat vor einiger Zeit mit der Entwicklung einer frei erhäldichenEnt-
wicklungsumgebungbegonnen,die laufend erweitert wird Sie finden deDDown-
load unter httpt/www.kanrendonat.de/AvPJ.DieseIDE arbeitetmit denl WirL{VR
Compiler und der opcn-Source SoftwareA\TRDUDEalsProgrammer.

(Linux/MacOS)
1.8 Entwicklungsumgebung
Durch die gioßartige Arbeit der altiven AVR Linux Community ist es möglich,
Softwnreiir den-ATMELAVR auchkomplett unter Linux zu entwickeln.EineReihe
von Toolsmacht diesmöglich:
. GNUBinutil' GCClnd AvR libc
GNU Binutils: http://sources.redhat.com/binutils/
- GCCrhttp://gc..gnu.org/
AVRlibc:http://savannah.gnü.org/projects/avr-libc/
EnrwedersiDd dieseTools direkt in der Distribution enthdtcn, oder unter
demNamenCDK4AVRerhältlich:httpr//cdk4avr.sourceforge nev
. uls?
- Softwarezum ,,Flashen"von Codein den Mikocontroller
- UnterstützteineVielzablvoD lsP-Programmiergeräten
Erhältlich uDter:http://savannah.snu.org/proiects/uisp/
. AVRDUDE
Die beliebtesteProgränmiersoftwarefür den AVR unter Linu (auch erhält
lich tur windows)
AkuelleVersion:http://savnnnah.nongnu.org/projects/avrdude/
. GDB
- GNU Debuggcr
Zu findenunter:http://sources.redhat.com/gdb/
. SimulAVR
AVR8-Bit-Simulator
- wcbseite:http:/Aavannnh.gnu.org/projects/simulavr/
. AUaRICE
Verbindetden GNU DebuggcrGDB mit demAVR ITAG ICE
- Erhäldichunter: httpJ/avaric€.sourceforgc.nev

weitere Informarionenzur lnstallationder komplettenGNU-Tool-Chain(Ent-


wicklungsumgebung){indcn Sie unter httpr//1'ww.nongnuorg/avrlibc/
Umfaryreiche Erklärungenin Deutsch unter
user-manual/instä11-tools.html.
1.9 Einichten desSTKSOO 23

httpr//www.mikrocontroller.net/articles/AvR-ccc und htrp://$,ww.home.unü,


ng.org/tjabo/aw/artikel0T.htrri.
Eine weiteredurchausbrauchbareSoturäreträgr den Namen-Korfolleltdü und ist
noch ein sehr juDg€sOpen-SourceProjekt. Die Applikarion wird von einer Ent-
wicklergemeindelaufend erw€irert.Das Projekt nähert sich an dasA\R-studio an,
äuch ein Debuggernufde bereits ir eine Testversionintegrierr. Wenn Sie atls,
schließlichünter Linux arbeiten,solten Siesich diesesProjekt ansehen.Siekönnen
die Software unter http://www.cadmrniac.org/projectMain.php?proiectName=
kontrolerlab herunterlad€n.

1.9 Einrichten
des5TK500
Im folgendenAbschnitt finden Sie Informationer zur Konfiguration des STK500
fiir die Programmierungund Kommunikation mir dem PC. Wenn SiedäsSTK500
oder ein kompatibles Entwicklungsboardbesirzen,sollten thnen die fotgeDden
Schrittezu einem eifolgreichenStart verhelfen.

gurationdesSTK500
1.9.1 Ausgangskonfi
Am Anfang ist es erforderlich,eineVerbindungdesIsP(ln-System-programmingl
Steckersmit dem zugehörigenProgrammiersockeldesMikroconrrollers herzustet
len. Die Grafit (Abb. 1.6) zeigt ein€n 6-poligen Steckermit der Bezeichnung
,,6 PinlsP-Heäder':
Dorthin schicktdasA\rR Studio die zu prograDmierendenDaten. Die Darenmüs
sen dann von di€semSteckerzum richrigen Sockelgeleiterwerden,da Sie ja ver-
schiedeneT}?en der AVR-Seriein die unterschiedlichgroßenSockeleinsetzenkön-
nen.Siefindendaäl eineTabee im UserManualdesSTK500(S.3 t0).
Iür denATm€ga8, AT90S2333,419054433verbindenSiediesen,,ISP-Header" mit
den 6 Pift desSteckersSPROG2(G/ür). Wenn Sieden ATmegal6veffenden, muss
dieseVerbindungzum SteckerSPROG3fRoi) gehen.
Mit dieserVerbindunghaben Sie däswesentlichebereitserledigr.Die lurnper auf
dem STK5O0befindensich in einerbräuchbarenKonfiguration im Auslieferzustand
(mehrdazuiD UserManualdesSTK5O() aufder BuchCD).
24 1 Die Vorbereitung

--+El ::iifr-
- E ; ii
EE L€O
;Hr;-'- -iE!.--
B rElrif= .--ii
LJ'iEä' It
;E i-iiF-r ii-i _ l-l
F E i*;ll----J iiq-i*".." LED
2r.' i :i

(tor Exl€mal Tsrge: onlyi

aus dem5TK500
Abb.1.6: DieÜbersichtsgrafik UserM anualbeschreibtdie einzelnen
Komponenten desBoards.

1.9.2 DieserielleSchnittstelle
Wenn Sie die serielleSchnittstellezur Kommunikation von Ihrem Mikrocontroller
mit einem PC oder einem anderenController verwendenwollen, müssenSie dazu
ein bestimmtesKabel stecken.Sie finden am unteren Ende des STK500 (bei den
acht roten Tasten)eine2-poligeStiftleistemit der BezeichnungRS232SPr{iE. Links
und rechtsnebenden beidenPins stehtRXD und TXD.Siemüssenvon hier ausein
Kabelstecken,dasmit den entsprechendenRXD- und TXD-Pins desverwendeten
Mikrocontrollers verbundenist.
Wenn Sie z. B. den ATmega8verwenden,finden sich der RXD-Pin auf PORTD.0
und der TXD-Pin auf PORTD.I.DieseInformationbekommenSieausden ersten
SeitendesDatenblatts(sieheAbb. 1.7).
Siemüssendahermit einem 2-poligenKabeldie Pins RXD und TXD von der Stift-
leisteRS232SPÄREmit den Pins PDOund PD1 von der StiftleistePORTDverbin-
den.
Wichtig:
Dies bewirkt die Verbindung desMikrocontrollers mit der seriellenRS232SPARE-
Buchsean der FrontseitedesSTK500.Obne diesenSchritt werdenSiekeineserielle
Kommunikation zustandebringen.
25

(RESET)PC6 1 2 4 PCs (ADCs/SCL)


(RXD)PDO 2 2 7 PC4{ADC4/SDA)
(TXD)PDl 3 2 6 PC3(ADca)
0NTo)PD2 4 2 5 PC2(ADc2)
(rNrl)PDs 5 2 4 PCI (ADC1)
(xcK/To) PD4 6 2 3 PCo (ADCo)
722 GND
GND 8 2 1 AREF
(xrAL1/TOSCI)PB6 9 2 0 AVCC
(xrAlzrosc2) PB7 1 0 t9 P85 (SCK)
(rl) PD5 1 1 18 PB4(MrSO)
{ArN0) PD6 1 2 17 P83 (MOSr/OC2)
(ArNl)PD7 1 3 16 PB2(SS/OC1B)
(rcP1) PB0 1 4 15 PBI (OC1A)
Abb.1.7:ATmegaS-Pinbelegung

mit demPC
1.9.3Verbindung
Um das STK500mit dem PC zu verbinden,benötigen Sie ein normales,serielles
Kabel.DiesessteckenSie am STK500in die Buchsemit der BezeichnungRS232
CTRL Sie ist ftir die Kommunikation desSTK500mit dem A\rR-Studioreserviert
und kann dahernicht für Ihre eigenenProgrammeverwendetwerden.Dazu gibt es
die zweiteserielleBuchse.

AVRProg...
IC€50Upgrade...
ICE50Selft.st,..
ITAGICEmm Upgrade,..
AVRISPn*ll Upg{ede
AvRüegonupgnde
qrstomire...
qptbns-.
ShowK€yAssignments
gLg-hl,lanager...

Abb.1.8:Verbindung herstellen
mit demSTK500
26 1 Die Vorbereitung

NachdemSiedenMikrocontrollerin denentsprechenden
Sockelgesetzt,
dasserielle
Kabel (RS232CTRL) mit dem PC verbundenund die Stromversorgungftir das
STK500eingeschaltet
haben,könnenSiedieVerbindungmit demPC herstellen.
Dazu starten Sie das AVR-Studio.Klicken Sie sich am Welcome-to-AvR-Studio-4-
Dialogvorbei mit der TasteCazcel.Nun suchenSie im Menü den Einttag Tools.
Dort finden Sieein Untermenümit dem NamenProgramAVR.In diesemMenü kli-
ckenSieaufden EintragAuto Connect.
Nun müsstenachein paarSekundenfolgendes
kleinesFenstererscheinen:

sfl900

PEsEmI F!$ I L""kBisI tu"a"c"dI B'",! I A,r" I

Ea* oevce I

17 EEs Dev@BeloePoorörnna
T,sr--r----_-l
l/ vea, Devceafte Pog€hmrg

a Ino'rHErHel--
_i
t.n"" I v"iry I n*o I
EEFRO[I
a ,, ,,. .t: ...1
G InpL,iHExFire---
I

modead devbe pa.dmeteß. OKI

Abb.1.9:STK500-Dialog

Passiertdas nicht oder sieht Ihr Fensterandersaus (TitelzeilevielleichtConnect


failed), stoppenSie hier und überprüfennoch einmal die Ausgangskonfiguration
desSTK500.DasAVR-Studiokonntedannnämlichan keinemseriellenPort desPC
dasSTK500erkennen.FolgendePunktesolltenSiedannüberprüfen:
. Ist dasSTK500mit Stromversorgt?
o Ist dasserielleKabelam STK500mit der BuchseRS2i2 CTRLund am PC mit
einemfteien,seriellenPort verbunden?
o Ist dasSTK500eingeschaltet? Siefinden einenStromschalter direk nebendem
Anschluss fiir die Stromversorgung.Danebenist ein kleinesLicht,dasim einge-
schaltetenZustandrot leuchtensollte.
. Sie 6nden noch zwei weitere LEDSauf dem STK500,di€ grün leuchtensolten.
wenn Sie das nicht tun, könnte die Firmware des STK500beschädigtsein. lst
dies der Fa[, schaltenSie dasSTK500äusünd drücken d€n SchalterPROGR4'41
w:ihrendsie dasBorrd wieds ehschalten.Danachwechselnsie ins Instalations-
veüeichnis des ÄVR-Studios,dort in das Untelvelzeichnis ST(500. Beispiel:
Program FiIes\,AtneI\,AvRTools\STI(5OADort starten Sie dann die Datei
Upgradae{e.Nün mtisste die Applikation Ihr STK500wieder in den Auslief€-
nmgszuständbefördern.Nach einer weile ist die Iirmware wied€r intakt. Schal
ten Siedäs Bo,]d dannchausund wieder ein die zwei LEDSsolten nun grün
leuchten.
. Unter Umsüindenbelegt ein anderesProgramm den seri€llenPo , den Sie fiir
die Kommunikation mit dem STK500veMenden möchten.VersuchenSie daher
einen anderenPort, wenn einer zu| Verfügungsteht.Und schließenSiealle Prc-
grammq die möglicherweiseauf di€ serielleSchnitrrtelle zugreifen (Terminal-
progranme, Handy'Software,PDA Kommunikationssoftwareetc.)
wenn Sieden Fehlernicht finden können, versuchenSieesnoch einmal Schritt nir
Schritt mit dem Manual desSTK500.Ansonstenhilft Ihnen auJjedenFa[ daslnt€r-
net weiter. Ein Blick auf http://M.a!1büch.de wird Ihnen möglicherweisedie
Lijsung bringen.

1.9.4 Flashen
mit demAVR-Studio
wenn Siedasoben gezeigteFenstersehen,hat dnsA\R-Studio di€ Kommunikation
mit dem STK500erfolgreichaüfbauenkönnen. Siemüssennun im akiven Dialog
noch Ihr A\rR-Modell auswählen,z.B. ATmegaB(sie\e Pfeil 2 in der Gra6l).
AnschließeDdkönnen sie zum Testeinmal den Mikocontroller löschen,dazu ein-
fach di€ ?ste t/dre De1,r.ebetätigen.Im Statusfensterunten (siehePfeil 1) solten
Siedann eire Erfolgsmeldungfinden.
Als NächstesmüssenSienoch die zu flashendeHEX-Datei ausleüblen.Die entspre-
chendenTastenfinden Sie in d€I Mitte des Dialoss im BereichFlasft.Wählen Sie
hier miüilfe der... Tasteeine HEX Datei aüs.
Abschließendkönnen SiedieseHEX Datei mit der TasteProqrdn ir den Mikocon
troller flash€n.
Die andereDEinstelhrngendiesesDialogskönnen Sie h den meistenlinbn unbe-
rühlt lassen.wichtig sind die Häkchenbei Proj,afl 'nn?gMode.Diesesolten immer
beide angeklicktsenr.
28 : :l: . i:'t:::,.,,:: r:. ,,':',r:-:' i ' :' : ,.
1 DieVorberititung ,l

1.9.5 Funktionstest
deskomptetten
Setups
Siehabenä e wichtigen Schritteerledigt.Nun müssenSienoch ehen 6na1enFunt(-
tionstest austuhren.Erst dann können Sie sicher sein, dassIhre Entryicklungsein
richtury einwand{iei tunktioniert. Vorher sollten Sie mit dem Entwickeln und
Experimentierennicht b€ginnen.
Wichtig: VerbindenSiedie 8 Pinsvon PORTBmit den 8 Pinsder LED-Reihe.Diese
beidenSteckerbefinden sich am unterenEndedesSTK500(ir der Nähe der LEDS)
und liegensehrdicht neben€inander.Zur Verbhdung können Si€einesder mitge-
lieferten 8-poligen Kabel verwenden.Der Funldonstest ändert den Zustand an
PORTB und diesewiederkehrcndeJinderung solt€ an der LED-Reihedurch €in
Blinken erkennbarsein.
Auf der beigelegtenCD ROM 6nden Sie€in€ fertig kompiliefie HEX-Datei tur den
Funktionstest.Dazu wechselnSiein dasVezeichnis \ftrr&tiorrteit\. Dort befinden
sichejnigeDateienmit den NamenbestimmterA\rR-Modelle.W?ililenSiedie Datei
mit dem Model .us, dasSieverwenden,und flarhen Siediesemit demAVR-Studio
und dem STK500in den Mikocontroler. Dabei so ten Sie unbedingt folgende
Vorgangsweise einl.Iten:
. Der Mikocontroller mlrsssich im STK500befinden.
. Der IsP-Header-Stecker musskorrek verbündensein.
. PORTBmusskomplett mit der LED-R€ihev€rbundensein.
. Ein serielesKabelzwischenPC und STK500mussansestecktsein.
. DüsSTK500einschalten.
. Erstjetzt AVR-Studiostarten.
. Di€ Verbindungmit dem STK500aufbauen(wie oben beschrieben).
. Im Dialog dasentsprechende A\R-Modell ausw:ihlen.
. letzt die dazugehörigeHEX-Datei von dei CD-ROM ausryählen.
. Die Taslr base Deyicebetätigenund die Statusmeldugenprüfen.
. wenn allesoK ist, die TastePRoG,R/M betätigen.
Wenige Sekundenspäter sollten die LEDSauf dem STK500 in einem schnelen
Inteftall blinken. Wenn das ni€ht der Fa[ isl setzenSie Ihr ganzesEquipment in
den Ausliefezustandzurück und versuchenden vorher beschrieb€nen Abläuf noch
€inmäl von Neuem.Man übersiehlhier sehrleicht €inen Schritt.
Solte trotzdem a e Mdüe vergeblichsein,versüchenSieam besteneine Lösungim
Internet al finden. Ein guter Startpunlt datur wär€http://wwwairbu.h.de.
...:._.,:, . i ::.. | .::r,:rci..Einäihtii.aiä,.täiAw,8öäidi
29

1.10 Einrichten
desmyAvR-Boards
Solten Sie sich fiil das myAvR-Board (wvw.mrarr.de) enechiedenhaben,finden
Sieäuf der b€igeleglenCD ebenfallseinenFunktionstestdazu.

1.10.1Ausgangskonfiguration
desmyAVR-Boards
Das Board ist im Li€f€zustand bereitsvol verwendbar.Sie müssenfür die Pro-
grammierungkeine weiterenAnpasflmgenvornehmen.Fü unsercnFunktionstest
benötigenwir jedoch eine einzigeDrahtverbindung,die Siemit den mitg€lieferten
Kabeh sanzeinfachsteckenkönnen. Dassieht dann so aus:

Abb.1.10:Steckverbin
dungfiir Funktionstest

Siemüsrenalsonur PortB.omit dem I-ED-Gdfl veibinden. Mehr ist ftir d€n Funk-
tionstestnicht notwendig.

desFunktionstests
1.10.2Flashen
Um den Funktionstestin den Mikrocontoller zu flashen,müssenSiebeim myAVR-
Boardetwasandersvorgeh€nalsbeim STK500.Folg€nSiediesertuleitung einfach
Schritt ftir Schritt:
l. MyA\R Boardmit dem PC verbinden.
2. AVR-Studiostarten.
3. lm Menü: Iods den EintragÄVRProgausw:ihlen.
4. Nun wird dasangeschlossenemyA\aR-Boardautomaüschgesücht,
30

Is solte folgenderDialog erscheinen:

qeqq | , -!1']- j !"n I

Abb.1.11:Progräm
mierungdesmyAVR
Boards

Mit den nür folgenden letzten Schiuen können Sie das Testprogrammjetzt
flashen:
1. Dfl.lcken Sie die TasteBro-se und w?ihlenSie das }lEj{-F1le .Funktionstest\my,
Ar4? Ä?MEG/l8.he{von der CD.
2. Stelen Sie unten den richtigen Mikrocontroller ein. Im Auslieferungszustandist
diesderATmegas.
3. Diü.ken Siedie TasteP/o8lamim Absclmftr-Flasl?.
Ihr Programmist nun geflasht.
WenigeSekundenspätersolte die grüne LED äuf dem myAVR Boardschnel alter-
ni€rendblinken. Tut esdas,tunktioniert Ihr Boardeirwandfrei.
Hinw€is: Siefinden auf der beigelegtenCD alle notwendigenDokumenteärr Ver
w€ndungdesmyAvR-Boards.

1.10.3SupportübermyAVR.de
Ein Blick auf M.nyavr.de lohnr sich.Siefinden doir zahlreicheBeispielefiir den
einfachenEinstieg in die Entwicklung am myA\ß Board. Außerdem gibt es dort
einen umfangrei.henund kostenlosenFunktionstestzum Download.
1,11 Softwarc-Entwi.klung
mit deh AüR-studio 37

Ein gut besuchteslorum bietet großartigenSupport und hilft auch bei komplexe
ren Problemenweiter.Der HerstellerdesmyAVR Boardsbietet auf seinerwebseite
zusätzlichzähheichepra{isodentierte Beispielprojekteund viele Schaltungenzum
freien Downloäd an.

1.11 Software-Entwicklung
mit demAVR-Studio
Die meistenAvR-BntwicklerverwendendasAVR-Studio,dasiiei erhäldichüber die
ATMEL Webseitezu beziehenist. Esist auchdeswegenso beliebt,weil esüber einen
integriertenDebügger/Simulatorverfügt.Ständardfeatures
wie S)'ntax-Hig}lighting,
guteIntegration desAVRGCC-Compilersund die Unrerstützungvon mkII, ICE40,
ICE50,ICf,200, A\R-Dragonund demSTK50O gebendemProdult die notwendige
Praxistaugliclkeit.

1.11.1Schrittfür Schritt:Proiekterstetlen
NachdemSie dns A\R-Studio installiert haben, sehenSie gleich nach dem Stafi
einen Project wiärd. Drücken Sie dort die TasteNew P/oject,ers€heinteine Dia
logbox,die etwaso aussehenkann:

Abb.1.12:Project
Wizard
32 1 DieVorbercitung

ln dieserEingabemaskemüssenSie zuerst den Projekttyp auswällen (Assembler-


oder C Projekt).wählen Siehier ÄVR GCC,um den C CoDpilerzu verwendeD.
Nun nüssen sie im rechtenEingabefeldno.h einen Projeknamen angeben.wenn
Siemöchten,könnenSieden Speicherort lhresProjektsnoch ändern.KlickenSie
anschließendNerr DasfolsendeBild erscheintl

Abb.1.13:Auswahl
des[4ikrocontrollers

wenn Sie einen bestimmten Debuggerwie etNr den AVR-Dragonoder das nkII
velwenden,können Sie in diesem Dialogleld die entsprechendeAuswahl treffen.
Die rne;sten
BeispielediesesBuchskönnenSiemit demAVRSimulatortesten.
NachdernSie h;er enren Debusser/Simulator aussewäh]thaben, nüssen Sie
abschließenddas entsprechendeAVR-Modell wäNen. Finden Sie Ihr Model nicht
in der Liste,unterstüt4 der Sinulator dieseVariantenoch nicht. Die meisten
Modelle sollten hier jedochgeführt sein.
Haben Sie Ihre AusNa|l getroffen,bleibt Ihnen nur noch der Klick auf die Taste
F'ral. Damit habenSieden Projectwizard abgescblossen und kurz daraufsollte
sichlhre Entwicklungsumgebung enrge chtethabeD.
1,11 Soft arc'Entr'vicklung
nit den AVR-Studlo 33

Ihr A\R-Studiokörnte nun etwasoäusseheD:

is!. atr.a:;:n-;; j::;:r.::;:;i:::::i.:;:::

Abb. 1.14:AVR.Studio

Sienerden natürlich noch keinen Codesehenund unter Umständensiehi daseine


oder andereFensteretwasandersaus.Der ProjectWizärd hat für Siedaskomplette
Pmjekt mgelegt und dabeiautonatisch auch einigezusätzlicheDateienfür Sievor-
bereitet.Därunter{indetsichdasHäuptprogramm, daszu diesemZeitpunktnoch
leerist.EstuagldenNamenIhresProjektes und hat die Endung,,.c':Ihr e tesPro
jekt ist somit erstellt.

1.11.2Konfiguration
desProiektes
NachdemSielhr Projekt erstellt haben,müssenSieno.h einigewenigeEinsteliNl
genvomehmen.Dazu gehenSieim Menü auf P/ .iectund dann auf dasUnter-
menü Confguntio opno'rr. Es sollte folsendes lenster erscheinen (siehe
Abb.1.rs).
54 7 DieVotuercitung

Abb.1.15: Prcject0ptions

ln diesemDialog finden Sie links, vertiknl angeordnet,eine Reihevon Konligrrä-


tionsmenüs.le nnchdem, welchesMenü Siehier auswähleD, sehenSieauf der rech
ten Seitedie dazugehörigenEirNtellungsmöglichleiten.
Wir benötigenlrier lediglichdasersteNIenüGererdl.Dort gibt esdrei Einstellun-
gen,dic wichtigsind:
. Deltceiwahlen Siehier dasAVR Mode , dasSieverwenden.
. Frcqueq: Gcbcn Sie hier die T*tfiequenz des Mihocontrollers an. Diese
Angabewird in Hertz (Hz) gemachtund beträgtin der Standärdkonfigürätion
desSTK500meist3.680.000 Hz. Die AngabederTaktfrequenz ist tur vielezeitab
hängigcRoutincnunbcdingtnotwendig,da der Compilerüber deDHardware
aultau schließlichnicht Bescheidweiß.
. OPftdizafior:Normderweisestehthier,, O0",dasbedeutet,dassder Compiler
Ihren Codegar nicht optimiercn wird. Siesolten hier jedochin den meistenIü1
len äuf die linste ury Os" wechse]n.Mit dieserEinsteilungoptimiert der
"
Compilerlhren Codebestmöglich in Bezugauf die Größc.Dasist ein bckannt-
li.h knappesGut bei denDeistenMikrocontrollern.
1.11 Softwore-Entwicklung
nit den AVR-Studio 35

Wichtig AchtenSier-oralem auf die EinstcllungOltimizdto,. Dcr Untersclied


^!is.hen,, O0" uDd,, Os" kanndaiin bestehen,dassIhr ProgrammohneOptimie
rung 85yo des Progranrmspcichcrs bclegt uld mit Optimiemns auf 4,5o/o

1.11.3Kompilieren
deserstenProgramms
Um dic cin{,andfrcicfunktion desAvR'Studioszu testeD,ist es an der Zeit,das
ersteftstprogramrnzx kompilieren.TippenSiedaherfolgendenQuellte{th däs
Tc{tfcnstcr in dcr Mitte desAVR Studios:
#include <avf/i o. h>

{
whie (t)
{
P Q R T- B 0 x F F i
P O R T=B 0 x 0 0 1

SpeichernSiedasProjekt.
Mit der thste !'7, oder dem Menü ßuild und dofi dcm Untcrmemipunlt Build
kanndasProjektkompiliertwerden.Siesolltenanschließend den Statusreport
im
untercnlenstcrsehcn.Dicscrkönntcetwaso aussehen:

lrtl

Abb.1.16:Statusreporr
desCompilers

Achten Sie hier arf die Zelle: Build succeüLeitith 0 Warnings...Nur wenn diese
Zeileerscheint,ist lhr l,rojektauchfel erfreikompiliertworden.Ein wciteresZei-
chendifür sind dic grüüenPunkteauf der linken SeitediesesReports.Tauchen
dort rotePunkteauf,ist ein l'ehleraufgeketen.
SolltcnSic äus enler lehlermeldunsnicht scblauwerden,empfiehltsich die
Sucheüber Google (w1\'w.google.con).Die meistenFchlcr sind s.hon vorher
'I Die Vorbereitung
36

einmal jemanden unterlaufen und oft finden Sie hicr cinc schnclleLösung Ihrcs

Im Menü Bdld finden SieweitereUnteryunkte, von deneDSiejedoch in den aller


meisten!ällen nur denersten,ebenfals3 ild,benötigen.

1.11.4Debugging:
Dieersten
Schritte
mitdemAvR-Simutator
Mit dem integrierten AvR-Simulätor steht Ihnen eiD mächtigesWerkzeugzur Ver
tugung.Viele lehler lassensich im Simulator Schritt tur Schritt aufdecken.Seine
Funktionist sehrumfansreich. AusdiesemGrundfolgthier nur ehe kurzeEintuh
rung.
NachdemSieIhr Programmkompiliert haben,können Sieden Simulator über das
Menü De&rg und anschließenddem Untermenü Std/t De&rSgirg aktivieren. Es
dauert nun einigeSekunden,bis der Simulätor startbereitist.

Abb.1.17:Simulator

SobsldSieeinengelbenPfeillinLsnebenIhren Programmzeiler ist der


erkennen,
Simulatorbereit.
Zur SteuerungdesSimulatorskönneDSiedieseMenüleisteverwenden:

r El .;l+ =i=.=,{}Elld . 4r
1 2 3 4 5 6 7 B 91011 121314 Abb. 1.18:Menüleistedes Sirnulators

Hier einekurze Erklärung der einzelnenIcons:


l. Stwt Debugging.DashabenSiebereitserledigt über dasHauptmenü.
2. StopDeltsgsin$ Hiet beendeDSieden Simulatorwieder.
3. Rrr: Mit dieserTastestartenSiedasProgrimm,jedochnicht im ,,Schritt-ftir-
Schritt" Modus, sondern frei laufend. DieseAustuhrung machr nur dann Sinn,
wein SieBieälpoints definiert haben.Mehr däzuspätel
4. Pdrce Hier pausierenSieein mit Rl/, gestartetesProgramm.
5. RerrtiSetztdenSimulatorzüück an denStart.
. 1,11söft.wäi;:Eitwit!.itiig:ki.ir:däö;lvpisrp4iit:.
37

6. ShowNext Statement:wird h diesemBuch nicht behrndelt. Mehr dazu in der


Hilfe desAVR Studios.
7. Step,rto: ScbrittweiseAusftilrung desProgrammcodes(siehedazuden folgen

8. StepOtet Ähnlich der TasteStqplrfo, mehr Informalionen le€iter unten.


9. StepOrt: wird im RahmendiesesBuchsnicht behandelt.
r0. Ä r fo Crruorj Filhrt dasProgrammbis zu d€I Stele.us, an der Sieakue[ den
Cursorplatziert haben.
I l. Ärfo StspiÄhnlich der TasteR r, zeigt hier jedoch jeden einzelnenSchritt im
Simülator an.
12. TWk Brcaleoint: Serztoder löscht einenBreakpointin der aktuellenZeile.
13. Remoeeall ProgamB reai?otnbrEntfernt ale Br€akpoirts ausdem Programm.
14. Qrirkwd.ri s.hälteldäsFensle'Qui(kw"r.h /ur Ltbemachung ron Variablen

Im aktuellenZustandwurde noch kein Programmcod€ausgetuhrt.Mit den Tasten


Fll (Stepbto) und F10 (StapO1,e/)können Sie nun Schritt für Schdtt Ihr Pro
$amm austuhrenlassen.
Der UnterschiedzwischenStepInto rllJd StepO./erbestehtd.rh, d.ss bei Stepl?to
kein Pfogfammabscbnittäusgelassen wird. Egal,wie viele Unterprogrammeaufge-
rufen werden,der Simulator z€igt lhnen jeden einzelnenSchritt an. Im ceSensatz
dazu sehenSie bei Step Orer lediglich den aktuelen Programmblock.wird eine
Uncrtunktion nufgerufen,fühfi der Simulator dieseim Hintergrund komplett aus
und kehrt dann wieder zurück in den aktuelen Progammblock. Dort bewegter
den Pfeil ,lso über den tunlcionsauftuf hinweg und springt zur nächsdolgend€n
Z€ile. Die Funktion wurde also im Hinteryrund ausgeftihft und der Simulator hat
dieseFunktion still übersprungen(daherSfepO?er).

Wenn Sie das oben angetuhrteTestprogamm schrittweiseaustuhr€n,werd€n Sie


nach kurzer Zeit bemerken.dassder Pfeil nach Zeile 8 wieder zu ick zu Zeile 6
springt. Der Grund dafiir ist die while-Schleife.Mehr dazu im entsprechenden
Abschdtt zur C-Progrämmierung.

Ihr kogramm läuft also ,,ewig' in dieserSct eife.Das ist ein guter tulass, um die
Funktionen desSimulatorsein wenis näherkennenzulernen.
38 1 DieVorbereitung

Eine tlpische Simulationsumgebungkönnte etwa so aussehen:

ii avRstudid- tN:\uk6\Rom..\Docom.nk\avRsou(.CodBvrk.d\n.li..k,<l
E fi€ grole.t Euid Edt !e* IooG qebuq llndo{ lep
) ) Jt o -: 3 =S , { , a . , r . ' e . r 1i = = r !r ., ..r;=!=.=r) Elt, . .'
..... r- !6@ i1E € x '.:'
"ri.!!ll.€

rrD.rrd€ <avrTinteirupr ht
tDANALoGCOl.!PAFAToF
sdlfrie tURCfilAEUFE 50
i:sa
.t 9 EXTERNAL_TNTERR
TPT
IsR( TIllER0-0VF-vecr ) . 0TTMEF_CoUNTEF_C
t OrMEF_couNrEF_r
F O F T B' ' P O R T B ]
TCNT0- 2s6 - DURCIIÄEüFE./. 2
oTTMER_CoUNIEF
--...tr8tr i jtf lr{sK wtesg) trtr
- $rFR c138lc159l trE
.$TCCR2 *25ft45) !!!!!!-n
T C N T 0 ' 2 s 5- F)roln an241cr14 trtrtrD--..
OocR, e4e13l tr!!!!n!n
TCCRo = (1 4. C502)j
gllib"l - 9assR k22tk12: !nt]n
TlllSI4 = (1 <{ TOIEo)r rr trtE :t esrioF d3cl}'r) ü
: i:ü

r 3P0RT3
=P0Fr3 &rst&r!) --DÜtrtrtrN
s DDRB !riL&ri) trtrntrtrtrtr!
=PNB n4trtrtrtrtrtr
_{ POFIC
trtrtrtrtr!!L
!ütrtrtrtrtr-
trtrtrtrtrtr.!

ls,d@ -,1 J- ,rl-. .-......'-.:---:Jl


avRsmubiof alto stopDed
a Ln1?,col2 i- Nltl:l!,

imAVR"Studio
Abb.1.19:Simulator

Das wichtigsteFensterfinden Sie auf der rechtenSeite.Es trägt den NamenI/O


Viewund siehtauswie esdie Abbildung|.20 zeigt.
Hierin finden Sie die wichtigstenKomponentendes Mikrocontrollers,wie etwa
Timer/Counter, Ein- und Ausgabeports, Interupts,A/D-Wandlerund vie-
Register,
lesmehr.
OffrrenSiehier mit dem PlusdenPunkt POR?B.Siesolltennun drei verschiedene
Registersehen:POR?B,DDRBund PINB.Bei einemAVR-Mikrocontroller müssen
- alsoob SiegerneDatenausge-
Siezuerstdie DatenrichtungeinesPortsfestlegen
benodereinlesenmöchten.WennSieDateneinlesen wollen,könnenSiediesdurch
dasAndern der ZuständedesRegisters PINB vortäuschen.Wenn Ihr Programm
Datenausgibt,sehenSiedirektnachderAusgabe die Zustandsänderungim Register
4dd,:t !h-N]9 grE
!IDA.IiALOGCOMPAFAToR
j äsPl
! 9ETTERNAT]MEaRUPI
J O ]]MER@UNTER-O
J 6 IIMEF,@UNIETI
jOntmGIFTEA: _ l
!f ni,isx 0*33(0€)
:l$TrtR ü3qo6q
!f TCCR2 e2q&$
O rrNr2 tl211&.r.1)
@0cR2 e?31or43)
jf assR er2&1ä
:rElsFoF &3q0.5q
iral usaRT
j {3Tr/vl

l3P0R13
*PoRr3 rk131&3q
S0DRB l).17(&34
*PrN8 e1q&3o
J :3 PORrc
l3PoRrc e15&39
soDRc &1,{i{x3.ri
sPrNC er3{&33)
! = PoRTo
f,Jg EEPBOM
irEcP0
AIDAD,CONVERTER
Abb. 1.20: l/0 View

PORIB. Das RegisterDDÄB zeigt immer die aktuele Datenrichtung an, also 0rFF
fiir di€ voll€ 8-BiFÄurgabeurd OrlO0für eiüen 8-Bit-Eingang.Wenn Siein diesem
Regrsterdre einzelnenBit-Zuständeündern, können Sie somit die Dat€nrichtung
der Pinsb€stimmen.
Zum Ablauf: NormalerweisestartenSie den Simulator und anscbtießend
"steppen"
duch die einzelnen Programrnmdezeilen.Mit jedem Schritt können sich die
Zuständeder verschiedenenR%ister änden. DieseAnderungensehensie,,live" in
der I/O-View. Si€können denAblauf desProgrammsbeeinflussen,indem Siew:tll-
relrd der Austuhrung verschi€deneRegisteidatenändern (und somit ein€ enerne
Hadware simr ieren).
WennSiedasoben ange{ithrteTestprogranmd€r Reihena€h ausftihrer! sollten Sie
einefordaufendeZustandränderunsan PORTBsehen.VersuchenSiees!
'I Die Vorbereitung
40

1.11.5Debugging:
Breakpoints
Das ebenv€rwendeteItstprogramm ist relativ klein gehalten.In der Praxiswerden
SiewahrschennichsrößereProjekt€durchführen.In einemunfängreichen Pmjekt
kann esdäIer sehrmühsamseil, sic}l,,stepby step"durchden Codezu scNagen,
un endlichan die vermuteteStellezu selansen. Aus diesemGrund gibt es soge-

Ein Breilpoint ist einebestimmtc Stele im Code,an der die Progranmaustuhrung


(im DebuggingModus)stopptbzv. pausiert,sobaldsieerreichtwird.Nehmenwir
nocheinnal dasvorhinveMendeteTestprogramm züVeranschäulichung.

Abb.1.21:Breakpoint

BewegenSieim AvR-Stuitio den Cüsor in die Zeile 8. Wenn Sie nun die TasteF9
drLicken(odcr im Menü Deü g den Unterpunk Toggle3/eaftpotnt ausw:ihlen),
sehenSieeinen markantenroten Punkt auf der linken Seite.Ddcken Siedie Taste
ein weiteresMal, verschwindetder Breakpointwieder.DasSetzeneinesBreakpoints
ist also sehr einfach.StartenSie den Debugnodus, nachdemSie einen Brerlpoint

wie üblich wird der Simulator vorbereitet,bleibt auf der erstenCodezeilestehen


und warter auf lhre Befehle.Nun gehensie abernicht schritt tur Schritt durch den
Code,sonderndrücken die TästeFs (-Rrs).Das Programmwird ntlll gesta et l1nd
solängeausgefühfi,bis der Brcakpointerreichtist. Diesgeschiehtim Testprogramm
schonnachwenigeralseinerSekunde.

Ietzt ist lhr Programmpausierturd SiekönneDin ler Ruhedie Registerüberyrü-


fen. Sie können von hier aus nuch ganz normal weiterstcppen.Man setzt einen
Breakpointoftmälsvor eine kitische Stelleund gehtdann Schritt tur Schritt durch
denz-uprüfendenCode.
1.12 Sofrwarc-Entwickling
nit den codAvision
Avkc-conpikir 47

1.12 Software-Entwicklung
mitdemCodevision
AVR
C-Compiler
1,12.1Überblick
undBezugsquellen
Obwohl dasAVR Studio ftei erh?iltlichist, einen Simulator besitzt und direk von
ATMEL angebotenwiid, gibt esauch eine Reihevon sehrbeliebten,kommerziellen
Tools.Eine der wohl komfortabelstenEntwicklungsumgebmgenist dei CoAel4dor?-
ArA C-Conrptler.DieseSofh{arewird von der Firma,,HP InfoTe€h"verhiebenund
z?ihltUnternehmenwie Boeing,DuPont,Intel ReseärchSeatdeodei aüch die NASA

Hier ein Auszugausden Features:


. Läuft auf allenwindows-Versionen(inkl. windows Vista)
. Editorunt€rstützt Sr,fltaaftigl,ltgfttagurdAuto-Indentation
. SchnelleFloating-Point Bibliothek tu die neuenATmegaChips
. ZablreicheCode-Optimierungsrouttnen
. UnterstütztInline Assembler
. Kompatibelmit dem AVR-StudioDebugger(erzeugtDebuggingCode)
. Kompatibelmit ICE200,ITAG-ICE und anderenAIMEL-Ern1 atoren
. Unterstützt alle wesentlichenATMEL AVR-Chips (es bestehenjedoch Unter-
schiedezwischenLight und StandardEdition)
. Biblioüekenfiir LCDS,I,C,RTC,l-wir€, SPI,Dela)$,BcD/cmy-Code,etc.
. AulomätischerProgramm-Erzeuge.(Crd€Wizard) setu innovativesTool zur
Gen€rierungvon Quencodesnäch dem Einstellen der gewünschtenParameter
(Timer-Zeiten,Portrichtungen,RS232Parameter,etc.)
. InHudiertesTerminal (RS232,RS422,RS485)
. Inldudierte Programmiersofware (Chip Pmgrammer) - STK500 und AVRISP
kompatibel
Die Soltwareist in drei Versionenerh:ildich:
. Evaluation: Demoversionmit.llen Funktionen,Codegrößeauf 2K begrenzt
. LiCht FolC€DdeChips werden äktuel in dieser Version nicht unterstützt:
ATmega,AT94KFPSLIC,AT9oUSBund AT43USB355
. Standard:Kompletversion, 1 lähr Suppoi & Updates

Preislichsind beideToolsmoderatangesetzt(ca.150Euro tuf Sbndard, cä.90 [uro


fiir Light), atsoauch fiir den Hobbyenh{icldernoch ersch'yinglich.Die Evaluation-
Versionbekommensieunter:
httpt/rewwhpinfotech.ro/htmvdowriold.htm
42 1 DieVotuereitung

Es ist empfehleDswert,direkt mit deD entsprechendenDjstributor zu sprechen.


Eire Liste der zuständigenUnternehmenfinden sie ünter: http://wlew.hpinfotech.
rolmy html/purchase.htm

1.12.2 Proiekterstellen
Na.h dem Start von CodevisionAvR treffen Sie zunächstäuf eine leere Entwick-
lungsumgebung.Uber den Menüpunkt Itle\New können Sieein Projek beginnen.
sie werdenansclließendgefiagt,ob Sie eine sdrr.€-rafei oder ein Prole.t erstellen
wollen. Nachdem Klick auf Projecterscheintnun ein weitererDialog zur Entschei-
dung über die VeMendung desso genanntenCodewzards.BestätigenSiedies mit
Yes.Ls öffhet sich nun ein kleineslenster:

conFralD'I aDc ll2c


Anähq
r\!€ I BrBdqsdI Aolädr{dnalioi
tnip I Ptub I FlbmrrF! rms:

cro"r
s*,. liiGääü-*l
-ll
nDckvr* F*;G;öd
roo'lilfi J6++r,------l

co.e""n,fo*n co"eäEs:
li-h

Abb.1.22rDerCodewizardAvR

Hinter diesem unscheinbarenDialogfensterv€rbirgt sich dff mächtigsteTeil von


CodevisiorAvR. Siekönnen mit diesemWzdrd alle Komponentenund Parameter
Ihres Projekteseinfäch konfigurieren. Abschließendwiid daraüsaütomatischder
entsprechendeQuellcodeerzeugt.Dies ist ein cleveresFeature- vor ailem dann,
wern Siebedenken, wie viel Zeit die Sucheim Datenblattansonsten
beansprucheD

Normalerweiseempfiehlt sichhier dasDurcharbeitender einz€lnenRegisterkarten,


beginnendmit der Einstelung desModells und der TaktFequenz.Auf jeden FaI
7.12 Softwarc-Entwicklungnitden Codevision AVRC-Compiler 4J

werden Sic die RcgisterkartenCfup, Pdlb und eventuell Ttrrers benötigeD.Haben


Sie alle Einstellungengetroffen,dann können Sie nun den fertigen Code erstellen
lassen.Dazu wäIlen Sieim Menü lile den Pu,rkt ce, erate,Sayeand ,1.it.
NachdemIhr Codegeneiiertmrde, sollten SiefolgendeUmgebungvorfindenl

Abb.1.23:codevision-
AVR- Projektumgebung

1.12.3 Konfiguration
derEntwicktungsumgebung
Bevor Sie mit der Bntwicklung starten,empfehlensich noch einigekleine Alpas
sungender Entwicklungsumgebung. Allen voran die Möglichkeit, nach dem Com-
pilieren die Datei gleichdirekt in den Chip flashenzu können.
WechselnSiedazuin dasMenü hoject\ConfgureDon finden Sieeinen Registerei
ter ]nit der BezeichnuDsÄtel Ml]fte. In diesemAbschnitt sollten Sie ein H?ikchen
bel hosam the Chi, rf,achen.Dassollteso aussehen:

F * I c t m e r e ' I e s l o .ßk e l l q ü r { aI

17i;i;Gft;;i i' s'deu*'"Pq


Abb. 1.24: Konflguration
I rieq,dd.Ims.ncMFl.rorFr,rsrPßg,.hhrig
der Entlvicklungsumge-
bung
44 l DieVofuereitung

In dcr Registerkffte C-cloflpilef kann man nachträglichdas Chip-Modell ändern


oder auchdie Takfrequenz.Hier gibt esz-usätzlicheine [instellungsnöslichkeit nit
dei Bezeichnungopnnize fot Hierrit können Sie den Code en$\'eder auf die
Größeoderdie Geschwindigkeit opiimierenlassen.
Die weirerenEinstellungenkönnen Sieim Normalfall unangetastetlassen.

1.12.4 Programmcode
erstellen
NachdemSie mit dem füdewizard lhr erstesProjekt erzeugthaben,können Sie
diesesohne weitereilnderungen direk kompilieren. Der ganzeInitialisieruDgscode
Mrde automatisch erzeugt ünd ist lnüfPihig. Eine tole Eigenschaftvon Code-
VisionAVR ist hier vor allem das automaiischeErstelen von Kommentaren{bei
VerwendungdesCodewizards).Ein Beispiel;

lEt , ... ,.....


lll rl:;:":,:"'-:1":'1.;1"".
a3l a.de Jr.tu. ,.r=i.a
501 Nra -!a& trric:irdEi
5rl x:3 *!i!:. rr3rrrc-tr

ll;.;li:.rli
äl:::;1.::;:
5?! Abb.1.25:Automatisch
erzeuster
Quellcode

Sie wisseDsomit imner, wie der Timer ursprüngiich konfiguriert mrde (siehc
Abbildung). Dasist vor allem dann sinnvoll, wenn Siezu einemspäterenZeitpunkt
eine schnelleUbersichtüber die Initialisierungbekommenwollel. Die Zahlen
,Ieine wtuen hier wenig anssagekäftig.Das eigentlicheHauptprogrämm,bzw. die
Hauptsctrleifeflnden Sieam Schlussdesez€ugten Quelltextes.
Um nun dasvollständigeProgrammzu kompilieren, drücken Siedie Tastenkombi
nation Srrr+und F9. Siekönnen dies auch über dasHaüptmenü Proje.f\Makeerle-
digcn. Achtung. Der Menüpunkt Conpile (bzw. die TasteF9) wilrde zwar den
Quellcodekompiiieren, aber njcht daskomplette Projekt mit allen getätigtenEitl'
steuuDgener7€ugen.SiesollteDdaherimmer den BefehlMal€ veNenden.
Anschließend
solltenSiefolsendes
Fenstersehen:
1.12 Softwore-Entl
icklungnitden Codevision
AVRC-Compiler 45

0Mu4e0breooedE€mdMj

iry] Abb.1.26:DasProjektwurde
elstellt

Dabei zeigt sich nun auch die Alswirkung der vorhin erwä}nten Konfiguration
Ihrer Bntwicklüngsumgebung.Sie sehenhier eine Tastemit der BezeichnungP/o-
gtan the Chip. Dieselasle wäre ohne die vorher empfohlenenEinstelungen nicht
sichtbar.Dasheßt, Siekönnen mit diesemBefeN direkt nach demMafteden fertig
erzeugtenHe,.-Codein den MikrocoDtroller flashen,wäswiedenm sehrprakrisch

weitei 6nden Sie in diesem Dialogfensterden Beicht der Kompilierung. wenn


kehe Febler aulgetretensind, dann solten Sie die Zeilen No Arols und No War-
ttagr sehen.Am Ende diesesBerichts findet sich auch eine ldeine übersicht zur
SpeichergrößeIhres Progranms (Beispiel 17olodesvorhändenenFI-{SH Speichers
sindmit IhremProgranmbelegt).

1.12.5 CodevisionAVR-Programmer
CodevisionAvRverfügt über ein sehr äusgereiftes
werkzeugzurn FlashendesPro-
grammcodesin den Mikrocontroller.DiesesTool funkioniert mit vielenvenchiede
nenVariantenvon Progrdlr,nen.Die Binstellung,welchenHardwäreProgrammerSie
verw€ndenwo en,könnenSieüberdasMenü Settirgs\Programmer etteldlen.
46 1 Die Vorbercitung

rffiFffiffi-i
comumdüpd liö, ;l

V ilnesslg€ CKOva Fu* wriiie

f7 'rl C*gl
derprogrammiersoft^'arc
Abb.1.27:EinsteLlung

Den ProgranraerselbsterreichenSieüber dasMeni Took\Chipprosranmer.

s*:1p!F{'&ld:m@r.i+

h F-;,nffi:l eegllutl g_?s!et


sü.rq fjsä!-- lui

sdii-, €'ls*r $€-h eßjr-i

-
n*Gtui.i
F'*!=9

tr +{k0

I
Abb. 1.28: CodeVisionAVR
Chip-Prc-

Hier die Vorgehensweise,


um Ihr Progräm'n in den ConrroUerzu flasheD:
L Filevo^d FLASH- WählenSiehier Ihre kompitierte HEX Datei aus.
2. wählen Siennschüeßenddasver.wendete Chip-Modell.
3. Prcgratn\EraseChi! - DieserSchritr wird empfohten,da esmnchmat zu proble_
rnen beim Beschreibendcs ControUerskommt, wenn er vorher nichi explizit
gelöschtwird.
4. DrückenSiedie TastePrograr,,,1ll
Achtung: Solltensie die Fuse,Bitsverändernwolen, dann enpfi€htt sich auch hier
dasvorherigeAuslesender akruellenKonfigurarion.Dies können Sieim program_
Der übcl den Menüpunkr Read\F&s,B,r(s) ertedigen.
1.13 AVR-Fuse-Bits47

1.13 AVR-Fuse-Bits
wichtig: Andcrn Sic die Fuse-Bitsnur dann, wenn es für Ihre Anwendung unbe-
dingt nötig ist. Normalweisemüssendie Fuse-Bitsnicht verändertwerden (außer
beim AImegaSfiir den externenTrl<tgeber).
Einesder fehleranliilligstenThemeDin der AVR EDtwicklungsiDddie berüchtigten
Fr.ße-Bits(Eine interessmteund äustuhrli.he Erklärung dazu 6nden Sie nuch im
Internetunter http://www.wiki.elektronik projekt.de/dindex.php/AvR Fusebits
Tutorinl#Die_Fusebits).Bei diesenBits händelt es sich ntn Kotlligßationsbiß. le
nachÄuslieferungszustand (und Modell) ist der Mikrocontroler i.nein€r bestimm-
ten Weisebereitsvoikonfrguriert. DieseStrndardeinstellung fiDdenSieim Daten
blatt(und soltensieSiesichauchansehen).
Vor allem beim ATmcgr8 empficNl sich ein Blick ins Dätenblätt. DiesesModel
wird nämlich mit aktiviertem, internem Oszilhtor geliefert. Welchen Qualz Sie
enern auchinschließen, der CoDrroer wird seinenBetriebstaltnicht;indern.Das
bereitetin den meistenFällenjeden Anfinger eh gutesStück Fehlersuche.Ihnen
bleibt dasjetzt hoffentlich e pärt.
Zu Begnrndie wichtigsteAnmerkung zu den FuseBits:
Ein Fuse-Bits€tzenbedeütet,dcn l4/r/t 0 zu schreiben-
Ein Fuse-Bitlöschenbedeutet,den WerrI zu schreiben.
Hier passierendie meisten Fehler.Nachdem mrn sich endlich seine gewünschte
KoDfigüatioDausBitsund Bl.teszusamnengestellt und in denChip gebrannthat,
stelltman fest,dassnichtsmehr läuft.In denhäufigsten!ällcn liegtesan derVer-
wechdungr-on 0 und L Es gibt z.'yeiKonfigurationsbytes,nämlich ein Hig, und
ein Iorr-Blre- Diesezwei BytesenthaltenfolgendeBits:
High BFe:
. RSTDISBI,
. WTDON
. SPIEN
. CKOPT
. EESAVE
. rlooTszl
. BOOTSZ0
. BOOTRST
Low B)'te:
. BODLEVIL
. BODEN
. SUTT
. SUTO
. CKSEL3
. CKSEL2
. CKSELI
. CKSEIO

JedesdreserBits hat ehe besondereBedeutung,wie auch der abgekürrk Nam€


schonvermut€n lässt.WelcheWerte dies€Bits run bekommensollen, können Sie
auJ1€rscüedeneWeiseherausfindenl
l. Mit demAvR-Fuse-Calculator
2. Mit d€m AVR-Studio
3. Mit dem Datenblatt

1.13.1AVR-Fuse-Calcutator
Der ÄVR-Fuse-Calculator ist ein ftei rcrw€ndbaresOnline-Projd( lon Mark H?l]n-
merhng, zu finden unter httpr//palmar.r.sourceforge.net/cgi-bii/fc.€gi.
Dot müß-
senSiezuerstlhr Chip-Model auswaihlen:

Abb.1.29rAuswahl
desModells

AnscbließendsehenSie das Fensterzllr Einstellungder einzelnenKonfiglrations-


bits:

Abb. 1.30:Konfigurationsbits
1.13AVR-Fuie-Biß49

In der erstenAuswahlboxfinden SiebereitseineFülle von Konfigurationsmöglich


keiten. Es handelt sich hier um die AuswaN der läkqrelle. Der ATmegaSkommt
mit einemvoreingestellten,internen Oszilator. In der Box stehtdazu:
Int. RC Osc.I MHä Start up time 6 CK + 64ms
ICKSEL=ooo1 SUT=101;defalrltvalue
Um einenexternenQüa|z alsTrktgeberzu verwenden,w:iHen Siehier bitte:
Ext. CrystavResonätorHigh Fr€q.jStart-up time: 16K CK + 64ms;
ICKSEL=Il I I SUT=I11
Gerade bei dieser Einstellung passiert oft der Fehler: Programmiert man statt
,,1111" etwa ,,0000",lässt sich der ATmega8nicht mehl ansprechen.le nach Pro-
grammienoftware nuss klar sein, wie man das Fuses€tzt (,,0") und wie man es
wiederlöscht(,,1").
NachdemSie nun also Ihre Einstelungen im linlen Bereichededigt haben,sehen
Sierechtsden entsprechendenKonfiglrationsstatusder FuseBits (Low und High).
Ein gesetztes
H?ilrchenbedeutet DiesesFuse-Bitmüssprogrrmmiert werden (siehe
kgende darunt€r).
Wie Sie nun die einzetnenFuseBits progranmieren können, wird anschließend
erklärt. Vorerst noch einige Informationen zur richtigen Konfiguration mit dem
AVR-Studio.

1.13,2Fuse-Bits
im AVR-Studio
Um im A\R-Studio in die Fuse-Bit-Konfigumtionzu gelangen,mtissenSieIhr Ent-
wicklungsboardmit dem PC verbinden und starten.Arschließend tuden Sie im
Menü den Punlt ?bob\Prog7aln A\rR\A1ltoCo nect.Nn sollte dasBoard erkannt
werden und ein Dialogfenst€rerscheinen(Das solte derselbeDialog sein, den Sie
bereitsbeim mit dem AVR Studio gesehenhaben). l{icken Sie hier auf
"Flashen"
den Registereiter&6e5.
In der nun sichtbar€nListe find€n Sie ale möglichenFus€-Bit-Einsteungen (ähn-
lich wie A\rR FuseCalculator).Das AVR Studio ist hier sehr einfa€hzu bedienen:
Ein H?ilchen bedeutet,,prognmmie(1 kein H: <ch€nbedeutet,,nicht program

Wichtig: Bevor Sie im AVR-StudioHäkchen setz€n,empiehlt es sich immer, die


altuellen Ehstelhngen vom Chip zu lesen.Drücken Siedazu die TasteRead.Nun
enü?ilt die Liste die akuele Konfiguration desMikocontrollers und Siebrauchen
sich nür noch auf Ihre gewünschtenAnderungenzu konzentrieren.
50 7 Die Vorbereitung

NachdemSic die !-useBits gesetzthaben,drückenSiedie TnstcP/ogrdtl,und das


kürnDrertsi.h um denRest.
AVR-Studio

in PonyProg2000
1.13.3 Fuse-Bits
SolltenSiee cn speziellen Prognmmicrddapter verwenden, ilso nichtdasS'IK500
odcl ein kompatiblesBoard,cmpiehlt sichdie SoftwarcPolr)'Plo9000 zur Andc-
rung der Fuse-ßits. Dieses Prognn1m ist frei crhählich unter
http://wwnlancos.com/pps'in95.html. Sie finden die aktuelsreVersioDebenfalls
auf der beigelegten CD im Ver?eichnis Soft,//itrc\PanyPros2@0\. Hinweise zur
ADwendung von PonyProg.2000finden Sie im lnternet untel
http:/^fln{.nrikrocontroler.net/articles/Pory-Prog-TutorialDer luse'Bit Dialog
von RrnyProg2ooo siehtfolgendemaßcn aus:

T i T fuorLock12 T Oüotlock1l T Boollockoz T AodLd.(t1 T Lock2 T L!+1

!;D;N r . ,', r i*o.ri .,r*i ro,oorszr


r r;ac;N i uooriroiuoo,rr
BDDEI']
BOOLEVELIi T SUI] 17 sLrrül7 aK5EL3
i7 CtigEL2
l7

rodevi.edara.heer
Berer phä e

!**r l[-:qql
Abb. 1.31: Fuse-Bits
in PonyProg2000

Acht€nSicauchhier unbedhgtdarauf,wie PonyProg progranDiert


die Füsc-Bits
Ein gesetztes rlso
Häk hcnbedeutet,,programDiert': "0".
NachdenSiez. B. mit dem AVRFuseCälcr ator die richtigenKonfigurationsbits
haben,könnenSiedicsemitPoDyprog2o0o
bzw.dxsHigh'und l.ow B)te festgclegt

PonyProg2o00 ;st lor alcm dann geeignet,Ncnn Sie kein SlK500 kompntibles
Itoard venvenden. Unter diesem Link httpr//wlrw.mikmconlroler.net/articles/
Pony-Proglltoriäl finden Sic einfacheSchaltplänc die
für Programmieradapter,
m it Porlylro92000 kompatibelsnld.
1.13AVR-Fuse-Bits) I

1.13.4Finger
wegvon...
...denfolgenden Bits:
. SPIEN
K:mn nü mit High-Voltage-Programmingverändeit werden.Wird diesesFuse'
Bit gelöscht,steht kein lsP-Zugriff mehr zur Vertugung.Siekönnen den Mil(ro-
controllerdannalsonicht mehrprogrammieren.
. DWEN
Kann ebenfallsnur nn Hish VoltaseProgranming Modus verärdert werdeD.
Mit dem Setzen dieses Fuse-Bitswird die Debug\a'ire-Schnittstee aktiviert.
Gleichzeitigwird dasLow VoltageProgramming(lSP) deaktiviert.
. RSTDISBL
Isr diesesFuse-Bit gesetzr,wird der Reset-Pinin einen I/O-Pin umgewnndelt.
Dies tuhrt automatischdazu, dasskein ISP Programmieradaptermehr tunktio
niert. Das Rü.ksetzendiesesBits ist ebenfrlls nü mit einem High-Voltage-Pro-
grammermöglich.

1.13.5Fatsches gesetzt?
Fuse-Bit
IaIs esIhnen nun doc}l pässiertist, dasssie versehendicheir filschesFuse-Bitver-
anderthaben,kann die folgendeChecklisteweiterhelfen:
. KönnenSiedie FuseBirsim AVRStudioodermit PonyProg2o00 noch ändern?
wenn ja, reagiertzwar Ihr Mikocontrolier niclt, aberSiehabensich noch nicht
ausgesperrt. Am bestenüberyrüfenSie hier einfachdie Einstellungen tur die
Taktquelle.
. Wenn Ihr Mikocontroler gar nicht nehr reagiert,könnte esauch seh, dassSie
einefalscheTaktquelleausgevählthabenund Ihr Controller nurr auf einen Takt
wartet,um wieder ansprechbarzu sein.ln diesemFaI müssenSieüm einenT.l(t
auf den Pin XI4tl legen. Dieser Takt kann beliebiger Herkunft sein, sollte
jedochunter 16MHzliegen.HabenSienocheinenanderenAVRzur Hand,pro
$ammieren Sie€infach €in€ simple Endlosscbleife,die einen Pin zwischenhrgl
und lo, toggelt.DiesenPin könnenSie direkt am XTALI Pin des,,Patienten"
änbringenund sic soltenmit Ihrem Programmierädapter wiederZugritrhaben.
Kaus Leidingerhat hierzu ebenfallseine sehreinfacheLösung (http://klaus-1ei
dinger.de/np/Mikrocontroller/neinetools.htnl#Preserver).
. Siekönnen keine luse-Bits mehr ändem, der Mikrocontroller s.heint komplett
,,tot" zu sein und reagiertauch nicht auf eine externeTakquele? ln dies€mFall
benötigen Sie einen Hv-Progrämmer (High VoltageProsramning). Wenn S;e
dasSTK50O besit?fn,vertugenSiedamit auchschonüber ein HV fähigesPro
gJdmmiergcrir. An.onslen .ind folgcndcI hls cmpfehlen'werr:
52

HvPIog (guterSupport,mächtig€s
Werkz€ug
und eirfacherNachbau)http://wlvw.
g/
der-hammer.infoihpro
AVRDoper(STK500kompadbel,USB-to-RS232-Adapter, OpenSourceund eben-
fatlssehrguterSupport)http://www.obdevat/products/avrusb/avrdoper.html
53

2 DerMikrocontrolter
2.1 Grundlegendes
Die meistenMikrocontroler sind ähi i.h aufgebaut.Im folgendenBlockschaltbild
sehenSie,wie ein Mikiocontroller in etwa ausgefühfiseinkannl

;i
Abb.2.1:AufbaueinesMikocotrollers

EntsprechendeKomponentenirn Detail:
ProzessonDasHerz desMikrocontrollers. Hier befindensi.h die ArithDetikein
heit, die Kontrolleinheitund die Register,
wie etwader PC (ProgrämCoünter),
Äl&umuhtor Register,StackPointer,...
Sp€icher Der Spcicherenthält den eigendichenProgrämmcodeund dient oftmals
zusätzlichauch alsDatenspeicher(program neDory/data memory).
Interrupt-füntrollen DieseEinheit kümmet sich um die gezielteUntefbrechung
desiaufendenProsranns,je nachdenfür \rclcheEreisnisse der Conrrollerkonfi-
glriert wurde. So kann z. B. eine Zustands:inderungvon lo, auf hg,, an einem
bestimmten Pin zu einemInterruptführen.
Timer/Counter: Ein Timer/Counter ist im Wesentlichen eine Zihleinheir.
Dabei können die ZäblgeschwindigkeituDd der Bereich eingestellt weideD. le
54 2 DerMikrocontroller

nach Kon6guration kaDn ein entsptchender Lrberlauf zu einem Int€rruPt tuh

Einttusgabel€itungenr leder Mikrocontroller besitzt eine Reihevon ?ifs, die zur


Kommunikation mit externen Schattungenverwendet werden können. Ie nach
Konfiguration häben diesePins noch weitere Funltionen So können bestimmte
Pinsz. B. (je nachlinst€lung) alsdigitale odef analogeEing:ingeoder a]sSPI-Inter-
fac€dieneD.Hier eineUbeßicht:
Digitall/Or Die digitalen Ein- und Ausgängestellendie Schnittstellezur ,,Außen-
welt" &r. Mit den sogenanntenPorfr können Sie Zuständein beide Richtungen
senden.So kann eh Poft z. B. zü Zustan&bestimmungeiner e{ernen Schaltung
dienenund ebensoeinen Zustand an eine exleme Schdtung weitergeben.Ein Port
bestehtnormalerweiseaus 8 Pins (vereinzeltauch nur aus 7 Pins oder weniger)
und,je nachMikrocontrolerstehtein Port (oderstehenmehrerePorts)zur Veffi-
gunc.
Analog-I/Or Die meisten Milrocontroller besitzenaußer den digitalen Eir /Aus
gangsleitungenauch noch analogeKanäle.Im Unterschiedzur digitalen Abtastung
(also 0 oder l) wird hier meist ein mehr oder weniger genauerSpannurgswertan
den Leitungengemessen. Eswird tlso nicht nur zwischenld und fiigh unterschie-
der, soDdernz. B. die Spannung,,3,2V" gemessen. Man nennt die analogenEin-
gangsleiirngenauch Jaar,ile.le nach Konfiguration können dieseKartile verschie
deneAuflösungenmessen,alsomeistw€rte im Bereichvon 8-12 Bit liefern.
Schnittstdlen: Manche der Pins besitzenzusätdicheFunldonen. Dazu gehören
bekannteSchnittstellenstandardswie etwaRS232,SPl, SCI,I']C,CAN oder b€i grö
ßeren Contollem eventuel sopr USB, Ethernet und PCl. Das bed€utet,dassje
nachContoller nur bestimmtePins{iü die,,seriele Kommunikation" oder älsSPI-
Ausgangoprimiert sind. Die Pinbelegungfindet man meist am Beginn desDaten
blatts.

2.2 Speicher
undRegister
wie bereitserwähnt,wird der SpeichereinesAVR unterteilt in:
. Programmspeicher (FI,ASH)
. Dätenspeicher(SRÄM)
. EEPROM
. Registei(GeneralPurposeRegistetI/o-Register)
2.2 Speicher
und Registet 55

2.2.1 Programmspeicher
Ein großerVorteil der AvR-Familieist die FLASH Technologie,die zur Speicherung
des Programmcodesverwendet wird. Damit ist das Programm mehrfach ,,aus-
tauschbar".Ein Contro er kaDnim Durchschniftalsomindestens 1.000-matneu
beschriebenwerden.

Die Art der ProgrammierunsdiesesSpeiche$ (daj kann entweder


"Beschreiben")
seriell oder paralel efolgen. Sie können damir relativ einfach, ohne Auftrennen
einesbestehendenSystems,ein neuesProgrsmm ,,laden".Dies ist vor allem &nn
sinnvoll, wenn es sich um eir Firmware Upgradehandelt,Sie also rhre in Velwen-
dung stehendeBetriebssoftwareauf eineneuereVersionattualisieren.

te nach Modell der AVR Familie findeD SieUnrerschiedeim zur Vefiigung stehen-
den ProgrammspeicherBei manchel ATmega-VnriantenerkennenSie die Größe
desflAsH-Speichers an der Indug: ATmega8= 8 KB Flash,ATmeSai28= 12SKB
Flash.

2.2.2 Datenspeicher
Der Datenspeicher,auch Sn4,44genannt,nimmt alle Daren,die w?ilrend der t auf-
zeit entstehen,temporär aul Temporär deshalb,weil dieseArt des Speicherseine
Spannungsversorgung benötigt, um den Znsrand zu erhalren. Interessanterweise
wird dieserSpeicherbein AVR in drd weitereAbschnitregeteiltl
. Registerbereich
. Ein-/Aüsgabebereich
. EigentlicherSRAM Bereich

Die Aufteilung siehtman auch deudichin der crafik (Abb. 2.2).

Beim Register-sowie auch dem Bin- ud Ausgabebereich hand€lt es sich um eine


sogenmnte,,Spiegelung':Die Arithmerische Losikeirfteir(ALU),alsodasmarhena
tischeHirn desProzessors,hat keinen direkren Zugrili auf die lin- bzw Ausgabe-
pofl. undkJnnlediglirh äutdö 5P"AM Tug,eiien.
Aus diesemGrund findet sich in dem festgelegtenBereichdesSRAMSdi€ Spiege-
lung der Portzuständc.Somit können die arithmerischenOperationen äuch mit
diesenKomponentenarbeiten. Damit muss sich ein C-Entwickter im Normatfäll
jedochgarnichtbeschäftigen.

Im SRAMreirdaüchder Srackuntergebracht. Dabeihandehessichun einenSra-


pelspeic}ler,der anfangsdie cröße NuI hat. SobaldDatenin diesenSpeichertrans
50002

$o010
$001E

$00sE

Datenspeicheß
Abb.2.2rStrukturdes

feriert werden,passtsich d€I Stackan rmd wächstautomatis€hAber Achtung: Br


wächst vom Ende des SRAMSin Richtung Anlang und nicht umgekehrt Mehr
dazuim nächstenKapit€l über Assembler.

2.2.3 EEPROM
DasEEPROM(Electicaly ErasablePrcgrarünableRead-OnlyMemory) wird auch
oft ,nicht-flüchtiger Speicher"genannt. Das beschreibtdiesenSpeicherlYolJ am
besten.Er beh?iltdie Dat€n auch über €inen stronrlosenZustand hinweg.wichtig
ffjr di€senSp€ichertl? sind folgendeEigenschaften:
. DasSpeich€rrvlöschen\on Däten dauert eflvazwis€hen2,5 und 4 ms.
. Das EEPROM ,,überlebt" etwa 100.000Schr€ibzytrden,sollte däher also nicht
unbedin$ alsRAM (bzw.Arbeitssp€icher)v€rwenda w€den
2.3 Peipherie 57

2.2.4 Register
Der A\R-Mikrocontroller besitzt 32 Register die jeweils S-Bit-Daten aufirehmen
könn€n. Die RegisterR26 bis R31 haben dabei ein€ besondereFunktion: Siekön-
nen auch als drei 16-Bit breite ZeigerverweDdetwerden.DieseZeiger nennt man:
X, Y ünd Z.
So wird z. B. der Z€igs X aus den RegisternR26 und R27 gebildet.Dabei gilt das
t\nd da' z:welteRegistenR27, ä]s Htü-Bl,te.
ersteRegister,also R26, als Lo1,r'-Byte
Analog d^zu v€rhaltensich die RegisterR28 bis R31.Man nennt sie deshalbZeiser,
lveil di€seRegisterkeinen Datenwert enthalten,sondern den Wert einer Speicher-

Nach sieht dasnatürlich gleich aus,wenn im Redster nun -FI 0A gespei


"au3en"
chert ist. Mehr dazu finden Sieim Rahmender Assemblerprogammierungund in
den DatenblättemdesjeweiligenControllers.

2.3 Peripherie
Die Peripherie(s€hnittstellezur Umgebung)erlaubt dem Mikrocontroller, Kontalit
mit der Außenweltaufzunehmen.Dieser Kontak karn in zwei RichtuDgenerfol
gen:,,lesend"
und,,schreibend", respektive"zum
controlier"und,,vomCrntroler'l
Der Kontak wird mittels sogenannts Leitungenoder Pirs hergestellt.
Ein croßteil der Pins einesMikocontrollers steht Ihnen ftir bidhekrioDaleKom
munikation zur Vertugug. Da in der Digitaltecbnik eineAuflösungvon 8 Bit eine
Standardgrößedarstellt, wuden auch bei Mikrocontollein ieweils 8 Leitungen
zusammengefasst. Siekönnen zwar diesel-€itungenindividuell steuern,habenaber
direkteUnterstützungfiir einen 8-Bit-breitenZugdff
was das im Detail bedeutet tllld wflum das sinnvoll ist bzw sein kann, wifd zu
einemspäteienZeitpunkt noch erklät.

2.3.1 Ports
Die Zusamm€nfassung von acht einzelnenDatenleitungennennt man einenPolr Ie
nachAusfflhrungIhres gewähltenModells w€rdenSieeineunterschiedlicheAlzahl
än Eir- und Ausgabeleitungenbzw mehr oder weniger Ports vorfinden. Die Ports
werden alphabetischnummeriert (Ä" B, c, ...). Hi€r eine kleine Ubersicht der zur
Ve#iigungstehendenPorts,je nach Modell:
58 2 DerMikrocontrcllet

Typ Po(A Poira PodC PodD PodE PodF PodG

ATTe9a85l5 8-ort 8-ort 8-brl I bit


Alq'e9a8535 8-o't 8-bt 8-brl 8-bil
ATmeqae - 8-bit Tbii 6bil
a-reqa16 8-br 8-bf 8-oit 8-brl
A-me9a32 8-bit 8-bit 8-b1 8-bil
ATmega64 8-bit 8-bii 8-bt 8-bit I'bit 8-bit s'bit
ATmega128 8-bit E-bit 8-bt 8-bit 8-bit 8'bil 5-bji
ATTi.yll/12 6-bt
Arriny24 8-bii 4'b t
ATTiny2S 4-bit 8-bit oo,

Abb.2.3:Ubersicht
derzurVedügung
stehenden
Datenports

Die Datenleitungen erlauben bidirektionale Kommunikation, also und


"Senden
Empfangen".Hier gibt es aber eine kleine Besonderheitder AVR-Seie, die einem
Anfüngergernedie eineoder andereStundeFeblersuchebescherenkann:
Siemilssenvor den SchreibeD oderLesender Dätenleitungen dem Controler die
Richtung angeben.Der Ursprung datur 6ndet sich in der Au{bauweiseder Digital-
logik desMikrocontrollers. Für jedeDPort sibt esauch ein eigenesRegisteadasdie
aktuelle Datenrichtüg speichert.DiesesRegisterist ebenfnls 8 Bit breit und trägl
die Bezeichnungr,ara-rirection RegisteLodet k!lz DDR.

le nachdern,welchenWert Sienun in diesesRegistereintragen,wird die Datenrich


tuDgbestimmt.Eine0 bedeütetimmer ,,Eingang", eineI stehttur,,Ausgang': Neh-
men wir folgcndesBeispielzur Veranschaulichungl
. DDRA enthält den Wert Hex F0.
. Dieserwertsiehtbinär soaus:I1lI0000.
. PORTAbestehtausacht Datenl€itungen,die von 0 bis 7 numme el1werden.
. Das höchstwertigsteBit nr DDRA ist mit dem höchsten Pi]l an PORTA ver
knüpft.
PORTA.Tentspdchtdem höchstenBit in DDRA, aisoeiner l.
Sieerkennen nun diePins,derenDatenrichtung und"Einsans"kon'
auf,,Ausgang"
figudertist.
59

PORTA
# DDRA J

Abb.2.4: DieAufschlüsselungin einerGrafik.

guration
2.3,2 Pull"Up-Konfi
was passiertnun eigendich,wenn auf einer Datenleitungder Wert 0 oder I aüsge-
g€benwird? Oder: WelchenZustand misst der Controlerum Eingang,wenl die
Leitung ,,in der Lüft" hängt, alsore€d€Iauf Masse(GND) noch auf €inebestimnte
Spannungg€zogenwird? Zur B€antwortungdieser hagen verwendetman einen
Pull Up Widerstand.
Er sorgt dafür, dassder Zustandam Port entweder0 V (GND) odff €ben5 V (oder
ähnlich) ist. Glücklicherweisev€rtugl der AVR auch über einen sogerannteniuter-
/,e/, Pu[ Up Widerstand. Wenn Sie also folgende Beschalhrngeher Tasrehaben
Giehecrafilq iinl(esBeispiel),benötigenSiedieseninternen Pu[ Up Iür dasEinle-
sendesZustands:

AVR

Abb.2.5:Pull-Up-Konfisuration
60 2 Det lllikrocontolle|

wenn dieTastegedrücktwird (also"leiteDd" iso,ist derZustandgenaudefiniert.Er


betägt 0 v Daher bekommen Sie auch beim Einlesenden Wert 0 was abeawenn
die Tastenicht gedrücktwird? In diesem fall (bei eirem aktivierten iDtemenPull
Up-widerstand) liegens V am Eingangan, wasdig;tal dem Zustand I entspricht
wäre der Pull-Up nicht vorhrnden, würde der Zustand komPlett undefiniert sein'
Man kann sichdiesenPüll-Up,etwaso wie in obenangetuhrter Grafik'alswider
desCoDtrollels
ständ,,innerhalb" vorstellen.

wie erkentrt der Mikrocoltoler nun, ob man den internen Pu[-Up verweiden
möchte?
Dazu nüssen Sie zuerst das Datenrichtungsregisterauf ,r''rga"g schalten(0x00).
ADs.hließendbeschreibenSie dasPort Resistcrmit dem wert 0xII (bzw.wenn es
Pin handelt,setz€nSielediglichdiesenPin auf l)'
sichnur un eiren einzelnen
Ein trrerrer Pull Up machtnatürlichnur dann Sinn,wennSieDateD,,vomPorf'
lesennöchten.Dennhier mussein definie er Zustandan denLeitungenänliegen'

DDRX PoRTx Pllrup Beme.kung

'hochohmlg(Tri€täte)
oxoo oxoo Nein Der Portist
OrOO OXFF Ja Der Portlä$l de. Stromübe.den
inlernenPullUPil eßenweonam
Elngang löw'anliegt.

oDRr. 3* ir ar.Fn! | rr i\,irut r chrs..,[ta')

desDDRundPottRegister
übefdieZustände
Abb.2.6:Übersicht

wenn Sie in Ihrem Projekt eine LED ansteuernwolen, stehenIhncn hierftü zwei
Möglichkeiten(Detlils unter: http://w mikocoDtroller.net/topic/66109) zur

1
einerLED:Möglichl(eit
2.3.3 Schatten
WenDSienlit der Schaltung;n Abb.2.7 auf die Leitungeine 0 senden,wird die
Spännungam Pin auf 0 V (GND) gesetztund der Strom fließt vom höchsten
durcl den wide$tand und die LED, die somit
Potenzial(Spannunssversorguns)
Abb.2.7:LEDmitPull-Up

SetzenSi€ die Leitung auf l, isr der Aüsgang und es findet kein
"hochohmig"
Strornllussstatt die LED wird nicht leüchten.
Dies kann einem Aneinger bereits eirige probleme bereiten, da es nicht irnmer
logischisf dassbei 0 die LED leuchretund bei I richr - ist man esdoch sewohnt,
dds., al. au.gesLhalterund I al" einge(hrilelde6nierrisl.

2.3.4 Schatten
einerLED:Möglichkeit
2
wenn Sie das myAVR Boad oder das STKS0Overwenden,können Sie dolt die
LEDSdirekt über einen Vorwiderständ mit den enrspiechendenpins am Miko-
controller verbinden. Sie schließendie LED also nicht gegenVCC (wie in Mög-
lichl€it 1) an, sondern gegenMasse.Der Strom wird also vom AVR setiefen. rn
der Schaltune siehtdasso aus:

Abb.2.a:LEDmitBeschältung
gegenMasse
Sie müssenselbstentscheideD,welcheMöglichkeit Ihüen bessergefüllt. Bedenken
Sieaber,dassder Mikrocontro er nui einebegrenzteMengean Strom liefern kann
ünd es unter Umständensinnvoler ist, die LED über einen efernen Pull-Up zu

2.3,5 Mehrfachbetegung
der Pins
Abb. 2.9 zeigtdie Belegüngder €inzehen Pinsd€sfüntrollers. Darauf sind auchdie
Portszu erkennen: PB,PC,PD (PortB, Poll C und Port D). Der Großteilder Pins
(Ports)belegt.Nur wenigeLeitungenstehennicht ftii
ist mit Ein-/Ausgabeleitungen
die Kommunikation zur Vertugung(VCC,GND -).
wie man aber bereits erkennenkann, finden sich in den Icammern neben d€n
angeführtenPorts noch weitere Bezeichnungen.So steht bei PDo z. B. das Kürzel
RxD h der Klammer. Das bed€utet,dassdie Leitungenmit mehrerenFunltionen
belegt sind. le nach AnwendungsfäI können sie daher nur für einen bestimmten
Zweckvemendetwerden.
wil man z. B. die s€riele Schnittstellenutzen,kann man den Port D nicht mehr in
seinerganzenFunktionals8-Bit-Portverwenden, dennPORTD.o(PDo)dientzum
Empfang(RxD) und PORTD I zum Send€n(TXD) seriellerDaten.Natürlich kinn
man die übrigen LeitungendesPortseinzelnverwenden.
Nun bleiben beim -ATmega8 immerhin noch zwei weitefePorts zur vollen Verw€D
dung übrig (wobei hier angemerktwerdenmuss,dassPort C bei diesemModell nür
siebenDätenleitungenbesitzt,nicht acht).wenn man abernun noch den hternen

(BESET)PC6 2A
2 27

25
5 24
23
22 GND
GND a

19 PB5(SCK)
( T 1 )P D 5
12 P83 (MOS/OC2)
PB2(SSIOC1A)
15 PBi (oc1a) A b b . 2 . 9 : A u s z u g a u sd e m
Dätenblatt des ATmegaS.
63

A-iD WaDdler(ADC0 bis ADC5) verwendenmöchte, steht auch Port C nur mehr
eingeschränktzui Verfügüng.
Wenn die Applikation mittels eingebautemSPI (S).nchroneserielle Schnittstelle)
auch noch einen anderenChip steue{ (vin SCL,SDA), stehenkeine vollen 8-Bit-
Portsmehr zur Verfügung.Auf jed€n Fä[ sollte m'n beim Schaltungsentwurfschon
auf die Verwendungder geplantenFunktionen achten,um nichr bestimmte Ein
bzw Ausgabeportsdoppelt zu beiegen.ScNechtwäre z. B. eine Schaltung,die eine
LED an PDo steuernwill und gleich?€itig verwendet.
die serielleSchnittstelle Das
wüfdewegenDoppelbelegungnicht tunkionieren.

2.4 Interrupts
Normalemeiseverarbeitetder Mil<rocontrollereinenBefehlnach dem anderen- er
arbeitetalsosequenzielEsgibtjedochSituationen, in deneneserforderiichist,das
altuelle Progl,mm zu unteibrechen,um etwasWichtigereszu erledigen.Ihr Pro-
gramm kümmert sich z. B. in einer Schleifeum das ,,Scrollen" ehes Textesauf
einemrcD DieserTextwnd so langeangezeigt, bis der Benutzereinetste drückt.
Def Controller mussalsoparallel zur Anzeigeauf dem LCD auchaüf cine mögliche
Betätigungder Tasteachten.

2.4.1 PollingoderInterrupt?
DieseProblemstelungließe sich auf ärei wegenlösen:
. Durch ständigesPdl,sg
. Oder durch einenlrt€l/rpt
PolltflgbeschreibtdasrriederholendeAbfrageneires Zustands,wie etwa den einer
Taste.Dies 6ndet meist in einer Schleifestati, die tsedingungkönnte lauten: der
"Ist
Zustandan PortB.rschonr? Neir, alsobleibenochin der Schleife."
Oftmals fehlen aber in einem Prog'amm die nörigen Ressourcenzur ständigen
Überwachungeires Ports.Das ist z. B. der lall, wenn Routinen ausgetuhrtwerden,
die eineMengeRechenz€itbenöiigen.Sokann esl€icht passieren,dassder tsenutzer
schneller die Tastedd€kt und wiede! loslässt,als der Controller seine Routine
beendethat. somit würde man den Tastendruck,,veryassen". Aus diesemCrund
gibt esInterrupts.
Man stellt einen lnterrupt auf eiD bestimmteslreignis ein und braucht sich nun
währenddesProgmmmabläufsnicht mehr darün zu kümmern. Tritt diesesEreig-
nis nun ein, stoppt der Controller seineaktuelleProgrammausilhrung, merk sich
64 2 DetMikrocontroller

die Stelle,an der dasProgramm palrsiert wurde, und fühfi anschtießenddie soge
\anI'E Interrupt-Senice-Ro,ttrr (ISR) durch.

2.4.2 tSR
Die ISR ist eine speziel gekennzeichnete lunkion, die der Controler ,,anspringr"
und äusfti}Ill. Danachsetzt€r die Progrrmnausftihrung ganznormat an der vorher
pauriertenStele wieder fort.
Is gibt nicht tur alle Ereignisseeinen gemeinsamen,sondem fttr jedesvertugbare
Ereignis einen bestiümten, eigenenInteüupt. Beispieledafiir wären etwa Inter-
rupts beim Empfängen/Sendeneines Bl'tes über RS232,bei Flankenänd€rungan
einemPin, Timer/Counter-Ltberlauf,erfolgreicherÄnalog/Digital-wandlung,usw
Detailszur PiogrammierungdieserISRin der Programmiersprache
C finden sie in
Kapitel4.8.

2.4.3cliundsei
Einer der häüfigstenlehler bei der ProgrammierunginrerruptgesreuerterAnwen
dungenist es,zu versäümen,dassman dem Controller mitteilen muss,dasser über-
haupt die Erlaubnishat,Interrupts aulzunihren oder er, wenn esdie Anwendung
v€rlangt,äb einembestimmtenZeitpünkt keineInterrupts mehr ausliilren dsrt
Um die Äustuhrungvon Interrupts in C zu äktivieren,bedienrman sich desBefehls
sei0. Um alle Interrupts zu derl<tivieren,verwendet man den Befehl cli$. Die
Anweisungenhabenauch in Assemblerdeffelben Namen.Mehr dazu und nähere
Detailszur Programmierungvon Interrupts 6nden Sieim Kapitel über di€ C-Pro-
grämmierung.

(USART/RS232)
2.5 DieserielleSchnittstelle
Der A\R bietet Ihnen bereitshardwareseitigUnrerstützungfür die serielleKommu
nikation. te nach Modell sind bestimmte Pins mit den Bez€ichnungenRrD tllld
TXD ausgetuhrt.Diese Kennzeichnungsteht fiir ,,Transmir" und also
"Receive",
und ,,Empfang€n" (ausder Si€htdesControllert.
"SeüdeD"
Es ist zwar eine gewisseenene Beschaltungnorwendig,um den Mikrocontroller
direk mir eirem PC verbinden zu konnen, diese,,Beschaltung"besteht aber im
wesentlichenaus meist nur einem einzigenChip (und ein paär Kondensatoren),
nämlich demn4,4X232,einemPegelwandler. Hier die Grundschaltung:
ATmegaS-P
PC6(RE6ED PCo{AOCO)
Pq(4rc1) c1-
AGND PC2(AOCA
AREF PC3{AOC3) C2+ lC3
AVCC rc46DC1VSOA)
rc5(ADC5/SCL) c2- GNO

T1]N T1OUT
T2]N T2OUT
PO0(QJXO) R1OUT R1IN
zzpc7tFi PB7(XTALZIOSCA PUfi/O) R2OUT R2IN
PD2(NIO)
PDO(NT'
PD4(XCK40)

vcc tc1 püi;,'iöj


PO7(A|Nt
PBo(rcP)
PBr(OC1A)
GND PB2(SSIOCI
S)
PB3(MOSt/OC2)
_PS4(M|SO)
PB5(SCf0

Abb.2.10:Grundbeschaltung
der seriellenSchnittstelle

2.5.1 Konfiguration
Sie können je nach Wunsch eine beliebigeBaudrateeinst€llen,das Kommunika-
tionsprotokoll festlegenund entscheiden,ob asynchroneroder synchronerTransfer
verwendetwird. Dazu benötigen Sie einige Register,die vor der Verwendungder
Schnittstellerichtig konfiguriert werdenmüssen.Hier die Reihenfolge:
t. Einstellender Baudrate
2. Die Ubertragungseinstellungen konfigurieren
3. Transmitterund/oderReceiver einschalten
4. Interrupts ein- oder ausschalten
Beginnenwir mit dem Wichtigsten,der Baudratei
Die Baudrate (Übertragungsgeschwindigkeit
in Bit pro Sekunde)hat normaler-
weiseeinen der folgendenWertei
1.200,
2.400,
4.800,9.600,19.200,
38.400,
57.600
oder115.200
bps.
le nach Prozessorgeschwindigkeit, also dem Tak, verändertsich auch die Berech-
nung dieserBaudrate.Die Technikervon ÄIMEL habensich dazu eine kleine For-
mel einfallenlassen,die so aussieht:
UBRR= (Prozessortakt
/ 16/ Baudrate)-i
66 2 DerMiktoconttoller

Däs Eigebnisdieserlormel übergeben Siedeln Controler zur KonfiguratioDdei


ßaudrat€.Dazu \-erwendenSiedie RegisterUIiRRH und LßRRI. Min sieht schon,
dassessich dabeium ein 16-ßit Registerhandelt,da esein Higfi-Byte und ein Zolt
ryte gibt. Dazu müssenSieaho dasErgebnnder Fornel h ein H,g/' bm. ein lor-
Büe rerlelen. ln C lurrrred} crdr .o du*ehen:

BAUDRATE 192OA
P R O Z E S S O R T A1(6T0 0 0 0 0 0
I ] B R RF O R M E L ( ( P R O Z E S S O R T A K T / 1 6 / B A U1D
) )R A T E )

5:
(I]ERR,FORM >> E L8 ) ;
8: U B R R=L ( L ] 8 RF
RO RE L ) ;

Als NächsteslegenSiedie Ube ragügseinstellungenfest.Das notwendigeRegister


biertur heißt UCSRC.Mit diesemRegisterlegenSiez. B. fest,ob essichum enre
s).nchrone oder eineaslnchroneUbertragunghandelnsoll.Dazuein Auszugaus
dernDatenblattdesÄTmesaS:

A b b . 2 . 1 1U
: CSRC-Register

Wichtig: Das Bit URSTI muss immer auf I gesetztsein.Ansonstenwird ein ganz
anderesRegister programmiertorehr Detailsdazuim Datenblatt).
Die folgendenEinstellusen könncn daher (unter anderem)mit dem UCSRC-
RegisterkoDfiguriert werden:
. USARTModl1s(asynchron,synchron)
. Parity (Disabled,Enabled/EvenPndty,Enabled/OddParity)
. StopBit (l-Bit,2-Bit)
. CharrcterSize(ZeicheDgröße 5 bit, 6 bit, 7 bit, 8 bit, 9 bit)
werten:
Hier einekurze übersicht mit den eDtsprechenden
USART-Modus:
. Asynchron:UMS[I-=0
. Slarchron:
UMSEL=1
2.5 DieserielleSchnittstee (USART/R5232')67

Paritla
. Disabled/ No Parity:UPMI=0, UPM0=0
. Enabled/ EvenPärity:UPMl=r, UpM0=0
. Enabled/ Odd Paity: UPM1=1,UPM0=1

Stop Bit:
. r Bir USBS=()
.2-Bit:USBS=I

Charact€rSize:
. 5-bir UCSZ2=0,UCSZl=0,UCSZo=0
. 6 bir ucsz2=0,
ucszr=0,
ucSZO=1
. 7-bit:UCSZ2=0,UCSZl=1,UCSZ0=0
. 8 bir UCSZ2=0,UCSZl=l, UCSZ0=l
. 9-bit UCSZ2=l,UCSZr=r,UCSZo=l

In den meistenAnwendungenfinden SiefolgendeKonfiguration:


. As).nchroneLßcrtragunC
. CharacterSizevon 8 Dit
. 1 StopBit
. No pariry

OhDenoch näher ins Detail gehenzu wollen, hier die direkten Anweisungenin C
ftu drei häuig veMendeteEinstellungen:

1r
2:
3:
5l
6l

8:

Hiermit sind die Llbeüagungsparameterfestgelegt.Als NächstesmüssenSie sich


entscheiden,ob die S€hnittstellenur senden,nur empfangen- oder beideskönnen
sol].In den meistenF?illenv.ird eineKommunikation in beideRichtungenverlangt.
Dasverintlvo liche Registerhiertur heißt UCSR3.Äbb. 2.12zeigt eineDarstelung
ausdemDatenblatt.
68 2 Detlvlikrocontroller

ffi".""-
R.""m,8ffi

Abb.2.12:UCSRB'Register

Iklevant sind die Bits AXEN und ?XÄN, also Receiler Eflable lnd Trafls't1ifter
Erdbld.EiDei in diesenBitsschältetdiejeweiliseKommunikationsrichtung ein
Hier ein cinfaches Codebeispiel in Cl
't, / / E m p f ä n süenr dS e n d ee
-rvi rt s\ lcr h
i alt€u
PB- . P-\' |

Unrer UmstäDdenwollen Siebeim EmpfangeinesBytesper Interupt b€nachrich'


tigt werden.Daskönren Sicebenfallsin diesemRegisterfesdegcnDazuveMenden
Siedie Bits RXCI' und T,{c'Il , alsoRuetueConpleteInterrupt EnablenI,.l nansflit
CotnpLete Eine i in diesenBitsschaltetdie Interrupt-Benachrichti-
InterntptEnable.
gung ein. Hiermit habenSiealle relcvantenDinstellungcnfiir eineerfolgreicheVer
wenduDgderserielenSchnittstelle erledigt.

. UBRRH/UBRRL züständig(16 Bit).


ist filr die Baudrate
. UCSRBdient zunl Einschaltenvon Scnderund/oder Empfüngerund der lnter

. I Lsßc leg dr'ÜberrrdsLrrg\pd'Jmcrer


le.r.

Abschtießendnoch ein Beispielfür cire q?ische Initialisierung' wie man sie in den
meisteDProgrammenveMendenkann:
t. loörin. a. ,o.r -,.
: qo.:.e rlPt B6DDAIL 10200
3: # d e f i f e U A R TS E T T I N G { ( T A K T / l 6 L / U A RBTA U D R A T IrI )

5: void setup_uart()
6: {
Bauodöö -F ö
/t
8: L-rBRRu = ( c h a f ) ( UART S E T T I N>G> 8 ) ;
9: U B R R=L ( c l r a r ) ( U A R T - S E T T I N G ) i
10:
il: L,o;no" a
\2: l.lCSR = B( r < < R X E N ) ( I < < T X E N ) i
1l:
14: / / a s y n c h r o i ,8 N 1
15: U C S R=C ( 1 < < U R S E L () 3 < < U C S Z 0 ) ;
16: ]
(usART/Rs232)69
2.5 Dieseielleschnittstelle

vonDaten
2.5.2 SendenundEmpfangen
DasSendenvon Datengestaltet sichsehreinfach.Esgibt eiDensogenannten Trnns-
m;t Buffer,in deDSieIhre Dntenschreibcn. Der Controllerholt dasZeichendort
ab,versendet esund leert damit den Puffer.Sobaldder Putrs leerist, könnenSic
ein neuesZeichenversendeD. SiebenötigendazufolgendcRcgister:
. UCSR{ - enthält den StatusdesTransmit ßuffers
. UDR USARTDatenregisterbzw Transmit-Buffer

Abb.2.13:Daßtellung
desUCSRA-Registeß.

VordemSendenmüssenSiedar UDRE(USART DatäRegistcr


Enply)-Bit überpd
fen.wenn derwert vonUDREI ist,kannder TransmitButrer(dasUDR-Register)
wiederDatenaufrrehmen.Siemüssen.lsolorjedem Sendevorgnng
diesesBir über
prüfenund wnrten,biscsdenZustandI annimmt.
Anscbließend schreiben Zeichenin dasUDR'Register.
Siedassewünschte Der Con-
trollerversendet
esund setztdnmchUDREwiederauf l.
e'nes7-€ichens:
Hier eineC-FunktionzumVersenden
1: v o i d u d r t p u t c h a r ( u r s j g ncehda rc )
2: I
3. / / l l a r t e rb i s B u f f e rb e r e i t
4: l h i l e ( l b i t i s s e t ( I C S R IAD, R E ) )
5: ;
i; / / S e n d e.n. .
8: UDR = c;

Ähnlich tunltioniert dcr EmpfangeinesZeichens.Sieprüfen, ob im Empfangspuf


fer schonein Z€ichensteht.wenn ja, könnenSiees auslesen. DäzubenötigenSie
wiederdasRegister UCSRA.Indiesem!i]l prüfenSiejedochdnsBit R{C (USÄRT
ReceiveComplete).Hat dicscsBit den Wert l, befinden sich Daten im Empfangs
puffer.DiesekönnenSieebensowiebeiln SendeD mit dernRegister UDRäuslesen.
Es sibt diher auch zwci Möglichkeiten für den Empfang:Blo*irg Mode und No,
rlociirg Mode.EntwederSiewater in der EmpfangsÄlnktioD so lnngc,blsein Zei-
chenenpfängenwuide (Blocking),oder Sieschauennur kurz in den Puffer,
"ob
dennschonein Zeichenda ist" (Non Blocking).Hier beideAnwcndungen:
70 2 DerMikrocontroller

BlockingMode:
c h a r u a f t g e t c h a rv( o id )
'
. o r " n , o b s c h o ne i n B y t e j n E m p f a n q s b t i f r e r
, , ,' ö
!h - - " _ " e t / u c 5 P r .D \
..b

Non Blocking-Mode:
1r int uart,getchar(vo d )i
2: 1.
3l / / P r ü f e r , o b s c h o re i . B y t e i m E n p f a n g s b u f f e r

5: r e t u r n 1 ; / / - 1 = K e i f l e i c h € nv o r l r a h d e n
6:

8: l

2.6 Timer/Counter
Ein Timer bz-w ein Counter ist eine Einheit, die mit einer bestimmten Frequenz
eine Zahl erhöhr. Ein 8-Bit Tnner/Counter z:ihlt daher den We ebereich0 bis 2s5
durch und erzeugtdann einen Überlauf besinnt also wieder von voln mit der
Zahl0.
In den meistenF:illenkonfiguriert man den Timer so, dassbei einem Uterlauf ein
Interrrpt ausgelöstwird. Ie nach Zlihlfre,tuenz können Sie so eine peiodische
Funktion ausiilren. Dies eignetsich z. B. zü GenerierungeinesTalts, einer Lrhr
zeit,einesSynchronimpulses etc.
Die Zäh[requenz (Clo.l) kann entlreder intern oder extem erz€ugtwerden.wird
die Clock el1en erzeugt,spricht maD voD einem Corrtel, weil damit die Anzahl
steigenderbzw faltenderllanken ,,gezzihlt"werdenkann. AußerdemhabenSie die
Mögliclkeit, die inteme Clo& durch einensogenanntenPrescalerherunterzuteilen.
Sokann auseinerVielzrlrl von FrequenzengewäNtwerden.
In einemspeziellenModus (CompareMode) kann man den Timer bis zu einem
bestimmtenWe hochzählenlassen,un dann einen Interrupt äuszulöseDSomit
müssnicht nnmer €in Überlauf (bei 256) statt6nden,um ein Sisnalzu erzeugen
Wichtig: Die verschiedenenA\rR Contro er besitzenhier unterschiedlicheKonfi-
gurationen.Ein Blick in dnsDatenblati ist daherunvelmeidlich ,{le folgendenBei-
' .,:..,. ,:;::2i:6,;4tf6iltöi.idt:
. ,r , 77

spiele und Erkläungen beziehensich auf den ATmegaS.Er besitzt zlyei 8- und
einer 16-Bit Timer/Counter.
Hier eine kulze Lbersi€ht der einzelnenTimer/Counbr:
8-Bit-Timer/Counte
. 10-BitPrescaler
. Frequenzgenerator
. PWM Modus
. Unt€rstütztdasZählenvon Taktflanten
. CTC Modus (ClearTimer on CompareMatch)
. EinfacherTimer, tur simpleAufgabengedacht
16-Bit-Timer/Counterl
. BesitztdieselbenEigenschaften wie Timer/Counter0
. (0
Z.üNtim l6-Bir Bereich bis65.s3s)
. VerfiiCtüber ein zusätzliches,
unabhängiges (CornparcRegiste4
Vergleichsregister
. BeherrschtPwM mit r"riabler Periode
. Input CaptureUnit (Zählenetelner Ereignisse)
8-Bit-Timer/Counter2
. BesitztdieselbenEig€nschäften wie Timer/Countero,außerdasZählenvon Takt
tunken
. Erlaubt ,,as).n€hronenModus", also die Verwendungeines 32-kHz Uhrenquarz
als Taktquelle(ist damit unabhängigvom Systemtaktund kann so äuch längere
Zeitabst?inde messen)
Zur ReferenzeineTabelle:

Abb.2.14:Ubersicht
derTimer
72 2 DetMikrocontrollel

0
2.6.1 8-Bit-Timer/Counter
Um diesenTimer/Counter zu verwenden,gehenSiefolgendermaJien
vor:

I . Einsteilen
derZäNfrequenz (Clock)
2. Konfigurierendes Interrupts
3. Einstellendes,,Startwertes"
4. AIe Interrupts,,erlaüben"
5. StartendesTime
DerVorgangSchitt für Schritt:
Die Clock wird mit dem Register?CCROeingestelt:

Abb.2.15:TCCRO
Register

DieseTabelleäusdem Datenblatterklärt die vorhändenenMöglichkeitenl

cs02 csol

000 KeinClock Timergestoppi.


001
010
011 clk = Pro2essortakt/ 64
100 clk = P.ozessorlakl / 256
101 clk = Proze$orraK/ 1024
'1 10 clk - Exl cl@ksisnal
anT0 pin{FalrinS
EdSe)
11 clk= Exl cl@ksiqialanT0 pinlRisinsEdse)

Abb.2.16:Taktquelle
desTirners

Anhandder BitsCS02,CS0l und CS00legen Siealsodie Quelleder Clock(intern/


extern) und deDgewüDschten Teiler fest.tseieinem 16 MHz-Quaü und einen Tei
ler von 8 würde dcl Tim€r/Counter mit einer Frequenzvon 2 MHz zählen.
wichtig: Fürden 16-BitTimer/Counterlgilt dieselbe
TabelleGieheoben).Fürden
8-Bit Timer/Counter2gibt es jedoch eine eigene (siehe
Konfigurationstabelle
Datenblau).
Als Nächsteswird ein Interrupt konfrguiert. wenn der Timer überläuft (also 256-
mat getickt hä0, stoppt der Prozessordie Austuhrung des akudlen PrograDms
und springl an einebestimmteAdresse.IederArt von Interupt (Timer, RS232,etc.)
ist eine bestimmte Speicheradrcssezugeordnet.Diese nennt man auch ,,Internpt

Für dasAktivieren desTimer 0 - Ovetflo14Interrupts veNenden Sie das Register


flMSK (Timer/Counter Intenupt Mask Register).Dassieht so aus:

Abb.2.17:TIMSK-Register

Hier interessiertvorerst nur der Zustand des Bits ?OIE0 (Timer/Counter0 over-
flow Interrupt Enable).Diesesmuss den Wert I enthalten,um den Interupt zu
.ldvieren. ln C könnte dasetwaso aussehen;

Siekönnen nun noch fesdegeD,bei welchemStartwertder Timer zu zäNenbegirnt.


Ein 8-Bit-Timer/Counter zählt nomaleMeise von 0 bis 255 dur€h und erzeust
dann einenÜbedaüf bzw.ein€n Interrupt.
Siekönnen den Timer ab€r auch späterstarten lassen,also nicht et{a von 0 weg,
sondern z. B. von 200. Dies ist sinnvol, denn bei einer Zählfrequenzvon I MHz
würde erstnach256 Schrittenein iJberlauf stattfinden.Daswäre eineFrequenzvon
etwa3.907Hz, alsoalle256ps.
SetzenSie den Startwert auf 246, benötigl der Timer noch 10 Schritt€ bis zum
Uberlauf.Mit einer Z?illfiequenzvon 1 MHz wäredasein 100-kHz Tald.
DiesenStärtwert setztman, irdem dasRegisterICNTO alssogenanütes regis-
"Zäl
ter" dient. Dieseswird vom Timer mit jedem Zähldurchgangum eine Einleit
erhöht. Bei 2s6 fiihit dies dann zu einem itberlauf (Äufrufen desInterrupts, Neu-
sta bei 0). Sie solten dasRegisterdahervor dem eigendichenStarcn desTimers

Wichtig: Sie dürfen in der Interrupt-Rorltine nicht vergessen,das Z?ihlregist€r


immer wieder auf den g€\,rünschtenStartwertzu setzen.Nach dem Ubedaüf wi.id€
der Timer sonstwieder bei 0 beginnen.Meh{ dazuir ein€mspäts angetuhrtenBei-
sprelprogramm.
74 2 Det llikrocontrcllel

ßevor es nun endlichlosgeht,müssenSi€dem Controllernoch den Aufruf aler


Interrupts ,,erläuben".Normalerweisehat der Controller in der StandardeinsteluDs
nicht die Erlaubnis,Interruptszuzulnssen, dä esbesonders zeitkitischeProgramm-
teile gebenkönnte, die Sie auf gar keinen fal durch eineDInterrupt unterbrechen
lassenwollen.Das ist die StandardeinstelluDg desControllers.Mit deln C Befell
seio könnenSieihm nitteilen,dasser abjetztaIe lntermpt zulassen dnli

Unter Umständenwollen Siedie Unterbrechungdurch lnterrupts in minchen Pro-


srammteilenabcrnicht zulassen. DannempfiehltsichderBefclldi0.
seio - Erlaubenal1erInterrupt Aufrufe ab diesemZeitpunkt
cli0 Verbietenaller Interrupt-Aufrufc ab diesemZeitpunkt
MehrdazusehenSiein einen nächfolgcnden
Beispiel.
Nun könnten Sie den Timer startcn,doch das ist bereitsseschehen. In dem
Moment, in dcm Sied€m Timer eine Cloci zuweisen,beginnt er bereitszu laufen.
Wenn Sie den Timer wieder stoppenwolen, weisenSie einfachden Bits CS02,
CSol,CS00(zu findenim RegisterTCCÄ0)je eine0 zu und derTimerpausiert.
bei einem8 MHz-
eines625 Hz-Rechtecksignäls,
Hier ein Beispiclzur Generierung
aimrz.
. p".. .t. .
t: ".. q." , t...6
3; #include <avf/i o, h>
4: #include <avf/i rterrupt. h>
5l
6t / * 3 I 2 5 A l z Z ä h l t a k t q e t € i l t d u r c h ? 5 ' 1 , 2 5 At u * /
7: / * A b e f : l P e r i o d e = z u s t ä n d eH i s h + L o v lD a l r e r6 2 5 N z * /
8 d o e i n e D . o L l' a | |

r0: ' P T ' ' 1 - R00V r _ / " . .


ll: I
t?. / * z u s t a n da n P 0 R T iBn v e r t i e r e n* /
13: P O R T=B - P 0 R T B j

15r /' * N e u l a d e n , n i c h t b € i 0 b e s i n i e r l * /
o: N-0

18:
19r 1r ro .oid)
20: {
'\'0- o DPrra lr'
?
23. / * C l o c kl e t e i l t d u r c h 2 5 6 = 3 1 2 5 0H 2 T a k t + /
. o0-' \0 i
2al
2.6 Tiner/Counter 75

26: / * 1 r t € r r u p t E n a b l e ,f ü f 0 v e r f l o w
2/-, T I M S (= ( 1 < < T 0 I E 0 ) ;
28:
29: / * A l l e l f t e r f u p t s e r l a u b e n* /
30:
31r
321 / * E n d ' l o s s c h l e i *f e/
33: !hile {1) i

35.
36: ]

In Zcilc 4 bindcn Sie das notwendigeHexderfilefür Intettupt-Handling ein. Diese


DateibenötigenSieeigentlichimmer,wenDIhr Programmrnit Interruptszn trul

In Zeile i0 beginnt die InterrupGRor.ltine(nach neuer Schreibweise).Der Inhalt


dieserRoutinebestehtim Wesendichen auszweiAktionen:
l. nö Invertierer de' Porl/rburdivunPurlB
2. Den Z?i}llerwieder neu laden, drmit er nicht bei 0 beginnt (und somit 256
Durchläufebis zum überlaufbenötigenwürde).Hier startetder Zählerbei,,2s6
Anzahlder gewinrschten Durchläufe".Inuserem Fällalso231.Ab hierwerden
nür noch 25 Durchläufebenötigt, um dieseRoutine dasnächsteMal zu starten.
Bei einerZähfrequenzvon 31.2s0Hz (= 8 MHz geteiltdurch 2s6) entspricht
dasenrer,,Uberlaulfiequenz"von 1.2s0Hz.
Im Hauptprogrammfindcn Siedie Initiatisierung desTimers.Anschließendbegibt
(und zähltnattirliclr;m Hintelsrundden
sichder Controllerin eineEndlosschleife
Tinerue hoch).
Achrung: Die wohl wichtigsteAnweisungdesgaüzenBeispielsfindet sic]l in Zeile
30, nännich sdia).Mit dieserÄnweisungteilen Siedem Prozessormit: jetzt alle
"Äb
Interruptserlauben!". Eshandeltsichhierwnklich urr zrei verschiedene
Dinse:
l. SiemüsseD nn RegisterTIMSKdeDInterruptfiir dengewünschten Timer/Coün-
ter einschalten.Diesbeziehtsich dahernur auf den Timer selbst.
2. AußerdemmüssenSiegenerel in Ihrem Programm dem Pro?.essor rnitteilen: Ab
jetd sindallelnterlupts,,erlaubt'.Dasgeschiehtmit derArweisungseiQ.
Hier werdeDanr häufigsteD Fehlergemacht.DenkenSie alsodnrän,wenn etwäs
nicht so funktioniert, wie essollte.
76 2 Der ll4i ktocontroller

2.6.2Output-compare-Mode
Der Timer/CounterbesitztJedochnochetwasnehr Powera1sdasreine,,Hochzäh-
len" einesRcgisters.Sie könnendem Zählerz. D. sagen,bis zl1welchemWert er
hochzählen soll. Siemüssenalsonicht mehr auf einenÜberlaufnach 256 (bzw
65.536)Durchgängen warten,soDdernkönnenschonfrühereinenInterruptauslö

Der Timer zählt in diesemModus dasZählregisterwie üblich hoch und vergleicht


den wert ständigmit einer ,,Obergrenze".Ist dieseGrenzeerrei.ht, wird ein Iuter'
rupt ausgelöstuDd der Timer beginntanschließend wiederbei 0. Durch dnsstän-
dige nennt sich dieserModus däner auch
"Vergleichen" "Compare-Mode".
Wichtig: Beim ATmegaSvertugt der Timer/Countero über keinen CompareMode
(beim ATmegal6jedochschon).Timer/Counterl(16 bit) und Timer/Counter2
(8 bit) haben einen Compare-Mode.wir verwendenftir die Lrkltuung daher den
Ttuer/Counter2.

Um den CompareMode eirzustellen,folgen SiediesenSchritten (die UDters.hiede


sindfett geschrieben)l
zur normalenTimerkonfiguration

I. Fin'reliendcr/ählfrequenz lclo"l)
2. Konfigurieren des Comp.re-Match-lnt€ruprs
3. Einstellendes,,Startwerts"
4. Output-Compare-Regisrersetz€n(OCR2)
5. Alle Intenupts,,erlauben"
6. StaitendesTimers

Die Schitte 1, 3, 5 und 6 sind nus dem vorigen Beispielbereitsbekannt. Folgend


gehtesum die neuenEinstelungen.

Bei einemCompde-March,alsodem Übereinstimrnen desZählregisters mit dem


ein Interrupt
,,Vergleichsregister", ausgelöst
lterden. Dazlr benötigenSie das Regis
ler TIMSK, dasIhDennun schonbekannt ist:

ffi,.""

abb.2.18:T I\lSKRegist€r
2.6 Timer/Countet 77

Hier intcrcssiert uns das Bit OC.IE2 (Output Comparc Match Interupt Enable).
wie üblich bewirkt hicr eine 1, dass der Interrupt aktiviert ist. Das würde in C so

1: | '1. - \ '

Nun nüssen Sie eigentlich nur noch festlegen,bei welchem Vergleich$lert der
Inteüupt ausgelöstwird. Dizu verwendetnan däs RegisterOCR2.Danit wird der
gewünschte,,Triggerwert'gesetzt.

Sehenwir uns ein ganzesBeispieldazu anl

1: # i n c l u d e< a v r l i o , l ' r >


2: # i n c l u d e< a v r / in t € r r l p t . h >

4: t S R ( I I r , 1 E RC2o [ P v e c t )
5: I
6t n v e r t i e f e n* /
/ + Z u s t a n da n P O R Ti B
7: P O R T=B- P 0 R T B j
8:
9. C IT' I TlZl i e d e r z u r ü c k s e t z e n* /
/ + U N B E D I T ,TI G
r0: T1-\ -0:
l: l
12i
: nt noinr'o d)

15. I a t c h \ i e n nT C N T 2 = 0 x 0* /4
/ * 0 L r t p u tC o m p a f e
16: 0 C R 2= 0 x 0 A ;
17r
18r / i C r o c kl e t e i l t d f c l r 2 5 6 = 3 1 2 5 0r z T ä k t * /
19: T C C R=2 ( 1 < < C S 0 2 ) ;
2A:
?1. / * I f t e f r u p t E n a b l e ,f ü r 0 u t p u t c o m p a r l€l a t c h* /
-, Ojt?j
2t:
241 / * A l l e I n t e r r u p t s e r l a u b e n* /
?51 s e iI l ;
26:
?7. / * E n d l o s s c h l e i f*e/
28: llhile (1) |
29-.
30: return 0j
)l: )

Achrug: Sie düfen nicht vergessen,am lnde des hterrupts (siehe Zejle 10) das
Register TCN?2 auf NuI zurückzusetzen. Das passiert nicht autonatisch. Anderer
seits würde der Tiner/Counter dann bis zum Üterlauf weiterzählen
2.6.3 Output-Compare-Mode
fürWaveform
Generation
Siekönnen mithilfe desOutput-Compare-Modesnoch weitausmehr erledigen.Der
Controller unt€rstützt z. B. das automatischeSetzenoder lnschen einese)'ternen
Pins bei einem ,,CompareMatch". DiesesFeature€ignet sich hervorragendfur die
einfacheGenederung eines Rechtecksignalsoder auch eines sogenänntenPWM
(Pulsweiten-ModuliertesSignal).cmfisch würde dasso alrssehen:

G6fik l:TCNi2ähk von0 biszuOCR2hoch(Compare


Match)

Glafik2:Zunandsändeiung
a!feinenextern€n
Pinbeijedem
Compare
Match
Abb.2.19rPd'rzipd€sWaveform
GenentionModes

Es gibt vier Möglichleiten, ein Rechtecl$ignalzu eüeugen:


L Normal-Mode (siehevorigesBeispiel)
2. CTC Mode (ClearTimer on CompareModus)
3. Iast-PwM-Mode (SchnellePulsweiten-Moddierung)
4. Phasenkorrekt€rPWM-Mode (langsameralsFast-PWM-Mode)
. .
2.:6.rincilcöintel. 79

2.6,4 Rechteckignat
mit CTC-Mode
Beginnenwir mit der Generierung eines einfachen Rechtecksignals mithilfe des
CTC-Modus. Dieser ist sehr praktisch: Der Timer zählt so lange hoch, bis es zu
einem Compare-Matchkommt (TCNT2 entspri€ht OCR2). Dann fithrt der Con-
tioller eine definiert€ Zustandsändenngam OC2-Pin aus (b€i ÄTmega8,Port B,
Pin 3) tllld setzt den Zibl€r automatischwieder auf 0 zurück (TCNT2=0). Somit
z?ihltdieserTimer immer rür bis zum Compare-W€rtund ftihft dann eineÄktion

Mit dem wert in OCR2 und der Z?ihlgeschwindigkeit(Betriebstaktdurch Teiler)


wird also die Länge einer halben P€riode des R€cht€cksfestgelegt(siehe crafik

Dazu müssenwi€der einigeBits im RegisterTCCR2gesetztwerden:

Abb.2.20:Waveform
Gene€-

Die Bits WGM21 und WGM20 legen den Wav€form-cenemtion-Modefest. Wir


veffendenhierModus2, alsoCTCMod€(wcM21-1, wcM20=0).
Außerdemmussdem Controller noch erklärt werden,was er bei einem Compare-
Match zu tun hät - also eine steigendeoder ein€ faltendeFlankeelrzeügen.Dafür
werdendie Bits COM2 I und COM20 benötigt.
Theoretischist esja meist egal,ob man mit einer steig€ndenoder einer fll€nden
Flank€beginnt. Aus diesemGrund ist es auch am besten,wenn der Contoller in
unserem Fall eiDfach ,,toggelt", also den Zustand mit jedem Compare-Mätch
umdreht (von 0 auf I und umgekehrt).Dazu ein kuzer Blick auf die entsprechen-
den Bits:

Nomal pon opealion, oc2 di$onn6cl6d.


Toqoleoc2 on conparc March
Cl€arOC2on comparc Malch
Sel OCz on Compaß Match

Abb. 2.21:Zustandvon OC2beieinemComDarc-Match


80 2 DerMikrocontroller

Wir setzeD
alsoCOM2I=0 und COM20=r.
In einemProgrammwürde dasGanzeso aussehen:

Pb ö." q.o F I r r !4odo


J: '/
4: rin l,de ., r/io.'
5: # i n c l u d e< a v r / in t e r r u p t .h >
6.
/: int maif(void)
8:
9t / * ! i c l r t i g . 0 1 2 P i n a u f A u s g a n sqc h a l t e f l * /
t{]r D D D B ,0 E E .
11:
I2: /'
- . D 2- v a r f
L1: o - . d .i o :
Lr| L l oe . o . r ' ö r q . !
vodö (o o lton Puv)
4 o!i . o r0 q , 6 v a r .
'ro : l' I
18: */
19. T C C R=
Z ( 1 < < l , l c l 4 z l )I ( l < < C 0 M 2 0 ) ( 1 < < C S Z I ) ;
2A:
-0.pu''o'p."'!4o hrpi C\ l-0 dÄ'
22: 0 C R 2= O x A A i
23:
?4, / + [ n d l o s s c h l e i f e* /
25: while (r) ;
?6:
27t retum 0;
8: )

mit Fast-PWM-Mode
2.6.5 Rechtecksignal
Der Fast PWM Mode wird tur die Er,€ugungeinespulsweiteDmodulieftenSignnls
benötigt,rlso ein SignalInit untersctriedli.hlangenPulscn(Zuständen).Ein PWM-
Signalsieht z. B. so auswie in Äbb. 2.22dargestellt.
ln der funktionsweise
ist diesdenvorherigen sehrähnlich.SieleseDfest
Beispielen
wie lange der Tiner zur ersten Flrilen;inderung zählen muss (älso
TCNT2=OCR2) und ob dic llankc hicr cinc steigcndeoder eine fallende lorm

lm Gegensatzzum CTC Modus läuft der Timer bei einem Compare Match
(TCNT2=OCR2)weiter bis zum tiberlauf (also kein Zunlcksetzennuf 0 bei
TCNT2=OCR2). BeimLlterlauf änderter die Flankewieder und zwargenauin
die andereRi.htung.Die Längeeincr ginzen Peiodc wiid alsoaleine durch die
2.6 Tiner/Counter 81

TT
!t
I

{
rl 12 ll 12 Ll
!1 tl }1 ){

= OCR2
1.Flankenwechsel:TCNT2
= 255(Überlauf
2.FlankenwechselTCNTz )

Abb.2.22rPwfi,l.Signal

Clock(und denentsprechendeD Teiler)bestimmt.Wo innerhalbdieserPeriodeder


ersle llankenwechselstattfindet, wird mittels desWerts in OCR2,ä]so dem Com-
pare Match Wert, festgelegt.Die FlaDlGwechseltdasa{'eite Mal dänn automatisch
beim Uberlau{
Zu den Bitkonfi guration€nl
Als Erst€smussman wieder den waveform-Generntion-Modesetzen.Däzu wieder
ein kurzer Blick auf die Bits WGM2 I und WGM20 im RegisterTCCR2:

Abb. 2.23:Waveform-Gene-

Därausergibtsich:WGM21=r, WGM20=1.
wie üblich werdennun die Birs COM21 und COM20 gesetzt.Hier ist jedoch Ach-
ttrng geboten:Für den Fast PWM Mode gilt eiDeandereKonfigurationstabelleals
vorher(sieheAbb.2.24).
Esgibt nur die Möglichkeiten,mit einer steigendenoder mit einer fallendenFlanke
zu starten.Wir wollen mit einer steigendenFlankestarten,daher wäh1enwir die
werte: CoM2r=1, CoM20=r.
82 2 DetMikrocontrcller

Normal pod ope 6lion, OC2 dlscon n€cled.

clearoc2 on compareMatch,sel oc2 at BoTToM,

SelOc2 on compar€Mal.h,clearoc2at BoTToNl

Zusiand
Abb.2.24: vonOC2beiUberlaufund lvlatch
Compare

wenn TCNT2=0 dann befiDdet sich der Zustand 0 auf Pin OC2, we'rn
TCNT2=OCR2dannderZustandI aufPin OC2.
Ein lauffahigesProgramm dazuist:

I d,q"or'\!orar n'lroq P!woop


i:,

l, ;i; ::::.ll li;! ,",


9, '" '"
' ""
:, Lc(io:o. Dnd.'Aued,e.-" el,
'| =0
DDoB ;
,?,, P9"B-ooo,

t:: i,,i:i""1:;"::i;:r:""'
t,, [.. -:ll3;"0'?01?-,
i?' ,,,liil,.,,1,,--,,",,
.\.0,.r2,. 1 i01!0rl I/.c.' ;
l:" vät
/' ourp.' onpare re rrN =0, 0
o ra 2 a ,. a . .
f:,
;, ;l ;:';" """"
iZ: r e t u r on ;
2.7 Analog-/Digitalkonverter83

2.7 Anatog-/Digitalkonverter
Der ATmega8vcrfügt über einen l0-Bit-ADC, der mit einem analogen8-Kanal
Eingangsmultiplexerverbundenist. Somit kann der ADC eine der acht verschiede
nenEnrgangsspaDnungen messenund die Spannung in eineml0-Bit-Wertdarstel-

ÄusdiesemGrundwürdeDdannz. ß. s V am Eingangdem 10 ßit wert (Dezimal)


,,1.023"eDtsprechen.0V am Eingangwürde in den digitalenWert 0 konvertiert
werden.wem dasein zu großerWenebereichist, der kann den A-iD Konverter auf
eine 8 Bit Auflösungumstellen(wasin den meisteDFällenau.h komplett äus-
reicho.
Dcr Abhuf einerlD-Konvertierung siehtfolgendermaßenaus:
1. Konfigurieren
derADc'Regisier
2. Konvertierung
starten
3. FertigeWerte
ausdenRegistern
ADCH undADCL auslesen

2.7.1 Konfigurieren
derADC-Register
SieköDnenzwischen
zweiverschiedenen
Betdebsmodi
wählen:
. FreeRunningMode
. SinCle-Conversion
Mode
Beim lree-Running Mode liefert der ADC st?indigneueWerte. Er stoppt nach der
Konvertierungeineswerts nicht, sondernfilllt die Rcsultatrcgisterständigmit den
aktuellen,konvertiertenSpannungswerten.
Im Single-ConversionMode hingegenwnd nur enreeinzigeA/D wandlung vorge
nommen.NachdieserwxndlungpaüsiertderADC, bis Sieihm wiedcrdcn nächs-
geben.
len Befehlzur Konvertierung
Beghnen wir mit der Auswabl des gewünschtenEingangskanals.Der ATrnega8
unterstütd8 Kanäle.Dazr beDtjtigeD
wir dasRegister
ADMLD(:

Abb.2.25:AD[,lUX-Register
84

Die Bits 0 bis 3 sind fü die Auswähl desgewünschtenEirgangskanalszüständig.


Hier die entsprechenden Wertedazu:

Abb. 2.26:AuswahldesADC-Kanals

Es existierenjedoch noch drei weitereKonfigurationsbitsim ADMUX RegisterDie


Bits REFSIund ÄEIS0 erlaubendie Konflgurntion der ,,Referenzsp.nnung".
le nach
Iinstellung können Sie mit REFSI u:rd REFSobestimmen,mit welcher Referenz-
spannungdie Eingangsspannung verglichenwerdensoll.
z. B. 3 V entspricht eine Eingangsspannung
lst die Referenzspannung von etwa 3 V
schondem Marimum, also einem l0-Bit-Wert von 1.023(bzw.255 im 8 Bit
Modut. Es stehenlhnen datur drei Mögli€hkeitenzur Auswahl:

AREi lnl€nal V,€rllrned olf


al AFEFpii
AVcc wilhexternalcapacitor

Voliag€Fel€rcncevrjlhoxlehalmpaclorat AFEFpin
Internal2,56V

Abb.2.27:Auswahl
der Refercnzspa
nnuns

ünd REFS0=1(Veqleich mit der


Im Normalfall wählenSiehier die wefte -RAFSI=O
Versorgungssprnnung,alsomeistens 5 V).
Das letzte Konfigurationsbit trägr den Namen ,,ADLAR",was ausgeschrieben ÄDC
Left Adjust Registetbedeutet.Die Funktion diesesBits besteht darin, das 10-Bit-
Ergebnisentwederlinks oder rechtsin den RegisternADCH und ADCL auszurich
ten. Darunter kmn man sich kaum etwasvorstellen.Abhilfe schaft dieseGrafik in
Abb.2.28.
85

Abb. 2.28:ADLAR-Register

Wenn SiealsoADLAR=r seten, frnden Siefast daskomplette Resultatim Register


ADCH. Die erstenbeiden Bits werden im RegisterADCL gespeichert,verändem
das Ergebnisaber lediglich um ma-ximaldrei Einheiten (Binär 11=3). Viele Ent
wiclder entscheidensich daler tur ADLAR=I und lesen nach der Konvertieruns
nur den Wert im RegisterADCH aus.
Der W€rt in ADCL würde ohnehin kaum zu einer wesendichentuderung des
Ergebnissestuhren. Man nennt diesenBeüieb auch ,,8 Bit Modus", weil man sich
nur um die höherenI Bit desResultatskümmert.
Nun widmen wir üs dem letzten Konfigurationslegister{iir den ADC, dem Regis-
ter,4rCSRÄ (ADC Contlol and Status Register).Mn diesem Registerlegen Sie
noch ein paär letzteEinstellungenfest und können außerdemdie Steuerung(Start,
Stopp)derADc-Einheitübernehmen. SosiehtdasRegister
nus:

AOEN ADSC I ADFR ADIF ADIE I ADPS2 ADPS' AO


Read//vhle Rry R4/1] R/l/V
nilialvarue 0 0 0
Abb.2.29:ADCSRA-Register

Beginnenwir ganz rechts.Die erstendr€i Bits, ADPS0,ADPSI und ÄDPS2,legen


den Vo eiler fest.Sie können damit bestimmen,mit welcher Geschwindisleit die
A/D-Konveitierungen stattfinden sollen. Sie gehendabei vom Systemtaktaus,der
durch einen bestimmtenVorteiler h€runtergeteiltwhd. Abb.2.30 zeigt eineTnbele
mit den entsprechenden We en.
Hier würdendieWerteADPS2=o. ADpSI=0.ADPS0=0einenVo(eilervon 2 fesd€
gen,alsobei einem Sysremtaktvon 8 MHz ehe Konvertierungmit 4 MHz Taktver-
85 2 DerMikrocontroller

Abb. 2.30:ADC-Verteiler

DasnachsteBit in der Reiheist dasBitÄD/E (ADC InterruptEnable).Wie auchbei


vielen anderenEreignissenftLhft enle abgeschlosseneA./D-Konvertierungzu eiren
Interrupt, wenn das gewünschtwird. Um den Interrupt zu aktivieren, müssenSie
diesesBit nuf i setzen(und generclldie AusfiihruDgvon Interrupts erlauben).
Am Bit 4,ADF (ADC Intcrupt Fläg),erkennenSieeineabgesc}lossene Kon\.crtie-
rung. DiesesBit trägt den Wert 1, wenn eine Umwandlungerledigt ist. Sie müssen
däherfiir diesesBit zru KonfigurationkeinenWertsetzen(alsoauf0lassen).
Bit s, AD-FR(ADC FreeRünningSelect),bestimmtnun den Betiiebsmodus des
ADC. Bei einemaktiviertenFree-Running-Modus liefert der ADC ständigneue
SolltenSiedaswünschen,
Resultate. set,€nSiediesesBit einfachauf L
Bit 6, ADSC (ADC Start Conve$ion), liefert dasStatuignal fiir den ADC. Wenn Sie
i.n diesesBit eine I schreiben,beginnt der ADC die Konvertierung.Haben Sie den
Iree RunningModusgewäh]t,reichtdaseinmaligeSetzendiesesBitt. Im Si,rgle
Conversion-ModushingegenmüssenSie nir jede KonvertierungdiesesBit erneut

\{it Bn 7, AD,N (ÄDC Enable),sind wir beim letzten und wichtigsten Bit ange
]ängt.DiesesBit schiltetdeDADC ein (l) oder aus(0). Nicht zu vemechselnmit
demßit 6 (ADSC) denn wenn ÄDEN nicht denWert i enthält,passiertgar nichts.
DasBit ADSCstartetlediglichdieKonvenierung an sich.
Um die graue Theorie ein wenig abzurunden,hier wieder ein kurzes Beispieltur
denFree-Running-Modus:
1: #include <avf/i o. h>
.. dir I Jdo

,: lL[. iD ,ö |
5r {
2.7Anolog-/Digitolkonvefter87

6: / / A D CR e s u l t a te i n l e s e nu n d a l s O e m o n s t r a t i o n
l. / / | l i € d e r a L r fP o r t B a | s g e b e n. . .
8'00D8-60.t1;

l0:
''|
i L |d' (.o d
':''
13: / / A l l e I n t e f r u p t se r ' l d u b e n
1 rI

6: tD 8 B i] ,"" o,n..o'4od" 1i .rp,,uDl


P" " e z p. a: /
18: / / T a k t : S y s t e m t d k t/ ? { 4 r l H z b e l 8 l , l h z0 u a r z )
19: A D l l U=l ( L < < R E F S o )( l < < A D L A R ) i
201 A D C S R=A ( I < < A D E N ) ( 1 < < A 0 F RI) ( 1 < < A 0 1 E ) ;
21:
22: / / A D Cs t a r t e n !
23: A (r<<ADSC);
A D C S Rl =
24:
?^: nd_o _"
"
261 rL']" rl i
271
8: " .,n 0:
?9. J

Der Single ConversionMode könnre dann so aussehen:

l; 6rn l"de a,r/ro h

': in ,",n'.o a
'o
"d d, u" r:

I rD' . .O-Bi- 'r 1n9 ö i orrö or Toc..


8. / / R e f e f e n z s p a n n u n sVrC C
o: t". : (r, "1 . I t \t oai *./ aud./
I0 rDT ' o--l];
11: A D C S R-A ( 1 < < A 0 t N )| ( 1 < < A D I E ) ;

l: r'oo lFiF
,: nh e t
:{
16: / / A o Cs t a r t e nI
1 , /| A D C s R A= ( r < < A D S C ) l
I8l
19: / / l l a f t e n b i s d a s A D I FB i t g e s e t z ti s t ,
2At / / a l s o d i e K o n v e r t i e r u negr l e d i g t i s t -
2\t \ ' r l i i l e( ( A D C S R
&A( I < < A D I F ) ) = =) 0
?': i
231
88 2 Derl,4ikrocontrollef

24: / / l , l I C l T l Gl:u e f 5 t a D C La u s l e s e r l
25. / / ! r d b e i 1 0 B l t M o d L ri m s n e rb e i d e R e g i s t e r
26,
?/:
2Al w e r t = A 0 C H /; / l I J r ! e r w e r f e nh i e r a l s o A D C L
291
30r )
31:
321 . e t u f n0 ;
33: ]

2.8 Dasinterne
EEPROM
Bei den meistenAVRVarjäntenwerdenSie einenmchr oder wetrigergroßzügig
aüsgefalenen EEPROM-Speicher 6nden.Der ATmegaS bietetIhnenz. B 512B)tes
Speicherylntzim EIIPROM.Das entsprichtnicht unbcdingteiner sehr großen
Datenmenge. Der wescndiche Vorteil desEEPROMS lieg1jedochdarin, dassdie
Daten über eincn stromlosen Zustand hinweg erhalten bleiben. Das EEPROM
unterstütztetwa100.000 Schreib-/Löschzyklen und eignet sichdaherbesonderstur
dasAbspeichen von Konfigurationswerten, ldejnen Datensätzenctc...

Die zweiwichtigstenFunktionensnrddäsSchreiben und LeseneincsBltes.Hie*ül


benötisenSicwiedereinigeRegistcrund müsseneinebestimmteReihenfolge eil-
halten.Zu den Detailsfinden Sieeine genaücErklärungim Datenblntt(ßeispiel:
ATnega8,Seitc20).Der eDtspr€chcnde eiDesBytesin
Queltexttur das,,Schreiben
dnsEEPROM"sjehtfolgendcrnaßen aus:

L: v o i d t t P R 0 r! i"rl i t e B y t e ( u n s i q ni netda d r , u n s i s i e dc h d rb )

3: OeI r e i t i s t * /
/ * l , l a f t e br i s d a sE E P R b
r: .'.te -.P 8 / fftltjj
5: ;

t: / * A d r e s su n d D a t e n r e s i 5 t eer i n s t e l l e n * . /
8: ''rD - 'd ;
9: EED= R bi
10.
11: * /1
/ * D e nS c h f e i b v o r g a nasn k 0 n d i q eEn E f l ' l E =
-r.o - rrvlE:

14: / * D a t e ns c h r e i b e n( ! b e f n a h mv€o n E E D R * /4 )
i'rs EEPR01
l- / . l l u t j j
16: ]
2.8 Dasinterne
EEPROL489

Der \I^r o'so oFd.lier .i.h qr

r. WärtenbisdasEEPROMbereitist.
2. DasAdress-und Datenregistermit gewünschtenWertenbeschreiben.
3. DasEEPROMaufeineDSchreibvorgang einstellen.
4. Dntenübenahme (,,Schreiben")
vom Datenregisterin denEEPRoM-Speicher.
Analog dazudasLeseneinesBitcs:

1: u n s i g n ecdh a rt E P R oRHe a d B y t e ( u n s j qi nnteadd . )


:{
3: / * ! a f t e n b i s d a st t P R o lb"el r e i t i s t * /
4: l h i l e ( E E C&R ( r < < t t ! r E
))
5, i
6:
7t /- *_ ^DPi e g e ! ü r s c h t eL e s e a d r e s se€i n s t e l l e n * /
8: ad.;

10: R e q i s t e fl e s e n + /
/ * A a t e nv o mE E P R Oi nMs E E D R
11, EECR (
l = 1 < < t E R) ;E

13r / * l n h a l t d e s E E 0 RR e s i s t e r sz ü f l i c k 9 e b e* n/
l: re u DD;

Der VorgaDs ist ähDlich dem des Schreibensund wird dahs mit den einzelnen
Kommcntarzcilcn gut erklärt.

Der Volständigkeit halber folgt hier noch ein kurzes Progrämm. Is liest Daten von
Port B und schreibt diese anschließendin das EEpROM. Danach werden diese
Wertewieder vom EEPROM gelesenund zurü& aüf Port B äusgegebenl

1: i n t n a in (v o id )

r: DDoB 0.00j f1n ^qö. our D0q-8.


6:
I '0:i 0: I

9' 0t : / / A- 'kDt u e l l e n t v o n P o r t B l e s e nu n d i f s
P 0 1 l e r. F
pö. rn . . .
11: EEPRO l ,]i ,rIi t e B y t e (, i P I N Bi)
t2: )
t:
r: - 0 tli
DDPB ' .. e o e . u ' D O DB '
,5:
6: _o -0; l 0j
.{
-8: - O l 4 e r r €. r s a e n L I P R 0 He l e n - n a
90

2.9 Watchdog-Timer
StellenSiesich folgendesSzenariovor:
Sie haben in den letzten wochen Abend ftiI Abend an Ihrer gut durchdachten
Dunstabzugssleuerung getüftelt und nun endlich allesvom Au{bau" in
"fliegenden
ein schönesG€häusetransportiert. Die erstenTestsmit dem Dunstabzugverlaufen
wie erwartet, allestunldoniet prima. Ibre Entwicklung wird anschließendkom-
pleft eingebnutund montiert, die Schaltungwird in Betrieb genommen.Die ersten
zwei Tagesind Sie natürlich stolz, denn Ihre Eigen€ntwicklungkann locker nit
,]{tuelen Industrieprodukten mithalten. Am ddtten Tag werden Sie mitten in der
Nacht von einem laut summendenGeräuschgewe&t. Der Dunstabzughat sich
selbstaLtiviert und läuft nun auf Hochbetrieb.VerzweifeltversuchenSie an die
Elektronik zu kommen, aber da Sie das nötige werkzeug nicht zur Hand haben,
hilft nur der Hauptstomschalter.
Auch wenn diesesBeispiel eher hanrlos ist, können solche Störungenjn manch
anderenProjekten ein durchausernstesProblem därste en. Meist ist dlnn genaü
jeneArt ürn Fehlerim Spiel,die durch,,extemeEinflüsse"verursachtwerden.Dazu
zfilen etwa Leitungsbrunmen bzw. übersprechen,Llterspannung, kurzfristige
Versorgungsprobleme,kalte Lötstellenusw
Es gibt zahlreicheMöglichkeiten, wamm Ihr Programm ir Benutzungabstüzen
kann, während im Testbetrieballesproblennostunktionierte. Sie so ten natürlich
versuchen,vorausschauendzu programmieren. Alle möglichen lebltunldonen
werdenSieaberseltenbed&sichtigen können.
Der Watchdog-Timerist hier eire int€lligenteLösung.Frei übersetzthandelt essich
dabeiüm einen,,wachhund".Sollte sich Ihr Progranrmaufthgen oder nicht m€hr
reagieren,erkemt der Wachhunddiesautomatischünd ftLhrt einen Resetdurch. In
den meistenF?lllenist danachwieder ällesin Ordnung. Vor a em dann, wenn man
nicht, wie im BeispieldesDunstabzuges, einfa€hdie Stomzutuhr über eiren Schal
ter abschaltenkann, ist ein automatischerReseteinehilfreiche Lösung.
NachdemSiedenwachhund aktiviert haben,erwartetdieserin bestirrmten Zeitab-
ständenein kurzes ,,Lebenssignal"vom Programm. Kommt dies€sZeichen nicht
2.9 Wotchdog-Timer 97

geht cr davon aüs,dasssich die Softwareaufgehängthat. Darauftin ftihft er nuto-


matischeinenResetdurch. Um dasGanzeetwaspräziserauszudrück€n:Der Watch-
dog-Timer ist, wie der Name schon sagt,ein Timer bzs. Zähler.Er zählt in einer
bestimmten Frequ€nzeinen wert hoch. Kommt es zum tiberlauf, wird ein Reset

Ihre Aufgabeist es,diesenZahlerwertvor dem überlauf auf 0 zurückzusetzen.Die


Zählgcschwindigkcit könncnSieübereinenVorteilerregeln.
Fü die Verwendungdeswatchdog-Timersgibt eseineeinfacheBibliothek. Sieträgt
den Namen Mithilfe dieserlncludeDatei bestehtdie Steuerungdes
"avr/wdt.h".
watchdogslediglich aus3 Bcfchlen:
. wdt_cnäb1c(timcout);

. wdt disäbleO;

Mit wdt_enableOaktivieren Sie den watchdog. Als ParametermüsscnSic dieser


lunktion noch den gewünschten Time out wert übergeben.
Den entsprechenden
wert finden Siein folgenderAuflistung:
. WDTO-15MS
. WDTO 3OMS
. WDTO 60MS
. WDTO_120MS
. WDTO 250MS
. WDTO_sOOMS
. wDto ls
. WDTO 25
. WDTO_4S
. WDTO 85

Achtun$ Die WerteWDTO 45 und WDTO 85 stehennur tur bestimmteVarian


ten zur Verfügung(funktionierennicht mil demATmegag). Der A\RGCC-Compi-
ler machtSieaberautomatisch mit einerFehlermeldungdaraufaufmerksam,wenn
Ihr veNendeter Contro er die vier oder acht SekundenlaDgeDTime-outs nicht

Die Fünktion wdt disable0 deantiviertdenwatchdog wiedef.


Sie müssennach der erfolgreichenÄldivierung dcs wachhundcs innerhalb des
Time outsdenZählerzurücksetzen.Diesgeschieht nit der lunkion wdt resetO.
Hier ein Beispielliir dic Vcrwcndungcincswntchdog-Timers:
92 2 DerMikrocontrcller

1r # d e f j n e F _ C P U 3 6 8 6 0 0 /0* F ü r d e l a y . h* /
^ Ei \'uoö o, o.l
'' rüd" /.-i
" . dö a).L
4: s i n . l L d e c . ' / h dl . L

6: i n t m a nJ (v o id )
7: I
8: .,d i;

10: / * L E D ( s )a n P o f t B k u f z b l i n k e n l a s s e n . . . * /
tt: D D R =B o x F F ;
12: P O R T=B 0 x F F ;
13: f o f ( i = 0 i i < 1 0 ; i + + )_ d e l a yn s ( 1 0 0 ) l
1r: oODB-0,00;
15: f o r ( i = 0 ; i < 1 0 ; i + ) d e l a ! - n s (1 0 0 1 i
16:
l1: / * N a t c h d o eq j n s c h a l t e n ,2 S e k u r d eTn i m € - 0 u *t /
18. l d t e n a bel ( l , r D l 20 5 ) ;
l9:
20: l ^ J h i l e( 1 )
?T: I
22: // (onnentieren S i e f o r s e r d eZ e i l e a u s u m
23t / / d e n l , , l a t c h d oR
ge s e tz u t € s t e n , , .
Z4t w d t r e s e t () ;
25: l
261 )

lurveran\hruli(hunS" len SiccrncI LD dn PoflBdn'chtießen. Die.ewird rr.h


einemResetkulz blinken.Im ßeispielobenwird esnur einmil passieren,
dennder
(in
ControllerbekomDtrechtzeitigdasLebcnszeichen Zeile24).Es konmt somit

Konmentieren Sie nun ehmal Zeile 24 aus. Der Zähler wird nün nicht mehf
zurückgesetzr.Es konmt zu einem ÜberlaLf und der Watchdog tuhrt alle paar
Sekundeneinen Resetdurch. Die LED dürfte dann etwa alle 3 -4 Sekündenkurz
blinlcn.
wichtig: Die Zäblfrequenzdeswatchdog'Timers wird über einen RC Oszilator
erzeugt.DieserOszillatorkannunterUmsländenvon denaDgegebenen hequenzen
(je nachBetriebsspannung) srarkabweichen.
VerlassenSiesichdahernicht auf die
Time-out'werte.fs kannh;erdurchauszu größerenSchwankungen kommen.
93

3 EineEinführung
in Assembler
3.1 WasistAssembler?
Die hogrämmiersprache Ässezüler erlaubt lhnen, direkt mit dem Prozessorzu
kommunizieren.Es gibt einen limitierten Satzan Befehl€n,die vom Mil(rocontrol-
ler veistaüdenwerden.Si€finden im Anhang die komplette Lrbersichtdieserunter-
stützten Befehle.le nach ProzessorstehenIhn€n mebl oder weniger Befehlezur
Vertugung.

Die Anweisungenselbstsind einfachzu verstehenund schnel erldärt. Die wirldiche


Herausforderungbestehthier weniger im Erlernen der Sprache,sondem vielmehr
in der UDsetzxngIhrer ldeen mithilfe dieserBefehle.

Um gute Softwareschreibenzu können, mtissenSie den Prozessorverstehen.Da


hilft Ihnen auch eine Hochsprachenicht. Assemblerermöglicht es, im Detail zu
erlernen,wie der Prozessortunkioniet und vor allem, wie man reine ,,Ideen" in
aüsliihbaren Code wandelt. Vor allem bei der Mikrocontroller Programmierung
zeigtAssembls seinebesonderenVorzüge:

r Geschwindigkeit(die meistenBefeblebenötigennur eineDSystemtako


2. Optimale Nutzung desSpeichers(sehrkleiner Programrncode)
3. Prozessomahe Entwicklüng (rnan ryeißSchritt tur Schritt genau,waspnssiert)

3.2 DerBefehlssatz
Auf den folgendenSeitenfinden Sie die kompleite Auflistung aller zü Verftigung
stehendenAssemblerbef€hle.
3.2.1Arithmetische
undtogische
Operationen

ADD Rd,Rr Add widrcut carry


ADC Rd, Rr Add with Cary
ÄDI1II Rd, K Add Imm€diateto Word
SUB Rd, R] Subtractwithout Carry
SI'BI Rd,K . SubtractImmediate
sBc Rd,tu ,Subtact with Carry
SBCI Rd,K SubüactImmediatewith Cary
SBIW Rd,K SubtmctImmediateftom Word
AND Rd,Rr LogicalAND
ANDI Rd,K LogicalAND with Immediate
OR Rd, RI LogicatOR
ORI Rd, K LogicalORwith Immediate
EOR Rd, Rr Exduiive OR
coM Rd one's Complem€nt
NEG Rd Twot Complement
SBR Rd,K S€tBit(s) in Register
CBR Rd,K ClearBit(s) in tugist€r
INC Rd G'cIement
DEC Rd Decrement
TST Rd Testfor Zrro or Minus
CLR Rd ClearR%ister
SER Rd SetR€gister
CP Rd,Rr Compar€
cPc Rd,tu Comparewith Carry
CPI Rd,K Compar€with Immediate

3.2,2 BranchODerationen

RIMP k RelativeJump 2
UMP lndirect lump to (Z) 2
IMP k Iump 3
RCAIL k Relatic call subrouthe 3
ICÄIL Indirect Ca[ to (Z) 3
CALL k Call Subroütine 4
3.2 DetBefehlssotz 95

Bef€hl Operanden Beschreibung Z\*le1r


PJT SubroLrtineRetum 4
RBTI lnterrupt Return
CPSE Rd,Rr Conpare, SkipifEqual l/2/3
SBRC Rr,b SkipifBit in Register Cieared | | 2| 3
SBRS Rr,b Skip if Bit in RegisterSet I | 2| 3
SBIC Rb Skip if Bit in I/O RegisteiClenred \ | 2| 3
SBIS qb SkipifBit iD l/O Register Set I l2 | 3
BRBS BraDchif StatusFlagSet | |2
BRBC s,k Branchifstatus FlagCleared 1 12
BREQ k BranchifEqual I 12
BRNE Bran.hifNot Equäl ||2
BRCS k ßranchifcarry Set \ 12
BRCC k BranchifCarry Cleared ||2
BRSH Branchifsame or Higher II2
BRIO Branchiflower | 12.
BRMI BranchifMinus Il2
BRPL BraDch ifPlus I 12
BRGE k Bnnch if creater or Equil, Signed II2
BRLT Branchif LessThan, Signed 1| 2
BRHS Branchif Halfcarry FlagSet | |2
BRIIC k Branchif Hälf CaIIy Fllg Cleared | |2
BRTS k DranchifT llas Set I /2
BRTC BranchifT llag Cleared | |2
BRVS k Branchif Overflow Flagis Set I|2
BRVC k Branchif overflow Flagis Cleared | |2
BRIB k Brnnchiflnterrupt Enabled I 12
BRID k Branchiflnterrupt Disabled 1 l2

3.2.3 Datentransfer-ODerationen

Befehl Opeünden Beschreibüng zlÄen


MOV Rd, Rr Copy Register I
LDI Rd, K LoadImmediate I
LDS Rd,k Load Direct from SRArV 3
LD Rd,x LoadIndirect 2
LD Rd,x+ LoadIndirectändPost-Increment 2
LD Rd,,x LoadIndirectandPreDecrement 2
OA 3 EineEinführung
in Assenblel

Befel Operanden
LD Rd,Y
LD Rd,Y+ Lnd Indirect and Post Increment
LD Rd,.Y Load Indirect aüd Pre-Decrement
LDD Rd,Y+q Load Indirect with Displacement
LD Rd,Z LoadIndirect
LD Rd,Z+ Load Indirect a]rd Post-Increment
LD Rd,-Z LoadIndirectandPre Decrement
LDD Rd,Z+q Load Indirect with Displacement
sTs k, Rr SloreDirect to SR{M
ST X, Rr StoreIndirect
ST X+, Rr StoreIndire.t and Post-Increment
ST -X, R] StorelndirectandPre Decrement
ST Y,RJ StoreIndirect
ST Y+, Rf StoreIndireclandPostlncrement
ST Y,RT StoreIndirect aüd Pre-Decrement
STD Y+q,Rr StoreIndirect with Displac€ment
ST Z,Rt StoreIndirect
ST Z+, Rr StoreIndirect and Post-Increment
ST .Z,RI StoreIndirectandPre Decrement
STD Z+q,Rr StoreIndirect with Displacement
LPM LoadProgramMemory
IN Rd, P ln Port
OUT qRl Out Port
PUSH Rr PushRegisteron Stack
POP Rd Pop RegisterFom Stack

3.2.4Bit-undÜberprüfungsoperationen
Befehl Operanden Bescbrei6ung zytJen
LSL Rd LogicalShiftLeft I
LSR Rd LogicalShiftRight I
ROL Rd RotateLeftTbroughCarry 1
ROR Rd RotateRight Throush Cary I
ASR Rd Arithmetic Shift tught I
SWAP Rd SwapNibbles I
BSET FlagSet I
BCLR FlagClear I
SBI Bb S€tBit in VO Register 2
CBI Bb ClearBit in I/O Regist€r 2
BST Rr,b Bit Storcftom Registerto T I
BLD Rd,b Bit load ftom T to Register I
sEc SetCarry t
cl,c Cl€arCaIIy I
SEN SetNegativeFlag 1
CLN Cl€arNegativeRag I
sEz S€tZero Flag I
clz ClearZero Flag I
SEI Global lnterupt Enable I
cu GlobalInterrupt Disable t
sBs SetSignedTestFlag I
cLs Cl€arSigned?st Flag 1
sEv S€tTwo'sComplementOveiflow 1
CLV ClearTro's ComplementOverflow I
SET SetT in SREG I
ctir ClearT in SPJG I
SBH SetHalf Carry Flagin SREG I
CLH ClearHalf Carry Flagin SRIG I
NOP No Op€ration
SLBEP Sleep I
IfDR Watchdog I

ZuI Erktirung der Operand€n-Notation:


. Rd: Zielftgist€r
. Rr Quellrcgr.lte{
. R Resultatder Operation
. Kr 8-Bit-Dat€n (Konstante)
. k Sprungadresse (Konstante)
. b: Bit ein€sR€gistercoder I/O-Registerc
. s: Bit ein€sStatusregisters

Der komplette Befehlssatzist in vier TeilbereidF untergliedert:


. Arithnetische und logischeoperationen
. Brafth-Operationen (Vesweigung€n)
. Datentransfer-Operation€n
. Bit- urd Uberpdtungsoperationen
9a 3 EineEinft)hrungin Assembler

Durch diese UDterteilung wird der Um-fang des Befehlssatzesüberschaubarer'


Außeidem gibt esvieie InstruktioneD,die nur ehe Väriinte einesBefehlsdarstellen
(Beispiel:
Esgibt 20VariantendesBranch-Befehls).

3.3 ErsteSchritte
Zu diesemZeitpunkt gehenwir dnvon aus,dässIhI Compilersysteminstalliert ist
und Ihr Entwicldüngsboard(oder der Simulato, efolgreich verbundenund getes

Die wichtigsienEigenschaäen\-onAssembler:
. Die Befehlebasierenauf der Rlsc-Architektur. Ihnen sGhr daher nicht der Stan-
dard 8051Befehlssatz zur Vertugung,sondernein auf Geschwindigkeit opti-
mierterSatzan Operationen.
. Nichts passiert,,gleichzeitig".Es wird sequenziellein Befehl nach dem anderen
aüsgefil}lrt.
. Als Zwischenspeicher für OperationenverwendenSiesogenaDnte Regtsrer
. Um einenWert auf einer Port auszugeben, müssenSiediesenWert zuerstin eiD
Registerübernehmenund voDdol1 an den Poft weitergeben.Mehr dazugleichin
denerstenBeispielen.
. Kommentarewcrdenmit dem Semikoloneingeleitet uDd beansprüchen immer

. Assemblerbefehle
unterscheidennicht ?.wischen
Groß' und Kleinschreibung.
Nun ztun erstenBeispiel:

1: . i n c l u d e" m l 6 d e f . j n ci" Def i r i t i onsdat ej e i n b i n d e f


2l
3i l d i r 1 6 , o x F r : R e g i s t e r1 6 m i t N e f t 0 r F F l a d e n
4r o u t D D R Br, 1 6 ; l , l e r t v o n R e s j s t e r 1 6 a u f D D R Bs c h r e i b e n

6: l d l 1 1 6 , o x A A; R e g i s t e n1 6 r i i t I l € r t 0 x A Ar a d e n
/t a ü t P 0 R T 81, 1 6 i l e r t v o n R i 6 a u f P 0 R T sBc h r e i b e n
8:
p eno I'nd o Ll" f"

Is ist richtig, dass sich Arsembler nicht gerade durch eindeutige, klar venrändliche
Befehlsbezei.tnungen hervorhebt, aber die Erklärung ist einfncher ais man denktl

Ieder Assemblerbefehl hat folgendes lorrnat:


BEFEHL Operandl, Operand2
Operas.ll nd Opennd2 könren dabei,je nach Befehl,optional sein. Es gibt atso
BefeNe,di€ nur einen Operandbenötig€n(Beispiel INC), oder auch leelch€,wo gal
kein Operandbenötigt wird (Beispiel:RE4.
Die ersteZeile desBeispielswerden Siein iedem Ihrer Programmevelwenden.Sie
ermöglichtdem Assembler,nebensehen eigen€nBef€hlenaüch die pmz€ssorsPezi
tuchen BezeichnungenIhies verwendetenMikocontrolers zu verstehen
Sobesitzt z. B. nicht jeder Controller einenPorr C le nachdem,lyelchenControll€r
SieveMenden,ergibt sich eine andereirdud€-Anweisung. Es änd€rt sich lediglich
der Dateinamelon m 16d4tflc auf einean Ihren Prozessorangepasste Ve$ion:

,{T90S1200 l200definc
AT90S23l3
ÄT9052323 2323detinc
ATmegä8 m8def.inc
ATmegal6 ml6def.inc
ATmega32 m32delinc
ATmega/t8 m48definc
ATmega64 m64d€f.inc
ATmegal28 ml28detinc
,{Ttinyll tnl ldef.inc
ATtinyl2 rnl2definc
ATtinyl3 tnl3delinc
ATtinyl5 tnl5delinc

zurück zum Beispiel denn dort g€ht es bereitsir Z€ile 3 zur sache.Sie find€n in
dieser Zeile den Befehl ldi, det eigennichLoad Immediatz, oder ,,1'zdedi'e Zahl
sofort in dasRegister...' bedeutet.
Wie sieht eshier mit der Reih€nfolgeaus?warum wird zuerst,,Rl6' und dann die
Zahl geschrieben? Am einfachstenmerkenSiesich:,,ErstdasZiel, dann die Quelle"
So verhziltessich bei den meistenBefehlen,die Sie im Rabmender Assemblerpro-
grammierungvorfinden werd€n. In Register16 befindet sich jetzt der wert 0jfFE
Das Registerist also ,,geladen".Als Nächstes',schießen"Sie dieseLadung hinaus,
ünd zwar auf dasDatenri.htrngvegister tur Port B, DDRB.Das geschiehtmit dem
Befehlort wieder gilt ,,Zu€rstdasZiel, dann die Quele".
warum verwend€nwir ni€ht den Befeblldt, um auf DDÄB zu scbreib€n?Dies mäg
etwasverwirrend klingen und ist eine Eigenheitvon Assernbl€r:(Be )Ladenkönnen
100 3 EineEinführung
in Assenbler

Sienur ein Dieskann ein beliebigesIlegistervon R0 bis R3l sein.


"Ärbeitsregister".
Man neDntdieseRegister auch,,HiFsregister"oder,,Zwischenspeicher". Siewerdcn
schnellein Gefühldaturbekommen, abergenerellgil|,,Laden"tunktioniertnurbei
denRegistern r(0bis R3l. Ilir alleaDderenRegisterverwenden Sieoai.
Wasist bis jetzt lrit dem Prozessor
passiert?
SiehabendasDateDrichtungsregiste
lon Port B iüfAusgAng,rlso 0xIF gesetzt.
Dashcißt,män lenn nun auchein Zei-
chenaufdiesenPort schreiben.
GeDaudaspassiertin derrZeilen6 und 7. SiekenneDdie Prozedurbereits:Erstein
bcläden(hicr: R16,könnteaberauchz. B. R24 sein),diesesRegister
Hilfsregister
mittelso,r auf dasZielregister In Ihrem Fallwäredasder Port B.
schreiben.
2teile9 glänztgleichmit zweiwichtigenPunktenreiner Sprungnrarke und einer
SprungänweisLüg. In dicsd Konstcllation
entsprichtdaseiner,,EndlosscHeife".
Sie
könncn än alen stelen in Ihrem Programmeine SprungmarkedefiniereD. Sie
gebeDdarniteineDrbesthmten Plxtzh Ihren CodeeinenNamen.Spätcrkönnen
Sie dann auf dieseMarke,,springen':Dasheißt,der Cod€wird von dieserStelle
weiterausgetuhrt.Zum Beispi€lwäreessinDvoll,eineMarkeganzan Aifang dcs
Prograirmszu plätzicrcn.So könntemnn am Endewiederzurückan denAnfang
springen.DasProgrammulirde sichdanDalsoewigwiederholen.
EineMarke ist einfachzu definierer.Sieüberlegensich einenNämen,der nicht
eineDrBefeli,ehem Registdoder eineraDderenSprungmarlccntspricüt.Diesen
Namenschreiben Siean den gewünschten Platzund versehenihn mit eineDrDop
pelpurkt.DaskijnDtez. B. so aussehen:

1: . i n c l u d e" n 1 6 d €ifn- c "

4: ldi f16, oxFF


5, o u t o D R B1,1 6

8: l d i 1 1 6 ,0 r A A
9r o u t P 0 R I 8f,1 6
10:

I2: r j n p au3 9 a b e

Ir dicscmBcispiclsinddreiverschiedene
Sprungmarken
zu erkennen.
Um auf cinc dicscrSprungmarken zu spdngen,verwenden Sieeinensogenannten
Iump.rs gibtverschiedene
Ausfiihrlrngen die,je nach,Sprungwcitc",
diesesBefehls,
ausgewäNt werden.MerkenSiesich\orerstnur die hier verwendeteVeßion/jnb
3.3 Eßte Schrifte 101

Nasso viel wie,,rclativer M;thilfediesesBefehlsspingt der Pro-


Sprung"bedeutet.
zessordannan die Stelle,wodie angegebene
Sprüngmärke definiertist.
lm erstenBeispielwürde das ein Sprungan dieselbeStele sein,von wo dieser
SpruDsausgelijstwurdc. Im zweitenBeispielwürde der Prozessorzu Zeile 7 sprin-
gcn und eneut den Wert 0xÄÄ auf Port B ausgeben. Aüch dicscrVorgangwürde
sichmit Zeile12ständigwiederholen.
Vertiefenwir dxs Beispiclnoch um eine weitere!'unktion, deDrEinlesenvon
Zuständen an denPortsl

1: . i n c l u d €" m 1 6 d ei n
f .c "
?.
3: k o n f gi u r a toi n :
4r l d j 1 1 6 ,0 x 0 0i P o r t B a u f E i n g a nsqc h a l t € n
5r oLrtDDRB, r:L6
6r l d i . 1 7 , 0 x F Fi P o f t A a u f A u s g a nsgc h a l t e n
7: o u t O D R Ar 1, 7

l0: in r16, PIl.]B i l i e r t v o r P o f t B a u f R 1 6e i n l e s e n


11: o u t P O R T rA1, 6 ; D i e s e ne r t a u f P o f t A s c h r e i b e n
I2:
13: rjmp.jnlesen;!riedefhoren

PortB wird alstsingangdeiniert,PortA rls Ausgang.


Anschließend wird deraktuell
anliegendeZustaDdvon Port B gclcscn,in Register16 zwischengespeichert und
sofortrviederaufPort A aussegeben.Derjump in Zeilc 13 wiederholtdieseProze

DiesesBeispieleignetsich sehrgut iir den Simulator.Sie können einfa.h nnd


änschauli.hdic Wertevon Port B ändernund seheDzweibis drei Schdttespäter
schor die Anderunsenauf Port A. Eshändeltsichalsoum sehreinfaches Beispiel.
Ncuerung6ndetsichin Zeile 10 mit dem Befehlir. Er funktio-
Die $'esentlichstc
nicrt genauwie od, ebensodie Parameterordnüng,,ErstZicl,dannQuelle".
WichtigrSiekönneDhiernichtschreiben: für solche
i11PORTÄ,PIN3.Siebenötigen
üm dasErgebnisiD einemHilfsregister
Befehieimner eincnZi{ischenschritt, zu

Abschnitts:
DaslclzteBeispieldieses

1, . i n c I L r d"em l 6 d e. ifr c '


3: k o n f9i ü r a toi n :
4r l d i f : 1 6 ,I ] N F F
; P o r t B a l f A u s g a nsgc h a l t e n
5: o u t D D R B1,1 6
702 3 EineEinführung
in Assembler

D.n 1 pi,- B !€r2en

10: s b l P 0 R T B3, ; 3 . P i n a u f P o r t I s e t z e n
11: c b i D O DB . . Dii a, Do,r B ö. Lon
I2l

SieerkeDnen md neueBefehle,,sbi"und,,cbi",oder,,SetBit" und,,ClerrBit".Mit


diesenAnweisungenkönnen Siejetzt auch direkt auf bestimmte Pins einesPorts
zugreifen.Sie erinnernsich: und vcrlnngenbzw.liefernjeweilseineD
"in" "out"
8-BiGWert,alsodeDZustandeinesganzenPorts.Mit diesenneuenBefel en kön-
nenSienun die ZuständeeinzelneiPinsverändem.
Empfehlungen(von http://rrww.avr-asm-tutorial.ne0zur Registeffahl:
. Registerwenn möglich mit der .DEF-Anweisungfestlegen.
. 16-Bit-ZähleroderAhnlichesrealisiertmanambestenin R24lR25.
. Werden oft konstanteWertc oder Zügriffe äuf einzelneBits in einem Register
rcrhender.dieRegi'lerR o bi' R2Jddtur\or7ug'wei'e r.\ervjc'cn.
. Für nle anderenAnwendügsfülle vorzugsweiseRl bn R15verwenden.

Zusammenfassung:Sie wissennun, wie man Hilfsregisterverwendet,um mittels


der Befehlein und ollr auf die Ports zu schreiben.Sie können mit Sprungnarken
umgehenund EndlosschleifenersteUen.SchließlichhabenSienoch gelernt,wie Sie
auf einzelnePins zugreifenkönnen, um derenZustandzu ändem.

3.4 Unterprogramme
NachdemSienun die erstenSchritteinAssemblerhintersichhaben,sehenwir uns
sogenannte,,Unterprogramme"
näheran:

: . lLde ,'6de . -.'

-oti ' .hr "


r: rdi pl6, | 6!rfÄv-\0\
r: o. .Pl,olo
5: ld P 6, o l'Äv \D
I o._ P.ol6
8:

10:
I.up p oa'"n
12: hd.p p og q :
3.4 lJnterprcgrcmne103

;, ,.3iii"i:"r"
15: f o l ^ . u p ro - o q r d ' r r r

' | 4 ' i € r o 'r0eq " ' |


ii. '",,,,
l:. li,lJl;';,"
'
zi, ,;: "" "
'"''oeil'"
ll, ".R 'oi B.,o
o-r DO q. r b
:;

1r;.","..
.,:;
ai;
-'
"l,lliu?'ii,
;"i'-
Leiderist dff ersteBlick auf ein Assemblerprogrammsehrveflvirrend.

In Zeile 3 wird angekündigt Stackeiffi.hten. Ein Sr^ck,also ein ist im


"Stapel",
WesentlichenDichtsanderesals ein Zwisch€Dspeicher, in dem eh Elementauf das
andere,,gestapelt"
wird.

wie aberkonfigurier€ ich nun mejn Assembleryrogrämm,dässesdies€nStackver


wendenkann?Dazu muss män zu Beginn d€sProgrammsdem Assemblermittei-
len, wo genauder Stacl$peicherbeginDenso[, ä]soeile bestimmteSpeicheradresse
benennen.Die folgendecraflk zeigtIhnen denAufbau desAdressrauns:

Progrämmspeicher

Stack
RAr!|ENDAbb. 3.1: Aufbaudes speichers
704 3 EineEinführuiginAssenbtel

Da def ges.mte zur Verfügung steheDdeSpeichermehr als 256 Byte fassenkann,


benötigt man zur Adressierungnuch einenW€lt größer als 8 Bit, also 16 Bit. Um in
Assembler einen 16 Bit Wert darzust€llen,verwendet man einfach zwei 8-Bit-
Registerein sogenanntesI,o ' und ein High Regisier.Daslolv-R€gisterenthält die
unteren8 Bit desl6-Bit-AdresswertqdasH'gfi-Registerfolglich die höheren8 Bir.
Für den Stackstehenhier zweibesondereRegisterzur VedügungrSPH (Sta.k Poin-
ter High) und sPI (Sta& Pointer Low). Diesebeiden Registerz€igengemeinsam
auf die Adresse,an der der Stackbeginnenkann
Kurioserweisesetzenwir diesenAdresszeigergenauauf dasletzte ry'te im Speicher.
Dort beginnt der Stack.Der Stack,,frisst" sich rückwäls in den Spei€her.Mit jedem
Byte, das im Stä& landet, wächstder Stackum ein Blt€ und erweitert si.h rück-
wärts in denAdressraum.Sieerkennendäsin der ebensezeigtencrafik.
Zeile 4 bis Zeile 7 können Siedaher €igendichimmer so verwendenwie angefüIrt.
Wir gehenhier nicht weiter auf die Detailsein.
Die nächsteAnweisungwarlet in Zerle, m bzw. rclatift call. Der' relatile jump
kennen Sie bereits.Der relatue cdil ist im Prinzip ähnlich und spingt einfach än
eine angegebene Sprungmark€.D€I Unterschiedzu inp liegt darin, dasssich der
Prozessorbei einemjürrP nicht merkt, von wo er weggesprungen ist. Daskann eine
beliebigeStele im Progranrmcodegewesensein.
Ganz andersbei einem rcdll. Hier merkt sich der Prozessordie Stelle,von der er
wegspdngt.Wanm er dastut, sehenwir in Zeile 21. Dort befindet sich ein Befehl
mit dem Namen /et oder ausgescbrieben /etulr. Dieser Befehlweist den Prozessor
an, an die Stellezurückzuspringen,von der er ebenweggesprungen ist. DiesenVor-
gang nennt man .uch ,,{ufiuf einesUnterprogramns". Wir teilen dem Prozessor
nit ,,Springezu einer Sprungmarke,führe den Code dort so langeaus,bis du auf
ein r.etul7rtriffst und springedann wieder zurück."
Sie haben im oben angetuhrlen Beispiel gleich drei dieserUnterprogrammever
wendet.So wird retup nul zu Beginn einmal ausgetuhrt,jedoch werden ./ealporf
und seryoltir einer Schleifeendlosnacheinandergesta(et.EineFunldon wie setup
werdeDS;e öfters benötigen,vor allem bei eher komple{eren KonfiguiatioisroF
tire zu Beginn des Prognmms (BeispielerSetup eines Displays,Einrichten des
externenSpeichers etc.).
Aber warum musstedann zu Beginn der Stackinitialisiert werden?Wn haben ihn
Jn gar niclt veMendet?l Der ProzessorDerkt sich bei einem rcall die Absprung-
adresse.Und genaudatur benötigt er einenSpeicher, inrlich den Stack.
Siekönnten daler inneihälb einesUnterprogrammseinenweiterenrcdll ausführen.
Dies würde eine weitere ,,Absprungadresse"auf den Stapel legen. Darum nennt
3.5 Bedingte
Sptunqe 105

Stack
.!tgi:'-lbrail
T :-
I Untelprogramrn
1 I
+
I unterploqlamm
2 |
r-----------\---

derRücksprungadressen
Abb.3.2:Speicherurg

män diesenSpeicheraucheinen,,Stapel" dennman nimmt zuerstdie B)'tesvom


Stapel,die män zuletzt dort platziert hat.

Sie sehenän der Grafik Mit jedem Aufruf einesUDterprogrammsmuss sich der
Prozessoreine Speicheradresse meiken. Der hozessor verarbeitet ale Vorg?inge
seriell. Aus diesen crund muss auch das zuletzt aufgerufeneUnterprogramm
zuersteinen/?t /n austuhreD, damit der Prozessorüber die anderenUnterpro-
grammewieder zudck an di€ Urspiungsndrcsse gelangen kann.

3.5 Bedingte
Sprünge
Auch wenn der Ausdruck ,,bedingtersprung" seltsamklingt, gehört dieseTechnik
zu den mächtigstenWerkzeugender Progrämmierung.Andersgesagtbedeutetdiese
tussngelediglich:Entwederder Prozessortuhrt einenSprungausoderebennicht.
DieseEntscheidunghängt von der Bedin$ng ab, an die dieseUlerprütung
gekiüpft ist.
106 3 EineEinführungin Assenblel

Nähemwh unsdemThemamit einemBeispiel

1: . i n c l u d e m l 6 d e if n
.c
2:
3. ; -- S t a c ke i n f i c l r t € n- - - - - '
4: l d i R 1 6 ,N I G H ( R A I 4 E N D )
5: o u t S P NR,r 6
6i ldi Rt6, Loll(RAMEIID)
7r oüt SPL,R16
8:
9r hauptpf0grdmm:
'0:
.1 "'.p
l1:
i 2 : I o o p tI
13: s b is P I N B , 0
I4: r l n p l o o pI
15:
16r l d j R 1 6 , 0 x F FI P o n t B a u f A u s s a n q
I7: o u t D D R BR, 1 6
18: l d i R : L 6 , 0 x F F ;A l l e B i t s s e t z e n
19: o u t P O R T BR, 1 6
20:
2It rjmphauptpfosrann
221

24: ldi Rl6,0x00 iPort I duf Ejn9arg


25. o u t D D R BR, 1 6

Der einzigeBefehl,der ihnenfiemd vorkommenwird, ist in Zejlet3 srtr (Skipne{


instruction if bit is set).Wenn der Pin 0 an Port B gesetztist, wird die nachfolgende
Anweisungübersprungen.DieseAnweisungi\'äre ein ryimP,der zurück in Zeile 12
und anschließendwieder in Zeile 13 führcn würde.
Untersuchenwir diese Funktionsweiseet!{as genauer: Es handelt sich um eine
die kontinuierlichläuft, solangePin 0 an Poft B nicht gesetztist. Sobald
Schleife,
diesd Pin gesetztwird, wird der 4mp-Befchlübersprungen und dasProglamm
setztdenAblaufin Zeile16fort.
Der praktischeNutzenfür eine solcheFunktionist einfach:NehmenSie an, Sie
haben,n Pin 0 einenSchalterangebracht.DäsProgrrmm soll nichts unternehmen,
solnngedieser schalter nicht altiviert wurde. sobald der Schalterumgelegtwird,
Ph 0 daDnalsogesetztist,beginntlhr eigentliches Progrimm zu lnufen(und ver
lässtdieScbleife).
SolltenSie die ungekehrtc Funktionsweisewünschen,also eln skip ext instuction
if bit k .karcÄ'reß^rer]denSieeinfachsüi..
3.5 EedingteSprünge 7O7

Wichtig: f,s gibt lier eine wesentlicle Unterscheidung:Mit sütcund irts können Sie
ledigtichdieI/O-Registea alsodie,,Ports"überprüfen.Wenn Siez. B.Berechnungen
durchtuhrenund ein Hilfsregistei(ilso nicht direkt einenPort oder Pin) auf ein
gesetztes/gelös.htes Bit überyrüfen woIen, müssenSie die eDtsprechendeüPen-
dantsdazuverwenden:sülcund r&/s,alsosnrpaeili instrltctiall if bit in reginetk cle-
aredwd skipne:ctinstrcnofl if bit in ftgisteris set.
Wasaber,weDnSie nicht ein einzelnesBit, sonderneinen Port auf einen bestimD-
ten 8-Bit-Wertüberpdfen wollen?Da,x gibt es naiürlich nuch eine passende
Anweisung,nämlichl qpse,odet conpare regis:ß afld skip if e4ua1.
Wichtigist dabeirMit diesemBefehlkönnenSienur Hilfsregister mitejnanderver
gleichen,nicht zwei Portsoder ein Registerlrrit eiDemPort. Darum müssvor jedem
Vergleichauchder wen deszu überprüfendenPortszucrstir ein Hilfsregistergela

. i n c l u d e " m l 6 d e.fJ n c "


?:
i -'- S t d c ke j n f i c h t e n - - - - -
] d i R 1 6 ,H I G HR( A M E N D )
5l O U t S P NR, 1 6
I d i R 1 € , L O I !R( A M E )N D

8:

10:
11:
12:
13: i r R 2 0 ,P I N B
I d i R 2 1 ,0 x F F
15: c p s e R 2 0 ,R ? 1
16:
u:
18: l d i R 1 6 ,O x F Fi P o r t B a u f a u s s a n !
19: o u t D 0 R 8R, 16
?t: l d j R 1 6 ,0 x F Fi A l l e B i t s s e t z e n
2I: O ü t P O R T BR, 1 6
221
231 rjnp hauptprosramm
24:
25:
l d l R 1 6 , 0 x 0 0i P o f t B a u f E i n g a n g
27: o u t D D R BR, l 6
24.

In Zeile15findenSiedenneuenBefehl.In denzweiZeilendadber schenSieauch,


wie die RegisterR20 rmd R21 mit den zu vergleichendenWerten geladenwerden.
Diesist nötig, wie eingangsbereitseNilhnt, weil cprenü Rcgistermiteinanderver
108 3 EineEinführung
in Assembler

gleichenkann. Solten die beiden Registerdenselbenwert enthalten,wird die fol


sendeInstruktion übersprungen,also die Schleifeverlässen.Sobaldä]soäuf Port B
derWertoxFFanliegt,wird dieSchleife verlassen.
Wichtig: Ein häufigerlehler könDteIhnen jn Zeile13passieren.
Esist verlockend,
hier dasRegister20 mit eirem cinfachenIDI R24 ?INB zu beladen,oder,noch
schlimmenlDl R20,POIIS zu verwenden. Daspassiertschrleicht.
Der BefehlaD1kann lediglich einenWert in ein ltegisterschreiben,abernicht einen
Urertvon einemPort einlesenund dann in ein Register schreiben.WennSiee;nen
Wert von einenrPort einlesenwolen, verwendenSie immef die Anweisungi?r.
Ebensodürfen Sie PINB nicht Dit POR?B veMechseln.Sie verwendenPORT!,
wenn SieWerreauf den Port ausgebenwol]cn, jcdo.h PIN3, Nenn Sie einen Weit

3.6 DasStatusregister
Vor allen bei der ProgramDierung mit Assemblergibt es ein ganz bestimmtes
Registeadas Sie immer wieder äntreffen werden, das sogenannteStatusregister.
Viele Operationenliefernein Ergebnis,das sich dann in den einzelnenBits des
Statusrcgisters haben jewetu ehe
wiederfindet.Diese Bits des Statusregisters
bestimmteBedeutung:

Bit Beschreibung
C: Carry Beider letztenOperationkam eszu einemUberlauf,
daherist dasCal/], Bit gesetzt.Mehr dazu gleich.
I Z: Zet<) DasErgebnis der leerenOperationergabNull (Zdro).
2 Nr Negative Resdltatder letztenOperationist negativ.
3 V Ovedow Zweierkomplemcnl-Überträg
4 S:Sign ExklusivesOder (XOR) von N und V
5 H: Half Carry Ubertragvon Bit 3 äuf Bit 4 bei der letztenOperatioD
T: Bit CopyStorage Zü fteien Verwendungverfiigbar (undefinie )
7 I: Globallnterrupt Alle Interruptserlaubt= I
Inable Kcine Interrupts erlnubt = 0

Äm häufigstenwerden Sic .lie Birs Carry,Zero,ünd GLobalIfltertupt EnabLeanttef


fer. Deshalbhier nocheinekurzeErklärungder einzelncnStatusbits:
3.6.1Carry-Bit
Das Carry Bit wird immer &nn gesetzt,wenn bei einer aritimetischen Operation
ein Übertrag herauskommt.wenn Si€ also zwei 8 Bit Zahlen addieren,z. B. 200
und 200,wäre dasErgebnis400.Da 400abernicht mit einem8-BiFW€rt darstellbar
ist, signalisiertd€l Miloocontroller dieseni-Ibertragmit dem Carry Bit.
Au.|diesemcrund gibt esäuch ehige Br.nch-Befehle,die er?lizit auf diesesCany-
Bit reagieren.Dazuz:ihlen BRCSund BRCC.

3.6.2 Zero-Bit
Ist dasResultateiner srithmetischenOperation wird dasZero'Bit gesetzt.Es
"Null",
gibt eine Reile and€rerFunkionen, die als auch dies€sZero-Bit
"Nebenprodukt"
ändern.Details dazu finden Sie in der Referenzdokumentation(Auf der CDROM:
Dokumentntion\Assembler\AvRAssembler-Befehlsreferenz.pd0.

3.6.3Gtobal Enabte
Interrupt
DiesesBit müssenSievor jeder VeNendung d€r Interrupts auf I setzen.Das kön-
nen Siemit dem BefehlS-EI€rledigen.Um diesesBit wieder zu löschen,veMenden
Si€den BefehlCII
Ist das Bit gelöscht,wird auf keinen Fall ein Interrupt ausgelöst- auch wenn Sie
z. B. den Empf.ngsinterrupt der sedellenSchDittstellekonfiguriert haben.Es wird
nichts passieren.Dies ist vor allem dann praldsch, wenn Sie einesehr z€itkritische
Routine ausführen,die äuf keinen Fal von einem Interrupt unterbiochen werden
soll.
110

4 EineEinführung
in C
4.1 Wasist C?
Die Progr.mmiersprache C Mlrde 1972in denBellLaborsvon DennisRitchieent
UNIX gedächt,entstnn-
wick€lt. Ursprünglich für d€n Entwurf desBetriebssystems
den im Laufeder Zeit weitereunterschiedlicheVersionenvon C.
Aus diesemGrund hat sich ANSI (American National StandardsInstitute) 1983
dazu entschieden,einen weltweitenSt ndard für C festzulegen.Dieserwurde folg
lich auch als ÄNSI C bekannt. Die meistenmodernen C-Compiler halten sich an
diesenStandard.
Bins der wesendichstenVorteile von C bestehtin der großenVerbreitungvon C-
Compilern auf verschiedensten S)6temen,geeignetfit eineVielzahl von Proz€sso-
ren.Diesermöglicht(meist)ein und denselben CodeohnegroßeAnpassungen auf
eh neues Syst€mzu portieren. Der Vorteil Liegtaüf der Hand: Flei erhüldicher
Quellcode, gebundenan meistkostenlose, ,,faire"Lizenzmodele(GPL,BSD B€€r-
Ware,...).Vor alem in Bereichen, in denenOpen-Source einegroßeBedeutung
darstellt,steheneineFülle von Quelcodeszur Verfiigung.
In langer Arbeit hatt€DEntwickier die Treibersoftwaretur einen w€it verbreiteteD
EthernerNetzwerk-Chiprmter Linrx progrämmie{. Iahrespätereurde dieserTrei-
ber in nur wenigenStundenauf die ATMEL-Plattform portiert. Dies war großteils
durch die gute Potierbarkeit desC Quelltextesso schneilnöglich.
Mit Assembler,,sprechen"Siedirekt Dit dem Prozessor,'yährend Siein C lediglich
eine sprechen,die dann von einemtBersetzer(Compiler)ftir den
"Hochsprache"
gewünschtenProzessorübersetztwird. Um mit anderenProzessorenzu sprechen,
müssenSie dazu nur den veNendeten Compiler arlswechselnünd einen aDderen
Compiler (d€r jeweilsgewilnschtenPlattform) mit lhrem Quellcodefütten.
Dies klingt in der Praxis so revolution:ir wie die Erfindung des Telefons,ir wirk-
lid <eitgibt esnatürlich einigeTücken auf dem WegzuD Code.Mehr
"portablen"
dazufinden Sieauf den folgendenSeiten.
Kapitel I beinhaltet detaillierte Informationen zü Installation des Compilersys-
4.2 DasHauptptogrcnn 777

4.2 DasHauptprogramm
Zu diesemZeitpunktgehenwir davonaus,dasslhr Compilerslsteminstaliertist
(oderder Snnuhtor)erfolgreich
und Ihr Entwicklungsboard verbund€nuDdsetes

Leidermüssenwir hief mit der Traditionbrechenund beginncndahernicht,wie


üblich,mit den populärenHelb Wotldprc|.lamn. Stattdessen wir
beschräDken
unsauf die einfachcSchaltung
einesgänzen Ports,alsoSpantlung
a s,Spannung
atL

1r 4 i r c l u d e< a v f / io .h >
2: i n t n a i n (v o id )
3: {
4r D D R-B0 x F F j
5: P o R T=B0 x F F ;
6: PoRTB = 0x00i
7r r e t u r n0 i
8: ]

Nachdem Sie diesen Quelltext kompilie haben, müssen Sie ansc|ließcnd die
czcugteHEX-DateiindenMikocontroler (oderdenSimulator)flashen.lnforma
tionendazufindenSiein Kapitell. NachenremResetstartetdasPrograDmund Sie
werdenam Entwicklungsboad kaum einc Verändcrungbemerkcn.
solltenSieeineLED-Reihcan PORTB angeschlosscn hnben,wnd diesenachAus-
führung des Programns leuchten (be; einer Pull Up Konfiguration,ansDsten
wird die LED-Reihenur kurz iufblinken).Im SimulntorsehenSieschrittwcise dic
VeränderungdesPorrzustandsvon 0xFi' = dlle Pi, 5 hochohtniga].lf0x00 = alb Pn6
schabendurch. Soviel zur FunktioD diesesBeispiels.NuD zur DäIeren Erläuterung
desQuelltextes:
ln Zeile 1 6nden Sic dic Anweisung#ir.lrde. Diesedeutetdem Compiler an, dasser
zusätzliche Informationenzum des benötist.DieseInfor
"Verstandnis'' Quelltetes
mationenfindet er in dcl Datci lo.i im Verzcichnisa1'adassich wiederum im Stan-
dardverzeichnis tur lncludeDateienbefindet (kann tur den Compiler beliebig

h der io.frfindetder CompilerInformationenüberdie I/O Mitgli.hkeiten(Input/


Ortprt, ilso Eingäbe/Ausgabe)desveMendeten Mikoprozessors. Die Prozessoren
habenunterschiedliche Pin Belegnngen.
BeispielAn welcherAdrese liegt PORTBbei einemATmegar6und an welcher
Ädressebei einem ATmegal28?Genau diesePin-Belegungen werden in den
IncludeDateieDdenniert.
772 4 EineEinführung
in C

Siewerden dieseADweisungin den meistenlhrcl ProgralrDe benörigen.Sie muss


auchimnrr am AnfangdesProgramnNstehen,zumnrdestbevorIhr€ Funktionen
(wieetwarmain) begiDneD.

Das HauptprogrammbeginDtin Zeile 2. Egrl, än welchen ProjektSie arbeiten,


jedesIhrer C Progmmnewird immer mit demselben beginnen.Dieses
,,Skelett"
Skclctt werden Sie nach einigen Startl-ersuchenrelativ schDelläuswendigkönne'n.
SosiehtdasSkelettehesjedenProgranmsaüs:
l: # i n c l u d e< a v r / oi .h >
2: int main(void)
3: {
5: r e t u r n0 i
6: I
Bis auf drei Zeilenbestehtlhr erstesprosramrn(sieheobeD)im wesendichcnnur
ausdemGnüdskelett.Ic}l empfchlelhnen,das,,Warum"und,,Wie"hinterdiesem
Skelettvorerstnicht z-uhinterfragen.Das zeigtsich Da.h einerweite ganzvon

Es gibt iD Ihrem Programm also nur drei wirkliche Anweisungen.Diesefinden Sje


in denZcilen4,5 und 6.
C arbeitetauchnicht ,,paralel':l€derDefehlwird nur sequeDziell,
alsoeinernach
demandereD, ausgeführt. Dasbedeutetin unseremlall, dassdasDatenrichtungsre
gister (DDRB) für den PORTBerst auf ÄUSGA,'i,L-(0xFFl seschaltet(Z€ile a) und
anschließendderPORTBDritwertenbeschrieben wird (Zeilcs und 6). Dieserwird
hier bemsst r11itzwci vcrschiedenen werten (0x00und oxl.l') versorgt,um das
Ergebnisim Simulatordeutlichdar?-ustelleD.
DiesesTestprograrlm,,am Mikrocontroller"$'ird Ihnen zunächstnoch wenig
lreudeschenken. passierteinmaligund diesin nur wenigen
Die Zustandsänderung
Trktzyldcn,ist alsokaum messbar.
Siehabenhiermitalsobereitsjhr erstesC Progranmgeschdcben.Um die Einfüh-
rung in dieseSprachemöglichstkuz zü halten,folgt eineZusammenfassungder
wichtigstenPunktc,die Siedabeibeachtensollen:
. Befehle ßeispiel:
werdcnin C immermit einemSemikolonabgeschlossen. DDRB
= 0rII; PORI'D= 0x00i
. Um eiDehexadezimale Zahlzu verwenden,
setztman in C immer die Notierung
0r \'or dieZabl.DezimaleZahlenwerdenganznornal, alsoohnedieseDr ox'Prä-
fix argegeben. BeispieleHexadezimalDDRB 0x5Aoder Dezimal:DDRB =
=
90j
4.3 Vaiablen 713

. Esist Cleichgültig,ob man DDRB=0r00ioder DDI?B= 0.J.00j schreibt.DieseLeer-


zeichenwerdenignoriert.Abcr VorsichtrDic einzelnenArgumentebzw.Werte
dürfen Sienicht auftrennen.DD ]?3 = 0r 0q wäre nicht erlaubt.
. ledesIhrer Programme beginntmit folgendemSkelettCode:
l: #i nclude <avr/io.h>
2: i n t m a in ( v o i d )
3: {

': '" .'' 0;

4.3 Variablen
Die Spnchc C bcsitzt einen wesendichenVorteil gegenüberAssembler Anstatt
Itegistern,steheDIhnen (wie in d€n meisten,,Hochspra.hen")belicbigdefinierbare
VariablenzurVerfügung. Beispiell
l: " 'n l " d e a.,/ro.h
L r. n(/o:d
:{
r' hd "d ra-..
'i: .hd 'otoi o qe. hb diq " I
6r i n t g e h e j n c o d ie
. .o.o..1uö..D].

o:
"d td". = 0,001
10: rotatioisgesch!ifdi9keit=92.
ll: q6hö! ode ' 1156i

14: retufn 0i

SieerkennennuD dasbereitsgeläufigcStandardslclett.
Das Hauptprogrammist
nun schonetwasgrößerausgefallen
alsvorhin.
ln denZeilen4 bis7 findenSiesosenannte
Valirrlsn-Dekknnonen.IndenZcilen9
bis 12die eDtsprechende vonwcrten zu denVnriablen".
,,Zuweisung
Einfächerausgcdrückt:Man erklärt dem Compiler,welcheÄrt von VariablenmaD
in seinemProgrammverwendenmöchteuDdwelchenNamendiesetrngensollen.
Die,,Zuweisungderürerte"fiillt di€seVariablenmit ehem Inhalt.
Die korrekte Slntax zur DeklarierungeinerVariables;ehtfolgenderna3enaus:
DATENTYP
VARIABLENNAME;
774 4 EineEinfuhrung
in C

wii haben im angcfühflcn Quc tcxt-Beispi€l also drei verschiedeneDatcnq?en


veMendet,nänlich crd,i ;,tund lorg.
Besonders in der Programmierung von 8 Bit MikocontrollernstehtIhnen meist
nü ein begrenzterSpeicherliir Ihr Programm zu Verfügung.Bei der Verwendüng
von Variablen muss der Compiler diesen Speicher vorrb rese ieren. le nehr
VariablenSie veNenden,unrsowenigerSpeicherplatz bleibt liir Ihr eigentliches
Progr{mln. Es gibt zum c'incnVrriablcn, dic m.'hr Speicherbelcgcn(und größcrc
Inhaltespeichern konnen)und solche,die nur ein einziges Blre speichern können
(alsocinecinzigcZahlzwischcn0 und 2ss).

Ihre Aufgabcleährcnddcr Entwicklung Ihrcr Softwarcbcstchtnun dadn, dcn ich-


tigen Datenq'p tur enreVariable auszuwählen.Um lhnen dieserntscheidung zu
rcrricfa.
h<n.g'ht<' rrrrr<'nc* h. gerirg<\u.salrlan Darelri?er:

Schllsselwoit Bytes Wenebereich

Abb.4.1:
Datentypen

Sobietct sich für unscrcVäriableled-rratrs, die nur r oder 0 enth.lten wid, nätür-
lich der Datentp .fial an, da dieserdie kleinstmögliche tsinheitdarstelt.Größere
Wertebereiche mlrden hierkeinenSinnmachen
wichtis: StelienSie sicher,dassIhren Variablenvor der VerwenduDs(alsovor
dem,,Auslesen") ein wert zugewiesenwurde.Isldasnicht der Fall,stchtmeistein
rein zufälligerwert in der Variableund dies tuhrt nicht seltenz-ueiner langen
Fehlersuche. Aus diesemcrund rurde in C auchdie direkteZuweisüngvon Wer-
der Variableeingeführt.Dieskann beispielsweise
ten bereitsbei der J)eklarierung
4.3 vaioblen 775

1, # i n c l u d e< a v f / i o . h >
2r i r t n a in ( v o id )
3r i
4: c h a r l e d s t a t u s= 0 x 0 0 ;
5: c h a r r o t a t i o n s q e s c hnwdj i9 k e tj
6r i f t g e h e i n c o d-e 3 4 5 6 i
7: l o n s s c h l u e s s e=l r 2 3 4 5 6 4 3 4 5 ;
8: retürn 0l

Arßerdem hnt si.h durch dieseAnderung äuch die LängedesProgmmmswesent-


lich verküzt.

Itichtig interessantwerdenVariablennatürlich erst dann, wenn Siemit den Ausga-


beportsinVerbindunggebrachtwerden:

1: # i n c lu d e < d v f / i o . h >
2: i n t m d ni (v o id )
3: {
4: charled status= 0xFF;
5: DDRB = l]rFFi
6: P O R T=B I e d _ s t a t u s ;
7: I e d _ s t a t u s= 0 x 0 0 ;
8: P 0 R T=B l e d - s t a t u s ;
9r returf 0;
r0r ]

An1 bestcncrklärt sich das Beispiel wicder Zcite ftir Zcile: In Zeile 4 wird einc
Variablemit der Bezeichnungled srarasvom T1a c/rarerstellt und erh:ilt den Wert
0xIF (alsohexadezimäl FF).Bintuwürdedasder Zähl,,11r r I r 11" entsprechen.

Zcilc s ist bcreits rus dcnl Eintuhrungsbeispielbekännt. Hier wird lediglich die
Datenrichtungvon POIITB auf ÄUSGÄNGgeschaltet.

In Zeile 6 wird auf POIUB der Inhalt der Variablenled starasgeschrieben,in unse
rem Fall also oaFÄ Das wiederum bedeutet, dass alle Pins von PORTB auf i
geschalietwerden. ln einer 8 reiligen LID-Reihe würde jetzt kein Licht leuchten
(beiPull Up SchaltuDg, änsonsten natürlichschon).

Ir Zeile7 wird der Inhalt derVariableled sransauf 0x00(Binär:00000000) geän


dert.An der Schaltung der LEDSpassierthier no.h gar nichts.wir habenlediglich
den neuen Inhalt der Variable led sraaa festgelegt.Darum ryird in Zeile 8 dieser
neue Weft den PORTB zugewiesen,was bei einer LED Reihe a]le ncht Li.hter
776 4 EineEinfuhrung
in C

Gehen nir einen Schriu weiterl

1, #lnclLrd< e a v f / lo . h >
2r ift nair(void)
3: {
4, c h a nl e d s t a t u s = 0 1 0 0 ;
5r D D R -A r l r F F r/ / P O R A T a l i f A u s q a n sg. h a l t e n
6r D D R =B l l r F F j / * P o R TB a u f A u s q a n sgc h a l t e n* /
7: P 0 R T =A O X A A ;
8: P o R T -B 0 N 0 0 ;
9: D D R =A 0 1 0 0 ;
10: l € d _ 5 t a t u 5= P I l 1 A i
11r P o R T =E l e d s t d t u s i
12: r€turf 0;
13: ]

Siesehenim angeführteD Beispiel?-wei


verscliedeDeMöglichkeiteD zlrr KomDreD
(//)
tierungvon Quelltext.Zum Einenden doppcltcnSchrägstdch und zumAnde-
mit enremStart (/.) und einemStoppz-ejchen
ren denSchrägstrich {t/). li ist ganz
Ihnenüberlnssen,
für welchcArt dcl Kommcnricrung Sicsichcdschcidcn.
// bcdcutct,dassfür dcn Rcsldcr aktuclcnZcilc nü nlchr Kon]menrarfolgt.Bei
derverwendung von /* uDd*/ definierenSie,illl Gegensatz
zur // KommentieruDg,
s€lbst,wo Ihr Komnentnrbeginntund wo er endet.Siekönnenhiermit ruch übcr
nchrcrc Zcilcnhinwegkommentieren. (weitereBeispiele dazufindenSiein eini
gender nochfolgendenQuelltexte.)
In deDZeileDs und 6 wcrdendie PortsA und B je$'eilsauf A S.rflggeschältct. In
den darautrolgendenzwei Zeilen wnd dabei auf Port A der u/ert Hcrj AA und auf
RlrtB derWertHe{i oalausgegeben- Anschließend wird die Datenrichtung von Port
Ä zuni.k iuf tingd'rggcsctzt.
Bcsondcrcs intcrcssanr $,irdcsin Zcilc 10.Sieerken-
nenbereitsdieVerwendung derVariableled status.In diesemfall wnd ihr der Etn
ga'gswertvon PortA zuge$'icsen.
Würden SieanstattPINA die BezeichnungPORTAveNenden, weiß der Mikocon-
troler nicht,dassSieeinenwen enrlesen wollenund er liestlediglichdenAasgaüe
l,"rfsrvon PORTA,ohncdrzu äuf dic PinsdcsMil(]ocontrollcrs sclbstzuzügrcifen.
WennSiegeradedenSimulatorauflhrem Rechnerlaufenhaben,werfenSieeimal
einenulick auf das Feßter I/O Viet^/(Achtung:Nur sichtbanwenn Sie sich im
Debugmodus befinden).Öfiren Sie.lort deDEiDtragI/o ?oftA und Siewerder
erkennen,dassder Simulator tatsächlichz-'fischenData Rcgittetnn,J.Input Pins
unterscheidet.BeachtcD Sic dah€rbitte:W€nDSiedcn ZustaDdeiDesPortswisscr
wollen,müssenSiennmer PIN,A,PINB usw.veLvenden. WollenSieden 7-ustand
eineslorts änden,verwenden SicPORIA,PORTB,usw.
4.3 Variablen 777

Zurü& zu Zeile 10.wir lesendso den wert von Port A (an den Pint e;n und
schreiben diesen Zustard in die Variable bd status.Am Ende des Beispiels,in
Zeile I l, wird der eben in def Variablc led_strtusgespeichertewert nun auf Port
B geschricben.DiesenVorgangkönnen Sieebenfallsim Simulatorverfolgen.
In derfolgenden derZusthde senaumitverfol-
TabelekönnenSiedieAnderungen
gen:

Zeile Wert Dalendchtung wert Drtenri€hrung


PORTA/(PINA) PORTA PORTB(PINB) PORTB
4???
5?Ausgang!!
6?Al1sgang?Ausgang
7 He* AA Ausgang ? Ausgäng
8 Herl:ÄA AusgaDg He* 00 Ausgang
9 He{: AA Eingang Hex: 00 Ausgang
11 Her AA Eingang Her AA Ausgang

Achtung:DiesesBeispieleignetsichhäuptsäcllichnir die Verinschautichung der


wertezuweismgenbei Varhblen und Ports mittels Simulator.In einem hardware
basiertenTestist nicht sichergestellt,dassder wert von Port A ab Zelle 7 am Port
selbstgespeichertwird. So könDte beim EinlesendesZustandsir Zeile 10 bereits
ein gänzlich unterschiedlicler wert am Port A anliegen.wundern Sie sich also
nicht, wenn daherauf Port B am Endeni.ht Her ,{-4 anliegt.
Ein weiteresBeispielzur aithmetischen Verwendungvon Vnriableni
': 'ir! u a €. o . i o . r '
l: nd .o d)

4t N o . r e a e l l e . e D " r o n ._ d ( r o n
5: v o n e i n e n K o m m € n t adra, s s ü b e r e i n i 9 € Z e i l € n
6: h i n w e qv e n l ä u f t . * /

8: .' ".,., 000:

t0:
ltr o 0 oa - l e d ' d , :
1?:
13: l e d , s t a t L r s= l e d _ s t a t u r + l ;
14: PoRTA = led_statusl
'öc_(rar | |
_ i
.: P O DA = t p o ..or J.;
18:
118 4 EineEinftihrungin C

t9:
ZA, = led,status i
P0RTA
21.
22:
23: ]

Hier seheDSie drei verschiedeneMöglichkeiten, um den Wert einer Variable zu


erhühenb^{ eineAdditiondur.hzuführen.Zeile13 erhöhtdeDWert voDled r.a
t s auf ficri 0.1.Die Funktionsweisedabei ist relativ einfach zu verstehen:,,Neuer
Wert = Alter Wert + Zahl." Zeile 16 bietetschoüeinewesentlichkrmfortablere
Möglichlcit,denWert von ldd_statrJum die Zahl 1 zu erhöhen.Zeile 13 erlaubt
dasErhoherum belieb;ge Werte.Zeile 16bedeutetjedoch:,,ErhöhedenWertvon
led-Jtdtrr um gennucinc Einhcit': Mehrerc,,+" änden dann nichts-Da nber sehr
häufig die Addition von .l benötigt wird, wurde diese++ Anweisungeingeführt.
Zeile19 zeigtschließlich die dritte MöSlichkeitz-urAddition.Es handeltsichdabei
in1 wesentlichennur um eine,,kürzcreSchreibweise" \'on Zeile 13. Sie können
daberauchhier beliebigeWerteaddiereD. Der Wert i-Ier0,4befindetsichnuD auf
PortA am EndedesBeispiels.
Siesind bei C natürlichnicht nur auf dasAddierenbeschränkt, sonden kömen
allegängigenGrundrechenarten durchfiihren.
Hier einigeBeispiele:

e d _ s t a t ! s= l e d _ s t a t u s+ 1 ;

ed status= 10 I ed_status;
ed status= led status* 2;

DieserÄuszugist schon etwasanspruchsvoler.Äm Ende enthä]t die Variableled


srdhlideDWert Her 08.

4.3.1Schtüsselwörterund
Einschränkungen
Sic könncn bci dcr Dcklaricrmg Ihrcr Variablen alle nöglichen Konbinationcn
von wörtern und Zahlenverwenden, esgibt dabeijedochein paxr Einschränkun
gen:
. DcI Namcdcr Variablcdärf nicht mit einerZähl beginnen,jedochmit eiier -
oder nrehrererZahlen ender. (Nicht erlaubr int l2rariableie(1a'rbtint
l,atiable12)
4.4 Anweisungenund Funktionen 719

. Die VnriableDdürfen kehe aiitlnetischen oder C spezifischenOperatorenent


halten,wie etwal, /, \, +, -, #, usw Erlaübt sind Zeichenvon a-2,A Z, 0 9 uDd der
Unterstrich ( ). UDrlauteund Satzzeichen sind nicht erlaubt.
. Die Längeder Bezeichnung Ihrer Variablensolltenicht ausmehrals32 Zeichen
bestehen,denn C unterscheidetVariablennur anhanddieserersten32 Zeichen.
. Achruig: C unterscheidetz.wischenGroß und KleinschreibunglDie Variablen
int testlnd i t Testsjna zweikomplett verschiedeDe Instanzen.
. Esgibt eine lteihe von Schlüsselwörtern,die fiir die Progrämmierungin C reser-
viert sindund dähernicht alsVariablenbezeichnuns vemendetwerdenkönnen:

Abb.4.2:
SchLüsse
lwörter
in c

4.4 Anweisungen
undFunktionen
sie hnben anhand der bisherisenBeispielebereits ejnige AnweisuDgeDkennenge-
lernt. ln diesem Abschnitt widmen $.ir uns dcn sogenannten F,irlfiores.

Beispiel:

5r P O R T=B 0 x 0 0 i
6: )

8: ,o'd eoo r\

0: DODB-O :
11: l

l 3 : i r t n d in {v o id )
l,t: {
15: D D R =B O x F F i/ , / P o r t Ba u f A l r s g a n q
16:
Il I ledonoi
720 4 EineEinführungin C

18:
L9:

2It J

EincF?./rkrto,
ist eine,,Programmenrheit",
die erstdaDnausgetuhrt wird, wennSie
dazu (iln Quellcode)den Befehl
gebeD.
So kinnten Siez. B. eincReihe von funk-
tionen 1ür die Konmuniletion mit der seriellenSchnittstelle schreibeD.Diese
tunktioren könnenSiedanr in nrehrerenProjektenwiederveNendcn.
DerAulbaucincrlunklion siehtimmer gleichaus:
0AIEflTYp
DtSRUC(GASELIERTS ( 0PTloliAL:
FllN(Tl0NSllAl,1E PARAüETER
)
i I . ] T ] A LD
T E RF U N ( T I 1 ] ] . ]
]

ID Zeile3 b€ginDtbcreitsdic crstcFunktionmit denlNamenledor.Äußerdemken


nen Sie den nückgabewert dieserFunktion,ror'd.Da sich zwis.henden beiden
KlamDlenin Zeile3 ]€in Inhaltbelindct,eneartetdieseFunltion keineLrbergabe
pann1ctcr(mehrdazuetwasspater).Der Inhalt der fuDktioD,Port B auf 0x00zü
schalten,ist denkbareinfach.
EineFunktionkönntcz. B. einekomplereBerechnung [ine Berechnung
enthalten.
Dieses
liefert bekanndichauch ein ,,llrgebnis". ist der sogenaDnE Rn./.gdler?rt
einer Furkti.'r. wie überallin C nüsscn Sie sich nüch hiff überlegen,
welcher
Datenrypsichfür diesenltückgabewert am besteneignet.
AngenomDreD, Ihre lunktion licfcrt rür 0 odü I zuftick.$ielcherDxtenq.puürde
sichdnfür anbieten?Natürlichder mit dem kleinstenwertebereicli, dso .idr Dcr
F-unktiooskopfvürde danDetrvaso aussehen:
t: c h a rw a h f 0 d e r F a l s c h o

Wasb€deutetabernun der DateDtp /otd,wie er sichim Eingangsbcispiel findet?


Daswort 'otd ddckt so vi.j auswic ,,Lccre"oder,,nichts".Und genaudaswoilen
wir dort ja rüch: kcinenRückgabewert.UnsereFunkion ausdem Beispielschaltet
lediglichden Pon B aufeinenneueDZustand.wir RihrenkeincBcrechnungen aus,
und wenn wir dicscFunktionaufrufen,erwartenwir auchkein llrgebnis(abgese
henvon der 7.üstandsänderuDs).
wlchtig: Wcnn Ihre Furktion also gar keinen Rlickgabeivertliefert, Düssen Sie
trotzderndieBezeichrurgro;d angebcn.
undFunktionen 727
4.4 Anweisungen

Z-urrickzum Beispiel Dort folgt mit tudojf0 eine weitere,sehr ähnliche Funktion
Richtig zur Sachegeht cs dann im Hauptprogramm Dort fiDden Sie den eigeDt
lichen ,,Auäuf' von den beideDzuvor definierten Funktionen. Un1 eine lunktiotl
zu starten,gehenSieDachfolgendemSchema vorl
IUNKTJONSNAME( OPTIONAL:PARAMETER
)i
DenAufrufeinerFunktionnenntman aucheineAtrwen"rg Siefindenzweidieser
ArweisunseD in den Zeilen17 und 18.wir übergebenden Funltionenhier keine
Parametcrund erwarten au.h keinen Rücksabewert.Das folgendeBeispielveran
schaulichtDun die VcrwendungeinesRü.kgäbewertes:
: L : # i n c l u d e< a v r / o
i .h >
2:
3 . c h d rq e t P o f t B Vuael()
5: O D R=Bo x 0 0 ;/ / P o r t I a r s E i n q a r sg c h a l t e n
o: o'NB;
"'.
7: )
8:
9: v o i d s e t P o r t B V a l u e ( c hnaer v v a l u e )
10r {
11: D D R E : 0 x F F /i / P o f t B a l s A u s g a n sgc h a l t e n
' P0P|B !r,o Le,
13r ]

16: {
ll: charled stdtus=0;
18: DDoB- 0 rl I oo' B d. .J.ga a

-
0: "a_. o u 9 " - o o . t B \ ou e I
l: "d u :
ö D o ". _ B V ,oö " 4 d or .,r;

a: "L 0i

DiesesBeispielist schon etwas anspru.hsvoler' Z€rlegenwir €s in seine Bestand-

Es gibt ä\'ei Funktionen: geQartBvalue) Iiefefi Ihnen den aktuelen Zustand an


Port B als Rü&gabewert zurrick. Die Funktion serPorfBvalr€a) erlaubt es Ihnen,
Poft B einen neuen wert zuzuweisen.

Drei wichtige Grundlagensind:

L Die Definition von FunktioDen, die Parmeter erwarten ünd einen Rückgabe-
wert liefern.
722 4 Eine inc
Einfuhrung

2. DasZ'rischenspeicherndesRr.ickgabewertes
in eineHilfsvadable.
3. Der Aufrufvon lunktionen (nit ParaDeterübergabe
und Rückgabewert).
ln Zeile 3 beginnt die Funkriol' getPortBv ue) lnd sie erkennensofort Es wird
nicht roid alsRückgabewe(ve|wendet,sonderDc/ral.Dasbedeutet,die !'unktion
mrss titsäc}lichcincnWcrt zurüclgeben. Diespassiertdirekth Zeile6. Dazuver
wendenwir die Anweisung/et /fl. Nach dem ScNüssehvortretrff könncn Sic auf
verschiedene WeiseeinenWert zurückgebeD. Daskönntez. B. soaussehen:

3: f e t u r n( 1 + 1 + 2 + 3 ) ;
4r r e t u r n1 2 8i
5: r e t u r i r e d _ s t a t u s/ ;/ l ' . J e lnend _ s t a t ues i n €c h a rV a f i a b l €i s t

ls gibt alsoeinigeMöglichkeiten, um auseinerFunktioneinenWert zurückzulie


fern. Hierbei ist esjedoch wichtig, einigewesentlichePunktezu beächten:
1. NachdemSie die Aiweisung /etul, \erwenden,wird kenr weiterer Code in der
Funktionmehl ausgetuhrtund die lunklion sofortbecndct.Sic l(önncnsomit
enreFunktionauch abbrechen.
"vorzeitig"
2. Der in Zeile 6 ( dcn vers.hiedenen rct,|, Beispielenoberhalb)aDgefiihrte
parameterlose Aufruf wird nur in Funktioncnakzeptiert, die keinenRückgabc-
wert ablieferDmüssen (also yoid Funktionensind).Dieswnd in solchenFunk
tionen xussctrließlichals ,orzeingerAbbntch vctwcndet ünd nacht nur Sinn in
VerbinduDsmit KoDtrollabäagen wie z. B. der Ii/!ZST Abfrage.Mehr dazu

3. Der Datentypder Daten,dieSiexlsParaneterfü dieAnweisungretur, verwen-


den,mussdemRückgabewert Datentp entsprechen.
Siekönnenalsoz. B. nicht
eineZahlwie ,,123456532"
bei einemRückgabc-Datcntp clrr übergeben.
Zurück 7xm Beispiel.In Zeile 20 6nden Sie den Aufruf der Funldon getPorrt
ydlr.O. Diesmal findet sich atcr dic Vaiablc led_staflr noch vor .lem lu*tions-
namen.Um nr enrerVariablenejnenneuenWert zu speichern, müssenSiediesen
Wert,,zurveisen".
Dis funktioniertfolgenderrnäßen:

VARIÄBLENNAME= NEUERWERT j
Wobei der ,,neueWert" natürlich selbsteine Variableoder Sar enrekoDplexe
Berechnung seinkann.Der Compilersetztdannautomatisch denberechneten Wert
oderdenInhaltder angegebenenVariable als,,neuen wert" ein.Außerdemkannder
Wert" auchdasResultateiner Funktion sein.Und genaudieseÄrt der Zuwei-
"neue
sungver\eenden wir bcim Aufmf in Zeile20.Der Compilerliihrt zuerstdie lunk
4.4 Anweisungenund Funktionen 123

tlon getportBvalue) ars ünd setzt ansc ießend das Ergebnis dieser Funltion
(Rückgäbewert) als neuenWert ein. Dieserneuewert wild in unseremBeispiel
danndirektin derVarjableled Jtatri gespcichert.Anscbließend
wird iD Zeile2I der
Wert von led ifatus um eineEhheit erhöht.
wieder iDteressantwird esin Zeile 22. Hier sehenSie den Aufrlrf der Funktion set-
PorrBvdl"ea).ln diesemFall erwartenwir keinenRückgabewert, jedocherwanet die
Iunktion enren Ubergabeparameter. Dieser Parameter muss voDr DateDtp .rar
sein(sieheZeile9). In der DefiDitioDder Funktion (Zeile9) wurdeim Klammer
ausdruckdie Variäble.idl ,1€r,,val. definiert. DieseVariablestehtder lunktion zur
Ve#ügrurgund cnthält den urert, der beim Au&uf übergebenwurdc. Hi€r einige
Beispielel
1: s e t P o r t B Vu ae r(t 0 ) |
?r s e t P o r t B Vu ae l{0 x F F ) ;
3: s e t P o . t B V a l1ü9e+( 2) 9;
4, s € t P o f t B V a l u e ( r e d - s t a t/ u
/ sl )e;d s t a t u si s t e i i r eV a r i a b r e

Auch wenn die aufgerdcne Furktion keine Parametererwartet, müssenSie auf


jedenFaI immerdiebeidenKlamrnenr,,("uDd,,)"anseben:

1: i r q e r d enie F u n kotni () i

enthält einen bestimmtenWert (Ein


Die Vrriable bd sfatrr irn Ausgangsbeispiel
gangswertvon Port B un einc Einheit erhöho. Dieserwird dc lunktiolr überge-
ben.Der Compilerspringtdann auf Zeile9 urd setztdiescnfßergabewertin die
lokaleVariableaerwafur ein.
Im weiterenVerläufdieserlunktion (Zeile 12) kann dieselokäleVariablc(nur
,,sichtbar" ncrhalbder Funktion)verwendetiverden.In unsercmBeispielwird
derwert derVariableauf denPortB geschricbcn.
wichtig: Sie benötigen in dieser Funition kein rctur4 da die FuDktion keinen
Rückgabeparimeter e rartet.Die Funktion,,1äuftenrfachaus" ünd spingt dann
Juromdri',ihdn denUr\prungl./erle221/ur-c'
bei einerÜbergabe
wie würdedasBeispielszeDado nus-
von mehrerenParamet€m
sehen?
l: # i f c l u d e < a v f / io . h >
2:
3: i n t a d d i e r e { i n ta , 1 n t b )

5: return a+b;
724 4 EineEinführung
in C

9.
r0: DDRB =
l1: P O R T=B
12.
l3:

ln Zeile 3 finden Sie den entscheidendenSchritt da?x. Im Funltionskopf werden


mehrereVariablen einfach mit einem ßeisüich voneinandergetrennt. Sie können
hier eine ganzeReihevon Vaiablen überseben.Achten Siejedoch darauf Für jede
Variable.die von der Funlrtion €rwartet wird, müssenSie beim Aufruf äuch einen
wert übergeben(sieheZeile I t ). Im oben angeführtenDeispielwird schlussendlich
der Wert Dezr20 auf Port B ausgegeben.

.her additionl.h;. ., .har.ir)


| . 2 . ' . ..

3 inr laan llcidl


I,'

. Y - additioal5,:ii) I
I Abb.4.3:Ubersabe
vonFunktionspa-

4.5 Abfragen
undSchleifen
in diesemKäpitel lernen Siezwei wichtige Technikender Programmierungkennenl
Entscheidungenund Scl eifen. Diesewerden Ihnen €ine Fülle von Möglichkeiten
eröfüen und einen weiteren großen Vo eil von C gegenüberAssemblerdeudich

4.5.1 lf-Abfrage
Um einen Äusdruck auszuwertenund je nach ErgebnisweitereSchitte zu setzen,
verwendetman in C die Anweisung4 Grundsätzlichist dieseAnweisungrehliv
beschränkt,denn Sie erlaubt nur die Unterscheidung,ob ein Ausdiuck '/a,?r oder
4.5 Abfrogen
undSchleifen 725

Erstesßeispiel:

l: # i n c l u d e< a v r / io . h >

3r int maiYr{void)

5: D O R=B 0 x 0 0 i / / P o f t B a u f E i n q d n ss c h a l t e n
6: D0RA = O X F F /i / P o r t A a u f A u s g a n sqc h a l t e n

8r i f ( P I N B= = 0 x F F )

10: = oxAA;
PoRTA
11r ]
121
13: .eturf 0;

Port B wird auf Eingang geschaltet,Port A aufAusgang. Anschließendwnd über


pdft, 01, der aktuelle Wert aD Port B der Zill Heri II entspricht. Trifft dies zu, wird
artf Port A dcr Wert Ha* 1,4 xusgegeben, ansonsten nicht. In Zeile 8 finden Sie
unsereErweiterung.Es handelt sich um eine sogennnnteIfAbfrage. ln der darauf
folsenderl Klammer (in Zcile 8) sehen Sie den zu überprüfenden Ausdruck.

Die i/-Ärfrdg? kann nur überprlifen, ob eh Ausdn& aftr oder /.4lsrfi ist. Genau
das passiert auch lier. Die Abfragc überprüft, ob an PIN3 gerade der Wert orF
anliegt.Entscheidendhier ist das doppelte Gleichheitszeichen(==). Es signalisiert
keine Zuweisuns(wie das normäle Gleichheitszeiclenin C, =), sondern eine Uber
pdfung: ,,Ist der erste Ausdruck gleich dem Zweiten?" Solte dieser Ausdruck wjhr
sein,wird der PrograDmblock darunter ausgefühn.DieserB1o& reicht von Zeile 9
bis Zeile 11 und ist durch die geschwungenen Kammern und,,}" gekennzeich-
"{"
net. ht der Äusdruck nicht wahr, wjrd dieser Block üb€rsprungen. Somir haben Sie
einen bestimDten Progränmteil, der,,auf Bedingungen"reagiert.Würde an Port B
eine Taste odcl ein Knopf geschaitet sein, könnte man danit nun äuf ehe
ZustandsänderungreagiereD.Ist die Tastegeddckt, wird ein spczieler Programm-
block aüsgefiihrt, ist die Taste nichi gedrückt, wird dieser Abschnitt übersprungen.

Auch dar Gegenteil der Gleichheitsptnfungisr rll,öglich, die PrLifung auf U"gl€tchret.

1r # i n c l u d e< a v r / io . h >

l, rt .d r (vo d)

5: = 0 x 0 0 ; / / P o f t B a u f E i n s a n 9s c h a l t € n
DoRB
6l = D x F F ,/ / P a . t A a u f A u s g a n sgc h a l t € n
DoRA

8: i f ( P I N Bl = o x F F )
9: {
726 4 EineEinfiihrung
in c

lO: = OxAAi
P0RTA

tl:
14: p0Pta 0,00:
l': ]
I : " - 0:
t8:

In diesemProsrammsehenSiezum einendie angeknndigte UngleichheitEtüfung


(Zeile 8) tllld zum anderen eine neue Anweisuns, nämlich die elseADweisung
(Zeile 12). ln Zeile 8 wnd nun also überprüft, ob der aktucle wert an Port B nicht
HercIF entspricht.Das kann bei allen Werten von ,xt0 bis 0rFf der }.all sein.Die
else-Anweisungerlaubt es Ihnen, eiren speziellenProgrämmblockzu definielen,
der nur dann ausgetuhrtwnd, wenn die l/'Abfrage nicht ,,wahr" oder,,nicht elfildlt"
ist. In unseremFall würde däsbedeuten:Ist der Wert aDPort B nicht oirFÄwird der
Programmblock von Zeile 13 bis Zeile 15 ausgefühn,nicht jedochder Blockvon
Zeile 9 bis Zeile 11. Würde, im ümgekehrtenFall, an Port B der Wert orFI anliegen,
würde der ersteProgrammblockausgefühn(weil der Ausdruck ist), de1^leite
"aftr
iedochübersprunseD.
Wir könDendieseTechniknoch um eine letzteMöglichkeit erweitern:
1r * i n c l u d e < a v r l lo . h >

1: 1. , or o /

5: D D R =B 0 x 0 0 ; / / P o f t B a u f E i n g a n gs c h a l t e n
6: D D R =A 0 x F F t/ / P o f t A a u f A u s g a n sgc h a l t e n

8: i \D.\B - O,-

L0: DOD-I 0,--:

l2: e l s e i f ( P I N B= = 0 x 0 0 )
d. D o D0 - 0 . 0 0 .
'61
el.e | ( P I N B- ' 0 ^ 0 5 )
1: t
.8: D 0 0 - .- 0 / r 0 .

?,.: D o oÄ : o . t ;

,a' .e '' n o;
l': l
4.5 Abfrogen
undschleifen 727

In diesemBeispiclbcfindcl sich eine Els.-{-Anweisung in Zeile 12.Siekönnen auf


dieseWeisemehrereAusdrückeüberpdfen, dabei kann jedoch nur ein eitlziger
1valrrsein.Altennti\-dazu könnten Sic natürlich au.h cinzclneIf-Abfragenvenren-
dcn. Dicswürdejedochunter UmständenmehrereLösungenergebenund somit
mehrereProgrammblocke austuhren.
Im oben angeftlhrtenBeispielbekomDt Port A ehen bestimmtenweit zugewiesen,
je nnchdemwel.hd wcrt an Poi B geradeanliegt.Trifft keineder Bedingungel zu,
wnd der Programmcode in Zeile22,alsodeDrelseBlock,ausseftihrt.
NatürlichkaDnin einem4Programnblock auch eine weiterellAbfrage liegen.
Daskönntedannso ausschenl
r: 1.\ts--' /
3: lf (PIND
==0x50)

5, P 0 R T=B0 x 0 0 i
6: j
7: )

In diesem FaI reürde Zeile 5 nur dann erreicht werden, wenn an Port B und Port D
je eils den Wert H€'Ij 50 anliest.

4.5.2 switch-Abfrage
Die {-Abfrage ist ein brauchbaresHjlfsmittel bei der f,Dtwickluns nr@raktiver
ApplikatioDen.Ein kleiner NachteildieserAbfingemncht sich dann bemerkbär,
wenneincchzigcVarhbleauf verschiedene werte gepdft werdensoll.
Nchmer {'ir an, sie verwendenin Ihrer AnwendungeinenDrehschalte6der 20 ver
schiedene Zus6ndeerlaubt.Ie nachZustaDdliegrein entsprechender wert än Port
B an. Die Ablinge dieserZuständewürde ein unübcrsichtlichesIf-tlse-Konstrukt
bcnöligen.
Art \-onAl,/rase,
DieslässrsichabermiteiDerahnlicheD nämlichderrurch-Abhage

1i # i n c l u d e< a v r l io - h >
2:
3: int main(void)

5: D D R =B 0 1 0 0 r/ / P o f t B a u f t i n g a i g s c h a l t e n
6: D D R =A A t l l j / / P o r l A a u f A u s g a f Ss c h a l t e n

8: sritch (PINB)
724 4 EineEinführungin C

I
l0: c a s e0 x 0 0 :
11: P O R T=A 0 x F Fi
12, breaki
13:
141 c a s e0 x 0 i :
1 5| P0RTA = OXAA;
16: b r e ak ;
17:
18r c a s e0 x 0 2 :
t9: P O R T=A 0 1 5 5 ;
20.
21.
22: c a s e0 x 0 3 .
P O R T=A 0 x 8 8 i
D r e d( ;
?5:
261
271 P0RTA= 0x00;
2Al break;
29: )
30:
31r ]

istdieses'dtc, Abl;agesehrhilfiei.h.Stnte-Machines
Vor dlen1fit State-Machines
beschreiben eine besondere der Progrämmierung,
Art wobei die Softwarevon
einemZustandin cinenanderenZustandwechseltund j€der ZustaDdeineeigene
Aufgabeäusführt.
In Zeile 8 befindet sich der Start der Anweisung.In den runden Klalnmern, die
nach dem Schlüsselworti'rit /r folgen, findet sich immer die zu überyrüfende
Variablc(bzw.ein Port).Wn wo en denaktuellenZustandvon PortB näherunter-
suchen.Fernergibt es dann verschiedene Möglichkeiten(eng.:cases),
die auf den
Zustxndvon Port B zutreffen.
In ursereDFa pdfen wir Port B auf die Werter0, l, 2 und 3. Soilte an Port B der
Wert 0x02 anliegen, springt die srvr'rclr-Abfragcdirekt zi1 Zeile 18. Dort wird
anscbließe'dder wert 0x5s auf Port A geschrieben. Das anschließende l,reat ist
hier bcsondcrswichtig.
Brealbedeutet,,Abbruch",und genaudaswollenwir hier auch.Wn habenunseren
wert gefundenund wollel, dassder Controller die i]berprüfung abbricht. Würde
Dan dasr'eak nicht verwenden,würde d€r ganzeCode,der diesemcaseDochfolgt,
nutomatischausgetuhrt.Diesist einederwenigen,jedoch tpischen Eigenheitender
SpracheC.
4.5 Abftugen
undSchleifen 729

Daher: Das Schlüsselwort,/eaft bricht an der aktuellen SteIe die weitereAusfti}l-


rung der Ab&agenb und kehn rurn Pfogamm zudck. wird dieses,rea& nicht am
Ende einesjeden cdseverw€ndet,werden bei einer Ubereinstimmungmit einem
Ab&agewertauch alle anderenAbfragen als erkannt und der komplette,
"richtig"
noch folgendeCodeausgeftihrt.

Würde in unseremB€ispieloben kein €inzigesü/eaftvorhandensein und an Port B


dei Wert 0x00anliegen,würdennacheinarder die Zeilen11,15,19,23und 27 aus-
getuhn werden. Das ist sicherlich nicht erwünscht,daher soilte lnan niemals das

In Zeite26 findet sich mit der& lf nbernoch ein weiteresS.hlüsselwort.NehmeDwir


an,Port B trüge denWert 0x20.DanDwürde keine der oben mgefühfien .dre-Mög-
lichkeiten zutieffen. Genau darum kümDert sich das Schlitsselwortlelaah Es
bedeutelin ersterLinie: wenn wirklich keineder Möglichkeitenzutrifll, mach
"Nur
ro[endes ..." Sobaldeine Möslichkeit isl wird dasdelarlr auch schonver-
"wahr"
worfen. Wäre der Wert im Beispielan Port B also 0x20,würden wir än Polt A den
Wert 0x00ausgeben.

Diesetut der Abftagesiehtbei einer Reihevon Anwendungendoch etwasübersicht


licher aus als e:-l]ereil.e lf-Abfrage.Es sei jedoch angemerkt,dassman eigendich
immer äucheinenormale4/tbe Abftagestatteinerslrtfc, Abfrageverwendenkann.

Siehabenzu diesemZeitpunkt bereitsdie wichtigstenMethoden der Softwareent


wicklung in C kennengelernt.Das Einzige,was lhnen zur erfolgreichenBntwick-
lung noch fehlt, sind Scl eifen.

4.5.3white-Schteife
Eine Schleifeist, w;e der Name schon erahnenlasst, etreäs,wäs sich ,,im Kreis"
bewegt.Gennu diese Eigenschaftwird Ihnen bei Ihren Programmeneine große
Hiife sein.Was,denkenSie,passiert,nachdemIhr Programm zrr Ende ist, also die
Ielutc ZeUe\on nah) eueicht mrde? Darauf gibt es wahrschen ich keine hun
dertprozentigrichrigeAntwort. Denn je nach Compiler und Einste ungenwird Ihr
Programm sich anschließendentweder aufhängen,neu starten oder vellücke,
.nl'".ri--r" ni"." i"-

Der Programmcod€wird im Flash des Mikrocontrollers gespeicheit.wenn näch


IhremProgranmcode nochZeichenim Speicher liegen(all€saußer0x00),wird der
Controler dies als Maschinencodezu interyretielen versuchen.Das kann zu uer
wünschtenResultatenführen. Normalerweisehangt sich der Controler aber auf
und benötigt anscNießendeinenReset.
130 4 EineEinführung
in C

Die säDgigste Anwendungeiner Sc7'b,t beginnt bereir' hier. DasProsramm könnte


sich z. B. immer wiederholen.Es sibt hierbei zwei Möglichleiten, wie Sielhre Soft
wareentwickelnkönnen:
sequentielleAusführ!ng
-

L,ry:Evc l
l>
f "".,p,"hb.tr"
r t_.

Abb.4.4:Programmablauf

2:

{
5: D D R =B 0 x F F i
6: llhile (l)
{
8: = 0x00i
PORTB
9l = 0xFF;
PORTB
l0:
11:
),2:

Die neueFunktion trägl den Namenü/lil€, as so viel bedeutetwie ,während". Urn


genauerzu sein:,,während der Ausdruckin der Klämmer wahr ist, führe den unter-
geordnetenProgrammblockaus".
warum habenwir dann eine I in die Ioammer geschrieben? ln C (und generellin
der Softwäreentwicklung)cntsprechen0 und ale negativenZahlen alrtomatisch
den Zustand,,nicht Zahlenwie die I und darüberentsprechen
wahr",oder,,falsch".
dann dem Zustand,,wahr".In unseremFrll würde dnsbedeuten,dassdie Klammer
bedhgung nnmer,,wahr" ist (weil sich die i dori nicht mehr verändert).Dasmacht
durchausSinn, denn das ist genauunser Anliegenrbedingungslosewiederholung
desProgranmblocks.Man nennt dies auch eine-El,dlosscÄld/e. Der Controller wird
in diesemBeispielausder Schleife nicht nehr herauskommen - zumhdestsolange
nicht, bis Sieihm einen Rcsetgenebmigen.
4,5 Abfrcgen
undschleifen 737

Un sicherzugehen, dasssich lhr Progranmnach der Ausführungnicht in einen


unbestimmtenZustandbegibt, empfieblt essich auch,diese,n,llosr.l,lefe am Ende
jedes Programmszu verwenden.Vor allem natürlich bei solchen,die nur einen
DurcNauf pro Resetbe,rötigen(Beispiel:Einschaltmechanismen, bei dener der
Mikocontroller mit enrerSpannüngsversorgung eingeschaltetwird und dann eine
kurzeRoutincausführt,um anscliießend ,,nichttmehr"zu tun).
Auch bcim TestenIhrer Soliware wird sich diesc ScHeifenmethodikals hillieich
erweisen.SieköDnendasGanzeauch in eher Hdrg llp AnweisuDs(in dieserZeite
bleibt der Controler sicherbis zum Resethängen)zusaamcnfässenl
: " ,Lde a1' o.h

3 1 1 1 o : n r .o d '

5: D D R A- O x F F i / / P o r t A d u f A u s s a f gs c h a l t e n
6r D D R B= 0 x F F ; / / P o r t I a u f A L r s q a i qs c h a l t e n

8: DOPB-000:
9r = 0rA3; //
P0RTA B e i s p i e l . E i n s c h a l t c o d es c h i c k e n
0: bOD-B 0 :
11:
lzt Rhile(1); // Endlosschleife: Hang-rp
):
\4: r e t u r n0 ;

Erreichtder Mikrccontroller Zeile 12,wird er sich dort bis zum nächstenResetf€st-


hängen.Ailes darunter(nr unseremFallnur /etulfl 0)wird niemalsausgetuhrt.
Die ttrile-Schleife ist aber eigentii.h fiir höhere AufgabenbestimDrt.Das könnte

1; e ! udö o.' o.L


2:
) r 'a.' ,oidl

5: D D R =A 0 x 0 0 ; / / P o f t a ( = T a s t e )a u f E i n q a n !s c h a l t e n
6: D D R =B 0 x F F i/ / P o r t B a u f A u s g a n sqc h a l t e r

8. rh t" /pl!d: 0.00) j

t0. D O P - .B 0 1 Ä d ,
1t:
t2r while(1)i // tirdlosschlejfeH
r a n su p
13:
14: r" u 0i
732 4 EineEinführung
in C

Die Magie passierthier in Zeile 8. Im WesentlicheD bedeutetdieseAnweisung


,,Solangean Port A nicht der Wert He* 00 anliegt,warte in einer Schleifeund
machenichts': Nehmen wir an, es liegt plötzlich der Wert He,. 00 an Port A an
(Beispiel;
eineTaste,die alle8 Bit äuf.] schiltet).Die Schleifenbedingrügist sonlit
nicht mehr erfü]lt und der Controller springl weiter zul nnchstenAnweisungin
Z,eile10.DasPrograDmläuft schlussendlich jn dieEndlosschleifeab Zeile12.
Das ware bereits ein gutes Beispiel ft Interaktuität, basiereld auf extemen
Zustandsänderunsen. cehenreir einenschrittweirer:

1: # i i c l u d e < a vn / i o . l r >

3:

5: c l d r a - 0 1 / / Z ä h l v a r i a b l ea n i t 0 l n i t i a l i s i e r e n
6: D D R =A 0 x r l 0 i/ / P 0 r t A ( = T a s t e )i r u f E i n g a n !s c h a l t e n
DDRB = 0 x F F t / / P o r t B a u f A u s g a n gs c h d t e n

! h i l e { P I N A! = 0 x 0 0 )
t0:
11.
12. P o R T =B a ;
l3: ]

t5: l , \ j h i l e ( 1i )/ / E n d l o s s c h l e i f el rl a n g - u p
16:
Ll:
18:

Der Ken diesesBeispiels findet sich in den Zejten9 bis 13.wir veNcndcncine
Variablea vom Typ crar (wertebereichr 0 bis 25s,8 Bit). Die wrtle-Schleife
hat als
Bednrgung, dassder ZustandaD Port A nicht Her ,0 anDimmt(wir gehen,lso
davonaus,dassdcr Zustandzu BeginnHe* -FI ist).ln der Scileifeselbstwird der
wert von d immer um eineEinheiterhoht und anschließend der neue\{ert auf
Port B geschriebeD.
$ienn wir davon ausgehen,dässan Pofl A eine Tasteoder ein Schalterliegt, dcr zu
Beginn den Zustand Her,i:FF besitzt, würde bis zu einem ]ästendruck (also einer
ArderungvonPortA) ständigeineZahlenreihe an Port B ausgegeben
werden.
SiekönnendiesesBeispielanschaulich im Simulatorverfolgen. Waswird passieren,
wenn die Vadablea den wert 255crreicht?Siewird bei dcr nächstcnErhöhungwie-
der bei 0 beginnen.lvlannennt dieseinen Somitwürdeam Port eine
"Uberlauf:
Zahlenreihe,ähDlichdieserausgegebeü werdeD:
,,r, 2, 3, 4, 5 ...253,2s4,255,0, 1,2,
3,4......"
4.5 Abfragen
undschleifen 733

4.5.4 for-Schleife
Es gibt noch eineweitereArt von SchleifeD. während die ltle-Schleifeeherals
gedacht
,,Bedingurgsschleife" ist,gilt dicfor-schleife
mehralseine,,2ählschleife':
Die w,tle SchleifesolltenSieveNenden,weDnSieauf einebestimmteBcdingung
wartenund nicht gcnar \rissen,,wann" daspxssieren wird, bzw.nachwie v;elen
wissenSie(Dreist)seDau,wie
Dur.hläufcndieSclleifeendet.ßei der/or Schleife oft
die Schleifedurchlaufenwnd. Sieverwendene en Zähler,und wenn diesersein
Zieleircichthat,wird dieSchleife
beendet.Ein Bejspielzur/o/ Schleifel
1: + i ' ' r c l u d<ea v f / io .h >
2:
3: int nain(void)

5: c h a r i = 0 ; / / Z ä l r l v a r i a b l ie m i t 0 i n i t i a l i s i e r e n
6. D D R =B A \ F F , / / P a r t B a u f A u s q a n sqc l r a L t e n

8: f o f ( i = 0 ;i < 5 0i j + + )
9. {
10: P O R T=B i ;
11: J
T2:
1:l: w h i l e ( 1 ) r / / t i d l o s s c l r l e i f e .H a r s - u p

15: r e t uf n 0 i
16r i

l)i€ Anweisungh Zeile 8 sieht schon ein rvenigkomplcxü nus.Der Autuau einer
forschlcifc:
for (StdrtanNehxt1g;Belli gul1g;SchleifenatNe^ung)
Sie erkennen die dieserAnw*uDs. Sie bestehtalso cigentlich aus
"Dreifaltigkeit"
dreieinzelnenBelehlen.Um gcnauzusein: zwei Befehlenund einerßedingung.Die
Statta weisungw]ld nv ein einzigesMal ausgetuhrt,und mar äm Anfäng.In unsc-
rem Beispiel wäre das i=0. Die Zähhaiable i wird initialisiert. Beim späteren
Durchlaufdcr Sc}leifewird dieseArweisung nicht mehr berticksichtigt.

Die ,Bed;,g,rs prüft Dit jedem Durchlatrf, ob dic Schleife noch rveiterlaufen dari
In oben ingcführtcn Beispiellautet die Bedingung:,,Laufe,solangedie Zählva-
dable ; kleiner xls 50 ist". wenn die Variablet nuD also deDwert 50 annimmt, wird
die SchleifeautomatischbeeDdet.
kümmert sich im Beispiel um dic
Dic letzte lnweisung, die Schleifenanweisung,
Lrhohurg der Zählvariablcn.Dicsc A reisung wird mit jedem Schleifendurchlauf
erneut aufgerufen.Mit der AnweisNrg t++ wird die Variablet also in jcdcr Runde
run genau eine Einheit crhöht.
734 in C
4 EineEinführun?

Dasklingt nun allesetwaskoDrplex, jedochLiestder sroßeVorteildarin,dassdiese


Art der Schleifeeigcntlich inmcr glcich ausschcnwird. wenn Sie einnul den Auf
bau (wie oben)kennen,konren sie die schleifeimmer genauso verwerdenund
ändernledislichdeDunterseordneten Prognmnlblockund die Schleifenbedingun-
gen.DasErgebnisunscrcsBcispicls wärcdieAusgabe derZahlen0 bis49 auf Port a.
D;.eLtkret ütanweisutlg lrird ersr nach dem ersten Durc|lauf ausgeführr.Somit
trägtdie Variablei bein erstenDurchlaufnoch denwert 0. Auf Port B liegtnach
wcrt.19an,jcdochrräg1dicVariablci denwert 50.
der Schleife.ter
Dn diej{,r-Schlcifc
auchanderePtrrameter alsi++ akzeptiert,
könnenSiez. B. auch
prolrammieren. Dies könDteso aussehen:
eineAbt\tärtsschbife
1: f o f ( i = 1 0 0i j > = 0i i - ' )

3: P O R T-B i i

hr dieseD Beispielbeginit die Variible i mit cincm wert \.on 100 und zäblt mit
jcdcm Durc|lauf auf 0 herunter. 0 deshalb,rveil die Abfrageja lauter ,,ht i größer
ak oder gleich 0?"

4.5.5 break- Abbrechen


vonSchleifen
Die Anwcisungürrdt ermöglichtdensofortigenAbbruchdesaktuellenProgramm
blocks.Ein solcherProgramnblockktinrte aucheineschleifesein.Hier zweiBci-
spielczum Abbruchvon Schleifen:
1: f o f ( i = 0 . j < 2 5 5i j + + )

3r if (i==50) bredkl
4: P O R T=
B i:
5: ]
6: r , / h i l e( P I N B l = 0 t 0 0 )
7: I
8: j f ( P I N B = = 5bIr)e) a k ;
9: P O R T= B0 x 5 5 ;
10: ]

Diese beideü Beispieleerklärensi.h von selbst.Sie könncn also nach einer


bcstinmten ^bfrage entscheiden,ob Sie die Schleifeschon abbrechen
"r-orzeitig"
wollen.
wichrig: Eswnd ledigli.h der aktuelc Progrnmmblock (zwischenden Klxmmern
,,{" und,,}") libenprungen,nicht derkompletteCode.
4,6 Arroys 135

4.5 Arrays
NehmenSieeiDmalän,Siewollenmit Ihrcl AnwendrngeineReihevon Messdaten
die auchwährenddesBetriebeszwi
cinlcscn.Siebenötigendailr s0 Messwerte,
schengespeichertwerdeDrnrissen.Eine Möglichkeitwtue es nun, 50 einzclnc
Variablenzu deklirieren.Daswäreschrmühsäm.AusdiescmGrundbietetunsdie
Programmiersprxche desKonzeptmit derBezeichDuDgAr/aF.
C einhervorrageo
Ein Array umfassteine,,Reihevon Variablen".SiekitDneDbestinmen,wie groß
dieseReih€ist ünd von welchemDatcntypdie werte sind.AußerdemkönnenSie
auf einzelneEinträgein dieserReihezugreiGn,derenurert setzeD
und lesenund
auchdas komplette A//a]' durchlnufen.
Dazuein Beispiel:

# i n c lu d e < d ! r / i o . h >
2:
3:

5: chaf wertel50l;

8: !ertel0l = 50i
9: r e r t e l l l = 5 5i
l0| |ieftel2l = 0;
11:
12: c = tert€I0l + reftelll i
i3:
!eftel2l = c;
l5:

In Zeilcs lindcn Siedie DeklarationeinersolchenReihe.Siedefinierenalsogarz


normaldengewünschten DateDq?und eiDeBezeichnung. Anschtießend gebenSic
iD eckigenKlammemdieÄnzabldcr ElemenleIhrer Reihean.ln unserem!'a11sind
das50 Elemente. Zu BeginndesProgrammsenthaltendieseElementeDü unsin-
nige,alsoirgendwelche zu*illigenwerte.ErwärtenSicalsonic, dnsslhre Elemente
denwcrl 0 häbcn- außerSiehabendassoveranlasst.
wichtig: Dcr crstc Wcrt dieserReinebeflndet sich an der Stelle ,ertel0j und der
letzrewert an der Stellewertelagl.SiewerdeDalsokein Glückhaben,den s0.wert
mit rsrrI50l zu errei.hcn.DassoltenSiebeachten. Die Zä]rlunglreginntbei 0.
Siehabenesbereitscrkannt: In urrrrcl2l findet sich natürlich der Wert i05.
736

4.6.1 Strings(Zeichenketten)
Die wohl häufigsteAnwendungvon Ä//a/s ist die Zeichenkettebzw St/ir& Es gibt
in C keinen eigenenD.tentp tur wörter, Tene, etc.",lediglich d€n Daten-
"Sätze,
t}?.iar, der nur ein eiDzelnesZeichenfassenkann.
Äus diesemGrund bildet man ein kftay lon charvaiablen, um einen ganzenSatz
darzustellen.Um dasEndeeiner Zeichenlctte zu mükieren, gibr €s die sogenannte
sting-Terninierung. Das Konzept ist eigentlich einfach: Der Controller hat keine
Ahnuns, wie lang dnsAnal wirklich ist. wenn Sie es durchlaufen,müssenSie als
Programmiererwissen,wann dasletzteElementerreicht ist.
hher hät mln sich entschieden,das Endeeiner Zeichenk€ttemit einem
"Nullzei-
chen" zu kennzeichnen.Das ist nichts anderesä]s ein Byre mit dem wert 0x00.
Somit würde ein Strilg im Sp€icherimmer so aussehen:

asctl hallo
@@@@@@
012345

Abb.4.5: AufbaueinerZeichenkelte

Es ist daher üblich, beim Duchlaufen einer Zeichenlctte iDmer auf dasNulz€i-
cheDzu waiten, um dann die Sclieife abzubrechen.Und genauhier passiertoft der
F€hleadasNuilzeichenzu vergessen. Somit läuft Ihre Schleifeweiter ünd weitel bis
irgendwannendlich ein Nulzeichen im Speicherdaherkommt.
Das kliDgt nach einer Lappatie,wurde Jedochzum großen V€rhängnistur viele
Untemehmen und Privatanwender,als die Virusprogrammierer ulrd Hacker
herausfanden,wie man dieseschwachstellefiir kdminelle zweckenutzen kann. so
glei€hganzeMaschinencodeskopiert,
\4.urdenin ve$chiedensteTexteingnbefelder
die natürlich die Größe des empfangendenÄ/.4.14überschritten. Somit war der
,,bösartigeCode" im SpeicherdesAnwenders(oder deswebservers).
Mit dieser Technik wurde die Rücksprungadresseeiner Funldon überschrieben
urd die CPU fillrte beim scheinbarnormalen Rücksprungins Hauptprogramm
plötzlich den bösartigenProgrammcodeäus.Auch die SpracheC ist nicht perfekt.
Selbsteinemguten Programmiererkönnen dies€Fehlerimmer wieder passiereD.
Züü.k zu den Strhgs. Nehmenwh an,wir habenein€ Funktion 1s232-lfltre3t fe,
die ein Zeichenauf die serielleSchnittstelieausgibt.Dann könnte di€ V€rwendung
einer Zeichenkettez. B. so aussehen:
4.6 Atroys 137

1: char satz|2561i
?.
3l
s a t z l 0 l= 'H'
5: satzlll - 'a'
s a t z t 2 l= I'
s a t z t 3 l= 'l'
8: s a t z t 4 l= 'o'
sat2I5l:0x00;
10:
11: for {i:0' satzijl r- 0; i++)
12. {
t3: R S 2 3 2l , l f jt e B r t € ( s a t zl i I ) i
]

Siehabenesbereitserraten:Auf demTerminalwürdedaswort,,Hal1o"erschenren.
wenn Sie die abschließendeNu in Zeile 9 nicht setzenwürden, würde Ihr Pro
gümn sichentwcderaufhlingen oderdannstoppeD,wenn ngendwann im Speicher
AlrchweDnmnndiesleichtvcrmutenmag:Der Controllerweiß
eineNull erscheint.
bei einerfehiendenNull nicht, dassbei satz[s]Schlussbt. Ebensoweiß er nicht,
dasser spätestensbei satz[255]aufllörensollte.Er $'eißgrr nichts.Somitläuft er
weiterund gibt deDInhaltvon sätz[2s61,s,trzl2s7],
satz[258]usw aus.
Da lhr Aral irgendwoim Speicherliegt,liestder Compilerbei satz[2s6]einfäch
das,wis ils Nächstcs
im Speicher
steht.ReinesChaos.
LcgenSiedaherentwederschonin derSchleife fest,Nanngcnauder string zu Ende
ist (in unseremFallnnch5 Zeichen)- oderachtenSieimmer auf die abschließende
Null.
wüfde män nun zum Iormulieren eines ganzen Satzesfür jedes Zeichcn eine
eigeneZeilebenötigeD,Näre dnssehrünständlichund würdekeinenSinnmacheD.
Als Abhlfe gibt es hier die StringFunktjone . Um dieselunktioDen benützenzu
können,müssenSie die Bibliotheksrri'Tl einbinden.Damit erleichtertsich die
Behandlungvon Zeichenketten erheblich:
t. , i .r .d. . o,' :o.h.
: '4r.dö ri'9h
t:
a: '_'ci \.oa

6: h. ,rzt25_ i
-: ii
hd'
8.
6: -.'e. 'qr'. rello I'o lo'\:
138 4 rineFinführung
in C

Ltr ro_ i 0: ,ar' i :- 0: a


13: Rs232_l,iri
teByte(satzli I );
la: l
b: "r . 0j
17: ]

Die tunktion trcp), kopiert eineZeichenkettein unserArr4,. DasNullzeichenw;d


däbeiautomätischnDgehängt.Hier eine ldeineAuflisrung der wichtigstenFunktio-
nendersfirg.h Bibliothekmit denentsprechenden ParameterDl

Funktionsname ErH?üung
strcpy(dest,sour€e) Kopiert eiDeZeichenketteGource)über eine
andere(dest)
strot(dest,sour€€) (source)an enreandere
HängteineZeichenkette
(dest)an.
Zeichenkette
strlen(souce) DiescFunldionhät eilen Rücksabewert.
cibtdie
LängeeinerZeicherlette(source)zurü&
(ADzahlderZeichenbiszum Nullzeichen).
strncpy(dest,source,count) Kopiert einebestimrnteAnzahl von Zeichen
(count)von enrerZeichenkette (source)in eine
ander€(dest)
strncat(dest,source,count) Hüngt einebestimmteAnzahlvon Zeichen
(coun, von einer Zeichenkette(source)än eine
aDdereZeichenkette(desi) an.

Abschließend
ein Beispielderverschiedenen
Funktionen:

.: d.n .aF t. \
9.
t:
r: n. lain\ o aJ
.:
{
6: c h a r s a t zl t 2 55 I i
7; charrontll40l
8: .harwort2l4ol
9: c h a rw o r t 3 l 4 o l
10: c h ar j j
l1:
t2. s h c p y( r o n t 1 , " S o " ) l
l _ru Ltra a'-
.p. Lo. "1,
739

4.7 Bit-Operationen
Im folgendenUnte*apitel lernen Siedie wahrscheinlichwichtigstn Methodender
hardwarenahenSoftwareentwicHungkennen,die soge']^al:nten Bit-Operotionefi.
Mit Bit-Operationen könnm Sie, wie das Wort sdrcn erklärt, im ,,Bit-Bereich"
arbeiten.
Der Datentp.rrr ist der kleinstezur V€rfijg!ng ,rehendeDarenty?und 8
Bit 8roß.
Ein Port hat auch eineAalressierungsbreite
\ion 8 Bit. \{ie abersollenSiez. B. den 3.
Pin auf Port B schalt€n,wenn Sie nur 8-Bit-wert€ schr€ibenkonnen?Genaudazu
benötigenSiedie Bit-Operationen.

4.7.1Altgemeines
Di€-Grundr€chenart€n
der Bh-Operationen_
sind:
. ÄND-V€rknüptung (Opemtor: &)
. OR-verlnüptun8toperator ll
. XoR-Verknüpfung(Operator: ^)
. NoT-Operation(Op€rator:-)
Bei alen VerknüptungenhabenSiezwei Opemnd€nzurVe iigung und b€komm€n
ansd ießendejn E Sebris.
Di€ AND-V€rknüpturg arbeitet nach folgendem Satzr w€nn beide Bits den
"Nur
Wert I haben,ist dasErgebnisl, sonst0':
140

Die oR-Verknüpfung arbeitet so: ,,wenn einesder beiden Bits oder beide Bits den
Wert I havhaben,so lautet dai ErgebnisI':
Die xoR-Verhüpfung funltioniert so: wenn einesder beidenBits d€n We l
"Nur
trägt, dasandereaberden Wert 0 besitzt,ist dasErgebnisl, sonst0':
Achtung: Die NoT-Operation benötigt nur ehen Operanden.Sie kehrt lediglich
denWert selbstum, wandelt alsoale .l in 0 und umgekehrt.
Beispielel

1&0=0
0&0=0

110-1
0 0=0

l^0=1
0^0=0
-1=0

letzt k€nn€nSiedie Grundtunlcionsweiseder Bit Operationen,wissenabel immer


noch nicht, wie Sie,n der ddtten Pin von Port B heranlommen. Düer n:ih€m wir
uns d€n Bit-Operationenim 8 Bit Bereichl
Beispiele:
. 0000111 I & 00000001 = 00000001
. 11110000 &00001111 = 00000000
. 11110000 &00000000 = 00000000
. rrr10000 0000000011110000=
. 1 1 1 1 0 0 0000 0 0 1 1 1 11=1 1 1 1 1 1 1
. 1 1 1 1 0 0^0 0 0 0 0 1 1 =
1 1l l l l l l l l
. 11110000 ^ 11110000 = 00000000
. ,'11110000 = 00001111
. "01010101 = l0l0r0r0

Das isr ein beträchdicherBit-Block. Nehmen Si€ sich die Zeit und überlegenSie,
wie die Ergebnissein den Beispielenzustandegekommensind-

ledes Bit wird mit einen Bit an derselbenStelle des anderenwertes gemäßBit-
Operation verknüpft. Um däs richtige Ergebnis zu bekommen, müssenSie also
4.7Bit-operotionen 747

ledigtich dic oben angetuhrten Bit OperationeDiir diese8-Bit-Wefie Bit tur Uit
durchführen.
Darnit ist noch immcr nicht geklärt,wie sich Pin 3, Port B verändemlässt.wir sind
der Lösungaberschonsehrnahe.Analysieren wir die obenangefiihrtenBeispiele,
lassensicb folsendeAussagentreffen:
Un ein bestimmtes Bit zu setzen,
eignetsichdie OR-Operatid,nm bcsten.Nur bei
dieserOperationbleibenalle anderenBits unverändertund ejne 7xsätzlicheI
bervirktdnsSetzeneinesßits.Hier die praltischeErklärung:
. 0 0 0 0 1 1 l l0 0 1 0 0 0 =
0 00 0 1 0 1 1 1 1
Bezeichncn wir den erstenWert (00001I I l) ah Vaiableund dcn zweitenWert als
Modifikator. Der Modifikator ist Ihr eigcntlichesWerkzeug.Mit diesemWert kdn-
nen Sie einzelneBits der Variablebeliebig ver:indern.in diesen Fall, bei Verwen-
dungdcr OR-Verhüptung,könnenSiedie Bitssetzen.
Um ein einzelncsBit zu löschen,bietet sich die ÄND Verlnüptung an. Außerdem
wird hier noch die NOT Operationbenötigt.Dicscwird abernur auf denModifi
kator angewandt. Daswürde (nehmenwir an, wir wolleDdasdritte Bit löschen)
anhandeinesBcispiels etwaso aussehenl
. Wert:000011l1
. Modilikator:00000100 (Wtuwolienßit 3löschen)
. -Modijikator: 1111101l
. WeI1& (-Modi6kator)r 0000111 I = 0000101
1 & I 111101 I
. Also:Bit 3 wurdegelöscht!

4.7.2 Bit-Operationen
in C
ns bedarfnatürlichgewisser
Übung,um dieseßit OperationeD h der Prl\is eir-
fach und schnellanwendenzu könneD.Glücklicheiweisegibt cs i]l C hierfür eine
praktische,,Äbkürzung":
1: / * H € t f e f m a k r o s* * * + + * * * * * * + + * + + * * + + /
2: # d e f i n €s e t b i t ( P , B l T ) ( ( P ) = ( 1 < < ( B I T ) ) )
3, # d e f i n ec r e a r b i t l P , B t T )( ( P ) & = - ( 1 < < ( B I T ) ) )

5: s e t b i t ( P o R T B1,) i
6: c l e a f b i t ( P 0 R T D4 ,) |

In Iiüheren Vcrsionen von AVLGCC gab es die Funktionen rüi und rrt, w.s so viel
wie Ser lir und Cleal B;f bedeutet. Diese wurden aber vor kuuer Zeit nus der
Bibliothek cntfcrnt. Damit Sie diesepraktischeDlunktionen dcnnoch verwenden
742 4 EineEinführung
in C

können, müssenSie dazu zwei kleine Makos definieren.Diesefinden Sie oben in


deDZeilen2 und 3. SieköDnendiesebeidenZeilenin jedemIhrer Prosramnewie-
dcrvcrwenden.KopierenSiedie Zeilendazu direkt unter die #i,i.hdd-Anweisungen.
Die Zeilen 5 und 6 demonstrierendie Anwendung.Der ersteParameterist der zu
ver:inderndewert, der zweite Parameterist das 7.uveränderndeBit (begiDnend
mit 0).

4.8 ISR:Interrupt-Service-Routine
In dem nun folgendenAbschnitt flnden Sie Hinweise zur Programmierungvon
sogenanntenInterrupt ServiceRoutinen. Diese Funldonen werden automatisch
vom ProzessoräügeNfen, wenn die Interruptbenachichtigling eingeschrltetist
wird (BeispielEmpfangeinesZeichens
und ein bestimmterInterrupt ausgelöst
überdie serielleSchnittstelle).
SolcheineInterupt-Funktion kann in C etwäso aussehen:
' r l c r \ t ar rFoo 0v ,p 1

3t / / Z u s t a i d s ä n d e r u ' ragu f P o r t D ( e n t r e d e l
r' 00DDi0. D o DD :

Sie merken: Diese Funldon sieht etwas ungewöhnlich aus. Es gil,t hier keinen
Rückgabewert- auchkein ,oiA. Außerdemsind keinePärämetermöglich-Däs
"Ske-
lett" einer ISRsieht so aus:
'lL\Ä _ \ T - o Dj P r \ I t
T0D

Dabei ändert sich lediglich die BezcichnungINTERRUPIyEKTOR, je nachdem,


welchenlnterruptSieabfangen wollen.Auf Seite137sehenSieeineübersichtder
wichtigsten
Interrlrpts.
Eine umf.ngreichere Liste finden Sie unter http://w.nongnu.org/avrlibctuser-
mänud/group-nvr-interrupts.htnrl.
Siesolten auf alleFäIe die neueBezeichnung (1. Spalte)velwenden.Diesewurde
erstvor kur?€m(Seir avr libc 1.4.0)eingeftih(und wnd hngliistig die auslaufen
den Bezeichnungenersctzen.Ein croßteil dcl im Internet vcrbreitcten Softwäre
veruendetaberroch diealteBeT.eichnunsdahertuhrt dieseListebeideVariarten.
4.8 ISR:lnterrupt-SeNice'Routine 143

Vektor Alte Bezeichnung Bescheibung


ADC_vcct SIG ADC ADcconvcßion Cohplete
ANA COMP vect SIG COMPARATOR ^nalogComparator
ANALOG COMP_vcct SIG COMPARATOR Aulog Conrparator
INTo ve.l SIG INTIIRRUITo lxtcmal hterrtrpt 0
INTI vect SI(I_INTERRUITI lxtehal InterruptRequest l
INT2_rct SIG INTERRUPI2 latenrallntcrrupt Requcst2
INT3 vect SIG_INTERRUPT3 Externallnterrupt Request3
SPI,STC-vcct SIG SPI SerialTransfd ComPlete
TMERo COMP vect SIG OUTPUT COMPAREo f imetclöunteroconp.reMatch
TIMER0 O\.F vect SIG_OVERFIOWo Timetcounte Ove.flow
TIMER1-CAPT_Ve.I SIG INPUT CAITURI1 T,m.r/Comrer CaptureEvent
TIMERT OI.F vect SIG OVERFLOWI Tlmetcounterl Overilow
TIMER2 COMP-vect SIG OUTPUT COIIPÄRE2 Timer/CouDter2 Match
Conrparc
TIMER2 OV! vect SIG O\rlREIOw2 Tincr/Counter2 O\erflow
T\\.1 vect SIG 2 \VIRE SERL{L 2 wire Süial Intcrfacc
UART R{ vecr SIG UÄRI RICV U R! Rx Cönplete
UART TX vect Src-UARI TRdNS UAm, Tr Comllete
UART UDR!_vcci SIG UAJTTDATA UARTData RegntcrEmp$,
USAIT RX ved SIG USARI,RECU SlG- USART,td Complete
UART-RECV
USART_RXCled SIG USÄI{T RDCV,SIG USART,Rx Complcte
UART-RE(]V
USART-TXC vcct SIG USART TtcANS,SIG USART,Ta ComPl.'tc
UART TRANS

Achtüng: Nicht alle der oben angefr:ihrten Bezeichnungen geltcn für Jeden Control
1er.Diese Auswahl ist zwar aüf dcn mcisten -ATmegx8ähnlichen Varianten verfiig
bar, cenauercstudcn Siejedoch im entsprechenden Datasheetbzw.der Dokumcn-
trtion Ihres C-Compilers.

Die ,,neue Schreibweise" fiir eine Interrupt-lunktion hat sich ebenfalh geäDde
und sieht nun so aus:

] S R { I I i T [ R R U P T V E K )T O R
{
]

Es hat sich also lediglich das Wofi SIGNAI in die Bezeichnung IS.i'tgewaDdelt. Sie
kennenhiermit nun beideVarianteDund werdenin der Praxisauchnoch eineWeile
-.
744 in C.r"r' , '| :. r
4 Einib'Einfrihtüi| . . ', :- :r':

Als letzten Schweryunl( möcht€ ich Ihnen noch einen wichtigen, wenn auch
unvolständigen Einblick in di€,,Tiefen" der C-Prognmmierung geben.Siewerden
die hier vorgestelten Methoden wahrscheinlich relativ oft in der praktischen
Aawendungfinden, vor allem, wenn Sie sich den QuellcodeandererEntwickler -
z. B.im Inte et- ansehen.

4.9 Pointer(Zeiger)
Die deutscheÜbersetzungfii| den Poirter tifft es eigendichsehr klar: Es handelt
sich um €inen Zeiger,alsoetwas,wasuns auf einen anderenOrt hinweist.
Angebot an Datent)?en. Sie
Die Programmi€rspracheC bietet ein überschaubares
können normsle ZaNen, Buchstabenund Fließkommawertespeichern.
Bei einer Vadablehndelt essich dabei um einen reserviertenBereichim Speicher.
le na€h DatengrößeIhrer Variablebenötiger Sie eine gewisseAnzahl an Speicher-
plätzen (gemessenh B)'te). Demnach bekommt also auch jede Variable eine
bestimmte Speichem&esse, an der sie dre Daten im SRAÄ.{abspeichert.Hier eine
graischeVeranschaulichung:

SRAI\{

f ü,t-''''-lT.r;;-lF--''''-l t .n";lFr.I

Abb.4.6:Väriablen
in SRAIVI

Nun existiertabernoch eine weitereArt von Variable,näniich die bereitsangekün-


digte ZeigeNariabl€(eng.rPointer). Der Sinn dieserVariablenbestehtin der Spei
cherungvon Adressen.sie merkt sich also,wo andereVadablenim Speicherplat-
ziert sind. Siemerkt sich äuch,welcherDatentt? sich an eirer bestimmtenAdresse
be6ndet.Sobenötigt €in crdr etwänur I B)'te im Speicher,w:iiretrd ein tuf schon2
Bltes belegt.Aus diesemcrund hat man sich fü eine einfacheund doch logische
Bezeichnungentschied€n:
. char*ptl;
. inr* b!
. double.d;
Der Sternbedeutetimmer Zerger.Von welchemT]" dieserZeiger ist (bZw.,,...wel-
chen Datent,? die Variableb€sitzt,auf die di€serZ€iger deutet"), sehenSie direkt
davor.Sozeigl z. B. ein€ chdrt Variableauf einen I B)4ectar-wert.
(zeiger) 745
4.9 Pointet

DäsfolgendeBeispielbrin$ Ihncn die t\nktionsweise von Pointernetwasnütrer:

l: #i nclüde <avf/i 0,h>


2:

I
5:
6:

8:

10. i = 5i
1l: p = 10;
T2:
131
j - o;
t5:
16: *k = 15;
17:
18:
l9:

Nun lautet die vermeintliche Fangfragenätürlich: ,,welchen wert enthalten die


Variableni ünd j am EDdedesProgramms?"
Löse,rwb dasProblemnrch altbekanntemSchema,alsoZeile tur Zeile:In den Zei
len s bis 8 6nden sie die Deklaration von je zweiVariablenuüd zwei Zeigen eines
passendenTyps.Mit Zeile 10 bekommt die Variablei den erstenWert zugewiesen'
naimlich5. ln Zeile 11 gebenlvir der Z€igervariableP den Wert l0 Zu diesemZeit-
puDtt ,,?-eisl"die Variablenün auf den Speicherplarzan der AdresseI 0. Es1\ird auf
ein Bite gezeigt.Eshandelt sich urn einenZeigerdesTypstfial, alsonü ein ßlte.
In wnklichkeitsastunsdieseAktion 'renig,wn wissenJanicht,wäsan dieseroni-
nöscnSpeicherst.:lle10zu finden ist. lnteressanterwird esin der folgendenZeile.In
Zeile 12 wird der ZeigervariableP nun die Adr€sseder Väriablet zugewiescn.wenn
Sievor einer VadäblendasÄnpursd,ld {ein kautuännisches,,Und'.,also &) anftih-
ren,setd der Compilernicht den Inhalt der Variablean dieseSrelle'sonden die
Adresse. Dasist entscheidend.
p zeigtnun alsoan die Speichentele,
UnsereZeigervariable an dersichdieVariable
t befindet.Würden wir eine Ausgabemöglichkeit (Terminal,et ) zur Vertugüg
haben,köDntemandengenauen Speicherort derVariable,aüsgeben

Nochmehl passiertin Zeile13.Hier findenSiedenSternvor der ZeiseNariablen


Dns ist nun die ümgekehrtelunktion dessen,waswk ebengesehcnhaben Es wird
hier alsonichtdieAdresseeingeset4,sondcmder an dieserAdresse.
"Wert"
746

Um rn aber an den Zidort zu g€langen,also an die Stelle,an die dies€Adresse


z€igt,benötigenwir den Stem-Operator Hier ein einfacherVergleichl
SehenSiesich den C,oileill Zeile I I und Zeile 13an. Ir beidenzeilen weis€nwt d€r
Zeigervariablep einenwert zu. Der wesendicheUnt€rcchiedbest€htdarin, das, vrü
in Zeile l1 die Ädresse,auf die 2 z€igt,verändern und in Zeile 13 an dieseAdresse
gehenund denwert, der sich dort befindet,?indem.Hier eineGrafik:

SRAM

f.h";lfö"i'l

Abb.4.7:Funktion
€in€sPointers

Die resdichenZ€ilen sollten nun ein Klnderspiel sern.Die richtige Antwort lautet
also:t=8 ünd j= 15.was in p und & steht,wissenwir nichg eshandelt sich dabeija
lediglich um ngendwelcheAdressenim Speicher
747

5 Anwendungen
5.1 SerielleKommunikation
Zu den häufigstenAnwendungenbei der Entwicklung am Mikrocontroler zählt die
serielleKommunikation. EDtwedermit einem PC oder lnit einem nnderenMikro
stellt daherein typischesSzenariodär:
controller.DasersteAnwendungsbeispiel
Der PC wird mit den1Mikrocontroller verbunden.Auf dem PC wird mithilfe eines
trninals die seriele Kommunikation mit dem Mikocontm er hergestelt
Anschließendkann der Anwender dem Mikrocontroiler einige Befehleschicken
ünd bekonmt darauf jeweilseineentsplechendeAntwort.
Di€seseinfncheBeispielbietet Ihnen einen gutenAusgangspunktfür neueProjekte,
denn die serielleSchnittstelewerdenSiezumiDdestwälrcnd der EntwickluDsöltcr

siesollteneinenBli.kalfdiewebseitezumBuchwedenuster:
http://www.wrbu.h.de-Dortfinden5'e letzteAnderungen
und
aktuelleUpdateszude.EeispielenindiesemBuch.

Matelial
5.1.1 Benötigtes
. ATmegaS, -ATmegar6, ATmega32,... te nach gew;ihltemMikrocontroller müssen
Sieeventuelldie Pin-Zuweisungenbz.vi'.die Schaltungetwasab:indern.
. 3,868-MHz-Quarz (Standard beiSTK500und myAVR)
. MAiC32 (wenn Siekein Entwicklungsboardverwenden)
. SerieesKabel
. PC mit zwei seriellenSchnittstellen(bei Verwendungvon STK500)
. Terminalprosranm ÄVR ft/''ti,ral (auf beiselegteiCD)
748 5 Anwendungen

5.1.2 Instandsetzung
der Hardware
Der ersteSchrittist, die Hardwarefunktionstüchtigzu machen.Hier passierendie
häufigstenFehler,daher finden Sie auf der beigelegtenCD-ROM bereitseine vor-
kompilierteHEX-Datei,die Sienur mehr in Ihren Controllerflashenmüssen.Sollte
dieAnwendungnichtfunktionieren,liegt der Fehlervermutlichim Hardwareaufbau.
Wir eehenhier der Einfachheithalbervom STK500aus.SolltenSie ein STK500-
komfatiblesBoardbesitzen,solltendie meistenSchritteidentischsein.Wenn Sie
Ihren eigenenAufbau verwenden,solltenSie bei diesemBeispieleigentlichauf
keinegröberenProblemestoßen.
Bei einem fliegendenAutbau dürfen Sie den MAX232 nicht vergessen,
hier die
Schaltune:

ATmegaS-P
PC6(/RESET) PCo(AOCo)
PCl(ADCI) c1.
AGND PC2(ADC2)
AREF PC3(ADC3) c2+ tc3
avcc Pca(A0c4/sDA)
PC5(AOC5/SCL) C2. GND

T1N TIOUT
T2 N T2OUT
PDO(RXD)
PBT(XTAL2/TOSC2) PO1[rXD) R2OUT R2IN
P02(Nro)
P03(Nr1)
PO4CXCK./ro)
PD5tfl)
vcc PD6(A|N0)
PO7(ArN1)

PBO(|CP)
PB1(OC1A)
GNO PB2(SS/OC1B)
PB3(MOS|/OC2)
P34(MrSO)
PB5(SOO

Abb.5.1: RS232-Grundschaltung

Abb.5.2zeigtdenschematischen
AufbaudiesesBeispiels.
DasSTK500besitztzweiserielleSchnittstellen
mit denBezeichnungen
RS232CTRI
und RS232SPÄRE.Ersteredient der Kommunikation zwischendem AVR-Studio
und dem STK500,die andereder eigendichen Verbindungzwischendem Milro-
controllerund demTerminalprogramm.
Auf der beigelegtenCD finden Sie ein einfachesTerminalprogrammmit dem
NamenÄI& Terminal,Das Prosramm muss nicht installiertwerden und läuft
5TK500
Abb.5.2:Aufbau
desPrcjekts

dnekt r-on der CD. Eine aktue e Version finden Sie äußerdem immer unter
\li\tr.avrbuch.de. Das TerminalprogranD befindet sich auf der CD unter \Softwa
re\AVRTerminal\AvrTerminal.exe.
Zurück zum Beispiel.Der Quellcodedatur ist ebenfals auf beigelegterCD unter
\Beisp;ele\SerielleKommuniktion\zu 6nden.DasHEx-FilebefiDdetsichin \Dei
spiele\SerieleKonmünikation\default\SerieleKommunjkation.heL

Achtung: sollten sie keinen ATmega8veffenden, denken sie bitte daran, den
Quellcodedirekt im AVR'Studiozu öffnen, um ihn dort neu tur Ihr Chipmodel zu
kompilieren. Sie Anden außerdemeine stark vereinfachteVersion dieserAnwen-
dungi- VcrzcLhni''Bei'pi(le\\er
iellMinimdl\.
StartenSie nun dasAVR Studio und flasheDSie die HEX-Datei in den Milcocon
troller. AnschließendstartenSiedasTerminalprogrammund stellenesauf den ent-
sprecheDden CoM'Port ein. Dabeiist zu beachten,dassdasAVlt Studiobereits
einen COM-Port tur die Kommunilation mit dem STK500 verwendet.Siemüssen
im Term'nalprogramm nochdie Kommunikntionsparameter einstellen
aul
Baudrate: 9.600
Datenbits: 8
Parity: Keine/NoDe
Stoppbits:r
Flusskontrole: Keine/None
am STK500z11
wenn dasalleserledigt ist, brauchenSienur noch die RESET-Taste
drückenund sollten unmittelbär darauf schoneinewilkommensnachiiclt im Ter
minalfenstersehen.wenn nicht, solhenSieFolg€ndesüberpdfen:
150 5 Anwendungen

Verfügt däsSTK5O0über Strom und leuchtet die STATUSLED gdrl? Es sollten


eine rote und zwei grüne LEDSleuchten.wenn nicht, besteht€in Problem mit
der Stronversorgung. Die STK500Firmwarekönnteauchbeschädigt sein (das
ist oft der FaI,wcnndic LEDSeineändereInrbe zeigenoderblinkeD).
HabenSiedie COM Portsrichtig eingestelt? COM1 z. B. für dasAVR-Studio
und CoM2 in1Terminalprogümm?
HabenSiedie RxD/TxD-Lcitungen am sTK500ichtig mit den entsprechenden
MikrocontrollerPins verbunden? Dazu 6nden Sie zwei Pins mit der Bezeich
nung Rs232 sPÄRt im unteren Ende des Boards (bei den Tästen),die beim
ATmesas(alsBeispiel)überejn Kabelmit denPinsPortD.0(RXD) und PoriD.l
(I(D) v€rbü1denwerdenmüssen.
Sind ale tunper in der Standxrdeinstellung? Vor allcm dcr tumper OSCSEI
solltePin 2 und Pnr3 verbinden (aho,,rechts"
gestecktsein).
Sowird derOszilla
tordesSTK500verwendet(Takl:3,68MHz).
FuDktioniertllrre serielleSchnittstelle?
TestenSiedaseventuelmir einemNuI-
modeml<abel ünd einemanderenPC.
HabenSievielleichtwahrenddesProgrammierens irgendwoeinelehlermeldung

5.1.3 Bedienung
undFunktion
DieseseinfächeProgrälnn meldetsich aD Begnrnmit einerWjllkommensnach
dcht. Siekönnen anschließendfolgcndeBcfel e über Ih1 TernnMlprogramn ein-

.up

Um cinenBefehlan den Mikrocontoller zu schickeD,


mlrssenSiedie ,rrer lar.e
drücken.

5.1.4Erklärungen
Siewerden merken,dassdasBeispiclz\ff ein effäches Programm nt, aber einige
fortgeschritteneAnweisungenund RoutineneDth.ilt.Folgend€Tipps werdenhelfen,
dasBeispiellonplctt vcrstchenzu können.
Die FuDktionensetup llatt(), uartJutchar), uart sercfidr0 kennen Siebereitsäus
dem Buch.Es wurdenin diescmBeispieljedochzweiweitereFunktionenerstelt:
uart4ttstrins) \tnd wrt readLine).
. 757

Die Funktion uart-pußtring) ist einfach zu verstehen.sie dr:rcNäuft ein chal-


Array, gibt Zei€hentur Zeichen auf die s€rielleSchnittstele aus und b cht beim
AutEnden des 0 Zeichens(Inde der Zeichenkette)die Funkion ab. Die ScNeife
durchläuft maximal255 zeichen,verhindert also einen Lrbellauf.Mit dieserFunk
tion könn€n Siealso relativ einfachganzeZeichenkettenauf die Schnitrttele ausge-

Die FÜnktron attJeaalifle0 sieht €twaskomplizierter aus,ist aber finlich einfach


!,1e uan-pußtring).In atJeaaline) wj.rd Zeichenfür Zeich€nvon der seiie[en
-
Schnitlrtelleeingelesen so lange,bis ein Zeichenmit demASCII-Code13 emPfan
gen wird. DiesesZeichenbedeutetNelt ltn€ und entspricht im Wesendich€nder
-Ertel-Tasteauf lhrer Tastatü.
In wirHichlcit wird mit dem ASCII Code 10 sogarnoch ein zweitesZeich€n tur
übermittelt. Somit entspiicht die -E ter Tasteeigentlichden Zeichen
die -Errer-Taste
13und 10.Uns reicht hier aberschondasAuftreter der 13,um die Zeile abzuschlie-
ßen.Wichtig ist dabei,dassdie Zeichenkettelm Ende mit ehem o-Zeichenabge-
schlossenwerdenmuss.
Im Hauptprogramm Anden Sie eine Endlosscl eife, die nach folgendem Schema
nbläuft:
. Warten,bis ein ganzerBefehlempfargenwurde.
. Um welchenBefehlhandelt essich?
- ?e/sior:Gib Veisionsnummeraus.
,p: F'hdheeineVar;able um einefinheit.
- donr: Veringere einevariable um eineEinheit.
iron Zeigeden lnhalt der Variablean.
. Beginnedi€ Schleif€wieder von vorne ...

Die Funldon rtrclrpo vergleichtzweiZeich€nlettenmiteinander'


Achtüng: wenn beideZei.henlctten identisch sind liefert die Funktion den wert 0
zurück, ansonstenehe Zahl verschiedenvon Null, also etwa I odef -1. wichtig in
diesemZusammenhangist auch, dassdie Zeichenkettenbei der Groß- und Klein-
schreibungebenfallsidentischs€inmüssen.
Die letzte,j€dochwichtigsteNeuerungin diesemProgramminden Sieim Codefiir
die Abwicldung desBefehlssfror Doit wird eine Funktion mit dem N.men toao
verwendet.Dies b€d€utetso viel wie lrteger ?o, SC]] - wandelt eine Za ako in
eineZeich€nketteüm.
Wenn Siedie Zahl 65 digital darstellenwolen, handelt essich dabei eigendichum
zweiASCII-Zeichen,nänrlich 6 und 5. DasASCII-Zeichenmit dem Code65 würde
752 . ',.Anfualri4tLlti9r,.ril::i:,':i,::.:,,::i,r,,-:rri:,,r;iiiiilfj:lit.

ja dem ZeichenA entsprechen(sieheASCII-Tabe[eim Anhang) so tunkionied


dasalsonicht.
Da Siein Ibrem Progamm mit sogenanntenZaNenvari"blentpen (iüt, ch,],long,
...) arbeiten,müssenSie dieseZahlen €rst ir eine Zeichenlette umwand€ln Und
genaudas ist mit der Funktion itoa0 möglich. Der erst€Päramet€rist Ihre Zail.
Der zweit€ Paramets ist ein cral-Array (also ehe Zeichenlctte) und der dritte
Parameterentspricht der Zahtenbasis.Die Zahlenbasisfür eineDezimalzahlist 10.
w:ihlen Siehier 16 alsZahlenbasis.
Wolen SieIhre Zahl z. B. hexadezimalausgeben,
EinebinäreAusgabeleürden Siemit der Basis2 erreichen.Versu€henSieesl

(HD44780
5.2 DieLcD-Steuerung kompatibet)
Im folgenden Beispiel werden wir uns mit der ehfachen Ansteüerung eines
HD44780-kompatibbn rc-Djspla'ß befass€n.Gleich vorweg sei erw:ihrt, dassdie-
sesBeispielwirldich nul die einfachsteVariantedarst€llt.
die Anzeigebenutzerdefiniefier
Die meisten rc-Displays erlaub€n beispielsrweise
Zeichenzur Darst€llungvon Balken,
Animationen oder ähnlicheüSpielereien

siesollt€nein€nBlickäufdieWebseitezumBuchwerfenunter
h(p://ww.av.buch.de Dortfinden5ieletzteAnde.ungen und
akluelleUodates in diesem8uch.
zuden BeisDielen

5.2.1 BenötigtesMaterial
. ATmegaS,ATmega16,ÄTmega32,... le nach gew:ihltemMikocontroller müssen
Sieewntuell di€ Pin-Zuweisungenändem,bzw.die Schaltungetwasabändern
. HD44780kompatiblesLCD, I oder 2 Zeilen, 16 Z€ichen.

Hinweis: WennSiedasn/AvR-Boald besitzen,emPfehleich Ibnen dasm/AltR ICD


Ädd or,.Das folgendeB€ispielwurde mit dieserKombiration entwickeltund Iiü <-
tioniert ohne Änderungender Konfiguration dir&t am Board.

derHardware
5.2.2lnstandsetzung
FtlI diesesBeispielbenötigenSie €in LCD, das Sie über sechsLeitungenmit dem
Mikrocontro er verbindenmilssen.Vier diesff Leitunsendienender reinen Dat€n
üb€rtragung,zweiweitereder Steuerung.
(HD44780kompotibel)
5.2 DieLcD-Steuerung 753

PC6(/FESFD PCo(ADCo)
PC1(ADC1)
AGND PC2(ADC?)
ABEF PCA(ADC3)
AVCC PC4(ADC4/SDA)
PC5(ADCtSCL)
PB6(XTAL1/TOSC1)

PDO(RXD)
PB7(XTALZTOSC2)PDICXD)
PD2(NIO)
PD3(NT1)
PO4o(CtVTo)
PD5O1)
vcc PD6(AlNo)
PD7(AIN'

PBo{rcP)
PB1(@14)
oND PB2(SS/@1B)
P83([,1OSV@2)
PB4(MrSO)
P85(SCK)

derLcD-Steuerung
Abb.5.3:Schaltung

Abb. 5'3
Das Display selbstbenötigt natürlich auch eine Spannungsversorgung.
zei4 die genaueVerbindungderbeidenKomponenten.

5.2.3 Wiefunktioniertein LC-Display?


In den meistenFällenbestehtein LcD auseinemDisplayund einemLCD-Control-
ler. Der Controller dient hier als eine Art ,Betriebssystem"bzw. Steuerprogramm
fiir die Ausgabeauf dem Display.Er sagt dem Display,wann, wo und wie etwas
leuchten soll. Ihr Mikrocontroller schickt diesem LcD-Controller bestimmte
Befehle,die z. B. dasDisplayl<ischen,ein Zeichenausgebenusw
Glücklicherweisehat sich eineArt ,,QuaslStandard"im Bereichder LCD-Control-
ler etabliert. Da natürlich viele Anbieter ihre eigenenController auf den Markt
bringen wollten, blieb es nicht bei einem einheitlichen Standard.viele Anbieter
haben aber die einfacheVerwendung des Hitachi-HD44780-Controllerserkannt
und ihre Controller dazukompatibel entworfen.
In den meistenFällenwerden Sie auf Ihrem LCD also gar keinen echtenHitachi-
Chip finden, sondernlediglich einekompatibleAusflihrung. Dassollte aberkeinen
Unterschiedmachen,solangeer Ihre Befehlekorrekt ausftihrt.
i.'.: ''1.:
754 5 Aiwendungeä '.:::r,:l'1 .:,.i:i: :.: . ..

Die meistenDisplal.sbesitzenein oder zwei ZeileDmit 8 bis 16 darstellbärenZei-


chenpro Zeile.Essind hier llatürlich vieleVariantenerhäldich,die,je nachAnwen-
dung und Preis,ebensoverwendetwerdenkonnen.
Um z. B. erstmalig ein Zeichen darstellenzu können, ist folgendeVorgangsweise
erforderlich:
. 4 Bit Modus eins€halten(nicht unbedingt nötig, aberwn verwendendie 4-Bit-
Adressierungin unseremBeispiel,um Pins fiir eine eventüellspätereErweite-
rung zu sparenl
. Weitere Konflgurationseinstellüngenfesdegen (2-Zeilen-Modus einschalten,
sx8-Z€ichenmatri\...)
. rcD ausschaltenund löschen
. rcD wieder einschalten
. Zeichenan d€n Controler schicken
Sie müssenden Controller efst konligurieren, und können ihn dann im lauferden
Programmmit verschiedenenBefehleD(Ausgab€,Löschen,Cursor EirtAus, ...) v€r-
sorgen.
Hier eine Lrt ersicht der möglichen Befe e (Vgl. dazu: Riedel,Huwaldt l,etuheft
LCD Progrrmmierung, 5.Aufl. 2006):
. DisplayEin/Aus
. Displaylöschen
. Startmodus (EntyMode) setzen
. Konfrgurationfiir I oder 2 zeiligesDisplayund 5x8- oder 5xl0-Zeichenmatri{
. AdressedesZeichengeneratorRAM setzen
. AdressedesDisplayRAM setzen
. Cursorbzw DisplayaufAffangsposition zurückste[en
. Cursorod€I Displayverschieben
. Cursortunlcionen (Beispiel,,blinlen")

5.2.4 SendenvonDatenundBefehten
an dasLCD
Der LcD-Controller unterscheidetzwischenBerQ,Ue, und Dater. Vor jedem Lrber-
hagungsvorgangsollten Sie dem Controlls mitteilen, was er zu €rwärt€n hat. Dä
wir hier den 4-Bit-Modus verwenden,sind vier Datenleitungentur die Lrt ermitt
lung von Nutzdatenzuständigund zwei fü die Steüerungder Libermittlung. Diese
zweiL€itungenheißenl
o J EnableSignal(Higl = LCD stellt sich auf Empfangein)
. RS- cibt an, ob essich üm Daten (High) oder Befehl(Low) handelt.
755

Vor jedem Sendevorgang sollte man däher zuerstdie Rs-Leitungentsprechendset-


zen. wenn z. B. ein Befehl gesendetwerden soll, wird die Rs-Leitung auf low
gestellrund anschließendder Befehlübeminel
Die folgendenDiagrammezeigendie entsprechendenLeitungszustände:

Abb. 5.4: Befehlsenden.

abb.5.5:Däten
senden.

Alr den Diagrämmenerkenftn Sie auch die notwendigeZustandsänderungan der


A Leitüng.Wenn Sie dieseLeitung auf Htl und anschließendwieder auf ro set-
zen,übernimmt der LcD-Contloller die Daten,die nr dieserZeit an den Dätenlei
tungeradiegen.
AußerdemsehenSie: Da wir den 4 Bit Modüs verwenden,müssenwir zuerst das
obereNtüü/€(Ein Mrrle beschreibtdie oberenoder unteren 4-Bit einesI Bit-wer-
tes- 8 Bit = 2 Nibbles) und ans.hließenddasuntereNiüüle übermitteln.
lässtsich däherso zuiammenfässen:
Die Vorgangsweise
. RSaufrlCl od€Ilo setren(DatenoderBefeN)
. Die oberen4 Bit auf die vier Datenleitungenschreiben
. t Leitung kulz {etwa I Fs) aüf },1g}schalten,anschließendwieder zurück auf low.
756

. Die unter€n4-Bit auf die vier Dateileitungen schreibm.


..E-l€itungkuiz(etwalus)auf,riglschalten,anschließendwiederzurückauflo
.
ln der lolgendenTabelletindenSieälleBetehle{nur L€se7ugritr)
mit den entspre-
chendenParametern:

0 00 000001 Displaylöschen
00 00001x CulsorandenAnfangzüück
0 00 O O O 1 IDS CursorBewegungsrichtung
0 00 OOlDCB Cusor/Displayaus/an
0 00 0 I SCRLX x Cursor/Displaybewegen
0 00 1 DLN F Schnittstellengröße
0 0l AAAAAA Cursorim CGRAMplatzierer
0 AAAAAA CursoramDisplayplatzieren
I DD DDDDDD ZeichenamLCDausgeben

CursorBewegungsdchtungl
ID - u€nn gesetzqwird der Culsor mit iedemZeidrcn nach reclts bewegt
s - wenn gesetzt,bewegtsich dasDisplaymit jedem zeichen
Display/Cursoran oder ausund,,blinken":
D DisplayAn(lYAü (0)
c - cursor An ( l)/Aus (0)
B - cursor Blir:henAn ( I )/Aus (0)
Cursoi/Displaybewegen:
sc - Displaywird b€weslAn ( l yAus (0)
RL - Richtung:Redrts (l)/Link (0)
S€hnittstellengrößel
DL Da&nübertragung:8 Bit (1y4 Bit (0)
N-Anzal der Zeilen am I taDt I Zeile (o)12Zeilen (1)
F - zeichensröße5x10(r)/sx7 (0)
Cursorim CGRAM platzieren:

Zeichenam LCD ausgeben:


D - Daten
. 5.2 DieLcb-steueiünlj'(t1D4416o
konbdttbet) 757

desBeispiels
5.2.5 Funktionstest
Wichtig ist, dassIbft Hadlear€ einwandliei tunl'tioniert. Das können Sie am ein-
fachstentestenindem Sie die oben ,ngefühfie Schaltungaufbauenund anschlie-
ßenddasmitgelieferteHEX-FiIe h den Mikocontoller flashen.
wenn däsDisplay chts zeigt,gibt esnoch PloblenteInit der Hardwarc.Sobalddas
LCD wie g€wilnschttunkioniert, können Sie den Source-Codeselbsterweiternund
verihdem. sie finden dieseAnwendungauf der CD-ROM im Verzeichnis\Beispiele!
HeiloLCD.DasHEX-FiIefindenSieunter:\Beispiele\HellolcD\deflult\HelolcD.hex.
BeachtenSi€: Das Programm wrrde fit d€n ATmega8€Eeugt. Um es in €inem
nnderen Mikrocontroller laufen lassenzu können, müssenSie €s eventuell neu
kompilieren.
N$hdem sie dasHEX-I e erfolgreichin den Mit<rocontroler geflashthaben,soll-
ten Sieklar und deudich einen wechselndenTet auf dem LCD sehen.Ist dasnicht
der Fall, überprüfenSiefolg€ndePunlft:
. Läuft der Mikocontroller überhäupt? Sie können mit einem Voltmeter
rum'Ljndli,hl oder einemOszillo'kopdie cnderüngenan den Porrsme*en.
MessenSieden Zustandder t Leitury - ändert sich dort etwas?welln nicht, gibt
esunter UmständenPioblememit dem Mikocontroler.
. Stimmt die Spannungsversorgung Ihres LCD? SehenSie unbedingt ins Daten-
blatt (oft finden sich auch ausreichendeInformationen über Google)und verge-
wissernSiesich,dassa]IeSpannungen passen.
. Ist Ihr I-cD überhaupt HD447e'0'komparibel? lnforma.ionen daz1lfinden Si€im
Datenblattund via Google.Das ist vermudich der häuflgsteFehler.MancheDis-
play Controller sind zwar kompatibel, verlangenunter Umständenjedoch eine
indere Initiälisierung. WendenSie sich in dies€mFall bitte an dasForum unter
wwwavrbuch.de.Dort wird Ihnen in der Regelraschgeholfen.

5.2.6 Erktärungen
Die wichtigste diesesBeispielsist die 4 Bit Datenübertragung.Die
"Eigenheit"
Konfrgurationdes4 Bit-Modus finden Si€in der Funktion Ld-tflir0 DazulYird die
Datenleitung 5 (am LD) auf hrg, gesetzt,die Datenleitung4 muss den Zustand
lor haben.Diese Einstellungwird mit dem kuzen Toggelnder t-Leitung über-
nommen. Um nun einen vollen 8-Bit-Wert im 4 Bit-Überträgungsmoduszu über-
mitteln, geht mrn wie foigt vor:
. Zuerst dasLöherwertigeNibble auf die Datenleirungstelen
. Die t-Leitung kulz toggeln
158 5 Anwendungen

. Danndasniederwertice NibblcLlbertragen
. Die E Leitungwiederkulz toggeln

DasBeispielstelltIhnenvierpraktische
Funktionenzü Vertugung:
. void lcd init0
. void lcd-send(unsiCned chartFe, unsignedcharc)
. void lcd write(charat)
. void sekundc(chari)
Die lunktion sekunde etftlh eincn einfachen Zweck Sie u'artet eine
'lirkt
bestimmteAnzahl t an Sekunden.Wichtig datur ist die korrekte Angabeder
F-CPLD.
frequenzin einerder erste[Zeilü l#deJine
Die lunktion Ld-serd schickt entwederDatcn (type=DATEN) oder einen Befehl
(type=BIFEHL). WenDSie,isobestimmteMöglichl{eiten desLcD-Controll€rs ver
wendenmöchten,könncn Sie diese!'unktioD zur Ubermittlung der Parameterver-
ivenden.Ein Beispielda,u fiDdenSieim Hruptprogramm:
1: l c d - s e n d ( B E F ELH
cDLc, L E A R
i )

geschickt.
Eswird damitderBefehlzum LöschendesBildschirms
Um überhauptauf dem LCD Datenausgeben zu können,müssenSie zuerctdie
FunktioDl.d-trtfa) nuftufen.Hier könDtenAnpassungen notwendigsein,urenn Ihr
Controler nicht korrekt iDitiälisiert $,ird. Viele ,,kompatible"Contro er arbeitenin
etwasandersalsin diesemBcispiel.SehenS;edazubitte
der IDitialisierungsrcütine
iD dasentsprec.hendeDatenblatt.
Der Funktion lcd w/tre köDnenSieeinebeliebigeZeichenketteübergeben,um diese
auf demLCD anzuzeigen. AchtenSiedabeijedochäuf die Zeichenlänge IhresDis-
plays.Es emplichlt sich aul|erden, r-orjeder AusgabedasDisplay zu löschen.

5.2.7 Erweiterungsmögtichkeiten
DiesesBeispielbietet zahlreicheMöglichkeiten ,xr ENeiterung der Steüerhrnktio'
Den.Die meistenLcD-ControllererlaubendasAjzeigenbenutzerdefitiefter Zei-
chen, wonnt sich z. B. eine Balkennnzeige(siehe dazu: Riedel,Huwaldt: Lehrh€ft
LCD ProgrammieruDg, s. Aufl. 2006),ähnlichenremSpektrumanalyser auf den
meistenStereo.nlagcndisplays, enF{ickelnlässt.
: l:' .: ' :.::::'..:5.3;EiP.R0lr.
759

5.3 EEPROM
Iinmer wieder werden Sie im RahmenIhrer Prcjeke an die Grenzendesinternen
AVR-EEPROMstoßen.Abhilfe bietet ein erten zuges€haltetes EEPROM Am häu
figstenwerden hier Varianten bzw. kompatible VersionendesAT24Cro(-EEPROM

Die Ansteuermg ist im Prinzip sehr einfachund ehmal tunktionierendeRoutin€n


können späterwieder verwendetwerden.

siesollteneinenBlickaufdieWebs€itezum Euchwefen ünten


htrp:/wwwävrbu<h.d€ - Dort finden sie l€t2teAnderungenl]nd
aktuelleUDdateszu in diesem8uch.
den Beispielen

5.3.1 Benötigtes
Material
. ATmega8,ATmegal6,ATmega32,... Ie nach gewähltemMikocontolls müssen
Sieeventuelldie Pin-Zuweisungenändernbzw.die Schaltungetwasab;ildern
. AT2acu-kompatibles EEPROM

Hinweis: wenn Sie das rn1,4l/Ä-Boardb€sirz€n,möchte ich Ihnen das /rr,ÄIlÄ


EEPROMAdd on empfehlen.Das folg€ndeBeispielwurde mit dieserKombination
entwi€keltund firnktioniert düekt ohne Andelungend€r Konfiguration äm Board.

derHardware
5.3.2Instandsetzung
Das EEPROMwird über zwei kitungen mit dem AvR-Controller verbunden.Sie
sehenanhandvon Abb. 5.6,wie einfachsich eine solcheErweiterunggestaltet.
HabenSiedie Hardwareerfolgreichaufgebaut,jst esZ€it tur einenFunltionst€st

desBeispiets
5.3,3Funktionstest
. Sieverbindenden PC mit dem fertig geflashtenMikrocontroller über die sedelle
Schnittstell€.
. Mit jedem R€set€rhöht der Mikocontroller einen wert den €I im EEPROM
gespeicherthijlt.
PCo(/RESET) PCo(ADCo)
PC1(AOCI)
AGND PC2(AOC2)
AREF PC3(ADC3)
AV@ PC4(AOC4/SDA)
PC5(ADCs/SCL)

PB6(XIAL1fiOSCl)

PB7(XTALZTOSC2) PDO{RXD)
PD1(IXD)
Pm(Nro)
PD3(NT1)
vcc PDl(xcKlro)
PD5(r1)
PD6(ArN0)
GND PD7(ArNl)

^ PBO{ICP!
Armega ö PB.t(OClAi
PB2(SS/OCIB)
P83(MOStioca
PB4(MrSO)
PB5(SClg

einesEEPROMS
Abb.5.6:Beschaltung

r Nachdernder Mikrocontroller dasProgrammgestartethat' gibt er den akuellen


Inhalt desEEPROM-Wertsauf die serielleSc.hnittstelleaus.
o Somit sehenSiemit jedem Reseteineum eineEinheit erhöhteZahl.

Laden Sie dazu die ensprechendeHEX-Datei in den Mikrocontroller: \Beispie-


le\EEPROM\defauldEEPROM.hex. Den Quellcodedazu finden Sieunter \Beispie-
le\EEPROM\.
Actrtung: Sollten Sie keinen ÄImegaS verwenden,denl<enSie bitte daran, den
Quellcodedirelt im AVR-Studiozu öftien, um ihn dort neu ftir Ihr Chipmodell zu
kompilieren.
NachdemSie die HEX-Datei geflashthaben, sollte nach einem Resetbereits die
ersteZahl am Mikrocontroller erscheinen.Das ist oft ein zuQilligerWer! je nach-
dem,wasvorher in Ihrem EEPROMgespeichertwar.AnsonstensehenSie die Zahl
.1.Wenn Sie nun einen Resetam Mikrocontroller durchftihren, sollte direk darauf
die Zahl2 folgen.War vorher schonein andererWert im EEPROMgespeichert,hat
sich dieseZahl nun um eineEinheit erhöht.
5.3 EEPRoM 767

Trift dasbeschriebene V€rhaltendcht auf Ihr Systemzu?Dnnn hat sich vermutlich


L$erprüfen SiefolgendePünkte:
ein Iehler eingeschlichen.
. Haben Sie das HEX Fite in €inen ATmega8geflasht?Wenn Sie einen anderen
Milrocontroller verwendethaben,mtlsseDsie den Quellcodetur diesesBeisPiel
im AvR-studio öffnen und nir Ihr Chipmodell neu kompilieren. Erst dann kön-
nen Siedasneue(!) HEX-Fileir denControllertushen.AchtenSiedaräuf'dass
Sieauch wirklich diesesneueFile programmierenund nicht die EiDstellungvon
e,nemf.u}erenProjetrübcrnommen hdben
. Haben Sie das EEPROMmit alen nötigen Leitungenversor$? Uberprüfen Sie
die Schaltungnoch einmäl mit Ihrem Autuau
. Läuft Ihr Mikocontroller überhaupt?Wenn Sie ein Oszitloskophaben' versu
chensie den Takt zu messen.Schwingtder Controller?wenn Sie einen,4TnagdS
veffenden, könnte es hier auch Probleme mit dem Auslieferungszustandder
Fuse-Bitsgeben.BeachtenSiedazudasentsprechende Kapitell
. KeineLösuDgin Sicht?VersuchenSieesäufuw.avrbuch de.

5.3,4Erktärungen
Der wesentlicheTeil dies€sBeispielsfindet sich in der Indude'Datei A724Ch. Sie
könn€n dieseDntei in all Ihen Projektenveffenden und habeDdamit automatisch
volen Support tur AT24C$ kompatible EEPROM-Bausteine.
Achtung: Diese Roütinen wurd€n so programmiert, dassvorerst nur eir einziges
EEPROM im S)'stemunterstützt wird. Sie 6nden däzll in den ersten Zeilen der
Date\AT24C.hein#defnemit dem NamenÄ?24Ädd,'.Essolltefiir den fortgeschrit
tenen Programmiererkein Problem sein, dieseDatei Rir die Anbindung mehrerer,
EEPROM-Chips
gleichzeitig.ngeschlossener anzupassen.

Dieselnclude-Dateistellt Ihnen nn wesendichendrei Funktionenzur Veifilgung:


. void initAT24o
. charAT24writeByte(unsignedint dataaddress'char data);
. charAT24ReadB)'te(unsigned
intdatanddress)i

Die AnwendungdieserFunttionen sollte klar sein.wichtig ist, dassSie zu Beginn


unbedhgt einmal die lunktion ts,r'1T2a0 auFufen.Anschließendkönnen sie mit
lif24writeByte ein beliebiges Byte an eine bestimmte SPeicheradresse in das
EEPROMschreiben.
DieseSpeicLeradresseist in den meist€n Fällen ein 16 Bit-wert, also ein Lteger'
Andich verhält sichÄT2aReddBr"eHier übergebenSiejedoch Dü die gewünschte
und die Funktion gibt Ihnen dasdort gespeicherte
Leseadresse q'te wieder zurück'
762 5 Anwendungen

Däs Beispielselbstenthillt außerdemnoch €inige Routinen zur Kommunikätion


über die seielle schnitrrtelle. EntsprechendeErläuterungendazu finden si€ einige
Seitenvorhs anhandder Erklärung desRs232-Beispiels

5,4 A/D-Wandler
DiesesBeispielwurde bewusstsehr einfach gehalten,um Ihnen eine brauchbare
Gundlase für spätereProjektezul Vefügung zu stellen.Für den Aufbau benötigen
Sieeisendichnur Ihr EDtwicklungsboardund ein Potenziometer.

5iesollteneinenBlickaufdieWebseitezumEuchwelfenunter:
httpt/ww..v.brchde- Doltfinden5ielelzteAnderungen Lrnd
aktueileUpdateszuden Beispielen
in die5emBuch.

5,4.1 BenötigtesMaterial
. ÄTmegä8,-{Tmegar6,ATmegä32,... le nach gewähltemMihocontroller müssen
. irdr$ttllg'f3#hskrya'€"q.1ut
*f"t**unFrtwäs€bändern
o SeriellesKabel
. PC nit zwei seriellenSchnittstellen(bei Verwendungvon STK500)
. Terminalprocrämm,4vR ?e/'ni'ral(aufbeigelegler
CD)
. Potenziometer (ca.47k)

der Hardware
5.4.2 lnstandsetzung
Solten Sieein EDtwicklungsboardverwenden,brauchenSienur die serielleSchnitt-
stellemit dem PC zu verbinden und an PORTC0 (beirn -ATmegas)den Schleifer
desPotenziometers anzüschließen.DasPotenziometer
versorgen Siemit +5 V

SolttenSieeinen fliegendenAufbau (ohne Entwicldungsboard)verwenden,benöti-


gen Sieaußerdem Potenziometer noch ehen MAX232mit einer RS232-Büchse
Diesermöglicht die Kommunikätion mit dempC.
763

PC6(/RESET) PCo(ADCo)
AVcc PCI(ADCD
AOND PC2(ADC2)
AREF PC3(ADCA)
PC4(ADC4/SDA)
PCs(ADC5/SCL)
PB6(XTALT/TO€C1)

PDO(FXD)
PBTCXTAL2/rOSC2) PD1([XO)
P02(NTo)
PD3(NT1)
PD4(XCK/ro)
PD5Ot
Vcc PD6(AINO)
PD7(ArN1)

ATmegaI pri,iöiii
GND PB2(SS/OC1B)
PB3(MG9r'OC2)
PB4(MISO)
P95(SCK)
5.7:DieSchaltung.

desBeispiels
5.4.3Funktionstest
o Sieverbindenden PC mit dem fertig geflashtenMikrocontroller über die serielle
o Schnitt$elle.
Startensle das Ierrmnal Yrogramm (,t\vK- retrmnarr.
. Die Baudratebeträgt 9.600Baud,8Nl (Standardeinstellung).
o NachdemResetsolltesichder Mikrocontroller bereitsirn Terminalfenstermelden.
o Siewerdenvermutlich einen flackerndenCursorbernerken.Dieserkümmert sich
darum, dass immer die akuell am analogen Eingang SemesseneSpannung
(PORIC.Obeim ÄTmega8,bzw.ADC0) im Wertebereichvon 0 bis 255 angezeigt
wird.
. +5 V entsprechendabeidem Wert 255.
o o V werdenmit der Zahl 0 dargestellt.Die ganzeSpannungfällt dabeiam Poten-
ziometerab.
LadenSie dazu die entsprechendeHEX-Datei in den Mikocontroller: \Beispiele\
EasyADc\default\EasyADC.hexDen Quellcode dazu finden Sie unter \Beispiele\
EasvADC\.
Aclrtung: Sollten Sie keinen ATmegaSverwenden,denken Sie bitte daran, den
Quellcodedirekt im A\rR-Studiozu öfftren,um ihn dort ftiLrIhr Chipmodell neu zu
kompilieren.
764 5 Anwendungen

5.4.4 Erktärungen
Bei der VerwendungdesA./D-wandlerskann man auseiner Vielzahlve$chiedener
UmsetzmgsmöglichlGitenwahlen. DiesesBeispielbäsiert aüf einer Benachrichti-
gung über eineabgeschlossene
A./D-Wändlungmittels Interrupt.
Außerdemwird der FreeRunning Mode verwendet,der laüfend neue werte vom
Analogeingangliefe( Die Konvedierung findet mit eirer Frequenzvon CLK/2
stntt, alsodem halb€nSystemtakt.
Obwohl der ADC einen 10-Bit wen liefern kann, schränkenwir uns in diesemBei-
spielauf 8 Bit €in. Die Ergebnissesind trotzdem noch hi eichendgenau.
Wichtig ftlr diesesBeispi€list der Befehlset0. Er erlaubt dem MikrocontrcIer, a]]e
Interrupts ,durchzulassen".DieseEiDstellunsist hier notwendig,da wir im Beispiel
einen Interrupt verwendenünd im Normalzustanddie Benachdchtigungenausge
schrltetsind.
SolltedasBeispielnicht wie erwartetturktionieren, habenSieunter Umstlindendns
Potenziom€terfalsch angeschlossen. Wenn Sie aber im Terminat aüch keine wi[-
kommensnachrichtempfangen,liegtdasProbleman der serieilenVerbindung.Ach
ten Sie darauf,dasslhl Entwicklungsboardfruktioniert (beim myAVR-LPT-Board
so[te hier die 9 V Batteriean VCC angeschlossen werden) und versuchenSieunter
Umständenerst,die sedelleSchnittstellemit einemeinfachenBeispielzu testen.

5.5 GPSWay-Tracker
DiesesProjekt ist dasünfangreichsteder in diesemBuch vorgestelltenBeispiele.Es
handelt sich um die Ansteuerungeines GPSEmpfiingers(oft auch: ,,GPS-Maus"
genannt),die VerarbeituDg der GPS'Dntenund der Speicherung dieserDat€nin
einem EEPROM.
Außerdem finden Sie auf der beigelegtenCD eine windows-Applikation (mit
Soürce-Code)zur KonrmunilGtion mit dem Mikocontroller. Damjt können Siedie
gespeicherteD
GPSDatenvom Gerätauf den PC übertfagen,nm Gerätlöschenund
Ihren cPS Pfad mithilfe von coogle Earrh (kostenloserDownload der aktuellen
Ve$ionunter:http://earth.google.cort)
anzeigen lassen.

zumBuchwerfen!nter:
SiesoliteneinenBlickalfdiewebseite
http:l/w$w..vrbu.h-de- DortfindensieletteAnd€rungenund
aktuelleUodateszudenBeisDielenindiesemBuch.
Material
5.5.1 Benötigtes
. ATmegaS, ATmega32,. . JenachMikocontroller müssenSieeventuell
ATmega16,
abändern'
etwas
schartuns
*f fi eklf$gf "3,i*[tb?tdit
Einen Schalter,ein€DTasterund eineLED
GPSMäus mit einer Rs232-schnittstele(NMEA-komPatibel- die meistenGPS
GeräteunterstützendiesesDatenformat)
Eventuelleinetranspotiihige Stomveßorgung (Atl(u' Batterien,etc.)

derHardware
5.5.2Instandsetzung
Der Entwicklungsaufi{andin Bezugauf die Schattungist ftt diesesProjekt r€lativ
geing. Sienüssen lediglich dasEEPROMmit dem Mikrccontroller verbinder (wie
esir einem fitiheren Beispielbereitserklitt lYurde) und die Rs232-SchDittstelein
die Schaltung aufnehmen. Das GPS Gerät können Sie dnnn direkt an dieser
Schnittstelleanstecken.
Vertugt die GPS-Mausüber keine eigeneStromversorgung,müssenSie hier unter
Umständenein wenig imProvisier€nund die nörige Spannungüber eine Batterie

Siebenötigentur denAufbau folgendeKomponenteni


. Cl 100n
. C2 10p
. c3 10p
. C4 10F
. C5 10p
. C6 l00n
. ICI MEGASP
. TC2 AT24CP
. ICa MAX232
. Rr 4k7
. R2 4k7
. R3 330R
Haben Siedie Hardwareefolgreich aufgebaut,ist esZ€it tur einenFunlcionstest'
166

r j ?
- 55=ä
YHErc
{Ee id6 9 I Hc
9u e ;rssFF'EF

E.l 6 g

aI

agäga$
868888
aEEeSS
pp I

!E
c E
=
(9
f
F
t

E !o

a

desBeispiets
5.5.3Funktionstest
Nachdemdie Hardwarefertig aufgebautist, flashenSiebitte die folgendeHEx-Dat€i
in den Mikocontrcler: \Beispiele\GPswayTracke!\default\GPswa/Iiacker.hex
Achtung! Solten Sie keinen ATmega8verwenden,müssenSie das Beispieltur Ihr
Modell neu kompilieren. Den Souce Codefinden Sieebenfalisim oben genrnnten

Nun haben Sie atle Vorbereitungentur den Fültionst€st abgeschloss€n.Um die


Funkionstüchtiglcit desGedts zu testen,müssen Siezwei Dinge überprüfen: ers-
tensdie Kommunikation mit dem PC:
. Verbhden Sieden PC mit dem fertig geflashtenMikrocontroler über die serielle
Schnittstelle.
. Nachdemder Mikrocontroller dasPiogramm gestartethat, gibt er die kuze Sta-
tusmeldungGPs wdl-?iacter auf die serielleSchnittstelleaus
. TestenSie dies mit eirem Terrninalpro$amm Sie finden äuf der CD eine Soft
waremit dem Namen,414 Termntal Dieseeignetsich sehrgut ftir d€n Test.Ach-
ten Siehierbei unbedingt auf die Lrbertiagüngsparameter:
- Baudrate4.800
- No Parity
r Stopbit
- 8 Datenbit

wenn Siedie oben genannteAusgabesehen,tunktioni€ren der Mikocontroller und


die seiiele Kommunikation mit dem PC.
Äls ZweitesmüssenSiedie Kommunikation mit dem GPS-Gerättesten:
. VerbindenSiedasGPS-Gerätüber die sedele Schnittstelemit dem PC.
. Starten Sie ein Terminalprogramm und verrvendenSie die oben genannten
ÜbertragungsparameterAclten Siedabeivor allem auf die Baudratevon 4.800.
. Sollte das GPS Gerät eine Spannmgsversorgungbenötigen' schließenSi€ diese
bitte j€tzt an, um dasGPS-Gerätzu akivieren
. Nach eidgen Sekundensollten Sielaüfend neueDaten vom GPS Gerät empfan
genund im Terminalfensterangezeigtb€kommen
Ist däsnicht der Fall, überprüfen Sie bitte das BenutzerhandbuchdesGPS-Geräts
auf eineabwei€h€ndeBaudrate.Die meistenGeräteverwendenjedoch die Bäudrrte
4.800alsStandardeinstdlung.
haben,isr dasSystembereit zur
wenn Sienun beideTestserfolgreichabgeschlossen
168 5 Anwendungen

5.5.4 Funktionsweise
Der GPSWay-Trackerspeichertin bestimmtenAbst?indenlhre akruellenKoordinn-
ten in einem EIPROM. Sie können dnbei zwischeneinem automatischenund
einem manuelen Modus wählen.Der automarischeModus speichertdie aktuellen
Koordinatenetwaall€ 30 Sekunden.Der mänuelleModus speichertdiesenur dann,
wenn Sie eine bestimmteTastebetätigen.Ie nach veMendetemEEPROMkönnen
Sie mehr oder weniger weg?unkte hintereinänder speichern.Diese wegpunkte
können Sieanschließendauf den PC übertragenünd mithilfe dei beeindruckenden
SoftwareGoogldAalth darstellenlassen.
DiesesGerät eisnet sich dadurchIiir eine Reihevon Anwendungen.Beispieledafiir
wären: Wanderausflüge,Radtourer, Zustelldiensteusw. Durch Anbindung eines
GSM Modemskönnten SiedieseDaten auchnoch über eineMobiltunkverbiidung
überträgenund somit Ihr Auto vor Diebstählbzw. vor dem ,,Verschwinden"schr.it-

5 . 5 . 5B e d i e n u n g
An Port B, Pin 0 befindet sich ein Schalter.Mit diesemkönnen Sie zwischendem
automatischenund dem mrnuellen Modus w:ihlen. Achtung: Sollten Sie den
Modus ändern,müssenSie,um die Änderung z1lübernehmen,dasceräi neu star-

HabenSiesich tur den manuelen Modus entschieden,können Siemit der Tastean


Port B, Pin I die SpeicherungdesaktuellenOrtesdurchtuhren.
An Port B, Pin 2 finden Sie eine Status-LED,die beim Einschaltenkurz blinkt um
die Funltionsbereitschaft zu signalisieren.Nach einigen Sekunder (mit einem
angeschlossenen und aktivierten GPS-Gerät)beginnt die LED im automatischen
Modus in gewissen Abständenkurz zu blinken. Dies signilisiefi die erfolgreiche
Speicherungder aktuelen Koordinaten.
Um die gespeichertenDaten nun auf den PC zu übertragen,müssenSie das cPS
Gerät von der serielen Schnittstelledes Mikrocontrollers ir€nn€n und diesemit
dem PC verbillden. VerwendenSie zur tßertragung der cPS Daten die €ntspre,
chendeKontrolsoftware, die in dem Verzeichnis\Software\cPswayTrackerKon
trolzentrale zu finden ist.
Wichtig: SchaltenSievor dgn Start der Softwareden cPS Way-Trackeraus.Nach
den Siedie Kontrollzentralegestartethnben,müssenSienoch denjeweiligenKom-
munikationspoft(COMI, COM2,COM3,...) fesdegen und ansclließendie Taste
,,Verbinden..." betätigen.letzt wartet die Softwareauf den Mikrocontroler.
769

Zu diesemZeitpunlt können Sie den GPSway-Trackereinschälten Er wird sich


mit einer kurzen Statusnachrichtbei der Kontrolzentral€ melden Sie sollten die
KommunilGtion in der windows Softwäreverfolgenkönnen.
Anscbli€ßendsteh€nIhnen drei Möglichlciten zü Verfiigung:
. Datenvom GPSWay-Tra&er übertr€en
. Datenam GPSWay-Trackerlöschen
. GPSWay Trackerneu stärt€n
WennSiedie Datenvom Geräiauf den PC überträgen'werdendieseim Klft-Ionnat
gespeiched.Dieseslormat wird von GoogleEarth unterstützt und erlaubt die Spei
cherungund ÄnzeigeeiüesgeografischenKoordhatenpfads Sie solten zu diesen
Zeitpunkt die SoftwareGoogleEarth bereitsinstaliert häben,denn die Kontloilzen-
trale bietet Ihnen nun den automatischenStart von GoogleEa(h an. Wenn Siedies
bestätigen,werdenlhre Wegloordinatenin GoogleEarthgeöffnetund dargestelt
wichtig: Da der GPSway-Trackernicht über eine SPeicheikarte'sondernlediglich
über ein BEPROMv€rtugt, können Sie nul €ine begenzt€ Menge.n Wegpunkten
speichern.Sie sollten also nach jeder iJbertragnng auf den PC die Daten 'm GPS
way-Trackerwieder löschen,um dort Platz ftiI neueDatenzu schafien'

5.6 Klingetton
Di€seAnwendung scheht auf den erstenBli.k w€nig relevant ftir "professioDelle
Projekte",spielt siedoch lediglich ein paar Töne ab. In Wirklichkeit versteckensi€h
hinter diesemscheinbd lustigenProjekt einigesehrinteressanteRoutinenl
. Lesenvon RTTTl-kompatiblen tungtonesbzw.Melodien. DiesesFormat ist bzw
war einmal in den meistenMobiltelefonender Standaidtur die Speicherungvon
Klingeltönen.
. ErzeugungexakterRechteckignal€mit Frequenzenim Bereichvon etwä I00 bis
5.000Hz.
. AnschaütichesBeispiel fiir die Verwendung des Waveform-Generation-Modes
am 16-Bit'Timer.
. Ein paar Dette Denkau{gaben(Notenl?ingenberechnung, BPM, Takt' Oktaven
urd Tonleiter,...) ftil den Musiktiebhaber'

SiesollteneinenElickaufdieWebseitezum Buchwer,enunter:
http:/ trw.ävrbu.h.d€' Don findensieleizieAnderungenund
aktuell€Updateszuden Beispielenin diesemEuch
770 5 Anwendungen

5.6.1 Benötigtes
Material
. ATmega8,.{Tmegal6, NImega32, ...1enachMikrocontrollermüssenSieeventuell
die Pinbelegungändernbzw.die Schaltungetwasabändern.
o Ein KoplhöreroderLautsprecher.
o Die aktuellsteVersion von WINAVR (bzw. AVRGCC,dem C-Compiler ftir das
AVR-Studio).
AchtenSiebitte besondersftir dieseAnwendungdarauf,wirklich die aktuellsteVer-
sion von WINAVR zu installieren.Sie finden auf der beiliegendenCD eine ausrei-
chend neueVersion.Wird das Beispielmit einer ?ilterenMNAVR-Version kompi
liert, liefert der Lautsprecherin manchen Fällen nur selßame Geräuschebzw.
stimmt die Dauer der delay-Fnktionen plötzlich nicht mehr. Dieser Fehler tritt
jedoch nur in manchenSystemenauf. Aus diesemGrund sollten Sie hier auf jeden
Fall die aktuellsteVersioninstallierel.

5.6.2 Instandsetzung
der Hardware
Haben Sie die Hardware erfolgreich aufgebaut, ist es Zeit ftir einen Funkionstest.

MEGAS-P

PC6(RESET) PCo(ADCo)
PC1(ADCI
)
AGND PC2(ADC2)
AREF PC3(ADC3)
AVCC PC4(ADC4/SDA)
PC5(ADC5/SCL)

P86(XTAL1/TOSC1)

PB7(XTAL2/TOSC2)PDo(RXD)
PDl CD(D)
PD2flNT0)
PD3(tNTl)
vcc PD4(xcK/To)
PDsOl)
PD6(ArN0)
GND PD7(A|N1)

^|,,,Ega o PB1(OC1A)
P82(SS/OC1B)
P83(trOSyOC2) ?
PB4(rVtSO) 1
PBs(SCK)

Abb.5.9:DieSchaltung
desTonerzeugers.
5 6 Klingelton 777

desBeispiets
5.6.3Funktionstest
Na.hdem die Hardware fertig aufgebaütist, llashen Sie bitte die folgende HEX-
Datei in den Mikocontroler \Beispiele\Klingelton\default\Klingeltonhex
Achtung: Sollten Sie keinen ÄTmegagverwenden,müss€nSie das Beispieltur Ihr
Modell neu kompilieren. Den SourceCode6nden SieebenfäIsim oben genannten

Nach dem Flashen sotlt€n Sie (wenn der LautsPrecherkorrek angeschlossen


wurde) bereitseineMelodie hören.Ist dasnicht der Fa[, können SiefolgendeListe

. Sie benötigentur dies€sBeispieleinen erlemen Quarz mit 3.686MHz (ist mit


diesemWert auf dem myA\R-Board und dem STK500zu finden). HabenSieden
Mikocontroller vielleicht noch nicht tur die VerwendungeinesexternenQuar
zesalsTaktgeberkonfiguriert?Siehedazu dasKapitel zu denAVR luse-Bits. Soll-
ten Sie einen anderenQuarz vemenden wollen, müssenSie die entsPrechende
rreqüenz im Quelicod€dieserAnwendung,npassen.
. HabenSievieleicht einen zu großenLautsprecherverwendet?Der ÄVR liefert in
diesenrFaI die nötige Spannungund kann unter Umständenbei zu großem
Leistrmgsbedafnicht mithalten. V€rsüchenSieesmal mit ehem einfachen'klei-
nen Koplhörer.

Version
5.6.4,,Abgespeckte"
. Die hier vorgestellteVersion des Klingeltonspielersist sehr umfangreich pro
granrmiert. Dies deshalb,weil das Parsen,dso das stückweiseVerarbeitendes
Klhgeltonformaß eniges anProgrammierarbeitbeänsprucht.Unter Umstünden
interessiertSiediesesRTTTL Format gar nicht, dann können Siegerneauch fol
gendeÄpplikationt€sten:\Beispiele\Sound\default\Sound hex

Eshandelt sich hierbei um eine einlächereVe ion. In dieserwurde auf dasAbspie-


len desRTTTL-Formatsverzichtet Hier linden Siehaüptsächlichdie Routinenzum
Ez€ugen ünd Ausgebeneher beliebigenFreqüenz(über die Verwendungdes 16
Bit Timers).

5,6.5Erklärungen
Wil widmen uns hier wenigerdem Aufbau desRTTTL-Formats'sondernmehr der
eigendichenKlängerzeugung.Sollten Sie jedoch speziellam RTTTL-Format mte
ressiertsein, fitrden Sie auf jeden Fall einigesim Intemet unter http:// de wikipe-
dia.org/wikvRTTTl dazu.
Zu Beginn des Quelltextesfinden Sie ein paar Beispielmelodien.Eine tpische
Melodiek nn et!{a so auss€henr Thesimpsonsrd=4,o=5,b=160:c.6,e6,1+6,8a6
e6,c6,8a,8f#,8f#,8f#,29,8p,8p,8f#,8f#,8f#,89,a#.,8c6,8c6,8c6,c6
Zum Glück müssenSiediesekrptischen ZeicheDlcttennicht selbstschreibeD,son
dem können daar aus den zahlreichenAngebotenverschiedensterInternetseiten
wählen.SolcheMelodien tuden Siez. B. unter httpr//nokiatone.ifranc€.com/nokia-
tone/ltttihtm oder auch http://w.2thumbswap.com/members/tones/nokiä/
tones_nokia_main.htrnl.Um einen Sory in dasBeispielzu übern€hmen,kommen-
tieren Sie am bestendie äktuell verwendete.lar rorgll-Variable au-!und eüeugen
selbsteineneueKopie davon.
wichtigr Eskänn dabeinatürlich immer nur einesoflg-Vadableaktiv sein,die ande-
reDmüssenSieauskommentieren.
Die eigendicheMagiedieses passiertin der lunktion fono. Dieserüberge
Beispiels
ben Sieeire gewünschteIrequenz und die SpieldauerdieserFr€quenz(in ms). Der
Ton selbstwnd über den 16 Bit-Timer erzeugt.Dieserarbeitet mit folgendeDEin-
steltlllgen:

. CTC-Mode(ClearTimer on CompareMatch)
. Compare-Mode: Zählenbiszu einembestimmten wert
. Z;ihlftequenz:I_CPU, llso der Timer zählt im Systemtakt
. TogCleon CompareMatch^VaveformG€neralionMode Der 16-Bit-Timer
ändet bei einemCompareMatchden Zustandan Port OCr A (beimATmegaS:
Port B, Pin 1). Somit wird automatisch€in sehrschönesRechtecksignal
erz€ugt
Die Funktion plarlNoteo übernimmt die musikalischenBerechnungen.Darunter ist
die B€rechnungder Notenlängen(Viertelnote,Halbnoten,...) relativ zu einemvor
gegebenenTal(t (BPM) enthalten.Darüber hiraus wird hier auch die gewünschte
Oktaveaus den Grundnoten (Oktaves) berechnet.Sind die gewünschteIrequenz
und Dauer bestimmt, wird die Funktion ror0 zul Erzeugulg diesesToüs äufgeru-
fen.
Die Funldon plalsorgo kümmert sich um das Interpretieren eines Songs im
RTTTL Format. Die berechnetenNoten werden dann an die Funkion plal,Nofe0
übergeben.

5.7 Frequenzzähler
wenn Siekeir Osziloskopbesitzen,bzw.auchkein€n Frequenzz?ihlsim Rep€rtoire
haben,dannkönnenSiemit diesemProjektIhre werkstattum ejn einfaches, aber
wichtigesWerkz€ugbereich€m.DieseVariante kommt mit sehr wedg Hardware
ausund ist d.her schn€Ilaufg€baüt.Bsbiet€nsich zahlreicheErweiterungsmöglich-
keiten,diesesBeispielsoll nur eineeinfacheGrundversiondarstellen.
DieserFrequenzzählsarbeitetmit TTL Pegeln,im Idealfall messenSie daher etwa
5v/0v-Zustinde. ÄchtenSieauf die Vermeidungvon Lrberspannungenan den Mess-
leitungen,da in diesereinfachenSchattungkein Schutzdagegenehg€bautwurde.
Der messbareFrequenzbereichist hier zum Großteil direk vom Betriebstakt
äbhängig.Mit einem höher getaktetenQuarz können SiediesenBereicherw€item.
Mit dem STK500(bzw dem myAVRBoard) können Siein der Äusgangskonfigura-
tion (3,686MHz Quarz) etwä iD einem Frequenzb€reich von I Hz bis I MHz mes-
sen.Mit einem 16 MHz- Quarz en^'eiten Sie den Bereichnäch oben hin bis etwa
4 MHz.

sietollteneinenElickaufdi€Webseite zumBuchv/efen unter:


htipJ/wwävrbu.h-d. - Dortfindensie letzteAnderungen und
aktuelleUodäreszu in d'esem8uch,
den Beispielen

5.7,1 Benötigtes
Materiat
Wie eingangsbereitserwähnt,bietet diesesB€ispieleinigeMögli€bkeitenzul einfa-
chen Erweit€rungdes lunktionsumfangs. Auf der CD inden Si€ daner zwei v€r
schiedeneVersionen diesesBeispiels:
1. Version:LcD-Anzeige
2. Version:Äusgabeam seiel€n Port
Siebenötigenje nachVefsion:
. Die Grundbeschaltungeires -dTmegaS
. Optional: HD44780kompatiblesrcD, 1 oder 2 Zeilen, 16Zei€h€n.
. OptionalRS232Grundschattung (mit MAx232)

derVarianten
5.7.2Überblick
Unabhängigdavon,ob Sie di€ serielleSchnittst€lleoder die rcD-Anzeige als Aus
gabeveffenden, sollten Sie nach dem EinschaltendesProjektsauf i€d€n Frll ehen
Te\1am Ausgabegerätsehen.Direk nach dem Einschaltenbeginnt der Fr€quenz
zählermit der Messungund zeigtfortlaufend die aktuel gemessene Frequenz,n
774 5 Anwendungen

Hier sehenSiedie Schaltungmit der LCD-Anzeige:

P@IRESET) Poo(aoco)
Pcr(aDcl)
AGNO PC2(ADCz)
ABEF PCA(ADCA
AV@ PC4(ADC4/SDA)
Pcs(aDc56cl)

PDO(FXD)
PBTETAe/rO6C2) POIOXD)
PDzONTO)
P0s0NTt
PD4ECK,'ro)
PosnD
PD6(ANO)
PD7(AN1)
P300CP)
Ä | IrEga e PB1(OC1A)
PB2(ss/oc1B)
PB3(MOS|/OC2)
PB4(MSO)
PB5(sc4
9
GND

mitLCD
Abb.5.10:Frequenzzähler

Bei dieserSchaltungergibt sichein Problemmit der doppeltenBelegungvon Pin 5 /


Port D. DieserPin wird einerseitsauch genannt,dient damit alsodem Messen
"T1"
der Eingangsfiequenz. Ardererseitssind die vier DatenleitungendesLCDs mit Port
D Pin 4 bis Pin 7 verbunden.Dahermussbei der Programmierung zu jedemZeit-
punkt auf die richtige Datenrichtung geachtet werden.Wird das LCD angespro-
chen, dann muss Pin 5 auf Ausganggeschaltenwerden.Vor jedem Messvorgang
wird dieserPin dann wieder auf Eingangumgeschaltet.So kann der Pin hier dop-
pelt verwendetwerden.BeachtenSiejedoch:DieseAnwendungist nicht unbedingt
ehe wirklich saubereLösung. Wenn an den Messleitungeneine Überspannung
anliegt,könnte dieseauch dasLCD zerstören.Hier würde sich daher aufjeden Fall
noch eine entsprechendeVorschaltungzur Absicherunggegeneine Überspannung
anbieten.
SolltenSiekein LCD zur Hand haben,oder würden Siegernedie mitgeliefertePC-
Softwarezur Auswertungder gemessenen Werteverwenden,dann empfieblt essich,
dasBeispielmit der seriellenSchnittstelleaufzubauen.Die entsprechende
Schaltung
dazusehenSiehier:
5.7 Frequenzzöhler!75

PC6(ßESET) Po(AOCo)
PCrlae0
PQ(aoc4
PBßoca)
PC{(amdDA)
Pc5ß85€cL)

PDo(ryo)
PB7ßraP/rosc2) PüarxD)
PO2(Mo)
PD3(MO
PO.01CM0)
|w4PD6(4No)
PD7(ANI)

Armega ö PBrLcaral
Pe2(ssrrdB)
FB3(MG|/@)
PB1(Mrs)
PBs{scK)

mit Ausgabeauf RS232


Abb.5.11:Frequenzzähler

AVR-Frequenzzähler
5.7.3 Pcsoftware:
Für dasBeispielmit der Ausgabeauf den RS232-Portgibt esehe einfache,abersehr
praktischePC-Arwendung.Siewurde in Borland Delphi 2005entwickeltund ist im
Wesentlichenmit den meistenanderenVersionenvon Delphi (inkl der ftei erhält-
lichen Personal-Edition) kompatibel.Der Quellcodeist ebenfallsauf der CD zu
finden.
Nachdem Sie die Hardware aufgebautund eine Frequenzzur Messungangelegt
haben, können Sie die Messwerteentwederüber ein Terminalprogramm (Baud:
9600)oder direkt über die mitgelieferteArwendung empfangen.Die Softwaresieht
soaus:

HH*'*B
c 204510Hz
Abb. 5.12:AVRFrequenzzähter
176 a,i:Aiieidünieri::.',:,.:l::ll r ;::r::r::rli::,i:
rr::.:::,.':jr r!:]]rr:',-r.

5.7.4Erktärungen
In diesem Projek finden Sie eins sehr schöne Anwendung der Zähler€inheit
(Timer/Count€r). Bei der Periodenmessung bedient man sich ein€I sogenannten
Torzeir Dies€beschreibtdie Länge des Zeitfenstersder Messung.In diesemzeit-
fensterwird die Anzahl d€r steigenden(oder fallenden)Flänkengez.ihlt.Dies€sPro
jekt verwendethiertur vier verschied€neTorzeiten:lms, l0ms, l00ms und l000ms.
Will man eine Frequenzvon etwa 1 Hz messen,dann würde in ehem l0ms Z€it-
fensterkeine einzigeFlanle vorkommen. Das heßt, ie langsamerdie Frequenzist,
uinso längersollte auch dasentsprechende Zeitfenstersein.

DiesesBeispielbietet hier einesehrpmktischeRoutin€ an, die automätischdie rich-


tige Torzeirbestimmt. DieseRoutine geht dabeifolgendermaßenvor:

l Torzeit= 1000ms
2. Messungstart€n
J. Wurdenmehral. ö55J5I -lö.Bil BereiLh)
Ilankengeme<sen?
a. la: Torzeit= 100ms,zurückzu (2)
b. Nein: IdealeTorzeitgetunden

Wenn also zu viele Flalken gemessenwürden, dann wird die Toüeit so langever-
küIzt, bis eine,,vemtlnfiige" turzahl an Flankenir dasZ€id€nsterpasst.Hier noch
einmal der Messvorgangin einer Grafikl

Abb.5,13:Pe odenmessung

Wie aus der crafrk deudich hervorgeht ergebensi€h zwei Aufgaben:Die genaue
Progrämmierungehes b€stimmt€n Z€idenstersund die Messungder darin vor'
kommenden Flanten. Das Programm müss also mit einem Timer und einem
Counter ,rbeiten. Die entscheidendeEinstellungwird hier bei der Taktquelledes
Countersgetroffen.Der Taktwird nämlich fftela zugefüIrt. Däsheißt dassIhre zu
messendeFrequenz diesen Counter mit ehem Z:ihltakt versorgt. Es gibt dafrir
einen resewiertenPin am Mikrocontroller mit der BezeichnungTl. Das ist gleich-
LcDviaPC
5,s HD4478o 777

zeitig auch dasProblembei der LCD VersiondiesesProjekts Eine der Datenleitun-


genles LcDs liegt nänlich ebenfallsauf diesemPin. Durch geschicktenZugritr
mehr'
isieheQuellcode)ist dieseDoppelbelesunsiedochkeir sroßesProblem
Nun, der Timer wird alsovor iedem Messvorganginitialisiert, je nachdemwelches
Zeitfensterverlängt wird. Unmittelbär danachwird der Counter äktivielt' Sobald
das Zeitfensterabgelaufenist, wird auch der Counter wieder gestoppt Folsende
Formel liefet anschließenddie gemessene Frequenz:

llrequenzin Hz] = lAnzahlder l]antenl x ( 1000i lTorzeitin lns] )


wenn SieeinengrößerenFrequenzbereich messen dannmüssenSieem
mÖchten,
facheinen schnellerenQuarz (Beispiel 16 MHz) veNenden und dieseneueTakt-
ftequenzebensoin der Quelldntei(gleichzu Beginn)arPassen'

5.7.5 Erweiterungsmöglichkeiten
Durch die exteme VoNchaltung eines Flip-Ilops könnten Sie die messbäreFre-
quenz relativ einfach verdoppeln. Das llip-Flop ver.wirft (im Endeffekt) immer
jedenmeiten Flankenwechsel. Dasheißt' Siemüssendie gemessene Frequenzsomit
an Endenur wiederverdopPeln üm auf dasrichtiseErg€bniszu kommen

Ein weiteresFiip Flop würde die Frequenznatürli.h wiederum"halbicren"' alsodas


Messeneiner noch einmal doppelt so hohen hequenz erlauben lhnen stehenhier
alsowirklich alle Möslichkeiten olTen

5.8 HD44780LCDvia l2C


Es wird Ihnen vermutlich ftüher oder später passieren:Die meisten Pins Ihres
Mikocontrolers sind belegt,Si€nöchten jedochnoch ein LC Displsvanhängen'
Was ttlll? Abhilfe schafft hier ein sehr nützliches Bäuteil mit der Bezeichnung
PCF8574.Dieser IC wird von der Firmn Philjps (bzw. jetzt NXP) hergestellt Ein
Datenblatt dazu finden Sie unter htrPr//www.nxp.com/acrobaldownlond/datä-
sheets/PCF8574-4.pdf

Der wesentlicheVorteil bei diesemBaüteil liegt in der einfachenHandhabung Sie


benötisenlediglichvier Leitungen(Masse, Versorgung, SCLund SDA) zur Steue-
rung des ICs. Zreei davon müssenSie mit dem Mikocontloller verbinden Der
= poRTC 5'
ATmegasbietet ftü dieseVerbinduDgzwei bestimmte Pins an (SCL
SDA = PORTC.4).Dürch die VerwendungdiesesICs steht Ihnen dann ein sänzer
S-Bit Port zur Vefiigung - auf Kostenvon lediglich zweiPins Sehrpraktis'h!
778 5 Anwendungen

sle sollteneinenBlickaufdieWebseitezumEuchwerfenunter:
http://www.avrbu(hde- DortfindenSieletzteAnderungen und
aktuelleUpdateszu den Beispielen
in diesemBuch.

Material
5.8.1 Benötigtes
Achtlrngr Achten Siebei der BestellungdesI2C-Bausteinsauf die genaueiypenbe-
zeichnung.Esgibt hier zweileicht unterschiedlicheVersionen:
r. PCF8574
2. PCF8574A(bzw: PCF8574AT,
PCF8574ATS,
PCF857,1AP)
In diesemProjek wurde die zweiteVersionverwendet.Der wesentlicheUnterschied
liegt hierbei in der I2C-Hardware-Adresse
desICs. SolltenSieden PCF8574verwen-
denwollen, müssenSiedie entsprechende Z*ile im Quelltext ändem.Die Gerätead-
ressewäredannnicht,,0x70"sondern,,0x40". Dasist die einzigeAnderung,die not-
wendig ist. NebendiesemBauteilbenötigenSienoch:
o Die GrundbeschaltungeinesÄImega8 (oder dasSTK500)
. Ein HD44780kompatiblesLCD (Im Projekt 2-zeüig)
o Pull-Up Widerständefiir die I'?C-Verbindung

Die Schaltunssieht so aus:

ATmogaS-P tr1
Pc6(AEsEl Pco(aoco)
Pc1(aocl)
Pc2(aoc2)
P03(aocaJ
Pc4(aoc.,€oa)
Pc5(aI)<scL)

PDo(Fxo)
FB(xrar.2'ro€c? Poloxo)
PD20Mro)
Po€(lfrt
Po4(xcK4o)
pD6arD
P0.(arN0)
P07(arNo

Armesa 8 pB,iö;;j
PB2(SS/OCl B)
P$Oroe/c.2)
P&(Mrso)
Ps5(scr{)

Abb.5.14rAnbindungeinesLC-Displays
über12C
s.8 HD44780
LCDviaPC 179

5.8.2 Erk[ärungen
DasProjekt umschließtim WesentlichenzweiTeilbereiche:
l. Die KonmunikationüberIjC
2. Die Konfiguration und SteuerungdesLc-Displays
Auch wenn der l'?CStandardrelativ €infach ist, sollte män dasRad möglichst nicht
st:indigneu erfinden.Aus diesen Grund wurde für diesesProjektdie frei erhältliche
l:C Bibliothek von Peter Fleury (rnehr unter: http://iump.to/fleury) velwendet.
DieseBibtiothek ist 100o/okompatibel mit AVRGCCund läuft däher direkt in der
Standardkonfigurationder Entwicklungsumgebung.Die Bibliothek wurde zwar in
Assemblergeschrieben,dämit habenSiehier äbereigentlichnichts zu tün Siemüs
sendie entsprechenden Dateienlediglichin Ihr AVR StudioProjekteinbindenwie
dasgennutunktioniert,sehensie im QuelcodedesBeispiels
DieseBibliothekstelt (unteranderem)folgendeFunktionenzurvertugung:
. i2c nit0;
. i2c_start_wair()i
. i2c writeo;
. i2c stop0i
Die genaueAnwendungder Bibliothek finden Sieim Que code.Siewerden sehen,
die Konnunikation ist wirklich sehreinfachaufgebaut
Wie obenschonbeschrieben mrdq mussdiesesProjektauchmit den LCD-Con-
troler kommuDizieren. In einem anderenBeispielfindeDSie einc kleine LCD
ßibliothek. Für diesesProjekt Mrde die Bibliothek leicht ingepasstund trägl nun
den neuen Namen Der großeVorteil: Sie können in Ihrer Applikation
"i2c,]cd.h".
ohnewesentlicheUlnstellltngenwr der normalen LcD Ansteuerunc(,Jcd h") auf
dieI'C-Version(,,i2clcd.h")wechseln. Die Befehlesindhicdür gleichgeblieben

5.8.3 Erweiterungsmöglichkeiten
Der PCF8574Bausteinwird im DateDblattals ,,8-BitI/O Er?ander"bezeichnet.
Das hejßt, der lC biet€r lhnen einen komplett tunktionstüchtigenEingabe/Ausga-
beport an. Däzu müssenSie ledigtich zvi'ei(bestimmte) L€itüngen am Mil(rocon-
troler Der Vorteil desl:C Protokols ist die Möglichkeit, mit einem Mas
"opfern".
ter mehrere Slavesansprecher zu können. ,eder dieser Slaveshat eine eigene
Adresseund kann dahervom Masterindividuellädressiert w€rdeD.Die logische
Schlussfolgenurg darausist einebenchtlicle Erweiterungsnöglichkeitder EnrsabeJ
Ausgabe-Leitungen durch mehreredieserBausteine.Sokönnten SieIhren ATmegaS
zumße''pielurncrwdrchrro leI BirPorr.crweiLerr.
180 5 Anwendungen

5.9 LED-Matrix
Segment
In diesemBeispielbenötigenSiezur Abwechslungeinmal einenanderenMikrocon-
troller, nämlich den ÄTtiny2313.Sie können das Beispiel natürlich genausoftir
einenÄImega8anpassen.Die Wahl ftillt hier auf denÄItiny2313, weil der Control-
ler relativ güLnstig
ist und sich ftir diesesHeine Projekt ideal eignet.

SiesollteneinenBlickaufdieWebseite zum Buchwerfenunter:


http;//www.avrbu<h.d6 - DortfindenSieletae Anderungenund
aktuelleUpdateszuden Eeispielen in diesemBuch,

5.9.1. Benötigtes
Material
Der wesentlicheAufwand bestehthier in der Verdrahtunsder einzelnenLED-Ver-
bindungen.Siebenötigendazu:
o Die GrundbeschaltungeinesATttry2313(oderdasSTK500)
o Ein 5x7LED-MatrixSegment
o Eine Reihevon Widerständen

Die Schaltungsieht folgendermaßenaus:


5x7 LED-lvatrix

v@ (tcP)PD6

Aniny2313 '*"ä;lE|;
(NT'PD3
FESET,DWPA2 (CKOJT'(CK4NTO)PO2
crxo)Po1
(BXD)PDO
'TAL2(PAl)
(ArNo/POro)PBo
(AtN1/PCtl)PB1
(ocoa/Pct2)P82
XTALI(PAo) (@14/PC|3)PB3
(@r B/PC|4)P84
(MOS|/D1,SDA/PC|5)P85
(Mtso,DoPct6)P86
GND (SCkruCSk,PCtDPBT

der LED'Matrix"Steuerung
Abb.5.15:Schaltung
t:rl'r. .. r' 181

5.9.2Erktärungen
Eine LED-Matrir bestehtauseiner Vielzahl von eirzelnen LEDS'die in einer sog€-
nannten Matrix miteinander verbu en sind Dies tisst sich am bestenanhmd
einer Grafik veranschaulichen:
coll? 34
PtN 13 3 4,tl t0 6

ROW PiN

2t4
38

5l
67
72 Abb.5.16:Aufbaud€rLED_['latrix

Ein Beispiel Um die LED ganz rechts unten einzuschalten,müsstenSie an Pin 6


eineSpannunganlegenund gleichzeitigPin 2 auf Masseschalten
Sieerkennenbereitsdie Problematit dieserLED-Matrix Es ist nicht möglid! jede
beliebige Kombination von LEDS gleichzeitig z| schalten. Aus diesem Grund
bedient man sich der TrägheitdesmenschlichenAug€s.Der Ablauf ist folgender:
l. Au'gangtkonfiguration lkeineLl'D leuchlel
a. COL1,COL2,COL3,COL4,COL5 = 0V
b. Rowl,ROW2,RoW3,ROW4,ROW5,ROW6,ROW7 = 5V
2. COII = 5V (aIe Diod€n dieserSpaltesind mit SPannungversorgt)
3. Die einzelnen Reihen (ROWI-RO\ 17) le€rden nun je nach Wunsch auf 0V
geschalten. Die entsprechendenLEDSleuchten(jedoch nur in dieserSpalte!)
4. Etwa 5msh diesemZustandverbleiben
5. COL1= 0V COL2= 5V
6. Die einzelnen Reihen (ROWI-ROW7) weiden nun je nach Wunsch auf 0V
geschatten.Die ellsprechendenLEDSl€ucht€n(jedoch nul in dieserSpaltel)
7. Etwa 5ms in diesemZustandverbleib€n
8 . C O l 2= 0 V C O I 3- s V
742 5 Ahwendungen

Der Trick bestehtnun also darin, jede Spaltefür etwa 1-5 ms im ichtigen Mustei
einzuschalten.Das Umschaltender Spaltengeht zu schnell fiir das nenschliche
Augeund dasrcsultierendeBild sieht düer ,,relativruhig" aus.
Ein weiterer Trick in diesem Beispielfindet sich in der Zuweisungder Pins. Die
Reihen (ROWI bis ROWT) sind hintereinandermit einem ganrcn Poft (PORTB)
verbünden.kt die entsprecheDde Spaltenun aktiviert, kann man ein ganzes(inver
tiertesl) Blte an diesen Port schreiben.Damit solren die richtigen LEDSschon
leuchten.Das ist natürlich eine sehl eleganteLösung und erspart einigesan Pro
grammieraufwand.warum ein invertiertesBlte? Glnz einfachdeshatb,weil die hier
nitgelieferte Sch;ftart eine ,,1" als gesetzrbetrachtet.In unserem lall muss aber
eire,,0"auf dieReihegeschrieben werden,um dieLED zu aktivieren.
5x7 Bitulap-Follt,bestehtalsoaus35 Bits pro Zei
Die Schriftart ist eine soger]Nä'nnre
chen. Zur Vereinfachungnehmen wir hier tunf Bytespro Z€ichen (nlso sx8 Bit).
Um dannzüm BeispieldenBuchstaben,,A" auf dasSegmentausgeben zu konnen,
aktivierenwir die ersteSpalteund schreibenin die entsprechendenReihen(Rowl-
ROWT)dasersteByte.Die zweiteSpaltebekommt dann das^{eite B}te, usw.Also
ein sehreinfaches Format.
Ein weiteresProblem ergibt sich mit der Größe der Schriftart. Sie wissenja, der
Speicherdes Mihocontrollers ist sehr begrenztund inmerhin benötigen Sie tur
etwa 100Zeichenganze500 Byte Speicher.In der Conprterindü,,ttde wäe dasein
vemachlässigbar kleinerWert, aberder Datenspeicher bietetIhnen hier nur 128
Byte Speicher.Däs ist eindeütig zu wenig. Aus diesen Grund bedienenwir uns
eines weiteren sehr praktischen Tricks, nämlich der Speicherungim FLASH-
Bereich.Das Programm selbstist glücklicherueisenicht sehr groß geraten,Ihnen
steht also der meiste FLÄSH-Speicher(Programnspeicher)no.h zur Vertugmg.
Und genauhierhinlegenür dieSchriftart.
Leider ist de! Zugriff auf djesenSpeicherbereichnicht ganzso einfachwie bei nor
malenVadablen.Am bestensehenSie sich jedoch das mitgelieferte
BeispielaD.
Do( finden Sie den Zugriff auf die Schriftart rmd mit etwasDenkarbeit]ässtsich
dieseTechnikmeistem.AusreichendInformationen dazu finden Sieauch im Inter
net (jedochnur in englischerSprache)unter:
http://wrrw.nongnu.org/avr-libc/user-manual/pgmspace.html

5.9.3 Erweiterungsmögtichkeiten
Ein ATtinl3l3 ist kostengünstig.Eswürdesichdaheranbieten, zum Beispielmeh
rereATtjny23l3 über ein I?C Interfacebzw. eine serie e Schnittsteltezu verbinden.
183

So könnte man (wenn auch €tlvas aufi'v:indig) eine beliebig erweiterbär€LED-


Matrix-Laußchrift bauen.leder der Mikocontroller (lmd dasdazugehörigenSeg-
ünd wär€ somit unabhlingigwn den anderen
m€ t) hätte eine eigen€l'zC-Aahesse
Elementenaalressi€rbar.
784

6 Anhang
6.1 CD-ROM
Die folgend€Tabeüez€igt die Ordnerstruktu der CD-ROM:

CD{Beispiele Enthätt die im Kapitel/nwend ngenbehandeltea


Proj€kteim Qudlcode und tur den,4Tnega8rorkom-
piliert.
CD:\Datash€€ts Hier find€nSiedie wichÜg.ten Dalash€etszu denim
Buchb€schri€benenKomponenten.
CD:\Dokumentation In diesemV۟eichnisbefindensich einetuihe von
Tutorials,zusätzlichenBrklärungenetc.
CD:\Funldionstest Irn KapirelUorbereitullgwird ein Funkionst€st tur Ihr
sTK500 oder myA\R-Board €rklärt. Hier finden sie
di€ €ntsprechendenHBx-Files.
CDdNützliche Routinen In diesemOrdner fnden SiehäudgbenötigteRouti-
nen (EEPROMlesedschr€iben,RS232,...) im QueI-

CD:\Softwar€ In dies€mVerzeichnisfinden Si€dasAVR-Studiq


WinÄVPJA\RGCCund viel€ weitereTools,die lhnen
b€i der Softwareentwicklünghilli€ich seinweden.
CD:\Sclnltungen Hier finden Siedie Sdnltungen zu denAnwendungen
ausKapitel 5 im PNG-Formatzum Äusdruck€n.
6.2 AVR-Assembler-Befehlssatz
Die folgendenTabellenwürden von http://ww1^'.mikrocontroller.net/artides/A\4.-
übemommen. Si€ 6nd€n dort irnmer die aktu€llste
Ass€mbler---Vergleich,stabelle
Version.GroßenDank biermit an die Eßtdler diesetumfangreiden AuflistunS

ADD ,/'
ADC ,/
ADIW ,/
SUB
SUBI
SBC
sBcl
SBIW x
ÄND
ANDI
OR
ORI
EOR
COM
NEG
SBR ./ ,/ ,/
CBR ,/,//
INC ,/,//
DEC ,/,/{
TST ///
c!R ./ ,/ ,/
SBR ,/ ,/ ,/
MUl x x
MULS x x
MULSU X xl/
FMUL X x xl{
FMLS X x x{{
FMUISU. X x xl,/
786

IIMP r' x ./. '/ , ,/


EIJMPXXXXX x
IMPXXX xx
RCAIL ,/ {
,/ ,/ ,/
EICALL X X xxx
cAlL x x xx
RET ,/ ,/ ,/
R,ETI / / /
cPsE / / ,/,//
cP,// ,/t{
cPc ,/ ./ /,/,/
CPI{{ ./{/
SBRC r' / ./ ,/ ,/
SBRS ,/ ,/ {/{
SBIC ,/ ,/ / '/ ,/
SBIS ,/
BRBS ,/
BRBC ,/
BREQ /
BRNE ,/
BRCS ,/
BRCC /
BRSH /
BRLO ,/
BRMI /
BRPI /
BRGE {
BR|I ,/
BRHS {
BRHC ,/
BRTS ,/
BRrc ,/
BRVS ,/
BRVC ,/
BRIE /
BRID /
787

MOV / ,/
MO\1ü X X
LDt l. ,/
LDSlX
I,D//
LDD/X
sTs/X
sT.//
STD/X
LPMr'.{
ELPM X X x x
SPMXX x
IN.//
oul '/ ,/
PUSH / X
POP/X

BREAI( X X X xx,/
NOP /{{ ./ ,/ '/
SLEEP / ,/ ,/ ./ /, /
't4DR ,/ ,/ ,/ ,/ ./ ./
188

SBI ,//,/'/
CBI ,/.//,/
tsL ./,/r'/
tsR ./,/t/
ROL ./ ,/ ,/ ,/
ROR ./,/,/{
ASR ,/.//,/
SWAP ./,///
BSET ././,//
BCLR { ,/,//{
BST ,/ ,//,/,/
BLD { ,/ ,/ ,/ ,/
SEC ./ '/ ./ '/
crc /.//,/
SEN /.///
CLN ,/ r',/,//
sLz { ///l
CLZ / ,/,/./{
SEI ,/ ,/ ,/ ,/ ,/
CLI ,/ ,/,/'//
sEs ,/ ././,/r'
cls ,/ ,/.//{
SEV t,/,/'/
clv ,/,//,/
SET ./,///
crl /./'/./
SEH ,/,//{
CLH ./,/,/{
. 6,3 ASc'Zeichensaz 789

6.3 ASCII-Zeichensatz
OEZ HEX z€]CHEN DEZ HEXZEICHEN DEZ I']EXZEICHEN

000 0o NUL 032 ?C C€4 40 ß


001 01 s0! 033 2! L 065 4i A
_ .ty 0o6 L
0 o-
oo3 03 E?x 035 ?3 + 061 41 a
004 04 Eor .. 036 24 S 063 44 0 1!0 64 d
OO5 05 ENO O3r 25 t 069 45 E 10i 65 e
006 06 AcK 033 26 r 0rO 46 F ro2 66 f
o- o? BrL 01o .? ro1 . o
006 03 Bs 040 23 ( 0r? 43 rl 104 63 h
009 09 HT o4r 29 J 0l: 49 r 105 69 i
010 oA LF C42 2A ' 0?.1 4A J 105 6A j
01t oE vr 0.43 28 + 0?5 48 ( :l0l 63 k
012 OC FP A44 2C , 0/6 4C i, r03 6C I
013 oD CR 045 2D - 0?? 40 M 109 6D n
a46 2E O?3 4E N 1lO 6E n
015 0F St a41 2F / 019 ,lF O 1r1 6F o
ot6 !o or,E 046 30 0 030 50 P 112 r0 p
O1r 11 OCL 049 !1 1 031 51 Q 113 11 q
Aß 12 DC2 O5O 32 2 032 52 R 1L4 12 |
o.q t. D.t 01 03
o2o L4 DC9 052 34 .1 034 54 T :l:16 ?4 t
c21 :!5 NÄI( 1153 35 5 035 55 U 1l? 75 u
022 1€ sYN 051 36 6 0S6 56 V 113 16 v
023 1? ETB 055 3? ? 03',1 5? u 1r9 11 e
024 13 CÄN C56 :13 A 033 53 X !20 ?3 x
025 19 Er.i O5r 39 9 039 59 Y l122I 1 t9 v
026 1A SllB 053 la : OS0 5a , I22 1A z
02? 1B EsC 059 3E ; C9:l 5E I 1?3 ?B
023 :tc Fs 060 3c < 092 5C \ 721 1C
029 ]D CS 061 3D = 093 5D I 1r5 lD
RS A62 3E > 094 5E ^ 125 ?E
o3o 1E
031 1F IJS 063 3A ? 095 5r r21 1f

Abb.6.2: DerASCll-Zeichensatz
790

6.4 Interrupt-Vektoren

ADC-vect SIG ÄDC ADC ConversionComplete


ANÄ_COMP_vect SIG,COMPARÄTOR
ANÄLOG-COMP-vect SIG-COMPARATOR
INTo-ftct SIG INTERRUPTO
INI1 v€ct SIG_INTERRUPTl ExternalInterrupt RequestI
INI2-vect SIG INTBRRUPI2 EnerDalInte(upt Request2
INT3_vect SIG_INTERRUPI'3 Bfimal Interrupt Request3
SPI STC-vect SIG-SPI SerialTrüsfer Cornplet€
TIMßRo-COMP_E€t SIG OUTPI/I_COMPAR.EO Timer/Coünteocompee M.tch
TIMBR0_O\rF vect SIG-O\TRIIOWO Tihs/Countero Overflow
TIMERl-CA.PT-rcct SIG_]NPIIT C{PTUREI Timer/Comter Captu.eEvent
TIMBRT_O\.F v€ct SIG_O\,.ER!IOW1 Timd/Cowtsl Overflow
TIMER2-COMP-irct SIG_OUTPUT COMPÄRE2 Timer/Couter2 Compde Match
TIMER2_O.lrF_v€.t sIG_O}.ERFLOW2 Timer/Coüntd2 Overflow
SIG-2 WIRE-SERIAT
UART-R.Lvect SIG UART RECV UART;Rx Conplete
UART_TX_tct SIG.UARI-TRÄNS UÄRT,T\. Complete
UÄRI UDRE vect SIG-UART-DATA UARI Data RegisterEmpty
US$I_RX_V€.t SIG USART RECV,SIG, USART,Rx Complete
UART-RNCV
USART-RXC-Vect SIG_USÄRI RECV,SIG, USART,Rr Complete
UART,RECV
USART TXC,vect SIG-USART-T"1NS, SIG USÄRT,Tx Complde
UÄII IRÄNS
797

6.5 Linksammlung
http://ww*mikro(ontroller.net
Umfangreichst€s,deutschsprachiges Milrocontroller-Portal (viel Support für den
A\R, zahlrei€h€Tutorids und ein $lt besuchtesFoium).
http://w$.w.atmel.com/ad
H€rstellerdesAVR Mikrocontrolers. Auf der webseitefinden SieDätash€ets'Appli-
cation Notesund Software-Downloads.
http:/^fl r'w.altfreaks.net
Das größte Portal fiir ATMEL AVR-ControIer. wird von ATMEL empfolien md

http://www.elekronik-proiekt.de/
SehraktivesForum mit Fokusarif Roboter€ntwiclCüng,Elektronik und Mikocon-
troller
http://soüceforye.ner/proiects/winavr
winÄVR Open-Souc€ Entwicklungstoolsflt denA\rR.
http://souceforge.net/projects/kontrollerlab
Kontrollerlab - Open-Sourc€-A\rREntwicklungsumgebungturLirux
http://r,ww.nongm.org/avr-libc/
AVR-GCCStandadbibliothek.
http:/ od.info/AYRMicro
Informationen zum Tool-ChainSetupftt Linux
http://wrr.w.sisy.de/
SiSyÄVR ist einegrafischeEntwicklungsumgebungtur den AVR.Codeg€nerierung
ausKlassendiagrammen.
http:/hMw.hpinfotech.com/
CodevisionAvR- Ein gut durchdachterC-Compiler mit Entwicklungsumg€bung
Der Wizard ist sehrempfehlenswert.
htip://www.mlal.r.d€/
KompakteAvR-Entwicklüngsumgebungmit Terminalunterstützung.
http://www.amctools.com/mlab.htm
inklusive Simulator (plus Pe
VMLAB ist ehe komplette Entwictrdungsumgebung
pheriesimulation).
792 6 Anhong

ware/AvrloDesigner/
http;//1\,1llw.forestmoon.conl/Soft
A\R-IO-Designer Nettes Tools zur Generierungvon Initiatisierungscodetu die
Ein- und Ausgäbeports.
http://algom.ner/
cnns.her Algorithmus Buildel ftir den AVR.
http://www.mcselec.corn/bascom-avdtm
BASCOM (BASIC)-Compilertur den A\rR.
http://www.harbaum.org/till/nano1'nvindd.shtml
Nrnoll4 - Eineta Virtual-Machine fiir den-ATmega8.
http://www.mikrccontroller.net/artides/AVR-GCC-Tulorial
GutesÄVR-GCC-Tutorial.
httpJ/www.aLrtutor.com/tutorial/rhermo/wdcome.php
EngtischesEintuhrunsstutodal tu den AVR.
http://wf r{.sparktun.com/comm€rc€/preseüt.phplp=BEE-1 -Powersupply
Noch ein weiteres, umfangreicheresEinfilÄrungstutorial tur Digitrltechnik und
Mikroconholler.
http://raww,arr-asm-tutodal.net/avr-de/index,html
furorial/um Ein.tjeg in dieAr.emble'prugr rmmierung.

http://erw.iree.uq.edu.ad-cse/-atmevÄt'R-Studio-Tutorial/
EinfacheErkläung (Englisch)zur Eintuhrung in die VerwendungdesAVR Studios.
http://wr'lr.mikrocontroler.con/de/aw-ctrt.php
Interessantes und einfachesEntwicklungsboardzum Se rstbau.
http:// ww.kanda"com
HerstelierdesSTK200StarterKia (Entwicklungsboard).
httpr^fia'w'alrbuch.de/
Links zu weiterenEntwicklungsboardsund vielesmelu.
|Jtossar
ADC
Analog/Digital-Converteroder kralog/Digital-Wandler' Die AVR-CoDtroIerbesit-
zen mehrereADCS.DieseWandl€r dienen dazu' analogeSpnnnungenzu messen
und diesein einendigitalenWert zu konvertieren.Der ADC hat (meist) e;neAuflö-
sungvon l0 Bit, d h. er ist in der Läge lO24Abstulingen zu unt€rscheidenBei 5V
krnn er dso Unteischiedevon 5mV ünterscheiden.

ASCII
American StandardCode for Inform.tion Interchange AmerikanischerZeichen-
code.Ursprijnglich eine Zeichenlodierungmit 7 Bits'

bzw Prozessorabhängige
Maschinenspezifische ProgrammiersPrach€Assemblerist
die Programmiersprache,die zu der schnellstenRechenzeitdes ausätuhrelden
Programmstuhrt. Siewird dnher tur viele HocNeistungsprogramme benritzt'

ATmega
8-Bit RISCMikrocontroller ausder AVR Sededer Firma Atmel'

AVR
8-Bit RISCMikocontroller Sededer Firma Atmel Laut Aüssagevon Atmel bedeu
&t AVR gar nichts. Manchmal ist zu lesendas der Nnme A\R ,,AdvancedVirtual
RISC" bäeutel oder auf die beiden Erfinder Ar Egin Bogenund Vegardwo[an
zurückgehen("Alf VegardRISC") soll.

BASIC
Beginnert AI purpose Symboli€Instruction Cod€ Die am weitestenverbreitete'
e;fach erlernbarehöhereProsrammierspnche,mit der nahezu'[e PeisonalCom-
puterarbeitenkönnen
194:.iilo;liü:l::ii,.:i.:ii:.lli]:ir:,:,:ri:r'::l:ir:jli:;:iirlli.tll:i:,i:i:i:

Baudnte
Die Baudrategibt die Anzall der ZuständedesübertragenenSignalspro Sekrurde
an. Die Baudratewird in der linheit Baud gemessen.Di€ Anzahl der Bits pro
Zustandmultipliziert mit der Baudrate€rgibl die Bitrate.

C
Höhere Programmiersprache,die mit einem gedngenBefehlssatzauskonunt und
UNIX jst in dieser
teilweisesehrhardwarenahist. Ein croßteil desBetriebssystems
Spnche Seschrieben.C kann sowohl auf Großrechnem,Mikocontrollem als auch
auf PCsverwendetwerden.

BEPROM
Beimf,EPROM (Electricity Erasabl€ProgrammableReadOnly Memory) handelt es
sich um einenelekdsch löschbarenund programmierbarenSpei€her.

EmbeddedSyst€m
Ein XmbeddedS'ßtemist ein Mikrocomput€rsystem,dasfill d€n Benutzerim Hin-
tergrund bleibt, ,,€ing€b€ttet"ist und kaum bemerk wird. Esbestehtaus€inff zen-
tralen Prozessoreinheit(CPU) und Speichff (flü€htig und nichtflüchtig) mit
Anschlussmöglictlkeiten verschiedenerperiphererEinheitenwie beispielsweiseSen-
soren bzw. Altoren all€r tut und der Kommünikationsmöglidlkeit mit anderen
Slst€m€n.

Fuse-Birs
Als Fuse-BitswerdenBits einesMikrocontoll€rs b€zeichnet,die zur Konfigüration
desControll€rs dienenund von der Soft*lre nicht ver:indertwerdenkönn€n. Dies
können arm Beispiel Sicherheits€instellungensein, die es verhindern, Daten aus
d€m Mikmcontroller auszt esen.

CNU
GNUI Not Uni'r (eiü rekursivesAkonym).

GPL
GNU GeneralPublic License.Die GPL ist eire von der FreeSoftwareFoundation
herausgegebene
Lizenztur die Liz€nzierungfieiei Software.
195

GPS
Das GPSist ein satelitengestütztesOftmgssystem,dasvor nlem als Navigations-
hilfe in der Lufifahrt und Seefaht sowie tur elektronischeLotsen und als Dieb-
stahtsschutzin Autos eingesetztwird. Zü Bestimmungder Position des mobilen
Empfiingerswird durch Messungder Signallaufzeitvon dem Empfting€rzu den
GPs-satellitenseineEntfemung und relativePositionzü diesenSatdliten elrechnet

PC
Eiü simpler Zweidraht-Bus,gedachtzur Kommunil€tion von elekhonis'hen Bau
elemen;n. In deD l980er-lahrenvon Philips alsInter-Ic-Bus entwickeltünd sPezi-
fiziert.

IDE
Integrated Development Environment Beispiele:AVR Studio, Microsoft Visual
Studio,Borland DelPhi.

lnteger
OIt i'rt abgekürzt.Eine Integer ist eine GanzzaN(ohne Komma). Sie werden des-
halb so oft verwendet,weil sie wenig Speicherbrauchen.Die Berechnüngensind
dahersehrschnell.Bei einei Division von zweiIntegerzahlengehtder Restverloren
IntegerVariablenkönnenWerteim Bereich-32768bis 32765annehmen!s gibt
weitere Integertt?en die unterschiedlichviel Speicherbrauchen'und ünterschied-
liche w€rtebereichehaben.

ISP
Programmi€rsdntusrellefiir Prozessoren.ISP ist eine Abkürzung fü ,,In System
Programming' oder,,In SystemProgammer". Durch ein€ relativ ehfache Zusätz
hardwareist es nögli€h, den Mikoconto[€r im Svstem(d.h auf der Platine) zu

LCD
LCDSsind Flüssigkristallanzeigen vor allem tur mobile Geräteder Kommunika-
tions- und UnterhaltungselektronikFü lndustriemaschinenoder nüch im Hobby-
bereich werden oft ein- bis zweizeiligeDisplaysverwendetdie mit einem Hitachi
HDa4780-kompatiblenController gesteuertwerden
myAvR
Ein wirklich gut durchdachtesund komplett€sLernpake.mit einemumfangreichen
Entwicldungsboard(mit USBSupport). Hersteller:Laser& Co. SolutionsGmbH.

NIBBLE
Nibble nuch Halbb)te genanntist die HälIte einesB)'tes(also4 Bit statt s Bit).

RISC
Eine ProzessorArchitektur. RISC ist eine Abkürzung fiir Instruction Set
"Reduced
Computing". Lrbersetztbedeutetdies etwä Rechnenmit reduziertem Befehlssatz.
Beispielefür RISCProzessoren sind die Atmel AVR Reile sowieMIPS.

RS232
SieheUARL

RTTTL
Ringing TonesTe,.tTransferLanguageod€r Noking ist ein verbreitetesFomat für
Ichgeltöne Iit Mobilrelefone.

SPI
Ein von d€r Firma Motorola entwickelter slnchroner, serieler Bus. SPI ist eine
Abkürzung fiir Peripheral Interface". Es werden mind. 3 Datenleitungen
"Serial
benötigt,SDO(DataOut) bzwMOSI,SDI(DataIn) bzw.MISOünd SCLK(Däten-
takt) und ggf.ein oder mehrereChip selectSigmle.

STKsOO
UmfangreichesEntwicldungsboardvon ATMEL. Kompätibel mit dem A\R-Studio.
wird riber die seriele Schnittstelemit dem PC verbunden.

TWI
TwI bedeutet,,TwoWire Inte.face" ürd ist die Bezeichnungvon Atmel tur I?C.

UÄRT
UART nennt m.n ein Kommurükätionsmodul eines Prozessors.UART ist eine
Abkürzungfür,,UniversalÄslnchron ReceiverTransmitter".Übersetztbedeutetdas
797

e|folgt
Unir€r*ller as''nchroner Empfünger und S€nder' Die Datenilbertragung
serieü.t?isch; Anwendungeiner UART ist z B die RS232Schnittstell€

USB
Anbindung
USB ist eine Abkürzung tur ,,UniversalSerial Bus" Ein Busslst€mzü
von PeriDherieGer:ite; an ehen Computer' USB ersetzt nach und na€h :iltere
Schnittstellenund Buss'ßtemewi€ RS232'LPT'

Watchdog
DerBegriFfwatchdog{engl tu| wdchnundI isteinevorrichrungwelcheverhinden'
Verbin-
daß dei Au.fal der ioftware zu einemXomPlettäu'faldesGerätesfrlhn
a"t.ttf"ff Abständen
System,indem die Softwarein regelm?tßigen
a*t
"i.a "in"s arbeitet'
demWatchdogmitt€il! dasssi€noch ordnurgsgemiß
t99

Sachverzeichnis
16-Bit-Timer169 A\RGCC 20,3I
80519 AVRISPmkII 18
17
AVRISP/STK5oo-Protokoll
AVR Sttldio7,19,3l
Abfragenünd Schleifen8, 124 Avrusb50o 18
ADC 83
A/D-Wandler38,39 B
Ampe$and145 BASCOMAVR2T,27
Analog/Digitäl'Konverter7, 83
Analog-I/O54 BedingteSprünge7, 105
AND 139 Beerware110
ANSIlIO Befehlssätz7, 93
Anweismgentllld Funktionen 8, 119 Bit-Operationen r39
Arrays135 Bitoperätionen 8
BlockirgMode69
Ascll-Zeichensatz 8, 189 break134
Assembler7, 93 Brealpoints 40
Assembler-Befehlssatz 8, 185 BSD110
AsynchroneiJbertragung67
ATMegaIDE200722 c
ATmega1l c 8, 110
ATm€gal2811 cl66 9
ATmega8 10,r1,47 Calry-Bit109
ÄTMEL A\R-Produldamili€ 10 clio6a
ATtiny r0 CompareMode 172
AusgangskonfigurationdesSTK50023 76
Compare-Output-Mode
Ausgangskonliguiation29 Counter 70
automatischerReset90 CTC-Mode78,172
AVR91012, 17
A\R-Doper 52 D
AVR-Dragon 3r Data-Direction Regists 58
A\RDUDE 19 Datenspeicher55
AVR Fuse Calculator48 DDR 58
200 Sachverzeichnit

Debugger/Simulator31 H
Debugging 36 Hauptprogramm 8, 111
Digital-lo 54 Hello World 111
DWEN 51 High-VoltageProgramming 18
Hochspr.€he110
E Hwrog 18
eBayI I
EEPROM7,56,88,164 I
Endlosschleife100 if 124
Entwicklungsboard 7,11 Include-Dat€ien 111
Entwicldungsumg€bung\Alternativen InterruptKontroller53
7,21 Intenüpts7,63
Entwicklungsümgebung (Linux/Macos) Intenupt-S€ ice-Routine(ISR) 64
7,22 INTERRUPTVEKTOR 142
Entwicklungsumsebung(ü'indowt7, I/O-Vi€w38
19 ISP13
Elertool17 ISP-Header 23
ISR143
F
Fast-PWM-Mode 78 J
Flashen27 ITAGICE /ITAG-Debugger17
for 133
Free-Running-Mode 83 K
Funktionst€st28 Iüingelton 8, 169
Fuse-Bits
47 Kommentierung 116
Fuse-Bits
7 Kompilieren35,35
Kontrollerlab 23
G
GDB22 L
Global Interrupt Enable109 Lin]<samlnltlllg8, 147
GNU21 LinuxCommunity22
GNU Bin Utils 22 Load Immediate99
GNU-Tool-Chain 22
GoogleEarth 164 M
GPL110 MAX23211,64
GPSWay-Tracker 164 Mikomntroller 7,53
GPS-Maus164 myAVRWorkpad PLUS21
GPswayTracker8 myA\R 7, 12,29
Grundbeschaltung 7, 14
GSM-Modem168
207

N s
NächbautendesSTK50017 Schlüsselwörter118
Non Blocking Mode 69 seo 64
NOT 139 Seielle ProgrammieradaPter17
SerielleSchnittstdle7, 16,64
o SIGNAL i43
Open-Source 110 Simulationsumgebungl8
Operand99 SimülAVR22
Optimization 34 SingteConversion-Mode83
oR 139 siE AVR2l
Skelet112
P Softwäre-Entwicklung 7, 31
ParalleleProgammieradaPter17 SpaDnungsregler 1s
Palalele Schnittstelle16 Speicher 53
Pedpherie7, 57 SPIEN51
PhasenlorrekterP$14-Mode 78 Spnmganweisung100
Pointer8, 144 Sprungmarker00
PonyProg2o0o 17,19,50 SRAM55
Porrs57 Stackspeicher103
Prescaler 70 Standärdbibliothek2r
kogrammieradnpter 7, 16 7, 108
Statusregister
Programmiersoftwäre7, 19 StepInto 37
Programmspeicher55 Stepover 37
ProjectWizard 32, 33 Stern-Operator 146
Prozessol 53 sTK20017
Pull-Up-Konfi guration59,60,61 sTK30017
srK5007, 11,23
R Strings136
Rechtecksignät 169 Stomverbräuch 10
mit CTC-Mode79 Stromversorgung15
Register7, 54, 57 Support 30
Ritchie,Dennis I r0 swikh r27
RS232CTRL25 Synta-{-Highlighting31
RS232SPARE 24
RS2327,64 T
RSTDISBL 51 Taktgeber47
RTTTL169 lrmer/Loüfier /! ff, /u
RXD 64 Transmit-Bufiel 69
TXD 64
202

U
Uberspannung15 watchdog-Timer
7,90
UBRR 55 Wa\€formGen€ration
78
{JNIX ll0 Waveform-Generation-Mode
I 69
Unteryrogramme7, 102 while 129
USART7, 64 winÄVR20,21
USB 16
USBirp 18
USBprog18 xoR r39
UsB-Progranmieradapter18

Zeichenlctten136
Variablen8, l13 ZeigerlM
Versorgurgsspannug 15 Z€iger8
Vorbereitung7,9 Zarc-BitlO9
tr"*.

DasKnow-how-Paket {ür Studiumund Beruf- Elstklassige


Softwarezum
s(hnäpp(henpreitl
absoluten Mit diesem häben
Lernpaket Siedie El€ktmnik
voll
undElektrotechnik im Griff.
t MessenL4d treLerr unterWindowr

. anä1o9eund digitaleschaltunsssimuLation
t Me$en und dutweRel unrerW:ndoM
. Simulationanalogerfilter
. Pros dmmie'enir PAS(ALund HPVEE
. Oe5ignCente'r:r PsP:(e
. Dätenfusori€ntierteEntwicklunq!umq€bun9

t Pspice==> DesignLab

. Dätendnäyseuld re<hnikheGrafik
. Prosrämmie'öäreLoqil'

& Elektrotechnik
Elektronik
Lernpaket
s c h ü e . u n d s t u d e n t e n v e1r5sC Rfo M s + N a n d b u c h _ c D
. äDu
sBNs7a3-7723_4077-2 € 29,95 '"'
-
Sieunsim Internet
Besuchen www de
frän2is
r lt _l r-4

Dasl.t:-ranet
YLr? 5x,rch- " 1.
!*?iltT*'"***t**t*'
Xt:iÄ.iüi:11.;;rä:lfii**"'
tr\clr
- --
r .. ,,,6eng u, "
. Au\orcüte"" -.$.ispie\e
icnw -
. !LeleAn

PlatinenbildendasRü.kgratder Elektrotechnik, Elektronikund ComputeF


t€chnik.Sien€hmenaktiveund passiveBauelem€nte, integiert€Sch'ltun-
aenundvielem€chanisch€ Komponenten auf.Wesentlicher des
Bestandteil
iAD-PcB'Programmes ist der sdaltplan-Editorzum Zeichnenvon Schaltun_
genallerAn;wobei durchdie ERc-Funktion (ElectdcälRulecheck)di€ Rich'
tiokeitautomatitchüberprüft wird
DL€s Buchist ein Crash-Kurs für däsverbreitetste Leiter-
deutschsprachige
plattendesign.

Handbuch
DasEaglePCB-Designer
Bernsteinr200Tr.a
Herben 2 cD-Rolvls
400seilen,
tSBN978-3,7723-4139-7 € 49,9s
Sieun9im lnternet- wwwfranzis.de
Besuchen
sind nichtsanderesalsvollständigekleineComputermit
Mikrocontroller
Re.heneinheit,Speicher, Schnittstellenund allem,wäs sonstnochdazLi
oehört. Die n€u;re Entwi(klung hat irnmer mehr Funktionenin einen
ileinenchip gebracht.Einachtb€inigeslcwi€ d€r im Lefnpaketenthalten€
ATtinyl3bietetbereitsso vieleMöglichkeiten, da55es fast unmöglichist.

Entwickelnsie lhreeigenenAnwendungen und damitpraktis(hlhf eigenes


gDezial-lc.sei es eine spezielleAlarmanlage,ein M€ssgerätoder eine
Robotersteuerung, mit denentscheidenden Grundkenntnisten können5ie
lhre ldeenumsetzen. Die in LefnpaketenthalteneHardwäIe ist zugleich
Entwicklungsplattform und Programmi€rgerät. Sie könnenalso w€iter€
programnieren
lüikrocontroller unddannin lhreschaltungeneinbauen'

Mikrocontroller
Lernpaket
+ Handlru.h
15Balteie+ Plalne+ suB-D9 PN Kabel+9oilvvare
rsBNe78-3-7723-it8ee-o € 49'95",,
gesu(hen de
Sieun6imIntelnet-www.franzis
Neugi€fgenügttMit diesemLernpaket scha{ftjederd€ne6tenEinstieg in die
mit USB.
Elektronik GanzohneVork€nntnisse - miteinfächst€n
Exft€dmenten
g€hteslos.
Heutesind die PCsn€usterGenerationnur noch mit USBausgestattet.
BeschäftigtmansichmitderUss-Schnittst€lle, manche
istdieKomplexitätfür
anwenderzunächstabschreckend. Wo män{rüh€rnochmit der parallel6n
oderseriellenS.hnittst€llede! PCsdie eig€neElektronikeinfachsteuern
und regelnkonnte,mussman si.h heute zwangsweise mit UsBausein'
and€rsetzen.Derin diesemLernpaket verwendeteFTDI-uSB-Baustein zeigt
UsB-Steuerungen
lhnen,wie interessante oderUs8-Daten€rfässungssysteme
zumT€ilauchohneMikrocontroller aufgebäutwerdenkönn€n.

mit USB
Experimente
Lernpaket
+ Söftware
usBadDts+ Paline+ 17Bauteie cD
+ Handbuch
sBN978-3-7723-so2o-r € 49,95.",
- de
Sieunsim Internet www.franzis
BeSuchen
ttlT*:,*m,*tl'''"'m"

In diesem8u(h l€rnenSiedie Entwicklung und denAufbauelektronis.her


schaltungen kennen.Lassen virtueller
siesichdabeivonden lvlöglichkeiten
schaltungenfaszinieren. lm vordergrundsteht di€ eigener
EntlJvicklung
€lektronischenS(haltungenmit einem PC'Simulätionsprogramm. Sie
entwerfen,untersu.henund optimierenzahlreiche Schaltungenausallen
Sereichen.Diezugehörigen Bere(hnungtformeln {indensie im Anhang,so
dasssie si(h -{alls nötig - lit ma(hen könnenfür s(hule,Ausbildungund
studium.siekönnenalleBausätze mit wenigen,gängigenBaut€ilentchnell
undeinfachnachbauen.

Schaltungen
Elektronische
+ CD-ROM
Zier 2007:160selten
Richard
ßBN 97A-3-7723
5717-6 € 19.9s
Sieunsim Internet-www.franzis.de
Besuchen
.. ;.'" .

s?SHHF-
lnhalt:
. tnhahderNolm|Ec61131
. Strukturein€sSPs-Projektes undSTEPT
nachlEC,in CoDeSys
. Datenrypen,Programme, Funkrionen
Funktionsbausteine,
. Verknüpfungs-undAbläufsteuerungen

nachIEC6'1131-3
SPSProgrammierung
Neinrich
Leoeß:20071350 CDROI\rls
Sert€n+3
e783-7723-s8os-o
rsBN € 39,95
sie unsim Internet- www.franzis.de
Besu(hen

Das könnte Ihnen auch gefallen