C-Control Pro Mega Series © 2005 Conrad Electronic
Inhoudsopgave Hoofdstuk 1 Belangrijke aanwijzingen 2 Hoofdstuk 2 Installatie 8 Hoofdstuk 3 Hardware 13 Hoofdstuk 4 IDE 47 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 8 Historie 1 Software 2 Application Board 1 Firmware 2 Mega 32 2.1 Module 2.2 Application Board 2.4 Pintoewijzing 2.5 Jumper Application board 2.6 Schakelschema’s 3 Mega 128 3.1 Module 3.2 Application Board 3.
1.6 Bibliotheekbeheer 2 Editor 2.1 Editor functies 2.2 Reguliere uitdrukkingen 3 C-control hardware 3.1 Programma starten 3.2 Output 3.3 PIN functies 3.4 Controle van de versie 4 Debugger 4.1 Breakpoints 4.2 Variabele venster 4.3 Array venster 5 Opties 5.1 Editor instellingen 5.2 Instellingen vooraf van compiler 5.3 IDE instellingen 6 Vensters 7 Hulp Hoofdstuk 5 Compiler 1 Algemene features 1.1 Externe RAM 1.2 Pre-processor 1.3 Pragma aanwijzingen 1.4 Map bestand 2 Compact C 2.1 Programma 2.
3.5 Operatoren 3.6 Controlestructuren 3.7 Functies 3.8 Tabellen 4 Bibliotheken 4.1 Interne functies 4.2 AbsDelay 4.3 Analoog –comparator 4.4 Analoog – digitaal –omvormer 4.5 DCF 77 4.6 Debug 4.7 EEPROM 4.8 I2C 4.9 Interrupt 4.10 Keyboard 4.11 LCD 4.12 Poort 4.13 Math 4.14 RS232 4.15 SPI 4.16 Strings 4.17 Threads 4.
Hoofdstuk
1 Belangrijke aanwijzingen Dit hoofdstuk behandelt belangrijke informatie voor de garantie en support en gebruik van de C-control.Por hardware en software. 1.1 Introductie De C-Control Pro systemen zijn gebaseerd op de Atmel Mega 32 resp. de Atmel Mega 128 RISC microcontroller. Deze microcontroller wordt in zeer vele apparaten in grote aantallen toegepast. Van de amusementselektronica, via huishoudmachines tot verschillende toepassingsmogelijkheden in de industrie.
1.3 Gebruik De C-Control Pro unit bevat gevoelige componenten. Deze kunnen door elektrostatische ontladingen vernield worden! Let op de algemene regels voor het gebruik van elektronische componenten. Richt uw werkplek vakkundig in. Aard uw lichaam voor u begint met de werkzaamheden, bijv. door het aanraken van een geaard, geleidend voorwerp (bijv. een radiator). Vermijd het aanraken van de aansluitpins van de C-Control Pro unit. 1.
Als de C-Control Pro unit inclusief software niet aan uw eisen voldoet, of u bent het niet eens met de garantie – en aansprakelijkheidsbepalingen, maak dan gebruik van onze 14-daagse geld-terug-garantie. Stuur ons dan de unit binnen deze termijn zonder sporen van gebruik, in de onbeschadigde originele verpakking en inclusief alle accessoires terug voor terugbetaling of verrekening van de waarde van dit artikel! 1.6 Service Conrad Electronic stelt u een team van ervaren servicemedewerkers ter beschikking.
• • • • • • • • • • • • • • • • • • • • • • • • • • Weergave van de geheugengrootte bij start van de interpreter Interne RAM check voor de herkenning wanneer globale vaiabelen te groot voor hoofdgeheugen Interne RAM check voor de herkenning wanneer thread configuratie te groot voor hoofdgeheugen Looptijdcontrole of stacklimiets beschadigd worden Bronbestanden kunnen in de project hiërarchie naar boven en onder beweegt worden Waarschuwing bij toewijzing van te lange strings De compiler maakt naar wens een m
• Nieuwe demo-programma's Foutcorrecties • Bij umlauten crasht de compiler niet meer • Interne bytecode commando StoreRel32XT gecorrigeerd • Offset in stringtabel verbeterd Versie 1.28 d.d. 26.04.
Hoofdstuk 7
2 Installatie In dit hoofdstuk wordt de installatie van de hard- en software beschreven. 2.1 Application Board Belangrijke aanwijzing voor het in- en uitbouwen van een Mega-module Voor de verbinding van de module en het Application Board moeten hoogwaardige insteekpinnen gebruikt worden, die een goed contact garanderen.
Installatie van de USB driver Verbind het Application board met een netvoeding. U kunt hiervoor een standaard stekkernetvoeding met 9V/250mA gebruiken. U kunt de poling zelf uitkiezen, deze wordt door diodes steeds correct omgezet. Afhankelijk van extra schakelingen kan het later noodzakelijk zijn een netvoeding met een hogere capaciteit te gebruiken. Maak een verbinding tussen het Application board en uw PC met behulp van een USB kabel. Schakel het Application board in.
Daarna dient u het pad naar de map 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.
Op deze plek drukt u gewoon op “Installatie voortzetten”. Na een paar seconden moet de driver dan volledig geïnstalleerd zijn. In de PC –software klikt u in het menu Opties op IDE en selecteert u het bereik “Interfaces”. Kies daar de communicatiepoort "USB0". Seriële aansluiting Vanwege de langzame overdrachtsnelheid van de seriële interface heeft een USB aansluiting de voorkeur. Als er echter vanwege de hardware geen USB interface beschikbaar is, kan de bootloader naar de seriële modus gebracht worden.
Hoofdstuk 12
3 Hardware In dit hoofdstuk wordt de hardware beschreven die bij de C-Control Pro serie gebruikt wordt. Hier wordt de module beschreven van C-Control Pro Mega32 en C-Control Pro Mega128. Verdere paragrafen verklaren de opbouw en functie van het bijhorende Application board en de meegeleverde LCD module en het toetsenbord. 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.
In de hoofdzaak werkt de interpreter de bytecode af, die door de compiler gegenereerd is. Verder zijn de meeste bibliotheekfuncties in de interpreter geïntegreerd, opdat het bytecode –programma bijv. toegang kan krijgen tot hardware-poorten. De RAM en EEPROM interface wordt gebruikt door de debugger in de IDE, om toegang te krijgen tot variabelen, als de debugger gestopt is bij een breakpoint.
3.2.1 Module Modulegeheugen In de C-Control Pro module zijn 32kB FLASH, 2kB EEPROM en 2kB SRAM geïntegreerd. Op het Application board bevindt zich een extra EEPROM met een geheugen van 8kB. Dit EEPROM kan aangesproken worden via een 12C interface. Aanwijzing: U vindt gedetailleerde informatie in de PDF-bestanden van de IC –fabrikanten op de C-Control Pro software CD. ADC Referentiespanning –opwekking De microcontroller beschikt over een analoog –digitaal –omvormer met een resolutie van 10Bit.
Schakel nooit direct twee poorten samen, die gelijktijdig als uitgang moeten werken! Digitale ingangpinnen zijn hoogohmig of met een interne pull-up weerstand geschakeld en zetten een aanwesend spanningssignaal om in een logische waarde. Voorwaarde daarvoor is, dat het spanningsignaal zich binnen het voor TTL – resp. CMOS –IC's gedefinieerde bereiken voor low - of high- niveau bevindt.
Technische specificaties module Aanwijzing: u vindt gedetailleerde informatie in de PDF –bestanden van de IC –fabrikanten op de C-Control Pro software CD. Alle spanningen hebben betrekking op gelijkspanning (DC). Omgevingscondities Bereik van de toelaatbare omgevingstemperatuur Bereik van de toelaatbare relatieve luchtvochtigheid van de omgeving 0 °C … 70 °C 20% …60% Voedingsspanning Bereik van de toelaatbare voedingsspanning Stroomverbruik van de module zonder externe lasten 4.5V … 5,5V ca.
lichtdiodes (LD4 rood, LD5 groen). Als alleen de groene LED oplicht, dan is de USB interface klaar voor gebruik. Als er een dataoverdracht plaatsvindt, branden beide LEDs. Dit geldt ook voor de debug –modus. Het knipperen van de rode LED geeft een foutconditie aan. Voor de USB –communicatie wordt de SPI –interface van de mega32 gebruikt (PortB.4 t/m PortB.7, PortA.6, PortA.7) en deze moeten via de desbetreffende jumpers verbonden zijn.
LCD –contrast (LCD-ADJ) U heeft de beste zichtbaarheid van de tekens als u er frontaal naar kijkt. Eventueel moet u het contrast een beetje bijregelen. Het contrast kan ingesteld worden via de draaiweerstand PT1. Toetsenbord Voor het invoeren van data heeft de gebruiker een 12-delig toetsenbord (0 … 9, *, #) ter beschikking (X15: 13-polige stekker). Het toetenbord is 1 uit 12 georganiseerd, d.w.z. aan iedere toets is een leiding toegewezen. De toetsinformatie wordt serieel via een schuifregister ingelezen.
Een kabelverbinding met aansluiting aan de NRZ –pinnen TxD, RxD, RTS mag maximaal 10 meter lang zijn. U dient waar mogelijk afgeschermde normkabels te gebruiken. Bij langere kabels of onafgeschermde kabels kunnen storende invloeden de dataoverdracht beïnvloeden. Sluit alleen verbindingskabels aan waarvan de aansluitbezetting bekend is. Verbind nooit de seriële zenduitgangen van twee apparaten met elkaar! U herkent de zenduitgangen meestal aan de negatieve uitgangsspanning in rusttoestand.
Voedingsspanning Bereik van de toelaatbare voedingsspanning Stroomverbruik zonder externe lasten Max. toelaatbare permanente stroom uit gestabiliseerde 5V-spanning 3.2.3 8V … 24V ca. 125mA 200mA Pintoewijzing PortA t/m PortD worden voor directe pin-functies (bijv. Port WriteBit) van 0 tot 31 geteld, zie “Poortbit”. Pinbezetting voor application board Mega32 PIN Poort Poort Poortbit Naam 1 2 3 PB0 PortB.0 PB1 PortB.1 PB2 PortB.2 8 9 10 T0 T1 INT2/AIN0 4 PB3 PortB.
34 PA6 PortA.6 5 ADC6 TX_REQ 35 PA5 PortA.5 5 ADC5 KEY_EN 36 PA4 PortA.4 4 ADC4 LCD_EN 37 PA3 PortA.3 3 ADC3 EXT_SCK 38 PA2 PortA.2 5 ADC2 EXT_DATA 39 40 PA1 PA0 PortA.1 PortA.0 1 0 ADC1 ADC0 3.2.
Jumperposities bij uitlevering 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). De maximale stroomlevering van het USB interface is kleiner dan door een netzvoeding. Een overschrijding kan leiden tot beschadiging van de USB interface van de computer. JP6 Bij gebruik van het display kan met JP6 de verlichting (back light) uitgeschakeld worden.
3.2.5 Schakelschema’s De schakelschema's zijn ook als pdf-bestand op de installatie-CD. 3.2.5.
3.2.5.
26
27
3.2.5.
3.3 Mega 128 Mega128 overzicht De microcontroller Atmega 128 komt uit de AVR –familie van ATMEL. Hij is een low-power microcontroller met Advanced RISC Architecture.
Software Selectable Clock Frequency ATmega103 Compatibility Mode Selected by a Fuse Global Pull-up Disable • I/O and Packages 53 Programmable I/O Lines 64-lead TQFP and 64-pad MLF • Operating Voltages 2.7 - 5.5V for ATmega128L 4.5 - 5.5V for ATmega128 3.3.1 Module Pinlayout van de module De Mega128 module wordt geleverd op 4 dubbele rijen (2x8) vierkante pinnen.
ADC Referentiespanning –opwekking De microcontroller beschikt over een analoog –digitaal –omvormer met een resolutie van 10Bit. Dit betekent dat gemeten spanningen als gehele getallen van 0 tot 1023 weergegeven kunnen worden. De referentiespanning voor de ondergrens is het GND- niveau, dus 0V. De referentiespanning voor de bovengrens kan door de gebruiker gekozen worden: * 5V voedingsspanning (VCC) * interne referentiespanning van 2,56V * externe referentiespanning bijv.
Control Pro module. Na de reset is in eerste instantie elke digitale poort als ingangspoort geconfigureerd. Via bepaalde commando’s kan de datarichting omgeschakeld worden. Het is belangrijk om vóór de programmering de pintoewijzing M32 en M128 te bestuderen, aangezien belangrijke functies van de programma –ontwikkeling (bijv. de USB –interface van het Application board) op bepaalde poorten liggen.
Voedingsspanning Bereik van de toelaatbare voedingsspanning Stroomverbruik van de module zonder externe lasten 4.5V … 5,5V ca. 20mA Puls Pulsfrequentie (kwarts –oscillator) 14,7456MHz Mechanische deel Buitenafmetingen zonder pinnen ca. Gewicht Pinraster Aantal pinnen (2 rijen) 40 mm x 40 mm x 8 mm ca. 90g 2,54mm 64 Poorten Max.
Lichtdiodes Er zijn 5 lichtdiodes beschikbaar. LD3 (groen) bevindt zich aan de voorkant onder de DC – aansluiting en brandt, als er voedingsspanning aanwezig is. LD4 en LD5 geven de status van de USB interface aan (zie par. USB). De groene lichtdiodes LD1 en LD2 bevinden zich naast de vier toetsen en staan de gebruiker vrij ter beschikking. Ze zijn via een voorweerstand aan VCC gelegd. Via jumper kan LD1 aangesloten worden op PortG.3 en LD2 op PortG.4.
SRAM Op het Application board bevindt zich een SRAM-chip (K6X1008C2D) van Samsung. Hierdoor wordt het beschikbare SRAM-geheugen uitgebreid op 64KB. De SRAM gebruikt voor de aansturing de poorten A, C en deels poort G. Als het SRAM niet gebruikt wordt kan deze met JP7 deactiveert worden en de poorten zijn weer beschikbaar. Oftewel de gebruikte RAM chip een capaciteit van 128 KB heeft, kan opgrond van het geheugenmodel slechts 64kb daarvan benut worden.
Seriële interface De microcontroller Atmega128 bezit voor wat betreft de hardware twee asynchrone seriële interfaces volgens RS232 standaard. Het formaat kan vastgelegd worden bij de initialisering van de interface (databits, pariteitbit, stopbit). Op het application board bevindt zich een hoogwaardige niveau-omvormer-IC voor het omzetten van de digitale bitstromen in NonReturn-Zero-signalen volgens de RS232 standaard (positieve spanning voor lowbits, negatieve spanning voor highbits).
Technische specificaties application board Aanwijzing: U vindt gedetailleerde informatie in de PDF –bestanden van de IC –fabrikant op de C-Control Pro software CD. Alle spanningsaanduidingen hebben betrekking op gelijkspanning (DC). Mechaniek Buitenafmetingen ca.
38
3.3.4 Jumper Applicatie board Jumper D.m.v. de jumpers kunnen bepaalde opties gekozen worden. Dit zijn bepaalde poorten welke speciale functies bezitten (zie tabel pintoewijzing van M128). Bijvoorbeeld is de seriële interface via de pinnen PortE.0 en PortE.1 gerealiseerd. Als de seriële interface niet gebruikt wordt, kunnen de desbetreffende jumpers verwijdert worden en deze pinnen zijn dan voor andere functies beschikbaar.
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). De maximale uithaalbare stroom van de USB interface is lager dan van de netvoeding.
3.3.5.
3.3.5.
43
44
3.3.5.
Hoofdstuk 46
4 IDE Het C-Control Pro gebruikersoppervlak (IDE) bestaat uit de volgende hoofdelementen: Sidebar voor projectbestanden Editor venster Meerdere bestanden kunnen hier tot een project geplaatst worden. Er kunnen zo veel editor vensters geopend worden als u maar wilt om bestanden te bewerken. Compiler meldingen Foutmeldingen en algemene compiler informatie worden hier getoond. C-Control uitvoeren Uitvoer van debug berichten van de CompactC programma’s.
4.1 Projecten Elk programma voor de C-control module wordt door een project geconfigureerd. In een project staan de gebruikte bronbestanden en bibliotheken. Eveneens zijn hier de instellingen van de compiler. Een project bestaat uit het projectbestand met de extentie “.cprj” en de bijhorende bronbestanden. 4.1.1 Maken van een project Onder het menu Project kunt u met het oproepen van Nieuw de dialoogbox Project maken oproepen.
fouten bij het compileren optreden, dan wordt per regel de fout beschreven en wel in de vorm van: Bestandsnaam (regel, kolom): .foutbeschrijving De foutpositie in de brontekst kan via de bevelen Volgende fout (F11) of Vorige fout ShiftF11) gevonden worden. Beide commando’s bevinden zich onder het menupunt Project, of er kan door dubbelklikken op een foutbericht van de compiler de cursor bij de foutposities in de editor positioneren.
• Nach oben • Nach unten • • • Umbenennen Entfernen Optionen 4.1.
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.
Als een thread meer plaats gebruikt dan toegewezen, wordt de geheugenplaats van de andere threads mede beschadigd, en het is zeer waarschijnlijk dat het programma zal crashen. 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.1.
4.2 Editor 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.
• • • • “Suchen” (Ctrl-F) – opent de “Zoeken” –dialoog “Weitersuchen” (F3) – zoekt verder met dezelfde zoek –criteria “Ersetzen” (Ctrl-R) – opent de “Vervangen”-dialoog “Gehe zu” (Alt-G) – u kunt naar een bepaalde regel springen Zoeken / Vervangen dialoog • • • • • Zoektekst – invoerveld voor de te zoeken tekst Vervangen door – de vervangende tekst Hoofdletters/ kleine letters – onderscheidt hoofd – en kleine letters Alleen hele woorden – vindt alleen hele woorden en geen tekenketens Reguliere uitdrukkin
4.3 C-Control hardware 4.5.1 Programma starten Onder het menupunt C-Control kan de hardware relevante functies uitvoeren. Hierbij horen de overdracht en het starten van het programma op de hardware, en eveneens de wachtwoordfunctie. Programma –overdracht Als een programma foutloos vertaald is, moet de bytecode eerst overgebracht worden naar de Mega 32 of Mega 128, voor het uitgevoerd kan worden. Dit gebeurt met het commando “Übertragen” (overbrengen – shift-F9) uit het menu C-Control.
4.3.2 Uitvoer Om debug berichten te tonen is er een “Uitvoer” – venster. 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.
Als u de code vergeten bent, is er een functie voor noodgevallen om de module terug te zetten naar de uitgangstoestand. Onder C-Control bestaat de functie Modul zurücksetzen (module terugzetten), waarmee u PIN, interpreter en programma kunt wissen. 4.3.4 Versie controleren Omdat de C-Control Pro MEGA serie meerdere hardware platformen ondersteunen, is het belangrijk de actuele versienummers van bootloader, interpreter en hardware –versie in het oog te houden.
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. Dit functioneert echter alleen, als het programma gestart is vanuit de debug modus. Als de debugger in het programma gestopt is (de groene balk is zichtbaar), dan kunt u het programma stapsgewijs (“singlestep”) laten uitvoeren.
4.4.2 Variabelen -venster In de debugger kunt u de inhoud van variabelen bekijken. Daartoe wordt de muis boven de variabele geplaatst, en na ca. 2 seconden wordt de inhoud van de variabele als tooltip getoond. De variabele wordt eerst volgens het overeenkomstige bestandstype getoond en dan, door een komma gescheiden, als hexgetal met daarvoor “0x”. Als u meerdere variabelen wilt controleren, dan kunt u de variabelen in een lijst samenvatten.
Het is niet mogelijk de inhoud van arrays in de debugger te bekijken.
In de linker kolom wordt de index van de array getoond en rechts de inhoud. Bij multidimensionele arrays groeit de index in de rechter kolom het snelst. Na elke stop van de debugger of bij een singlestep kan de inhoud van een array venster al niet meer actueel zijn. Als bij elke singlestep in de debugger meerdere array- vensters opnieuw geactualiseerd worden kan het tot vertragingen komen omdat de gegevens van de module geladen moeten worden.
4.5.1 • • • • • • • • • • • • • • • • 62 Editorinstellingen Automatisch Einrücken – door op Enter te drukken wordt de cursor op de volgende regel ingesprongen op de plaats van de vorige regel. Einfügen – Invoegen. is deze optie uit, is “overschrijven” de standaardinstelling. Benutze Tabulator – Gebruik tab’s – als deze optie activeert is worden tab’s ingevoegd, anders spaties. Smart Tabulator – er wordt met de tabulator een tab ingevoegd tot aan de beginpositie van de vorige regel.
• • • • • Doppelklick selektiert Zeile – dubbelklikken selecteert een regel, standaard wordt bij het dubbelklikken een woord geselecteerd Suchtext von Cursor – de tekst bij het “Zoektekst- invoerveld” wordt door de cursorpositie overgenomen. Dreifachklick selektiert Zeile – als een dubbelklik een woord selecteert wordt door drie keer klikken een regel geselecteerd. Automatische Rechtschreibprüfung – deze optie schakelt de spellingscontrole voor commentaren in.
4.5.3 IDE instellingen U kunt aparte aspecten van de IDE configureren. • Übertragung nach Kompilieren Abfrage – Als een programma gecompileerd maar niet naar de C-Control module overgebracht is, wordt de gebruiker gevraagd of het programma gestart moet worden. • Letztes Projekt wieder öffnen – Het laatste geopende project wordt bij het starten van de C-Control Pro IDE weer geopend.
4.5.3.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. Met de toets “Schnittstellensuche” worden alle interfaces doorzocht tot de commandoregels interface van de C-Control Pro reageert.
Opdat de internet update zoals voorgeschreven functioneert, mag de MS Internet Explorer niet in de “offline” modus staan. Als bijv. vanwege een firewall de toegang tot internet beperkt is door een proxy, dan kunnen de proxy instellingen zoals adres, gebruikersnaam en code in deze dialoog aangegeven worden. Als er in MS Internet Explorer data ingevoerd zijn, dan hebben deze een hogere prioriteit en overschrijven ze de instellingen in deze dialoog. 4.
4.7 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 klembord. Als er een support email naar Conrad geschreven moet worden, dan is deze informatie belangrijk. Omdat u bij het oproepen van Programmaversie ook gelijk in het klembord bent, kunt u deze data makkelijk aan het eind van een email invoegen.
Hoofdstuk 68
5. Compiler 5.1 Algemene features Dit bereik geeft informatie over compiler- eigenschappen en features die niet afhankelijk zijn van de gebruikte programmeertaal. 5.1.1 Externe RAM Op het application board Mega 128 is een externe RAM aanwezig. Dit RAM wordt door de interpreter automatisch herkent en gebruikt voor het uit te voeren programma. In plaats van ca. 2665 byte zijn dan ca. 63848 byte beschikbaar als programmageheugen. Hiervoor moet het programma niet opnieuw gecompileerd worden.
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. Als er een optionele #else aanwijzing aangegeven is, dan wordt de brontekst na #else bewerkt wanneer het symbol niet gedefinieerd is. Invoegen van tekst #include pad\bestandsnaam Met deze aanwijzing kan een tekstbestand in de broncode ingevoegd worden.
char txt[60]; txt=__LINE__; Msg_WriteText(txt); // regelnummer aangeven Msg_WriteChar(13); // LF txt=__FILE__; Msg_WriteText(txt); // bestandsnaam aangeven Msg_WriteChar(13); // LF txt=__FUNCTION__; Msg_WriteText(txt); // functienaam aangeven Msg_WriteChar(13); // LF 5.1.3 Pragma aanwijzingen Met de aanwijzing #pragma kan de uitvoer en het verloop van de compiler gestuurd worden.
Totale lengte: 4 bytes Funktie main() count n Totale lengte: 4 bytes 2 2 2 0 In deze lijst is te zien dat er geen globale variabelen gebruikt worden. Verder zijn er twee functies, "Pulse()" en "main()". Elke functie heeft een geheugenverbruik van 4 Byte aan lokale variabelen. 5.2 CompactC Voor het programmeren van de C-Control Pro Mega 32 of Mega 128 kan de programmeertaal CompactC toegepast worden.
5.2.2 Aanwijzingen Aanwijzing Een aanwijzing bestaat uit meerdere gereserveerde commandowoorden, indicatoren en operatoren, die met een puntkomma (‘;’) aan het eind afgesloten wordt. Om verschillende elementen van een aanwijzing te scheiden, bestaat tussen de aparte aanwijzingselementen een tussenruimte, in het Engels ook “whitespaces” genoemd. Onder tussenruimte worden verstaan spaties, tabs en regeldoorvoer (“C/R en LF”).
Indicatoren Indicatoren zijn de namen van functies of variabelen. • • • • • Geldige tekens zijn de letters (A-Z, a-z), de cijfers (0 – 9) en de liggende streep (‘ _’ ) Een indicator begint steeds met een letter Er wordt verschil gemaakt tussen hoofd – en klein letters Gereserveerde woorden zijn niet toegestaan als indicator De lengte van indicatoren is niet beperkt Rekenkundige termen Een rekenkundige term is een hoeveelheid waarden, die met operatoren verbonden zijn.
5.2.3 Datatypes Waarden bezitten steeds een bepaalde datatype. De integerwaarden (gehele getallen waarden) hebben in CompactC een 8 of 16 bit breed datatype, getallen met floating point zijn altijd 4 byte lang. Datatypee Voorteken char unsigned char byte int unsigned int word float Ja Nee Nee Ja Nee Nee Ja Waardebereik Bit -128 … +127 0 … 2555 8 0 … 2555 8 -32768 … +32767 0 … 65535 0 … 65535 ±1.175e-38 to ±3.
Als u meerdere variabelen van hetzelfde type wilt definiëren, kunt u meerdere variabelennamen door een komma gescheiden aangeven: Type naam1, naam2, naam3, …; Als type zijn toegestaan: char, unsigned char, byte, int, unsigned int, word, float Voorbeelden: int a; int i, j; float xyz; Aan integere variabelen kunnen getalwaarden decimaal of als hexgetal toegewezen worden. Voor een hexgetal worden voor het getal de letters “0x” gezet.
variabele meervoudig in het geheugen vast. Bij de voorbeelddefinitie: int x[10 ]; wordt voor de variabele x de 10-voudige geheugenplaats vastgelegd. De eerste geheugenplaats kan aangesproken worden met x[0 ], de tweede met x[1 ], de derde met x[2 ], …tot x[9]. U mag bij de definitie natuurlijk ook andere indexgroottes kiezen. De beperking is alleen de RAM geheugenplaats van de C-Control Pro.
functies produceren locale variabelen. Locale variabelen kunnen alleen binnen de functie bereikt worden.
5.2.5 Operatoren Prioriteit van operatoren Operatoren verdelen wiskundige termen in deeltermen. De operatoren worden dan in de volgorde van hun prioriteit (precedentie) geëvalueerd. Termen met operatoren van dezelfde prioriteit worden van links naar rechts berekend. Voorbeeld: i= 2+3*4-5; // resultaat 9 => eerst 3*4, dan +2, daarna –5 U kunt de volgorde van de bewerking beïnvloeden door haakjes te plaatsen. Haakjes hebben de grootste prioriteit.
5.2.5.3 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. Operator Verklaring << Één bit naar links schuiven >> Één bit naar rechts schuiven 5.2.5.4 Voorbeeld Resultaat 1 << 2 3 << 3 0xff >> 6 16 >> 2 4 24 3 4 In –Decrement operatoren Increment (toename) en decrement (afname) operatoren zijn alleen toegestaan voor variabelen met Integer datatypes.
5.2.5.6 Logische operatoren 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 Voorbeeld && Logisch En II Logisch Of ! Logisch Niet 5.2.6 1 && 1 5 && 0 0 0 1 0 !2 !0 Resultaat 1 0 0 1 0 1 Controlestructuren Controlestructuren laten het toe om het programmaverloop in afhankelijkheid van termen, variabelen of invloeden te wijzigen. 5.2.6.
5.2.6.2 do .. while Met een do .. while constructie kunnen, afhankelijk van een voorwaarde, aanwijzingen in een lus herhaald worden: do aanwijzing while( term ); De aanwijzing of het aanwijzingsblok wordt uitgevoerd. Aan het eind wordt de term geëvalueerd. Als het resultaat niet gelijk is aan 0, leidt dit tot de herhaalde uitvoering van de aanwijzing. De hele procedure wordt herhaald tot de term de waarde 0 aanneemt.
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. Als de term een waarde heeft van 0, wordt de lus afgebroken. Net als bij andere lustypes kan bij aanwijzing3 in plaats van een aanwijzing ook een aanwijzingsblok gebruikt worden.
a=0, label0: a++; if(a<10) goto label0; } 5.2.6.5 if .. else Een if aanwijzing heeft de volgende syntax: if( term ) Aanwijzing1; else Aanwijzing2; Achter de if aanwijzing volgt tussen haakjes een wiskundige term. Als deze term bepaald als niet gelijk aan 0, dan wordt aanwijzing 1 uitgevoerd. U kunt met behulp van het else commandowoord een alternatieve aanwijzing2 definiëren, die dan uitgevoerd wordt, als de term als 0 berekend is.
case constante_1; aanwijzing_1; break; case constante_2; aanwijzing_2; break; . . case constante_n; aanwijzing_n; break; default: // default is optioneel aanwijzing_0; }; De waarde van de term wordt berekend. Daarna springt de uitvoering van het programma naar de constante die overeenkomt met de waarde van de term en gaat daar verder met het programma. Als er geen constante overeenkomt met de waarde van de term, dan wordt de switch constructie verlaten.
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.2 while Met een wile aanwijzing kunnen afhankelijk van een voorwaarde aanwijzingen in een lus herhaald worden. while( term ) aanwijzing; Eerst wordt de term bepaald. Als het resultaat niet gelijk is aan 0, dan wordt de aanwijzing uitgevoerd.
Daarna kunnen vanuit main andere functies oproepen worden. Een eenvoudig voorbeeld: void { (func1 (void) // aanwijzingen in functie func1 . . } void { (main(void) // de functie func1 wordt twee keer opgeroepen funct1(); funct1(); } 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.
functie aangegeven. Als u geen waarde wilt laten teruglopen, dan gebruikt u void als datatype. int { func1 (int a) return a-10; } De retourwaarde wordt binnen de functie met de aanwijzing “return term” aangegeven. Als u een functie van het type void heeft, kunt u de return aanwijzing ook zonder parameter gebruiken om de functie te verlaten. Referenties Omdat het niet mogelijk is arrays als parameter door te geven, kunt u uw toevlucht nemen tot arrays via referenties.
6 5 4 3 2 1 5.2.8.
5.2.8.
5.3 BASIC De tweede programmeertaal voor de C-Control Pro Mega module is BASIC. De compiler vertaald de programmeertaal BASIC commando’s naar een bytecode, die van de interpreter van de C-Control Pro verwerkt wordt. De taalomvang, van het hier genomde BASIC dialect, komt voor het grootste gedeelte overeen met de industriestandaard van grote anbieders van software.
Eenvoudige aanwijzing: a = 5; Een aanwijzing hoeft niet persé compleet in een regel te staan. Omdat ook regeldoorvoeren tot de tussenruimte horen, is het legitiem om een aanwijzing over meerdere regels te verdelen. If a=5 _ ' Aanwijzing over 2 regels a=a+10 Er kunnen ook meer dan één aanwijzing in een regel geplaatst worden. Het teken “:” (dubbele punt) scheidt dan de enkele aanwijzingen. Echter, in verband met de leesbaarheid, moet men deze optie niet vaak gebruiken.
Ook vergelijkingen zijn wiskundige termen. De vergelijkingsoperatoren geven als resultaat een waarheidswaarde van “1”of “0”, afhankelijk van of de vergelijking correct was. De term “3 < 5” geeft de waarde “1” (waar; true). 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 bijv. 12 + 123 – 15 door de compiler samengevat tot 120 Soms moeten termen constant zijn opdat ze geldig zijn. Zie bijv.
de volgende regels: • Als bij de verbinding van twee 8 bit of 16 bit integer- waarden één van beide datatypes van een voorteken is voorzien, dan is ook het resultaat van de term van een voorteken voorzien. • Als één van beide operandi van het type Single is, dan is het resultaat eveneens van het type Single. Als één van de beide operandi een 8 bit of 16 bit datatype heeft, dan wordt deze voor de operatie omgevormd tot een single datatype. 5.3.
sizeof Operator Met de operator sizeof() kan het aantal bytes bepaald worden die een variabele in het geheugen inneemt. Voorbeeld: Dim s As Integer Dim f As Single s=SizeOf(f) ' de waarde van s is 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.
str1="Hallo wereld!" Er kan geen String aan grotere Char array toegewezen worden. Echter zijn er trucs voor gevorderden: Dim str_array(3,40) As Char Dim Single_str(40) As Char Single_str="A String" Str_StrCopy(str_array,Single_str,40); // kopieert Single_str in de tweede String Dit functioneert omdat met een afstand van 40 tekens achter de string in str_array de ruimte voor de tweede string ligt.
Sub func1() Static a As Integer End Sub Static variabelen behouden in tegenstelling tot normale variabelen hun waarde ook als de functie verlaten wordt. Bij een volgende oproep van de functie heeft de statische variabele dezelfde inhoud als bij het verlaten van de functie. Omdat de inhoud van een Static variabele bij de eerste toegang gedefinieerd is, worden statische variabelen net als globale ook bij de start van het programma met nul geïnitialiseerd. 5.3.
5.3.5.2 Bit –operatoren Bit –operatoren zijn alleen toegestaan voor integer –datatypes. Operator Verklaring And En Or Of Xor exclusieve of Not Bit -invertering 5.3.5.3 Voorbeeld Resultaat &H0f And 3 &Hf0 And &H0f 1 Or 3 &Hf0 Or &H0f &Hff Xor &H0f &Hf0 Xor &H0f Not &Hff Not &Hf0 3 0 3 &Hff &Hf0 &Hff 0 &H0f 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.3.6 Controlestructuren Controlestructuren laten het toe om het programmaverloop in afhankelijkheid van termen, variabelen of invloeden te wijzigen. 5.3.6.1 Do Loop While Met een Do… Loop While constructie kunnen, afhankelijk van een voorwaarde, aanwijzingen in een lus herhaald worden: Do aanwijzing Loop While term De aanwijzing wordt uitgevoerd. Aan het eind wordt de term geëvalueerd. Als het resultaat niet gelijk is aan 0, leidt dit tot de herhaalde uitvoering van de aanwijzing.
5.3.6.2 Do While Met een while aanwijzing kunnen, afhankelijk van een voorwaarde, aanwijzingen in een lus herhaald worden: Do While term Aanwijzingen End While Eerst wordt de term geëvalueerd. Als het resultaat niet gelijk is aan 0, leidt dit tot de uitvoering van de aanwijzing. Daarna wordt de berekening van de term opnieuw uitgevoerd en de hele procedure wordt herhaald tot de term de waarde 0 aanneemt.
Omdat bij de For Next lus de extreme waarde bepaald wordt moet de tellervariabele van het type integer zijn. Voorbeelden For i=1 To 10 If i>a Then a=i End If a=a-1 Next For i=1 To 10 Step 3 ' verhoog i in 3-voudige stappen If i>3 Then a=i End If a=a-1 Next Op deze plaats nogmaals de opmerking, arrays zijn steeds op nul gebaseerd. Een For Next lus moet daarom bij een array toegang eerst van 0 to 9 lopen.
5.3.6.5 If .. Else Een If aanwijzing heeft de volgende syntax: If term1 Then aanwijzingen1 ElseIf term2 Then aanwijzingen2 Else Aanwijzingen3 End If Achter de if aanwijzing volgt een rekenkundige term. Als deze term bepaald wordt als niet gelijk aan 0, dan wordt aanwijzingen1 uitgevoerd. U kunt met behulp van het Else commandowoord een alternatieve aanwijzingen2 definiëren, die dan uitgevoerd wordt, als de term als 0 berekend is.
5.3.6.6 Select Case Als afhankelijk van de waarde van een term verschillende commando’s uitgevoerd moeten worden is een Select Case aanwijzing heel geschikt: Select Case term Case constante_1 Aanwijzingen_1 Case constante_2 Aanwijzingen_2 . . Case constante_n Aanwijzingen_n Else ' Else is optioneel Aanwijzingen End Case De waarde van term wordt berekend. Daarna sprint de programmauitvoering naar constante, die overeenkomt met de waarde van de term, en laat het programma daar verder lopen.
End Sub Sub main() ' de functie func1 wordttwee keer opgeroepen func1() func1() End Sub 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 de parameternaam aan en daarna het datatype. Als u geen parameters wilt doorgeven, dan blijven de haakjes leeg.
Referenties Omdat het niet mogelijk is, arrays als parameter door te geven, kunt u uw toevlucht nemen tot arrays via referenties.
5.3.8.2 Operatoren Wiskundige operatoren + * / Mod - Optellen Aftrekken Vermenigvuldigen Delen Modulo Negatief voorteken Vergelijkende operatoren < > <= >= = <> Kleiner dan Groter dan Kleiner dan of gelijk Groter dan of gelijk Gelijk Ongelijk Bitschuifoperatoren << >> Één bit naar links schuiven Eén bit naar rechts schuiven Bitoperatoren And Or Xor Not 5.3.8.
5.4 Bibliotheken In dit gedeelte van het handboek worden alle bijgeleverde hulpfuncties beschreven, waarmee het voor de gebruiker mogelijk is om toegang te krijgen op de harware. In het begin wordt voor elke functie de syntax voor CompactC en BASIC getoond. Daarna volgt de beschrijving van de functie en de gebruikte parameters. 5.4.1 Interne functies Opdat de compiler de interne functies die in de interpreter aanwezig zijn kan herkennen, moeten deze functies in de bibliotheek “IntFunc_Lib.
5.4.3 Analoge comparator De analoge comparator maakt het mogelijk twee signalen te vergelijken. Het resultaat van dieze vergelijking wordt of als “0” of “1” teruggegeven. 5.4.3.1 Acomp Acomp Functies Voorbeeld Syntax void AComp(byte mode); Sub AComp(mode As Byte); Beschrijving De analoge comparator maakt het mogelijk twee analoge signalen te vergelijken. Het resultaat van deze vergelijking wordt of als “0” of als “1” teruggegeven (uitgang van de comparator).
5.4.3.2 AComp voorbeeld Voorbeeld: gebruik van de analoge comparator // // // // // // // // // // // // // // // // // AComp: analoge comparator Mega32: ingang (+) PB2 (PortB.2) resp. band gap reference 1,22V ingang (-) PB3 (PortB.3) Mega128: ingang (+) PE2 (PortE.2) resp. band gap reference 1,22V ingang (-) PE3 (PortE.3) noodzakelijke Library: IntFunc_Lib.cc De functie AComp geeft de waarde van de comparator terug.
Analoge ingangen ADC0 … ADC7, ADC, BG, ADC GND Als ingangen voor de ADC staan de ingangen ADC0 … ADC7 (poort A.0 tot A.7 bij de Mega32, poort F.0 tot F.7 bij de Mega128), een interne band gap (1,22V) of GND (0V) ter beschikking. ADC_BG en ADC_GND kunnen gebruikt worden voor het controleren van de ADC. Als x een digitale meetwaarde is, dan wordt de desbetreffende spanningswaarde u als volgt berekend: u = x * referentiespanning / 1024 Als de externe referentiespanning 4,096V bedraagt, bijv.
Parameters Geen 5.4.4.2 ADC_Read ADC functies Syntax word ADC_Read(void); Sub ADC_Read() As Word Beschrijving: De functie ADC_Read levert de gedigitaliseerde meetwaarde van één van de 8 ADC-poorten. Het nummer van de poort (0 …7) werd bij het oproepen van ADC Set() als parameter doorgegeven. Het resultaat ligt binnen het bereik van 0 tot 1023 – hetgeen overeenkomt met de 10-bit resolutie van de A/D –omvormer.
5.4.4. ADC_Set ADC –functies Syntax word ADC_Set(byte v_ref,byte channel); Sub ADC_Set(v_ref As Byte,channel As Byte) As Word Beschrijving De functie ADC_Set initialiseert de analoge- digitale-_omvormer. De referentiespanning en het meetkanaal worden gekozen en de A/D omvormer wordt voorbereid voor de metingen. De meetwaarde wordt daarna met ADC Read() uitgelezen. Parameter channel Poortnummer (0 … 7) van de ADC (poort A.0 tot A.7 bij de Mega32, poort F.0 tot F.
Naam Waarde ADC_VREF_BG ADC_VREF_VCC ADC_VREF_EXT 0xC0 0x40 0x00 Beschrijving 2,56V interne referentiespanning Voedingsspanning (5V) Externe referentiespanning op PAD3 Voor de positie van PAD3 zie jumper Application board M32 of M128. 5.4.4.6 ADC_StartInt ADC functies Syntax void ADC_StartInt(void); Sub ADC_StartInt() Beschrijving De meting wordt gestart, als eerst de A/D omvormer met behulp van ADC SetInt() op interrupt geïnitialiseerd is.
Bits Betekenis 20 21-27 28 29-34 35 36-41 42-44 45-49 50-57 58 Startbit (is altijd “1”) Minuut Pariteit minuut Uur Pariteit uur Dag van de maand Dag van de week Maand Jaar Pariteit datum Dit betekent, dat de ontvangst minimaal een volle minuut moet lopen, voor de tijdinformatie ter beschikking kan staan. De binnen deze minuut gedecodeerde informatie is slechts beveiligd door drie pariteitbits, daardoor leiden al twee foutief ontvangen bits tot een op deze manier niet te herkennen overdrachtfout.
RTC (Real Time Clock) De RTC wordt via een 10ms interrupt gestuurd en loopt op de achtergrond onafhankelijk van het gebruikersprogramma. Elke seconde wordt de weergave op het LC-display getoond. Het weergave -formaat is 1e regel: uur : minuut : seconde 2e regel: dag . maand . jaar LED1 knippert éénmaal per seconde. Na het starten van het programma begint de RTC met de vastgelegde tijd. De datum is op nul gezet en geeft aan dat er nog geen DCF –tijdcompensatie heeft plaatsgevonden.
5.4.5.3 DCF_PULS DCF -functies Syntax void DCF_PULS(void); Sub DCF_PULS() Beschrijving DCF Mode op 1 schakelen (“Puls zoeken”). Parameter Geen 5.4.5.4 DCF_START DCF -functies Syntax void DCF_START(void); Sub DCF_START() Beschrijving DCF_START initialiseert alle gebruikte variabelen en zet DCF Mode op 1. De DCF – tijdregistratie loopt nu automatisch. Parameter Geen 5.4.5.
5.4.6 Debug De Debug Message functies maken het mogelijk een geformatteerde tekst naar het uitvoer-venster van de IDE te zenden. Deze functies worden interrupt –aangestuurd met een buffer van maximaal 128 Byte. D.w.z. er kunnen maximaal 128 Bytes via de debug afgezet worden zonder dat de Mega32 of Mega128 module moet wachten op de voltooiing van de uitvoer. De overdracht van de aparte tekens gebeurt op de achtergrond.
Syntax void Msg_WriteHex(word val); Sub Msg_WriteHex(val As Word) Beschrijving De doorgegeven 16bit waarde wordt weergegeven in het uitvoervenster. De uitvoer wordt als hexgetal met 4 cijfers geformatteerd. Als het getal kleiner is dan vier cijfers, worden de eerste posities opgevuld met nullen. Parameter val 16bit waarde 5.4.6.
5.4.6.6 Msg_WriteWord Debug Message functies Syntax void Msg_WriteWord(word val); Sub Msg_WriteWord(val As Word) Beschrijving De parameter val wordt als getal zonder voorteken in het uitvoervenster geschreven. Parameter val 16bit unsigned integer waarde 5.4.7 EEPROM Op de C-Control Por module zijn M32: 1KB M128: 4KB EEPROM geintegreerd. Deze bibliotheeksfuncties maakt de toegang tzot de EEPROM van de integer mogelijk.
word EEPROM_ReadWord(word pos); Sub EEPROM_ReadWord(pos As Word) As Word 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 gaat daarom naar de byte 32 en hoger in de EEPROM. De waarde van pos is een byte positie in de EEPROM. Hierop moet gelet worden bij word- en zwevende komma-toegang. Parameter pos Byte positie in de EEPROM Returnwaarde De waarde van word op positie pos in de EEPROM. 5.4.7.
Beschrijving Schrijft een byte op positie pos in de EEPROM. De eerste 32 bytes zijn gereserveerd voor de C-Control Pro OS. Een waarde voor pos van 0 en groter grijpt daarom naar byte 32 en hoger in de EEPROM. Parameter pos val positie in de EEPROM de in de EEPROM te schrijven waarde 5.4.7.5 EEPROM_WriteWord EEPROM functies Syntax void EEPROM_WriteWord(word pos,word val); Sub EEPROM_WriteWord(pos As Word,val As Word) Beschrijving Schrijft een word op positie pos in de EEPROM.
5.4.8 I2C De Controller beschikt over een I2C logica, die een effectieve communicatie mogelijk maakt. De Controller werkt als I2C –Master (single master systeem). Werking als Slave is mogelijk, maar in de huidige versie niet geïmplementeerd. 5.4.8.1 I2C_Init I2C functies Voorbeeld Syntax void I2C_Init(byte I2C_BR); Sub I2C_Init(I2C_BR As Byte) Beschrijving Deze functie initialiseert de I2C –interface. Parameters I2C_BR geeft de bitrate aan.
5.4.8.3 I2C_Read_NACK I2C functies Voorbeeld Syntax byte I2C_Read_NACK(void); Sub I2C_Read_NACK() As Byte Beschrijving Deze functie ontvangt een byte en bevestigt met NACK. Daarna kan met I2C_Status de status van de interface opgevraagd worden. Returnwaarde Gelezen waarde van de I2C bus 5.4.8.4 I2C_Start I2C functies Voorbeeld Syntax void I2C_Start(void); Sub I2C_Start() Beschrijving Deze functie start de communicatie met een startsequentie.
Returnwaarde actuele I2C status 5.4.8.6 I2C_Stop I2C functies Voorbeeld Syntax void I2C_Stop(void); Sub I2C_Stop() Beschrijving Deze functie beëindigt de communicatie met een stopsequentie. Daarna kan met I2C_Status de status van de interface opgevraagd worden. Parameters Geen 5.4.8.7 I2C_Write I2C functies Voorbeeld Syntax void I2C_Write(byte data); Sub I2C_Write(data As Byte) Beschrijving Deze functie zendt een byte. Daarna kan met I2C_Status de status van de interface opgevraagd worden.
0x20 0x28 0x30 0x38 Er is SLA+W verzonden, er werd NACK ontvangen Er is een data byte verzonden, er werd ACK ontvangen Er is een data byte verzonden, er werd NACK ontvangen Conflict in SLA+W of data bytes Tabel: Status Codes Master Receiver Mode Status Code Beschrijving 0x08 0x10 0x38 0x40 0x48 0x50 0x58 125 Er is een START sequentie verzonden Er is een “repeated” START sequentie verzonden Conflict in SLA+R of data bytes Er is SLA+R verzonden, er werd ACK ontvangen Er is een SLA+R verzonden, er werd NAC
5.4.8.
INT_TIM1OVF INT_TIM0COMP INT_TIM0OVF INT_ANA_COMP INT_ADC INT_TIM2COMP INT_TIM2OVF INT_TIM3CAPT INT_TIM3CMPA INT_TIM3CMPB INT_TIM3CMPC INT_TIM3OVF Timer1 Overflow Timer0 Compare Timer0 Overflow Analoge comparator ADC Timer2 Compare Timer2 Overflow Timer3 Capture (alleen Mega128) Timer3 CompareA (alleen Mega128) Timer3 CompareB (alleen Mega128) Timer3 CompareC (alleen Mega128) Timer3 Overflow (alleen Mega128) De desbetreffende interrupt moet in een Interrupt Service Routine (ISR) de overeenkomende aanwijzi
5.4.9.2 Ext_IntDisable Interrupt functies Syntax void Ext_Int0Disable(byte IRQ); Sub Ext_Int0Disable(IRQ As Byte) Beschrijving De externe interrupt IRQ wordt geblokkeerd. Parameter Geen 5.4.9.3 Irq_GetCount Interrupt functies Voorbeeld Syntax byte Irq_GetCount(void); Sub Irq_GetCount() As Byte 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.
Parameter irqnr specificeert het type van de interrupt (zie tabel) vect is de naam van de op te roepen interrupt functie Opmerking De zwevende komma- datatype mag ongepast verschijnen maar hij wordt intern als 4 byte waarde behandeld. Een functie- aanwijzer moet sinds de Mega128 ondersteuning meer dan 18 bit lang zijn.
5.4.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.4.
Beschrijving Deze hulpfunctie levert het teken terug dat overeenkomt met het eerste opduiken van een “1” in het bitveld van de invoerparameter. Parameter keys bitveld dat door Key Scan() teruggeleverd wordt. Returnwaarde ASCII waarde van de herkende toets -1 als er geen toets ingedrukt is 5.4.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.
5.4.11.3 LCD_CursorOn LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_CursorOn(void); Sub LCD_CursorOn() Beschrijving Schakelt de cursor van het display in. Parameter Geen 5.4.11.4 LCD_CursorPos LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_CursorPos(byte pos); Sub LCD_CursorPos(pos As Byte) Beschrijving Plaatst de cursor in de positie pos.
5.4.11.5 LCD_Init LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_Init(void); Sub LCD_Init() Beschrijving “High Level” initialisering van het LC- display. Roept als eerste LCD InitDisplay() op. Parameter Geen 5.4.11.6 LCD_SubInit LCD functies Syntax void LCD_SubInit(void); Sub LCD_SubInit() Beschrijving Initialiseert de poort s voor de displaybesturing op assembler –niveau. Moet als eerste routine voor alle andere LCD uitvoerfuncties opgeroepen worden.
Beschrijving De functie wacht tot de display controller niet meer “busy” is. Als u eerst naar de controller gaat, wordt de data –opbouw op het display gestoord. Parameter Geen 5.4.11.8 LCD_WriteChar LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_WriteChar(char c); Sub LCD_WriteChar(c As Char) Beschrijving Schrijft een teken bij de cursorpositie op het LC- display. Parameter c ASCII waarde van het teken 5.4.11.9 LCD_WriteCTRRegister LCD functies (bibliotheek ”LCD_Lib.
Beschrijving Stuurt een databyte naar de display controller. Parameter x databyte 5.4.11.11 LCD_WriteRegister LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_WriteRegister(byte y,byte x); Sub LCD_WriteRegister(y As Byte,x As Byte) Beschrijving LCD_WriteRegister splitst databyte y in twee nibbles en stuurt ze naar de display controller. Parameter y x databyte commandonibble 5.4.11.12 LCD_WriteText LCD functies (bibliotheek ”LCD_Lib.
5.4.12 Poort De Atmel Mega 32 heeft 4 in - /uitgangspoorten van elk 8 bit. De Atmel Mega 128 heeft 6 in /uitgangspoorten van elk 8 bit en 1 in-/ uitgangspoort van 5 bit. Elke bit van een afzonderlijke poort kan als ingang of als uitgang geconfigureerd worden. Omdat echter het aantal pinnen van de Mega 32 Risc CPU beperkt is, zijn extra functies aan aparte poorten toegewezen. U vindt een tabel van de pintoewijzing in de documentatie van de M32 en M128..
5.4.12.2 Port _DataDirBit Poortfuncties Syntax void Port_DataDirBit(byte portbit,byte val); Sub Port_DataDirBit(portbit As Byte,val As Byte) 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.
5.4.12.3 Port _Read Poortfuncties Syntax byte Port_Read(byte port); Sub Port_Read(port As Byte) As Byte Beschrijving Leest een byte van een specifieke poort . Alleen de pinnen van de poort die geschakeld zijn op ingang, leveren een geldige waarde op de desbetreffende bitpositie in de gelezen byte terug. (Voor de afbeelding tussen poortbits en de pinnen van de Atmel Mega chips zie pintoewijzing van M32 en M128).
Parameter portbit bitnummer van de poort (zie tabel) Returnwaarde Bitwaarde van de poort (0 of 1) Poortbits tabel Definitie Poortbit PortA.0 … PortA.7 PortB.0 … PortB.7 PortC.0 … PortC.7 PortD.0 … PortD.7 Vanaf hier alleen Mega128 PortE.0 … PortE.7 PortF.0 … PortF.7 PortG.0 … PortG.4 0 … 7 8 … 15 16 … 23 24 … 31 32 … 39 40 … 47 48 … 52 5.4.12.
Parameters port poortnummer (zie tabel) val uitvoerbyte Tabel poortnummers Definitie PortA PortB PortC PortD PortE (Mega128) PortF (Mega128) PortG (Mega128) Waarde 0 1 2 3 4 5 6 Port _WriteBit 5.4.12.6 Poortfuncties Syntax void Port_WriteBit(byte portbit,byte val); Sub Port_WriteBit(portbit As Byte,val As Byte) Beschrijving De functie Port_WriteBit zet de waarde van een pin die op uitgang geschakeld is.
PortD.0 … PortD.7 Vanaf hier alleen Mega128 PortE.0 … PortE.7 PortF.0 … PortF.7 PortG.0 … PortG.4 5.4.12.
Beschrijving De arcus cosinus wordt berekend. De hoek wordt in radiant aangegeven. In- en uitvoerwaarden liggen tussen –pi en +pi. Parameter val Waarde van welke de functie berekend wordt Returnwaarde Arcus cosinus van de invoerwaarde 5.4.13.2 asin Wiskundige functies Syntax float asin(float val); Sub asin(val As Single) As Single Beschrijving De arcus sinus wordt berekend. De hoek wordt in radiant aangegeven. In- en uitvoerwaarden liggen tussen –pi en +pi.
5.4.13.4 ceil Wiskundige functies Syntax float ceil(float val); Sub ceil(val As Single) As Single Beschrijving Het eerst volgende grotere integergetal met betrekking tot het zwevende-kommagetal val wordt berekend. De hoek wordt in radiant aangegeven. In- en uitvoerwaarden liggen tussen –pi en +pi. Parameter val Waarde van welke de integer berekend wordt Returnwaarde Het resultaat van de functie 5.4.13.
Beschrijving De functie e ^ val wordt berekend. Parameter val Exponent Returnwaarde Resultaat van de functie 5.4.13.7 fabs Wiskundige functies Syntax float fabs(float val); Sub fabs(val As Single) As Single Beschrijving De absolute waarde van het zwevende kommagetal wordt berekend. Parameter val invoerwaarde Returnwaarde Resultaat van de functie 5.4.13.
5.4.13.9 floor Wiskundige functies Syntax float ldexp(float val,int expn); Sub ldexp(val As Single,expn As Integer) As Single Beschrijving De functie val *2^ expn wordt berekend Parameter val expn Multiplicator Exponent Returnwaarde Resultaat van de functie 5.4.13.10 In Wiskundige functies Syntax float ln(float val); Sub ln(val As Single) As Single Beschrijving De natuurlijke logaritme wordt berekend Parameter val Invoerwaarde Returnwaarde Resultaat van de functie 5.4.13.
Beschrijving De logaritme voor basis 10 wordt berekend Parameter val Invoerwaarde Returnwaarde Resultaat van de functie 5.4.13.12 pow Wiskundige functies Syntax float pow(float x,float y); Sub pow(x As Single,y As Single) As Single Beschrijving Machtfunctie. De functie x ^ y wordt berekend Parameter x y Basis Exponent Returnwaarde Resultaat van de functie 5.4.13.13 sin Wiskundige functies Syntax float sin(float val); Sub sin(val As Single) As Single Beschrijving De sinus wordt berekend.
5.4.13.14 sqrt Wiskundige functies Syntax float sqrt(float val); Sub sqrt(val As Single) As Single Beschrijving De vierkantswortel wordt berekend. Parameter val Waarde qaarvan de vierkantswortel wordt berekend 5.4.13.15 tan Wiskundige functies Syntax float tan(float val); Sub tan(val As Single) As Single Beschrijving De tangens wordt berekend. De hoek wordt in radiant aangegeven. In- en uitvoerwaarden liggen tussen –pi en +pi.
void Serial_Disable(byte serport); Sub Serial_Disable(serport As Byte) Beschrijving De seriële interface wordt uitgeschakeld en de bijhorende poorten kunnen anders toegepast worden. Parameter serport interfacenummer (0 = 1e seriële, 1 = 2e seriële enz.) 5.4.14.2 Serial_Init Seriële functies Voorbeeld Syntax void Serial_Init(byte serport,byte par,byte divider); Sub Serial_Init(serport As Byte,par As Byte,divider As Byte) Beschrijving De seriële interface wordt geïnitialiseerd.
Tabel divider definities Divider Definitie Baudrate 383 191 95 63 47 31 23 15 11 7 3 SR_BD2400 SR_BD4800 SR_BD9600 SR_BD14400 SR_BD19200 SR_BD28800 SR_BD38400 SR_BD57600 SR_BD76800 SR_BD115200 SR_BD230400 2400bps 4800bps 9600bps 14400bps 19200bps 28800bps 38400bps 57600bps 76800bps 115200bps 230400bps 5.4.14.
Tabel par definities: Definitie Functie SR_5BIT SR_6BIT SR_7BIT SR_8BIT 5 bit tekenlengte 6 bit tekenlengte 7 bit tekenlengte 8 bit tekenlengte SR_1STOP SR_2STOP 1 stop bit 2 stop bit SR_NO_PAR SR_EVEN_PAR SR_ODD_PAR no parity even parity odd parity Tabel divider definities Divider Definitie Baudrate 383 191 95 63 47 31 23 15 11 7 3 SR_BD2400 SR_BD4800 SR_BD9600 SR_BD14400 SR_BD19200 SR_BD28800 SR_BD38400 SR_BD57600 SR_BD76800 SR_BD115200 SR_BD230400 2400bps 4800bps 9600bps 14400bps 19200bps 28
Returnwaarde Plaats in de buffer van de seriële interface in bytes 5.4.14.5 Serial_Read Seriële functies Syntax byte Serial_Read(byte serport); Sub Serial_Read(serport As Byte) As Byte 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. Parameter e e serport Interfacenummer (0 = 1 seriële, 1 = 2 seriële enz.) Returnwaarde Ontvangen byte uit de seriële interface 5.4.14.
void Serial_Write(byte val); Sub Serial_Write(val As Byte) Beschrijving Een byte wordt naar de seriële interface gestuurd. Parameter e e serport Interfacenummer (0 = 1 seriële, 1 = 2 seriële enz.) val de uit te voeren byte waarde 5.4.14.8 Serial_WriteText Seriële functies Syntax void Serial_WriteText(byte serport,char text[]); Sub Serial_WriteText(serport As Byte,ByRef Text As Char) Beschrijving Alle tekens van de char array tot aan de laatste nul worden doorgegeven naar de seriële interface.
5.4.1410 Serial voorbeeld (IRQ) // 35 byte zend + ontvangstbuffer + 6 byte interne FIFO beheer byte buffer[41]; // Array gedeclareerd // Stringuitvoer op de seriële interface void main(void) { int i; char str[10]; str="test"; i=0; // Initialiseer interface met 19200baud, 8 bit, 1 stopbit, geen pariteit // 20 byte ontvangstbuffer - 15 byte zendbuffer Serial_Init_IRQ(0,buffer,20,15,SR_8BIT|SR_1STOP|SR_NO_PAR, SR_BD19200); while(str[i]) Serial_Write(0,str[i++]); // Geef de string aan } 5.4.
Er bestaat geen expliciet “String”-datatype. Een string is gebaseerd op een character array. U dient de grootte van de array zo kiezen dat alle tekens van de string in de character array passen. Bovendien is er ruimte nodig voor een eindteken (decimale nul), om het einde van de tekenketen (char array) aan te geven. 5.4.16.
5.4.16.3 String functies Str_Fill (bibliotheek “String_Lib.cc” ) Syntax void Str_Fill(char dest[],char c,word len); Sub Str_Fill(ByRef dest As Char,c As Char,len As Word) Beschrijving De string dest wordt opgevuld met het teken c. 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.4.16.4 Str_Isalnum String functies (bibliotheek “String_Lib.
Parameters c het te controleren teken Returnwaarde 1 0 als het teken alfabetisch is (zowel hoofd – als kleine letters) overig 5.4.16.6 Str_Len String functies Syntax word Str_Len(char str[]); Sub Str_Len(ByRef str As Char) As Word Beschrijving De lengte van de tekenketen (van de character array) wordt teruggegeven. Parameters str cursor op string Returnwaarde Aantal tekens in string (zonder de nul aan het eind). 5.4.16.7 Str_Substr String functies (bibliotheek “String_Lib.
5.4.16.8 Str_WriteFloat String functies Syntax void Str_WriteFloat(float n, byte decimal, char text[], word offset); Sub Str_WriteFloat(n As Single,decimal As Byte,ByRef text As Char,offset As Word) Beschrijving Het float getal n wordt in een ASCII String met decimal decimale posities geconverteerd. Het resultaat wordt in de string text met een opvulling van offset opgeslagen.
5.4.16.10 Str_WriteWord String functies Syntax void Str_WriteWord(word n,byte base,char text[],word offset,byte minwidth); Sub Str_WriteWord(n As Word,base As Byte,ByRef text As Char,offset As Word, minwidth As Byte) Beschrijving Het woord n wordt geconverteerd naar een ASCII string. Het resultaat wordt opgeslagen in de string text met een opvulling van offset. U kunt voor de uitvoer een willekeurige basis aangeven.
7 – 9 µsec. Bij enkele bytecode commando’s duurt het echter langer, bijv. Floating Point operaties. Ook interne interpreter –functies gelden als een cyclus. Omdat b.v. Serial Read wacht tot een teken van de seriële interface aankomt, kan in uitzonderingsgevallen een cyclus zeer lang duren. Een thread krijgt voor zijn locale variabelen zoveel plaats als hem in de threadopties van het project toegewezen is. Een uitzondering is thread “0” (het hoofdprogramma).
5.4.17.1 Thread_Cycles Thread functies Syntax void Thread_Cycles(byte thread,word cycles); Sub Thread_Cycles(thread As Byte,cycles As Word) Beschrijving Zet het aantal bytecode instructies tot aan de volgende thread -wisseling op cycles. Als een thread opnieuw gestart wordt, krijgt hij steeds het aantal cycli toegewezen die in de projectopties gedefinieerd zijn. Het heeft dus alleen maar zin om Thread_Cycles() op te roepen nadat een thread gestart is.
word Thread_Info(byte info); Sub Thread_Info(info As Byte) As Word Beschreibung Levert informatie over de thread, die de functie Thread_Info oproept. De info parameter bepaald welke informatie teruggegeven wordt, Parameter info waarden: TI_THREADNUM TI_STACKSIZE TI_CYCLES Nummer van de op te roepen thread Gedefinieerde stackgrootte Aantal van de uit te voeren cycli voor een threadwisseling Returnwaarde Aangevraagde parameter 5.4.17.
Als er vergeten wordt het “Lock” (de vergrendeling) weer uit te schakelen, vindt er geen multithreading meer plaats. Parameter lock bij 1 wordt de thread -wisseling verhinderd, bij 0 weer toegelaten. 5.4.17.6 Thread_MemFree Thread functies Syntax word Thread_MemFree(void); Sub Thread_MemFree() As Word Beschrijving Geeft het vrije geheugen aan die voor de thread nog beschikbaar is. Parameter Geen Returnwaarde Vrij geheugen in bytes 5.4.17.
5.4.17.8 Thread_Signal Thread functies Syntax void Thread_Signal(byte signal); Sub Thread_Signal(signal As Byte) Beschrijving Als een thread d.m.v. Thread Wait() op “wachtend” is gezet, dan kan de toestand met behulp van Thread_Signal weer in “inactief” veranderd worden. De parameter signal moet dezelfde waarde hebben die bij Thread Wait() gebruikt is. Parameter signal waarde van het signaal 5.4.17.
Beschrijving De thread krijgt de status “wachtend”. D.m.v. Thread Resume() of Thread Signal() kan de thread weer in een inactieve toestand terechtkomen. Parameter signal waarde van het signaal 5.4.17.
5.4.17.12 Thread voorbeeld 2 // multithread2: Multithreading met Thread_Delay // benodigde Library: IntFunc_Lib.cc void thread1(void) { while(true) { Msg_WriteText(str2); Thread_Delay(200); } // "Thread2" wordt gegeven. } // Daarna “slaapt”de thread // voor 200ms.
pulse(n); // count=Timer T0GetCNT(); n pulsen genereren Bij de Mega128 kan vanwege de hardware Timer_0 niet als teller gebruikt worden. Timer1(16 Bit) / / Voorbeeld: pulstelling met CNT1 Timer T1CNT(); pulse(n); / / n pulsen genereren count=Timer T1GetCNT(); 5.4.18.
5.4.18.3 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.4.18.
void main(void) { byte n; Irq_SetVect(INT_TIM1CAPT,Timwer1_ISR); / / Interrupt Service routine definiëren Timer_T0PWM(100,ps_64); / / pulsgenerator starten / / De meting begint hier / / Output timer0 OC0(Port B.3) verbinden met ICP (Input Capture Pin) (Port D.
5.4.18.7 Timer_Disable Timer functies Syntax void Timer_Disable(byte timer); Sub Timer_Disable(timer As Byte) Beschrijving Deze functie schakelt de geselecteerde timer uit. Timerfuncties bezetten I/O poorten. Als een timer niet meer nodig is en de poorten moeten als normale I/Os gebruikt worden, dan moet de timerfunctie uitgeschakeld worden. Parameters 0 = Timer_0 1 = Timer_1 3 = Timer_3 (alleen Mega128) 5.4.18.
Beschrijving Deze functie initialiseert de Timer0 met de aangegeven voordeler en periodeduur, zie tabel. Het uitgangssignaal verschijnt op Port B.3 (PIN4) = Mega32, PortB.4 (X1_4) = Mega128.. Het produceren van de frequentie wordt automatisch gestart. De Mega128 beschikt over uitgebreide voordeler- definities, zie tabel.
5.4.18.11 TimerT0PW Timer functies Syntax void Timer_T0PW(byte PW); Sub Timer_T0PW(PW As Byte) Beschrijving Deze functie stelt een nieuwe pulsbreedte voor Timer0 in, zonder de voordeler te veranderen. Parameters PW pulsbreedte 5.4.18.12 TimerT0PWM Timer functies Syntax void Timer_T0PWM(byte PW,byte PS); Sub Timer_T0PWM(PW As Byte,PS As Byte) Beschrijving Deze functie initialiseert deTimer0 met de aangegeven voordeler en pulsbreedte, zie tabel. Het uitgangssignaal verschijnt bij de Mega32:op Port B.
Mega128 Voordeler (prescaler) Tijdbasis (duur van een tick) PS0_1 (1) PS0_8 (2) PS0_32(3) PS0_64 (3) PS0_128 (5) PS0_256 (6) PS0_1024 (5) 5.4.18.13 135,6 ns 542,5 ns 2,17 µs 4,34 µs 8,68 µs 17,36 µs 69,44 µs Timer_T0Start Timer functies Syntax void Timer_T0Start(byte prescaler); Sub Timer_T0Start(prescaler As Byte) Beschrijving Het produceren van de frequentie wordt met de bovenstaande instelling gestart. De voordeler moet nieuw aangegeven worden. Parameters Prescaler voordeler (tabel prescaler) 5.
Syntax void Timer_T0Time(byte Time,byte PS); Sub Timer_T0Time(Time As Byte,PS As Byte) Beschrijving Deze functie initialiseert de Timer0 met de aangegeven voordeler en de waarde (8Bit) voor de tijd, zie tabel. Als deze waarde bereikt is, dan wordt de Timer0 Interrupt (INT_TIM0COMP) geactiveerd. De Mega128 beschikt over uitgebreide voordeler- definities, zie tabel.
5.4.18.17 Timer_T1CNT_Int Timer functies Syntax void Timer_T1CNT_Int(word limit); Sub Timer_T1CNT_Int(limit As Word) Beschrijving Deze functie initialiseert de Counter1. De Counter1 wordt bij een positieve signaalflank op de ingang bij de Mega32:op Port B.1 (PIN2) Mega128: PortD.6 (X2_15) opgehoogd. Als de limiet bereikt is, wordt een interrupt geactiveerd. De desbetreffende interrupt_Service_Routine moet vooraf gedefinieerd zijn. Parameters limit 5.4.18.
5.4.18.19 Timer_T1FRQX Timer functies Syntax void Timer_T1FRQX(word period,word skew,byte PS); Sub Timer_T1FRQX(period As Word,skew As Word,PS As Byte) Beschrijving Deze functie initialiseert de Timer1 met de aangegeven voordeler periodeduur en faseverschuiving van de beide uitgangssignalen, zie tabel. De uitgangssignalen verschijnen op Mega 32: PortD.4 (PIN18) en PortD.5(PIN19). Mega128: PortB.5(X1_3) en PortB.6 (X1_2). Het produceren van de frequentie wordt automatisch gestart.
Parameter Mode 0 pulsbreedte -meting 1 periodemeting Returnwaarde: Resultaat van de meting Om het meetresultaat te berekenen wordt de geretourneerde 16bit waarde met de waarde uit de tabel prescaler tabel gemultipliceert, die bij het oproepen van Timer_T1PM aangegeven werd (zie ook voorbeeld). 5.4.18.
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.4.18.24 Timer_T1PWB Timer functies Syntax void Timer_T1PWB(word PW1); Sub Timer_T1PWB(PW1 As Word) Beschrijving: Deze functie stelt een nieuwe pulsbreedte (kanaal_B) in voor Timer1, zonder de voordeler te veranderen. Parameter PW1 pulsbreedte 5.4.18.
Tabel prescaler: Voordeler (prescaler) Tijdbasis (duur van een tick) PS_1 (1) PS_8 (2) PS_64 (3) PS_256 (4) PS_1024 (5) 5.4.18.26 67,8 ns 542,5 ns 4,34 µs 17,36 µs 69,44 µs Timer_T1PWMX Timer functies Syntax void Timer_T1PWMX(word period,word PW0,word PW1,byte PS); Sub Timer_T1PWMX(period As Word,PW0 As Word,PW1 As Word,PS As Byte) Beschrijving: Deze functie initialiseert Timer1 met de aangegeven voordeler, pulsbreedte voor kanaal A en B en periodeduur, zie tabel.
5.4.18.28 Timer_T1Start Timer functies Syntax void Timer_T1Start(byte prescaler); Sub Timer_T1Start(prescaler As Byte) Beschrijving Het produceren van frequenties wordt met bovenstaande instelling gestart. De voordeler moet nieuw aangegeven worden. Parameters prescaler voordeler (tabel prescaler) 5.4.18.29 Timer_T1Stop Timer functies Syntax void Timer_T1Stop(void); Sub Timer_T1Stop() Beschrijving Het produceren van frequenties wordt gestopt.
Parameters Time tijdswaarde waarbij de interrupt getriggerd wordt PS voordeler Voordeler (prescaler) Tijdbasis (duur van een tick) PS_1 (1) PS_8 (2) PS_64 (3) PS_256 (4) PS_1024 (5) 5.4.18.31 67,8 ns 542,5 ns 4,34 µs 17,36 µs 69,44 µs Timer_T3CNT Timer functies Syntax void Timer_T3CNT(void); Sub Timer_T3CNT() Beschrijving Deze functie initialiseert de Counter3. De Counter3 wordt bij een positieve signaalflank op de ingang PortE.6 (X2_10) opgehoogd. Parameters Geen 5.4.18.
5.4.18.33 Timer_T3FRQ Timer functies Syntax void Timer_T3FRQ(word period,byte PS); Sub Timer_T3FRQ(period As Word,PS As Byte) Beschrijving Deze functie initialiseert de Timer3 met de aangegeven voordeler en periodeduur, zie tabel. Het uitgangssignaal verschijnt PortE.3 (X1_13) Het produceren van de frequentie wordt automatisch gestart. Parameters period periodeduur 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) 5.4.
5.4.18.35 Timer_T3GetCNT Timer functies Syntax word Timer_T3GetCNT(void); Sub Timer_T3GetCNT() As Word Beschrijving De waarde van Counter3 wordt gelezen. Als er een overflow plaats vindt, dan wordt de waarde 0xFFFF doorgegeven. Returnwaarde De gemeten waarde van de teller 5.4.18.
Beschrijving: Deze functie stelt een nieuwe pulsbreedte (kanaal_A) in voor Timer3, zonder de voordeler te veranderen. Parameter PW0 pulsbreedte 5.4.18.38 Timer_T3PM Timer functies Syntax void Timer_T3PM(byte PS); void Timer_T3PM(PS As Byte) Beschrijving Deze functie initialiseert Timer_3 voor de meting en stelt de voordeler in. Parameter 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) 5.4.18.
5.4.18.40 Timer_T3PWM Timer functies Syntax void Timer_T3PWM(word period,word PW0,byte PS); Sub Timer_T3PWM(period As Word,PW0 As Word,PS As Byte) Beschrijving: Deze functie initialiseert Timer3 met de aangegeven voordeler, pulsbreedte en periodeduur, Het uitgangssignaal verschijnt PortE.3 (X1_13. Parameters period periodeduur PW0 pulsbreedte voordeler PS Tabel prescaler: Voordeler (prescaler) Tijdbasis (duur van een tick) PS_1 (1) PS_8 (2) PS_64 (3) PS_256 (4) PS_1024 (5) 5.4.18.
5.4.18.42 Timer functies Timer_T3PWMY Syntax void Timer_T3PWMY(word period,word PW0,word PW1,word PW2,byte PS); Sub Timer_T3PWMY(period As Word,PW0 As Word,PW1 As Word,PW2 As Word,PS As Byte) Beschrijving: Deze functie initialiseert Timer3 met de aangegeven voordeler, pulsbreedte voor kanaal A, B en C en periodeduur, zie tabel. De uitgangssignalen verschijnen op PortE.3 (X1_13), PortE.4 (X1_12) en PortE.5 (X_11).
Beschrijving Het produceren van frequenties wordt gestopt. Het uitgangssignaal kan 0 of 1 zijn, afhankelijk van de laatste toestand. Alleen de puls voor de timer wordt gestopt. De overige instellingen blijven behouden. Parameters Geen 5.4.18.45 Timer_T3Time Timer functies Syntax void Timer_T3Time(word Time,byte PS); Sub Timer_T3Time(Time As Word,PS As Byte) Beschrijving Deze functie initialiseert Timer3 met de aangegeven voordeler en de waarde (16Bit) voor de tijd, zie tabel.
Parameter Geen Returnwaarde Tijdverschil tussen twee oproepen Voorbeeld: void main(void) { word time; Timer_TickCount(); AbsDelay(500); // 500 ms wachten time=Timer_TickCount(); // de waarde van time moet 50 zijn } 187
Hoofdstuk 188
6 FAQ (vaak gestelde vragen) Problemen 1. Er bestaat geen USB –verbinding met het Application Board. • • • • • • Is de FTDI USB driver op de PC geladen? Of verschijnt er misschien bij het insteken van de USB –stekker een “onbekend apparaat” in de Hardware Manager? Is in Opties->IDE->Interfaces de juiste communicatiepoort ingesteld? Wordt er een Windowsversie van voor Windows 98 SE (“Second Edition”) gebruikt? De USB drivers van Microsoft functioneren pas vanaf Win98SE betrouwbaar met USB apparatuur.
7. Waar wordt bepaald of het nieuwe project een BASIC of een C project is? Er wordt geen verschil gemaakt in het type project. De brontekst- bestanden in een project bepalen welke programmeertaal gebruikt wordt. Bestanden met de extentie *.cc lopen in een nieuwe context, bestanden met de extentie *.cbas worden met BASIC vertaald. Eveneen kan een project ook gemengd zijn met C en BASIC. 8. Ik gebruik een andere LC-display dan de meegeleverde maar met dezelfde controller.