C-Control Pro Mega 32 © 2005 Conrad Electronic
Inhoud Hoofdstuk 1 Belangrijke aanwijzingen 1 Introductie 2 Het lezen van deze gebruiksaanwijzing 3 Gebruik 4 Gebruik waarvoor dit apparaat bedoeld is 5 Garantie en aansprakelijkheid 6 Service 7 Open Source pagina 1 4 4 4 5 5 6 6 Hoofdstuk 2 Installatie 7 Hoofdstuk 3 Hardware 10 Hoofdstuk 4 IDE 20 1 Software 2 Application Board 1 Firmware 2 Mega 32 2.1 Micro Controller 2.2 Module 2.3 Application Board 2.4 Pintoewijzing 2.5 Jumper Application board 2.6 Schakelschema’s 1 Overzicht 2 Projecten 2.
Hoofdstuk 5 Compiler 39 Hoofdstuk 6 Aanhangsel 117 1 Compact C 1.1 programma 1.2 Aanwijzingen 1.3 data –types 1.4 Variabelen 1.5 Operatoren 1.6 Controle –structuren 1.7 Functies 1.8 Tabellen 2 Pre –processor 3 Bibliotheken 3.1 Interne functies 3.2 AbsDelay 3.3 Analoog –comparator 3.4 Analoog – digitaal –omvormer 3.5 DCF 77 3.6 Debug 3.7 EEPROM 3.8 I2C 3.9 Interrupt 3.10 Keyboard 3.11 LCD 3.12 Port 3.13 RS232 3.14 Strings 3.15 Threads 3.
Hoofdstuk 1 1 1.1 Belangrijke aanwijzingen Introductie Het C-Control Pro systeem is gebaseerd op de Atmel Mega 32 RISC micro –controller. Deze micro –controller wordt in zeer vele apparaten in grote aantallen toegepast. Van de amusementselektronica, via huishoudmachines tot verschillende toepassingsmogelijkheden in de industrie. Daar neemt de controller belangrijke besturingsopgaven over. C-Control Pro biedt u deze uiterst moderne technologie om uw besturingsproblemen op te lossen.
componenten. Richt uw werkplek vakkundig in. Aard uw lichaam voor u begint met de werkzaamheden, b.v. door het aanraken van een geaard, geleidend voorwerp (b.v. een radiator). Vermijd het aanraken van de aansluitpins van de C-Control Pro unit. 1.4 Gebruik waarvoor het apparaat bedoeld is De C-Control pro unit is een elektronische component in de zin van een geïntegreerd schakelcircuit. De C-Control pro unit is bedoeld voor de programmeerbare aansturing van elektrische en elektronische apparaten.
1.6 Service Conrad Electronic stelt u een team van ervaren servicemedewerkers ter beschikking. Als u vragen heeft over de C-Control Pro unit, kunt u onze klantenservice bereiken per brief, fax of e-mail. Per brief Conrad Electronic Technische Anfrage Klaus Conrad-Strasse 2 92530 Wernjberg-Köblitz Bundesrepublik Deutschland Faxnr. 0044-9604 / 408848 e-mail webmaster@c-control.de Onze voorkeur gaat uit naar communicatie per e-mail.
Hoofdstuk 2 2 Installatie 2.1 Software Als de meegeleverde CD in de computer gelegd wordt, dient de installer automatisch gestart te worden, om de C-Control Pro software te installeren. Als dat niet gebeurt, b.v. omdat de “autostart” –functie voor CD’s of DVD’s in Windows uitgeschakeld is, start dan svp de installer “C-ControlSetup.exe” in het hoofdbestand van de CD-ROM handmatig.
Als het Application board voor het eerst aangesloten is, is er geen driver voor de FTDI chip aanwezig. Onder Windows XP wordt dan het volgende venster getoond: U dient hier dan “Software uit een lijst of een bepaalde bron installeren” te kiezen en op “Verder” te klikken.
Daarna dient u het pad voor de index van de driver aan te geven. Als u de software naar “C:\Programma’s” geïnstalleerd heeft, is het pad “C:\Programma’s\C-Control\FTDI USB driver”. Het bericht “C-Control Pro USB Device hat den Windows-Logo-Test nicht bestanden…” (“C-Control Pro USB Device heeft de Windows-Logo-Test niet doorstaan…”) is heel normaal. Het betekent niet, dat de driver bij de Windows-Logo-Test gefaald heeft, maar dat de driver niet deelgenomen heeft aan de (tamelijk dure) test in Redmond.
Hoofdstuk 3 3 Hardware 3.1 Firmware Het besturingssysteem van de C-Control Pro bestaat uit de volgende componenten: Bootloader Interpreter Bootloader De bootloader staat altijd tot uw beschikking. Deze zorgt voor de USB of seriële communicatie met de IDE. Via commandoregel –commando’s kunnen de interpreter en het toepassingsprogramma van de PC naar de Atmel Risc chip overgebracht worden.
van de hardware sources: • 131 Powerful instructions – Most Single-clock Cycle Execution • 32 x 8 General purpose Working Registers • Up to 16 MIPS Throughput at 16 MHz • Nonvolatile Program and Data Memories 32K Bytes of In-System Self-Programmable Flash Endurance: 10,000 Write/Erase Cycles In-System Programming by On-chip Boot Program • 1024 Bytes EEPROM • 2K Byte Internal SRAM • Peripheral Features: Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes One 16-bit Timer/Counter with Separate
Als x een digitale meetwaarde is, wordt de desbetreffende spanningswaarde als volgt berekend: u = x * referentiespanning / 1024 Genereren van klokpuls Het genereren van de klokpuls gebeurt door een 14,7456MHz kwarts –oscillator. Alle tijdprocedures van de controller zijn van deze klokpuls -frequentie afgeleid. Reset Een reset zorgt voor het terugkeren van het microcontroller –systeem naar een gedefinieerde begintoestand.
PLM -ports Er staan twee timers ter beschikking voor de PLM, Timer_0 met 8 bit en Timer_1 met 16 bit. Deze kunnen gebruikt worden voor de D/A –omvorming, voor het aansturen van servomotoren in de modelbouw of voor het afgeven van audio -frequenties. Een pulslengte – gemoduleerd signaal heeft een periode van N zogenaamde “Ticks”. De duur van een tick is de tijdbasis.
Mechanische deel Buitenafmetingen zonder pins ca. Gewicht Pinraster Aantal pins (2 rijen) Afstand van de rijen 53 mm x 21 mm x 8 mm ca. 90g 2,54mm 40 15,24mm Ports Max. toelaatbare stroom uit digitale ports Toelaatbare totaal van de stromen op digitale ports Toelaatbare ingangsspanning op portpins (digitaal en A/D) Interne pull –up weerstanden (uitschakelbaar) 3.2.
tegen VCC te schakelen. Deze keuzemogelijkheid wordt vastgelegd meet JP! Resp. met JP2. Om bij een open schakelaar eden gedefinieerd niveau op de ingangsport te hebben, moet de desbetreffende pull –up ingeschakeld zijn (zie hoofdstuk Digitalports). Als u op SW1 drukt bij het inschakelen van het Board, wordt de seriële bootloader – modus geactiveerd. LCD Er kan een LCD –module met het Application board verbonden worden. Het geeft 2 regels met elk 8 tekens weer.
Let op de maximaal afneembare stroom. Een overschrijding kan leiden tot vernieling! Vanwege het relatief hoge stroomverbruik van het Application board in het bereik van 125 mA is deze niet aan te bevelen voor toepassing in permanent op batterijen werkende apparaten. Let op de aanwijzing betreffende het kort uitvallen van de voedingsspanning (“zie wat te doen bij Reset”).
Testinterfaces De 4-polige stiftstrip X16 wordt alleen voor interne testdoeleinden gebruikt en zal ook niet op alle application boards gemonteerd worden. Voor de gebruiker is deze stiftstrip zonder betekenis. Een andere testinterface is de 6-polige stiftstrip (twee rijen met elk 3 pins) bij JP4. Ook deze stiftstrip is alleen voor intern gebruik en wordt op latere boardseries waarschijnlijk niet meer gemonteerd.
Pinbezetting voor application board Mega32 (pins 1 – 20) PIN Port Port PortBit Naam 1 PB0 PortB.0 8 T0 2 PB1 PortB.1 9 T1 3 PB2 PortB.2 10 INT2/AIN0 4 PB3 PortB.3 11 OTO/AIN1 5 6 7 8 9 10 11 12 13 14 15 16 PB4 PB5 PB6 PB7 12 13 14 15 PortB.4 PortB.5 PortB.6 PortB.7 Schakelschema Opmeringen SS MOSI MISO SCK PD0 PortD.0 PD1 PortD.1 PD2 PortD.2 24 25 26 RESET VCC GND XTAL2 XTAL1 RXD TXD INT0 17 PD3 PortD.3 27 INT1 EXT-T2 18 PD4 PortD.4 19 PD5 PortD.5 20 PD6 PortD.
Jumperposities bij uitlevering JP1 en JP2 De jumpers zijn toegewezen aan de toetsen SW1 en SW2. Er bestaat de mogelijkheid de toetsen te laten werken tegen GND of VCC. In de basisinstelling schakelen de toetsen tegen GND. JP4 JP4 is bedoeld voor het omschakelen van de voedingsspanning (netvoeding of USB). Het application board moet gevoed worden via netvoeding en spanningsregelaar (toestand bij uitlevering). JP6 Bij gebruik van het display kan met JP6 de verlichting (back light) uitgeschakeld worden. 3.2.
Hoofdstuk 4 4 IDE 4.1 Overzicht Het C-Control Pro gebruikersoppervlak (IDE) bestaat uit de volgende hoofdelementen: Sidebar voor projectbestanden Meerdere bestanden kunnen hier tot een project afgelegd worden. Editor venster Er kunnen zo veel editor vensters geopend worden als u maar wilt om bestanden te editen. Compiler meldingen Foutmeldingen en algemene compiler informatie worden hier getoond. C-Control uitvoeren Uitvoer van debug berichten van de CompactC programma’s.
4.2 Projecten 4.2.1 Maken van een project Onder het menu Project kunt u met het oproepen van Nieuw de dialoogbox Project maken oproepen. Daar wordt voor het project een projectnaam aangegeven en het project wordt in de sidebar gemaakt. U dient vooraf te beslissen of u een CompactC of een Basic project wilt maken. In een project kunt u als projectbestanden CompactC en Basic gemengd aanleggen en daaruit een programma maken. 4.2.
Projectbestanden Als u bestanden aan het project heeft toegevoegd, dan kunt u de bestanden met een dubbelklik op de bestandsnaam openen. Met een klik op de rechter muisknop verschijnen er nog meer opties: * Umbenennen * Entfernen * Optionen 4.2.3 - De naam van het bestand wordt veranderd - Het bestand wordt verwijderd uit het project - De projectopties kunnen veranderd worden Projectopties Voor elk project kunnen de compilerinstellingen apart veranderd worden.
De invoeren Autor, Version, Kommentar kunnen vrij voorzien worden van tekst, ze zijn alleen bedoeld als geheugensteuntje, om zich later beter bijzonderheden van het project te herinneren. In “CPU Auswahl” legt u het doelplatform van het project vast. Als u op “Hardware opvragen” klikt, dan wordt de aangesloten C-Control Pro module uitgelezen en wordt de CPU juist gekozen. Bij de “Opties” configureert u de multithreading en of er een debug code gemaakt moet worden.
De cyclustijd is het aantal cycli (bytecode operaties) die een thread mag verwerken tot er omgeschakeld wordt naar een andere thread. Via het aantal cycli tot aan het wisselen van threads wordt ook de prioriteit van de threads gestuurd. Zie ook Threads. 4.2.5 Beheer van de bibliotheek In het bibliotheekbeheer kunnen de brontekst –bibliotheken gekozen worden die naast de projectbestanden mede gecompileerd worden.
4.3 4.3.1 Editor Editorvenster U kunt in het C-Control Pro oppervlak meerdere editorvensters openen. Elk venster kan qua grootte en qua getoonde tekstgedeelte veranderd worden. Dubbelklikken op de titelregel maximaliseert het venster. Een klik op het bereik links naast het begin van de tekst plaatst daar een stop (breakpoint). Daartoe moet eerst de brontekst zonder fouten met “Debug info” gecompileerd zijn, en moeten er in de desbetreffende regel daadwerkelijk uitvoerbare programmateksten staan (b.v.
• “Gehe zu” (Alt-G) – u kunt naar een bepaalde regel springen Zoeken/Vervangen dialoog • • • • • Zoektekst – invoerveld voer de te zoeken tekst Vervangen met – de tekst die de te vervangen tekst vervangt Hoofdletters/Kleine letters – onderscheidt hoofd – en kleine letters Alleen hele woorden – vindt alleen hele woorden en geen deeltekenketens Reguliere uitdrukkingen – activeert de invoer van reguliere uitdrukkingen in het zoekmasker • Om bevestiging vragen bij treffers – voor het vervangen wordt de gebruik
• • • • • • • • • • • • • • • • Backspace rückt aus – met “Backspace” springt u naar de plaats waar de tekens van de vorige regel beginnen Cursor geht durch Tabulatoren – u gaat door tabs zoals door spaties Gruppen rückgängig – een Undo operatie wordt niet in kleine stappen, maar in blokken uitgevoerd Cursor hinter Dateiende – u kunt de cursor aan het einde van het bestand plaatsen Cursor hinter Zeilenende – u kunt de cursor naar het eind van de regel bewegen Erlaube Undo nach speichern – de “Undo”-buffer
4.3.4 Reguliere uitdrukkingen De zoekfunctie in de editor ondersteunt reguliere uitdrukkingen. Daarmee kunnen tekenketens zeer flexibel gezocht of vervangen worden. ^ $ Een circumflex aan het begin van een woord vindt het woord aan het begin van de regel Een dollarteken vertegenwoordigt het eind van een regel Een punt symboliseert een willekeurig teken * Een sterretje staat voor het meervoudig voorkomen van een patroon.
4.4 Compiler 4.4.1 Instellingen vooraf van de compiler In de instellingen vooraf kunnen de standaardwaarden geconfigureerd worden, die bij het maken van een nieuw project opgeslagen worden. De keuzeboxen “Threads configureren” en “Bibliotheek configureren” zijn identiek aan de instellingsparameters bij Projectopties. 4.4.2 Compileren Onder het menupunt Project kan met Compileren (F9) het actuele project door de compiler vertaald worden. De compilermeldingen worden in een eigen vensterbereik getoond.
Bij een geslaagde compilering wordt de bytecode als bestand met de uitgang “*.bc” in het projectregister afgelegd. Met een klik op de rechter muisknop in het bereik van de compilermeldingen kunnen de volgende procedures getriggerd worden: • wissen – wist de lijst van de compilermeldingen • in geheugen kopiëren – kopieert alle tekstberichten in het tussengeheugen 4.5 C-Control hardware 4.5.
4.5.2 Uitvoer Om debug berichten te tonen is er een “Uitvoer” – vensterbereik. Hier wordt getoond wanneer de bytecode interpreter gestart en beëindigd is, en hoe lang (in milliseconden) de interpreter uitgevoerd werd. De uitvoeringstijd is natuurlijk niet geldig als de interpreter in de debug modus gestopt werd. In het uitvoervenster kan echter ook de gebruiker zijn eigen debug –berichten laten zien. Voor dit doel bestaan er meerdere debug functies.
Om een nieuwe PIN in te voeren of een ingestelde PIN te wissen bestaan er in het C-Control menu de commando’s PIN invoeren en PIN wissen. Als er al een PIN was ingesteld, moet de module natuurlijk eerst door invoer van de oude PIN gedeblokkeerd worden. Een PIN mag maximaal 6 alfanumerieke tekens lang zijn. [Als u de code vergeten bent, is er een functie voor noodgevallen om de module terug te zetten naar de uitgangstoestand.
In het Debugger menu vindt u alle debugger commando’s. Met Debug modus (Shift-F10) start u de debugger. Als er op dat moment geen breakpoint gezet is, stopt de debugger bij de eerste uitvoerbare aanwijzing. Als u zich in de Debug modus bevindt, springt u met starten (F10) naar de volgende stop. Als er geen breakpunt gezet is, wordt het programma normaal afgewerkt, met de uitzondering dat het programma gestopt kan worden met Programma stoppen.
De andere variant gaat via het context –menu in de lijst van variabelen, dat u eveneens met een klik op de rechter muisknop kunt activeren: Als u daar variabele invoegen kiest, kunt u de te controleren variabele in de lijst invoeren als tekst. Als het een locale variabele is, dan wordt daar de functienaam met een dubbele punt voorgeplaatst (functienaam : variabele naam).
Als er veel variabelen in de controlelijst ingevoerd zijn, dan kan het bij een singlestep lang duren voordat alle inhouden van variabelen uit de module opgevraagd zijn. In dat geval kunt u de optie Auto actualiseren voor aparte variabelen uitschakelen. Dan wordt de inhoud van deze variabelen pas getoond als het commando Variabelen actualiseren uitgevoerd wordt. Op deze manier kunt u snel in de debugger doorgaan met singlestep en de inhouden worden pas indien nodig geactualiseerd.
Bovendien kunnen hier ook de lijsten van de “laatst geopende projecten”, alsmede de “laatst geopende bestanden” gewist worden. 4.7.1 Communicatie Via een keuzebox kunt u de verbinding met het Application Board instellen. USB verbindingen beginnen met de afkorting “USB” en worden dan doorgenummerd: USB0, USB1 … Seriële interfaces worden op dezelfde manier behandeld. Ze beginnen met de afkorting “COM”: COM 0, COM1 … enz.
4.7.2 Internet update Om te controleren of er door Conrad verbeteringen of correcties van fouten gepubliceerd zijn, kunt u de Internet update activeren. Als u de keuzebox “Alle n dagen controleren op updates” kiest, dan wordt met een interval van n dagen bij het starten van de IDE op internet naar een update gezocht. De parameter n kan ingesteld worden in het invoerveld rechts ernaast. De knop “Jetzt auf Update prüfen” (“nu op update controleren”) activeert onmiddellijk het zoeken naar updates.
• • • 4.9 Nebeneinander – ordent de vensters van links naar rechts naast elkaar Alle Minimieren – verkleint de vensters tot symboolgrootte Schliessen – sluit het actieve venster Hulp Onder het menupunt “Hilfe” (Hulp) kunt u met Inhalt (Inhoud - toets F1) het helpbestand oproepen. Het menupunt Programmaversie opent het volgende “Versie –informatie” venster en kopieert gelijktijdig de inhoud naar het geheugen. Als er een support email naar Conrad geschreven moet worden, dan is deze informatie belangrijk.
5. Compiler 5.1 Compact C 5.1.1 Programma Een programma bestaat uit een hoeveelheid aanwijzingen (zoals b.v. “a=5”), die over verschillende functies verdeeld zijn. De startfunctie die in elk programma aanwezig moet zijn, is de functie “main()”. Een minimalistisch programma dat een getal in het uitvoervenster drukt: void main (void) { Msg_WriteInt(42); // Het antwoord op alles } Projecten Men kan een programma verdelen over meerdere bestanden die in een project (zie projectbeheer) samengevat zijn.
If(a>5) { } a=a+1; b=a+2; // Aanwijzingsblok Commentaren Er bestaan twee soorten commentaren, éénregelige en commentaren met meerdere regels. Daarbij wordt de tekst in de commentaren door de compiler genegeerd. • Eénregelige commentaren beginnen met “//” en stoppen bij het eind van de regel. • Commentaren met meerdere regels beginnen met “/*” en stoppen met “*/”. /* Een meerregelig commentaar */ // Een éénregelig commentaar Indicatoren Indicatoren zijn de namen van functies of variabelen.
Constante termen Een term of delen van een term kan/kunnen constant zijn. Deze deeltermen kunnen al tijdens de compiler –looptijd berekend worden. Zo wordt b.v. 12 + 123 – 15 door de compiler samengevat tot 120 Soms moeten termen constant zijn opdat ze geldig zijn. Zie b.v. declarering van array variabelen. 5.1.3 Datatypes Waarden hebben altijd een bepaald datatype. De waarden van gehele getallen hebben in CompactC een 8 of 16 bit breed datatype, getallen met floating point zijn altijd 4 byte lang.
term van een voorteken voorzien. D.w.z. de operatie wordt “signed” uitgevoerd. • Als één van beide operandi van het type float is, dan is het resultaat eveneens van het type float. Als één van de beide operandi een 8 bit of 16 bit datatype heeft, dan wordt deze voor de operatie omgevormd tot een float datatype. 5.1.2 Variabelen Variabelen kunnen verschillende waarden aannemen, afhankelijk van het datatype waarmee ze gedefinieerd zijn.
int s; float f: s=sizeof(f); // de waarde van s = 4 Bij arrays wordt ook alleen de bytelengte van het basis –datatype als uitkomst gegeven. U moet de waarde met het aantal elementen vermenigvuldigen om het geheugenverbruik van de array te berekenen. Array variabelen Als u achter de naam bij de variabelen –definitie tussen rechte haakjes een getalswaarde schrijft, dan heeft u een array gedefinieerd. Een array legt de plaats voor de gedefinieerde variabele meervoudig in het geheugen vast.
int a,b; void func1 (void) { int a,x,y; // globale b is toegankelijk // globale a is niet toegankelijk omdat deze door locale a afgedekt is // locale x,y zijn toegankelijk // u is niet toegankelijk omdat deze lokaal hoort tot functie main } void main (void) { int u; // globale a, u zijn toegankelijk // locale u is toegankelijk //x,y niet toegankelijk omdat deze lokaal hoort tot functie func1 } Globale variabelen hebben een gedefinieerd geheugenbereik dat tijdens de totale programmaduur ter beschikking staat
i= (2+3)*4-5; // resultaat 15 => eerst 2+3, dan *4, daarna –5 Een opstelling van de prioriteiten vindt u in de prioriteitstabel. 5.1.5.1 Wiskundige operatoren Alle wiskundige operatoren met uitzondering van “modulo” zijn gedefinieerd voor integer en zwevende komma. Alleen modulo is beperkt tot één integer -type. [Afb.] U dient er op te letten dat in een term aan het cijfer 7 een integer datatype toegewezen wordt.
Logische operatoren zijn alleen toegestaan voor Integer datatypes. Elke waarde ongelijk aan nul geldt als logisch 1. De nul geldt als logisch 0. Operator Verklaring && Logisch En II Logisch Of ! Logisch Niet Voorbeeld Resultaat 1 && 1 5 && 0 0 0 1 0 !2 !0 1 0 0 1 0 1 5.1.5.4 Bitschuif operatoren Bitschuif operatoren zijn alleen toegestaan voor Integer datatypes. Bij een Bit-Shift operatie wordt er steeds aan het einde een 0 tussen geschoven.
5.1.2.1 In –Decrement operatoren Increment (toename) en decrement (afname) operatoren zijn alleen toegestaan voor variabelen met Integer datatypes. Operator Verklaring variabele++ Waarde der variabelen, daarna variabele met één verhoogd (postincrement) Waarde der variabelen, daarna variabele met één verlaagd (postdecrement) Waarde der variabelen met één verhoogd (pré –increment) Waarde der variabelen met één verlaagd (pré –decrement) Variabele - ++variabele - - variabele 5.1.5.
In plaats van een enkele aanwijzing kan ook een aanwijzingsblok gedefinieerd worden. Voorbeelden: if(xy) { a=b*5; b - -; } else { a=b*4; y++; } 5.1.6.2 while Met een wile aanwijzing kunnen afhankelijk van een voorwaarde aanwijzingen in een lus herhaald worden. While( term ) aanwijzing; Eerst wordt de term geëvalueerd. Als het resultaat niet gelijk is aan 0, dan wordt de aanwijzing uitgevoerd.
continue aanwijzing Bij de uitvoering van continue binnen een lus volgt er onmiddellijk een nieuwe berekening van de term. Afhankelijk van het resultaat wordt bij niet gelijk aan 0 de lus herhaald. Een uitkomst 0 breekt de lus af. Voorbeeld: while(1) // eindeloze lus { a++; if(a>10) break; // breek lus af } 5.1.6.3 do .. while Met een do ..
Voorbeeld: do { a++; if(a>10) break; // breekt lus af while(1); // eindeloze lus } 5.1.6.4 for Een for lus wordt normaalgesproken gebruikt om een bepaald aantal lusdoorlopen te programmeren. For(aanwijzing1; term; aanwijzing2) aanwijzing3; Als eerste wordt aanwijzing1 uitgevoerd, die normaalgesproken een initialisering bevat. Daarna volgt de evaluatie van de term. Als de term niet gelijk is aan 0 worden aanwijzing2 en aanwijzing3 uitgevoerd, en de lus wordt herhaald.
continue aanwijzing continue zorgt voor de directe nieuwe berekening van de term. Afhankelijk van het resultaat wordt bij niet gelijk aan 0 aanwijzing2 uitgevoerd en de lus wordt herhaald. Een resultaat van 0 breekt de lus af. Voorbeeld: for(i=0;i<10;i++) { if(i==5) continue; } 5.1.6.
} default: b=b+2; break aanwijzing Een break verlaat de switch aanwijzing. Als u voor case de break weglaat, dan worden de aanwijzingen ook uitgevoerd als er naar de vorige case gesprongen wordt: switch(a) { case 1: a++; } case 2: a++; // wordt ook uitgevoerd bij een waarde van a==1 case 3: a++; // wordt ook uitgevoerd bij een waarde van a==1 of a==2 In dit voorbeeld worden alle drie “a++” aanwijzingen uitgevoerd als a gelijk is aan 1. 5.1.6.
Parameteroverdracht Opdat functies flexibel gebruikt kunnen worden, kunt u ze parameteriseren. Hiervoor worden in de haakjes na de functienaam de parameters voor de functie gescheiden door komma’s doorgegeven. U geeft net als in de variabelendeclaratie eerst het datatype en daarna de parameternaam aan. Als u geen parameters wilt doorgeven, dan schrijft u void tussen de ronde haakjes.
int i; i=0; while(str[i]) i++; return(i); } // herhaal zolang het teken niet nul is void main(void) { int len; char text[15]; } text=”hallo wereld”; len=Stringlength(text); In main wordt de referentie van tekst als parameter doorgegeven aan de functie Stringlength. Als u in een functie een normale parameter verandert, is deze verandering buiten deze functie niet zichtbaar. Bij referenties is dat anders.
5.1.8.1 Operator voorrang Rang Operator 13 12 11 10 9 8 7 6 5 4 3 2 1 () ++ -- ! ~ - (negatief voorteken) * / % + << >> < <= > >= == != & ^ I && II ?: 5.1.8.
Bitschuifoperatoren << Één bit naar links schuiven >> Eén bit naar rechts schuiven Toename-/Afname operatoren ++ Post/Pre -toename -- Post/Pre –afname Logische operatoren && Logisch en II Logisch of I Logisch niet Bitoperatoren & I ^ ~ 5.2 En Of Exclusief of Bit –invertering Preprocessor De Gnu Generic preprocessor die hier gebruikt wordt, heeft nog meer functies die onder http://nothingisreal.com/gpp/gpp.html gedocumenteerd zijn.
Omdat de preprocessor voor de compiler loopt, wordt bij elke keer dat symbol in de brontekst opduikt, symbol vervangen door tekstconstante. Een voorbeeld: #Define Pl 3.141 Voorwaardelijke compilering #ifdef symbol … #else // optie … #endif U kunt controleren welke delen van een brontekst werkelijk gecompileerd worden. Na een #ifdef symbol aanwijzing wordt de volgende tekst alleen gecompileerd als het symbol ook gedefinieerd is door #define symbol.
5.3.2 AbsDelay Algemene functies Syntax void AbsDelay (word ms); Beschrijving De functie AbsDelay() wacht een bepaald aantal milliseconden. [Afb.] De functie werkt weliswaar zeer nauwkeurig, maar onderbreekt niet alleen de bewerking van de actuele thread, maar laat de Bytecode interpreter in zijn geheel wachten. Interrupts worden weliswaar geregistreerd, maar de interruptroutines worden in deze tijd niet verwerkt, omdat ook daarvoor de Bytecode interpreter nodig is.
5.3.3.2 AComp voorbeeld Voorbeeld: gebruik van de analoge comparator // Acomp: analoge comparator // Ingang (+) PB2 resp. band gap reference 1,22V /// Ingang (-) PB3 // De functie Acomp geeft als resultaat de waarde van de comparator // De oproep kan met de parameter 0 (beide ingangen worden gebruikt) of // of 0x40 (interne referentiespanning op de (+) ingang, externe ingang PB3.
Verschil -ingangen ADC22x10 ADC23x10 ADC22x200 ADC23x200 ADC20x1 ADC21x1 ADC22x1 ADC23x1 ADC24x1 ADC25x1 Verschil –ingangen ADC2, ADC2, versterking 10 ; offsetmeting Verschil –ingangen ADC2, ADC3, versterking 10 Verschil –ingangen ADC2, ADC2, versterking 200 ; offsetmeting Verschil –ingangen ADC2, ADC3, versterking 200 Verschil –ingangen ADC2, ADC0, versterking 1 Verschil –ingangen ADC2, ADC1, versterking 1 Verschil –ingangen ADC2, ADC2, versterking 1 ; offsetmeting Verschil –ingangen ADC2, ADC3, versterki
Returnwaarde gemeten waarde van de ADC –poort . 5.3.4.3 ADC_ReadInt ADC –functies Syntax word ADC_ReadInt(void); Beschrijving Deze functie wordt gebruikt om na een ADC-Interrupt de meetwaarde te lezen. De ADCInterrupt wordt getriggerd, als de AD_omvorming afgesloten is en er dus een nieuwe meting tot uw beschik-king staat. Zie ook ADC SetInt en ADC StartInt. De functie ADC_Read levert de gedigitaliseerde meetwaarde van één van de 8 ADC poorten.
ADC functies Syntax word ADC_Int(byte v_ref,byte channel ); Beschrijving De functie ADC_SetInt initialiseert de analoog-digitaal_omvormer voor de interrupt -functie. De referentiespanning en het meetkanaal worden gekozen en de A/D omvormer wordt voorbereid voor de metingen. De interrupt-Service-Routine voor de ADC moet gedefinieerd zijn. Nadat de interrupt heeft plaatsgevonden kan de meetwaarde ADC ReadInt() uitgelezen worden.
5.3.5 DCF 77 Alle DCF –routines zijn in de bibliotheek “LCD_Lib.cc” gerealiseerd. Voor het gebruik van deze functies dient u de bibliotheek “DCF_Lib.cc” in het project te integreren. RTC met DCF77 tijdsynchronisatie Het DCF77 signaal De logische informatie (de tijdinformatie) wordt samen met de normale frequentie (de draagfrequentie van de zender, dus 77,5 kHz) verzonden. Dit gebeurt door negatieve modulatie van het signaal (verlaging van de draagamplitude tot 25%).
van het programma en dan dagelijks op een in het programma vastgelegde tijd (Update_uren, Update_minuten). Er worden twee bibliotheken gebruikt: DCF77_Lib.cc en LCD_Lib.cc. Voor de zendontvangst van het tijdsignaal is een DCF77 –ontvanger noodzakelijk. De uitgang van de DCF77 –ontvanger wordt aangesloten op Poort D7. Eerst moet het begin van een tijdinformatie gevonden worden. Er wordt gesynchroniseerd op het puls –hiaat (59e bit). Daarna worden de bits in het ritme per seconde opgenomen.
5.3.5.1 DCF_FRAME DCF -functies Syntax Void DCF_FRAME (void); Beschrijving Schakel de DCF Mode op 3 (“Data decoderen en opslaan, pariteitcontrole”). Parameters Geen 5.3.5.2 DCF_INIT DCF -functies Syntax Void DCF_INIT(void) Beschrijving DCF_INIT bereidt de DCF -functie voor. De ingang voor het DCF –signaal wordt ingesteld. DCF Mode = 0. Parameters Geen 5.3.5.3 DCF_PULS DCF -functies Syntax Void DCF_PULS(void); Beschrijving DCF Mode op 1 schakelen (“Puls zoeken”).
5.3.5.4 DCF_START DCF -functies Syntax Void DCF_START(void); Beschrijving DCF_START initialiseert alle gebruikte variabelen en zet DCF Mode op 1. De DCF – tijdregistratie loopt nu automatisch. Parameters Geen 5.3.5.5 DCF_SYNC DCF -functies Syntax Void DCF_SYNC(void); Beschrijving DCF Mode op 2 schakelen (“synchronisatie op begin frame”). Parameters Geen 5.3.6 Debug De Debug Message functies maken het mogelijk een geformatteerde tekst naar het uitvoervenster van de IDE te zenden.
Er wordt een teken naar het uitvoervenster gestuurd. Een C/R (Carriage Return – waarde 13) triggert een sprong naar het begin van de volgende regel. Parameters c het uit te voeren teken 5.3.6.2 Msg_WriteFloat Debug Message functies Syntax void (Msg_WriteFloat (float val); Beschrijving Het doorgegeven floating point getal wordt met voorteken weergegeven in het uitvoervenster. Parameters val float waarde 5.3.6.
5.3.6.4 Msg_WriteInt Debug Message functies Syntax void (Msg_WriteInt (int val); Beschrijving De doorgegeven integere wordt weergegeven in het uitvoervenster. Bij negatieve waarden wordt er een minteken voor geplaatst. Parameters val 16bit integere waarde 5.3.6.5 Msg_WriteText Debug Message functies Syntax void (Msg_WriteText (int char text[ ]); Beschrijving Alle tekens van de char array worden uitgevoerd tot aan de nul aan het eind. Parameters text cursor op char array 5.3.6.
5.3.7 EEPROM 5.3.7.1 EEPROM_Read EEPROM functies Syntax byte EEPROM_Read(word pos); Beschrijving Leest een byte van positie pos uit de EEPROM. De eerste 32 bytes zijn gereserveerd voor de C-Control Pro OS. Een waarde voor pos van 0 en groter heeft daarom betrekking op byte 32 en hoger in de EEPROM. Parameters pos positie in de EEPROM Returnwaarde De waarde van de byte op positie pos in de EEPROM. 5.3.7.
void I2C_Init (byte I2C_BR); Beschrijving Deze functie initialiseert de I2C –interface. Parameters I2C_BR geeft de bitrate aan. De volgende waarden zijn al vooraf gedefinieerd: I2C_100kHz I2C_400kHz 5.3.8.2 I2C_Read_ACK I2C functies Syntax byte I2C_Read_ACK(void); Beschrijving Deze functie ontvangt een byte en bevestigt met ACK. Daarna kan met I2C_Status de status van de interface opgevraagd worden. Returnwaarde Gelezen waarde van de I2C bus 5.3.8.
Deze functie start de communicatie met een startsequentie. Daarna kan met I2C_Status de status van de interface opgevraagd worden. Parameters Geen 5.3.8.5 I2C_Status I2C functies Syntax byte I2C_Status(void); Beschrijving Met I2C_Status kan de status van de interface opgevraagd worden. De betekenis van de statusinformatie is weergegeven in de tabel. Returnwaarde actuele I2C status 5.3.8.
Parameters Geen 5.3.8.7 I2C_Write I2C functies Voorbeeld Syntax void I2C_Write(void); Beschrijving Deze functie zendt een byte. Daarna kan met I2C_Status de status van de interface opgevraagd worden. Parameters data databyte 5.3.8.
5.3.8.
5.3.9 Interrupt De Controller stelt een veelvoud aan interrupts ter beschikking. Sommige daarvan worden gebruikt voor systeemfuncties en staan niet ter beschikking van de gebruiker. De volgende interrupts kunnen door de gebruiker benut worden: Tabel interrupts Interrupt naam Beschrijving INT_0 INT_1 INT_2 INT_TIM1CAPT INT_TIM1CMPA INT_TIM1CMPB INT_1TIM1OVF INT_1TIM0COMP INT_TIM0OVF INT_ANA_COMP INT_ADC INT_TIM2COMP INT_TIM2OVF Externe interrupt0, ingang Poort D.
4: een stijgende flank triggert een interrupt 5.3.9.2 Ext_Int0Disable Interrupt functies Syntax void Ext_Int0Disable(void); Beschrijving De externe interrupt 0 wordt geblokkeerd. Parameters Geen 5.3.9.3 Ext_Int1 Interrupt functies Syntax void Ext_Int1(byte Mode); Beschrijving Deze functie schakelt de externe interrupt 1 vrij. De parameter Mode legt vast, wanneer een interrupt gemaakt moet worden.
5.9.3.4 Ext_Int1Disable Interrupt functies Syntax void Ext_Int1Disable(void); Beschrijving De externe interrupt 1 wordt geblokkeerd. Parameters Geen 5.3.9.5 Ext_Int2 Interrupt functies Syntax void Ext_Int2(byte Mode); Beschrijving Deze functie schakelt de externe interrupt 0 vrij. De parameter Mode legt vast, wanneer er een interrupt gemaakt moet worden. Parameters Mode Parameter 0: 1: een vallende flank triggert een interrupt een stijgende flank triggert een interrupt 5.3.9.
Syntax byte Irq_GetCount(void); Beschrijving Signaleert dat de interrupt verwerkt is (interrupt acknowledge). Als de functie niet aan het eind van een interrupt routine wordt opgeroepen, wordt er ononderbroken in de interrupt gesprongen. Returnwaarde Geeft aan hoe vaak de interrupt vanaf de hardware tot aan het oproepen van Irq_GetCount() getriggerd is. Een waarde groter dan 1 kan optreden als de hardware sneller interrupts genereert dan de interpreter de interrupt routine kan verwerken. 5.3.9.
Tabel interrupt vectoren: Nr Interrupt naam Beschrijving 0 1 2 3 4 5 6 7 8 9 10 11 12 Externe interrupt0 Externe interrupt1 Externe interrupt2 Timer1 Capture Timer1 CompareA Timer1 CompareB Timer1 Overflow Timer0 Compare Timer0 Overflow Analoge comparator ADC Timer2 Compare Timer2 Overflow INT_0 INT_1 INT_2 INT_TIM1CAPT INT_TIM1CMPA INT_TIM1CMPB INT_TIM1OVF INT_TIM0COMP INT_TIM0OVF INT_ANA_COMP INT_ADC INT_TIM2COMP INT_TIM2OVF 5.3.9.
5.3.10 Keyboard Een deel van deze routines is in de interpreter geïmplementeerd, een ander deel wordt opgeroepen door het toevoegen van de bibliotheek “Key_Lib.cc”. Omdat de functies in “Key_Lib.cc” door bytecodes gerealiseerd worden, zijn ze langzamer in de verwerking. Bibliotheekfuncties hebben echter het voordeel dat als u ze niet gebruikt, deze functies door weglaten van de bibliotheek uit het project gehaald worden. Directe interpreter –functies zijn steeds aanwezig, maar kosten flashgeheugen. 5.3.10.
Parameters keys bitveld dat door Key Scan() teruggeleverd wordt. Returnwaarde ASCII waarde van de herkende toets -1 als er geen toets ingedrukt is 5.3.11 LCD Een deel van deze routines is geïmplementeerd in de interpreter, een ander deel kan opgeroepen worden door het toevoegen van de bibliotheek “LCD_Lib.cc”. Omdat de functies in “LCD_Lib.cc” gerealiseerd worden door bytecodes, zijn ze langzamer in de verwerking.
Beschrijving Schakelt de cursor van het display in. Parameter Geen 5.3.11.4 LCD_CursorPos LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_CursorPos(byte pos); Beschrijving Plaatst de cursor in de positie pos. Parameter pos cursorpositie Waarde van pos Positie op display 0x00-0x07 0x40-0x47 0 – 7 in de 1e regel 0 – 7 in de 2e regel 5.3.11.5 LCD_Init LCD functies (bibliotheek ”LCD_Lib.
Beschrijving “High Level” initialisering van het LCD display. Roept als eerste LCD InitDisplay() op. Parameters Geen 5.3.11.6 LCD_SubInit LCD functies Syntax void LCD_SubInit(void); Beschrijving Initialiseert de poort s voor de displaybesturing op assembler –niveau. Moet als eerste routine voor alle andere LCD uitvoerfuncties opgeroepen worden. Wordt gebruikt als eerste commando van LCD Init() gebruikt. Parameters Geen 5.3.11.7 LCD_WriteChar LCD functies (bibliotheek ”LCD_Lib.
Parameter Geen 5.3.11.9 LCD_WriteCTRRegister LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_WriteCTRRegister(byte cmd); Beschrijving Stuurt een commando naar de Display Controller. Parameter cmd Commando in byte –vorm 5.3.11.10 LCD_WriteDataRegister LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_WriteDataRegister(char x); Beschrijving Stuurt een databyte naar de Display Controller. Parameter x databyte 5.3.11.
x datanibble cmd commandonibble 5.3.11.12 LCD_WriteRegister LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_WriteRegister(byte y, byte x); Beschrijving LCD_WriteRegister splitst databyte y in twee nibbles en stuurt ze naar de display controller. Parameters y databyte cmd commandonibble 5.3.11.13 LCD_WriteText LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_WriteText(char text[ ]); Beschrijving Alle tekens van de char array tot aan de nul aan het eind worden uitgegeven.
5.3.12 Poort De Atmel Mega 32 heeft 4 in - /uitgangspoorten van elk 8 bit. Elke bit van een aparte poort kan als ingang of als uitgang geconfigureerd worden. Omdat echter het aantal pins van de Mega 32 Risc CPU beperkt is, zijn extra functies aan aparte poorten toegewezen. U vindt hier een tabel van de pintoewijzing. Het is belangrijk om de pintoewijzing te bestuderen voor u met de programmering begint, omdat belangrijke functies van de programma –ontwikkeling (b.v.
Syntax void Port _DataDirBit(byte port bit,byte val); Beschrijving De functie Port _DataDirBit configureert een bit (pin) van een poort voor in - of uitvoer. Als de bit “1” is, dan wordt de pin op uitgang geschakeld. Een voorbeeld: als port bit = 9 en val = 0, dan wordt pin 2 van de Atmel Mega (komt overeen met PortB.1 – zie pintoewijzing) op ingang geconfigureerd. Parameters port bit bitnummer van de poort (zie tabel) val 0- = ingang, 1 = uitgang Tabel poort bits Definitie PortA.0 … PortA.7 PortB.
5.3.12.3 Port _Read Poortfuncties Syntax byte Port_Read(byte port ); Beschrijving Leest een byte van een specifieke poort . Alleen de pins van de poort die op ingang zijn geschakeld, leveren een geldige waarde naar de desbetreffende bitpositie in de gelezen byte terug. (Voor de afbeelding tussen portbits en de pins van de Atmel Mega Chips zie Pintoewijzing). Parameters port poortnummer (zie tabel) Returnwaarde Waarde van de poort Tabel poortnummers Definitie Waarde PortA PortB PortC PortD 0 1 2 3 5.3.
Definitie PortA.0 … PortA.7 PortB.0 … PortB.7 Definitie PortC.0 … PortC.7 PortD.0 … PortD.7 Poort bit 0 … 7 8 … 15 Poort bit 16 … 23 24 … 31 5.3.12.5 Port _Write Poortfuncties Voorbeeld Syntax void Port _Write(byte port ,byte val); Beschrijving Schrijft een byte op de gespecificeerde poort . Alleen de pins van de poort die op uitgang geschakeld zijn, nemen de bitwaarden van de doorgegeven parameters over.
Tabel poortnummers Definitie Waarde PortA PortB PortC PortD 0 1 2 3 5.3.12.6 Port _WriteBit Poortfuncties Syntax void Poort _WriteBit(byte poort bit,byte val); Beschrijving De functie Port_WriteBit zet de waarde van een pin die op uitgang geschakeld is. Als een pin op ingang geschakeld is, dan kan de interne pull-up weerstand ingeschakeld (1) of uitgeschakeld (0) worden. (Voor de afbeelding tussen portbits en de pins van de Atmel Mega Chips zie Pintoewijzing).
Definitie Poortbit Poort C.0 … Poort C.7 Poort D.0 … Poort D.7 16 … 23 24 … 31 5.3.12.7 Poort voorbeeld // Programma laat afwisselend de beide LEDs op het // Application Board knipperen in een 1 seconde – ritme void main(void) { Port _DataDir(Poort D,0xc0); uitgang geschakeld } // de bovenste beide bits van poort D worden op while(true) // eindeloze lus { Port _Write(Poort D,0x40); AbsDelay(1000); Port _Write(Poort D,0x80); AbsDelay(1000); } 5.3.
par Interface –parameter (zie tabel) divider Baudrate –initialisering d.m.v.
5.3.13.2 Serial_Read Seriële functies Syntax byte Serial_Read(void); Beschrijving Een byte wordt door de seriële interface gelezen. Als er zich geen byte in de seriële buffer bevindt, keert de functie pas terug als er een teken ontvangen is. Returnwaarde Ontvangen byte uit de seriële interface 5.3.13.3 Serial_ReadExt Seriële functies Syntax word Serial_ReadExt(void); Beschrijving Een byte wordt door de seriële interface gelezen.
5.3.13.5 Serial_WriteText Seriële functies Syntax void Serial_WriteText(char text[ ]); Beschrijving Alle tekens van de char array tot aan de laatste nul worden doorgegeven naar de seriële. Parameters Text char array 5.3.13.
Parameters str1 str2 Cursor op char array 1 Cursor op char array 2 Returnwaarde 0 als beide strings gelijk zijn <0 als op het onderscheidingspunt de 1e string kleiner is >0 als op het onderscheidingspunt de 1e string groter is 5.3.14.2 Str_Copy String functies Syntax void Str_Copy(char destination[ ],char source[ ],word offset); Beschrijving De bronstring (source) wordt gekopieerd naar de doelstring (destination).
Parameters dest c len cursor op de doelstring het teken dat herhaald in de string gekopieerd wordt aantal keren hoe vaak c in de doelstring geschreven wordt 5.3.14.4 Str_Isalnum String functies (bibliotheek “String_Lib.cc” ) Syntax byte Str_Isalnum(char c); Beschrijving Een teken c wordt er op gecontroleerd, of het uit het alfabet stamt of een cijfer is. Parameters c het te controleren teken Returnwaarde 1 0 als het teken numeriek of alfabetisch is (zowel hoofd – als kleine letters) overig 5.3.14.
Parameters str cursor op string Returnwaarde Aantal tekens in string (zonder de nul aan het eind). 5.3.14.7 Str_Substr String functies (bibliotheek “String_Lib.cc” ) Syntax int Str_Substr(char source[ ],char search[ ]); Beschrijving Een string search wordt gezocht in de string source. Als de gezochte tekens –ketting (char array) gevonden wordt, dan wordt de positie ervan teruggegeven.
Parameters n decimal text offset float getal aantal decimale posities waarin n geconverteerd wordt cursor op de doelstring aantal tekens waarmee de ASCII weergave van het float getal verschoven in de string gekopieerd wordt. Als offset de waarde STR_APPEND(0xffff) heeft, dan wordt als offset de lengte van de doelstring aangenomen. In dit geval wordt het float getal aan de textstring gehangen. 5.3.14.
n base text offset 16 Bit woord Basis van het talstelsel Cursor op de doelstring Aantal tekens waarmee de ASCII weergave het getal verschoven in de tekststring gekopieerd wordt minwidth minimale breedte van de string Als offset de waarde STR_APPEND(0xffff) heeft, dan wordt als offset de lengte van de doelstring aangenomen. In dit geval wordt het integere getal aan de textstring gehangen. 5.3.
Een thread die moet wachten, voert de aanwijzing Thread_Wait uit met een signaalnummer. De toestand van de thread wordt op wachtend gezet. Dit betekent dat deze thread bij een mogelijke wisseling van thread overgeslagen wordt. Als de andere thread zijn kritische werk beëindigd heeft, geeft hij het commando Thread_Signal met hetzelfde signaalnummer dat de andere thread voor Thread_Wait gebruikt heeft. De thread –toestand van de wachtende thread verandert dan van wachtend in inactief.
5.3.15.2 Thread_Delay Thread functies Voorbeeld Syntax void Thread_Delay(word delay); Beschrijving Hiermee wordt een thread voor een bepaalde tijd op “slapend” geschakeld. Na de aangegeven periode is hij weer klaar voor de verwerking. De periode wordt aangegeven in ticks, die door timer 2 geproduceerd worden. Als timer 2 uitgeschakeld wordt of voor een ander doel wordt gebruikt, is de functiewijze van Thread_Delay() ongedefinieerd.
Met deze functie kan een thread zijn thread -wisseling verhinderen. Dit is zinvol als bij een serie poort - uitvoeren of andere hardware commando’s de tijdelijke scheiding door een thread -wisseling vermeden moet worden. Als er vergeten wordt het “Lock” (de vergrendeling) weer uit te schakelen, vindt er geen multithreading meer plaats. Parameters lock bij 1 wordt de thread -wisseling verhinderd, bij 0 weer toegelaten. 5.3.15.
Syntax void Thread_Start(byte thread, word func); Beschrijving Er wordt een nieuwe thread gestart. Als startfunctie voor de thread kan een willekeurige functie gebruikt worden. Als er een functie uitgezocht wordt die overdracht –parameters bevat, dan is bij de start van de thread de inhoud van deze parameters niet gedefinieerd! Parameters thread func (0-15) nummer van de thread naam van de functie waarin de nieuwe thread gestart wordt 5.3.15.
Thread_Start(1,thread1); / / Thread 1 starten } while(true) / / Eindeloze lus { if ( ! Port _ReadBit (26) ) Mag_WriteText (str1); } / / SW1 werd ingedrukt 5.3.15.
Timer1(16 Bit) / / Voorbeeld: pulstelling met CNT1 Timer T1CNT(); pulse(n); / / n pulsen genereren count=Timer T1GetCNT(); 5.3.16.
Timer1 (16 Bit) 1e voorbeeld: produceren van frequenties met 125*4,34µ µs = 1085µ µs periode Timer_T1FRQ(125,ps_64); e 2 voorbeeld: produceren van frequenties met 10*1,085 µs = 10,85 µs periode en 2*1,085µ µs = 2,17 µs faseverschuiving Timer_T1FRQX(10,2,ps_8); 5.3.16.3 Pulsbreedte –modulatie Er staan voor de pulsbreedte –modulatie twee timers tot uw beschikking: Timer_0 met 8 Bit en Timer_1 met 16 Bit. Met een pulsbreedte –modulatie kunt u heel gemakkelijk een digitaal –analoog –omvormer realiseren.
} Port _WriteBit(0,0); Irq_SetVect(INT_TIM0MP,Timer0_ISR); TimerT0Time(100,ps_1024); / / verdere verloop programma … / / PortA.0 uitgang = 0 / / Interrupt service routine definiëren / / Tijd vastleggen en timer0 starten 5.3.16.5 Puls - & periodemeting Met Timer_1 kunnen pulsbreedtes of signaalperiodes gemeten worden. Met behulp van de Input Capture functie (speciaal register van de Controller) wordt de tijd tussen twee flanken gemeten. Deze functie gebruikt de Capture -Interrupt (INT_TIM1CAPT).
5.3.16.6 Frequentiemeting Voor het direct meten van een frequentie kan de Timer1(16Bit) gebruikt worden. De pulsen binnen een seconde worden geteld en het resultaat is dan in Hertz. De maximale meetfrequentie is 64kHz en wordt geleverd door de 16Bit teller. Een voorbeeld van deze manier van frequentiemeting vindt u onder “Demo programma’s/Frequentiemeting”. Door het verkorten van de meettijd kunnen ook hogere frequenties gemeten worden. Het resultaat moet dan dienovereenkomstig omgerekend worden. 5.3.16.
5.3.16.9 Timer_T0FRQ Timer functies Syntax void Timer_T0FRQ(byte period, byte PS); Beschrijving Deze functie initialiseert de Timer0 met de aangegeven voordeler en periodeduur, zie tabel. Het uitgangssignaal verschijnt op Port B.3 (PIN4). Het produceren van de frequentie wordt automatisch gestart.
5.3.16.11 TimerT0PW Timer functies Syntax void Timer_T0PW(byte PW); Beschrijving Deze functie stelt een nieuwe waarde voor Timer0 in, zonder de voordeler te veranderen. Parameters PM pulsbreedte 5.3.16.12 TimerT0PWM Timer functies Syntax void Timer_T0PWM(byte PW, byte PS); Beschrijving Deze functie initialiseert deTimer0 met de aangegeven voordeler en pulsbreedte, zie tabel. Het uitgangssignaal verschijnt op Port B.3 (PIN4).
Beschrijving Het produceren van de frequentie wordt met de bovenstaande instelling gestart. De voordeler moeit nieuw aangegeven worden. Parameters Prescaler voordeler (tabel prescaler) 5.3.16.14 Timer_T0Stop Timer functies Syntax void Timer_T0Stop(void); Beschrijving Het produceren van de frequentie wordt gestopt. Het uitgangssignaal kan 0 of 1 zijn, afhankelijk van de laatste toestand. Alleen de klokpuls voor de timer wordt gestopt. De overige instellingen blijven behouden. Parameters Geen 5.3.16.
Tabel prescaler: Voordeler (prescaler) Tijdbasis (duur van een tick) PS_1 (1) PS_8 (2) PS_64 (3) PS_256 (4) PS_1024 (5) 67,8 ns 542,5 ns 4,34 µs 17,36 µs 69,44 µs 5.3.16.16 Timer_T1CNT Timer functies Syntax void Timer_T1CNT(void); Beschrijving Deze functie initialiseert de Counter1. De Counter1 wordt bij een positieve signaalflank op de ingang T1 (PIN2) opgehoogd. Parameters Geen 5.3.16.
Parameters Geen 5.3.16.19 Timer_T1FRQ Timer functies Syntax void Timer_T1FRQ(word period,byte PS); Beschrijving Deze functie initialiseert de Timer1 met de aangegeven voordeler en periodeduur, zie tabel. Het uitgangssignaal verschijnt op PortD.5 (PIN19). Het produceren van de frequentie wordt automatisch gestart.
5.3.16.21 Timer_T1GetCNT Timer functies Syntax word Timer_T1GetCNT(void); Beschrijving De waarde van Counter1 wordt gelezen. Als er een overflow plaats vindt, dan wordt de waarde 0xFFFF doorgegeven. Returnwaarde De gemeten waarde van de teller 5.3.16.22 Timer_T1GetPM Timer functies Syntax word Timer_T1GetPM(byte Mode); Beschrijving Deze functie legt vast of er een pulsbreedte – of periodemeting moet worden uitgevoerd, en levert het meetresultaat op.
5.3.16.23 Timer_T1PM Timer functies Syntax void Timer_T1PM(byte PS); Beschrijving Deze functie initialiseert Timer_1 voor de meting en stelt de voordeler in. Parameters PS voordeler Tabel prescaler: Voordeler (prescaler) Tijdbasis (duur van een tick) PS_1 (1) PS_8 (2) PS_64 (3) PS_256 (4) PS_1024 (5) 67,8 ns 542,5 ns 4,34 µs 17,36 µs 69,44 µs 5.3.16.
5.3.16.26 Timer_1PWM Timer functies Syntax void Timer_T1PWM(word period, word PW0, byte PS); Beschrijving: Deze functie initialiseert Timer1 met de aangegeven voordeler, pulsbreedte en periodeduur, zie tabel. Het uitgangssignaal verschijnt op PortD.5(PIN19). Parameters period periodeduur PW0 pulsbreedte voordeler (tabel prescaler) PS 5.3.16.
Geen 5.3.16.29 Timer_T1Time Timer functies Syntax void Timer_T1Time(word Time,byte PS); Beschrijving Deze functie initialiseert Timer1 met de aangegeven voordeler en de waarde (16Bit) voor de tijd, zie tabel. Als deze waarde wordt bereikt, dan wordt de Timer1-interrupt (INT_TIM1COMP) getriggerd.
Hoofdstuk 6 6 Aanhangsel 6.1 FAQ (vaak gestelde vragen) Problemen 1. Er bestaat geen USB –verbinding met het Application Board.