Beruflich Dokumente
Kultur Dokumente
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
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
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
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.
15
15
3
1024
I6 r024 32
512 or_,
'10
?-
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.
Siehabenhiertur z.weiMöglichkeiten:
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
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
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
. 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-
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
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.
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/).
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
(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
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
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
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
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
Abb.1.9:STK500-Dialog
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
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
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
Abb. 1.14:AVR.Studio
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
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
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
r El .;l+ =i=.=,{}Elld . 4r
1 2 3 4 5 6 7 B 91011 121314 Abb. 1.18:Menüleistedes Sirnulators
Ihr kogramm läuft also ,,ewig' in dieserSct eife.Das ist ein guter tulass, um die
Funktionen desSimulatorsein wenis näherkennenzulernen.
38 1 DieVorbereitung
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.!
imAVR"Studio
Abb.1.19:Simulator
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-
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
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
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:
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
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
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;
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
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
f7 'rl C*gl
derprogrammiersoft^'arc
Abb.1.27:EinsteLlung
s*:1p!F{'&ld:m@r.i+
-
n*Gtui.i
F'*!=9
tr +{k0
I
Abb. 1.28: CodeVisionAVR
Chip-Prc-
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
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
Abb. 1.30:Konfigurationsbits
1.13AVR-Fuie-Biß49
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
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:
rodevi.edara.heer
Berer phä e
!**r l[-:qql
Abb. 1.31: Fuse-Bits
in PonyProg2000
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
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.
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
$o010
$001E
$00sE
Datenspeicheß
Abb.2.2rStrukturdes
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-
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
Abb.2.3:Ubersicht
derzurVedügung
stehenden
Datenports
PORTA
# DDRA J
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|
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'
'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.
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)
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
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 ) ;
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
OhDenoch näher ins Detail gehenzu wollen, hier die direkten Anweisungenin C
ftu drei häuig veMendeteEinstellungen:
1r
2:
3:
5l
6l
8:
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-\' |
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ß.
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
cs02 csol
Abb.2.16:Taktquelle
desTirners
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;
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: ]
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ö
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
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.
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:
Glafik2:Zunandsändeiung
a!feinenextern€n
Pinbeijedem
Compare
Match
Abb.2.19rPd'rzipd€sWaveform
GenentionModes
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
Abb.2.20:Waveform
Gene€-
Wir setzeD
alsoCOM2I=0 und COM20=r.
In einemProgrammwürde dasGanzeso aussehen:
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
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
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:
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-
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
Abb. 2.26:AuswahldesADC-Kanals
Voliag€Fel€rcncevrjlhoxlehalmpaclorat AFEFpin
Internal2,56V
Abb.2.27:Auswahl
der Refercnzspa
nnuns
Abb. 2.28:ADLAR-Register
Abb. 2.30:ADC-Verteiler
\{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
': in ,",n'.o a
'o
"d d, u" r:
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...
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
r. WärtenbisdasEEPROMbereitist.
2. DasAdress-und Datenregistermit gewünschtenWertenbeschreiben.
3. DasEEPROMaufeineDSchreibvorgang einstellen.
4. Dntenübenahme (,,Schreiben")
vom Datenregisterin denEEPRoM-Speicher.
Analog dazudasLeseneinesBitcs:
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 )
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
. wdt disäbleO;
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 )
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.
3.2 DerBefehlssatz
Auf den folgendenSeitenfinden Sie die kompleite Auflistung aller zü Verftigung
stehendenAssemblerbef€hle.
3.2.1Arithmetische
undtogische
Operationen
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
3.2.3 Datentransfer-ODerationen
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
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:
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
,{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
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
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
Abschnitts:
DaslclzteBeispieldieses
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
3.4 Unterprogramme
NachdemSienun die erstenSchritteinAssemblerhintersichhaben,sehenwir uns
sogenannte,,Unterprogramme"
näheran:
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
1r;.","..
.,:;
ai;
-'
"l,lliu?'ii,
;"i'-
Leiderist dff ersteBlick auf ein Assemblerprogrammsehrveflvirrend.
Progrämmspeicher
Stack
RAr!|ENDAbb. 3.1: Aufbaudes speichers
704 3 EineEinführuiginAssenbtel
Stack
.!tgi:'-lbrail
T :-
I Untelprogramrn
1 I
+
I unterploqlamm
2 |
r-----------\---
derRücksprungadressen
Abb.3.2:Speicherurg
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
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
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
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.
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
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
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
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
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
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).
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: ]
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:
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 . * /
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: ]
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;
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
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 ] ] . ]
]
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
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
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
1: i r q e r d enie F u n kotni () i
5: return a+b;
724 4 EineEinführung
in C
9.
r0: DDRB =
l1: P O R T=B
12.
l3:
. 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;
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:
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,-
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
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
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"-
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:
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 ;
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
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
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?
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?"
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: ]
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:
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
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
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
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
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
I
5:
6:
8:
10. i = 5i
1l: p = 10;
T2:
131
j - o;
t5:
16: *k = 15;
17:
18:
l9:
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
5.1.3 Bedienung
undFunktion
DieseseinfächeProgrälnn meldetsich aD Begnrnmit einerWjllkommensnach
dcht. Siekönnen anschließendfolgcndeBcfel e über Ih1 TernnMlprogramn ein-
.up
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
(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.
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.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
abb.5.5:Däten
senden.
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:
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
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
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
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.
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
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
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
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-
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
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
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.
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
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
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)
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.
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
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
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
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.
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
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
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
6 Anhang
6.1 CD-ROM
Die folgend€Tabeüez€igt die Ordnerstruktu der CD-ROM:
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
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
Abb.6.2: DerASCll-Zeichensatz
790
6.4 Interrupt-Vektoren
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"*.
. 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
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.
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"
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