Inhoudsopgave 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 8 Historie Hoofdstuk 2 Installatie 1 Software 2 Application Board Hoofdstuk 3 Hardware 1 Firmware 2 Mega 32...
Pagina 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...
Belangrijke aanwijzingen Dit hoofdstuk behandelt belangrijke informatie voor de garantie en support en gebruik van de C-control.Por hardware en software. 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.
Garantie en aansprakelijkheid Conrad Electronic biedt voor de C-Control Pro unit een garantieperiode van 24 maanden gerekend vanaf de datum van aankoop. Binnen deze periode worden defecte units gratis omgeruild, als het defect aantoonbaar terug te voeren is op een productiefout of aan transportschade.
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.
• 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 •...
Pagina 10
• 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.2005 • Initiaalversie...
Installatie In dit hoofdstuk wordt de installatie van de hard- en software beschreven. 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. De in- en uitbouw van een module mag uitsluitend met uitgeschakelde voedingsspanning (spanningsvrij) uitgevoerd worden, anders kunnen vernielingen op het Application board of de module ontstaan.
Pagina 13
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.
Pagina 14
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 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.
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.
Pagina 18
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.
Pagina 19
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.
Pagina 20
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.
Pagina 21
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 0 ° C … 70 ° C Bereik van de toelaatbare relatieve luchtvochtigheid 20% …60% van de omgeving...
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.
Pagina 23
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 …...
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.
Pagina 25
Voedingsspanning Bereik van de toelaatbare voedingsspanning 8V … 24V Stroomverbruik zonder externe lasten ca. 125mA Max. toelaatbare permanente stroom uit 200mA gestabiliseerde 5V-spanning 3.2.3 Pintoewijzing PortA t/m PortD worden voor directe pin-functies (bijv. Port WriteBit) van 0 tot 31 geteld, zie “Poortbit”.
Pagina 27
Jumperposities bij uitlevering 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.
Pagina 28
3.2.5 Schakelschema’s De schakelschema s zijn ook als pdf-bestand op de installatie-CD. 3.2.5.1 Mega 32 module...
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. Hier volgt een korte samenstelling van de hardware resources: • 133 Powerful Instructions – Most Single Clock Cycle Execution •...
Pagina 34
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...
Pagina 35
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...
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 M128 te bestude- ren, 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 4.5V … 5,5V Stroomverbruik van de module zonder externe lasten ca. 20mA Puls Pulsfrequentie (kwarts –oscillator) 14,7456MHz Mechanische deel Buitenafmetingen zonder pinnen ca. 40 mm x 40 mm x 8 mm Gewicht ca. 90g Pinraster 2,54mm Aantal pinnen (2 rijen)
Pagina 38
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.
Pagina 39
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.
Pagina 40
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 Non- Return-Zero-signalen volgens de RS232 standaard (positieve spanning voor lowbits, nega- tieve spanning voor highbits).
Pagina 41
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. 160 mm x 100 mm Pinraster bedradingveld 2,54 mm Omgevingscondities Bereik van de toelaatbare omgevingstemperatuur...
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.
Pagina 44
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 is bedoeld voor het omschakelen van de voedingsspanning (netvoeding of USB). Het application board moet gevoed worden via netvoeding en spanningsregelaar (toestand bij uitlevering).
Het C-Control Pro gebruikersoppervlak (IDE) bestaat uit de volgende hoofdelementen: Sidebar voor projectbestanden Meerdere bestanden kunnen hier tot een project geplaatst worden. Editor venster 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.
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.
Pagina 53
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 Shift- F11) 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 - Het projectbestand wordt naar boven verschoven (ook met Ctrl – pijl omhoog) • Nach unten - Het projectbestand wordt naar beneden verschoven (ook met Ctrl – pijl omlaag) • Umbenennen - De naam van het bestand wordt veranderd •...
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. “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.
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”...
C-Control hardware 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 wacht- woordfunctie. 4.5.1 Programma starten 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.
Uitvoer 4.3.2 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.
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.
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”.
Het is niet mogelijk de inhoud van arrays in de debugger te bekijken. Onder bepaalde omstandigheden wordt in plaats van een waarde in een lijst een foutmelding getoond: Geen debug code Er is geen debug code gegenereerd Foutieve syntax Bij de tekstinvoer zijn ongeldige tekens voor de variabele ingevoerd Functie onbekend De functienaam is onbekend...
Pagina 65
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.
4.5.1 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 –...
• 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.
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 –...
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”...
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.
Pagina 71
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.
Compiler 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 aanwezig. Dit RAM wordt door de interpreter automatisch herkent en gebruikt voor het uit te voeren programma. In plaats van ca.
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 gedefinieerd is door #define symbol. Als er een optionele #else aanwijzing aangegeven is, dan wordt de brontekst na #else bewerkt wanneer het...
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. Volgende commando’s zijn toegestaan: #pragma Error “xyz…”...
Pagina 76
Totale lengte: bytes Funktie main() count Totale lengte: bytes 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. CompactC Voor het programmeren van de C-Control Pro Mega 32 of Mega 128 kan de programmeer- taal CompactC toegepast worden.
Pagina 77
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”).
Pagina 78
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 •...
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 Waardebereik Bit char -128 … +127 unsigned char 0 …...
Pagina 80
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: i, j; float xyz;...
Pagina 81
variabele meervoudig in het geheugen vast. Bij de voorbeelddefinitie: x[10 wordt voor de variabele x de 10-voudige geheugenplaats vastgelegd. De eerste geheugen- plaats kan aangesproken worden met de tweede met ], de derde met ], …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. Een voorbeeld: a,b; void func1 (void) a,x,y; // globale b is toegankelijk // globale a is niet toegankelijk, deze is door locale a afgedekt // locale x,y zijn toegankelijk // u is niet toegankelijk omdat deze lokaal hoort tot functie main void main...
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: 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.
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 tussen geschoven. Operator Verklaring Voorbeeld Resultaat << Één bit naar links schuiven 1 << 2 3 << 3 >>...
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 Resultaat && Logisch En 1 && 1 5 && 0 Logisch Of Logisch Niet 5.2.6 Controlestructuren...
Pagina 86
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.
Pagina 87
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 worden aanwijzing2 en aanwijzing3 uitgevoerd, en de lus wordt herhaald. Als de term een waarde heeft van 0, wordt de lus afgebroken.
Pagina 88
a=0, label0: a++; if(a<10) goto label0; 5.2.6.5 if .. else Een if aanwijzing heeft de volgende syntax: 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 berekend is.
Pagina 89
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.
Pagina 90
case a++; // wordt ook uitgevoerd bij een waarde van a==1 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.
Pagina 91
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.
Pagina 92
functie aangegeven. Als u geen waarde wilt laten teruglopen, dan gebruikt u void als datatype. func1 (int 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.
Pagina 93
& && 5.2.8.2 Operatoren Wiskundige operatoren 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 >>...
Pagina 94
5.2.8.3 Gereserveerde woorden De volgende woorden zijn gereserveerd en kunnen niet als naam voor kenmerken gebruikt worden: break byte case char continue default else false float goto return signed static switch true unsigned void while word...
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.
Pagina 96
Eenvoudige aanwijzing: 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. ' 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.
Pagina 97
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.
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.
Pagina 99
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.
Pagina 100
str1="Hallo wereld!" Er kan geen String aan grotere Char array toegewezen worden. Echter zijn er trucs voor gevorderden: As Char str_array(3,40) Single_str(40) As Char Single_str="A String" kopieert Single_str in de Str_StrCopy(str_array,Single_str,40); tweede String Dit functioneert omdat met een afstand van 40 tekens achter de string in str_array de ruimte voor de tweede string ligt.
Pagina 101
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.
Pagina 102
5.3.5.2 Bit –operatoren Bit –operatoren zijn alleen toegestaan voor integer –datatypes. Operator Verklaring Voorbeeld Resultaat &H0f And 3 &Hf0 And &H0f 1 Or 3 &Hf0 Or &H0f &Hff exclusieve of &Hff Xor &H0f &Hf0 &Hf0 Xor &H0f &Hff Bit -invertering Not &Hff Not &Hf0 &H0f...
Pagina 103
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: aanwijzing Loop While term De aanwijzing wordt uitgevoerd.
Pagina 104
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.
Pagina 105
Omdat bij de For Next lus de extreme waarde bepaald wordt moet de tellervariabele van het type integer zijn. Voorbeelden If i>a Then End If a=a-1 Next Step ' verhoog i in 3-voudige stappen Then i>3 End If a=a-1 Next Op deze plaats nogmaals de opmerking, arrays zijn steeds op nul gebaseerd.
Pagina 106
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 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.
Pagina 108
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.
Referenties Omdat het niet mogelijk is, arrays als parameter door te geven, kunt u uw toevlucht nemen tot arrays via referenties. Daarvoor schrijft u in de parameterdeclaratie van een functie “ByRef” voor de parameternaam: Sub StringLength(ByRef str As Char) As Integer Dim i As Integer Do While str(i) i=i+1...
Pagina 110
5.3.8.2 Operatoren Wiskundige operatoren 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 Exclusieve of...
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.
Pagina 112
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”...
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.
Pagina 114
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.
Pagina 115
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 Set() als parameter doorgegeven.
Pagina 116
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 Read() uitgelezen.
Naam Waarde Beschrijving ADC_VREF_BG 0xC0 2,56V interne referentiespanning ADC_VREF_VCC 0x40 Voedingsspanning (5V) ADC_VREF_EXT 0x00 Externe referentiespanning op PAD3 Voor de positie van PAD3 zie jumper Application board 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 SetInt() op interrupt geïnitialiseerd is.
Bits Betekenis Startbit (is altijd “1”) 21-27 Minuut Pariteit minuut 29-34 Pariteit uur 36-41 Dag van de maand 42-44 Dag van de week 45-49 Maand 50-57 Jaar Pariteit datum Dit betekent, dat de ontvangst minimaal een volle minuut moet lopen, voor de tijdinformatie ter beschikking kan staan.
Pagina 119
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 regel: uur : minuut : seconde regel: dag .
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.
Pagina 122
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 16bit waarde 5.4.6.4...
Pagina 123
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 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.
Pagina 124
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.
Pagina 125
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 positie in de EEPROM de in de EEPROM te schrijven waarde 5.4.7.5...
5.4.8 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);...
Pagina 127
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...
Pagina 128
Returnwaarde actuele I2C status I2C_Stop 5.4.8.6 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);...
Pagina 129
0x20 Er is SLA+W verzonden, er werd NACK ontvangen 0x28 Er is een data byte verzonden, er werd ACK ontvangen 0x30 Er is een data byte verzonden, er werd NACK ontvangen 0x38 Conflict in SLA+W of data bytes Tabel: Status Codes Master Receiver Mode Status Code Beschrijving...
Pagina 130
5.4.8.9 I2C voorbeeld Voorbeeld: EEPROM 24C64 lezen en schrijven zonder I2C_status opvragen // I2C Initialization, Bit Rate 100kHz main(void) word address; byte data,EEPROM_data; address=0x20; data=0x42; I2C_Init(I2C_100kHz ); // write data to 24C64 (8k x 8) EEPROM I2C_Start(); I2C_Write(0xA0); // DEVICE ADDRESS : A0 I2C_Write(address>>8);...
Pagina 132
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.
Pagina 133
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. Tabel interrupt vectoren: Interrupt naam Beschrijving...
Pagina 134
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.
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 Scan() teruggeleverd wordt. Returnwaarde ASCII waarde van de herkende toets -1 als er geen toets ingedrukt is 5.4.11 Een deel van deze routines is geïmplementeerd in de interpreter, een ander deel kan opge- roepen worden door het toevoegen van de bibliotheek “LCD_Lib.cc”.
Pagina 136
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. Parameter pos cursorpositie Waarde van pos...
Pagina 137
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 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.
Pagina 138
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.
Pagina 139
Beschrijving Stuurt een databyte naar de display controller. Parameter 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 databyte commandonibble...
Pagina 140
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.
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 = 9 en val = 0, port bit dan wordt pin 2 van de Atmel Mega (komt overeen met PortB.1 –...
Pagina 142
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.
Pagina 143
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 …...
Pagina 144
Parameters port poortnummer (zie tabel) uitvoerbyte Tabel poortnummers Definitie Waarde PortA PortB PortC PortD PortE (Mega128) PortF (Mega128) PortG (Mega128) 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. Als een pin op ingang geschakeld is, dan kan de interne pull-up weerstand ingeschakeld (1) of uitgeschakeld (0) worden.
PortD.0 … … PortD.7 Vanaf hier alleen Mega128 PortE.0 … … PortE.7 PortF.0 … … PortF.7 PortG.0 … … PortG.4 5.4.12.7 Poort voorbeeld // Programma laat afwisselend de beide LED’s op het // Application Board knipperen in een 1 seconde – ritme void main(void) Port_DataDirBit(PORT_LED1,PORT_OUT);...
Pagina 146
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);...
Pagina 147
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 Waarde van welke de integer berekend wordt Returnwaarde...
Pagina 148
Beschrijving De functie e ^ val wordt berekend. Parameter 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 invoerwaarde Returnwaarde Resultaat van de functie...
Pagina 149
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 Multiplicator expn Exponent Returnwaarde Resultaat van de functie 5.4.13.10 Wiskundige functies Syntax float ln(float val); Sub ln(val As Single) As Single Beschrijving De natuurlijke logaritme wordt berekend...
Pagina 150
Beschrijving De logaritme voor basis 10 wordt berekend Parameter Invoerwaarde Returnwaarde Resultaat van de functie 5.4.13.12 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 Basis Exponent...
Pagina 151
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 Waarde qaarvan de vierkantswortel wordt berekend 5.4.13.15 Wiskundige functies Syntax float tan(float val); Sub tan(val As Single) As Single Beschrijving De tangens wordt berekend.
Pagina 152
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 = 1 seriële, 1 = 2 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.
Pagina 153
Tabel divider definities Divider Definitie Baudrate SR_BD2400 2400bps SR_BD4800 4800bps SR_BD9600 9600bps SR_BD14400 14400bps SR_BD19200 19200bps SR_BD28800 28800bps SR_BD38400 38400bps SR_BD57600 57600bps SR_BD76800 76800bps SR_BD115200 115200bps SR_BD230400 230400bps 5.4.14.3 Serial_Init_IRQ Seriële functies Voorbeeld Syntax void Serial_Init_IRQ(byte serport,byte ramaddr[],byte recvlen,byte sendlen,byte par, Sub Serial_Init_IRQ(serport As Byte,ByRef ramaddr As Byte,recvlen As Byte,sendlen As par As Byte,div As Byte) Beschrijving...
Pagina 154
Tabel par definities: Definitie Functie SR_5BIT 5 bit tekenlengte SR_6BIT 6 bit tekenlengte SR_7BIT 7 bit tekenlengte SR_8BIT 8 bit tekenlengte SR_1STOP 1 stop bit SR_2STOP 2 stop bit SR_NO_PAR no parity SR_EVEN_PAR even parity SR_ODD_PAR odd parity Tabel divider definities Divider Definitie Baudrate...
Pagina 155
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.
Pagina 156
void Serial_Write(byte val); Sub Serial_Write(val As Byte) Beschrijving Een byte wordt naar de seriële interface gestuurd. Parameter serport Interfacenummer (0 = 1 seriële, 1 = 2 seriële enz.) 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.
Pagina 157
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,...
Pagina 158
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.
Pagina 159
5.4.16.3 Str_Fill String functies (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 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...
Pagina 160
Parameters het te controleren teken Returnwaarde 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 cursor op string Returnwaarde...
Pagina 161
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.
Pagina 162
tr_WriteWord 5.4.16.10 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.
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.
Pagina 164
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.
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 Nummer van de op te roepen thread TI_STACKSIZE Gedefinieerde stackgrootte TI_CYCLES Aantal van de uit te voeren cycli voor een threadwisseling...
Pagina 166
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.
Pagina 167
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.
Pagina 168
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.11 Thread voorbeeld / / Demoprogramma voor multithreading / / het programma is niet gedempt, het kort indrukken van een toets leidt daarom tot / / meervoudige invoer van de string void thread1(void) while(true)
pulse(n); n pulsen genereren count=Timer T0GetCNT(); 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.2 Produceren van frequenties Voor het produceren van frequenties kunnen Timer_0 en Timer_1 als volgt gebruikt worden: Timer0 (8 Bit) voorbeeld: µ...
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”.
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.6) PM_waarde=0; Timer_T1PM(ps_64); / / Voordeler voor meting vastleggen while(PM_waarde==0);...
Pagina 173
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.
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. Parameters period periodeduur voordeler...
Pagina 175
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.
Pagina 177
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.
Pagina 178
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.
Pagina 179
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 fase- verschuiving van de beide uitgangssignalen, zie tabel. De uitgangssignalen verschijnen op Mega 32: PortD.4 (PIN18) en PortD.5(PIN19).
Pagina 180
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).
Pagina 181
Tabel prescaler: Voordeler (prescaler) Tijdbasis (duur van een tick) PS_1 (1) 67,8 ns PS_8 (2) 542,5 ns PS_64 (3) 4,34 µs PS_256 (4) 17,36 µs PS_1024 (5) 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.
Pagina 182
Tabel prescaler: Voordeler (prescaler) Tijdbasis (duur van een tick) PS_1 (1) 67,8 ns PS_8 (2) 542,5 ns PS_64 (3) 4,34 µs PS_256 (4) 17,36 µs PS_1024 (5) 69,44 µs 5.4.18.26 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...
Pagina 183
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.
Pagina 184
Parameters Time tijdswaarde waarbij de interrupt getriggerd wordt voordeler Voordeler (prescaler) Tijdbasis (duur van een tick) PS_1 (1) 67,8 ns PS_8 (2) 542,5 ns PS_64 (3) 4,34 µs PS_256 (4) 17,36 µs PS_1024 (5) 69,44 µs 5.4.18.31 Timer_T3CNT Timer functies Syntax void Timer_T3CNT(void);...
Pagina 185
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.
Pagina 186
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.36 Timer_T3GetPM Timer functies Syntax word Timer_T3GetPM(byte Mode);...
Pagina 187
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:...
Pagina 188
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 pulsbreedte voordeler Tabel prescaler: Voordeler (prescaler) Tijdbasis (duur van een tick) PS_1 (1)
Pagina 189
5.4.18.42 Timer_T3PWMY Timer functies 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).
Pagina 190
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...
Pagina 191
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...
(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? •...
Pagina 194
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.