Mittermayr Roman
AVR.RISC selbstentwickeln Software Embedded AufCD-ROM: . AVRStudio4.13undwinAVR
Roman Mittermayr
AVR.RISC Embedded Software selbstentwickeln zuneßtenMal Ganzgtelch,obSledasHbn Mikoconkoller s{hreiben oder Hiren,s€itelnlgrnhhrur Sofr$rare" "Enbedded lnbrmatikünteilchten:Dle6es BuchhllfrlhnenbelmE{enell dnel{ln€ umlteEenmd\tut'refun lhrc6wk6€nsSlebekommen die EinRihrung ir dieSFächeAss€mbler ündl€nenaußedem Filrden vrichtigs€n GrundlagEn derC-Pogrammlerung kennen. Prdkflkerwidpdgnanterldä4woraufe5belderSofrwatewirklichankonmt enü/vlcldung aufAvR-Poue6soren lhnen Die8-Bit-l,likroconrlolleFserie vonATlVlELerlaubt eine rasche VeNirklhhung wßthiedenster ldeen und unglaublich Die R|Sc'Architeldur, der einheitliche Aulbau der Pojekte. schnelle Prozessoftmilie undnichtzuletztdieattaktiven kompletten machen diesen Contmller zur Prcisantebote furHobbyentwhkler richtisenWahl. DerAutorhatsichdaEufkonzenfiietda5BuchveFtändlkh prakrisch ka zuSesialten. Dieses WerkwnddenA'beibtisch g verhssen. EinNachschlägewerk fürlhrehoj€kt€rHäufi
Tabellen, Routinen werden klarund undbeknnt€"Fallen" e [irt. unleßri:Et denbse'rnd Eine umbngreiche onlireplattform beantwodei Frdg€n,die überdenUmfantdes8u(hsh 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
Be$rchon Sioun6im Inlongt wwwjranzls.d
Roman Mittermayr
AVR.RISC entwicketn Embedded Software 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.
*ft,
xonto ltuBiahms
rcp'od@a(
Adddqrö8Esqql.hmö€frlb''dffiq6r€lhUidufuiEßhafunqw*. toEdem tid f€hrer drhr qe aq6d'!€€6 Ds \daq und der ado, *hei s d dr+ärb evfdereiEc6 ie dh db jük&h
nel|end6bdRdaktdlsdl|G€trüq Emb.geJdgleÖdgaml)dn|odä' fmmnqds|-i!Enh.bas'6q|id''
O 2004FränzirVerlägGnbH, 35535Poing Ale Rechte vorbeh.lren, äuchdie de. fotom{h.nischen wiedersabe undderspeicheruns in e ekt.onischen Mediei. DasEßlellenuid vedreitenwn Kopienaul Papie':auf Daten$&emoderim r^remet insbeenderea s PDI st nü mit ausdlüdlider Genehmigunq d6 Ve aq696taner undwid widigenfals malrechnichverfolqr D e meislei Pmduhbez€ichnunq€n rcn Had- und Softwär€seie Fnmnnamenund Fkmenoqoi, die n d esem Welk qenännlweden, iind in d€r R€q€lqlei.hailiq au.h €inq€taq€neWarcnei.h€nund soll€n ah solchebelra.hlel weden. DerV€ aqiolqt bejd€nPrcduhbeuidnunq€nimWen ichenden Schrcibwpn der H€ßteler sats: folosatzPfeifela2166GräIemng art & d6i9n: w.idehfthzde Dtuclc Bercke(47623Kdelaer
tsBN978-3-77234107-6
)
Vorwort crnz gleich,ob Siednswort Mikroantrolbr hette zum erstenMal höien oder seit Iiinf Iahren ,,EmbeddedSoftware"schreiben:DiesesBuch hilft Ihnen b€im Erler nen, Umsteigenund Vertiefen Ihres wissens zu diesemThema. Es wird prägnant erklärt, worauf es bei der Softlyareentwickiungmit AvR-Prozessorenwirklich Die 8 Bit Mikrocontroiler-Serie von ATMEL erlaubt Ihnen eine rascheVerwirkli chung verschiedensterldeen und Projekte. Die schnelle RISC Architektur, der einheitliche Aufbau der kompletten Prozessorfamilieund nicht zuletzt die attrak tiven Preisängebotefür Hobbyentwickler lassen diesen Controller die dchtige Wahl sein. lch hoffe, dassIhnen diesesBüch rücht nur wissen verschafft,sondernauch Freude bereitet.Um Sofha'arezu entwickeln,braucht man einen klaren Kopf Gönnen sie sich eire Pause,wenn Sie einmal nicht vorankommensollten. Ich wünschelhn€n eineVielzahl an erfolgreichenund spännendenProjektenund steheIhnen tur Fra gen zu diesemBuch gerneüber meine Webseitehttp://M.avrbu.h.de zü Vertu-
cuns Buchwetfenuntel: SietollteneinenBlickaufdieWebseitezum http://ww.avrbu
AIe Preisein diesemBuch sind ohne Gew?i}lr.Bitte be.chten Sie,dasses sich bei wafenzeichenhandelt. vielen Produldnämenund Unternehmenum eingetragene 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 wahrenHelden 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
und Andenngen bereichert Die Schaltungenstammen Verbesserungsvorscblägen 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 1.1 Auswahl desMikrocontrotters 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 Einsatzgebieten und 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üollers zu beachten:Siemüssenzvi'ischen8 , 16 und 32 Bit Architekturen,der Anz-ahl und der benötigten I/O-Pins, der Größe des Fl,A.SH/SR-AM/EEPROM-Speichers 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-AVRIn 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 bereits{iir wenigeEuro. Stall",denA?m€ga128, Die ATMEL A\R-Serie gehört zü 8-BiI-RISC Prozessor-Iamilieund lässtsich im wesentlichen iD folgendcModelleunterscheiden: . 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 optinierturd..e\rll
Modell
F{ash SRAII EEPRO[,4l/O Pins r'JDKanäle Schnttstellen 15 15 3 1024 I6
r024
32 512
or_,
'10 ?-
Diekompleteubeßkbtrndeigieun
Serie Abb.1.1: !bersichtder AT|VIEL'AVR
/Pbdkß/pönm bb|. *P?rrnilv id=607
Die -ATmegaSerieist, von kleinen Anwendungenbis hin zu großenIndustriesteue rungen,besondersfiexibel einsetzbarDie verschiedenen T}?en bieten slerlei Konfiguration€n an. (Programmspeicher) genügendPlatztur Der ÄTmega8bietetmit 8 K! Flash-Speicher kleinereApplikationen,die ohneProblemeauchin C geschrieben werdenkönnen. Wird mehr Speicherbenötigt,bietetder mit s3 Pin bestücke(6a Pin Gehäuse) ATmegnl28mit ganzen 128 KB Flash-SpeichergenügendPlatz tur umfangreiche Software.
1.2 DasEntwicktungsboard Mit einemController alleinelasstsichnoch nicht viel erfinden.leder Mikocontrol ler benötigt eine mehr oder weniger umfängreiche Grundbeschaltung.Diese bestehtmeistauseinemQuarz und einigenKondensätoren.Damit können Siezwar Progranme im Controller äusfiilren, aber eben noch keine Programmein den Controlier schreiben. Dazu berötigen Sie ein Progrämmiefgerätbzw. ehen Progrämmieradaptef.Wenn Sie auch noch die serielle Schnittstelleverwendenmöchten, kommen ein Pegel wandler (tt"ischerweiseder IC: MAX232) und eineRS232Buchsedazu. Siehabenhiertur z.weiMöglichkeiten: 1 Sie bestellenale Komponenten tur die Grundbeschaltungund den Bau eines Progrrmmiergerätsbzw.käufendir&t ein Programmiergerät. 2. Sielegensich ganzeinfachein Entwicklungsboardzu. Ein Entwicklungsboärdverfügt meist über eine integrierte Programmierschnittstelle, mehrere Tastenund LEDS und bietet oft auch eine serielle Schnittstele. Damit ist esein praltischesKomplettpaket. Die Preisefür Entwicklungsboardssind in der Vergangeüheiterheblich gesunken, auch weil viele Pdvatanbieterbz$'. auch Unternebmenihre eigenenEntwicklungsplatinen z. B. bei eBäyoder ill den im Anhang erwähntenForenanbieten.
1.2.1 5TK500 ATMEL bietet ein gut durchdachtes,preistichvernünftig angesetztes Entwicklungsboard mit dem Namen STK500.Auf diesem Board 6nden Sie alle wesendichen Komponenten,die Siezur Entwicklung Ihrer Projektebenötigen.
72
1 Dievoüercitung
Abb. 1.2rATMEL STK500 Das Schönedaran ist, dasses möglichst flexibel einsetzbarbleibt. So kann man jeden Ein- und AusgabepindesControlers aüf eine 8-Bit-LED-Reiheoder einevon achtverschiedenen Tastenlegen.Au߀rdemunterstützt dasBoard f.st alle Controller der AVR-Serie(Details unter httpr//www.atmel.con/dp/resourceVprod docu ments/doc1939.pdf). Sie benötigendaher nür ein einzigesBoaid, egalwelchen -ATMELAVR Controller Sieverwenden. Die wohl sparsamsteVariante ist jedoch der Kauf eines STK500-kompatiblen Bo3ds oder gleich def Aufbau einer eigenenPlatine. Dazu können Sie sich die Links zu verschiedenenEntwicklungsboardsim Anhang ansehen.Viele w€rden ständigweiterentwickeltund durch die Intemetgemeindegepflegtund betreut.
1.2.2 myAVR Ein absolüterFavorit unter den Entwicklungsboardsist jedoch ein Projek mit dem Namen,,myAVR".Siefinden nlle Detailsdazuim Internet unter www.myavr.de. Sie bekomnen auf der Webseiteden komplefien Schaltplanplus Dokumentation, wenn Sie das Board selbstaufbauenmöchten. Außerdem wird auch ein Bausatz angeboten(ca. 39 Buro) bzw das komplett fedg äufgebauteEntlvicklungsboard (myAVR2 USB-Board,fiir ca.49 Euro). Inkludiert in diesemSet ist ein steckbarer UsB-Progralnmer(ISP), der d;rekt vom A\R Studio ausverwendbarist (A\R910 komprtibel). Dies€sBoard ist zwar hauptsächlichIiü die ContIo[€I ATmegn8/48/88/168 ausgegehören, iegt, da dieseabel zu den meistverwendetenModellen stellt dasseltenein Problemdar.
13
Abb.1.3:DasnyAVR2 USB-Board Siekörnen übei die Webseitepreiswelt auch alle benötigten Bauteileund Mikro controler bestellen.DiesesProjekt jst wirlCich gut durchdacht ünd bietet, außer dem Entwicklungsboard,noch eineReüe zusätzli€herHilfestellungen: . . . .
Ein sehrgut organisiertesSupport-Forum Softwareund Literatur Schaltpl?ine zu den Entwicklungsboards EMeiterungskadenftir Ihr Entwicklüngsboard(RealtimeClock,Temperatursensor,EEPROM,etc.) . KomplettePlojektemit Dokumentation (und fertig€Bausätze) . Aktuele Updatestur die Software Wenn Sie erst mit der Entwicklung beghnen, ist diesesAngebot empfehlenswert, Der Preisist moderatund esist dahernicht so schlimm,wenn dasBoarddurch eine Lrberspanlungversehendichzerstörtwerdenso te oder SiedasganzeBoärd dirck in Ihr Projekt integrieren woller (wäs beim STK5O0aufgrund der Grö߀ meist wenigSinn macht). Sie finden das entsprechendeDatenblatt mit einer umfangreichenFunttionsbe schreibungunter htQ://w$'wmylw.de/download/techb_myaw_board_20.pdf. Solten Siesich tu eh Board entscheiden,daskein ISP (In-System-Progiarnmhg) unteistiltzt, also das Programmierendes CoDtrollersohne diesenaus dem Board h€rausnehmenzu müssen,finden Sieetwasspäterin diesemKapitel entsprechende Hinweisezum Bäu soicherkogrammierädapter
74
1 DieVorbercitung
wichtig ist, dassSiesich eineflexibleund vor allen verlässlicheEDtwickluDssrungeKomponenten, dieSiedafürbenötigenl bungau6auen.Die wescntlichen . EinenMikrocontroller . Ein kleinesSetan Quarzenmit unterschiedlichen lrequcnzen(wird oft zur korrektcnErzeugüng einerBaudrate benötigtoderf,ir höhergetaketeÄnwendungen). . Ein Entwicklungsboard(am bestenmit ISP Unterstützung). . Einen Programmieradapter(ist immer vorteilhaft, vor altem dann, wenn das tsns{icklungsboard keine Programmierung erlaubt, oder Sie den Contrc er schonin ein fertigesHardMresystemeingebauthaben). . Ein IDE (Integrated DevelopmentEnvironment), also eine Soft'yareEnsdck lungsumgebung.Dazu bietet si.h natürlich dasvon ÄTMEL frei vefügbnre AVR. Einen C Compiler. Hier gibt es eine Reihekomnerziell erkiltlicher Produl
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 22pF C7 , C8 Kondensator Mikrocontroüer -{TmegaS Quarz3,686MHz (oderauchgrößer:4, 8, 16MHz)
7.i DieGruhdbeschaltung
PcsfFEsEr)
c1 l0On
Fco(aoco) Pc1(aDcr) Pc2(aDc4 Pca6Dca) Pc4(aDcr]sDA) Fcs(aDcrscL)
FDo(Pi(D) PEToaau4osc2t PDr0aD) PD2(NIo) ,^r iv Pm(Nrr) PD4üclJrol PD5(rrl PD6(ANO] PDi(AN1) armega 6
P B ro c r a l PB4ssloclBl P83tMos1oc2l PBr(Mso) F85(sc'!
Abb.1.4:Gflrndbeschaltung Achtung: Der ATmegr8(Lmdandere)sind im Auslieferzustandauf einen "internen TaIt" eingestellt.Er berücksichtigtdaher den exrernangehängtenQuärzbzw.Taktgebergar nicht. Um \on,,internen" auf,,eterDen" Takt ru schalten,müssenSiedie Irre Birs entsprechendsetzen.Dazu finden Sie dctaillierte Infornntionen etwas späterin diesemKapitel.
1.3.1Stromversorgung (VCC)von s V betrieben.Sie Der Almegaswird mit einerVersorgungsspannung körnen den Controllei daherentwederdirekt m;t einemregelbarenNetzgerätoder (9 12V) venor komfortabler(und sichererl)mit eincmbeLiebigen 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
K-. 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
FolgendeBauteilesind dafiir notwendig: . . . .
ICI: 5 V-SpannungsreCler 7805 pF (PoluDg Cl: Elko10 beachtenl) 100nF C2,C3:2xKondensator 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 überspannunc.
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 aberdie kostengünstigere Väriantew?ihlenwolen, seienfolgendein prar ftei erhältliche 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 einzelnen 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 denVorg:ingerndesSTK500,dem STK200und dem STK300,konpatibel.Man findet sie http://runril.de/hardware/avrisp.htnn Scott-FalkHübn erkläft auf seinerWebseiteden währscheinlicheinfachstenparallelen Programmieradapter.Er bestehtlediglich aus zwei Widerstinden und einem gewäh]fein Schnittstellenstecker. Als Programmiersoftware hat er PonyProg2000 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-/ITAGDebugger.Dasbedeutet,dassman diesesGerät direkt mit dem A\R Studio steuen und venvendenkann. Es gibt eine modifizierte Version, bestellbar als Bausatz unter httpJ/www. AuchdasProjektvon KlausL€idingerist eMähnenswert. Es handeltsichhier um einen AvRgro'koDpatibleD,serienenProgrammieradapter. Ebenfallssteuerbar vom AVR-Studio ist dieser Adapter eine preiswerte und einfache Lösung. http://uuw.klaus-leidinger.de/mp/Miko.ontroiler/AvR Prog/AVRProgram
18
1 Die Vorbereitung
1.4.3 USB-Programmieradapter USBptog Der USBprogist die attraktivstealler hier vorgesteltenLösungen.Entwickelt von Ben€diktSauterist dieserProgrammieradapterkompatibel mii dem AVRISPIr .II und somit auch direkt über dasAVR Studio steuerbar.Es gibt sowohl einen kompletten Bausatz(etwä 22 Euro) alsauch einen bereitsvomontieren Adapter (ca.32 Euro).wirklich intcrcssantan diesemProjekt ist, dassdie Firmwarefrei austäNchbar 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 (l0I/O Leitucen) SimplePort USBzu RS232wandler(ohneTreiber) mk2 Klon (in derEntwicktung) JTAGICE
MehrInformatioDen erhaltenSieunterhttp://www.embedded-projects.nev. 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 entworfen,der GuidoSocherhat einenSTK500koDpatiblenProgrämmieradapter 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 seinenProgrimlnierist ein UsB-Adapter, der ale AVR-CoDtrol adaptergenomner.Herausgekommen 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./odereinenhogrammieradapterentschiedenhaben,benötigenSienoch eine entsprechende Programmiersoftware.Die meistend€r oben vorgesteltenGefätesind bereitsmit dem AVR-Studiokompatibel. 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
20
--.':::r': , . 1, ' i ll ;, i: . l: . ;::1. : : i' ' 1 D i ev o r b e r c i t u i i :
.rr. :''
. Kompatibelmit - Microsoft@WindowsVista (32 bit) Microsofr9 Windows 9,NT/2000/XP
1.6.2lnstatlation desAVR-Studios Auf der beigelegtenCD 6nden Sie eine kornplett€VersiondesAvR-Studios.wenn Sie über Breitbandintemetverfiigen,solten Si€ einen Btick auf die ofdziel€ S€ite von ATMEL werfen möglicherweiseist schon eine neuereVersion erh:ildich (http://wuw.atmel.com/avrstudio/). Wichtig: Beror Sie dasAVR-Studioirstali€ren, müssenSie die Inställation desC Compilers durchJiihren. Hier verwendenwir den fiei erh:ildichen Open-Source Compiler AyRGCC,der unter Windows den Namen wiflAl4 trägt. Sie finden das InstallationsprograDmebenfallsauf der beiliegendenCD oder im Internet unter hup://winaw.soüceforge.nev. Die Installationsdateitur winAVR finden Sie auf der CD im Verz€ichnisSo/ivdre\ Wn],\'rR\. StartenSiedasSetupund lassenSieale Optionen auf den Standardwerteingestelt. Nach erfolgreicherInstallation können Sie das A\R-Studio Setup starten. Dies€s finden Sieaufder CD unter Softu/ e\AvRstudio4\. Auch hier können Si€ale Optionen unberüh lassenund eine einfacheStandard installation durch{iihren.
1.6.3 InstallationunterMicrosoft@ WindowsVista@ Solten Sie bereitsmit Windows Vista arbeiten,kanll es mit der aktuellenVersion desAVR Studiosüoch zu Problemenkommen. Siesolten daler auf jeden Fa[ versucLen, 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 Patch.Si€instälieren finden Sieauf der beigelegtenCD auch einenentsprechenden ehfach ales wie oben erklärt, tuhren iedoch ganzam Sclilussnoch den Patchaus.
(Altemativen) 1.7 Entulicklungsungebarg
27
Diesenfinden Sieauf der CD im Verzeichnisr\soiware\A\,ltlstudio4\SerricePackl\. Mit diesemPatch müsstedasbeigelegteAVR Studio auf allen Windows Versionen
(Alternativen) 1.7 Entwicklungsumgebung Esgibt natürlich auchAlternativenzum AVR-Studio:
1.7.1 WinAVR WinAVR ist die Windows Distribütion voD A\.RGCC,dem auf cNU basierenden Open-Source'A\TC CoDpiler.Mit WirL{VRwird nicht nui ein CoDpilergelie fert, sondern auc}l ein Progrnnmiereditor, eine Progrsmmiersoftwarefiir das ,,Flaihen" und eine C StaDdardbibtiothekinklusive guter Dokumentation. Details und Informätioncn linden Sieunter http://winavr.sourceforge.net/. SiebenötigenWinAVR zwar alsC-Compiler fit dasAVR Studio,können rber diese Di.tribrti"rrruuhol-neWR \Ludio\erwendcn Sollten Sie an der Verwendungvon winÄ\R interessiertsein, empfiehlt sich das Tutorial von mikJocontroller.net.Mehr da7rlunter hte://w wmikocontroller.net/
1.7.2 myAVR Workpad PLUS/5iSy AVR DasmyAVRProjekt ist sehr umfingreich und bietet daher auch eine eigenemächtige Entwicklunssumgebungan. Die Softwareist zwar nicht kostenlos,jedochpreiswert (zwischen 14,9sund 99 Euro,jenachVersion)erhäldich. Außerdemgibt esein gutsortiertes ForumalsSupportdazu.
1.7.3 Bascom AVR (hup://w.mcselec.com)bietereinenBASIC-CompiDie lirma MCSElectronics 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äldichenEntwicklungsumgebungbegonnen,die laufend erweitert wird Sie finden deDDownload 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 nev demNamenCDK4AVRerhältlich:httpr//cdk4avr.sourceforge
. uls?
.
.
.
.
- Softwarezum ,,Flashen"von Codein den Mikocontroller - UnterstützteineVielzablvoD lsP-Programmiergeräten Erhältlich uDter:http://savannah.snu.org/proiects/uisp/ AVRDUDE Die beliebtesteProgränmiersoftwarefür den AVR unter Linu (auch erhält lich tur windows) AkuelleVersion:http://savnnnah.nongnu.org/projects/avrdude/ GDB - GNU Debuggcr Zu findenunter:http://sources.redhat.com/gdb/ SimulAVR AVR8-Bit-Simulator - wcbseite:http:/Aavannnh.gnu.org/projects/simulavr/ AUaRICE Verbindetden GNU DebuggcrGDB mit demAVR ITAG ICE - Erhäldichunter: httpJ/avaric€.sourceforgc.nev
weitere Informarionenzur lnstallationder komplettenGNU-Tool-Chain(Entwicklungsumgebung){indcn Sie unter httpr//1'ww.nongnuorg/avrlibc/ Umfaryreiche Erklärungenin Deutsch unter user-manual/instä11-tools.html.
1.9 Einichten desSTKSOO 23 httpr//www.mikrocontroller.net/articles/AvR-ccc und htrp://$,ww.home.unü, ng.org/tjabo/aw/artikel0T.htrri. Eine weiteredurchausbrauchbareSoturäreträgr den Namen-Korfolleltdü und ist noch ein sehr juDg€sOpen-SourceProjekt. Die Applikarion wird von einer Entwicklergemeindelaufend erw€irert.Das Projekt nähert sich an dasA\R-studio an, äuch ein Debuggernufde bereits ir eine Testversionintegrierr. Wenn Sie atls, schließlichünter Linux arbeiten,solten Siesich diesesProjekt ansehen.Siekönnen die Software unter http://www.cadmrniac.org/projectMain.php?proiectName= kontrolerlab herunterlad€n.
1.9 Einrichten des5TK500 Im folgendenAbschnitt finden Sie Informationer zur Konfiguration des STK500 fiir die Programmierungund Kommunikation mir dem PC. Wenn SiedäsSTK500 oder ein kompatibles Entwicklungsboardbesirzen,sollten thnen die fotgeDden Schrittezu einem eifolgreichenStart verhelfen.
gurationdesSTK500 1.9.1 Ausgangskonfi Am Anfang ist es erforderlich,eineVerbindungdesIsP(ln-System-programmingl Steckersmit dem zugehörigenProgrammiersockeldesMikroconrrollers herzustet len. Die Grafit (Abb. 1.6) zeigt ein€n 6-poligen Steckermit der Bezeichnung ,,6 PinlsP-Heäder': Dorthin schicktdasA\rR Studio die zu prograDmierendenDaten. Die Darenmüs sen dann von di€semSteckerzum richrigen Sockelgeleiterwerden,da Sie ja verschiedeneT}?en der AVR-Seriein die unterschiedlichgroßenSockeleinsetzenkönnen.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-
EE - E ; ii ;Hr;-'-
B
rElrif=
;E
i-iiF-r
F E 2r.'
i*;ll----J i :i
L€O
-iE!.-.--ii LJ'iEä' It ii-i _
l-l
iiq-i*".."
LED
(tor Exl€mal Tsrge: onlyi
UserM anualbeschreibtdie einzelnen Abb.1.6: DieÜbersichtsgrafik aus dem5TK500 des Boards. Komponenten
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 StiftleisteRS232SPÄREmit den Pins PDOund PD1 von der StiftleistePORTDverbinden. Wichtig: Dies bewirkt die Verbindung desMikrocontrollers mit der seriellenRS232SPAREBuchsean der FrontseitedesSTK500.Obne diesenSchritt werdenSiekeineserielle Kommunikation zustandebringen.
25 (RESET)PC6 1 2 4 (RXD)PDO 2 2 7 (TXD)PDl 3 2 6 0NTo)PD2 4 2 5 (rNrl)PDs 5 2 4 (xcK/To) PD4 6 2 3 722 GND 8 2 1 (xrAL1/TOSCI)PB6 9 2 0 (xrAlzrosc2) PB7 1 0 (rl) PD5 1 1 PD6 1 2 {ArN0) (ArNl)PD7 1 3 (rcP1) PB0 1 4
t9 18 17 16 15
PCs (ADCs/SCL) PC4{ADC4/SDA) PC3(ADca) PC2(ADc2) PCI (ADC1) PCo (ADCo) GND AREF AVCC P85 (SCK) PB4(MrSO) P83 (MOSr/OC2) PB2(SS/OC1B) PBI (OC1A)
Abb.1.7:ATmegaS-Pinbelegung
mit demPC 1.9.3Verbindung Um das STK500mit dem PC zu verbinden,benötigen Sie ein normales,serielles Kabel.DiesessteckenSie am STK500in die Buchsemit der BezeichnungRS232 CTRL Sie ist ftir die Kommunikation desSTK500mit dem A\rR-Studioreserviert und kann dahernicht für Ihre eigenenProgrammeverwendetwerden.Dazu gibt es die zweiteserielleBuchse.
AVRProg... IC€50Upgrade... ICE50 Selft.st,.. ITAGICE mm Upgrade,.. AVRISP n*ll Upg{ede AvRüegonupgnde qrstomire... qptbns-. ShowK€yAssignments gLg-hl,lanager...
herstellen Abb.1.8:Verbindung mit demSTK500
26
1 Die Vorbereitung
NachdemSiedenMikrocontrollerin denentsprechenden Sockelgesetzt, dasserielle Kabel (RS232CTRL) mit dem PC verbundenund die Stromversorgung ftir das STK500eingeschaltet haben,könnenSiedieVerbindungmit demPC herstellen. Dazu starten Sie das AVR-Studio.Klicken Sie sich am Welcome-to-AvR-Studio-4Dialogvorbei mit der TasteCazcel.Nun suchenSie im Menü den Einttag Tools. Dort finden Sieein Untermenümit dem NamenProgramAVR.In diesemMenü klickenSieaufden EintragAuto Connect. Nun müsstenachein paarSekundenfolgendes kleinesFenstererscheinen: sfl900
PEsEmI F!$ I L""kBisI tu"a"c"dI B'",! I A,r" I Ea* oevce
17 EEs Dev@BeloePoorörnna l/ vea, Devceafte Pog€hmrg
T,sr--r----_-l
a Ino'rHErHel--
t.n""
I
I
EEFRO[I a ,, ,,. G InpL,iHExFire---
_i
v"iry .t:
I
n*o
I
...1 I
modead devbe pa.dmeteß. OKI
Abb.1.9:STK500-Dialog
Passiertdas nicht oder sieht Ihr Fensterandersaus (TitelzeilevielleichtConnect failed), stoppenSie hier und überprüfennoch einmal die Ausgangskonfiguration desSTK500.DasAVR-Studiokonntedannnämlichan keinemseriellenPort desPC dasSTK500erkennen.FolgendePunktesolltenSiedannüberprüfen: . Ist dasSTK500mit Stromversorgt? o Ist dasserielleKabelam STK500mit der BuchseRS2i2 CTRLund am PC mit einemfteien,seriellenPort verbunden? o Ist dasSTK500eingeschaltet? Siefinden einenStromschalter direk nebendem Anschluss fiir die Stromversorgung. Danebenist ein kleinesLicht,dasim eingeschaltetenZustandrot leuchtensollte.
. Sie 6nden noch zwei weitere LEDSauf dem STK500,di€ grün leuchtensolten. wenn Sie das nicht tun, könnte die Firmware des STK500beschädigtsein. lst dies der Fa[, schaltenSie dasSTK500äusünd drücken d€n SchalterPROGR4'41 w:ihrendsie dasBorrd wieds ehschalten.Danachwechselnsie ins Instalationsveüeichnis des ÄVR-Studios,dort in das Untelvelzeichnis ST(500. Beispiel: Program FiIes\,AtneI\,AvRTools\STI(5OADort starten Sie dann die Datei Upgradae{e.Nün mtisste die Applikation Ihr STK500wieder in den Auslief€nmgszuständbefördern.Nach einer weile ist die Iirmware wied€r intakt. Schal ten Siedäs Bo,]d dannchausund wieder ein die zwei LEDSsolten nun grün leuchten. . Unter Umsüindenbelegt ein anderesProgramm den seri€llenPo , den Sie fiir die Kommunikation mit dem STK500veMenden möchten.VersuchenSie daher einen anderenPort, wenn einer zu| Verfügungsteht.Und schließenSiealle Prcgrammq die möglicherweiseauf di€ serielleSchnitrrtelle zugreifen (Terminalprogranme, Handy'Software,PDA Kommunikationssoftwareetc.) wenn Sieden Fehlernicht finden können, versuchenSieesnoch einmal Schritt nir Schritt mit dem Manual desSTK500.Ansonstenhilft Ihnen auJjedenFa[ daslnt€rnet weiter. Ein Blick auf http://M.a!1büch.de wird Ihnen möglicherweisedie Lijsung bringen.
1.9.4 Flashen mit demAVR-Studio wenn Siedasoben gezeigteFenstersehen,hat dnsA\R-Studio di€ Kommunikation mit dem STK500erfolgreichaüfbauenkönnen. Siemüssennun im akiven Dialog noch Ihr A\rR-Modell auswählen,z.B. ATmegaB(sie\e Pfeil 2 in der Gra6l). AnschließeDdkönnen sie zum Testeinmal den Mikocontroller löschen,dazu einfach 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 entsprechendenTastenfinden 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 unberü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 mitgelieferten 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. die dazugehörige HEX-Datei von dei CD-ROM ausryählen. letzt 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 Programmierungkeine 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 Funktionstestnicht notwendig.
1.10.2Flashen desFunktionstests Um den Funktionstestin den Mikrocontoller zu flashen,müssenSiebeim myAVRBoardetwasandersvorgeh€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 dasangeschlossene myA\aR-Boardautomaüschgesücht,
30 Is solte folgenderDialog erscheinen:
qeqq | , -!1']- j
!"n
I
Abb.1.11:Progräm mierungdesmyAVR Boards Mit den nür folgenden letzten Schiuen können Sie das Testprogrammjetzt flashen: 1. Dfl.lcken Sie die TasteBro-se und w?ihlenSie das }lEj{-F1le .Funktionstest\my, Ar4? Ä?MEG/l8.he{von der CD. 2. Stelen Sie unten den richtigen Mikrocontroller ein. Im Auslieferungszustand ist diesderATmegas. 3. Diü.ken Siedie TasteP/o8lamim Absclmftr-Flasl?. Ihr Programmist nun geflasht. WenigeSekundenspätersolte die grüne LED äuf dem myAVR Boardschnel alterni€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, gebendemProdult die notwendige ICE50,ICf,200, A\R-Dragonund demSTK50O Praxistaugliclkeit.
1.11.1Schrittfür Schritt:Proiekterstetlen NachdemSie dns A\R-Studio installiert haben, sehenSie gleich nach dem Stafi einen Project wiärd. Drücken Sie dort die TasteNew P/oject,ers€heinteine Dia logbox,die etwaso aussehenkann:
Abb.1.12:Project Wizard
32
1 DieVorbercitung
ln dieserEingabemaskemüssenSie zuerst den Projekttyp auswällen (Assembleroder C Projekt).wählen Siehier ÄVR GCC,um den C CoDpilerzu verwendeD. Nun nüssen sie im rechtenEingabefeldno.h einen Projeknamen angeben.wenn Siemöchten,könnenSieden Speicherort lhresProjektsnoch ändern.KlickenSie anschließend Nerr DasfolsendeBild erscheintl
Abb.1.13:Auswahl des[4ikrocontrollers
wenn Sie einen bestimmten Debuggerwie etNr den AVR-Dragonoder das nkII velwenden,können Sie in diesem Dialogleld die entsprechendeAuswahl treffen. Die rne;sten Beispiele diesesBuchskönnenSiemit demAVRSimulatortesten. NachdernSie h;er enren Debusser/Simulator aussewäh]thaben, nüssen Sie abschließenddas entsprechendeAVR-Modell wäNen. Finden Sie Ihr Model nicht in der Liste,unterstüt4 der Sinulator dieseVariantenoch nicht. Die meisten Modelle sollten hier jedochgeführt sein. Haben Sie Ihre AusNa|l getroffen,bleibt Ihnen nur noch der Klick auf die Taste F'ral. Damit habenSieden Projectwizard abgescblossen und kurz daraufsollte sichlhre Entwicklungsumgebung enrge chtethabeD.
1,11 Soft arc'Entr'vicklung nit den AVR-Studlo 33 Ihr A\R-Studiokörnte nun etwasoäusseheD:
is!. atr.a:;:n-;;
j::;:r.::;:;i:::::i.:;:::
Abb. 1.14:AVR.Studio
Sienerden natürlich noch keinen Codesehenund unter Umständensiehi daseine oder andereFensteretwasandersaus.Der ProjectWizärd hat für Siedaskomplette Pmjekt mgelegt und dabeiautonatisch auch einigezusätzlicheDateienfür Sievorbereitet.Därunter{indetsichdasHäuptprogramm, daszu diesemZeitpunktnoch leerist.EstuagldenNamenIhresProjektes und hat die Endung,,.c':Ihr e tesPro jekt ist somit erstellt.
1.11.2Konfiguration desProiektes NachdemSielhr Projekt erstellt haben,müssenSieno.h einigewenigeEinsteliNl genvomehmen.Dazu gehenSieim Menü auf P/ .iectund dann auf dasUntermenü Confguntio opno'rr. Es sollte folsendes lenster erscheinen (siehe Abb.1.rs).
54
7 DieVotuercitung
Abb.1.15: Prcject0ptions
ln diesemDialog finden Sie links, vertiknl angeordnet,eine Reihevon Konligrrätionsmenüs.le nnchdem, welchesMenü Siehier auswähleD, sehenSieauf der rech ten Seitedie dazugehörigenEirNtellungsmöglichleiten. Wir benötigenlrier lediglichdasersteNIenüGererdl.Dort gibt esdrei Einstellungen,dic wichtigsind: . Deltceiwahlen Siehier dasAVR Mode , dasSieverwenden. . Frcqueq: Gcbcn Sie hier die T*tfiequenz des Mihocontrollers an. Diese Angabewird in Hertz (Hz) gemachtund beträgtin der Standärdkonfigürätion desSTK500meist3.680.000 Hz. Die AngabederTaktfrequenz ist tur vielezeitab hängigcRoutincnunbcdingtnotwendig,da der Compilerüber deDHardware aultau schließlichnicht Bescheidweiß. . OPftdizafior:Normderweisestehthier,, O0",dasbedeutet,dassder Compiler Ihren Codegar nicht optimiercn wird. Siesolten hier jedochin den meistenIü1 len äuf die linste ury Os" wechse]n.Mit dieserEinsteilungoptimiert der " Compilerlhren Codebestmöglich in Bezugauf die Größc.Dasist ein bckanntli.h knappesGut bei denDeistenMikrocontrollern.
1.11 Softwore-Entwicklung nit den AVR-Studio 35
Wichtig AchtenSier-oralem auf die EinstcllungOltimizdto,. Dcr Untersclied ^!is.hen,, O0" uDd,, Os" kanndaiin bestehen, dassIhr Programmohne Optimie rung 85yo des Progranrmspcichcrs bclegt uld mit Optimiemns auf 4,5o/o
1.11.3Kompilieren deserstenProgramms Um dic cin{,andfrcicfunktion desAvR'Studioszu testeD,ist es an der Zeit,das ersteftstprogramrnzx kompilieren.TippenSiedaherfolgendenQuellte{th däs Tc{tfcnstcr in dcr Mitte desAVR Studios: #include
{
whie (t) {
P Q R T- B 0 x F F i P O R T=B 0 x 0 0 1
l
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 wciteresZeichendifü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
36
'I Die Vorbereitung
einmal jemanden unterlaufen und oft finden Sie hicr cinc schnclleLösung Ihrcs Im Menü Bdld finden SieweitereUnteryunkte, von deneDSiejedoch in den aller meisten!ällen nur denersten,ebenfals3 ild,benötigen.
1.11.4Debugging: Dieersten Schritte mitdemAvR-Simutator Mit dem integrierten AvR-Simulätor steht Ihnen eiD mächtigesWerkzeugzur Ver tugung.Viele lehler lassensich im Simulator Schritt tur Schritt aufdecken.Seine Funktionist sehrumfansreich. AusdiesemGrundfolgthier nur ehe kurzeEintuh rung. NachdemSieIhr Programmkompiliert haben,können Sieden Simulator über das Menü De&rg und anschließenddem Untermenü Std/t De&rSgirg aktivieren. Es dauert nun einigeSekunden,bis der Simulätor startbereitist.
Abb.1.17:Simulator ist der SobsldSieeinengelbenPfeillinLsnebenIhren Programmzeiler erkennen, Simulatorbereit. Zur SteuerungdesSimulatorskönneDSiedieseMenüleisteverwenden: r El
.;l+ =i=.=,{}Elld
. 4r
1 2 3 4 5 6 7 B 91011 121314
Abb. 1.18:Menüleistedes Sirnulators
Hier einekurze Erklärung der einzelnenIcons: l. Stwt Debugging.DashabenSiebereitserledigt über dasHauptmenü. 2. StopDeltsgsin$ Hiet beendeDSieden Simulatorwieder. 3. Rrr: Mit dieserTastestartenSiedasProgrimm,jedochnicht im ,,Schritt-ftirSchritt" Modus, sondern frei laufend. DieseAustuhrung machr nur dann Sinn, wein SieBieälpoints definiert haben.Mehr däzuspätel 4. Pdrce Hier pausierenSieein mit Rl/, gestartetesProgramm. 5. RerrtiSetztdenSimulatorzüück an denStart.
.
1,11söft.wäi;:Eitwit!.itiig:ki.ir:däö;lvpisrp4iit:. 37
6. ShowNext Statement:wird h diesemBuch nicht behrndelt. Mehr dazu in der Hilfe desAVR Studios. 7. Step,rto: ScbrittweiseAusftilrung desProgrammcodes(siehedazuden folgen 8. StepOtet Ähnlich der TasteStqplrfo, mehr Informalionen le€iter unten. 9. StepOrt: wird im RahmendiesesBuchsnicht behandelt. r0. Ä r fo Crruorj Filhrt dasProgrammbis zu d€I Stele.us, an der Sieakue[ den Cursorplatziert haben. I l. Ärfo StspiÄhnlich der TasteR r, zeigt hier jedoch jeden einzelnenSchritt im Simülator an. 12. TWk Brcaleoint: Serztoder löscht einenBreakpointin der aktuellenZeile. 13. Remoeeall ProgamB reai?otnbrEntfernt ale Br€akpoirts ausdem Programm. 14. Qrirkwd.ri s.hälteldäsFensle'Qui(kw"r.h /ur Ltbemachung ron Variablen Im aktuellenZustandwurde noch kein Programmcod€ausgetuhrt.Mit den Tasten Fll (Stepbto) und F10 (StapO1,e/)können Sie nun Schritt für Schdtt Ihr Pro $amm austuhrenlassen. Der UnterschiedzwischenStepInto rllJd StepO./erbestehtd.rh, d.ss bei Stepl?to kein Pfogfammabscbnittäusgelassen wird. Egal,wie viele Unterprogrammeaufgerufen werden,der Simulator z€igt lhnen jeden einzelnenSchritt an. Im ceSensatz dazu sehenSie bei Step Orer lediglich den aktuelen Programmblock.wird eine Uncrtunktion nufgerufen,fühfi der Simulator dieseim Hintergrund komplett aus und kehrt dann wieder zurück in den aktuelen Progammblock. Dort bewegter den Pfeil ,lso über den tunlcionsauftuf hinweg und springt zur nächsdolgend€n Z€ile. Die Funktion wurde also im Hinteryrund ausgeftihft und der Simulator hat dieseFunktion still übersprungen(daherSfepO?er). Wenn Sie das oben angetuhrteTestprogamm schrittweiseaustuhr€n,werd€n Sie nach kurzer Zeit bemerken.dassder Pfeil nach Zeile 8 wieder zu ick zu Zeile 6 springt. Der Grund dafiir ist die while-Schleife.Mehr dazu im entsprechenden Abschdtt zur C-Progrämmierung. Ihr kogramm läuft also ,,ewig' in dieserSct eife.Das ist ein guter tulass, um die Funktionen desSimulatorsein wenis näherkennenzulernen.
38
1 DieVorbereitung
Eine tlpische Simulationsumgebungkönnte etwa so aussehen: ii avRstudid- tN:\uk6\Rom..\Docom.nk\avRsou(.CodBvrk.d\n.li..k,
) ) Jt
o
-:
3 .....
i1E € x '.:'
!6@
rrD.rrd€ sdlfrie
t
.
"ri.!!ll.€
.'
tDANALoGCOl.!PAFAToF i:sa .t 9 EXTERNAL_TNTERR TPT . 0TTMEF_CoUNTEF_C
)
F O F T B' ' P O R T B ] TCNT0- 2s6 - DURCIIÄEüFE./.
i T C N T 0 ' 2 s 5TCCRo = (1 4. C502)j
gllib"l
., ..r;=!=.=r) Elt,
ht
tURCfilAEUFE 50
IsR( TIllER0-0VF-vecr
--...tr8tr
r !r
, { , a . , r . ' e . r 1i = =
=S r-
TlllSI4 = (1 <{ TOIEo)r rr
trtE
OrMEF_couNrEF_r 2 oTTMER_CoUNIEF jtf lr{sK wtesg) - $rFR c138lc159l *25ft45) .$TCCR2 an241cr14 F)roln e4e13l OocR, - 9assR k22tk12: d3cl}'r) :t esrioF
trtr
trE !!!!!!-n trtrtrD--.. tr!!!!n!n !nt]n ü
: i:ü r 3P0RT3 =P0Fr3 s DDRB
&rst&r!) !riL&ri)
=PNB _{ POFIC
ls,d@
-,1
J-
trtrtrtrtr!!L !ütrtrtrtrtrtrtrtrtrtrtr.!
,rl-. .-......'-.:---:Jl avRsmubiof alto stopDed a
--DÜtrtrtrN trtrntrtrtrtr! n4trtrtrtrtrtr
Ln1?,col2
i- Nltl:l!,
imAVR"Studio Abb.1.19:Simulator Das wichtigsteFensterfinden Sie auf der rechtenSeite.Es trägt den NamenI/O Viewund siehtauswie esdie Abbildung|.20 zeigt. Hierin finden Sie die wichtigstenKomponentendes Mikrocontrollers,wie etwa Register, Interupts,A/D-Wandlerund vieTimer/Counter, Ein- und Ausgabeports, lesmehr. OffrrenSiehier mit dem PlusdenPunkt POR?B.Siesolltennun drei verschiedene müssen Registersehen:POR?B,DDRBund PINB.Bei einemAVR-Mikrocontroller - alsoob SiegerneDatenausgeSiezuerstdie DatenrichtungeinesPortsfestlegen wollen,könnenSiediesdurch benodereinlesenmöchten.WennSieDateneinlesen Wenn Ihr Programm PINB vortäuschen. dasAndern der ZuständedesRegisters die Zustandsänderung im Register Datenausgibt,sehenSiedirektnachderAusgabe
!h-N]9 grE 4dd,:t !IDA.IiALOGCOMPAFAToR j äsPl ! 9ETTERNAT]MEaRUPI J O ]]MER@UNTER-O J 6 IIMEF,@UNIETI
jOntmGIFTEA: _ !f ni,isx :l$TrtR !f TCCR2 O rrNr2 @0cR2 jf assR :rElsFoF iral usaRT j {3Tr/vl
l
0*33(0€) ü3qo6q e2q&$ tl211&.r.1) e?31or43) er2&1ä &3q0.5q
l3P0R13 rk131&3q *PoRr3 l).17(&34 S0DRB e1q&3o *PrN8 J :3 PORrc e15&39 l3PoRrc &1,{i{x3.ri soDRc er3{&33) sPrNC ! = 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:tllrelrd 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!
40
'I Die Vorbereitung
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,,step by step"durchden Codezu scNagen, Aus diesemGrund gibt es sogeun endlichan die vermuteteStellezu selansen. Ein Breilpoint ist einebestimmtc Stele im Code,an der die Progranmaustuhrung (im DebuggingModus)stopptbzv. pausiert,sobaldsieerreichtwird.Nehmenwir nocheinnal dasvorhinveMendeteTestprogramm züVeranschäulichung.
Abb.1.21:Breakpoint BewegenSieim AvR-Stuitio den Cüsor in die Zeile 8. Wenn Sie nun die TasteF9 drLicken(odcr im Menü Deü g den Unterpunk Toggle3/eaftpotnt ausw:ihlen), sehenSieeinen markantenroten Punkt auf der linken Seite.Ddcken Siedie Taste ein weiteresMal, verschwindetder Breakpointwieder.DasSetzeneinesBreakpoints ist also sehr einfach.StartenSie den Debugnodus, nachdemSie einen Brerlpoint wie üblich wird der Simulator vorbereitet,bleibt auf der erstenCodezeilestehen und warter auf lhre Befehle.Nun gehensie abernicht schritt tur Schritt durch den Code,sonderndrücken die TästeFs (-Rrs).Das Programmwird ntlll gesta et l1nd solängeausgefühfi,bis der Brcakpointerreichtist. Diesgeschiehtim Testprogramm schonnachwenigeralseinerSekunde. Ietzt ist lhr Programmpausierturd SiekönneDin ler Ruhedie Registerüberyrüfen. Sie können von hier aus nuch ganz normal weiterstcppen.Man setzt einen Breakpointoftmälsvor eine kitische Stelleund gehtdann Schritt tur Schritt durch denz-uprüfendenCode.
1.12 Sofrwarc-Entwickling nit den codAvision Avkc-conpikir
47
1.12 Software-Entwicklung mitdemCodevision AVR C-Compiler 1,12.1Überblick undBezugsquellen Obwohl dasAVR Studio ftei erh?iltlichist, einen Simulator besitzt und direk von ATMEL angebotenwiid, gibt esauch eine Reihevon sehrbeliebten,kommerziellen Tools.Eine der wohl komfortabelstenEntwicklungsumgebmgenist dei CoAel4dor?ArA C-Conrptler.DieseSofh{arewird von der Firma,,HP InfoTe€h"verhiebenund z?ihltUnternehmenwie Boeing,DuPont,Intel ReseärchSeatdeodei aüch die NASA Hier ein Auszugausden Features: . . . . . . . . . .
. .
Läuft auf allenwindows-Versionen(inkl. windows Vista) Editorunt€rstützt Sr,fltaaftigl,ltgfttagurdAuto-Indentation SchnelleFloating-Point Bibliothek tu die neuenATmegaChips ZablreicheCode-Optimierungsrouttnen UnterstütztInline Assembler Kompatibelmit dem AVR-StudioDebugger(erzeugtDebuggingCode) Kompatibelmit ICE200,ITAG-ICE und anderenAIMEL-Ern1 atoren Unterstützt alle wesentlichenATMEL AVR-Chips (es bestehenjedoch UnterschiedezwischenLight und StandardEdition) Biblioüekenfiir LCDS,I,C,RTC,l-wir€, SPI,Dela)$,BcD/cmy-Code,etc. AulomätischerProgramm-Erzeuge.(Crd€Wizard) setu innovativesTool zur Gen€rierungvon Quencodesnäch dem Einstellen der gewünschtenParameter (Timer-Zeiten,Portrichtungen,RS232Parameter,etc.) InHudiertesTerminal (RS232,RS422,RS485) Inldudierte Programmiersofware (Chip Pmgrammer) - STK500 und AVRISP kompatibel
Die Soltwareist in drei Versionenerh:ildich: . Evaluation: Demoversionmit.llen Funktionen,Codegrößeauf 2K begrenzt . LiCht FolC€DdeChips werden äktuel in dieser Version nicht unterstützt: ATmega,AT94KFPSLIC,AT9oUSBund AT43USB355 . Standard:Kompletversion, 1 lähr Suppoi & Updates Preislichsind beideToolsmoderatangesetzt(ca.150Euro tuf Sbndard, cä.90 [uro fiir Light), atsoauch fiir den Hobbyenh{icldernoch ersch'yinglich.Die EvaluationVersionbekommensieunter: httpt/rewwhpinfotech.ro/htmvdowriold.htm
42
1 DieVotuereitung
Es ist empfehleDswert,direkt mit deD entsprechendenDjstributor zu sprechen. Eire Liste der zuständigenUnternehmenfinden sie ünter: http://wlew.hpinfotech. rolmy html/purchase.htm
1.12.2 Proiekterstellen Na.h dem Start von CodevisionAvR treffen Sie zunächstäuf eine leere Entwicklungsumgebung.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 Entscheidung über die VeMendung desso genanntenCodewzards.BestätigenSiedies mit Yes.Ls öffhet sich nun ein kleineslenster:
Anähq conFralD'I aDc ll2c r\!€ I BrBdqsdI Aolädr{dnalioi tnip I Ptub I FlbmrrF! rms:
cro"r s*,. liiGääü-*l -ll nDckvr* F*;G;öd
roo'lilfi J6++r,------l
co.e""n,fo*n co"eäEs: li-h Abb.1.22rDerCodewizardAvR Hinter diesem unscheinbarenDialogfensterv€rbirgt sich dff mächtigsteTeil von CodevisiorAvR. Siekönnen mit diesemWzdrd alle Komponentenund Parameter Ihres Projekteseinfäch konfigurieren. Abschließendwiid daraüsaütomatischder entsprechendeQuellcodeerzeugt.Dies ist ein cleveresFeature- vor ailem dann, wern Siebedenken, wie viel Zeit die Sucheim Datenblattansonsten beansprucheD Normalerweiseempfiehlt sichhier dasDurcharbeitender einz€lnenRegisterkarten, beginnendmit der Einstelung desModells und der TaktFequenz.Auf jeden FaI
7.12 Softwarc-Entwicklungnitden
Codevision AVRC-Compiler
4J
werden Sic die RcgisterkartenCfup, Pdlb und eventuell Ttrrers benötigeD.Haben Sie alle Einstellungengetroffen,dann können Sie nun den fertigen Code erstellen lassen.Dazu wäIlen Sieim Menü lile den Pu,rkt ce, erate,Sayeand ,1.it. NachdemIhr Codegeneiiertmrde, sollten SiefolgendeUmgebungvorfindenl
Abb.1.23:codevisionAVR- 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 Compilieren die Datei gleichdirekt in den Chip flashenzu können. WechselnSiedazuin dasMenü hoject\ConfgureDon finden Sieeinen Registerei ter ]nit der BezeichnuDsÄtel Ml]fte. In diesemAbschnitt sollten Sie ein H?ikchen bel hosam the Chi, rf,achen.Dassollteso aussehen:
F * I c t m e r e ' I e s l o .ßk e l l q ü r { aI 17i;i;Gft;;i
i' s'deu*'"Pq
I rieq,dd.Ims.ncMFl.rorFr,rsrPßg,.hhrig
Abb. 1.24: Konflguration der Entlvicklungsumgebung
44
l DieVofuereitung
In dcr Registerkffte C-cloflpilef kann man nachträglichdas Chip-Modell ändern oder auchdie Takfrequenz.Hier gibt esz-usätzlich eine [instellungsnöslichkeit nit dei Bezeichnungopnnize fot Hierrit können Sie den Code en$\'eder auf die Größeoderdie Geschwindigkeit opiimierenlassen. Die weirerenEinstellungenkönnen Sieim Normalfall unangetastetlassen.
1.12.4 Programmcode erstellen NachdemSie mit dem füdewizard lhr erstesProjekt erzeugthaben,können Sie diesesohne weitereilnderungen direk kompilieren. Der ganzeInitialisieruDgscode Mrde automatisch erzeugt ünd ist lnüfPihig. Eine tole Eigenschaftvon CodeVisionAVR ist hier vor allem das automaiischeErstelen von Kommentaren{bei VerwendungdesCodewizards).Ein Beispiel; lEt
, ... ,.....
a3l 501 5rl
a.de Jr.tu. ,.r=i.a Nra -!a& trric:irdEi x:3 *!i!:. rr3rrrc-tr
lll rl:;:":,:"'-:1":'1.;1"". 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\Makeerledigcn. 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/ogtan the Chip. Dieselasle wäre ohne die vorher empfohlenenEinstelungen nicht sichtbar.Dasheßt, Siekönnen mit diesemBefeN direkt nach demMafteden fertig erzeugtenHe,.-Codein den MikrocoDtroller flashen,wäswiedenm sehrprakrisch weitei 6nden Sie in diesem Dialogfensterden Beicht der Kompilierung. wenn kehe Febler aulgetretensind, dann solten Sie die Zeilen No Arols und No Warttagr sehen.Am Ende diesesBerichts findet sich auch eine ldeine übersicht zur Speichergröße Ihres Progranms (Beispiel 17olodesvorhändenenFI-{SH Speichers sindmit IhremProgranmbelegt).
1.12.5 CodevisionAVR-Programmer CodevisionAvRverfügt über ein sehr äusgereiftes werkzeugzurn FlashendesProgrammcodesin den Mikrocontroller.DiesesTool funkioniert mit vielenvenchiede nenVariantenvon Progrdlr,nen.Die Binstellung,welchenHardwäreProgrammerSie verw€ndenwo en,könnenSieüberdasMenü Settirgs\Programmer etteldlen.
46
1 Die Vorbercitung
rffiFffiffi-i comumdüpd liö,
;l
V ilnesslg€ CKOva Fu* wriiie
f7 'rl C*gl
Abb.1.27:EinsteLlung derprogrammiersoft^'arc
Den ProgranraerselbsterreichenSieüber dasMeni Took\Chipprosranmer. s*:1p!F{'&ld:[email protected]+
h
F-;,nffi:l
sü.rq fjsä!-- lui sdii-,
€'ls*r
eegllutl g_?s!et $€-h
eßjr-i
n*Gtui.i
-
F'*!=9
tr +{k0
I Abb. 1.28: CodeVisionAVR Chip-Prc-
Hier die Vorgehensweise, um Ihr Progräm'n in den ConrroUerzu flasheD: L Filevo^d FLASH- WählenSiehier Ihre kompitierte HEX Datei aus. 2. wählen Siennschüeßenddasver.wendete Chip-Modell. 3. Prcgratn\Erase Chi! - DieserSchritr wird empfohten,da esmnchmat zu proble_ rnen beim Beschreibendcs ControUerskommt, wenn er vorher nichi explizit gelöschtwird. 4. DrückenSiedie TastePrograr,,,1ll Achtung: Solltensie die Fuse,Bitsverändernwolen, dann enpfi€htt sich auch hier dasvorherigeAuslesender akruellenKonfigurarion.Dies können Sieim program_ Der übcl den Menüpunkr Read\F&s,B,r(s) ertedigen.
1.13 AVR-Fuse-Bits47
1.13 AVR-Fuse-Bits wichtig: Andcrn Sic die Fuse-Bitsnur dann, wenn es für Ihre Anwendung unbedingt nötig ist. Normalweisemüssendie Fuse-Bitsnicht verändertwerden (außer beim AImegaSfiir den externenTrl
RSTDISBI, WTDON SPIEN CKOPT EESAVE
. rlooTszl . BOOTSZ0 . BOOTRST Low B)'te: . BODLEVIL . BODEN
. . . . . .
SUTT SUTO CKSEL3 CKSEL2 CKSELI CKSEIO
JedesdreserBits hat ehe besondereBedeutung,wie auch der abgekürrk Nam€ schonvermut€n lässt.WelcheWerte dies€Bits run bekommensollen, können Sie auJ1€rscüedeneWeiseherausfindenl l. Mit demAvR-Fuse-Calculator 2. Mit d€m AVR-Studio 3. Mit dem Datenblatt
1.13.1AVR-Fuse-Calcutator Der ÄVR-Fuse-Calculator ist ein ftei rcrw€ndbaresOnline-Projd( lon Mark H?l]nDot müßmerhng, zu finden unter httpr//palmar.r.sourceforge.net/cgi-bii/fc.€gi. senSiezuerstlhr Chip-Model auswaihlen:
Abb.1.29rAuswahl desModells AnscbließendsehenSie das Fensterzllr Einstellungder einzelnenKonfiglrationsbits:
Abb. 1.30:Konfigurationsbits
1.13AVR-Fuie-Biß49 In der erstenAuswahlboxfinden SiebereitseineFülle von Konfigurationsmöglich keiten. Es handelt sich hier um die AuswaN der läkqrelle. Der ATmegaSkommt mit einemvoreingestellten,internen Oszilator. In der Box stehtdazu: Int. RC Osc.I MHä Start up time 6 CK + 64ms SUT=101;defalrltvalue ICKSEL=ooo1 Um einenexternenQüa|z alsTrktgeberzu verwenden,w:iHen Siehier bitte: Ext. CrystavResonätorHigh Fr€q.jStart-up time: 16K CK + 64ms; I I SUT=I11 ICKSEL=Il Gerade bei dieser Einstellung passiert oft der Fehler: Programmiert man statt ,,1111" etwa ,,0000",lässt sich der ATmega8nicht mehl ansprechen.le nach Programmienoftware nuss klar sein, wie man das Fuses€tzt (,,0") und wie man es wiederlöscht(,,1"). NachdemSie nun also Ihre Einstelungen im linlen Bereichededigt haben,sehen Sierechtsden entsprechenden Konfiglrationsstatusder FuseBits (Low und High). Ein gesetztes H?ilrchenbedeutet DiesesFuse-Bitmüssprogrrmmiert werden (siehe kgende darunt€r). Wie Sie nun die einzetnenFuseBits progranmieren können, wird anschließend erklärt. Vorerst noch einige Informationen zur richtigen Konfiguration mit dem AVR-Studio.
1.13,2Fuse-Bits im AVR-Studio Um im A\R-Studio in die Fuse-Bit-Konfigumtionzu gelangen,mtissenSieIhr Entwicklungsboardmit 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 (ähnlich wie A\rR FuseCalculator).Das AVR Studio ist hier sehr einfa€hzu bedienen: Ein H?ilchen bedeutet,,prognmmie(1 kein H:
7 Die Vorbereitung
50
NachdemSic die !-useBits gesetzthaben,drückenSiedie TnstcP/ogrdtl,und das AVR-Studio kürnDrertsi.h um denRest.
in PonyProg2000 1.13.3 Fuse-Bits ilso nichtdasS'IK500 Prognmmicrddapter verwenden, SolltenSiee cn speziellen zur Andcodcl ein kompatiblesBoard,cmpiehlt sichdie SoftwarcPolr)'Plo9000 rung der Fuse-ßits. Dieses Prognn1m ist frei crhählich unter Sie finden die aktuelsreVersioDebenfalls http://wwnlancos.com/pps'in95.html. Hinweise zur Ver?eichnis Soft,//itrc\PanyPros2@0\. CD im auf der beigelegten untel im lnternet ADwendung von PonyProg.2000finden Sie Der luse'Bit Dialog http:/^fln{.nrikrocontroler.net/articles/Pory-Prog-Tutorial aus: von RrnyProg2ooo siehtfolgendemaßcn
T
i T fuorLock12 T Oüotlock1l T Boollockoz T AodLd.(t1 T Lock2 T L!+1
i uooriroiuoo,rr !;D;N r r;ac;N r . ,', r i*o.ri .,r*i ro,oorszr BDDEI'] T SUI] BOOLEVELIi
i7 CtigEL2 17 sLrrül7 aK5EL3 l7
rodevi.edara.heer phä e Berer
!**r l[-:qql in PonyProg2000 Abb. 1.31: Fuse-Bits
progranDiert die Füsc-Bits Acht€nSicauchhier unbedhgtdarauf,wie PonyProg rlso Häk hcnbedeutet,,programDiert': Ein gesetztes "0". NachdenSiez. B. mit dem AVRFuseCälcr ator die richtigenKonfigurationsbits haben,könnenSiedicsemitPoDyprog2o0o bzw.dxsHigh'und l.ow B)te festgclegt Ncnn Sie kein SlK500 kompntibles ;st lor alcm dann geeignet, PonyProg2o00 Link httpr//wlrw.mikmconlroler.net/articles/ venvenden. Unter diesem Itoard die für Programmieradapter, Pony-Proglltoriäl finden Sic einfacheSchaltplänc kompatibelsnld. m it Porlylro92000
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(rocontrollerdannalsonicht 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-Programmermöglich.
gesetzt? 1.13.5Fatsches Fuse-Bit IaIs esIhnen nun doc}l pässiertist, dasssie versehendicheir filschesFuse-Bitveranderthaben,kann die folgendeChecklisteweiterhelfen: . KönnenSiedie FuseBirsim AVRStudioodermit PonyProg2o00 noch ändern? wenn ja, reagiertzwar Ihr Mikocontrolier niclt, aberSiehabensich noch nicht Am bestenüberyrüfenSie hier einfachdie Einstellungen ausgesperrt. 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 .ind folgcndc gJdmmiergcrir. An.onslen I 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 ebenfatlssehrguterSupport)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 Conrrollerkonfiglriert wurde. So kann z. B. eine Zustands:inderungvon lo, auf hg,, an einem bestimmten Pin zu einemInterruptführen. Timer/Counter: Ein Timer/Counter ist im Wesentlichen eine Zihleinheir. Dabei können die ZäblgeschwindigkeituDd der Bereich eingestellt weideD. le
54
2 DerMikrocontroller
nach Kon6guration kaDn ein entsptchender Lrberlauf zu einem Int€rruPt tuh Einttusgabel€itungenr leder Mikrocontroller besitzt eine Reihevon ?ifs, die zur Kommunikation mit externen Schattungenverwendet werden können. Ie nach Konfiguration häben diesePins noch weitere Funltionen So können bestimmte Pinsz. B. (je nachlinst€lung) alsdigitale odef analogeEing:ingeoder a]sSPI-Interfac€dieneD.Hier eineUbeßicht: Digitall/Or Die digitalen Ein- und Ausgängestellendie Schnittstellezur ,,Außenwelt" &r. Mit den sogenanntenPorfr können Sie Zuständein beide Richtungen senden.So kann eh Poft z. B. zü Zustan&bestimmungeiner e{ernen Schaltung dienenund ebensoeinen Zustand an eine exleme Schdtung weitergeben.Ein Port bestehtnormalerweiseaus 8 Pins (vereinzeltauch nur aus 7 Pins oder weniger) und,je nachMikrocontrolerstehtein Port (oderstehenmehrerePorts)zur Veffigunc. Analog-I/Or Die meisten Milrocontroller besitzenaußer den digitalen Eir /Aus gangsleitungenauch noch analogeKanäle.Im Unterschiedzur digitalen Abtastung (also 0 oder l) wird hier meist ein mehr oder weniger genauerSpannurgswertan Eswird tlso nicht nur zwischenld und fiigh unterschieden Leitungengemessen. Man nennt die analogenEinder, soDdernz. B. die Spannung,,3,2V" gemessen. gangsleiirngenauch Jaar,ile.le nach Konfiguration können dieseKartile verschie deneAuflösungenmessen,alsomeistw€rte im Bereichvon 8-12 Bit liefern. Schnittstdlen: Manche der Pins besitzenzusätdicheFunldonen. Dazu gehören wie etwaRS232,SPl, SCI,I']C,CAN oder b€i grö bekannteSchnittstellenstandards ßeren Contollem eventuel sopr USB, Ethernet und PCl. Das bed€utet,dassje nachContoller nur bestimmtePins{iü die,,seriele Kommunikation" oder älsSPIAusgangoprimiert sind. Die Pinbelegungfindet man meist am Beginn desDaten blatts.
2.2 Speicher undRegister wie bereitserwähnt,wird der SpeichereinesAVR unterteilt in: . . . .
(FI,ASH) Programmspeicher (SRÄM) Dätenspeicher 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 ,,austauschbar". Ein Contro er kaDnim Durchschniftalsomindestens 1.000-matneu beschrieben werden. Die Art der ProgrammierunsdiesesSpeiche$ (daj kann entweder "Beschreiben") seriell oder paralel efolgen. Sie können damir relativ einfach, ohne Auftrennen einesbestehendenSystems,ein neuesProgrsmm ,,laden".Dies ist vor allem &nn sinnvoll, wenn es sich um eir Firmware Upgradehandelt,Sie also rhre in Velwendung stehendeBetriebssoftwareauf eineneuereVersionattualisieren. te nach Modell der AVR Familie findeD SieUnrerschiedeim zur Vefiigung stehenden 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 aufzeit entstehen,temporär aul Temporär deshalb,weil dieseArt des Speicherseine Spannungsversorgung benötigt, um den Znsrand zu erhalren. Interessanterweise wird dieserSpeicherbein AVR in drd weitereAbschnitregeteiltl . Registerbereich . Ein-/Aüsgabebereich . EigentlicherSRAM Bereich Die Aufteilung siehtman auch deudichin der crafik (Abb. 2.2). Beim Register-sowie auch dem Bin- ud Ausgabebereich hand€lt es sich um eine sogenmnte,,Spiegelung': Die Arithmerische (ALU),alsodasmarhena Losikeirfteir tischeHirn desProzessors, hat keinen direkren Zugrili auf die lin- bzw Ausgabepofl. undkJnnlediglir h äutdö 5P"AM Tug,eiien. Aus diesemGrund findet sich in dem festgelegtenBereichdesSRAMSdi€ Spiegelung der Portzuständc.Somit können die arithmerischenOperationen äuch mit diesenKomponentenarbeiten. Damit muss sich ein C-Entwickter im Normatfäll jedochgarnichtbeschäftigen. Im SRAMreirdaüchder Srackuntergebracht. Dabeihandehessichun einenSrapelspeic}ler,der anfangsdie cröße NuI hat. SobaldDatenin diesenSpeichertrans
50002
$o010 $001E
$00sE
Datenspeicheß Abb.2.2rStrukturdes feriert werden,passtsich d€I Stackan rmd wächstautomatis€hAber Achtung: Br wächst vom Ende des SRAMSin Richtung Anlang und nicht umgekehrt Mehr dazuim nächstenKapit€l über Assembler.
2.2.3 EEPROM DasEEPROM(Electicaly ErasablePrcgrarünableRead-OnlyMemory) wird auch oft ,nicht-flüchtiger Speicher"genannt. Das beschreibtdiesenSpeicherlYolJ am besten.Er beh?iltdie Dat€n auch über €inen stronrlosenZustand hinweg.wichtig ffjr di€senSp€ichertl? sind folgendeEigenschaften: . DasSpeich€rrvlöschen\on Däten dauert eflvazwis€hen2,5 und 4 ms. . Das EEPROM ,,überlebt" etwa 100.000Schr€ibzytrden, sollte däher also nicht unbedin$ alsRAM (bzw.Arbeitssp€icher)v€rwenda w€den
2.3 Peipherie
57
2.2.4 Register Der A\R-Mikrocontroller besitzt 32 Register die jeweils S-Bit-Daten aufirehmen könn€n. Die RegisterR26 bis R31 haben dabei ein€ besondereFunktion: Siekönnen 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 Speichersieht dasnatürlich gleich aus,wenn im Redster nun -FI 0A gespei Nach "au3en" ist. Mehr dazu finden Sieim Rahmender Assemblerprogammierungund in chert den DatenblättemdesjeweiligenControllers.
2.3 Peripherie Die Peripherie(s€hnittstellezur Umgebung)erlaubt dem Mikrocontroller, Kontalit mit der Außenweltaufzunehmen.Dieser Kontak karn in zwei RichtuDgenerfol gen:,,lesend" respektive"zum controlier"und,,vomCrntroler'l und,,schreibend", Der Kontak wird mittels sogenannts Leitungenoder Pirs hergestellt. Ein croßteil der Pins einesMikocontrollers steht Ihnen ftir bidhekrioDaleKom munikation zur Vertugug. Da in der Digitaltecbnik eineAuflösungvon 8 Bit eine Standardgrößedarstellt, wuden auch bei Mikrocontollein ieweils 8 Leitungen zusammengefasst. Siekönnen zwar diesel-€itungenindividuell steuern,habenaber direkteUnterstützungfiir einen 8-Bit-breitenZugdff was das im Detail bedeutet tllld wflum das sinnvoll ist bzw sein kann, wifd zu einemspäteienZeitpunkt noch erklät.
2.3.1 Ports Die Zusamm€nfassung von acht einzelnenDatenleitungennennt man einenPolr Ie nachAusfflhrungIhres gewähltenModells w€rdenSieeineunterschiedlicheAlzahl än Eir- und Ausgabeleitungenbzw mehr oder weniger Ports vorfinden. Die Ports werden alphabetischnummeriert (Ä" B, c, ...). Hi€r eine kleine Ubersicht der zur Ve#iigungstehendenPorts,je nach Modell:
58
2 DerMikrocontrcllet
Typ
Po(A
Poira PodC PodD PodE PodF PodG
ATTe9a85l5 Alq'e9a8535 ATmeqae a-reqa16 A-me9a32 ATmega64 ATmega128 ATTi.yll/12
8-ort 8-o't -
8-ort 8-bt 8-bit 8-bf 8-bit 8-bii E-bit 6-bt
Arriny24 ATTiny2S
8-bii 4-bit
8-br 8-bit 8-bit 8-bit
4'b t 8-bit
8-brl 8-brl Tbii 8-oit 8-b1 8-bt 8-bt
I bit 8-bil 6bil 8-brl 8-bil 8-bit 8-bit
I'bit 8-bit
8-bit 8'bil
s'bit 5-bji
oo,
Abb.2.3:Ubersicht derzurVedügung stehenden Datenports und Die Datenleitungen erlauben bidirektionale Kommunikation, also "Senden Empfangen".Hier gibt es aber eine kleine Besonderheitder AVR-Seie, die einem Anfüngergernedie eineoder andereStundeFeblersuchebescherenkann: oderLesender Dätenleitungen dem Controler die Siemilssenvor den SchreibeD Richtung angeben.Der Ursprung datur 6ndet sich in der Au{bauweiseder Digitallogik desMikrocontrollers. Für jedeDPort sibt esauch ein eigenesRegisteadasdie aktuelle Datenrichtüg speichert.DiesesRegisterist ebenfnls 8 Bit breit und trägl die Bezeichnungr,ara-rirection RegisteLodet k!lz DDR. le nachdern,welchenWert Sienun in diesesRegistereintragen,wird die Datenrich NeheineI stehttur,,Ausgang': tuDgbestimmt.Eine0 bedeütetimmer ,,Eingang", men wir folgcndesBeispielzur Veranschaulichungl . . . .
DDRA enthält den Wert Hex F0. Dieserwertsiehtbinär soaus:I1lI0000. PORTAbestehtausacht Datenl€itungen,die von 0 bis 7 numme el1werden. Das höchstwertigsteBit nr DDRA ist mit dem höchsten Pi]l an PORTA ver knüpft.
PORTA.Tentspdchtdem höchstenBit in DDRA, aisoeiner l. nun diePins,derenDatenrichtung auf,,Ausgang" und"Einsans"kon' Sieerkennen figudertist.
59
PORTA #
DDRA J
Abb.2.4: DieAufschlüsselungin einerGrafik.
guration 2.3,2 Pull"Up-Konfi was passiertnun eigendich,wenn auf einer Datenleitungder Wert 0 oder I aüsgeg€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 dasEinlesendesZustands:
AVR
Abb.2.5:Pull-Up-Konfisuration
60
2 Det lllikrocontolle|
iso,ist derZustandgenaudefiniert.Er wenn dieTastegedrücktwird (also"leiteDd" beim Einlesenden Wert 0 was abeawenn Sie auch v Daher bekommen betägt 0 (bei eirem aktivierten iDtemenPull In diesem fall die Tastenicht gedrücktwird? Up-widerstand) liegens V am Eingangan, wasdig;tal dem Zustand I entspricht wäre der Pull-Up nicht vorhrnden, würde der Zustand komPlett undefiniert sein' Grafik'alswider Man kann sichdiesenPüll-Up,etwaso wie in obenangetuhrter vorstellen. desCoDtrollels ständ,,innerhalb" wie erkentrt der Mikrocoltoler möchte?
nun, ob man den internen Pu[-Up verweiden
Dazu nüssen Sie zuerst das Datenrichtungsregisterauf ,r''rga"g schalten(0x00). ADs.hließendbeschreibenSie dasPort Resistcrmit dem wert 0xII (bzw.wenn es Pin handelt,setz€nSielediglichdiesenPin auf l)' sichnur un eiren einzelnen Ein trrerrer Pull Up machtnatürlichnur dann Sinn,wennSieDateD,,vomPorf' lesennöchten.Dennhier mussein definie er Zustandan denLeitungenänliegen'
DDRX PoRTx Pllrup
Beme.kung
oxoo
oxoo
Nein
Der Portist
OrOO
OXFF
Ja
'hochohmlg(Tri€täte)
Der Portlä$l de. Stromübe.den inlernenPullUPil eßenweonam Elngang löw'anliegt.
oDRr. 3* ir ar.Fn! | rr i\,irut r chrs..,[ta')
desDDRundPottRegister übefdieZustände Abb.2.6:Übersicht wenn Sie in Ihrem Projekt eine LED ansteuernwolen, stehenIhncn hierftü zwei zur Möglichkeiten(Detlils unter: http://w mikocoDtroller.net/topic/66109)
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.gesLhalter und 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 Mikocontroller verbinden. Sie schließendie LED also nicht gegenVCC (wie in Möglichl€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 dennPORTD.o(PDo)dientzum seinerganzenFunktionals8-Bit-Portverwenden, 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 2
5
GND
2A 27 25 24 23 22
GND
19
PB5(SCK)
15
P83 (MOS/OC2) PB2(SSIOC1A) PBi (oc1a)
a
( T 1 )P D 5 12
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-BitPortsmehr 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 verwendet. Das LED an PDo steuernwill und gleich?€itig die serielleSchnittstelle wüfdewegenDoppelbelegungnicht tunkionieren.
2.4 Interrupts Normalemeiseverarbeitetder Mil
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 diesesEreignis 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 Interrupts 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 überhaupt 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
(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", (ausder Si€htdesControllert. und ,,Empfang€n" "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) PC2(AOCA PC3{AOC3) rc46DC1VSOA) rc5(ADC5/SCL)
AGND AREF AVCC
zzpc7tFi
PB7(XTALZIOSCA
vcc
GND
PO0(QJXO) PUfi/O) PD2(NIO) PDO(NT' PD4(XCK40)
tc1
c1C2+ lC3 c2-
GNO
T1]N T1OUT T2]N T2OUT R1OUT R1IN R2OUT R2IN
püi;,'iöj PO7(A|Nt PBo(rcP) PBr(OC1A) PB2(SSIOCI S) PB3(MOSt/OC2) _PS4(M|SO) PB5(SCf0
Abb.2.10:Grundbeschaltung der seriellenSchnittstelle
2.5.1 Konfiguration Sie können je nach Wunsch eine beliebigeBaudrateeinst€llen,das Kommunikationsprotokoll 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 normalerweiseeinen der folgendenWertei 1.200, 2.400, 4.800,9.600,19.200, 38.400, 57.600 oder115.200 bps. also dem Tak, verändertsich auch die Berechle nach Prozessorgeschwindigkeit, nung dieserBaudrate.Die Technikervon ÄIMEL habensich dazu eine kleine Formel einfallenlassen,die so aussieht: UBRR= (Prozessortakt / 16/ Baudrate)-i
66
2 DerMiktoconttoller
Däs Eigebnisdieserlormel übergeben Siedeln Controler zur KonfiguratioDdei ßaudrat€.Dazu \-erwendenSiedie RegisterUIiRRH und LßRRI. Min sieht schon, dassessich dabeium ein 16-ßit Registerhandelt,da esein Higfi-Byte und ein Zolt ryte gibt. Dazu müssenSieaho dasErgebnnder Fornel h ein H,g/' bm. ein lorBüe rerlelen. ln C lurrrred} crdr .o du*ehen: BAUDRATE 192OA P R O Z E S S O R T A1(6T0 0 0 0 0 0 ( ( P R O Z E S S O R T A K T / 1 6 / B A U1D ) )R A T E ) I ] B R RF O R M E L 5: 8:
U B R R=L
(I]ERR,FORM E L8 ) ; >> ( L ] 8 RF RO RE L ) ;
Als NächsteslegenSiedie Ube ragügseinstellungenfest.Das notwendigeRegister biertur heißt UCSRC.Mit diesemRegisterlegenSiez. B. fest,ob essichum enre s).nchrone oder eineaslnchroneUbertragunghandelnsoll.Dazuein Auszugaus dernDatenblattdesÄTmesaS:
A b b . 2 . 1 1U : CSRC-Register
Wichtig: Das Bit URSTI muss immer auf I gesetztsein.Ansonstenwird ein ganz programmiertorehr Detailsdazuim Datenblatt). anderes Register Die folgendenEinstellusen könncn daher (unter anderem)mit dem UCSRCRegisterkoDfiguriert werden: . . . .
USARTModl1s(asynchron,synchron) Parity (Disabled,Enabled/EvenPndty,Enabled/OddParity) StopBit (l-Bit,2-Bit) CharrcterSize(ZeicheDgröße 5 bit, 6 bit, 7 bit, 8 bit, 9 bit)
werten: Hier einekurze übersicht mit den eDtsprechenden USART-Modus: . Asynchron:UMS[I-=0 . Slarchron: UMSEL=1
2.5 DieserielleSchnittstee (USART/R5232')67 Paritla . Disabled/ No Parity:UPMI=0, UPM0=0 . Enabled/ EvenPärity:UPMl=r, UpM0=0 . Enabled/ Odd Paity: UPM1=1,UPM0=1 Stop Bit: . r Bir USBS=() .2-Bit:USBS=I Charact€rSize: . 5-bir UCSZ2=0,UCSZl=0,UCSZo=0
. 6 bir ucsz2=0, ucszr=0, ucSZO=1 . 7-bit:UCSZ2=0,UCSZl=1,UCSZ0=0 . 8 bir UCSZ2=0,UCSZl=l, UCSZ0=l . 9-bit UCSZ2=l,UCSZr=r,UCSZo=l In den meistenAnwendungenfinden SiefolgendeKonfiguration: . . . .
As).nchroneLßcrtragunC CharacterSizevon 8 Dit 1 StopBit No pariry
OhDenoch näher ins Detail gehenzu wollen, hier die direkten Anweisungenin C ftu drei häuig veMendeteEinstellungen: 1r 2: 3: 5l 6l 8:
Hiermit sind die Llbeüagungsparameterfestgelegt.Als NächstesmüssenSie sich entscheiden,ob die S€hnittstellenur senden,nur empfangen- oder beideskönnen sol].In den meistenF?illenv.ird eineKommunikation in beideRichtungenverlangt. Dasverintlvo liche Registerhiertur heißt UCSR3.Äbb. 2.12zeigt eineDarstelung ausdemDatenblatt.
68
2 Detlvlikrocontroller
ffi".""R.""m,8ffi Abb.2.12:UCSRB'Register Iklevant sind die Bits AXEN und ?XÄN, also Receiler Eflable lnd Trafls't1ifter ein Erdbld.EiDei in diesenBitsschältetdiejeweiliseKommunikationsrichtung in Cl Hier ein cinfaches Codebeispiel 't, / / E m p f ä n süenr dS e n d ee -rvi rt s\ lcr h i alt€u | PB- . P-\'
Unrer UmstäDdenwollen Siebeim EmpfangeinesBytesper Interupt b€nachrich' tigt werden.Daskönren Sicebenfallsin diesemRegisterfesdegcnDazuveMenden Siedie Bits RXCI' und T,{c'Il , alsoRuetueConpleteInterrupt EnablenI,.l nansflit Eine i in diesenBitsschaltetdie Interrupt-BenachrichtiInterntptEnable. CotnpLete gung ein. Hiermit habenSiealle relcvantenDinstellungcnfiir eineerfolgreicheVer erledigt. wenduDgderserielenSchnittstelle
. UBRRH/UBRRL züständig(16 Bit). ist filr die Baudrate . UCSRBdient zunl Einschaltenvon Scnderund/oder Empfüngerund der lnter . I Lsßc leg dr'ÜberrrdsLrrg\pd'Jmcrer le.r. Abschtießendnoch ein Beispielfür cire q?ische Initialisierung' wie man sie in den meisteDProgrammenveMendenkann: t. : 3:
loörin. a. ,o.r -,. qo.:.e rlPt B6DDAIL 10200 # 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 )
void setup_uart() 5: 6: { -F ö Bauodöö /t ( UART = ( c h a f ) S E T T I N>G> 8 ) ; 8: L-rBRRu U B R R=L ( c l r a r ) ( U A R T - S E T T I N G ) i 9: 10: a L,o;no" il: = B( r < < R X E N ) ( I < < T X E N ) i \2: l.lCSR 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 TrnnsDasSendenvon Datengestaltet sichsehreinfach.Esgibt eiDensogenannten 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ß. DatäRegistcr Enply)-Bit überpd VordemSendenmüssenSiedar UDRE(USART fen.wenn derwert vonUDREI ist,kannder TransmitButrer(dasUDR-Register) diesesBir über wiederDatenaufrrehmen. Siemüssen.lsolorjedem Sendevorgnng prüfenund wnrten,biscsdenZustandI annimmt. Zeichenin dasUDR'Register. Der ConAnscbließend schreiben Siedassewünschte trollerversendet esund setztdnmchUDREwiederauf l. Hier eineC-FunktionzumVersenden e'nes7-€ichens: 1: 2: 3. 4: 5: i; 8:
v o i d u d r t p u t c h a r ( u r s j g ncehda rc ) I / / l l a r t e rb i s B u f f e rb e r e i t l h i l e ( l b i t i s s e t ( I C S R IAD, R E ) ) ; / / S e n d e.n. . = c; UDR
Ähnlich tunltioniert dcr EmpfangeinesZeichens.Sieprüfen, ob im Empfangspuf DäzubenötigenSie fer schonein Z€ichensteht.wenn ja, könnenSiees auslesen. wiederdasRegister UCSRA.Indiesem!i]l prüfenSiejedochdnsBit R{C (USÄRT ReceiveComplete).Hat dicscsBit den Wert l, befinden sich Daten im Empfangs puffer.DiesekönnenSieebensowiebeiln SendeD mit dernRegister UDRäuslesen. Es sibt diher auch zwci Möglichkeiten für den Empfang:Blo*irg Mode und No, so lnngc,blsein Zeirlociirg Mode.EntwederSiewater in der EmpfangsÄlnktioD (Blocking), chenenpfängenwuide oder Sieschauennur kurz in den Puffer, "ob dennschonein Zeichenda ist" (Non Blocking).Hier beideAnwcndungen:
2 DerMikrocontroller
70
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 , , ,' ö - - " _ " e t / u c 5 P r .D \ !h ..b
Non Blocking-Mode: 1r 2: 3l
d )i int uart,getchar(vo 1. / / 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 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
5: 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 etc. zeit,einesSynchronimpulses 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. Modus (CompareMode) kann man den Timer bis zu einem In einemspeziellen 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 unterschiedlicheKonfigurationen.Ein Blick in dnsDatenblati ist daherunvelmeidlich ,{le folgendenBei-
,r
.
'
.,:..,. ,:;::2i:6,;4tf6iltöi.idt: , 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, (CornparcRegiste4 unabhängiges 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
2 DetMikrocontrollel
72
0 2.6.1 8-Bit-Timer/Counter vor: Um diesenTimer/Counter zu verwenden,gehenSiefolgendermaJien (Clock) I . Einsteilen derZäNfrequenz Interrupts 2. Konfigurierendes des,,Startwertes" 3. Einstellen 4. AIe Interrupts,,erlaüben" 5. StartendesTime DerVorgangSchitt für Schritt: Die Clock wird mit dem Register?CCROeingestelt:
Abb.2.15:TCCRO Register DieseTabelleäusdem Datenblatterklärt die vorhändenenMöglichkeitenl cs02 csol 000 001 010 011 100 101 '1 11
KeinClock Timergestoppi.
clk = Pro2essortakt/ 64 clk = P.ozessorlakl / 256
10
clk = Proze$orraK/ 1024 anT0 pin{FalrinS EdSe) clk - Exl cl@ksisnal clk= Exl cl@ksiqialanT0 pinlRisinsEdse)
desTirners Abb.2.16:Taktquelle Siealsodie Quelleder Clock(intern/ Anhandder BitsCS02,CS0l und CS00legen Teiler fest.tseieinem 16 MHz-Quaü und einen Tei extern) und deDgewüDschten ler von 8 würde dcl Tim€r/Counter mit einer Frequenzvon 2 MHz zählen. TabelleGieheoben).Fürden wichtig: Fürden 16-BitTimer/Counterlgilt dieselbe (siehe jedoch gibt Konfigurationstabelle es eine eigene 8-Bit Timer/Counter2 Datenblau).
Als Nächsteswird ein Interrupt konfrguiert. wenn der Timer überläuft (also 256mat getickt hä0, stoppt der Prozessordie Austuhrung des akudlen PrograDms und springl an einebestimmteAdresse.IederArt von Interupt (Timer, RS232,etc.) ist eine bestimmte Speicheradrcsse zugeordnet.Diese nennt man auch ,,Internpt Für dasAktivieren desTimer 0 - Ovetflo14Interrupts veNenden Sie das Register flMSK (Timer/Counter Intenupt Mask Register).Dassieht so aus:
Abb.2.17:TIMSK-Register
Hier interessiertvorerst nur der Zustand des Bits ?OIE0 (Timer/Counter0 overflow Interrupt Enable).Diesesmuss den Wert I enthalten,um den Interupt zu .ldvieren. ln C könnte dasetwaso aussehen;
bei welchemStartwertder Timer zu zäNenbegirnt. Siekönnen nun noch fesdegeD, Ein 8-Bit-Timer/Counter zählt nomaleMeise von 0 bis 255 dur€h und erzeust dann einenÜbedaüf bzw.ein€n Interrupt. Siekönnen den Timer ab€r auch späterstarten lassen,also nicht et{a von 0 weg, sondern z. B. von 200. Dies ist sinnvol, denn bei einer Zählfrequenzvon I MHz würde erstnach256 Schrittenein iJberlauf stattfinden.Daswäre eineFrequenzvon etwa3.907Hz, alsoalle256ps. SetzenSie den Startwert auf 246, benötigl der Timer noch 10 Schritt€ bis zum Uberlauf.Mit einer Z?illfiequenzvon 1 MHz wäredasein 100-kHz Tald. regisDiesenStärtwert setztman, irdem dasRegisterICNTO alssogenanütes "Zäl jedem Zähldurchgangum eine Einleit ter" dient. Dieseswird vom Timer mit erhöht. Bei 2s6 fiihit dies dann zu einem itberlauf (Äufrufen desInterrupts, Neusta bei 0). Sie solten dasRegisterdahervor dem eigendichenStarcn desTimers Wichtig: Sie dürfen in der Interrupt-Rorltine nicht vergessen,das Z?ihlregist€r immer wieder auf den g€\,rünschten Startwertzu setzen.Nach dem Ubedaüf wi.id€ der Timer sonstwieder bei 0 beginnen.Meh{ dazuir ein€mspäts angetuhrtenBeisprelprogramm.
2 Det llikrocontrcllel
74
ßevor es nun endlichlosgeht,müssenSi€dem Controllernoch den Aufruf aler Interrupts ,,erläuben".Normalerweisehat der Controller in der StandardeinsteluDs dä esbesonders zeitkitischeProgrammnicht die Erlaubnis, Interruptszuzulnssen, teile gebenkönnte, die Sie auf gar keinen fal durch eineDInterrupt unterbrechen desControllers.Mit deln C Befell lassenwollen.Das ist die StandardeinstelluDg dnli seio könnenSieihm nitteilen,dasser abjetztaIe lntermpt zulassen Unter Umständenwollen Siedie Unterbrechungdurch lnterrupts in minchen ProDannempfiehltsichderBefclldi0. srammteilenabcrnicht zulassen. seio - Erlaubenal1erInterrupt Aufrufe ab diesemZeitpunkt cli0 Verbietenaller Interrupt-Aufrufc ab diesemZeitpunkt Beispiel. MehrdazusehenSiein einen nächfolgcnden In dem Nun könnten Sie den Timer startcn,doch das ist bereitsseschehen. Moment, in dcm Sied€m Timer eine Cloci zuweisen,beginnt er bereitszu laufen. Wenn Sie den Timer wieder stoppenwolen, weisenSie einfachden Bits CS02, TCCÄ0)je eine0 zu und derTimerpausiert. CSol,CS00(zu findenim Register bei einem8 MHzHier ein Beispiclzur Generierung eines625 Hz-Rechtecksignäls, aimrz. . p".. .t. . t: ".. q." , t...6 3; 4: 5l 6t 7: 8
#include #include / * 3 I 2 5 A l z Z ä h l t a k t q e t € i l t d u r c h ? 5 ' 1 , 2 5 At u * / / * A b e f : l P e r i o d e = z u s t ä n d eH i s h + L o v lD a l r e r6 2 5 N z * / d o e i n e D . o L l' a | |
' P T ' ' 1 - R00V r _ / " . .
r0: ll: t?. 13: 15r o:
I
/ * z u s t a n da n P 0 R T iBn v e r t i e r e n* / P O R T=B - P 0 R T B j /' * 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 * / N-0
18: 19r 1r ro 20: { ? 23. 2al
.oid) '\'0-
o
DPrra
lr'
/ * 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 + / \0 i . o0-'
2.6 Tiner/Counter 75 26: 2/-, 28: 29: 30: 31r 321 33:
/ * 1 r t € r r u p t E n a b l e ,f ü f 0 v e r f l o w T I M S (= ( 1 < < T 0 I E 0 ) ; / * A l l e l f t e r f u p t s e r l a u b e n* / / * E n d ' l o s s c h l e i *f e/ !hile {1) i
35. 36: ]
In Zcilc 4 bindcn Sie das notwendigeHexderfilefür Intettupt-Handling ein. Diese DateibenötigenSieeigentlichimmer,wenDIhr Programmrnit Interruptszn trul In Zeile i0 beginnt die InterrupGRor.ltine(nach neuer Schreibweise).Der Inhalt dieserRoutinebestehtim Wesendichen auszweiAktionen: l. nö Invertierer de' Porl/rburdivunPurlB 2. Den Z?i}llerwieder neu laden, drmit er nicht bei 0 beginnt (und somit 256 Durchläufebis zum überlaufbenötigenwürde).Hier startetder Zählerbei,,2s6 Durchläufe".Inuserem Fällalso231.Ab hierwerden Anzahlder gewinrschten nür noch 25 Durchläufebenötigt, um dieseRoutine dasnächsteMal zu starten. Bei einerZähfrequenzvon 31.2s0Hz (= 8 MHz geteiltdurch 2s6) entspricht dasenrer,,Uberlaulfiequenz"von 1.2s0Hz. Im Hauptprogrammfindcn Siedie Initiatisierung desTimers.Anschließendbegibt (und zähltnattirliclr;m Hintelsrundden sichder Controllerin eineEndlosschleife Tinerue hoch). Achrung: Die wohl wichtigsteAnweisungdesgaüzenBeispielsfindet sic]l in Zeile jetzt alle 30, nännich sdia).Mit dieserÄnweisungteilen Siedem Prozessormit: "Äb Dinse: Interruptserlauben!". Eshandeltsichhierwnklich urr zrei verschiedene l. SiemüsseD nn Register TIMSKdeDInterruptfiir dengewünschten Timer/Coünter einschalten.Diesbeziehtsich dahernur auf den Timer selbst. rnitteilen: Ab 2. AußerdemmüssenSiegenerel in Ihrem Programm dem Pro?.essor jetd sindallelnterlupts,,erlaubt'.Dasgeschieht mit derArweisungseiQ. Hier werdeDanr häufigsteD Fehlergemacht.DenkenSie alsodnrän,wenn etwäs nicht so funktioniert, wie essollte.
76
2 Der ll4i ktocontroller
2.6.2Output-compare-Mode Der Timer/CounterbesitztJedochnochetwasnehr Powera1sdasreine,,Hochzählen" einesRcgisters. Sie könnendem Zählerz. D. sagen,bis zl1welchemWert er hochzählen soll. Siemüssenalsonicht mehr auf einenÜberlaufnach 256 (bzw warten,soDdernkönnenschonfrühereinenInterruptauslö 65.536)Durchgängen Der Timer zählt in diesemModus dasZählregisterwie üblich hoch und vergleicht den wert ständigmit einer ,,Obergrenze".Ist dieseGrenzeerrei.ht, wird ein Iuter' wiederbei 0. Durch dnsstänrupt ausgelöst uDd der Timer beginntanschließend nennt sich dieserModus däner auch dige "Compare-Mode". "Vergleichen" Wichtig: Beim ATmegaSvertugt der Timer/Countero über keinen CompareMode (beim ATmegal6jedochschon).Timer/Counterl(16 bit) und Timer/Counter2 (8 bit) haben einen Compare-Mode.wir verwendenftir die Lrkltuung daher den Ttuer/Counter2. Um den CompareMode eirzustellen,folgen SiediesenSchritten (die UDters.hiede sindfett geschrieben)l zur normalenTimerkonfiguration lclo"l) I. Fin'relien dcr/ählfrequenz 2. Konfigurieren des Comp.re-Match-lnt€ruprs 3. Einstellendes,,Startwerts" 4. Output-Compare-Regisrersetz€n(OCR2) 5. Alle Intenupts,,erlauben" 6. StaitendesTimers Die Schitte 1, 3, 5 und 6 sind nus dem vorigen Beispielbereitsbekannt. Folgend gehtesum die neuenEinstelungen. mit dem desZählregisters Bei einemCompde-March,alsodem Übereinstimrnen Sie das Regis ausgelöst lterden. Dazlr benötigen ein Interrupt ,,Vergleichsregister", ler TIMSK, dasIhDennun schonbekannt ist:
ffi,."" abb.2.18:T I\lSKRegist€r
2.6 Timer/Countet
77
Hier intcrcssiert uns das Bit OC.IE2 (Output Comparc Match Interupt Enable). wie üblich bewirkt hicr eine 1, dass der Interrupt aktiviert ist. Das würde in C so
1:
| '1. - \
'
Nun nüssen Sie eigentlich nur noch festlegen,bei welchem Vergleich$lert der Inteüupt ausgelöstwird. Dizu verwendetnan däs RegisterOCR2.Danit wird der gewünschte,,Triggerwert'gesetzt. Sehenwir uns ein ganzesBeispieldazu anl 1: 2:
# i n c l u d e< a v r l i o , l ' r > # i n c l u d e< a v r / in t € r r l p t . h >
4: 5: 6t 7: 8: 9. r0: l: 12i :
t S R ( I I r , 1 E RC2o [ P v e c t ) I n v e r t i e f e n* / / + Z u s t a n da n P O R Ti B P O R T=B- P 0 R T B j 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 T1-\ -0: l nt noinr'o d) 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 0 C R 2= 0 x 0 A ;
15. 16: 17r 18r 19: 2A: ?1. 2t: 241 ?51 26: ?7. 28: 29-. 30: )l:
/ 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 * / T C C R=2 ( 1 < < C S 0 2 ) ; / * 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 / * A l l e I n t e r r u p t s e r l a u b e n* / s e iI l ; / * E n d l o s s c h l e i f*e/ llhile (1) | return 0j )
Achrug: Sie düfen nicht vergessen,am lnde des hterrupts (siehe Zejle 10) das Register TCN?2 auf NuI zurückzusetzen. Das passiert nicht autonatisch. Anderer seits würde der Tiner/Counter dann bis zum Üterlauf weiterzählen
2.6.3 Output-Compare-Mode fürWaveform Generation Siekönnen mithilfe desOutput-Compare-Modesnoch weitausmehr erledigen.Der Controller unt€rstützt z. B. das automatischeSetzenoder lnschen einese)'ternen Pins bei einem ,,CompareMatch". DiesesFeature€ignet sich hervorragendfur die einfacheGenederung eines Rechtecksignalsoder auch eines sogenänntenPWM (Pulsweiten-ModuliertesSignal).cmfisch würde dasso alrssehen: G6fik l:TCNi2ähk von0 biszuOCR2hoch(Compare Match)
Glafik2:Zunandsändeiung a!feinenextern€n Pinbeijedem Compare Match Abb.2.19rPd'rzipd€sWaveform Genention Modes Es gibt vier Möglichleiten, ein Rechtecl$ignalzu eüeugen: L Normal-Mode (siehevorigesBeispiel) 2. CTC Mode (ClearTimer on CompareModus) 3. Iast-PwM-Mode (SchnellePulsweiten-Moddierung) 4. Phasenkorrekt€rPWM-Mode (langsameralsFast-PWM-Mode)
. . 2.:6.rincilcöintel. 79 2.6,4 Rechteckignat mit CTC-Mode Beginnenwir mit der Generierung eines einfachen Rechtecksignals mithilfe des CTC-Modus. Dieser ist sehr praktisch: Der Timer zählt so lange hoch, bis es zu einem Compare-Matchkommt (TCNT2 entspri€ht OCR2). Dann fithrt der Contioller eine definiert€ Zustandsändenngam OC2-Pin aus (b€i ÄTmega8,Port B, Pin 3) tllld setzt den Zibl€r automatischwieder auf 0 zurück (TCNT2=0). Somit z?ihltdieserTimer immer rür bis zum Compare-W€rtund ftihft dann eineÄktion Mit dem wert in OCR2 und der Z?ihlgeschwindigkeit(Betriebstaktdurch Teiler) wird also die Länge einer halben P€riode des R€cht€cksfestgelegt(siehe crafik Dazu müssenwi€der einigeBits im RegisterTCCR2gesetztwerden:
Abb.2.20:Waveform Gene€-
Die Bits WGM21 und WGM20 legen den Wav€form-cenemtion-Modefest. Wir veffendenhierModus2, alsoCTCMod€(wcM21-1, wcM20=0). Außerdemmussdem Controller noch erklärt werden,was er bei einem CompareMatch zu tun hät - also eine steigendeoder ein€ faltendeFlankeelrzeügen.Dafür werdendie Bits COM2 I und COM20 benötigt. Theoretischist esja meist egal,ob man mit einer steig€ndenoder einer fll€nden Flank€beginnt. Aus diesemGrund ist es auch am besten,wenn der Contoller in unserem Fall eiDfach ,,toggelt", also den Zustand mit jedem Compare-Mätch umdreht (von 0 auf I und umgekehrt).Dazu ein kuzer Blick auf die entsprechenden Bits:
Nomal pon opealion, oc2 di$onn6cl6d.
Toqoleoc2 on conparc March Cl€arOC2on comparc Malch Sel OCz on Compaß Match
Abb. 2.21:Zustandvon OC2beieinemComDarc-Match
2 DerMikrocontroller
80
Wir setzeD alsoCOM2I=0 und COM20=r. In einemProgrammwürde dasGanzeso aussehen: Pb
J: 4: 5: 6. /: 8: 9t t{]r 11: I2: L1: Lr|
ö."
q.o
'/ rin l,de ., r/io.' # i n c l u d e< a v r / in t e r r u p t .h >
F I r
r !4odo
int maif(void) / * ! i c l r t i g . 0 1 2 P i n a u f A u s g a n sqc h a l t e f l * / D D D B ,0 E E . /'
- . D 2- v a r f o - . d .i o : L l oe . o . r ' ö r q . ! vodö (o o lton Puv) 'ro
18: 19. 2A: 22: 23: ?4, 25: ?6: 27t 8: )
4 o!i
:
. o r0 q , 6 v a r .
l' I
*/ T C C R= Z ( 1 < < l , l c l 4 z l )I ( l < < C 0 M 2 0 ) ( 1 < < C S Z I ) ; -0.pu''o'p."'!4o 0 C R 2= O x A A i
hrpi
C\ l-0 dÄ'
/ + [ n d l o s s c h l e i f e* / while (r) ; retum 0;
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 PWMSignalsieht z. B. so auswie in Äbb. 2.22dargestellt. ln der funktionsweise ist diesdenvorherigen Beispielen sehrähnlich.SieleseDfest 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
!1
12
tl
ll
}1
12
){
Ll
= OCR2 1.Flankenwechsel:TCNT2 = 255(Überlauf 2.FlankenwechselTCNTz )
Abb.2.22rPwfi,l.Signal Clock(und denentsprechendeD Teiler)bestimmt.Wo innerhalbdieserPeriodeder ersle llankenwechselstattfindet, wird mittels desWerts in OCR2,ä]so dem Compare Match Wert, festgelegt.Die FlaDlGwechseltdasa{'eite Mal dänn automatisch beim Uberlau{ Zu den Bitkonfi guration€nl Als Erst€smussman wieder den waveform-Generntion-Modesetzen.Däzu wieder ein kurzer Blick auf die Bits WGM2 I und WGM20 im RegisterTCCR2:
Abb. 2.23:Waveform-Gene-
Därausergibtsich:WGM21=r, WGM20=1. wie üblich werdennun die Birs COM21 und COM20 gesetzt.Hier ist jedoch Achttrng geboten:Für den Fast PWM Mode gilt eiDeandereKonfigurationstabelleals vorher(sieheAbb.2.24). Esgibt nur die Möglichkeiten,mit einer steigendenoder mit einer fallendenFlanke zu starten.Wir wollen mit einer steigendenFlankestarten,daher wäh1enwir die werte: CoM2r=1, CoM20=r.
82
2 DetMikrocontrcller
Normal pod ope 6lion, OC2 dlscon n€cled.
clearoc2 on compareMatch,sel oc2 at BoTToM, SelOc2 on compar€Mal.h,clearoc2at BoTToNl
lvlatch Zusiand vonOC2beiUberlaufund Compare Abb.2.24: wenn TCNT2=0 dann befiDdet sich der Zustand 0 auf Pin OC2, we'rn TCNT2=OCR2dannderZustandI aufPin OC2. Ein lauffahigesProgramm dazuist:
i:,
I
d,q"or'\!orar
n'lroq
P!woop
l, ;i; ::::.ll li;! ,", 9, '" '" "" ' :, '|
,?,,
t::
t,,
Lc(io:o. =0 DDoB ;
Dnd.'Aued,e.-"
el,
P9"B-ooo,
i,,i:i""1:;"::i;:r:""' [.. -:ll3;"0'?01?-,
i?' ,,,liil,.,,1,,--,,",, .\.0,.r2,. 1 i01!0rl I/.c.'
l:"
f:,
;, iZ:
vät /' ourp.' onpare
o ra 2 a ,. a . .
;l ;:';" """" r e t u r on ;
re
;
rrN =0, 0
2.7 Analog-/Digitalkonverter83
2.7 Anatog-/Digitalkonverter Der ATmega8vcrfügt über einen l0-Bit-ADC, der mit einem analogen8-Kanal Eingangsmultiplexerverbundenist. Somit kann der ADC eine der acht verschiede nenEnrgangsspaDnungen messenund die Spannung in eineml0-Bit-WertdarstelÄusdiesemGrundwürdeDdannz. ß. s V am Eingangdem 10 ßit wert (Dezimal) V am Eingangwürde in den digitalenWert 0 konvertiert ,,1.023"eDtsprechen.0 werden.wem dasein zu großerWenebereichist, der kann den A-iD Konverter auf eine 8 Bit Auflösungumstellen(wasin den meisteDFällenau.h komplett äusreicho. Dcr Abhuf einerlD-Konvertierung siehtfolgendermaßenaus: 1. Konfigurieren derADc'Regisier 2. Konvertierung starten 3. FertigeWerte ausdenRegistern ADCH undADCL auslesen
2.7.1 Konfigurieren derADC-Register zweiverschiedenen Betdebsmodi wählen: SieköDnenzwischen . 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ächsgeben. len Befehlzur Konvertierung Beghnen wir mit der Auswabl des gewünschtenEingangskanals.Der ATrnega8 wir dasRegister ADMLD(: unterstütd8 Kanäle.Dazr beDtjtigeD
Abb.2.25:AD[,lUX-Register
84 Die Bits 0 bis 3 sind fü die Auswähl desgewünschtenEirgangskanalszüständig. Hier die entsprechenden Wertedazu:
Abb. 2.26:AuswahldesADC-Kanals
Es existierenjedoch noch drei weitereKonfigurationsbitsim ADMUX RegisterDie Bits REFSIund ÄEIS0 erlaubendie Konflgurntion der ,,Referenzsp.nnung". le nach Iinstellung können Sie mit REFSI u:rd REFSobestimmen,mit welcher Referenzverglichenwerdensoll. spannungdie Eingangsspannung z. B. 3 V entspricht eine Eingangsspannung von etwa 3 V lst die Referenzspannung schondem Marimum, also einem l0-Bit-Wert von 1.023(bzw.255 im 8 Bit Modut. Es stehenlhnen datur drei Mögli€hkeitenzur Auswahl:
AREi lnl€nal V,€rllrned olf
AVcc wilhexternalcapacitor al AFEFpii Voliag€Fel€rcncevrjlhoxlehalmpaclorat AFEFpin Internal2,56V
Abb.2.27:Auswahl der Refercnzspa nnuns ünd REFS0=1(Veqleich mit der Im Normalfall wählenSiehier die wefte -RAFSI=O Versorgungssprnnung, alsomeistens 5 V). Das letzte Konfigurationsbit trägr den Namen ,,ADLAR",was ausgeschrieben ÄDC Left Adjust Registetbedeutet.Die Funktion diesesBits besteht darin, das 10-BitErgebnisentwederlinks oder rechtsin den RegisternADCH und ADCL auszurich ten. Darunter kmn man sich kaum etwasvorstellen.Abhilfe schaft dieseGrafik in Abb.2.28.
85
Abb. 2.28:ADLAR-Register
Wenn SiealsoADLAR=r seten, frnden Siefast daskomplette Resultatim Register ADCH. Die erstenbeiden Bits werden im RegisterADCL gespeichert,verändem das Ergebnisaber lediglich um ma-ximaldrei Einheiten (Binär 11=3). Viele Ent wiclder entscheidensich daler tur ADLAR=I und lesen nach der Konvertieruns nur den Wert im RegisterADCH aus. Der W€rt in ADCL würde ohnehin kaum zu einer wesendichentuderung des Ergebnisses tuhren. Man nennt diesenBeüieb auch ,,8 Bit Modus", weil man sich nur um die höherenI Bit desResultatskümmert. Nun widmen wir üs dem letzten Konfigurationslegister{iir den ADC, dem Register,4rCSRÄ (ADC Contlol and Status Register).Mn diesem Registerlegen Sie noch ein paär letzteEinstellungenfest und können außerdemdie Steuerung(Start, Stopp)derADc-Einheitübernehmen. SosiehtdasRegister nus:
Read//vhle nilialvarue
AOEN
ADSC I
ADFR
Rry 0
R4/1] 0
R/l/V
ADIF
ADIE
I ADPS2
ADPS'
AO
0
Abb.2.29:ADCSRA-Register Beginnenwir ganz rechts.Die erstendr€i Bits, ADPS0,ADPSI und ÄDPS2,legen den Vo eiler fest.Sie können damit bestimmen,mit welcher Geschwindisleit die A/D-Konveitierungen stattfinden sollen. Sie gehendabei vom Systemtaktaus,der durch einen bestimmtenVorteiler h€runtergeteiltwhd. Abb.2.30 zeigt eineTnbele mit den entsprechenden We en. Hier würdendieWerteADPS2=o. ADpSI=0.ADPS0=0einenVo(eilervon 2 fesd€ gen,alsobei einem Sysremtaktvon 8 MHz ehe Konvertierungmit 4 MHz Taktver-
85
2 DerMikrocontroller
Abb. 2.30:ADC-Verteiler
DasnachsteBit in der Reiheist dasBitÄD/E (ADC InterruptEnable).Wie auchbei vielen anderenEreignissenftLhft enle abgeschlossene A./D-Konvertierungzu eiren Interrupt, wenn das gewünschtwird. Um den Interrupt zu aktivieren, müssenSie diesesBit nuf i setzen(und generclldie AusfiihruDgvon Interrupts erlauben). Am Bit 4,ADF (ADC Intcrupt Fläg),erkennenSieeineabgesc}lossene Kon\.crtierung. DiesesBit trägt den Wert 1, wenn eine Umwandlungerledigt ist. Sie müssen däherfiir diesesBit zru KonfigurationkeinenWertsetzen(alsoauf0lassen). Bit s, AD-FR(ADC FreeRünningSelect),bestimmtnun den Betiiebsmodus des ADC. Bei einemaktiviertenFree-Running-Modus liefert der ADC ständigneue Resultate. SolltenSiedaswünschen, set,€nSiediesesBit einfachauf L Bit 6, ADSC (ADC Start Conve$ion), liefert dasStatuignal fiir den ADC. Wenn Sie i.n diesesBit eine I schreiben,beginnt der ADC die Konvertierung.Haben Sie den Iree RunningModusgewäh]t,reichtdaseinmaligeSetzendiesesBitt. Im Si,rgle Conversion-ModushingegenmüssenSie nir jede KonvertierungdiesesBit erneut \{it Bn 7, AD,N (ÄDC Enable),sind wir beim letzten und wichtigsten Bit ange ]ängt.DiesesBit schiltetdeDADC ein (l) oder aus(0). Nicht zu vemechselnmit demßit 6 (ADSC) denn wenn ÄDEN nicht denWert i enthält,passiertgar nichts. DasBit ADSCstartetlediglichdieKonvenierung an sich. Um die graue Theorie ein wenig abzurunden,hier wieder ein kurzes Beispieltur denFree-Running-Modus: 1: ..
#include dir I
,:
5r
lL[.
{
Jdo
iD
,ö |
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: ''|
':'' 13:
i
L |d'
(.o
d
/ / A l l e I n t e f r u p t se r ' l d u b e n
1 rI 6: 18: 19: 201 21: 22: 23: 24: ?^: 261 271 8: ?9. J
.rp,,uDl i] ,"" o,n..o'4od" 1i tD 8 B P" " e z p. a: / / / T a k t : S y s t e m t d k t/ ? { 4 r l H z b e l 8 l , l h z0 u a r z ) A D l l U=l ( L < < R E F S o )( l < < A D L A R ) i A D C S R=A ( I < < A D E N ) ( 1 < < A 0 F RI) ( 1 < < A 0 1 E ) ; / / A D Cs t a r t e n ! A D C S Rl = A (r<
"
_"
" .,n 0:
Der Single ConversionMode könnre dann so aussehen: l;
6rn l"de a,r/ro h
':
in
,",n'.o a 'o
"d
d, u" r:
I0 11:
1n9 ö i orrö rD' . .O-Bi- 'r or Toc.. / / R e f e f e n z s p a n n u n sVrC C t \t t". : (r, "1 . I oai *./ aud./ o--l]; rDT ' A D C S R-A ( 1 < < A 0 t N )| ( 1 < < A D I E ) ;
l: ,:
nh
I 8. o:
:{ 16: 1 , /| I8l 19: 2At 2\t ?': 231
r'oo e t
lFiF
/ / A o Cs t a r t e nI A D C s R A= ( r < < A D S C ) l / / 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 , / / 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 \ ' r l i i l e( ( A D C S R &A( I < < A D I F ) ) = =) 0 i
2 Derl,4ikrocontrollef
88
/ / 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 s n e rb e i d e R e g i s t e r / / ! r d b e i 1 0 B l t M o d L ri m
24: 25. 26, ?/:
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
2Al 291
30r 31: 321 33: ]
) . e t u f n0 ;
EEPROM 2.8 Dasinterne Bei den meistenAVRVarjäntenwerdenSie einenmchr oder wetrigergroßzügig bietetIhnenz. B 512B)tes EEPROM-Speicher 6nden.Der ATmegaS aüsgefalenen im EIIPROM.Das entsprichtnicht unbcdingteiner sehr großen Speicherylntz lieg1jedochdarin, dassdie Der wescndiche Vorteil desEEPROMS Datenmenge. bleiben. Das EEPROM Zustand hinweg erhalten eincn stromlosen Daten über tur und eignet sich daherbesonders Schreib-/Löschzyklen unterstütztetwa100.000 ctc... ldejnen Datensätzen von Konfigurationswerten, dasAbspeichen und LeseneincsBltes.Hie*ül Die zweiwichtigstenFunktionensnrddäsSchreiben eilbenötisenSicwiedereinigeRegistcrund müsseneinebestimmteReihenfolge (ßeispiel: halten.Zu den Detailsfinden Sieeine genaücErklärungim Datenblntt eiDesBytesin ATnega8,Seitc20).Der eDtspr€chcnde Queltexttur das,,Schreiben aus: dnsEEPROM"sjehtfolgendcrnaßen 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 -.P 8 /
r: 5:
.'.te
t: 8: 9: 10. 11:
/ * 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 * . / ''rD - 'd ; EED= R bi
14:
* /4 ) i'rs EEPR01 / * 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 / . l l u t j j l-
16: ]
fftltjj
;
* /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:
2.8 Dasinterne EEPROL489 Der
\I^r o'so
oFd.lier
qr
.i.h
r. WärtenbisdasEEPROMbereitist. 2. DasAdress-und Datenregistermit gewünschtenWertenbeschreiben. 3. DasEEPROMaufeineDSchreibvorgang einstellen. (,,Schreiben") 4. Dntenübenahme vom Datenregister in denEEPRoM-Speicher. Analog dazudasLeseneinesBitcs: 1: :{ 3: 4:
u n s i g n ecdh a rt E P R oRHe a d B y t e ( u n s j qi nnteadd . ) / * ! a f t e n b i s d a st t P R o lb"el r e i t i s t * / l h i l e ( E E C&R ( r < < t t ! r E ))
5, 6: 7t 8:
/- *_ ^DPi e g e ! ü r s c h t eL e s e a d r e s se€i n s t e l l e n * / ad.;
10: 11,
/ * A a t e nv o mE E P R Oi nMs E E D R R e q i s t e fl e s e n + / ( EECR l = 1 < < t E R) ;E
13r l:
/ * 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/ re u DD;
i
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:
r: 6:
i n t n a in (v o id )
I '0:i
I
0:
e l l e n t v o n P o r t B l e s e nu n d i f s / / A- 'kDt u P 0 1 l e r. F rn . . . pö. EEPRO l ,]i ,rIi t e B y t e (, i P I N Bi)
9' 0t : 11: t2: t: r: ,5: 6: .{ -8:
f1n ^qö. our D0q-8.
DDoB 0.00j
) '
- 0 tli DDPB _o
-0;
..
e o e . u ' D O DB '
l 0j - 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 getüftelt und nun endlich allesvom Au{bau" in Dunstabzugssleuerung "fliegenden ein schönesG€häusetransportiert. Die erstenTestsmit dem Dunstabzugverlaufen wie erwartet, allestunldoniet prima. Ibre Entwicklung wird anschließendkompleft 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 Zeitabständenein kurzes ,,Lebenssignal"vom Programm. Kommt dies€sZeichen nicht
2.9 Wotchdog-Timer 97 geht cr davon aüs,dasssich die Softwareaufgehängthat. Darauftin ftihft er nutomatischeinenResetdurch. Um dasGanzeetwaspräziserauszudrück€n:Der Watchdog-Timer ist, wie der Name schon sagt,ein Timer bzs. Zähler.Er zählt in einer bestimmten Frequ€nzeinen wert hoch. Kommt es zum tiberlauf, wird ein Reset Ihre Aufgabeist es,diesenZahlerwertvor dem überlauf auf 0 zurückzusetzen.Die Zählgcschwindigkcit könncnSieübereinenVorteilerregeln. Fü die Verwendungdeswatchdog-Timersgibt eseineeinfacheBibliothek. Sieträgt den Namen Mithilfe dieserlncludeDatei bestehtdie Steuerungdes "avr/wdt.h". watchdogslediglich aus3 Bcfchlen: . wdt_cnäb1c(timcout); . wdt disäbleO; Mit wdt_enableOaktivieren Sie den watchdog. Als ParametermüsscnSic dieser lunktion noch den gewünschten Time out wert übergeben. Den entsprechenden wert finden Siein folgenderAuflistung: . . . . . .
WDTO-15MS WDTO 3OMS WDTO 60MS WDTO_120MS WDTO 250MS WDTO_sOOMS
. wDto ls . WDTO 25 . WDTO_4S . WDTO 85 Achtun$ Die WerteWDTO 45 und WDTO 85 stehennur tur bestimmteVarian ten zur Verfügung(funktionierennicht mil demATmegag). Der A\RGCC-Compiler machtSieaberautomatisch mit einerFehlermeldung daraufaufmerksam, wenn Ihr veNendeter Contro er die vier oder acht SekundenlaDgeDTime-outs nicht Die Fünktion wdt disable0 deantiviertdenwatchdog wiedef. Sie müssennach der erfolgreichenÄldivierung dcs wachhundcs innerhalb des Time outsdenZählerzurücksetzen. Diesgeschieht nit der lunkion wdt resetO. Hier ein Beispielliir dic Vcrwcndungcincswntchdog-Timers:
2 DerMikrocontrcller
92
4:
# 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 " . s i n . l L d e c . ' / h dl . L
6: 7: 8:
i n t m a nJ (v o id ) I .,d i;
1r ^ ''
10: tt: 12: 13: 1r: 15: 16: l1: 18. l9: 20: ?T: 22: 23t Z4t 25: 261 )
/ * 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 . . . * / D D R =B o x F F ; P O R T=B 0 x F F ; f o f ( i = 0 i i < 1 0 ; i + + )_ d e l a yn s ( 1 0 0 ) l oODB-0,00; f o r ( i = 0 ; i < 1 0 ; i + ) d e l a ! - n s (1 0 0 1 i / * 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 / l d t e n a bel ( l , r D l 20 5 ) ; l ^ J h i l e( 1 ) I // (onnentieren S i e f o r s e r d eZ e i l e a u s u m ge s e tz u t € s t e n , , . / / d e n l , , l a t c h d oR w d t r e s e t () ; l
Die.ewird rr.h lurveran\hruli(hunS" len SiccrncI LD dn PoflBdn'chtießen. dennder einemResetkulz blinken.Im ßeispielobenwird esnur einmil passieren, (in konmt somit ControllerbekomDtrechtzeitigdasLebcnszeichen Zeile24).Es 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 hequenzen DieserOszillatorkannunterUmsländen von denaDgegebenen erzeugt. (je nachBetriebsspannung) srarkabweichen. Verlassen Siesichdahernicht auf die kommen. Time-out'werte.fs kannh;erdurchauszu größerenSchwankungen
93
in Assembler 3 EineEinführung 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(rocontroller veistaüdenwerden.Si€finden im Anhang die komplette Lrbersichtdieserunterstützten Befehle.le nach ProzessorstehenIhn€n mebl oder weniger Befehlezur Vertugung. Die Anweisungenselbstsind einfachzu verstehenund schnel erldärt. Die wirldiche Herausforderungbestehthier weniger im Erlernen der Sprache,sondem vielmehr in der UDsetzxngIhrer ldeen mithilfe dieserBefehle. Um gute Softwareschreibenzu können, mtissenSie den Prozessorverstehen.Da hilft Ihnen auch eine Hochsprachenicht. Assemblerermöglicht es, im Detail zu erlernen,wie der Prozessortunkioniet und vor allem, wie man reine ,,Ideen" in aüsliihbaren Code wandelt. Vor allem bei der Mikrocontroller Programmierung zeigtAssembls seinebesonderenVorzüge: r Geschwindigkeit(die meistenBefeblebenötigennur eineDSystemtako 2. Optimale Nutzung desSpeichers(sehrkleiner Programrncode) 3. Prozessomahe Entwicklüng (rnan ryeißSchritt tur Schritt genau,waspnssiert)
3.2 DerBefehlssatz Auf den folgendenSeitenfinden Sie die kompleite Auflistung aller zü Verftigung stehendenAssemblerbef€hle.
undtogische Operationen 3.2.1Arithmetische ADD ADC ÄDI1II SUB SI'BI
Rd,Rr Rd, Rr Rd, K Rd, R] Rd,K
sBc
Rd,tu
SBCI SBIW AND ANDI OR ORI EOR NEG SBR CBR INC DEC TST CLR SER CP
Rd,K Rd,K Rd,Rr Rd,K Rd, RI Rd, K Rd, Rr Rd Rd Rd,K Rd,K Rd Rd Rd Rd Rd Rd,Rr
cPc
Rd,tu
CPI
Rd,K
coM
.
Add widrcut carry Add with Cary Add Imm€diateto Word Subtractwithout Carry SubtractImmediate ,Subtact with Carry SubüactImmediatewith Cary SubtmctImmediateftom Word LogicalAND LogicalAND with Immediate LogicatOR LogicalORwith Immediate Exduiive OR one's Complem€nt Twot Complement S€tBit(s) in Register ClearBit(s) in tugist€r G'cIement Decrement Testfor Zrro or Minus ClearR%ister SetR€gister Compar€ Comparewith Carry Compar€with Immediate
3.2,2 BranchODerationen
RIMP UMP IMP RCAIL ICÄIL CALL
k k k k
RelativeJump lndirect lump to (Z) Iump Relatic call subrouthe Indirect Ca[ to (Z) Call Subroütine
2 2 3 3 3 4
3.2 DetBefehlssotz 95 Bef€hl PJT RBTI CPSE SBRC SBRS SBIC SBIS BRBS BRBC BREQ BRNE BRCS BRCC BRSH BRIO BRMI BRPL BRGE BRLT BRHS BRIIC BRTS BRTC BRVS BRVC BRIB BRID
Operanden
Rd,Rr Rr,b Rr,b
Rb qb s,k k k k
k
k k k k k k
Beschreibung
Z\*le1r
SubroLrtineRetum lnterrupt Return Conpare, SkipifEqual SkipifBit in Register Cieared Skip if Bit in RegisterSet Skip if Bit in I/O RegisteiClenred SkipifBit iD l/O Register Set BraDchif StatusFlagSet Branchifstatus FlagCleared BranchifEqual Bran.hifNot Equäl ßranchifcarry Set BranchifCarry Cleared Branchifsame or Higher Branchiflower BranchifMinus BraDch ifPlus Bnnch if creater or Equil, Signed Branchif LessThan, Signed Branchif Halfcarry FlagSet Branchif Hälf CaIIy Fllg Cleared DranchifT llas Set BranchifT llag Cleared Branchif Overflow Flagis Set Branchif overflow Flagis Cleared Brnnchiflnterrupt Enabled Branchiflnterrupt Disabled
4 l/2/3 | | 2| 3 I | 2| 3 \ | 2| 3 I l2 | 3 | |2 1 12 I 12 ||2 \ 12 ||2 II2 | 12. Il2 I 12 II2 1| 2 | |2 | |2 I /2 | |2 I|2 | |2 I 12 1 l2
3.2.3 Datentransfer-ODerationen Befehl
Opeünden
Beschreibüng
zlÄen
MOV LDI LDS LD LD LD
Rd, Rr Rd, K Rd,k Rd,x Rd,x+ Rd,,x
Copy Register LoadImmediate Load Direct from SRArV LoadIndirect LoadIndirectändPost-Increment LoadIndirectandPreDecrement
I I 3 2 2 2
OA
in Assenblel 3 EineEinführung
Befel
Operanden
LD LD LD LDD LD LD LD LDD
Rd,Y Rd,Y+ Rd,.Y Rd,Y+q Rd,Z Rd,Z+ Rd,-Z Rd,Z+q k, Rr X, Rr X+, Rr -X, R] Y,RJ Y+, Rf Y,RT Y+q,Rr Z,Rt Z+, Rr .Z,RI Z+q,Rr
sTs ST ST ST ST ST ST STD ST ST ST STD LPM IN OUT PUSH POP
Rd, P qRl Rr Rd
Lnd Indirect and Post Increment Load Indirect aüd Pre-Decrement Load Indirect with Displacement LoadIndirect Load Indirect a]rd Post-Increment LoadIndirectandPre Decrement Load Indirect with Displacement SloreDirect to SR{M StoreIndirect StoreIndire.t and Post-Increment StorelndirectandPre Decrement StoreIndirect StoreIndireclandPostlncrement StoreIndirect aüd Pre-Decrement StoreIndirect with Displac€ment StoreIndirect StoreIndirect and Post-Increment StoreIndirectandPre Decrement StoreIndirect with Displacement LoadProgramMemory ln Port Out Port PushRegisteron Stack Pop RegisterFom Stack
3.2.4Bit-undÜberprüfungsoperationen Befehl
Operanden
Bescbrei6ung
zytJen
LSL LSR ROL ROR ASR SWAP BSET BCLR
Rd Rd Rd Rd Rd Rd
LogicalShiftLeft LogicalShiftRight RotateLeftTbroughCarry RotateRight Throush Cary Arithmetic Shift tught SwapNibbles FlagSet FlagClear
I I 1 I I I I I
SBI CBI BST BLD
sEc cl,c SEN CLN
sEz clz SEI
cu sBs cLs sEv CLV SET
ctir SBH CLH NOP SLBEP IfDR
Bb Bb Rr,b Rd,b
S€tBit in VO Register ClearBit in I/O Regist€r Bit Storcftom Registerto T Bit load ftom T to Register SetCarry Cl€arCaIIy SetNegativeFlag Cl€arNegativeRag S€tZero Flag ClearZero Flag Global lnterupt Enable GlobalInterrupt Disable SetSignedTestFlag Cl€arSigned?st Flag S€tTwo'sComplementOveiflow ClearTro's ComplementOverflow SetT in SREG ClearT in SPJG SetHalf Carry Flagin SREG ClearHalf Carry Flagin SRIG No Op€ration Sleep Watchdog
ZuI Erktirung der Operand€n-Notation: . Rd: Zielftgist€r . Rr Quellrcgr.lte{ . R Resultatder Operation . Kr 8-Bit-Dat€n (Konstante) . k Sprungadresse (Konstante) . b: Bit ein€sR€gistercoder I/O-Registerc . s: Bit ein€sStatusregisters ist in vier TeilbereidF untergliedert: Der komplette Befehlssatz . Arithnetische und logischeoperationen . Brafth-Operationen (Vesweigung€n) . Datentransfer-Operation€n . Bit- urd Uberpdtungsoperationen
2 2 I I t I 1 I I I I t I 1 1 I I I I I I I
9a
3 EineEinft)hrungin Assembler
Durch diese UDterteilung wird der Um-fang des Befehlssatzesüberschaubarer' Außeidem gibt esvieie InstruktioneD,die nur ehe Väriinte einesBefehlsdarstellen (Beispiel: Esgibt 20VariantendesBranch-Befehls).
3.3 ErsteSchritte Zu diesemZeitpunkt gehenwir dnvon aus,dässIhI Compilersysteminstalliert ist und Ihr Entwicldüngsboard(oder der Simulato, efolgreich verbundenund getes Die wichtigsienEigenschaäen\-onAssembler: . Die Befehlebasierenauf der Rlsc-Architektur. Ihnen sGhr daher nicht der Stanoptizur Vertugung,sondernein auf Geschwindigkeit dard 8051Befehlssatz mierterSatzan Operationen. . Nichts passiert,,gleichzeitig".Es wird sequenziellein Befehl nach dem anderen aüsgefil}lrt. . Als Zwischenspeicher für OperationenverwendenSiesogenaDnte Regtsrer . Um einenWert auf einer Port auszugeben, müssenSiediesenWert zuerstin eiD Registerübernehmenund voDdol1 an den Poft weitergeben.Mehr dazugleichin denerstenBeispielen. . Kommentarewcrdenmit dem Semikoloneingeleitet uDd beansprüchen immer . Assemblerbefehle unterscheidennicht ?.wischen Groß' und Kleinschreibung. Nun ztun erstenBeispiel: 1: 2l 3i 4r 6: /t 8:
. i n c l u d e" m l 6 d e f . j n ci" Def i r i t i onsdat ej e i n b i n d e f l d i r 1 6 , o x F r : R e g i s t e r1 6 m i t N e f t 0 r F F l a d e n o u t D D R Br, 1 6 ; l , l e r t v o n R e s j s t e r 1 6 a u f D D R Bs c h r e i b e n 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 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 p eno I'nd o
Ll" f"
Is ist richtig, dass sich Arsembler nicht gerade durch eindeutige, klar venrändliche Befehlsbezei.tnungen hervorhebt, aber die Erklärung ist einfncher ais man denktl Ieder Assemblerbefehl hat folgendes lorrnat: BEFEHL Operandl, Operand2
Operas.ll nd Opennd2 könren dabei,je nach Befehl,optional sein. Es gibt atso BefeNe,di€ nur einen Operandbenötig€n(Beispiel INC), oder auch leelch€,wo gal kein Operandbenötigt wird (Beispiel:RE4. Die ersteZeile desBeispielswerden Siein iedem Ihrer Programmevelwenden.Sie ermöglichtdem Assembler,nebensehen eigen€nBef€hlenaüch die pmz€ssorsPezi tuchen BezeichnungenIhies verwendetenMikocontrolers zu verstehen Sobesitzt z. B. nicht jeder Controller einenPorr C le nachdem,lyelchenControll€r SieveMenden,ergibt sich eine andereirdud€-Anweisung. Es änd€rt sich lediglich Ve$ion: der Dateinamelon m 16d4tflc auf einean Ihren Prozessorangepasste
,{T90S1200 AT90S23l3 ÄT9052323 ATmegä8 ATmegal6 ATmega32 ATmega/t8 ATmega64 ATmegal28 ,{Ttinyll ATtinyl2 ATtinyl3 ATtinyl5
l200definc 2323detinc m8def.inc ml6def.inc m32delinc m48definc m64d€f.inc ml28detinc tnl ldef.inc rnl2definc tnl3delinc 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 Am einfachstenmerkenSiesich:,,ErstdasZiel, dann die Quelle" Zahl geschrieben? So verhziltessich bei den meistenBefehlen,die Sie im Rabmender Assemblerprogrammierungvorfinden 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
in Assenbler 3 EineEinführung
Sienur ein Dieskann ein beliebiges Ilegistervon R0 bis R3l sein. "Ärbeitsregister". Man neDntdieseRegister auch,,HiFsregister" oder,,Zwischenspeicher". Siewerdcn schnellein Gefühldaturbekommen, abergenerellgil|,,Laden"tunktioniertnurbei r(0bis R3l. Ilir alleaDderen verwenden denRegistern Register Sieoai.
passiert? Wasist bis jetzt lrit dem Prozessor SiehabendasDateDrichtungsregiste lon Port B iüfAusgAng,rlso 0xIF gesetzt. Dashcißt,män lenn nun auchein ZeichenaufdiesenPort schreiben. GeDaudaspassiertin derrZeilen6 und 7. SiekenneDdie Prozedurbereits:Erstein Hilfsregister bcläden(hicr: R16,könnteaberauchz. B. R24 sein),diesesRegister In Ihrem Fallwäredasder Port B. mittelso,r auf dasZielregister schreiben. und einer 2teile9 glänztgleichmit zweiwichtigenPunktenreiner Sprungnrarke In dicsd Konstcllation entsprichtdaseiner,,EndlosscHeife". Sie SprungänweisLüg. könncn än alen stelen in Ihrem Programmeine SprungmarkedefiniereD. Sie gebeDdarniteineDrbesthmten Plxtzh Ihren CodeeinenNamen.Spätcrkönnen Sie dann auf dieseMarke,,springen':Dasheißt,der Cod€wird von dieserStelle weiterausgetuhrt. Zum Beispi€lwäreessinDvoll,eineMarkeganzan Aifang dcs Prograirmszu plätzicrcn.So könntemnn am Endewiederzurückan denAnfang springen.DasProgrammulirde sichdanDalsoewigwiederholen. EineMarke ist einfachzu definierer.Sieüberlegensich einenNämen,der nicht eineDrBefeli,ehem Registdoder eineraDderenSprungmarlccntspricüt.Diesen Namenschreiben Siean den gewünschten Platzund versehen ihn mit eineDrDop pelpurkt.DaskijnDtez. B. so aussehen: 1:
. i n c l u d e" n 1 6 d €ifn- c "
4: 5,
ldi f16, oxFF o u t o D R B1,1 6
8: 9r 10:
l d i 1 1 6 ,0 r A A o u t P 0 R I 8f,1 6
I2:
r j n p au3 9 a b e
Ir dicscmBcispiclsinddreiverschiedene Sprungmarken zu erkennen. Um auf cinc dicscrSprungmarken zu spdngen,verwenden Sieeinensogenannten Ausfiihrlrngen diesesBefehls, die,je nach,Sprungwcitc", Iump.rs gibtverschiedene ausgewäNt werden.MerkenSiesich\orerstnur die hier verwendete Veßion/jnb
3.3 Eßte Schrifte
101
M;thilfediesesBefehlsspingt der ProNasso viel wie,,rclativer Sprung"bedeutet. Sprüngmärke definiertist. zessordannan die Stelle,wodie angegebene lm erstenBeispielwürde das ein Sprungan dieselbeStele sein,von wo dieser SpruDsausgelijstwurdc. Im zweitenBeispielwürde der Prozessorzu Zeile 7 springcn und eneut den Wert 0xÄÄ auf Port B ausgeben. Aüch dicscrVorgangwürde sichmit Zeile12ständigwiederholen. Vertiefenwir dxs Beispiclnoch um eine weitere!'unktion, deDrEinlesenvon Zuständen an denPortsl 1: ?. 3: 4r 5r 6r 7: l0: 11: I2: 13:
. i n c l u d €" m 1 6 d ei n f .c " k o n f gi u r a toi n : 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 r:L6 oLrtDDRB, 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 o u t O D R Ar 1, 7 in r16, PIl.]B i l i e r t v o r P o f t B a u f R 1 6e i n l e s e n o u t P O R T rA1, 6 ; D i e s e ne r t a u f P o f t A s c h r e i b e n rjmp.jnlesen;!riedefhoren
Anschließend wird deraktuell PortB wird alstsingang deiniert,PortA rls Ausgang. und ZustaDdvon Port B gclcscn,in Register16 zwischengespeichert anliegende Derjump in Zeilc 13 wiederholtdieseProze sofortrviederaufPort A aussegeben. DiesesBeispieleignetsich sehrgut iir den Simulator.Sie können einfa.h nnd änschauli.hdic Wertevon Port B ändernund seheDzweibis drei Schdttespäter Beispiel. schor die Anderunsenauf Port A. Eshändeltsichalsoum sehreinfaches Die $'esentlichstc Ncuerung6ndetsichin Zeile 10 mit dem Befehlir. Er funktionicrt genauwie od, ebensodie Parameterordnüng ,,ErstZicl,dannQuelle". für solche i11PORTÄ,PIN3.Siebenötigen WichtigrSiekönneDhiernichtschreiben: zu Befehieimner eincnZi{ischenschritt, üm dasErgebnisiD einemHilfsregister DaslclzteBeispieldieses Abschnitts: 1,
. i n c I L r d"em l 6 d e. ifr c '
3: 4r 5:
k o n f9i ü r a toi n : l d i f : 1 6 ,I ] N F F ; P o r t B a l f A u s g a nsgc h a l t e n o u t D D R B1,1 6
3 EineEinführung in Assembler
702
D.n
10: 11:
1
pi,-
B !€r2en
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 . Dii a, Do,r B ö. Lon c b i D O DB .
I2l
md neueBefehle,,sbi"und,,cbi",oder,,SetBit" und,,ClerrBit".Mit SieerkeDnen diesenAnweisungenkönnen Siejetzt auch direkt auf bestimmte Pins einesPorts zugreifen.Sie erinnernsich: und vcrlnngenbzw.liefernjeweilseineD "in" "out" 8-BiGWert,alsodeDZustandeinesganzenPorts.Mit diesenneuenBefel en könnenSienun die ZuständeeinzelneiPinsverändem. Empfehlungen(von http://rrww.avr-asm-tutorial.ne0zur Registeffahl: . Registerwenn möglich mit der .DEF-Anweisungfestlegen. . 16-Bit-Zähler oderAhnlichesrealisiertmanambestenin R24lR25. . Werden oft konstanteWertc oder Zügriffe äuf einzelneBits in einem Register rcrhender. dieRegi'ler R o bi' R2Jddtur\or7ug'wei'e r.\ervjc'cn. . Für nle anderenAnwendügsfülle vorzugsweiseRl bn R15verwenden. Zusammenfassung:Sie wissennun, wie man Hilfsregisterverwendet,um mittels der Befehlein und ollr auf die Ports zu schreiben.Sie können mit Sprungnarken umgehenund EndlosschleifenersteUen.SchließlichhabenSienoch gelernt,wie Sie auf einzelnePins zugreifenkönnen, um derenZustandzu ändem.
3.4 Unterprogramme NachdemSienun die erstenSchritteinAssemblerhintersichhaben,sehenwir uns sogenannte,,Unterprogramme" näheran: :
r: r: 5: I 8:
.
lLde
,'6de . -.'
-oti ' .hr " rdi pl6, | 6!rfÄv-\0\ o. .Pl,olo ld P 6, o l'Äv \D o._ P.ol6
10: I.up p oa'"n 12:
hd.p p og q
:
3.4 lJnterprcgrcmne103
;,
,.3iii"i:"r" f o l ^ . u p ro - o q r d ' r r r
15:
ii. '",,,,
l:. zi,
ll,
' | 4 ' i € r o 'r0eq " ' |
li,lJl;';," ' ,;: "" " '"''oeil'" ".R 'oi B.,o q. r b o-r DO
:;
1r;.","..
.,:; -' "l,lliu?'ii, ;"i'ai; Leiderist dff ersteBlick auf ein Assemblerprogrammsehrveflvirrend. ist im In Zeile 3 wird angekündigt Stackeiffi.hten. Ein Sr^ck,also ein "Stapel", in dem eh Elementauf das WesentlichenDichtsanderesals ein Zwisch€Dspeicher, andere,,gestapelt" wird. wie aberkonfigurier€ ich nun mejn Assembleryrogrämm,dässesdies€nStackver wendenkann?Dazu muss män zu Beginn d€sProgrammsdem Assemblermitteilen, wo genauder Stacl$peicherbeginDenso[, ä]soeile bestimmteSpeicheradresse benennen.Die folgendecraflk zeigtIhnen denAufbau desAdressrauns:
Progrämmspeicher
Stack
RAr!|ENDAbb. 3.1: Aufbaudes speichers
704
3 EineEinführuiginAssenbtel
Da def ges.mte zur Verfügung steheDdeSpeichermehr als 256 Byte fassenkann, benötigt man zur Adressierungnuch einenW€lt größer als 8 Bit, also 16 Bit. Um in Assembler einen 16 Bit Wert darzust€llen,verwendet man einfach zwei 8-BitRegisterein sogenanntesI,o ' und ein High Regisier.Daslolv-R€gisterenthält die unteren8 Bit desl6-Bit-AdresswertqdasH'gfi-Registerfolglich die höheren8 Bir. Für den Stackstehenhier zweibesondereRegisterzur VedügungrSPH (Sta.k Pointer High) und sPI (Sta& Pointer Low). Diesebeiden Registerz€igengemeinsam auf die Adresse,an der der Stackbeginnenkann Kurioserweisesetzenwir diesenAdresszeigergenauauf dasletzte ry'te im Speicher. Dort beginnt der Stack.Der Stack,,frisst" sich rückwäls in den Spei€her.Mit jedem Byte, das im Stä& landet, wächstder Stackum ein Blt€ und erweitert si.h rückwärts in denAdressraum.Sieerkennendäsin der ebensezeigtencrafik. Zeile 4 bis Zeile 7 können Siedaher €igendichimmer so verwendenwie angefüIrt. Wir gehenhier nicht weiter auf die Detailsein. Die nächsteAnweisungwarlet in Zerle, m bzw. rclatift call. Der' relatile jump kennen Sie bereits.Der relatue cdil ist im Prinzip ähnlich und spingt einfach än eine angegebene Sprungmark€.D€I Unterschiedzu inp liegt darin, dasssich der Prozessorbei einemjürrP nicht merkt, von wo er weggesprungen ist. Daskann eine beliebigeStele im Progranrmcodegewesensein. Ganz andersbei einem rcdll. Hier merkt sich der Prozessordie Stelle,von der er wegspdngt.Wanm er dastut, sehenwir in Zeile 21. Dort befindet sich ein Befehl mit dem Namen /et oder ausgescbrieben /etulr. Dieser Befehlweist den Prozessor an, an die Stellezurückzuspringen,von der er ebenweggesprungen ist. DiesenVorgang nennt man .uch ,,{ufiuf einesUnterprogramns". Wir teilen dem Prozessor nit ,,Springezu einer Sprungmarke,führe den Code dort so langeaus,bis du auf ein r.etul7rtriffst und springedann wieder zurück." Sie haben im oben angetuhrlen Beispiel gleich drei dieserUnterprogrammever wendet.So wird retup nul zu Beginn einmal ausgetuhrt,jedoch werden ./ealporf und seryoltir einer Schleifeendlosnacheinandergesta(et.EineFunldon wie setup werdeDS;e öfters benötigen,vor allem bei eher komple{eren KonfiguiatioisroF tire zu Beginn des Prognmms (BeispielerSetup eines Displays,Einrichten des externenSpeichers etc.). Aber warum musstedann zu Beginn der Stackinitialisiert werden?Wn haben ihn Jn gar niclt veMendet?l Der ProzessorDerkt sich bei einem rcall die Absprungadresse.Und genaudatur benötigt er einenSpeicher, inrlich den Stack. Siekönnten daler inneihälb einesUnterprogrammseinenweiterenrcdll ausführen. Dies würde eine weitere ,,Absprungadresse" auf den Stapel legen. Darum nennt
Sptunqe 105 3.5 Bedingte
.!tgi:'-lbrail
Stack
T :1 I I Untelprogramrn
+
2 | I unterploqlamm r-----------\---
Abb.3.2:Speicherurg derRücksprungadressen män diesenSpeicheraucheinen,,Stapel" dennman nimmt zuerstdie B)'tesvom Stapel,die män zuletzt dort platziert hat. Sie sehenän der Grafik Mit jedem Aufruf einesUDterprogrammsmuss sich der meiken. Der hozessor verarbeitet ale Vorg?inge Prozessoreine Speicheradresse seriell. Aus diesen crund muss auch das zuletzt aufgerufeneUnterprogramm zuersteinen/?t /n austuhreD, damit der Prozessor über die anderenUnterprogelangen grammewieder zudck an di€ Urspiungsndrcsse kann.
3.5 Bedingte Sprünge Auch wenn der Ausdruck ,,bedingtersprung" seltsamklingt, gehört dieseTechnik zu den mächtigstenWerkzeugender Progrämmierung.Andersgesagtbedeutetdiese tussngelediglich:Entwederder Prozessor tuhrt einenSprungausoderebennicht. DieseEntscheidunghängt von der Bedin$ng ab, an die dieseUlerprütung gekiüpft ist.
106
3 EineEinführungin Assenblel
Nähemwh unsdemThemamit einemBeispiel 1: 2: 3. 4: 5: 6i 7r 8: 9r '0:
. i n c l u d e m l 6 d e if n .c ; --
S t a c ke i n f i c l r t € n- - - - - ' l d i R 1 6 ,N I G H ( R A I 4 E N D ) o u t S P NR,r 6 ldi Rt6, Loll(RAMEIID) oüt SPL,R16
hauptpf0grdmm: .1 "'.p
l1: i 2 : I o o p tI s b is P I N B , 0 13: I4: r l n p l o o pI 15: 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 16r 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: rjmphauptpfosrann 2It 221 24: 25.
ldi Rl6,0x00 iPort I duf Ejn9arg o u t D D R BR, 1 6
Der einzigeBefehl,der ihnenfiemd vorkommenwird, ist in Zejlet3 srtr (Skipne{ instruction if bit is set).Wenn der Pin 0 an Port B gesetztist, wird die nachfolgende Anweisungübersprungen.DieseAnweisungi\'äre ein ryimP,der zurück in Zeile 12 und anschließendwieder in Zeile 13 führcn würde. Untersuchenwir diese Funktionsweiseet!{as genauer: Es handelt sich um eine die kontinuierlichläuft, solangePin 0 an Poft B nicht gesetztist. Sobald Schleife, und dasProglamm diesd Pin gesetztwird, wird der 4mp-Befchlübersprungen setztdenAblaufin Zeile16fort. Der praktischeNutzenfür eine solcheFunktionist einfach:NehmenSie an, Sie haben,n Pin 0 einenSchalterangebracht.DäsProgrrmm soll nichts unternehmen, solnngedieser schalter nicht altiviert wurde. sobald der Schalterumgelegtwird, Progrimm zu lnufen(und ver Ph 0 daDnalsogesetztist,beginntlhr eigentliches lässtdieScbleife). SolltenSie die ungekehrtc Funktionsweisewünschen,also eln skip ext instuction if bit k .karcÄ'reß^rer]denSieeinfachsüi..
3.5 EedingteSprünge
7O7
Wichtig: f,s gibt lier eine wesentlicle Unterscheidung:Mit sütcund irts können Sie ledigtichdieI/O-Registea alsodie,,Ports"überprüfen.Wenn Siez. B.Berechnungen durchtuhrenund ein Hilfsregistei(ilso nicht direkt einenPort oder Pin) auf ein gesetztes/gelös.htes Bit überyrüfen woIen, müssenSie die eDtsprechendeüPendantsdazuverwenden:sülcund r&/s,alsosnrpaeili instrltctiall if bit in reginetk clearedwd skipne:ctinstrcnofl if bit in ftgisteris set. Wasaber,weDnSie nicht ein einzelnesBit, sonderneinen Port auf einen bestimDten 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. mitejnanderver Wichtigist dabeirMit diesemBefehlkönnenSienur Hilfsregister gleichen,nicht zwei Portsoder ein Registerlrrit eiDemPort. Darum müssvor jedem Vergleichauchder wen deszu überprüfendenPortszucrstir ein Hilfsregistergela . i n c l u d e " m l 6 d e.fJ n c " ?:
5l
i -'-
S t d c ke j n f i c h t e n - - - - ] d i R 1 6 ,H I G HR( A M E N D ) O U t S P NR, 1 6 I d i R 1 € , L O I !R( A M E )N D
8: 10: 11: 12: 13: 15: 16:
i r R 2 0 ,P I N B I d i R 2 1 ,0 x F F c p s e R 2 0 ,R ? 1
u:
18: 19: ?t: 2I: 221 231 24: 25: 27: 24.
l d i R 1 6 ,O x F Fi P o r t B a u f a u s s a n ! o u t D 0 R 8R , 16 l d j R 1 6 ,0 x F Fi A l l e B i t s s e t z e n O ü t P O R T BR, 1 6 rjnp hauptprosramm 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 o u t D D R BR, l 6
In Zeile15findenSiedenneuenBefehl.In denzweiZeilendadber schenSieauch, wie die RegisterR20 rmd R21 mit den zu vergleichendenWerten geladenwerden. Diesist nötig, wie eingangsbereitseNilhnt, weil cprenü Rcgistermiteinanderver
108
in Assembler 3 EineEinführung
gleichenkann. Solten die beiden Registerdenselbenwert enthalten,wird die fol sendeInstruktion übersprungen,also die Schleifeverlässen.Sobaldä]soäuf Port B derWertoxFFanliegt,wird dieSchleife verlassen. Wichtig: Ein häufigerlehler könDteIhnen jn Zeile13passieren. Esist verlockend, hier dasRegister20 mit eirem cinfachenIDI R24 ?INB zu beladen,oder,noch schlimmenlDl R20,POIIS zu verwenden. Daspassiertschrleicht. Der BefehlaD1kann lediglich einenWert in ein ltegisterschreiben,abernicht einen Urertvon einemPort einlesenund dann in ein Register schreiben. WennSiee;nen Wert von einenrPort einlesenwolen, verwendenSie immef die Anweisungi?r. Ebensodürfen Sie PINB nicht Dit POR?B veMechseln.Sie verwendenPORT!, wenn SieWerreauf den Port ausgebenwol]cn, jcdo.h PIN3, Nenn Sie einen Weit
3.6 DasStatusregister Vor allen bei der ProgramDierung mit Assemblergibt es ein ganz bestimmtes Registeadas Sie immer wieder äntreffen werden, das sogenannteStatusregister. Viele Operationenliefernein Ergebnis,das sich dann in den einzelnenBits des Statusrcgisters wiederfindet.Diese Bits des Statusregisters haben jewetu ehe bestimmteBedeutung: Bit
Beschreibung C: Carry
I 2 3 4 5 7
Beider letztenOperationkam eszu einemUberlauf, daherist dasCal/], Bit gesetzt.Mehr dazu gleich. Z: Zet<) DasErgebnis der leerenOperationergabNull (Zdro). Nr Negative Resdltatder letztenOperationist negativ. V Ovedow Zweierkomplemcnl-Überträg S:Sign ExklusivesOder (XOR) von N und V H: Half Carry Ubertragvon Bit 3 äuf Bit 4 bei der letztenOperatioD T: Bit CopyStorage Zü fteien Verwendungverfiigbar (undefinie ) I: Globallnterrupt Alle Interruptserlaubt= I Inable Kcine Interrupts erlnubt = 0
Äm häufigstenwerden Sic .lie Birs Carry,Zero,ünd GLobalIfltertupt EnabLeanttef fer. Deshalbhier nocheinekurzeErklärungder einzelncnStatusbits:
3.6.1Carry-Bit Das Carry Bit wird immer &nn gesetzt,wenn bei einer aritimetischen Operation ein Übertrag herauskommt.wenn Si€ also zwei 8 Bit Zahlen addieren,z. B. 200 und 200,wäre dasErgebnis400.Da 400abernicht mit einem8-BiFW€rt darstellbar ist, signalisiertd€l Miloocontroller dieseni-Ibertragmit dem Carry Bit. Au.|diesemcrund gibt esäuch ehige Br.nch-Befehle,die er?lizit auf diesesCanyBit reagieren.Dazuz:ihlen BRCSund BRCC.
3.6.2 Zero-Bit wird dasZero'Bit gesetzt.Es Ist dasResultateiner srithmetischenOperation "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.
Enabte Interrupt 3.6.3Gtobal DiesesBit müssenSievor jeder VeNendung d€r Interrupts auf I setzen.Das können 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
in C 4 EineEinführung 4.1 Wasist C? Die Progr.mmiersprache C Mlrde 1972in denBellLaborsvon DennisRitchieent wick€lt. Ursprünglich für d€n Entwurf desBetriebssystems UNIX gedächt,entstnnden 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 CCompilern auf verschiedensten S)6temen,geeignetfit eineVielzahl von Proz€ssoren.Diesermöglicht(meist)ein und denselben CodeohnegroßeAnpassungen auf portieren. eh neues Syst€mzu Der Vorteil Liegtaüf der Hand: Flei erhüldicher gebundenan meistkostenlose, ,,faire"Lizenzmodele(GPL,BSD B€€rQuellcode, 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 dieserTreiber 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 wirklid <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 Compilerslstem instaliertist (oderder Snnuhtor)erfolgreich verbund€nuDdsetes und Ihr Entwicklungsboard Leidermüssenwir hief mit der Traditionbrechenund beginncndahernicht,wie wir üblich,mit den populärenHelb Wotldprc|.lamn. Stattdessen beschräDken gänzen unsauf die einfachcSchaltung eines Ports,alsoSpantlung a s,Spannung atL 1r
4 i r c l u d e< a v f / io .h >
2:
i n t n a i n (v o id )
3: 4r 5: 6: 7r 8:
{
D D R-B0 x F F j P o R T=B0 x F F ; = 0x00i PoRTB r e t u r n0 i
]
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(be; leuchten Pull führung des Programns einer 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 Standardverzeichnis tur lncludeDateienbefindet (kann tur den Compiler beliebig h der io.frfindetder CompilerInformationenüberdie I/O Mitgli.hkeiten(Input/ Ortprt, ilso Eingäbe/Ausgabe) desveMendeten Mikoprozessors. Die Prozessoren habenunterschiedliche Pin Belegnngen. BeispielAn welcherAdrese liegt PORTBbei einemATmegar6und an welcher Ädressebei einem ATmegal28?Genau diesePin-Belegungen werden in den IncludeDateieDdenniert.
in C 4 EineEinführung
772
Siewerden dieseADweisungin den meistenlhrcl ProgralrDe benörigen.Sie muss auchimnrr am AnfangdesProgramnNstehen,zumnrdestbevorIhr€ Funktionen (wieetwarmain) begiDneD. Das HauptprogrammbeginDtin Zeile 2. Egrl, än welchen ProjektSie arbeiten, jedesIhrer C Progmmnewird immer mit demselben beginnen.Dieses ,,Skelett" Skclctt werden Sie nach einigen Startl-ersuchenrelativ schDelläuswendigkönne'n. SosiehtdasSkelettehesjedenProgranmsaüs: l: 2: 3:
# i n c l u d e< a v r / oi .h > int main(void) {
5: 6:
I
r e t u r n0 i
nur Bis auf drei Zeilenbestehtlhr erstesprosramrn(sieheobeD)im wesendichcn ausdemGnüdskelett.Ic}l empfchlelhnen,das,,Warum"und,,Wie"hinterdiesem Skelettvorerstnicht z-uhinterfragen.Das zeigtsich Da.h einerweite ganzvon Es gibt iD Ihrem Programm also nur drei wirkliche Anweisungen.Diesefinden Sje in denZcilen4,5 und 6. alsoeinernach C arbeitetauchnicht ,,paralel':l€derDefehlwird nur sequeDziell, Dasbedeutetin unseremlall, dassdasDatenrichtungsre demandereD, ausgeführt. (0xFFl seschaltet(Z€ile a) und gister (DDRB) für den PORTBerst auf ÄUSGA,'i,Lwird (Zeilcs und 6). Dieserwird anschließend derPORTBDritwertenbeschrieben hier bemsst r11itzwci vcrschiedenen werten (0x00und oxl.l') versorgt,um das Ergebnisim Simulatordeutlichdar?-ustelleD. DiesesTestprograrlm,,am Mikrocontroller"$'ird Ihnen zunächstnoch wenig passierteinmaligund diesin nur wenigen lreudeschenken. Die Zustandsänderung Trktzyldcn,ist alsokaum messbar. Um die EinfühSiehabenhiermitalsobereitsjhr erstesC Progranmgeschdcben. rung in dieseSprachemöglichstkuz zü halten,folgt eineZusammenfassung der wichtigsten Punktc,die Siedabeibeachten sollen: . Befehle ßeispiel: DDRB werdcnin C immermit einemSemikolonabgeschlossen. = 0rII; PORI'D= 0x00i . Um eiDehexadezimale Zahlzu verwenden, setztman in C immer die Notierung ganz nornal, alsoohnedieseDr ox'Prä0r \'or dieZabl.DezimaleZahlenwerden = fix argegeben. BeispieleHexadezimalDDRB 0x5Aoder Dezimal:DDRB = 90j
4.3 Vaiablen 713 . Esist Cleichgültig,ob man DDRB=0r00ioder DDI?B= 0.J.00j schreibt.DieseLeerzeichenwerdenignoriert.Abcr VorsichtrDic einzelnenArgumentebzw.Werte dürfen Sienicht auftrennen.DD ]?3 = 0r 0q wäre nicht erlaubt. . ledesIhrer Programme beginntmit folgendemSkelettCode: l: 2: 3:
':
#i nclude i n t m a in ( v o i d ) {
'" .'' 0;
4.3 Variablen Die Spnchc C bcsitzt einen wesendichenVorteil gegenüberAssembler Anstatt Itegistern,steheDIhnen (wie in d€n meisten,,Hochspra.hen")belicbigdefinierbare VariablenzurVerfügung. Beispiell l:
" 'n l " d e
a.,/ro.h
L r. n(/o:d
:{ r' 'i:
hd
"d ra-..
6r .
.hd 'otoi o qe. hb i n t g e h e j n c o d ie .o.o..1uö..D].
diq " I
o: 10: ll:
"d td". = 0,001 rotatioisgesch!ifdi9keit=92. q6hö! ode ' 1156i
14:
retufn 0i
Das Hauptprogrammist SieerkennennuD dasbereitsgeläufigcStandardslclett. nun schonetwasgrößerausgefallen alsvorhin. Valirrlsn-Dekknnonen.IndenZcilen9 ln denZeilen4 bis7 findenSiesosenannte vonwcrten zu denVnriablen". bis 12die eDtsprechende ,,Zuweisung Einfächerausgcdrückt:Man erklärt dem Compiler,welcheÄrt von VariablenmaD in seinemProgrammverwendenmöchteuDdwelchenNamendiesetrngensollen. Die,,Zuweisung derürerte"fiillt di€seVariablenmit ehem Inhalt. Die korrekte Slntax zur DeklarierungeinerVariables;ehtfolgenderna3enaus: DATENTYP VARIABLENNAME;
774
in C 4 EineEinfuhrung
wii haben im angcfühflcn Quc tcxt-Beispi€l also drei verschiedeneDatcnq?en veMendet,nänlich crd,i ;,tund lorg. Besonders in der Programmierung von 8 Bit MikocontrollernstehtIhnen meist nü ein begrenzterSpeicherliir Ihr Programm zu Verfügung.Bei der Verwendüng von Variablen muss der Compiler diesen Speicher vorrb rese ieren. le nehr VariablenSie veNenden,unrsowenigerSpeicherplatz bleibt liir Ihr eigentliches Progr{mln. Es gibt zum c'incnVrriablcn, dic m.'hr Speicherbelcgcn(und größcrc Inhaltespeichern konnen)und solche,die nur ein einziges Blre speichern können (alsocinecinzigcZahlzwischcn0 und 2ss). Ihre Aufgabcleährcnddcr Entwicklung Ihrcr Softwarcbcstchtnun dadn, dcn ichtigen Datenq'p tur enreVariable auszuwählen.Um lhnen dieserntscheidung zu rcrricfa. h
Wenebereich
Abb.4.1: Datentypen Sobietct sich für unscrcVäriableled-rratrs, die nur r oder 0 enth.lten wid, nätürlich 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 zugewiesen wurde.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 Werten bereitsbei der J)eklarierung der Variableeingeführt.Dieskann beispielsweise
4.3
1, 2r 3r 4: 5: 6r 7: 8:
vaioblen 775
# i n c l u d e< a v f / i o . h > i r t n a in ( v o id ) i c h a r l e d s t a t u s= 0 x 0 0 ; c h a r r o t a t i o n s q e s c hnwdj i9 k e tj i f t g e h e i n c o d-e 3 4 5 6 i l o n s s c h l u e s s e=l r 2 3 4 5 6 4 3 4 5 ; retürn 0l
Arßerdem hnt si.h durch dieseAnderung äuch die LängedesProgmmmswesentlich verküzt. Itichtig interessantwerdenVariablennatürlich erst dann, wenn Siemit den AusgabeportsinVerbindunggebrachtwerden: 1: 2: 3: 4: 5: 6: 7: 8: 9r
# i n c lu d e < d v f / i o . h > i n t m d ni (v o id ) { charled status= 0xFF; = l]rFFi DDRB P O R T=B I e d _ s t a t u s ; I e d _ s t a t u s= 0 x 0 0 ; P 0 R T=B l e d - s t a t u s ; returf 0;
r0r ]
An1 bestcncrklärt sich das Beispiel wicder Zcite ftir Zcile: In Zeile 4 wird einc Variablemit der Bezeichnungled srarasvom T1a c/rarerstellt und erh:ilt den Wert 0xIF (alsohexadezimäl FF).Bintuwürdedasder Zähl,,11r r I r 11" entsprechen. Zcilc s ist bcreits rus dcnl Eintuhrungsbeispielbekännt. Hier wird lediglich die Datenrichtungvon POIITB auf ÄUSGÄNGgeschaltet. In Zeile 6 wird auf POIUB der Inhalt der Variablenled starasgeschrieben,in unse rem Fall also oaFÄ Das wiederum bedeutet, dass alle Pins von PORTB auf i geschalietwerden. ln einer 8 reiligen LID-Reihe würde jetzt kein Licht leuchten (beiPull Up SchaltuDg, änsonsten natürlichschon). Ir Zeile7 wird der Inhalt derVariableled sransauf 0x00(Binär:00000000) geän dert.An der Schaltung der LEDSpassierthier no.h gar nichts.wir habenlediglich den neuen Inhalt der Variable led sraaa festgelegt.Darum ryird in Zeile 8 dieser neue Weft den PORTB zugewiesen,was bei einer LED Reihe a]le ncht Li.hter
776
in C 4 EineEinfuhrung
Gehen nir einen Schriu weiterl 1, 2r 3: 4, 5r 6r 7: 8: 9: 10: 11r 12: 13:
#lnclLrd< e a v f / lo . h > ift nair(void) { c h a nl e d s t a t u s = 0 1 0 0 ; 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 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* / P 0 R T =A O X A A ; P o R T -B 0 N 0 0 ; D D R =A 0 1 0 0 ; l € d _ 5 t a t u 5= P I l 1 A i P o R T =E l e d s t d t u s i r€turf 0; ]
verscliedeDe zlrr KomDreD Siesehenim angeführteD Beispiel?-wei MöglichkeiteD (//) tierungvon Quelltext.Zum Einenden doppcltcnSchrägstdch und zumAnderen denSchrägstrich mit enremStart (/.) und einemStoppz-ejchen {t/). li ist ganz Ihnenüberlnssen, für welchcArt dcl Kommcnricrung Sicsichcdschcidcn. // bcdcutct,dassfür dcn Rcsldcr aktuclcnZcilc nü nlchr Kon]menrarfolgt.Bei von /* uDd*/ definierenSie,illl Gegensatz derverwendung zur // KommentieruDg, s€lbst,wo Ihr Komnentnrbeginntund wo er endet.Siekönnenhiermit ruch übcr (weitereBeispiele nchrcrc Zcilcnhinwegkommentieren. dazufindenSiein eini gender nochfolgendenQuelltexte.) In deDZeileDs und 6 wcrdendie PortsA und B je$'eilsauf A S.rflggeschältct. In den darautrolgendenzwei Zeilen wnd dabei auf Port A der u/ert Hcrj AA und auf RlrtB derWertHe{i oalausgegebenAnschließend wird die Datenrichtung von Port Ä zuni.k iuf tingd'rggcsctzt. Bcsondcrcs intcrcssanr $,irdcsin Zcilc 10.SieerkennenbereitsdieVerwendung derVariableled status.In diesemfall wnd ihr der Etn ga'gswertvon PortA zuge$'icsen. Würden SieanstattPINA die BezeichnungPORTAveNenden, weiß der Mikocontroler nicht,dassSieeinenwen enrlesen wollenund er liestlediglichdenAasgaüe l,"rfsrvon PORTA,ohncdrzu äuf dic PinsdcsMil(]ocontrollcrs sclbstzuzügrcifen. WennSiegeradedenSimulatorauflhrem Rechnerlaufenhaben,werfenSieeimal einenulick auf das Feßter I/O Viet^/(Achtung:Nur sichtbanwenn Sie sich im Debugmodus befinden).Öfiren Sie.lort deDEiDtragI/o ?oftA und Siewerder erkennen,dassder Simulator tatsächlichz-'fischenData Rcgittetnn,J.Input Pins unterscheidet. BeachtcD Sic dah€rbitte:W€nDSiedcn ZustaDdeiDesPortswisscr WollenSieden 7-ustand wollen,müssenSiennmer PIN,A,PINB usw.veLvenden. eineslorts änden,verwenden SicPORIA,PORTB,usw.
4.3 Variablen 777 Zurü& zu Zeile 10.wir lesendso den wert von Port A (an den Pint e;n und schreiben diesen Zustard in die Variable bd status.Am Ende des Beispiels,in Zeile I l, wird der eben in def Variablc led_strtusgespeichertewert nun auf Port B geschricben.DiesenVorgangkönnen Sieebenfallsim Simulatorverfolgen. In derfolgenden TabelekönnenSiedieAnderungen derZusthde senaumitverfolgen: Zeile Wert Dalendchtung PORTA/(PINA) PORTA
wert PORTB(PINB)
Drtenri€hrung PORTB
4??? 5?Ausgang!! 6?Al1sgang?Ausgang 7 He* AA Ausgang AusgaDg 8 Herl:ÄA 9 He{: AA Eingang Eingang 11 Her AA
? He* 00 Hex: 00 Her AA
Ausgäng Ausgang Ausgang Ausgang
der Achtung:DiesesBeispieleignetsichhäuptsäcllichnir die Verinschautichung wertezuweismgenbei Varhblen und Ports mittels Simulator.In einem hardware basiertenTestist nicht sichergestellt,dassder wert von Port A ab Zelle 7 am Port selbstgespeichertwird. So könDte beim EinlesendesZustandsir Zeile 10 bereits ein gänzlich unterschiedlicler wert am Port A anliegen.wundern Sie sich also nicht, wenn daherauf Port B am Endeni.ht Her ,{-4 anliegt. Ein weiteresBeispielzur aithmetischen Verwendungvon Vnriableni ': l:
'ir!
u a €. o . i o . r ' nd .o d)
4t 5: 6:
N o . r e a e l l e . e D " r o n ._ d ( r o n 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 h i n w e qv e n l ä u f t . * /
8:
.'
t0: ltr 1?: 13: 14:
000:
".,.,
o 0 oa - l e d ' d ,
:
l e d , s t a t L r s= l e d _ s t a t u r + l ; = led_statusl PoRTA 'öc_(rar | | _ i
.:
18:
P O DA = t p o
..or J.;
118 t9: ZA, 21. 22: 23: ]
4 EineEinftihrungin C
= led,status i P0RTA
Hier seheDSie drei verschiedeneMöglichkeiten, um den Wert einer Variable zu erhühenb^{ eineAdditiondur.hzuführen.Zeile13 erhöhtdeDWert voDled r.a t s auf ficri 0.1.Die Funktionsweisedabei ist relativ einfach zu verstehen:,,Neuer Wert = Alter Wert + Zahl." Zeile 16 bietetschoüeinewesentlichkrmfortablere Möglichlcit,denWert von ldd_statrJum die Zahl 1 zu erhöhen.Zeile 13 erlaubt dasErhoherum belieb;ge Werte.Zeile 16bedeutetjedoch:,,ErhöhedenWertvon led-Jtdtrr um gennucinc Einhcit': Mehrerc,,+" änden dann nichts-Da nber sehr häufig die Addition von .l benötigt wird, wurde diese++ Anweisungeingeführt. Zeile19 zeigtschließlich die dritte MöSlichkeitz-urAddition.Es handeltsichdabei in1 wesentlichennur um eine,,kürzcreSchreibweise" \'on Zeile 13. Sie können daberauchhier beliebigeWerteaddiereD. Der Wert i-Ier0,4befindetsichnuD auf PortA am EndedesBeispiels. Siesind bei C natürlichnicht nur auf dasAddierenbeschränkt, sonden kömen allegängigen Grundrechenarten durchfiihren. Hier einigeBeispiele: e d _ s t a t ! s= l e d _ s t a t u s+ 1 ;
ed status= 10 I ed_status; ed status= led status* 2;
DieserÄuszugist schon etwasanspruchsvoler.Äm Ende enthä]t die Variableled srdhlideDWert Her 08.
4.3.1Schtüsselwörterund Einschränkungen Sic könncn bci dcr Dcklaricrmg Ihrcr Variablen alle nöglichen Konbinationcn von wörtern und Zahlenverwenden, esgibt dabeijedochein paxr Einschränkun gen: . DcI Namcdcr Variablcdärf nicht mit einerZähl beginnen,jedochmit eiier oder nrehrererZahlen ender. (Nicht erlaubr int l2rariableie(1a'rbtint l,atiable12)
4.4 Anweisungenund Funktionen
719
. Die VnriableDdürfen kehe aiitlnetischen oder C spezifischenOperatorenent halten,wie etwal, /, \, +, -, #, usw Erlaübt sind Zeichenvon a-2,A Z, 0 9 uDd der Unterstrich ( ). UDrlauteund Satzzeichen sind nicht erlaubt. . Die Längeder Bezeichnung Ihrer Variablensolltenicht ausmehrals32 Zeichen bestehen,denn C unterscheidetVariablennur anhanddieserersten32 Zeichen. . Achruig: C unterscheidetz.wischenGroß und KleinschreibunglDie Variablen int testlnd i t Testsjna zweikomplett verschiedeDe Instanzen. . Esgibt eine lteihe von Schlüsselwörtern,die fiir die Progrämmierungin C reserviert sindund dähernicht alsVariablenbezeichnuns vemendetwerdenkönnen:
Abb.4.2: SchLüsse lwörter in c
4.4 Anweisungen undFunktionen sie hnben anhand der bisherisenBeispielebereits ejnige AnweisuDgeDkennengelernt. ln diesem Abschnitt widmen $.ir uns dcn sogenannten F,irlfiores. Beispiel:
P O R T=B 0 x 0 0 i
5r 6:
)
8:
,o'd eoo r\
0: 11: l
DODB-O
:
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
wird, wennSie EincF?./rkrto, ist eine,,Programmenrheit", die erstdaDnausgetuhrt (iln Befehl gebeD. kinnten Sie z. B. einc Reihe von funkdazu So Quellcode)den Diese tionen 1ür die Konmuniletion mit der seriellenSchnittstelle schreibeD. ProjektenwiederveNendcn. tunktioren könnenSiedanr in nrehreren DerAulbaucincrlunklion siehtimmer gleichaus: ( 0PTloliAL: FllN(Tl0NSllAl,1E PARAüETER 0AIEflTYp DtSRUC(GASELIERTS ) i I . ] T ] A LD T E RF U N ( T I 1 ] ] . ]
] ID Zeile3 b€ginDtbcreitsdic crstcFunktionmit denlNamenledor.Äußerdemken nen Sie den nückgabewert dieserFunktion,ror'd.Da sich zwis.henden beiden KlamDlenin Zeile3 ]€in Inhaltbelindct,eneartetdieseFunltion keineLrbergabe pann1ctcr(mehrdazuetwasspater).Der Inhalt der fuDktioD,Port B auf 0x00zü schalten, ist denkbareinfach. EineFunktionkönntcz. B. einekomplereBerechnung enthalten. [ine Berechnung Dieses ist sogenaDnE Rn./.gdler?rt liefert bekanndichauch ein ,,llrgebnis". der welcher einer Furkti.'r. wie überallin C nüsscn Sie sich nüch hiff überlegen, Datenrypsichfür diesenltückgabewert am besteneignet. AngenomDreD, Ihre lunktion licfcrt rür 0 odü I zuftick.$ielcherDxtenq.puürde dso .idr Dcr sichdnfür anbieten? Natürlichder mit dem kleinstenwertebereicli, danDetrvaso aussehen: F-unktiooskopfvürde t:
c h a rw a h f 0 d e r F a l s c h o
Wasb€deutetabernun der DateDtp /otd,wie er sichim Eingangsbcispiel findet? Daswort 'otd ddckt so vi.j auswic ,,Lccre"oder,,nichts".Und genaudaswoilen wir dort ja rüch: kcinenRückgabewert. UnsereFunkion ausdem Beispielschaltet aus, lediglichden Pon B aufeinenneueDZustand.wir RihrenkeincBcrechnungen und wenn wir dicscFunktionaufrufen,erwartenwir auchkein llrgebnis(abgese henvon der 7.üstandsänderuDs). wlchtig: Wcnn Ihre Furktion also gar keinen Rlickgabeivertliefert, Düssen Sie trotzderndieBezeichrurgro;d angebcn.
undFunktionen 727 4.4 Anweisungen Z-urrickzum Beispiel Dort folgt mit tudojf0 eine weitere,sehr ähnliche Funktion Richtig zur Sachegeht cs dann im Hauptprogramm Dort fiDden Sie den eigeDt lichen ,,Auäuf' von den beideDzuvor definierten Funktionen. Un1 eine lunktiotl vorl zu starten,gehenSieDachfolgendemSchema IUNKTJONSNAME( OPTIONAL:PARAMETER )i DenAufrufeinerFunktionnenntman aucheineAtrwen"rg Siefindenzweidieser den Funltionenhier keine in den Zeilen17 und 18.wir übergeben ArweisunseD Parametcrund erwarten au.h keinen Rücksabewert.Das folgendeBeispielveran schaulichtDun die VcrwendungeinesRü.kgäbewertes: i .h > : L : # i n c l u d e< a v r / o 2: 3 . c h d rq e t P o f t B Vuael() 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
5:
o'NB; o: "'. 7: ) 8: 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 ) 9: 10r { 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 11: '
!r,o
P0P|B
Le,
13r ] 16: { ll: 18:
charled stdtus=0; - 0 rl I oo' B d. DDoB
.J.ga a
0: l:
9 " - o o . t B \ ou e I "a_. o u u : "d ö D o ". _ B V ,oö " 4 d or .,r;
a:
"L
0i
DiesesBeispielist schon etwas anspru.hsvoler' Z€rlegenwir €s in seine BestandEs gibt ä\'ei Funktionen: geQartBvalue) Iiefefi Ihnen den aktuelen Zustand an Port B als Rü&gabewert zurrick. Die Funktion serPorfBvalr€a) erlaubt es Ihnen, Poft B einen neuen wert zuzuweisen. Drei wichtige Grundlagensind: L Die Definition von FunktioDen, die Parmeter erwarten ünd einen Rückgabewert liefern.
722
inc 4 Eine 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: 4r 5:
f e t u r n( 1 + 1 + 2 + 3 ) ; r e t u r n1 2 8i r e t u r i r e d _ s t a t u s/ ;/ l ' . J e lnend _ s t a t ues i n €c h a rV a f i a b l €i s t
ls gibt alsoeinigeMöglichkeiten, um auseinerFunktioneinenWert zurückzulie jedoch fern. Hierbei ist es wichtig, einigewesentlichePunktezu beächten: 1. NachdemSie die Aiweisung /etul, \erwenden,wird kenr weiterer Code in der Funktionmehl ausgetuhrtund die lunklion sofortbecndct.Sic l(önncnsomit enreFunktionauch abbrechen. "vorzeitig" 2. Der in Zeile 6 ( dcn vers.hiedenen rct,|, Beispielenoberhalb)aDgefiihrte parameterlose Aufruf wird nur in Funktioncnakzeptiert, die keinenRückgabcyoid (also wert ablieferDmüssen Funktionensind).Dieswnd in solchenFunk tionen xussctrließlichals ,orzeingerAbbntch vctwcndet ünd nacht nur Sinn in VerbinduDsmit KoDtrollabäagen wie z. B. der Ii/!ZST Abfrage.Mehr dazu 3. Der Datentypder Daten,dieSiexlsParaneterfü dieAnweisungretur, verwenden,mussdemRückgabewert Datentp entsprechen. Siekönnenalsoz. B. nicht eineZahlwie ,,123456532" bei einemRückgabc-Datcntp clrr übergeben. Zurück 7xm Beispiel.In Zeile 20 6nden Sie den Aufruf der Funldon getPorrt ydlr.O. Diesmal findet sich atcr dic Vaiablc led_staflr noch vor .lem lu*tionsnamen.Um nr enrerVariablenejnenneuenWert zu speichern, müssenSiediesen Wert,,zurveisen". Dis funktioniertfolgenderrnäßen: VARIÄBLENNAME= NEUERWERT j Wobei der ,,neueWert" natürlich selbsteine Variableoder Sar enrekoDplexe Berechnung seinkann.Der Compilersetztdannautomatisch denberechneten Wert oderdenInhaltder angegebenenVariable als,,neuen wert" ein.Außerdemkannder Wert" auchdasResultateiner Funktion sein.Und genaudieseÄrt der Zuwei"neue sungver\eenden wir bcim Aufmf in Zeile20.Der Compilerliihrt zuerstdie lunk
4.4 Anweisungenund Funktionen
123
tlon getportBvalue) ars ünd setzt ansc ießend das Ergebnis dieser Funltion (Rückgäbewert) als neuenWert ein. Dieserneuewert wild in unseremBeispiel wird iD Zeile2I der danndirektin derVarjableled Jtatri gespcichert.Anscbließend Wert von led ifatus um eineEhheit erhöht. wieder iDteressantwird esin Zeile 22. Hier sehenSie den Aufrlrf der Funktion setjedocherwanet die PorrBvdl"ea).ln diesemFall erwartenwir keinenRückgabewert, DateDtp .rar Dieser Parameter muss voDr Iunktion enren Ubergabeparameter. (Zeile (siehe 9) wurdeim Klammer sein Zeile9). In der DefiDitioDder Funktion 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: ?r 3: 4,
s e t P o r t B Vu ae r(t 0 ) | s e t P o r t B Vu ae l{0 x F F ) ; s e t P o . t B V a l1ü9e+( 2) 9 ; / sl )e;d s t a t u si s t e i i r eV a r i a b r e s € t P o f t B V a l u e ( r e d - s t a t/ u
Auch wenn die aufgerdcne Furktion keine Parametererwartet, müssenSie auf jedenFaI immerdiebeidenKlamrnenr,,("uDd,,)"anseben: 1:
i r q e r d enie F u n kotni () i
enthält einen bestimmtenWert (Ein Die Vrriable bd sfatrr irn Ausgangsbeispiel gangswertvon Port B un einc Einheit erhöho. Dieserwird dc lunktiolr übergeben.Der Compilerspringtdann auf Zeile9 urd setztdiescnfßergabewertin die lokaleVariableaerwafur ein. Im weiterenVerläufdieserlunktion (Zeile 12) kann dieselokäleVariablc(nur ,,sichtbar" ncrhalbder Funktion)verwendetiverden.In unsercmBeispielwird derwert derVariableauf denPortB geschricbcn. wichtig: Sie benötigen in dieser Funition kein rctur4 da die FuDktion keinen e rartet.Die Funktion,,1äuftenrfachaus" ünd spingt dann Rückgabeparimeter Juromdri',ih dn denUr\prungl./erle221/ur-c' nusbei einerÜbergabe von mehrerenParamet€m wie würdedasBeispielszeDado sehen? l: 2: 3: 5:
# i f c l u d e < a v f / io . h > i n t a d d i e r e { i n ta , 1 n t b ) return a+b;
4 EineEinführung in C
724
9.
r0:
= DDRB P O R T=B
l1: 12. l3:
ln Zeile 3 finden Sie den entscheidendenSchritt da?x. Im Funltionskopf werden mehrereVariablen einfach mit einem ßeisüich voneinandergetrennt. Sie können hier eine ganzeReihevon Vaiablen überseben.Achten Siejedoch darauf Für jede Variable.die von der Funlrtion €rwartet wird, müssenSie beim Aufruf äuch einen wert übergeben(sieheZeile I t ). Im oben angeführtenDeispielwird schlussendlich der Wert Dezr20 auf Port B ausgegeben.
.her |
additionl.h;. .
., .har.ir) 2 . ' . ..
I 3
inr I,'
laan llcidl
.
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: 6:
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 = 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 D0RA
8r
i f ( P I N B= = 0 x F F )
10: 11r 121 13:
]
= oxAA; PoRTA .eturf 0;
Port B wird auf Eingang geschaltet,Port A aufAusgang. Anschließendwnd über pdft, 01, der aktuelle Wert aD Port B der Zill Heri II entspricht. Trifft dies zu, wird artf Port A dcr Wert Ha* 1,4 xusgegeben, ansonsten nicht. In Zeile 8 finden Sie unsereErweiterung.Es handelt sich um eine sogennnnteIfAbfrage. ln der darauf folsenderl Klammer (in Zcile 8) sehen Sie den zu überprüfenden Ausdruck. aftr oder /.4lsrfi ist. Genau Die i/-Ärfrdg? kann nur überprlifen, ob eh Ausdn& gerade der Wert orF passiert lier. Die Abfragc überprüft, ob an PIN3 das auch 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"{" Block üb€rsprungen. net. ht der Äusdruck nicht wahr, wjrd dieser 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 Programmblock 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 l,
# i n c l u d e< a v r / io . h > rt
.d r (vo d)
5: 6l
= 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 = 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: 9:
i f ( P I N Bl = o x F F ) {
4 EineEinfiihrung in c
726
= OxAAi P0RTA
lO: tl: 14: l':
p0Pta 0,00: ]
I : t8:
" -
0:
In diesemProsrammsehenSiezum einendie angeknndigte UngleichheitEtüfung (Zeile 8) tllld zum anderen eine neue Anweisuns, nämlich die elseADweisung (Zeile 12). ln Zeile 8 wnd nun also überprüft, ob der aktucle wert an Port B nicht HercIF entspricht.Das kann bei allen Werten von ,xt0 bis 0rFf der }.all sein.Die else-Anweisungerlaubt es Ihnen, eiren speziellenProgrämmblockzu definielen, der nur dann ausgetuhrtwnd, wenn die l/'Abfrage nicht ,,wahr" oder,,nicht elfildlt" ist. In unseremFall würde däsbedeuten:Ist der Wert aDPort B nicht oirFÄwird der Programmblock von Zeile 13 bis Zeile 15 ausgefühn, nicht jedochder Blockvon Zeile 9 bis Zeile 11. Würde, im ümgekehrtenFall, an Port B der Wert orFI anliegen, würde der ersteProgrammblockausgefühn(weil der Ausdruck ist), de1^leite "aftr iedochübersprunseD. Wir könDendieseTechniknoch um eine letzteMöglichkeit erweitern: 1r
* i n c l u d e < a v r l lo . h >
1:
1.
, or o /
5: 6:
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 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,DOD-I 0,--:
L0: l2:
e l s e i f ( P I N B= = 0 x 0 0 )
d.
D o D0 - 0 . 0 0 .
'61 1: .8:
?,.: ,a' l': l
el.e t
| ( P I N B- ' 0 ^ 0 5 ) D 0 0 - .- 0 / r 0 .
D o oÄ : o . t ; .e '' n o;
undschleifen 727 4.5 Abfrogen In diesemBeispiclbcfindcl sich eine Els.-{-Anweisung in Zeile 12.Siekönnen auf dieseWeisemehrereAusdrückeüberpdfen, dabei kann jedoch nur ein eitlziger 1valrrsein.Altennti\-dazu könnten Sic natürlich au.h cinzclneIf-Abfragenvenrendcn. Dicswürdejedochunter UmständenmehrereLösungenergebenund somit mehrereProgrammblocke austuhren. Im oben angeftlhrtenBeispielbekomDt Port A ehen bestimmtenweit zugewiesen, je nnchdemwel.hd wcrt an Poi B geradeanliegt.Trifft keineder Bedingungel zu, in Zeile22,alsodeDrelseBlock,ausseftihrt. wnd der Programmcode NatürlichkaDnin einem4Programnblock auch eine weiterellAbfrage liegen. Daskönntedannso ausschenl r:
1.\ts--'
==0x50) lf (PIND
3: 5, 6: 7:
/
j
P 0 R T=B0 x 0 0 i
)
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 wert än Port schiedene Zus6ndeerlaubt.Ie nachZustaDdliegrein entsprechender B an. Die Ablinge dieserZuständewürde ein unübcrsichtlichesIf-tlse-Konstrukt bcnöligen. Art \-onAl,/rase, nämlichderrurch-Abhage DieslässrsichabermiteiDerahnlicheD 1i 2: 3:
# i n c l u d e< a v r l io - h > int main(void)
5: 6:
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 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: 11: 12, 13: 141 1 5| 16: 17: 18r t9: 20. 21. 22:
c a s e0 x 0 0 : P O R T=A 0 x F Fi breaki c a s e0 x 0 i : = OXAA; P0RTA b r e ak ; c a s e0 x 0 2 : P O R T=A 0 1 5 5 ; c a s e0 x 0 3 . P O R T=A 0 x 8 8 i D r e d( ;
?5: 261 271 2Al 29: 30: 31r ]
= 0x00; P0RTA break; )
Vor dlen1fit State-Machines istdieses'dtc, Abl;agesehrhilfiei.h.Stnte-Machines Art wobei die Softwarevon beschreiben eine besondere der Progrämmierung, j€der ZustaDdeineeigene einemZustandin cinenanderenZustandwechseltund 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äherunterMöglichkeiten(eng.:cases), die auf den suchen.Fernergibt es dann verschiedene 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 l,reat ist Das anschließende anscbließe'dder wert 0x5s auf Port A geschrieben. 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, tpischen Eigenheiten der nutomatisch ausgetuhrt. Diesist einederwenigen,jedoch Sprache C.
4.5 Abftugen undSchleifen 729 Daher: Das Schlüsselwort,/eaft bricht an der aktuellen SteIe die weitereAusfti}lrung der Ab&agenb und kehn rurn Pfogamm zudck. wird dieses,rea& nicht am Ende einesjeden cdseverw€ndet,werden bei einer Ubereinstimmungmit einem Ab&agewertauch alle anderenAbfragen als erkannt und der komplette, "richtig" noch folgendeCodeausgeftihrt. Würde in unseremB€ispieloben kein €inzigesü/eaftvorhandensein und an Port B dei Wert 0x00anliegen, würdennacheinarder die Zeilen11,15,19,23und 27 ausgetuhn werden. Das ist sicherlich nicht erwünscht,daher soilte lnan niemals das In Zeite26 findet sich mit der& lf nbernoch ein weiteresS.hlüsselwort.NehmeDwir an,Port B trüge denWert 0x20.DanDwürde keine der oben mgefühfien .dre-Möglichkeiten zutieffen. Genau darum kümDert sich das Schlitsselwortlelaah Es bedeutelin ersterLinie: wenn wirklich keineder Möglichkeitenzutrifll, mach "Nur ro[endes ..." Sobaldeine Möslichkeit isl wird dasdelarlr auch schonver"wahr" worfen. Wäre der Wert im Beispielan Port B also 0x20,würden wir än Polt A den Wert 0x00ausgeben. Diesetut der Abftagesiehtbei einer Reihevon Anwendungendoch etwasübersicht licher aus als e:-l]ereil.e lf-Abfrage.Es sei jedoch angemerkt,dassman eigendich immer äucheinenormale4/tbe Abftagestatteinerslrtfc, Abfrageverwendenkann. Siehabenzu diesemZeitpunkt bereitsdie wichtigstenMethoden der Softwareent wicklung in C kennengelernt.Das Einzige,was lhnen zur erfolgreichenBntwicklung noch fehlt, sind Scl eifen.
4.5.3white-Schteife Eine Schleifeist, w;e der Name schon erahnenlasst, etreäs,wäs sich ,,im Kreis" bewegt.Gennu diese Eigenschaftwird Ihnen bei Ihren Programmeneine große Hiife sein.Was,denkenSie,passiert,nachdemIhr Programm zrr Ende ist, also die Ielutc ZeUe\on nah) eueicht mrde? Darauf gibt es wahrschen ich keine hun dertprozentigrichrigeAntwort. Denn je nach Compiler und Einste ungenwird Ihr Programm sich anschließendentweder aufhängen,neu starten oder vellücke, .nl'".ri--r"
ni"."
i"-
Der Programmcod€wird im Flash des Mikrocontrollers gespeicheit.wenn näch IhremProgranmcode nochZeichenim Speicher liegen(all€saußer0x00),wird der Controler dies als Maschinencodezu interyretielen versuchen.Das kann zu uer wünschtenResultatenführen. Normalerweisehangt sich der Controler aber auf und benötigt anscNießendeinenReset.
in C 4 EineEinführung
130
Die säDgigste Anwendungeiner Sc7'b,t beginnt bereir' hier. DasProsramm könnte sich z. B. immer wiederholen.Es sibt hierbei zwei Möglichleiten, wie Sielhre Soft wareentwickelnkönnen: -
sequentielleAusführ!ng
L,ry:Evc l l> f "".,p,"hb.tr" r t_.
Abb.4.4:Programmablauf
2:
{ 5: 6:
D D R =B 0 x F F i llhile (l)
{ 8: 9l l0: 11: ),2:
= 0x00i PORTB = 0xFF; PORTB
Die neueFunktion trägl den Namenü/lil€, as so viel bedeutetwie ,während". Urn genauerzu sein:,,während der Ausdruckin der Klämmer wahr ist, führe den untergeordnetenProgrammblockaus". ln C (und generellin warum habenwir dann eine I in die Ioammer geschrieben? der Softwäreentwicklung)cntsprechen0 und ale negativenZahlen alrtomatisch den Zustand,,nicht wahr",oder,,falsch". Zahlenwie die I und darüberentsprechen dann dem Zustand,,wahr".In unseremFrll würde dnsbedeuten,dassdie Klammer bedhgung nnmer,,wahr" ist (weil sich die i dori nicht mehr verändert).Dasmacht durchausSinn, denn das ist genauunser Anliegenrbedingungslosewiederholung Der Controller wird desProgranmblocks.Man nennt dies auch eine-El,dlosscÄld/e. - zumhdestsolange in diesemBeispielausder Schleife nicht nehr herauskommen nicht, bis Sieihm einen Rcsetgenebmigen.
4,5 Abfrcgen undschleifen 737 Un sicherzugehen, dasssich lhr Progranmnach der Ausführungnicht in einen unbestimmtenZustandbegibt, empfieblt essich auch,diese,n,llosr.l,lefe am Ende jedes Programmszu verwenden.Vor allem natürlich bei solchen,die nur einen bei dener der DurcNauf pro Resetbe,rötigen(Beispiel:Einschaltmechanismen, eingeschaltetwird und dann eine Mikocontroller mit enrerSpannüngsversorgung kurzeRoutincausführt,um anscliießend ,,nichttmehr"zu tun). Auch bcim TestenIhrer Soliware wird sich diesc ScHeifenmethodikals hillieich erweisen.SieköDnendasGanzeauch in eher Hdrg llp AnweisuDs(in dieserZeite bleibt der Controler sicherbis zum Resethängen)zusaamcnfässenl : 3
,Lde a1'
"
o.h
1 1 1 o : n r .o d '
5: 6r
D D R A- O x F F i / / D D R B= 0 x F F ; / /
8: 9r 0: 11: lzt
DOPB-000: = 0rA3; // P0RTA bOD-B 0 : Rhile(1); //
): \4:
r e t u r n0 ;
P o r t A d u f A u s s a f gs c h a l t e n P o r t I a u f A L r s q a i qs c h a l t e n
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
Endlosschleife: Hang-rp
Erreichtder Mikrccontroller Zeile 12,wird er sich dort bis zum nächstenResetf€sthängen.Ailes darunter(nr unseremFallnur /etulfl 0)wird niemalsausgetuhrt. Die ttrile-Schleife ist aber eigentii.h fiir höhere AufgabenbestimDrt.Das könnte
1;
2: )
e
!
udö
o.'
o.L
r 'a.' ,oidl
5: 6:
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 D D R =B 0 x F F i/ / P o r t B a u f A u s g a n sqc h a l t e r
8.
rh t" /pl!d:
t0. 1t: t2r 13: 14:
D O P - .B 0 1 Ä d ,
0.00) j
while(1)i // tirdlosschlejfeH r a n su p r" u
0i
732
4 EineEinführung in C
Die Magie passierthier in Zeile 8. Im WesentlicheD bedeutetdieseAnweisung an Port A nicht der Wert He* 00 anliegt, warte in einer Schleifeund ,,Solange machenichts': Nehmen wir an, es liegt plötzlich der Wert He,. 00 an Port A an (Beispiel; ist sonlit eineTaste,die alle8 Bit äuf.] schiltet).Die Schleifenbedingrüg nicht mehr erfü]lt und der Controller springl weiter zul nnchstenAnweisungin jn dieEndlosschleife Z,eile10.DasPrograDmläuft schlussendlich ab Zeile12. Das ware bereits ein gutes Beispiel ft Interaktuität, basiereld auf extemen Zustandsänderunsen. cehenreir einenschrittweirer: 1:
# i i c l u d e < a vn / i o . l r >
3: 5: 6:
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 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 = 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 DDRB ! h i l e { P I N A! = 0 x 0 0 )
t0: 11. 12. l3: t5: 16: Ll: 18:
P o R T =B a ; ] 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
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. im Simulatorverfolgen. Waswird passieren, SiekönnendiesesBeispielanschaulich wenn die Vadablea den wert 255crreicht?Siewird bei dcr nächstcnErhöhungwieder bei 0 beginnen.lvlannennt dieseinen Somitwürdeam Port eine "Uberlauf: Zahlenreihe, ähDlichdieserausgegebeü werdeD: 2, 3, 4, 5 ...253,2s4,255,0, 1,2, ,,r, 3,4......"
undschleifen 4.5 Abfragen
733
4.5.4 for-Schleife während die ltle-Schleifeeherals Es gibt noch eineweitereArt von SchleifeD. gedacht gilt ist, dicfor-schleife mehralseine,,2ählschleife': ,,Bedingurgsschleife" Die w,tle SchleifesolltenSieveNenden,weDnSieauf einebestimmteBcdingung wartenund nicht gcnar \rissen,,wann" daspxssieren wird, bzw.nachwie v;elen oft Dur.hläufcndieSclleifeendet.ßei der/or Schleife wissenSie(Dreist)seDau,wie die Schleifedurchlaufenwnd. Sieverwendene en Zähler,und wenn diesersein Zieleircichthat,wird dieSchleife beendet. Ein Bejspielzur/o/ Schleifel 1: 2:
+ i ' ' r c l u d<ea v f / io .h >
3:
int nain(void)
5: 6.
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 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: 9. 10: 11: T2: 1:l:
f o f ( i = 0 ;i < 5 0i j + + ) { P O R T=B i ; J
15: 16r i
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 r e t uf n 0 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 unscrem 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ählvadable ; 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?
jedochLiestder sroßeVorteildarin,dassdiese Dasklingt nun allesetwaskoDrplex, Art der Schleifeeigcntlich inmcr glcich ausschcnwird. wenn Sie einnul den Auf bau (wie oben)kennen,konren sie die schleifeimmer genauso verwerdenund Prognmnlblockund die SchleifenbedingunändernledislichdeDunterseordneten gen.DasErgebnisunscrcsBcispicls wärcdieAusgabe derZahlen0 bis49 auf Port a. D;.eLtkret ütanweisutlg lrird ersr nach dem ersten Durc|lauf ausgeführr.Somit trägtdie Variablei bein erstenDurchlaufnoch denwert 0. Auf Port B liegtnach der Schleife.ter wcrt.19an,jcdochrräg1dicVariablci denwert 50. Dn diej{,r-Schlcifc auchanderePtrrameter alsi++ akzeptiert, könnenSiez. B. auch prolrammieren. Dies könDteso aussehen: eineAbt\tärtsschbife 1:
f o f ( i = 1 0 0i j > = 0i i - ' ) P O R T-B i i
3:
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?"
vonSchleifen 4.5.5 break- Abbrechen Die Anwcisungürrdt ermöglichtdensofortigen AbbruchdesaktuellenProgramm blocks.Ein solcherProgramnblockktinrte aucheineschleifesein.Hier zweiBcispielczum Abbruchvon Schleifen: 1: 3r 4: 5: 6:
7: 8: 9: 10:
f o f ( i = 0 . j < 2 5 5i j + + ) if (i==50) bredkl P O R T= B i: ] r , / h i l e( P I N B l = 0 t 0 0 )
I
j f ( P I N B = = 5bIr)e) a k ; P O R T= B0 x 5 5 ;
]
Diese beideü Beispieleerklärensi.h von selbst.Sie könncn also nach einer bcstinmten ^bfrage entscheiden,ob Sie die Schleifeschon abbrechen "r-orzeitig" wollen. (zwischenden Klxmmern wichrig: Eswnd ledigli.h der aktuelc Progrnmmblock ,,{" und,,}") libenprungen,nicht derkompletteCode.
4,6 Arroys 135
4.5 Arrays NehmenSieeiDmalän,Siewollenmit Ihrcl AnwendrngeineReihevon Messdaten cinlcscn.Siebenötigendailr s0 Messwerte, die auchwährenddesBetriebeszwi schengespeichert werdeDrnrissen.Eine Möglichkeitwtue es nun, 50 einzclnc Variablenzu deklirieren.Daswäreschrmühsäm.AusdiescmGrundbietetunsdie Programmiersprxche C einhervorrageo desKonzeptmit derBezeichDuDgAr/aF. Ein Array umfassteine,,Reihevon Variablen".SiekitDneDbestinmen,wie groß dieseReih€ist ünd von welchemDatcntypdie werte sind.AußerdemkönnenSie und lesenund auf einzelneEinträgein dieserReihezugreiGn,derenurert setzeD komplette A//a]' durchlnufen. Dazu ein Beispiel: auchdas # i n c lu d e < d ! r / i o . h > 2: 3: 5:
chaf wertel50l;
8: 9: l0| 11: 12: i3:
!ertel0l = 50i r e r t e l l l = 5 5i |ieftel2l = 0; c = tert€I0l + reftelll i !eftel2l = c;
l5:
In Zeilcs lindcn Siedie DeklarationeinersolchenReihe.Siedefinierenalsogarz gebenSic DateDq?und eiDeBezeichnung. Anschtießend normaldengewünschten iD eckigenKlammemdieÄnzabldcr ElemenleIhrer Reihean.ln unserem!'a11sind das50 Elemente. Zu BeginndesProgrammsenthaltendieseElementeDü unsinnige,alsoirgendwelche zu*illigenwerte.ErwärtenSicalsonic, dnsslhre Elemente denwcrl 0 häbcn- außerSiehabendassoveranlasst. wichtig: Dcr crstc Wcrt dieserReinebeflndet sich an der Stelle ,ertel0j und der letzrewert an der Stellewertelagl.SiewerdeDalsokein Glückhaben,den s0.wert mit rsrrI50l zu errei.hcn.DassoltenSiebeachten. Die Zä]rlunglreginntbei 0. Siehabenesbereitscrkannt: In urrrrcl2l findet sich natürlich der Wert i05.
736 4.6.1 Strings(Zeichenketten) Die wohl häufigsteAnwendungvon Ä//a/s ist die Zeichenkettebzw St/ir& Es gibt in C keinen eigenenD.tentp tur wörter, Tene, etc.",lediglich d€n Daten"Sätze, t}?.iar, der nur ein eiDzelnesZeichenfassenkann. Äus diesemGrund bildet man ein kftay lon charvaiablen, um einen ganzenSatz darzustellen.Um dasEndeeiner Zeichenlctte zu mükieren, gibr €s die sogenannte sting-Terninierung. Das Konzept ist eigentlich einfach: Der Controller hat keine Ahnuns, wie lang dnsAnal wirklich ist. wenn Sie es durchlaufen,müssenSie als Programmiererwissen,wann dasletzteElementerreicht ist. hher hät mln sich entschieden,das Endeeiner Zeichenk€ttemit einem "Nullzeichen" 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€icheDzu 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). einer Funldon überschrieben Mit dieser Technik wurde die Rücksprungadresse 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: ?. 3l
char satz|2561i
s a t z l 0 l= satzlll s a t z t 2 l= s a t z t 3 l= s a t z t 4 l=
5: 8:
'H' 'a' I' 'l' 'o'
sat2I5l:0x00; 10: 11: 12. t3:
for {i:0' satzijl r- 0; i++) { 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 ngendwann im Speicher gümn sichentwcderaufhlingen oderdannstoppeD,wenn AlrchweDnmnndiesleichtvcrmutenmag:Der Controllerweiß eineNull erscheint. bei einerfehiendenNull nicht, dassbei satz[s]Schlussbt. Ebensoweiß er nicht, dasser spätestens bei satz[255]aufllörensollte.Er $'eißgrr nichts.Somitläuft er s,trzl2s7], satz[258]usw aus. weiterund gibt deDInhaltvon sätz[2s61, Da lhr Aral irgendwoim Speicherliegt,liestder Compilerbei satz[2s6]einfäch das,wis ils Nächstcs im Speicher steht.ReinesChaos. fest,Nanngcnauder string zu Ende LcgenSiedaherentwederschonin derSchleife ist (in unseremFallnnch5 Zeichen)- oderachtenSieimmer auf die abschließende Null. wüfde män nun zum Iormulieren eines ganzen Satzesfür jedes Zeichcn eine dnssehrünständlichund würdekeinenSinnmacheD. eigeneZeilebenötigeD,Näre 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: i .r .d. . o,'
t.
,
: t:
'4r.dö
a: 6: -:
8. 6:
'_'ci
:o.h.
ri'9h \.oa h. hd'
,rzt25_ i ii
-.'e. 'qr'.
rello I'o lo'\:
138
4 rineFinführung in C
Ltr
ro_ i 0: ,ar' i
13: la:
l
b: 17:
:- 0: a
Rs232_l,iri teByte(satzli I ); "r .
0j
]
Die tunktion trcp), kopiert eineZeichenkettein unserArr4,. DasNullzeichenw;d däbeiautomätischnDgehängt.Hier eine ldeineAuflisrung der wichtigstenFunktionendersfirg.h Bibliothekmit denentsprechenden ParameterDl Funktionsname
ErH?üung
strcpy(dest,sour€e)
Kopiert eiDeZeichenketteGource)über eine andere(dest)
strot(dest,sour€€)
(source)an enreandere HängteineZeichenkette (dest)an. Zeichenkette
strlen(souce)
DiescFunldionhät eilen Rücksabewert. cibtdie LängeeinerZeicherlette(source)zurü& (ADzahlderZeichenbiszum Nullzeichen).
strncpy(dest,source,count)
Kopiert einebestimrnteAnzahl von Zeichen (count)von enrerZeichenkette (source)in eine ander€(dest)
strncat(dest,source,count)
Hüngt einebestimmteAnzahlvon Zeichen (coun, von einer Zeichenkette(source)än eine aDdereZeichenkette(desi) an.
Abschließend ein Beispielderverschiedenen Funktionen: .:
t: r: .:
d.n
.aF
n. lain\
t.
9.
\
o aJ
{
6: 7;
c h a r s a t zl t 2 55 I i charrontll40l
8: 9: 10:
.harwort2l4ol c h a rw o r t 3 l 4 o l c h ar j j
l1: t2.
s h c p y( r o n t 1 , " S o " ) l l
.p. Lo.
_ru Ltra
a'-
"1,
739
4.7 Bit-Operationen Im folgendenUnte*apitel lernen Siedie wahrscheinlichwichtigstn Methodender hardwarenahenSoftwareentwicHungkennen,die soge']^al:nten Bit-Operotionefi. Mit Bit-Operationen könnm Sie, wie das Wort sdrcn erklärt, im ,,Bit-Bereich" arbeiten. Der Datentp.rrr ist der kleinstezur V€rfijg!ng ,rehendeDarenty?und 8 Bit 8roß. Ein Port hat auch eineAalressierungsbreite \ion 8 Bit. \{ie abersollenSiez. B. den 3. Pin auf Port B schalt€n,wenn Sie nur 8-Bit-wert€ schr€ibenkonnen?Genaudazu benötigenSiedie Bit-Operationen.
4.7.1Altgemeines Di€-Grundr€chenart€n der Bh-Operationen_ sind: . . . .
ÄND-V€rknüptung (Opemtor: &) OR-verlnüptun8toperator ll XoR-Verknüpfung(Operator: ^) NoT-Operation(Op€rator:-)
Bei alen VerknüptungenhabenSiezwei Opemnd€nzurVe iigung und b€komm€n ansd ießendejn E Sebris. Di€ AND-V€rknüpturg arbeitet nach folgendem Satzr w€nn beide Bits den "Nur Wert I haben,ist dasErgebnisl, sonst0':
140 Die oR-Verknüpfung arbeitet so: ,,wenn einesder beiden Bits oder beide Bits den Wert I havhaben,so lautet dai ErgebnisI': Die xoR-Verhüpfung funltioniert so: wenn einesder beidenBits d€n We l "Nur trägt, dasandereaberden Wert 0 besitzt,ist dasErgebnisl, sonst0': Achtung: Die NoT-Operation benötigt nur ehen Operanden.Sie kehrt lediglich denWert selbstum, wandelt alsoale .l in 0 und umgekehrt. Beispielel 1&0=0 0&0=0 110-1 0 0=0 l^0=1 0^0=0 -1=0
letzt k€nn€nSiedie Grundtunlcionsweiseder Bit Operationen,wissenabel immer noch nicht, wie Sie,n der ddtten Pin von Port B heranlommen. Düer n:ih€m wir uns d€n Bit-Operationenim 8 Bit Bereichl Beispiele: . . . . . . . . .
= 00000001 0000111 I & 00000001 = 00000000 11110000 &00001111 = 00000000 11110000 &00000000 = rrr10000 0000000011110000 1 1 1 1 0 0 0000 0 0 1 1 1 11=1 1 1 1 1 1 1 1 1 1 1 0 0^0 0 0 0 0 1 1 = 1 1l l l l l l l l ^ 11110000 = 00000000 11110000 ,'11110000 = 00001111 = l0l0r0r0 "01010101
Das isr ein beträchdicherBit-Block. Nehmen Si€ sich die Zeit und überlegenSie, wie die Ergebnissein den Beispielenzustandegekommensindledes Bit wird mit einen Bit an derselbenStelle des anderenwertes gemäßBitOperation 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 wir die obenangefiihrtenBeispiele, der Lösungaberschonsehrnahe.Analysieren lassensicb folsendeAussagentreffen: nm bcsten.Nur bei Bit zu setzen, eignetsichdie OR-Operatid, Un ein bestimmtes 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 kdnnen Sie einzelneBits der Variablebeliebig ver:indern.in diesen Fall, bei Verwendungdcr 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 Daswürde (nehmenwir an, wir wolleDdasdritte Bit löschen) kator angewandt. etwaso aussehenl anhandeinesBcispiels . . . . .
Wert:000011l1 (Wtuwolienßit 3löschen) Modilikator:00000100 -Modijikator: 1111101l I WeI1& (-Modi6kator)r 0000111 1 & I 111101 I = 0000101 Also:Bit 3 wurdegelöscht!
in C 4.7.2 Bit-Operationen h der Prl\is eirÜbung,um dieseßit OperationeD ns bedarfnatürlichgewisser fach und schnellanwendenzu könneD.Glücklicheiweisegibt cs i]l C hierfür eine praktische,,Äbkürzung": 1: 2: 3,
/ * H € t f e f m a k r o s* * * + + * * * * * * + + * + + * * + + / # d e f i n €s e t b i t ( P , B l T ) ( ( P ) = ( 1 < < ( B I T ) ) ) # d e f i n ec r e a r b i t l P , B t T )( ( P ) & = - ( 1 < < ( B I T ) ) )
5: 6:
s e t b i t ( P o R T B1,) i 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
in C 4 EineEinführung
können, müssenSie dazu zwei kleine Makos definieren.Diesefinden Sie oben in deDZeilen2 und 3. SieköDnendiesebeidenZeilenin jedemIhrer Prosramnewiedcrvcrwenden.KopierenSiedie Zeilendazu direkt unter die #i,i.hdd-Anweisungen. Die Zeilen 5 und 6 demonstrierendie Anwendung.Der ersteParameterist der zu ver:inderndewert, der zweite Parameterist das 7.uveränderndeBit (begiDnend mit 0).
4.8 ISR:Interrupt-Service-Routine In dem nun folgendenAbschnitt flnden Sie Hinweise zur Programmierungvon sogenanntenInterrupt ServiceRoutinen. Diese Funldonen werden automatisch vom ProzessoräügeNfen, wenn die Interruptbenachichtigling eingeschrltetist und ein bestimmterInterrupt ausgelöst wird (BeispielEmpfangeinesZeichens überdie serielleSchnittstelle). SolcheineInterupt-Funktion kann in C etwäso aussehen: ' 3t r'
r l c r \ t ar
rFoo 0v
,p
1
/ / 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 D o DD : 00DDi0.
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 "Skelett" einer ISRsieht so aus: 'lL\Ä
_ \ T - o Dj P r \ I t
T0D
Dabei ändert sich lediglich die BezcichnungINTERRUPIyEKTOR, je nachdem, welchenlnterruptSieabfangen wollen.Auf Seite137sehenSieeineübersichtder wichtigsten Interrlrpts. Eine umf.ngreichere Liste finden Sie unter http://w.nongnu.org/avrlibctusermänud/group-nvr-interrupts.htnrl. (1. Spalte)velwenden.Diesewurde Siesolten auf alleFäIe die neueBezeichnung erstvor kur?€m(Seir avr libc 1.4.0)eingeftih(und wnd hngliistig die auslaufen den Bezeichnungenersctzen.Ein croßteil dcl im Internet vcrbreitcten Softwäre veruendetaberroch diealteBeT.eichnunsdahertuhrt dieseListebeideVariarten.
4.8 ISR:lnterrupt-SeNice'Routine
Vektor
Alte Bezeichnung
ADC_vcct SIG ADC ANA COMP vect SIG COMPARATOR ANALOG COMP_vcct SIG COMPARATOR INTo ve.l SIG INTIIRRUITo INTI vect SI(I_INTERRUITI INT2_rct SIG INTERRUPI2 INT3 vect SIG_INTERRUPT3 SIG SPI SPI,STC-vcct TMERo COMP vect SIG OUTPUT COMPAREo TIMER0 O\.F vect SIG_OVERFIOWo TIMER1-CAPT_Ve.I SIG INPUT CAITURI1 TIMERT OI.F vect SIG OVERFLOWI TIMER2 COMP-vect SIG OUTPUT COIIPÄRE2 TIMER2 OV! vect SIG O\rlREIOw2 SIG 2 \VIRE SERL{L T\\.1 vect SIG UÄRI RICV UART R{ vecr UART TX vect Src-UARI TRdNS SIG UAJTTDATA UART UDR!_vcci USAIT RX ved SIG USARI,RECU SlGUART-RECV SIG USÄI{T RDCV,SIG USART_RXCled UART-RE(]V SIG USART TtcANS,SIG USART-TXC vcct UART TRANS
143
Bescheibung ADcconvcßion Cohplete ^nalogComparator Aulog Conrparator lxtcmal hterrtrpt 0 lxtehal InterruptRequest l latenrallntcrrupt Requcst2 Externallnterrupt Request3 SerialTransfd ComPlete f imetclöunteroconp.reMatch Timetcounte Ove.flow T,m.r/Comrer CaptureEvent Tlmetcounterl Overilow Match Timer/CouDter2 Conrparc Tincr/Counter2 O\erflow 2 wire Süial Intcrfacc U R! Rx Cönplete UAm, Tr Comllete UARTData RegntcrEmp$, USART,td Complete USART,Rx Complcte USART,Ta ComPl.'tc
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 Datasheetbzw.der Dokumcnbar, cenauercstudcn Siejedoch im entsprechenden trtion Ihres C-Compilers. Die ,,neue Schreibweise" fiir eine Interrupt-lunktion und sieht nun so aus:
hat sich ebenfalh geäDde
] 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 Speicherplätzen (gemessenh B)'te). Demnach bekommt also auch jede Variable eine bestimmte Speichem&esse, an der sie dre Daten im SRAÄ.{abspeichert.Hier eine graischeVeranschaulichung: SRAI\{
f
ü,t-''''-lT.r;;-lF--''''-l
t .n";lFr.I
Abb.4.6:Väriablen in SRAIVI Nun existiertabernoch eine weitereArt von Variable,näniich die bereitsangekündigte ZeigeNariabl€(eng.rPointer). Der Sinn dieserVariablenbestehtin der Spei cherungvon Adressen.sie merkt sich also,wo andereVadablenim Speicherplatziert sind. Siemerkt sich äuch,welcherDatentt? sich an eirer bestimmtenAdresse be6ndet.Sobenötigt €in crdr etwänur I B)'te im Speicher,w:iiretrd ein tuf schon2 Bltes belegt.Aus diesemcrund hat man sich fü eine einfacheund doch logische Bezeichnungentschied€n: . char*ptl; . inr* b! . double.d; Der Sternbedeutetimmer Zerger.Von welchemT]" dieserZeiger ist (bZw.,,...welchen Datent,? die Variableb€sitzt,auf die di€serZ€iger deutet"), sehenSie direkt davor.Sozeigl z. B. ein€ chdrt Variableauf einen I B)4ectar-wert.
(zeiger) 745 4.9 Pointet DäsfolgendeBeispielbrin$ Ihncn die t\nktionsweise von Pointernetwasnütrer: l: 2:
#i nclüde
I
5: 6: 8: 10. 1l: T2: 131 t5: 16: 17: 18: l9:
i = 5i p = 10; j - o; *k = 15;
Nun lautet die vermeintliche Fangfragenätürlich: ,,welchen wert enthalten die Variableni ünd j am EDdedesProgramms?" Löse,rwb dasProblemnrch altbekanntemSchema,alsoZeile tur Zeile:In den Zei len s bis 8 6nden sie die Deklaration von je zweiVariablenuüd zwei Zeigen eines passendenTyps.Mit Zeile 10 bekommt die Variablei den erstenWert zugewiesen' naimlich5. ln Zeile 11 gebenlvir der Z€igervariableP den Wert l0 Zu diesemZeitpuDtt ,,?-eisl"die Variablenün auf den Speicherplarzan der AdresseI 0. Es1\ird auf ein Bite gezeigt.Eshandelt sich urn einenZeigerdesTypstfial, alsonü ein ßlte. In wnklichkeitsastunsdieseAktion 'renig,wn wissenJanicht,wäsan dieseroninöscnSpeicherst.:lle10zu finden ist. lnteressanterwird esin der folgendenZeile.In Zeile 12 wird der ZeigervariableP nun die Adr€sseder Väriablet zugewiescn.wenn Sievor einer VadäblendasÄnpursd,ld {ein kautuännisches,,Und'.,also &) anftihren,setd der Compilernicht den Inhalt der Variablean dieseSrelle'sonden die Dasist entscheidend. Adresse. an dersichdieVariable p zeigtnun alsoan die Speichentele, UnsereZeigervariable (Terminal,et ) zur Vertugüg t befindet.Würden wir eine Ausgabemöglichkeit derVariable,aüsgeben Speicherort haben,köDntemandengenauen Nochmehl passiertin Zeile13.Hier findenSiedenSternvor der ZeiseNariablen Dns ist nun die ümgekehrtelunktion dessen,waswk ebengesehcnhaben Es wird an dieserAdresse. sondcmder eingeset4, hier alsonichtdieAdresse "Wert"
746 Um rn aber an den Zidort zu g€langen,also an die Stelle,an die dies€Adresse z€igt,benötigenwir den Stem-Operator Hier ein einfacherVergleichl SehenSiesich den C,oileill Zeile I I und Zeile 13an. Ir beidenzeilen weis€nwt d€r Zeigervariablep einenwert zu. Der wesendicheUnt€rcchiedbest€htdarin, das, vrü in Zeile l1 die Ädresse,auf die 2 z€igt,verändern und in Zeile 13 an dieseAdresse gehenund denwert, der sich dort befindet,?indem.Hier eineGrafik: SRAM
f.h";lfö"i'l
Abb.4.7:Funktion €in€sPointers Die resdichenZ€ilen sollten nun ein Klnderspiel sern.Die richtige Antwort lautet also:t=8 ünd j= 15.was in p und & steht,wissenwir nichg eshandelt sich dabeija lediglich um ngendwelcheAdressenim Speicher
747
5 Anwendungen 5.1 SerielleKommunikation Zu den häufigstenAnwendungenbei der Entwicklung am Mikrocontroler zählt die serielleKommunikation. EDtwedermit einem PC oder lnit einem nnderenMikro stellt daherein typischesSzenariodär: controller.DasersteAnwendungsbeispiel Der PC wird mit den1Mikrocontroller verbunden.Auf dem PC wird mithilfe eines trninals die seriele Kommunikation mit dem Mikocontm er hergestelt Anschließendkann der Anwender dem Mikrocontroiler einige Befehleschicken ünd bekonmt darauf jeweilseineentsplechendeAntwort. Di€seseinfncheBeispielbietet Ihnen einen gutenAusgangspunktfür neueProjekte, denn die serielleSchnittstelewerdenSiezumiDdestwälrcnd der EntwickluDsöltcr
siesollteneinenBli.kalfdiewebseitezumBuchwedenuster: und http://www.wrbu.h.de-Dortfinden5'e letzteAnderungen aktuelleUpdateszude.EeispielenindiesemBuch.
Matelial 5.1.1 Benötigtes . ATmegaS, ATmega32,... te nach gew;ihltemMikrocontroller müssen -ATmegar6, 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
der Hardware 5.1.2 Instandsetzung Der ersteSchrittist, die Hardwarefunktionstüchtigzu machen.Hier passieren die häufigstenFehler,daher finden Sie auf der beigelegtenCD-ROM bereitseine vorkompilierteHEX-Datei,die Sienur mehr in Ihren Controllerflashenmüssen.Sollte dieAnwendungnichtfunktionieren,liegt der Fehlervermutlichim Hardwareaufbau. Wir eehenhier der Einfachheithalbervom STK500aus.SolltenSie ein STK500komfatiblesBoardbesitzen,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) AGND AREF avcc
PCo(AOCo) PCl(ADCI) PC2(ADC2) PC3(ADC3) Pca(A0c4/sDA) PC5(AOC5/SCL)
c1. c2+ tc3 C2. T1N T2 N
PDO(RXD) PBT(XTAL2/TOSC2) PO1[rXD) P02(Nro) P03(Nr1) PO4CXCK./ro) PD5tfl) vcc PD6(A|N0) PO7(ArN1)
GNO
GND TIOUT T2OUT
R2OUT R2IN
PBO(|CP) PB1(OC1A) 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 Milrocontrollerund demTerminalprogramm. Auf der beigelegtenCD finden Sie ein einfachesTerminalprogrammmit dem NamenÄI& Terminal,Das Prosramm muss nicht installiertwerden und läuft
5TK500 Aufbau des Prcjekts Abb.5.2: 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 zu 6nden.DasHEx-FilebefiDdetsichin \Dei \Beisp;ele\SerielleKommuniktion\ jkation.heL spiele\SerieleKonmünikation\default\SerieleKommun 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 dieserAnweniellMinimdl\. dungi- VcrzcLhni''Bei'pi(le\\er StartenSie nun dasAVR Studio und flasheDSie die HEX-Datei in den Milcocon troller. AnschließendstartenSiedasTerminalprogrammund stellenesauf den entdassdasAVlt Studiobereits CoM'Port ein. Dabeiist zu beachten, sprecheDden dem STK500 verwendet.Siemüssen einen COM-Port tur die Kommunilation mit einstellen aul nochdie Kommunikntionsparameter im Term'nalprogramm Baudrate: 9.600 Datenbits: 8 Parity: Keine/NoDe Stoppbits:r Flusskontrole: Keine/None am STK500z11 wenn dasalleserledigt ist, brauchenSienur noch die RESET-Taste drückenund sollten unmittelbär darauf schoneinewilkommensnachiiclt im Ter minalfenstersehen.wenn nicht, solhenSieFolg€ndesüberpdfen:
150
5 Anwendungen
Verfügt däsSTK5O0über Strom und leuchtet die STATUSLED gdrl? Es sollten eine rote und zwei grüne LEDSleuchten.wenn nicht, besteht€in Problem mit der Stronversorgung. Die STK500Firmwarekönnteauchbeschädigt sein (das ist oft der FaI,wcnndic LEDSeineändereInrbe zeigenoderblinkeD). HabenSiedie COM Portsrichtig eingestelt? COM1 z. B. für dasAVR-Studio und CoM2 in1Terminalprogümm? HabenSiedie RxD/TxD-Lcitungen am sTK500ichtig mit den entsprechenden MikrocontrollerPins verbunden? Dazu 6nden Sie zwei Pins mit der Bezeich nung Rs232 sPÄRt im unteren Ende des Boards (bei den Tästen),die beim ATmesas(alsBeispiel)überejn Kabelmit denPinsPortD.0(RXD) und PoriD.l (I(D) v€rbü1denwerdenmüssen. Sind ale tunper in der Standxrdeinstellung? Vor allcm dcr tumper OSCSEI (aho,,rechts" solltePin 2 und Pnr3 verbinden gestecktsein). Sowird derOszilla tordesSTK500verwendet(Takl:3,68MHz). FuDktioniertllrre serielleSchnittstelle? TestenSiedaseventuelmir einemNuImodeml
5.1.3 Bedienung undFunktion DieseseinfächeProgrälnn meldetsich aD Begnrnmit einerWjllkommensnach dcht. Siekönnen anschließendfolgcndeBcfel e über Ih1 TernnMlprogramn ein-
.up Um cinenBefehlan den Mikrocontoller zu schickeD, mlrssenSiedie ,rrer lar.e drücken.
5.1.4Erklärungen Siewerden merken,dassdasBeispiclz\ff ein effäches Programm nt, aber einige fortgeschritteneAnweisungenund RoutineneDth.ilt.Folgend€Tipps werdenhelfen, dasBeispiellonplctt vcrstchenzu können. Die FuDktionensetup llatt(), uartJutchar), uart sercfidr0 kennen Siebereitsäus dem Buch.Es wurdenin diescmBeispieljedochzweiweitereFunktionenerstelt: uart4ttstrins) \tnd wrt readLine).
.
757
Die Funktion uart-pußtring) ist einfach zu verstehen.sie dr:rcNäuft ein chalArray, gibt Zei€hentur Zeichen auf die s€rielleSchnittstele aus und b cht beim AutEnden des 0 Zeichens(Inde der Zeichenkette)die Funkion ab. Die ScNeife durchläuft maximal255 zeichen,verhindert also einen Lrbellauf.Mit dieserFunk tion könn€n Siealso relativ einfachganzeZeichenkettenauf die Schnitrttele ausgeDie FÜnktron attJeaalifle0 sieht €twaskomplizierter aus,ist aber finlich einfach !,1e uan-pußtring).In atJeaaline) wj.rd Zeichenfür Zeich€nvon der seiie[en Schnitlrtelleeingelesen so lange,bis ein Zeichenmit demASCII-Code13 emPfan gen wird. DiesesZeichenbedeutetNelt ltn€ und entspricht im Wesendich€nder -Ertel-Tasteauf lhrer Tastatü. In wirHichlcit wird mit dem ASCII Code 10 sogarnoch ein zweitesZeich€n tur übermittelt. Somit entspiicht die -E ter Tasteeigentlichden Zeichen die -Errer-Taste 13und 10.Uns reicht hier aberschondasAuftreter der 13,um die Zeile abzuschließen.Wichtig ist dabei,dassdie Zeichenkettelm Ende mit ehem o-Zeichenabgeschlossenwerdenmuss. Im Hauptprogramm Anden Sie eine Endlosscl eife, die nach folgendem Schema nbläuft: . Warten,bis ein ganzerBefehlempfargenwurde. . Um welchenBefehlhandelt essich? - ?e/sior:Gib Veisionsnummeraus. um einefinheit. ,p: F'hdheeineVar;able - donr: Veringere einevariable um eineEinheit. iron Zeigeden lnhalt der Variablean. . Beginnedi€ Schleif€wieder von vorne ... Die Funldon rtrclrpo vergleichtzweiZeich€nlettenmiteinander' Achtüng: wenn beideZei.henlctten identisch sind liefert die Funktion den wert 0 zurück, ansonstenehe Zahl verschiedenvon Null, also etwa I odef -1. wichtig in diesemZusammenhangist auch, dassdie Zeichenkettenbei der Groß- und Kleinschreibungebenfallsidentischs€inmüssen. Die letzte,j€dochwichtigsteNeuerungin diesemProgramminden Sieim Codefiir die Abwicldung desBefehlssfror Doit wird eine Funktion mit dem N.men toao verwendet.Dies b€d€utetso viel wie lrteger ?o, SC]] - wandelt eine Za ako in eineZeich€nketteüm. Wenn Siedie Zahl 65 digital darstellenwolen, handelt essich dabei eigendichum zweiASCII-Zeichen,nänrlich 6 und 5. DasASCII-Zeichenmit dem Code65 würde
752 . ',.Anfualri4tLlti9r,.ril::i:,':i,::.:,,::i,r,,-:rri:,,r;iiiiilfj:lit. ja dem ZeichenA entsprechen(sieheASCII-Tabe[eim Anhang) so tunkionied dasalsonicht. Da Siein Ibrem Progamm mit sogenanntenZaNenvari"blentpen (iüt, ch,],long, ...) arbeiten,müssenSie dieseZahlen €rst ir eine Zeichenlette umwand€ln Und genaudas ist mit der Funktion itoa0 möglich. Der erst€Päramet€rist Ihre Zail. Der zweit€ Paramets ist ein cral-Array (also ehe Zeichenlctte) und der dritte Parameterentspricht der Zahtenbasis.Die Zahlenbasisfür eineDezimalzahlist 10. w:ihlen Siehier 16 alsZahlenbasis. Wolen SieIhre Zahl z. B. hexadezimalausgeben, EinebinäreAusgabeleürden Siemit der Basis2 erreichen.Versu€henSieesl
(HD44780 kompatibet) 5.2 DieLcD-Steuerung Im folgenden Beispiel werden wir uns mit der ehfachen Ansteüerung eines HD44780-kompatibbn rc-Djspla'ß befass€n.Gleich vorweg sei erw:ihrt, dassdiesesBeispielwirldich nul die einfachsteVariantedarst€llt. die Anzeigebenutzerdefiniefier Die meisten rc-Displays erlaub€n beispielsrweise Balken, Animationen oder ähnlicheüSpielereien Zeichenzur Darst€llungvon Buchwerfenunter siesollt€nein€nBlickäufdieWebseitezum und h(p://ww.av.buch.de Dortfinden5ieletzteAnde.ungen in diesem8uch. akluelleUodates zuden BeisDielen
5.2.1 BenötigtesMaterial . ATmegaS,ATmega16,ÄTmega32,... le nach gew:ihltemMikocontroller müssen Sieewntuell di€ Pin-Zuweisungenändem,bzw.die Schaltungetwasabändern . HD44780kompatiblesLCD, I oder 2 Zeilen, 16 Z€ichen. Hinweis: WennSiedasn/AvR-Boald besitzen,emPfehleich Ibnen dasm/AltR ICD Ädd or,.Das folgendeB€ispielwurde mit dieserKombiration entwickeltund Iiü
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) PC2(ADC?) AGND PCA(ADC3) ABEF PC4(ADC4/SDA) AVCC PC5(ADCtSCL) PB6(XTAL1/TOSC1) PDO(RXD) PB7(XTALZTOSC2)PDICXD) PD2(NIO) PD3(NT1) PO4o(CtVTo) PD5O1) PD6(AlNo) vcc PD7(AIN'
oND
PBo{rcP) PB1(@14) PB2(SS/@1B) P83([,1OSV@2) PB4(MrSO) P85(SCK)
derLcD-Steuerung Abb.5.3:Schaltung Abb. 5'3 Das Display selbstbenötigt natürlich auch eine Spannungsversorgung. zei4 die genaueVerbindungderbeidenKomponenten.
5.2.3 Wiefunktioniertein LC-Display? In den meistenFällenbestehtein LcD auseinemDisplayund einemLCD-Controller. Der Controller dient hier als eine Art ,Betriebssystem"bzw. Steuerprogramm fiir die Ausgabeauf dem Display.Er sagt dem Display,wann, wo und wie etwas leuchten soll. Ihr Mikrocontroller schickt diesem LcD-Controller bestimmte Befehle,die z. B. dasDisplayl
754
i.'.: 5 Aiwendungeä '.:::r,:l'1
''1.:
.:,.i:i:
:.:
. ..
Die meistenDisplal.sbesitzenein oder zwei ZeileDmit 8 bis 16 darstellbärenZeichenpro Zeile.Essind hier llatürlich vieleVariantenerhäldich,die,je nachAnwendung und Preis,ebensoverwendetwerdenkonnen. Um z. B. erstmalig ein Zeichen darstellenzu können, ist folgendeVorgangsweise erforderlich: . 4 Bit Modus eins€halten(nicht unbedingt nötig, aberwn verwendendie 4-BitAdressierungin unseremBeispiel,um Pins fiir eine eventüellspätereErweiterung zu sparenl . Weitere Konflgurationseinstellüngenfesdegen (2-Zeilen-Modus einschalten, sx8-Z€ichenmatri\...) . rcD ausschaltenund löschen . rcD wieder einschalten . Zeichenan d€n Controler schicken Sie müssenden Controller efst konligurieren, und können ihn dann im lauferden Programmmit verschiedenenBefehleD(Ausgab€,Löschen,Cursor EirtAus, ...) v€rsorgen. Hier eine Lrt ersicht der möglichen Befe e (Vgl. dazu: Riedel,Huwaldt l,etuheft LCD Progrrmmierung, 5.Aufl. 2006): . . . . . . . . .
DisplayEin/Aus Displaylöschen (EntyMode) setzen Startmodus Konfrgurationfiir I oder 2 zeiligesDisplayund 5x8- oder 5xl0-Zeichenmatri{ AdressedesZeichengeneratorRAM setzen AdressedesDisplayRAM setzen Cursorbzw DisplayaufAffangsposition zurückste[en Cursorod€I Displayverschieben Cursortunlcionen (Beispiel,,blinlen")
5.2.4 SendenvonDatenundBefehten an dasLCD Der LcD-Controller unterscheidetzwischenBerQ,Ue, und Dater. Vor jedem Lrberhagungsvorgangsollten 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 sollte man däher zuerstdie Rs-LeitungentsprechendsetVor jedem Sendevorgang zen. wenn z. B. ein Befehl gesendetwerden soll, wird die Rs-Leitung auf low gestellrund anschließendder Befehlübeminel Die folgendenDiagrammezeigendie entsprechendenLeitungszustände:
Abb. 5.4: Befehlsenden.
abb.5.5:Däten senden. Alr den Diagrämmenerkenftn Sie auch die notwendigeZustandsänderungan der A Leitüng.Wenn Sie dieseLeitung auf Htl und anschließendwieder auf ro setzen,übernimmt der LcD-Contloller die Daten,die nr dieserZeit an den Dätenlei tungeradiegen. AußerdemsehenSie: Da wir den 4 Bit Modüs verwenden,müssenwir zuerst das obereNtüü/€(Ein Mrrle beschreibtdie oberenoder unteren 4-Bit einesI Bit-wertes- 8 Bit = 2 Nibbles) und ans.hließenddasuntereNiüüle übermitteln. lässtsich däherso zuiammenfässen: Die Vorgangsweise . RSaufrlCl od€Ilo setren(DatenoderBefeN) . Die oberen4 Bit auf die vier Datenleitungenschreiben . t Leitung kulz {etwa I Fs) aüf },1g}schalten,anschließendwieder zurück auf low.
756 . Die unter€n4-Bit auf die vier Dateileitungen schreibm. ..E-l€itungkuiz(etwalus)auf,riglschalten,anschließendwiederzurückauflo . mit den entspreln der lolgendenTabelletindenSieälleBetehle{nur L€se7ugritr) chendenParametern:
0 0 0 0 0 0 0 I
00 00 00 00 00 00 0l DD
000001 00001x O O O 1 IDS OOlDCB 0 I SCRLX x DLN F 1 AAAAAA AAAAAA DDDDDD
Displaylöschen CulsorandenAnfangzüück CursorBewegungsrichtung Cusor/Displayaus/an Cursor/Display bewegen Schnittstellengröße Cursorim CGRAMplatzierer CursoramDisplayplatzieren ZeichenamLCDausgeben
CursorBewegungsdchtungl ID - u€nn gesetzqwird der Culsor mit iedemZeidrcn nach reclts bewegt s - wenn gesetzt,bewegtsich dasDisplaymit jedem zeichen Display/Cursoran oder ausund,,blinken": D DisplayAn(lYAü (0) c - cursor An ( l)/Aus (0) B - cursor Blir:henAn ( I )/Aus (0) Cursoi/Displaybewegen: sc - Displaywird b€weslAn ( l yAus (0) RL - Richtung:Redrts (l)/Link (0) S€hnittstellengrößel DL Da&nübertragung:8 Bit (1y4 Bit (0) N-Anzal der Zeilen am I taDt I Zeile (o)12Zeilen (1) F - zeichensröße5x10(r)/sx7 (0) Cursorim CGRAM platzieren:
Zeichenam LCD ausgeben: D - Daten
.
konbdttbet) 757 5.2 DieLcb-steueiünlj'(t1D4416o
desBeispiels 5.2.5 Funktionstest Wichtig ist, dassIbft Hadlear€ einwandliei tunl'tioniert. Das können Sie am einfachstentestenindem 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
5.2.6 Erktärungen diesesBeispielsist die 4 Bit Datenübertragung.Die Die wichtigste "Eigenheit" Bit-Modus finden Si€in der Funktion Ld-tflir0 DazulYird die Konfrgurationdes4 Datenleitung 5 (am LD) auf hrg, gesetzt,die Datenleitung4 muss den Zustand lor haben.Diese Einstellungwird mit dem kuzen Toggelnder t-Leitung übernommen. Um nun einen vollen 8-Bit-Wert im 4 Bit-Überträgungsmoduszu übermitteln, 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 Funktionenzü Vertugung: DasBeispielstelltIhnenvierpraktische . . . .
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). desLcD-Controll€rs ver WenDSie,isobestimmteMöglichl{eiten wendenmöchten,könncn Sie diese!'unktioD zur Ubermittlung der Parameterverivenden.Ein Beispielda,u fiDdenSieim Hruptprogramm: 1:
cD l c d - s e n d ( B E F ELH Lc, L E A R i )
geschickt. Eswird damitderBefehlzum LöschendesBildschirms zu können,müssenSie zuerctdie Um überhauptauf dem LCD Datenausgeben Ihr notwendigsein,urenn FunktioDl.d-trtfa) nuftufen.Hier könDtenAnpassungen Controler nicht korrekt iDitiälisiert $,ird. Viele ,,kompatible"Contro er arbeitenin etwasandersalsin diesemBcispiel.SehenS;edazubitte der IDitialisierungsrcütine iD dasentsprec.hende Datenblatt. Der Funktion lcd w/tre köDnenSieeinebeliebigeZeichenketteübergeben,um diese IhresDisAchtenSiedabeijedochäuf die Zeichenlänge auf demLCD anzuzeigen. jeder zu löschen. r-or Ausgabe das Display plays.Es emplichlt sich aul|erden,
5.2.7 Erweiterungsmögtichkeiten DiesesBeispielbietet zahlreicheMöglichkeiten ,xr ENeiterung der Steüerhrnktio' ZeiDen.Die meistenLcD-ControllererlaubendasAjzeigenbenutzerdefitiefter (siehe dazu: Riedel,Huwaldt: Lehrh€ft chen, wonnt sich z. B. eine Balkennnzeige auf den s. Aufl. 2006),ähnlichenremSpektrumanalyser LCD ProgrammieruDg, enF{ickelnlässt. meistenStereo.nlagcndisplays,
:
l:'
.: '
:.::::'..:5.3;EiP.R0lr. 759
5.3 EEPROM Iinmer wieder werden Sie im RahmenIhrer Prcjeke an die Grenzendesinternen EEPROM Am häu AVR-EEPROMstoßen.Abhilfe bietet ein erten zuges€haltetes Versionen des AT24Cro(-EEPROM figstenwerden hier Varianten bzw. kompatible Die Ansteuermg ist im Prinzip sehr einfachund ehmal tunktionierendeRoutin€n können späterwieder verwendetwerden.
Euchwefen ünten siesollteneinenBlickaufdieWebs€itezum htrp:/wwwävrbu
Material 5.3.1 Benötigtes . ATmega8,ATmegal6,ATmega32,... Ie nach gewähltemMikocontolls müssen Sieeventuelldie Pin-Zuweisungenändernbzw.die Schaltungetwasab;ildern . AT2acu-kompatibles EEPROM Hinweis: wenn Sie das rn1,4l/Ä-Boardb€sirz€n,möchte ich Ihnen das /rr,ÄIlÄ EEPROMAdd on empfehlen.Das folg€ndeBeispielwurde mit dieserKombination entwi€keltund firnktioniert düekt ohne Andelungend€r Konfiguration äm Board.
derHardware 5.3.2Instandsetzung Das EEPROMwird über zwei kitungen mit dem AvR-Controller verbunden.Sie sehenanhandvon Abb. 5.6,wie einfachsich eine solcheErweiterunggestaltet. HabenSiedie Hardwareerfolgreichaufgebaut,jst esZ€it tur einenFunltionst€st
desBeispiets 5.3,3Funktionstest . Sieverbindenden PC mit dem fertig geflashtenMikrocontroller über die sedelle Schnittstell€. . Mit jedem R€set€rhöht der Mikocontroller einen wert den €I im EEPROM gespeicherthijlt.
PCo(/RESET) AGND AREF AV@
PCo(ADCo) PC1(AOCI) PC2(AOC2) PC3(ADC3) 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) PD7(ArNl) GND Armega
^ ö
PBO{ICP! PB.t(OClAi PB2(SS/OCI B) P83(MOStioca PB4(MrSO) PB5(SClg
einesEEPROMS Abb.5.6:Beschaltung
r Nachdernder Mikrocontroller dasProgrammgestartethat' gibt er den akuellen Inhalt desEEPROM-Wertsauf die serielleSc.hnittstelleaus. o Somit sehenSiemit jedem Reseteineum eineEinheit erhöhteZahl. Laden Sie dazu die ensprechendeHEX-Datei in den Mikrocontroller: \BeispieDen Quellcodedazu finden Sieunter \Beispiele\EEPROM\defauldEEPROM.hex. le\EEPROM\. Actrtung: Sollten Sie keinen ÄImegaS verwenden,denl<enSie bitte daran, den Quellcodedirelt im AVR-Studiozu öftien, um ihn dort neu ftir Ihr Chipmodell zu kompilieren. NachdemSie die HEX-Datei geflashthaben, sollte nach einem Resetbereits die ersteZahl am Mikrocontroller erscheinen.Das ist oft ein zuQilligerWer! je nachdem,wasvorher in Ihrem EEPROMgespeichertwar.AnsonstensehenSie die Zahl .1.Wenn Sie nun einen Resetam Mikrocontroller durchftihren, sollte direk darauf die Zahl2 folgen.War vorher schonein andererWert im EEPROMgespeichert,hat sich dieseZahl nun um eineEinheit erhöht.
5.3 EEPRoM 767 V€rhaltendcht auf Ihr Systemzu?Dnnn hat sich vermutlich Trift dasbeschriebene L$erprüfen SiefolgendePünkte: ein Iehler eingeschlichen. . Haben Sie das HEX Fite in €inen ATmega8geflasht?Wenn Sie einen anderen Milrocontroller verwendethaben,mtlsseDsie den Quellcodetur diesesBeisPiel im AvR-studio öffnen und nir Ihr Chipmodell neu kompilieren. Erst dann können Siedasneue(!) HEX-Fileir denControllertushen.AchtenSiedaräuf'dass Sieauch wirklich diesesneueFile programmierenund nicht die EiDstellungvon hdben e,nemf.u}erenProjetrübcrnommen . Haben Sie das EEPROMmit alen nötigen Leitungenversor$? Uberprüfen Sie die Schaltungnoch einmäl mit Ihrem Autuau . Läuft Ihr Mikocontroller überhaupt?Wenn Sie ein Oszitloskophaben' versu chensie den Takt zu messen.Schwingtder Controller?wenn Sie einen,4TnagdS veffenden, könnte es hier auch Probleme mit dem Auslieferungszustandder Kapitell Fuse-Bitsgeben.BeachtenSiedazudasentsprechende . KeineLösuDgin Sicht?VersuchenSieesäufuw.avrbuch de.
5.3,4Erktärungen Der wesentlicheTeil dies€sBeispielsfindet sich in der Indude'Datei A724Ch. Sie könn€n dieseDntei in all Ihen Projektenveffenden und habeDdamit automatisch volen Support tur AT24C$ kompatible EEPROM-Bausteine. Achtung: Diese Roütinen wurd€n so programmiert, dassvorerst nur eir einziges EEPROM im S)'stemunterstützt wird. Sie 6nden däzll in den ersten Zeilen der Date\AT24C.hein#defnemit dem NamenÄ?24Ädd,'.Essolltefiir den fortgeschrit tenen Programmiererkein Problem sein, dieseDatei Rir die Anbindung mehrerer, anzupassen. EEPROM-Chips gleichzeitig.ngeschlossener Dieselnclude-Dateistellt Ihnen nn wesendichendrei Funktionenzur Veifilgung: . void initAT24o . charAT24writeByte(unsignedint dataaddress'char data); . charAT24ReadB)'te(unsigned intdatanddress)i Die AnwendungdieserFunttionen sollte klar sein.wichtig ist, dassSie zu Beginn unbedhgt einmal die lunktion ts,r'1T2a0 auFufen.Anschließendkönnen sie mit in das lif24writeByte ein beliebiges Byte an eine bestimmte SPeicheradresse EEPROMschreiben. ist in den meist€n Fällen ein 16 Bit-wert, also ein Lteger' DieseSpeicLeradresse Andich verhält sichÄT2aReddBr"eHier übergebenSiejedoch Dü die gewünschte q'te wieder zurück' und die Funktion gibt Ihnen dasdort gespeicherte Leseadresse
762
5 Anwendungen
Däs Beispielselbstenthillt außerdemnoch €inige Routinen zur Kommunikätion über die seielle schnitrrtelle. EntsprechendeErläuterungendazu finden si€ einige Seitenvorhs anhandder Erklärung desRs232-Beispiels
5,4 A/D-Wandler DiesesBeispielwurde bewusstsehr einfach gehalten,um Ihnen eine brauchbare Gundlase für spätereProjektezul Vefügung zu stellen.Für den Aufbau benötigen Sieeisendichnur Ihr EDtwicklungsboardund ein Potenziometer. Euchwelfenunter: 5iesollteneinenBlickaufdieWebseitezum Lrnd httpt/ww..v.brchde- Doltfinden5ielelzteAnderungen in die5emBuch. aktueileUpdates zuden Beispielen
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) CD) ?e/'ni'ral(aufbeigelegler Terminalprocrämm,4vR (ca.47k) Potenziometer
der Hardware 5.4.2 lnstandsetzung Solten Sieein EDtwicklungsboardverwenden,brauchenSienur die serielleSchnittstellemit dem PC zu verbinden und an PORTC0 (beirn -ATmegas)den Schleifer Siemit +5 V versorgen DasPotenziometer anzüschließen. desPotenziometers SolttenSieeinen fliegendenAufbau (ohne Entwicldungsboard)verwenden,benötinoch ehen MAX232mit einer RS232-Büchse gen Sieaußerdem Potenziometer mit dempC. die Kommunikätion Diesermöglicht
763
PCo(ADCo) PCI(ADCD PC2(ADC2) PC3(ADCA) PC4(ADC4/SDA) PCs(ADC5/SCL) PB6(XTALT/TO€C1)
PC6(/RESET) AVcc AOND AREF
PDO(FXD) PD1([XO) P02(NTo) PD3(NT1) PD4(XCK/ro) PD5Ot PD6(AINO) PD7(ArN1)
PBTCXTAL2/rOSC2)
Vcc
ATmegaI GND
pri,iöiii 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 Potenziometerab. 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 Benachrichtigung ü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 diesemBeispielauf 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 Wenn Sie aber im Terminat aüch keine wi[Potenziom€terfalsch angeschlossen. kommensnachrichtempfangen,liegtdasProbleman der serieilenVerbindung.Ach ten Sie darauf,dasslhl Entwicklungsboardfruktioniert (beim myAVR-LPT-Board werden) und versuchenSieunter so[te hier die 9 V Batteriean VCC angeschlossen 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 dieserDat€nin der GPS'Dntenund der Speicherung EEPROM. einem 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,
*f fi eklf$gf "3,i*[tb?tdit
abändern' etwas schartuns
Einen Schalter,ein€DTasterund eineLED GPSMäus mit einer Rs232-schnittstele(NMEA-komPatibel- die meistenGPS GeräteunterstützendiesesDatenformat) Eventuelleinetranspotiihige Stomveßorgung (Atl(u' Batterien,etc.)
derHardware 5.5.2Instandsetzung Der Entwicklungsaufi{andin Bezugauf die Schattungist ftt diesesProjekt r€lativ geing. Sienüssen lediglich dasEEPROMmit dem Mikrccontroller verbinder (wie esir einem fitiheren Beispielbereitserklitt lYurde) und die Rs232-SchDittstelein die Schaltung aufnehmen. Das GPS Gerät können Sie dnnn direkt an dieser Schnittstelleanstecken. Vertugt die GPS-Mausüber keine eigeneStromversorgung,müssenSie hier unter Umständenein wenig imProvisier€nund die nörige Spannungüber eine Batterie Siebenötigentur denAufbau folgendeKomponenteni . . . . . . . . . . . .
Cl C2 c3 C4 C5 C6 ICI TC2 ICa Rr R2 R3
100n 10p 10p 10F 10p l00n MEGASP AT24CP MAX232 4k7 4k7 330R
Haben Siedie Hardwareefolgreich aufgebaut,ist esZ€it tur einenFunlcionstest'
166
r j
{Ee id6
I
9
9u e
? - 55=ä YHErc Hc
;rssFF'EF
E.l
6
g
aI
agäga$ 868888 aEEeSS
pp
I !E
E
c
=
f F
(9 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 Um die Nun haben Sie atle Vorbereitungentur den Fültionst€st abgeschloss€n. ersDinge überprüfen: müssen Sie zwei Funkionstüchtiglcit desGedts zu testen, tensdie Kommunikation mit dem PC: . Verbhden Sieden PC mit dem fertig geflashtenMikrocontroler über die serielle Schnittstelle. . Nachdemder Mikrocontroller dasPiogramm gestartethat, gibt er die kuze StatusmeldungGPs wdl-?iacter auf die serielleSchnittstelleaus . TestenSie dies mit eirem Terrninalpro$amm Sie finden äuf der CD eine Soft waremit dem Namen,414 Termntal Dieseeignetsich sehrgut ftir d€n Test.Achten Siehierbei unbedingt auf die Lrbertiagüngsparameter: - Baudrate4.800 - No Parity r Stopbit - 8 Datenbit wenn Siedie oben genannteAusgabesehen,tunktioni€ren der Mikocontroller und die seiiele Kommunikation mit dem PC. Äls ZweitesmüssenSiedie Kommunikation mit dem GPS-Gerättesten: . VerbindenSiedasGPS-Gerätüber die sedele Schnittstelemit dem PC. . Starten Sie ein Terminalprogramm und verrvendenSie die oben genannten ÜbertragungsparameterAclten Siedabeivor allem auf die Baudratevon 4.800. . Sollte das GPS Gerät eine Spannmgsversorgungbenötigen' schließenSi€ diese bitte j€tzt an, um dasGPS-Gerätzu akivieren . Nach eidgen Sekundensollten Sielaüfend neueDaten vom GPS Gerät empfan genund im Terminalfensterangezeigtb€kommen Ist däsnicht der Fall, überprüfen Sie bitte das BenutzerhandbuchdesGPS-Geräts auf eineabwei€h€ndeBaudrate.Die meistenGeräteverwendenjedoch die Bäudrrte 4.800alsStandardeinstdlung. haben,isr dasSystembereit zur wenn Sienun beideTestserfolgreichabgeschlossen
168
5 Anwendungen
5.5.4 Funktionsweise Der GPSWay-Trackerspeichertin bestimmtenAbst?indenlhre akruellenKoordinnten 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 starHabenSiesich tur den manuelen Modus entschieden,können Siemit der Tastean Port B, Pin I die SpeicherungdesaktuellenOrtesdurchtuhren. An Port B, Pin 2 finden Sie eine Status-LED,die beim Einschaltenkurz blinkt um die Funltionsbereitschaft zu signalisieren.Nach einigen Sekunder (mit einem angeschlossenen und aktivierten GPS-Gerät)beginnt die LED im automatischen gewissen Modus in Abständenkurz zu blinken. Dies signilisiefi die erfolgreiche Speicherungder aktuelen Koordinaten. Um die gespeichertenDaten nun auf den PC zu übertragen,müssenSie das cPS Gerät von der serielen Schnittstelledes Mikrocontrollers ir€nn€n und diesemit dem PC verbillden. VerwendenSie zur tßertragung der cPS Daten die €ntspre, chendeKontrolsoftware, die in dem Verzeichnis\Software\cPswayTrackerKon trolzentrale zu finden ist. Wichtig: SchaltenSievor dgn Start der Softwareden cPS Way-Trackeraus.Nach den Siedie Kontrollzentralegestartethnben,müssenSienoch denjeweiligenKommunikationspoft(COMI, COM2,COM3,...) fesdegen und ansclließendie Taste ,,Verbinden..." betätigen.letzt wartet die Softwareauf den Mikrocontroler.
769 Zu diesemZeitpunlt können Sie den GPSway-Trackereinschälten Er wird sich mit einer kurzen Statusnachrichtbei der Kontrolzentral€ melden Sie sollten die KommunilGtion in der windows Softwäreverfolgenkönnen. Anscbli€ßendsteh€nIhnen drei Möglichlciten zü Verfiigung: . Datenvom GPSWay-Tra&er übertr€en . Datenam GPSWay-Trackerlöschen . GPSWay Trackerneu stärt€n WennSiedie Datenvom Geräiauf den PC überträgen'werdendieseim Klft-Ionnat gespeiched.Dieseslormat wird von GoogleEarth unterstützt und erlaubt die Spei cherungund ÄnzeigeeiüesgeografischenKoordhatenpfads Sie solten zu diesen Zeitpunkt die SoftwareGoogleEarth bereitsinstaliert häben,denn die Kontloilzentrale bietet Ihnen nun den automatischenStart von GoogleEa(h an. Wenn Siedies bestätigen,werdenlhre Wegloordinatenin GoogleEarthgeöffnetund dargestelt wichtig: Da der GPSway-Trackernicht über eine SPeicheikarte'sondernlediglich über ein BEPROMv€rtugt, können Sie nul €ine begenzt€ Menge.n Wegpunkten speichern.Sie sollten also nach jeder iJbertragnng auf den PC die Daten 'm GPS way-Trackerwieder löschen,um dort Platz ftiI neueDatenzu schafien'
5.6 Klingetton Di€seAnwendung scheht auf den erstenBli.k w€nig relevant ftir "professioDelle Projekte",spielt siedoch lediglich ein paar Töne ab. In Wirklichkeit versteckensi€h hinter diesemscheinbd lustigenProjekt einigesehrinteressanteRoutinenl . Lesenvon RTTTl-kompatiblen tungtonesbzw.Melodien. DiesesFormat ist bzw war einmal in den meistenMobiltelefonender Standaidtur die Speicherungvon Klingeltönen. . ErzeugungexakterRechteckignal€mit Frequenzenim Bereichvon etwä I00 bis 5.000Hz. . AnschaütichesBeispiel fiir die Verwendung des Waveform-Generation-Modes am 16-Bit'Timer. BPM, Takt' Oktaven . Ein paar Dette Denkau{gaben(Notenl?ingenberechnung, urd Tonleiter,...) ftil den Musiktiebhaber' Buchwer,enunter: SiesollteneinenElickaufdieWebseitezum und http:/ trw.ävrbu.h.d€' Don findensieleizieAnderungen in diesemEuch zuden Beispielen aktuell€Updates
770
5 Anwendungen
Material 5.6.1 Benötigtes . 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 aktuellsteVersion von WINAVR zu installieren.Sie finden auf der beiliegendenCD eine ausreichend 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.
der Hardware 5.6.2 Instandsetzung Haben Sie die Hardware erfolgreich aufgebaut, ist es Zeit ftir einen Funkionstest.
MEGAS-P PC6(RESET) AGND AREF AVCC
PCo(ADCo) PC1(ADCI ) PC2(ADC2) PC3(ADC3) 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
Abb.5.9:DieSchaltung desTonerzeugers.
PB1(OC1A) P82(SS/OC1B) P83(trOSyOC2) PB4(rVtSO) PBs(SCK)
? 1
5 6 Klingelton 777
desBeispiets 5.6.3Funktionstest Na.hdem die Hardware fertig aufgebaütist, llashen Sie bitte die folgende HEXDatei in den Mikocontroler \Beispiele\Klingelton\default\Klingeltonhex Achtung: Sollten Sie keinen ÄTmegagverwenden,müss€nSie das Beispieltur Ihr Modell neu kompilieren. Den SourceCode6nden SieebenfäIsim oben genannten Nach dem Flashen sotlt€n Sie (wenn der LautsPrecherkorrek angeschlossen wurde) bereitseineMelodie hören.Ist dasnicht der Fa[, können SiefolgendeListe . Sie benötigentur dies€sBeispieleinen erlemen Quarz mit 3.686MHz (ist mit diesemWert auf dem myA\R-Board und dem STK500zu finden). HabenSieden Mikocontroller vielleicht noch nicht tur die VerwendungeinesexternenQuar zesalsTaktgeberkonfiguriert?Siehedazu dasKapitel zu denAVR luse-Bits. Sollten Sie einen anderenQuarz vemenden wollen, müssenSie die entsPrechende rreqüenz im Quelicod€dieserAnwendung,npassen. . HabenSievieleicht einen zu großenLautsprecherverwendet?Der ÄVR liefert in diesenrFaI die nötige Spannungund kann unter Umständenbei zu großem Leistrmgsbedafnicht mithalten. V€rsüchenSieesmal mit ehem einfachen'kleinen Koplhörer.
Version 5.6.4,,Abgespeckte" . Die hier vorgestellteVersion des Klingeltonspielersist sehr umfangreich pro granrmiert. Dies deshalb,weil das Parsen,dso das stückweiseVerarbeitendes Klhgeltonformaß eniges anProgrammierarbeitbeänsprucht.Unter Umstünden interessiertSiediesesRTTTL Format gar nicht, dann können Siegerneauch fol hex gendeÄpplikationt€sten:\Beispiele\Sound\default\Sound Eshandelt sich hierbei um eine einlächereVe ion. In dieserwurde auf dasAbspielen desRTTTL-Formatsverzichtet Hier linden Siehaüptsächlichdie Routinenzum Ez€ugen ünd Ausgebeneher beliebigenFreqüenz(über die Verwendungdes 16 Bit Timers).
5,6.5Erklärungen Wil widmen uns hier wenigerdem Aufbau desRTTTL-Formats'sondernmehr der eigendichenKlängerzeugung.Sollten Sie jedoch speziellam RTTTL-Format mte ressiertsein, fitrden Sie auf jeden Fall einigesim Intemet unter http:// de wikipedia.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/nokiatone/ltttihtm oder auch http://w.2thumbswap.com/members/tones/nokiä/ tones_nokia_main.htrnl.Um einen Sory in dasBeispielzu übern€hmen,kommentieren 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 andereDmüssenSieauskommentieren. passiertin der lunktion fono. Dieserüberge Beispiels Die eigendiche Magiedieses ben Sieeire gewünschteIrequenz und die SpieldauerdieserFr€quenz(in ms). Der Ton selbstwnd über den 16 Bit-Timer erzeugt.Dieserarbeitet mit folgendeDEinsteltlllgen:
. . . .
CTC-Mode(ClearTimer on CompareMatch) wert Compare-Mode: Zählenbiszu einembestimmten 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 äufgerufen. 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öglichkeiten,diesesBeispielsoll nur eineeinfacheGrundversiondarstellen. DieserFrequenzzählsarbeitetmit TTL Pegeln,im Idealfall messenSie daher etwa an den Mess5v/0v-Zustinde. ÄchtenSieauf die Vermeidungvon Lrberspannungen 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 Äusgangskonfiguravon I Hz bis I MHz mestion (3,686MHz Quarz) etwä iD einem Frequenzb€reich näch oben hin bis etwa Sie den Bereich sen.Mit einem 16 MHz- Quarz en^'eiten 4 MHz. zumBuchv/efen unter: sietollteneinenElickaufdi€Webseite und htipJ/wwävrbu.h-d. - Dortfindensie letzteAnderungen in d'esem8uch, den Beispielen aktuelleUodäreszu
Materiat 5.7,1 Benötigtes Wie eingangsbereitserwähnt,bietet diesesB€ispieleinigeMögli€bkeitenzul einfachen Erweit€rungdes lunktionsumfangs. Auf der CD inden Si€ daner zwei v€r diesesBeispiels: schiedeneVersionen 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. (mit MAx232) . OptionalRS232Grundschattung
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 Frequenz,n zählermit der Messungund zeigtfortlaufend die aktuel gemessene
774
5 Anwendungen
Hier sehenSiedie Schaltungmit der LCD-Anzeige:
P@IRESET) AGNO ABEF AV@
Poo(aoco) Pcr(aDcl) PC2(ADCz) PCA(ADCA PC4(ADC4/SDA) Pcs(aDc56cl)
PBTETAe/rO6C2)
Ä | IrEga e
PDO(FXD) POIOXD) PDzONTO) P0s0NTt PD4ECK,'ro) PosnD PD6(ANO) PD7(AN1)
P300CP) PB1(OC1A) PB2(ss/oc1B) PB3(MOS|/OC2) PB4(MSO) PB5(sc4
9
GND
Abb.5.10:Frequenzzähler mitLCD Bei dieserSchaltungergibt sichein Problemmit der doppeltenBelegungvon Pin 5 / genannt,dient damit alsodem Messen Port D. DieserPin wird einerseitsauch "T1" der Eingangsfiequenz. Ardererseitssind die vier DatenleitungendesLCDs mit Port zu jedemZeitD Pin 4 bis Pin 7 verbunden.Dahermussbei der Programmierung geachtet LCD punkt auf die richtige Datenrichtung werden.Wird das angesprochen, dann muss Pin 5 auf Ausganggeschaltenwerden.Vor jedem Messvorgang wird dieserPin dann wieder auf Eingangumgeschaltet.So kann der Pin hier doppelt verwendetwerden.BeachtenSiejedoch:DieseAnwendungist nicht unbedingt ehe wirklich saubereLösung. Wenn an den Messleitungeneine Überspannung anliegt,könnte dieseauch dasLCD zerstören.Hier würde sich daher aufjeden Fall noch eine entsprechendeVorschaltungzur Absicherunggegeneine Überspannung anbieten. SolltenSiekein LCD zur Hand haben,oder würden Siegernedie mitgeliefertePCWerteverwenden,dann empfieblt essich, Softwarezur Auswertungder gemessenen Schaltung dasBeispielmit der seriellenSchnittstelleaufzubauen.Die entsprechende dazusehenSiehier:
5.7 Frequenzzöhler!75
PC6(ßESET)
Po(AOCo) PCrlae0 PQ(aoc4 PBßoca) PC{(amdDA) Pc5ß85€cL)
PDo(ryo) PüarxD) PO2(Mo) PD3(MO PO.01CM0)
PB7ßraP/rosc2)
|w4PD6(4No) PD7(ANI) Armega ö
PBrLcaral Pe2(ssrrdB) FB3(MG|/@) PB1(Mrs) PBs{scK)
mit Ausgabeauf RS232 Abb.5.11:Frequenzzähler
AVR-Frequenzzähler 5.7.3 Pcsoftware: Für dasBeispielmit der Ausgabeauf den RS232-Portgibt esehe einfache,abersehr praktischePC-Arwendung.Siewurde in Borland Delphi 2005entwickeltund ist im Wesentlichenmit den meistenanderenVersionenvon Delphi (inkl der ftei erhältlichen 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
r ;::r::r::rli::,i: rr::.:::,.':jr r!:]]rr:',-r. 176 a,i:Aiieidünieri::.',:,.:l::ll 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 Zeitfensters Torzeir Dies€beschreibtdie Länge des der Messung.In diesemzeit(oder fensterwird die Anzahl d€r steigenden 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€itfensterkeine einzigeFlanle vorkommen. Das heßt, ie langsamerdie Frequenzist, Zeitfenstersein. uinso längersollte auch dasentsprechende DiesesBeispielbietet hier einesehrpmktischeRoutin€ an, die automätischdie richtige Torzeirbestimmt. DieseRoutine geht dabeifolgendermaßenvor: l Torzeit= 1000ms 2. Messungstart€n Ilankengeme<sen? J. Wurdenmehral. ö55J5I -lö.Bil BereiLh) a. la: Torzeit= 100ms,zurückzu (2) b. Nein: IdealeTorzeitgetunden Wenn also zu viele Flalken gemessenwürden, dann wird die Toüeit so langeverküIzt, bis eine,,vemtlnfiige" turzahl an Flankenir dasZ€id€nsterpasst.Hier noch einmal der Messvorgangin einer Grafikl
Abb.5,13:Pe odenmessung Wie aus der crafrk deudich hervorgeht ergebensi€h zwei Aufgaben:Die genaue Progrämmierungehes b€stimmt€n Z€idenstersund die Messungder darin vor' kommenden Flanten. Das Programm müss also mit einem Timer und einem Counter ,rbeiten. Die entscheidendeEinstellungwird hier bei der Taktquelledes Countersgetroffen.Der Taktwird nämlich fftela zugefüIrt. Däsheißt dassIhre zu messendeFrequenz diesen Counter mit ehem Z:ihltakt versorgt. Es gibt dafrir einen resewiertenPin am Mikrocontroller mit der BezeichnungTl. Das ist gleich-
LcDviaPC 5,s HD4478o
777
zeitig auch dasProblembei der LCD VersiondiesesProjekts Eine der Datenleitungenles LcDs liegt nänlich ebenfallsauf diesemPin. Durch geschicktenZugritr mehr' isieheQuellcode)ist dieseDoppelbelesunsiedochkeir sroßesProblem Nun, der Timer wird alsovor iedem Messvorganginitialisiert, je nachdemwelches Zeitfensterverlängt wird. Unmittelbär danachwird der Counter äktivielt' Sobald das Zeitfensterabgelaufenist, wird auch der Counter wieder gestoppt Folsende Frequenz: Formel liefet anschließenddie gemessene llrequenzin Hz] = lAnzahlder l]antenl x ( 1000i lTorzeitin lns] ) dannmüssenSieem mÖchten, messen wenn SieeinengrößerenFrequenzbereich und dieseneueTakt(Beispiel MHz) veNenden 16 facheinen schnellerenQuarz ftequenzebensoin der Quelldntei(gleichzu Beginn)arPassen'
5.7.5 Erweiterungsmöglichkeiten Durch die exteme VoNchaltung eines Flip-Ilops könnten Sie die messbäreFrequenz relativ einfach verdoppeln. Das llip-Flop ver.wirft (im Endeffekt) immer Frequenzsomit Dasheißt' Siemüssendie gemessene jedenmeiten Flankenwechsel. üm auf dasrichtiseErg€bniszu kommen an Endenur wiederverdopPeln Ein weiteresFiip Flop würde die Frequenznatürli.h wiederum"halbicren"' alsodas Messeneiner noch einmal doppelt so hohen hequenz erlauben lhnen stehenhier alsowirklich alle Möslichkeiten olTen
5.8 HD44780LCDvia l2C Es wird Ihnen vermutlich ftüher oder später passieren:Die meisten Pins Ihres Mikocontrolers sind belegt,Si€nöchten jedochnoch ein LC Displsvanhängen' Was ttlll? Abhilfe schafft hier ein sehr nützliches Bäuteil mit der Bezeichnung PCF8574.Dieser IC wird von der Firmn Philjps (bzw. jetzt NXP) hergestellt Ein Datenblatt dazu finden Sie unter htrPr//www.nxp.com/acrobaldownlond/datäsheets/PCF8574-4.pdf Der wesentlicheVorteil bei diesemBaüteil liegt in der einfachenHandhabung Sie SCLund SDA) zur SteueVersorgung, benötisenlediglichvier Leitungen(Masse, rung des ICs. Zreei davon müssenSie mit dem Mikocontloller verbinden Der = poRTC 5' ATmegasbietet ftü dieseVerbinduDgzwei bestimmte Pins an (SCL SDA = PORTC.4).Dürch die VerwendungdiesesICs steht Ihnen dann ein sänzer S-Bit Port zur Vefiigung - auf Kostenvon lediglich zweiPins Sehrpraktis'h!
778
5 Anwendungen
zumEuchwerfenunter: sle sollteneinenBlickaufdieWebseite und http://www.avrbu(hde- DortfindenSieletzteAnderungen in diesemBuch. aktuelleUpdateszu den Beispielen
Material 5.8.1 Benötigtes Achtlrngr Achten Siebei der BestellungdesI2C-Bausteinsauf die genaueiypenbezeichnung.Esgibt hier zweileicht unterschiedlicheVersionen: r. PCF8574 PCF8574ATS, PCF857,1AP) 2. PCF8574A(bzw: PCF8574AT, In diesemProjek wurde die zweiteVersionverwendet.Der wesentlicheUnterschied desICs. SolltenSieden PCF8574verwenliegt hierbei in der I2C-Hardware-Adresse Z*ile im Quelltext ändem.Die Geräteaddenwollen, müssenSiedie entsprechende ressewäredannnicht,,0x70"sondern,,0x40". Dasist die einzigeAnderung,die notwendig ist. NebendiesemBauteilbenötigenSienoch: o Die GrundbeschaltungeinesÄImega8 (oder dasSTK500) . Ein HD44780kompatiblesLCD (Im Projekt 2-zeüig) o Pull-Up Widerständefiir die I'?C-Verbindung Die Schaltunssieht so aus: ATmogaS-P Pc6(AEsEl
FB(xrar.2'ro€c?
Armesa
tr1
Pco(aoco) Pc1(aocl) Pc2(aoc2) P03(aocaJ Pc4(aoc.,€oa) Pc5(aI)<scL)
8
PDo(Fxo) Poloxo) PD20Mro) Po€(lfrt Po4(xcK4o) pD6arD P0.(arN0) P07(arNo
pB,iö;;j PB2(SS/OCl B) P$Oroe/c.2) P&(Mrso) Ps5(scr{)
Abb.5.14rAnbindungeinesLC-Displays über12C
LCD viaPC s.8 HD44780
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 Dateienlediglichin Ihr AVR StudioProjekteinbindenwie sendie entsprechenden 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 mrdq mussdiesesProjektauchmit den LCD-ConWie obenschonbeschrieben In einem anderenBeispielfindeDSie einc kleine LCD troler kommuDizieren. ßibliothek. Für diesesProjekt Mrde die Bibliothek leicht ingepasstund trägl nun Der großeVorteil: Sie können in Ihrer Applikation den neuen Namen "i2c,]cd.h". ohnewesentlicheUlnstellltngenwr der normalen LcD Ansteuerunc(,Jcd h") auf Die Befehlesindhicdür gleichgeblieben dieI'C-Version(,,i2clcd.h")wechseln.
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/Ausgabeport an. Däzu müssenSie ledigtich zvi'ei(bestimmte) L€itüngen am Mil(roconDer Vorteil desl:C Protokols ist die Möglichkeit, mit einem Mas troler "opfern". ter mehrere Slavesansprecher zu können. ,eder dieser Slaveshat eine eigene w€rdeD.Die logische Adresseund kann dahervom Masterindividuellädressiert darausist einebenchtlicle Erweiterungsnöglichkeitder EnrsabeJ Schlussfolgenurg Ausgabe-Leitungen durch mehreredieserBausteine.Sokönnten SieIhren ATmegaS zumße''pielurncrwdrchrro leI BirPorr.crweiLerr.
180
5 Anwendungen
Segment 5.9 LED-Matrix In diesemBeispielbenötigenSiezur Abwechslungeinmal einenanderenMikrocontroller, nämlich den ÄTtiny2313.Sie können das Beispiel natürlich genausoftir einenÄImega8anpassen.Die Wahl ftillt hier auf denÄItiny2313, weil der Controller relativ güLnstig ist und sich ftir diesesHeine Projekt ideal eignet. zum Buchwerfenunter: SiesollteneinenBlickaufdieWebseite - DortfindenSieletae Anderungen http;//www.avrbu
Material 5.9.1. Benötigtes Der wesentlicheAufwand bestehthier in der Verdrahtunsder einzelnenLED-Verbindungen.Siebenötigendazu: o Die Grundbeschaltung einesATttry2313(oderdasSTK500) o Ein 5x7LED-MatrixSegment o Eine Reihevon Widerständen Die Schaltungsieht folgendermaßenaus: 5x7 LED-lvatrix
v@
(tcP)PD6
Aniny2313 '*"ä;lE|;
(NT'PD3 FESET,DWPA2 (CKOJT'(CK4NTO)PO2
crxo)Po1
(BXD)PDO 'TAL2(PAl)
XTALI(PAo)
GND
(ArNo/POro)PBo (AtN1/PCtl)PB1 (ocoa/Pct2)P82 (@14/PC|3)PB3 (@r B/PC|4)P84 (MOS|/D1,SDA/PC|5)P85 (Mtso,DoPct6)P86 (SCkruCSk,PCtDPBT
Abb.5.15:Schaltung der LED'Matrix"Steuerung
181
t:rl'r. .. r'
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: 34
coll? PtN
13
3
4,tl
t0
6
ROW PiN 2t4 38
5l 67 72
Abb.5.16:Aufbaud€rLED_['latrix
Ein Beispiel Um die LED ganz rechts unten einzuschalten,müsstenSie an Pin 6 eineSpannunganlegenund gleichzeitigPin 2 auf Masseschalten Sieerkennenbereitsdie Problematit dieserLED-Matrix Es ist nicht möglid! jede beliebige Kombination von LEDS gleichzeitig z| schalten. Aus diesem Grund bedient man sich der TrägheitdesmenschlichenAug€s.Der Ablauf ist folgender: lkeineLl'D leuchlel l. Au'gangtkonfiguration = 0V a. COL1,COL2,COL3,COL4,COL5 = 5V b. Rowl,ROW2,RoW3,ROW4,ROW5,ROW6,ROW7 2. COII = 5V (aIe Diod€n dieserSpaltesind mit SPannungversorgt) 3. Die einzelnen Reihen (ROWI-RO\ 17) le€rden nun je nach Wunsch auf 0V geschalten. Die entsprechendenLEDSleuchten(jedoch nur in dieserSpalte!) 4. Etwa 5msh diesemZustandverbleiben 5. COL1= 0V COL2= 5V 6. Die einzelnen Reihen (ROWI-ROW7) weiden nun je nach Wunsch auf 0V geschatten. Die ellsprechendenLEDSl€ucht€n(jedoch nul in dieserSpaltel) 7. Etwa 5ms in diesemZustandverbleib€n 8 . C O l 2= 0 V C O I 3- s V
742
5 Ahwendungen
Der Trick bestehtnun also darin, jede Spaltefür etwa 1-5 ms im ichtigen Mustei einzuschalten.Das Umschaltender Spaltengeht zu schnell fiir das nenschliche Augeund dasrcsultierendeBild sieht düer ,,relativruhig" aus. Ein weiterer Trick in diesem Beispielfindet sich in der Zuweisungder Pins. Die Reihen (ROWI bis ROWT) sind hintereinandermit einem ganrcn Poft (PORTB) verbünden.kt die entsprecheDde Spaltenun aktiviert, kann man ein ganzes(inver tiertesl) Blte an diesen Port schreiben.Damit solren die richtigen LEDSschon leuchten.Das ist natürlich eine sehl eleganteLösung und erspart einigesan Pro grammieraufwand.warum ein invertiertesBlte? Glnz einfachdeshatb,weil die hier nitgelieferte Sch;ftart eine ,,1" als gesetzrbetrachtet.In unserem lall muss aber eire,,0"auf dieReihegeschrieben werden,um dieLED zu aktivieren. Die Schriftart ist eine soger]Nä'nnre 5x7 Bitulap-Follt,bestehtalsoaus35 Bits pro Zei 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(RowlROWT)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 FLASHBereich.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 djesenSpeicherbereich nicht ganzso einfachwie bei nor jedoch malenVadablen.Am bestensehenSie sich das mitgelieferte BeispielaD. Do( finden Sie den Zugriff auf die Schriftart rmd mit etwasDenkarbeit]ässtsich dieseTechnikmeistem.AusreichendInformationen dazu finden Sieauch im Inter net (jedochnur in englischerSprache)unter: http://wrrw.nongnu.org/avr-libc/user-manual/pgmspace.html
5.9.3 Erweiterungsmögtichkeiten Ein ATtinl3l3 ist kostengünstig. Eswürdesichdaheranbieten, zum Beispielmeh rereATtjny23l3 über ein I?C Interfacebzw. eine serie e Schnittsteltezu verbinden.
183 So könnte man (wenn auch €tlvas aufi'v:indig) eine beliebig erweiterbär€LEDMatrix-Laußchrift bauen.leder der Mikocontroller (lmd dasdazugehörigenSegünd wär€ somit unabhlingigwn den anderen m€ t) hätte eine eigen€l'zC-Aahesse Elementenaalressi€rbar.
784
6 Anhang 6.1 CD-ROM Die folgend€Tabeüez€igt die Ordnerstruktu der CD-ROM:
CD{Beispiele
CD:\Datash€€ts CD:\Dokumentation CD:\Funldionstest
CDdNützliche Routinen
CD:\Softwar€
CD:\Sclnltungen
Enthätt die im Kapitel/nwend ngenbehandeltea Proj€kteim Qudlcode und tur den,4Tnega8rorkompiliert. zu denim Dalash€ets Hier find€nSiedie wichÜg.ten Buchb€schri€benenKomponenten. In diesemV€üeichnisbefindensich einetuihe von Tutorials,zusätzlichenBrklärungenetc. Irn KapirelUorbereitullgwird ein Funkionst€st tur Ihr sTK500 oder myA\R-Board €rklärt. Hier finden sie di€ €ntsprechendenHBx-Files. In diesemOrdner fnden SiehäudgbenötigteRoutinen (EEPROMlesedschr€iben,RS232,...) im QueIIn dies€mVerzeichnisfinden Si€dasAVR-Studiq WinÄVPJA\RGCCund viel€ weitereTools,die lhnen b€i der Softwareentwicklünghilli€ich seinweden. Hier finden Siedie Sdnltungen zu denAnwendungen ausKapitel 5 im PNG-Formatzum Äusdruck€n.
6.2 AVR-Assembler-Befehlssatz Die folgendenTabellenwürden von http://ww1^'.mikrocontroller.net/artides/A\4.übemommen. Si€ 6nd€n dort irnmer die aktu€llste Ass€mbler---Vergleich,stabelle Version.GroßenDank biermit an die Eßtdler diesetumfangreiden AuflistunS
ADD ADC ADIW
,/' ,/ ,/
SUB SUBI SBC
sBcl SBIW ÄND ANDI OR ORI EOR COM NEG SBR CBR INC
DEC TST
c!R SBR MUl MULS MULSU FMUL FMLS FMUISU.
x
./ ,/,// ,/,// ,/,/{ /// ./ ,/
,/
,/
,/ ,/
,/ ,/
x X X X X
x x x
x
x x xl/ xl{ x{{ xl,/
786
IIMP r' EIJMPXXXXX
x
./.
,/
EICALL
X
X
cAlL
x
x
RET R,ETI
,/ /
,/ /
cPsE cP,// cPc
/
/
,/
./
SBRC
r'
/
SBRS SBIC SBIS BRBS BRBC BREQ BRNE BRCS BRCC BRSH BRLO BRMI BRPI BRGE BR|I BRHS BRHC BRTS
,/ ,/ ,/ ,/ ,/ / ,/ ,/ / / ,/ / / { ,/ { ,/ ,/
,/ ,/
BRVS BRVC BRIE BRID
,/ ,/ / /
CPI{{
,/
,/
{ ,/
BRrc
,
xx
IMPXXX RCAIL
'/
xxx
,/
,/
xx
,/ / ,/,//
,/t{ /,/,/ ./{/ ./ {/{ /
,/
,/
'/
,/
x
787
/ X l.
,/ X ,/
STD/X LPMr'.{ X ELPM SPMXX IN.//
X
MOV MO\1ü LDt LDSlX I,D// LDD/X
sTs/X sT.//
oul
'/
,/
PUSH POP/X
/
X
BREAI(
X
X
NOP
SLEEP 't4DR
x
X
/{{
/ ,/
,/ ,/
,/ ,/
x
x
xx,/ ./
,/
'/
./ ,/
/, ./
/ ./
188
SBI CBI
,//,/'/ ,/.//,/
tsL tsR
./,/t/
./,/r'/
ROL ROR ASR SWAP BSET
BCLR BST BLD
{ ,/ {
SEC
crc
./ ./,/,/{ ,/.//,/ ./,/// ././,// ,/,//{ ,//,/,/ ,/ ./ /.//,/ /.///
SEN CLN
,/
sLz
{
CLZ SEI CLI
/ ,/ ,/
///l ,/,/./{ ,/ ,/,/'//
sEs cls
,/ ,/
,/.//{
clv
,/,//,/ ./,/// /./'/./ ,/,//{ ./,/,/{
SEH CLH
,/
,/ '/
,/ ./
,/ '/
,/
,/
,/
././,/r' t,/,/'/
crl
,/
r',/,//
SEV SET
,/
.
6,3 ASc'Zeichensaz 789
6.3 ASCII-Zeichensatz OEZ HEX z€]CHEN
DEZ HEXZEICHEN
DEZ I']EXZEICHEN
000 001 _ 0 oo3 004 OO5 006 o006 009 010 01t 012 013
0o 01 o03 04 05 06 o? 03 09 oA oE OC oD
NUL s0! .ty E?x Eor ENO AcK BrL Bs HT LF vr FP CR
032 ?C 033 2!
C€4 065 0o6 061 063 069 0rO
015 ot6 O1r Aß o.q o2o c21 022 023 024 025 026 02? 023 029 o3o 031
0F !o 11 12 t. L4 :!5 1€ 1? 13 19 1A 1B :tc ]D 1E 1F
St or,E OCL DC2 D.t DC9 NÄI( sYN ETB CÄN Er.i SllB EsC Fs CS RS IJS
035 ?3 .. 036 24 O3r 25 033 26 01o .? 040 23 o4r 29 C42 2A 0.43 28 A44 2C 045 2D a46 2E a41 2F 046 30 049 !1 O5O 32 01 052 34 1153 35 051 36 055 3? C56 :13 O5r 39 053 la 059 3E 060 3c 061 3D A62 3E 063 3A
Abb.6.2: DerASCll-Zeichensatz
L + S t r ( J ' + , / 0 1 2 .1 5 6 ? A 9 : ; < = > ?
40 4i L 41 44 45 46
0r? 43 0l: 49 0?.1 4A 0?5 48 0/6 4C 0?? 40 O?3 4E 019 ,lF 030 50 031 51 032 52 03 034 54 035 55 0S6 56 03',1 5? 033 53 039 59 OS0 5a C9:l 5E 092 5C 093 5D 094 5E 095 5r
ß A a 0 E F rl r J ( i, M N O P Q R T U V u X Y , I \ I ^
1!0 10i ro2 ro1 104 105 105 :l0l r03 109 1lO 1r1 112 113 1L4
64 65 66 . 63 69 6A 63 6C 6D 6E 6F r0 11 12
d e f o h i j k I n n o p q |
:l:16 1l? 113 1r9 !20 l122I 1 I22 1?3 721 1r5 125 r21
?4 75 16 11 ?3 t9 1A ?B 1C lD ?E 1f
t u v e x v z
790
6.4 Interrupt-Vektoren ADC-vect ANÄ_COMP_vect ANÄLOG-COMP-vect INTo-ftct INI1 v€ct INI2-vect INT3_vect SPI STC-vect TIMßRo-COMP_E€t TIMBR0_O\rF vect TIMERl-CA.PT-rcct TIMBRT_O\.F v€ct TIMER2-COMP-irct TIMER2_O.lrF_v€.t UART-R.Lvect UART_TX_tct UÄRI UDRE vect US$I_RX_V€.t USART-RXC-Vect USART TXC,vect
SIG ÄDC SIG,COMPARÄTOR SIG-COMPARATOR SIG INTERRUPTO SIG_INTERRUPTl SIG INTBRRUPI2 SIG_INTERRUPI'3 SIG-SPI SIG OUTPI/I_COMPAR.EO SIG-O\TRIIOWO SIG_]NPIIT C{PTUREI SIG_O\,.ER!IOW1 SIG_OUTPUT COMPÄRE2 sIG_O}.ERFLOW2 SIG-2 WIRE-SERIAT SIG UART RECV SIG.UARI-TRÄNS SIG-UART-DATA SIG USART RECV,SIG, UART-RNCV SIG_USÄRI RECV,SIG, UART,RECV SIG-USART-T"1NS, SIG UÄII IRÄNS
ADC ConversionComplete
ExternalInterrupt RequestI EnerDalInte(upt Request2 Bfimal Interrupt Request3 SerialTrüsfer Cornplet€ Timer/Coünteocompee M.tch Tihs/Countero Overflow Timer/Comter Captu.eEvent Timd/Cowtsl Overflow Timer/Couter2 Compde Match Timer/Coüntd2 Overflow UART;Rx Conplete UÄRT,T\. Complete UARI Data RegisterEmpty USART,Rx Complete USART,Rr Complete USÄRT,Tx Complde
797
6.5 Linksammlung http://ww*mikro(ontroller.net Milrocontroller-Portal (viel Support für den Umfangreichst€s,deutschsprachiges A\R, zahlrei€h€Tutorids und ein $lt besuchtesFoium). http://w$.w.atmel.com/ad H€rstellerdesAVR Mikrocontrolers. Auf der webseitefinden SieDätash€ets'Application 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 Mikocontroller 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. -Powersupply http://wf r{.sparktun.com/comm€rc€/preseüt.phplp=BEE-1 Digitrltechnik und EinfilÄrungstutorial tur weiteres, umfangreicheres Noch ein Mikroconholler. http://raww,arr-asm-tutodal.net/avr-de/index,html rmmierung. in dieAr.emble'prugr furorial/um Ein.tjeg 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 und einfachesEntwicklungsboardzum Se rstbau. Interessantes 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-CoDtroIerbesitzen 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 AmerikanischerZeichencode.Ursprijnglich eine Zeichenlodierungmit 7 Bits'
ProgrammiersPrach€Assemblerist bzw Prozessorabhängige Maschinenspezifische Rechenzeitdes ausätuhrelden zu der schnellsten die Programmiersprache,die benritzt' Programmstuhrt. Siewird dnher tur viele HocNeistungsprogramme 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 PeisonalComputerarbeitenkö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 teilweisesehrhardwarenahist. Ein croßteil desBetriebssystems UNIX jst in dieser 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 Hintergrund bleibt, ,,€ing€b€ttet"ist und kaum bemerk wird. Esbestehtaus€inff zentralen Prozessoreinheit(CPU) und Speichff (flü€htig und nichtflüchtig) mit Anschlussmöglictlkeiten verschiedenerperiphererEinheitenwie beispielsweise Sensoren 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€instellungen sein, 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 Navigationshilfe in der Lufifahrt und Seefaht sowie tur elektronischeLotsen und als Diebstahtsschutzin 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 sPezifiziert. 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 deshalb 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 ünterschiedliche 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 vor allem tur mobile Geräteder KommunikaLCDSsind Flüssigkristallanzeigen tions- und UnterhaltungselektronikFü lndustriemaschinenoder nüch im Hobbybereich 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 Instruction Set Eine ProzessorArchitektur. RISC ist eine Abkürzung fiir "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 Peripheral Interface". Es werden mind. 3 Datenleitungen Abkürzung fiir "Serial benötigt,SDO(DataOut) bzwMOSI,SDI(DataIn) bzw.MISOünd SCLK(Dätentakt) 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 Schnittstell€ die RS232 ist z B serieü.t?isch; Anwendungeiner UART USB Anbindung USB ist eine Abkürzung tur ,,UniversalSerial Bus" Ein Busslst€mzü na€h :iltere nach und von PeriDherieGer:ite; an ehen Computer' USB ersetzt Schnittstellenund Buss'ßtemewi€ RS232'LPT' Watchdog watchdog{engl tu| wdchnundI isteinevorrichrungwelcheverhinden' DerBegriFf Verbindaß dei Au.fal der ioftware zu einemXomPlettäu'faldesGerätesfrlhn Abständen System,indem die Softwarein regelm?tßigen a"t.ttf"ff a*t "in"s "i.a arbeitet' demWatchdogmitt€il! dasssi€noch ordnurgsgemiß
t99
Sachverzeichnis 16-Bit-Timer169 80519
Abfragenünd Schleifen8, 124 ADC 83 A/D-Wandler38,39 Ampe$and145 Analog/Digitäl'Konverter7, 83 Analog-I/O54 AND 139 ANSIlIO Anweismgentllld Funktionen 8, 119 Arrays135 8, 189 Ascll-Zeichensatz Assembler7, 93 8, 185 Assembler-Befehlssatz AsynchroneiJbertragung67 ATMegaIDE200722 ATmega1l ATm€gal2811 10,r1,47 ATmega8 ÄTMEL A\R-Produldamili€ 10 ATtiny r0 AusgangskonfigurationdesSTK50023 Ausgangskonliguiation29 automatischerReset90 17 AVR91012, A\R-Doper 52 3r AVR-Dragon 19 A\RDUDE AVR Fuse Calculator48
A\RGCC 20,3I AVRISPmkII 18 17 AVRISP/STK5oo-Protokoll 7,19,3l AVR Sttldio Avrusb50o 18 B BASCOMAVR2T,27 BedingteSprünge7, 105 Beerware110 7, 93 Befehlssätz r39 Bit-Operationen 8 Bitoperätionen BlockirgMode69 break134 Brealpoints 40 BSD110
c c 8, 110 cl66 9 Calry-Bit109
clio6a CompareMode 172 76 Compare-Output-Mode Counter 70 CTC-Mode78,172 D Data-Direction Regists 58 Datenspeicher55 DDR 58
200
Sachverzeichnit
Debugger/Simulator31 Debugging 36 Digital-lo 54 DWEN 51 E eBayI I EEPROM7,56,88,164 Endlosschleife100 Entwicklungsboard 7,11 Entwicldungsumg€bung\Alternativen 7,21 (Linux/Macos) Entwicklungsümgebung 7,22 Entwicklungsumsebung(ü'indowt7, 19 Elertool17 F Fast-PWM-Mode 78 Flashen27 for 133 Free-Running-Mode 83 Funktionst€st28 Fuse-Bits 47 Fuse-Bits 7 G GDB22 Global Interrupt Enable109 GNU21 GNU Bin Utils 22 GNU-Tool-Chain 22 GoogleEarth 164 GPL110 GPSWay-Tracker 164 GPS-Maus164 GPswayTracker8 Grundbeschaltung 7, 14 GSM-Modem168
H Hauptprogramm 8, 111 Hello World 111 High-VoltageProgramming 18 Hochspr.€he110 Hwrog 18 I if 124 Include-Dat€ien 111 InterruptKontroller53 Intenüpts7,63 Intenupt-S€ ice-Routine(ISR) 64 INTERRUPTVEKTOR 142 I/O-Vi€w38 ISP13 ISP-Header 23 ISR143 J ITAGICE /ITAG-Debugger17 K Iüingelton 8, 169 Kommentierung 116 Kompilieren35,35 Kontrollerlab 23 L Lin]<samlnltlllg8, 147 LinuxCommunity22 Load Immediate99 M MAX23211,64 Mikomntroller 7,53 myAVRWorkpad PLUS21 myA\R 7, 12,29
207 N NächbautendesSTK50017 Non Blocking Mode 69 NOT 139
o 110 Open-Source Operand99 Optimization 34 oR 139 P ParalleleProgammieradaPter17 Palalele Schnittstelle16 Pedpherie7, 57 PhasenlorrekterP$14-Mode 78 Pointer8, 144 17,19,50 PonyProg2o0o Porrs57 70 Prescaler 7, 16 kogrammieradnpter Programmiersoftwäre7, 19 Programmspeicher55 ProjectWizard 32, 33 53 Prozessol guration59,60,61 Pull-Up-Konfi R 169 Rechtecksignät mit CTC-Mode79 Register7, 54, 57 Ritchie,Dennis I r0 RS232CTRL25 24 RS232SPARE RS2327,64 51 RSTDISBL RTTTL169 RXD 64
s Schlüsselwörter118 seo 64 Seielle ProgrammieradaPter17 7, 16,64 SerielleSchnittstdle i43 SIGNAL Simulationsumgebungl8 SimülAVR22 SingteConversion-Mode83 siE AVR2l Skelet112 7, 31 Softwäre-Entwicklung 1s SpaDnungsregler 53 Speicher SPIEN51 Spnmganweisung100 Sprungmarker00 SRAM55 103 Stackspeicher Standärdbibliothek2r 7, 108 Statusregister 37 StepInto Stepover 37 146 Stern-Operator sTK20017 sTK30017 srK5007, 11,23 Strings136 Stomverbräuch 10 Stromversorgung15 Support 30 swikh r27 Synta-{-Highlighting31 T Taktgeber47 lrmer/Loüfier
/! ff, /u
Transmit-Bufiel 69 TXD 64
202 U Uberspannung15 UBRR 55 {JNIX ll0 Unteryrogramme7, 102 USART7, 64 USB 16 USBirp 18 USBprog18 UsB-Progranmieradapter18
Variablen8, l13 Versorgurgsspannug 15 Vorbereitung7,9
watchdog-Timer 7,90 Wa\€formGen€ration 78 Waveform-Generation-Mode I 69 while 129 winÄVR20,21
xoR r39
Zeichenlctten136 ZeigerlM Z€iger8 Zarc-BitlO9
tr"*.
Softwarezum {ür Studiumund Beruf- Elstklassige DasKnow-how-Paket die El€ktmnik Sie häben Lernpaket Mit diesem s(hnäpp(henpreitl absoluten voll im Griff. undElektrotechnik t MessenL4d treLerr unterWindowr . anä1o9eund digitaleschaltunsssimuLation t Me$en und dutweRel unrerW:ndoM . Simulationanalogerfilter . Pros dmmie'enir PAS(ALund HPVEE . Oe5ignCente'r:r PsP:(e . Dätenfusori€ntierteEntwicklunq!umq€bun9 t Pspice==> DesignLab . Dätendnäyseuld re
& Elektrotechnik Elektronik Lernpaket
Rfo M s + N a n d b u c h _ c D s c h ü e . u n d s t u d e n t e n v e1r5sC . äDu
€ 29,95 '"' sBNs7a3-7723_4077-2 de frän2is www Sieunsim Internet Besuchen
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
und ComputeF Elektronik PlatinenbildendasRü.kgratder Elektrotechnik, integiert€Sch'ltunt€chnik.Sien€hmenaktiveund passiveBauelem€nte, des Bestandteil auf.Wesentlicher Komponenten aenundvielem€chanisch€ von Schaltun_ Zeichnen zum sdaltplan-Editor ist der iAD-PcB'Programmes (Electdcäl Rulecheck)di€ Rich' genallerAn;wobei durchdie ERc-Funktion t wird tiokeitautomatitchüberprüf Leiterdeutschsprachige für däsverbreitetste DL€s Buchist ein Crash-Kurs plattendesign.
Handbuch DasEaglePCB-Designer 2 cD-Rolvls 400seilen, Bernsteinr200Tr.a Herben
€ 49,9s
tSBN978-3,7723-4139-7 Besuchen Sieun9im lnternet- wwwfranzis.de
sind nichtsanderesalsvollständigekleineComputermit Mikrocontroller und allem,wäs sonstnochdazLi Schnittstellen Speicher, Re.heneinheit, mehr Funktionenin einen hat irnmer oehört. Die n€u;re Entwi(klung enthalten€ lcwi€ d€r im Lefnpaket ileinenchip gebracht.Einachtb€iniges da55es fast unmöglichist. ATtinyl3bietetbereitsso vieleMöglichkeiten, und damitpraktis(hlhf eigenes sie lhreeigenenAnwendungen Entwickeln gDezial-lc.sei es eine spezielleAlarmanlage,ein M€ssgerätoder eine können5ie Grundkenntnisten mit denentscheidenden Robotersteuerung, ist zugleich HardwäIe enthaltene in Lefnpaket Die lhre ldeenumsetzen. Sie könnenalso w€iter€ und Programmi€rgerät. Entwicklungsplattform einbauen' programnieren unddannin lhreschaltungen lüikrocontroller
Mikrocontroller Lernpaket
+ Handlru.h 15Balteie+ Plalne+ suB-D9 PN Kabel+9oilvvare
€ 49'95",, rsBNe78-3-7723-it8ee-o gesu(hen de Sieun6imIntelnet-www.franzis
in die scha{ftjederd€ne6tenEinstieg Neugi€fgenügttMit diesemLernpaket - miteinfächst€n Exft€dmenten GanzohneVork€nntnisse Elektronik mit USB. g€hteslos. Heutesind die PCsn€usterGenerationnur noch mit USBausgestattet. manche istdieKomplexitätfür Beschäftigt mansichmitderUss-Schnittst€lle, parallel6n Wo män{rüh€rnochmit der anwenderzunächstabschreckend. oderseriellenS.hnittst€llede! PCsdie eig€neElektronikeinfachsteuern mit UsBausein' und regelnkonnte,mussman si.h heute zwangsweise zeigt verwendeteFTDI-uSB-Baustein Derin diesemLernpaket and€rsetzen. oderUs8-Daten€rfässungssysteme UsB-Steuerungen lhnen,wie interessante aufgebäutwerdenkönn€n. zumT€ilauchohneMikrocontroller
mit USB Experimente Lernpaket cD + Söftware + Handbuch usBadDts+ Paline+ 17Bauteie
sBN978-3-7723-so2o-r € 49,95.", de Sieunsim Internet www.franzis BeSuchen
ttlT*:,*m,*tl'''"'m" und denAufbauelektronis.her In diesem8u(h l€rnenSiedie Entwicklung virtueller siesichdabeivonden lvlöglichkeiten kennen.Lassen schaltungen eigener steht di€ EntlJvicklung lm vordergrund schaltungenfaszinieren. Sie €lektronischenS(haltungenmit einem PC'Simulätionsprogramm. ausallen Schaltungen entwerfen,untersu.henund optimierenzahlreiche {indensie im Anhang,so Bere(hnungtformeln Diezugehörigen Sereichen. -{alls können für s(hule,Ausbildungund lit ma(hen nötig dasssie si(h tchnell mit wenigen,gängigenBaut€ilen studium.siekönnenalleBausätze undeinfachnachbauen.
Schaltungen Elektronische + CD-ROM Zier 2007:160selten Richard
€ 19.9s
5717-6 ßBN 97A-3-7723 Besuchen Sieunsim Internet-www.franzis.de
..
;.'" .
s?SHHFlnhalt: . tnhahderNolm|Ec61131 undSTEPT . Strukturein€sSPs-Projektes nachlEC,in CoDeSys Funkrionen . Datenrypen, Funktionsbausteine, Programme, . VerknüpfungsundAbläufsteuerungen
nachIEC6'1131-3 SPSProgrammierung Sert€n+3 CDROI\rls Neinrich Leoeß:20071350
rsBN e783-7723-s8os-o
€ 39,95
sie unsim Internet- www.franzis.de Besu(hen