Inhoud pagina 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 Hoofdstuk 2 Installatie 1 Software 2 Application Board Hoofdstuk 3 Hardware 1 Firmware 2 Mega 32...
Hoofdstuk 1 Belangrijke aanwijzingen Introductie Het C-Control Pro systeem is gebaseerd op de Atmel Mega 32 RISC micro –controller. Deze micro –controller wordt in zeer vele apparaten in grote aantallen toegepast. Van de amusementselektronica, via huishoudmachines tot verschillende toepassingsmogelijkheden in de industrie. Daar neemt de controller belangrijke besturingsopgaven over. C-Control Pro biedt u deze uiterst moderne technologie om uw besturingsproblemen op te lossen.
Let op het toelaatbare temperatuurbereik in de technische specificaties in het aanhangsel. 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. Per brief Conrad Electronic Technische Anfrage Klaus Conrad-Strasse 2 92530 Wernjberg-Köblitz...
Hoofdstuk 2 Installatie Software Als de meegeleverde CD in de computer gelegd wordt, dient de installer automatisch gestart te worden, om de C-Control Pro software te installeren. Als dat niet gebeurt, b.v. omdat de “autostart” –functie voor CD’s of DVD’s in Windows uitgeschakeld is, start dan svp de installer “C-ControlSetup.exe”...
Pagina 8
Als het Application board voor het eerst aangesloten is, is er geen driver voor de FTDI chip aanwezig. Onder Windows XP wordt dan het volgende venster getoond: U dient hier dan “Software uit een lijst of een bepaalde bron installeren” te kiezen en op “Verder”...
Pagina 9
Daarna dient u het pad voor de index van de driver aan te geven. Als u de software naar “C:\Programma’s” geïnstalleerd heeft, is het pad “C:\Programma’s\C-Control\FTDI USB driver”. Het bericht “C-Control Pro USB Device hat den Windows-Logo-Test nicht bestanden…” (“C-Control Pro USB Device heeft de Windows-Logo-Test niet doorstaan…”) is heel normaal. Het betekent niet, dat de driver bij de Windows-Logo-Test gefaald heeft, maar dat de driver niet deelgenomen heeft aan de (tamelijk dure) test in Redmond.
Pagina 10
Hoofdstuk 3 3 Hardware 3.1 Firmware Het besturingssysteem van de C-Control Pro bestaat uit de volgende componenten: Bootloader Interpreter Bootloader De bootloader staat altijd tot uw beschikking. Deze zorgt voor de USB of seriële communi- catie met de IDE. Via commandoregel –commando’s kunnen de interpreter en het toepas- singsprogramma van de PC naar de Atmel Risc chip overgebracht worden.
Pagina 11
van de hardware sources: • 131 Powerful instructions – Most Single-clock Cycle Execution • 32 x 8 General purpose Working Registers • Up to 16 MIPS Throughput at 16 MHz • Nonvolatile Program and Data Memories 32K Bytes of In-System Self-Programmable Flash Endurance: 10,000 Write/Erase Cycles In-System Programming by On-chip Boot Program •...
Als x een digitale meetwaarde is, wordt de desbetreffende spanningswaarde als volgt berekend: u = x * referentiespanning / 1024 Genereren van klokpuls Het genereren van de klokpuls gebeurt door een 14,7456MHz kwarts –oscillator. Alle tijdprocedures van de controller zijn van deze klokpuls -frequentie afgeleid. Reset Een reset zorgt voor het terugkeren van het microcontroller –systeem naar een gedefinieerde begintoestand.
PLM -ports Er staan twee timers ter beschikking voor de PLM, Timer_0 met 8 bit en Timer_1 met 16 bit. Deze kunnen gebruikt worden voor de D/A –omvorming, voor het aansturen van servo- motoren in de modelbouw of voor het afgeven van audio -frequenties. Een pulslengte – gemoduleerd signaal heeft een periode van N zogenaamde “Ticks”.
Mechanische deel Buitenafmetingen zonder pins ca. 53 mm x 21 mm x 8 mm Gewicht ca. 90g Pinraster 2,54mm Aantal pins (2 rijen) Afstand van de rijen 15,24mm Ports Max. toelaatbare stroom uit digitale ports ± 20mA Toelaatbare totaal van de stromen op digitale ports 200mA Toelaatbare ingangsspanning op portpins -0,5V …...
Pagina 15
tegen VCC te schakelen. Deze keuzemogelijkheid wordt vastgelegd meet Resp. met JP2. Om bij een open schakelaar eden gedefinieerd niveau op de ingangsport te hebben, moet de desbetreffende pull –up ingeschakeld zijn (zie hoofdstuk Digitalports). Als u op SW1 drukt bij het inschakelen van het Board, wordt de seriële bootloader –...
Pagina 16
Let op de maximaal afneembare stroom. Een overschrijding kan leiden tot vernieling! Vanwege het relatief hoge stroomverbruik van het Application board in het bereik van 125 mA is deze niet aan te bevelen voor toepassing in permanent op batterijen werkende apparaten.
Pagina 17
Testinterfaces De 4-polige stiftstrip X16 wordt alleen voor interne testdoeleinden gebruikt en zal ook niet op alle application boards gemonteerd worden. Voor de gebruiker is deze stiftstrip zonder betekenis. Een andere testinterface is de 6-polige stiftstrip (twee rijen met elk 3 pins) bij JP4. Ook deze stiftstrip is alleen voor intern gebruik en wordt op latere boardseries waarschijnlijk niet meer gemonteerd.
Pinbezetting voor application board Mega32 (pins 1 – 20) PIN Port Port PortBit Naam Schakelschema Opmeringen PB0 PortB.0 Ingang timer/counter0 PB1 PortB.1 Ingang timer/counter1 PB2 PortB.2 INT2/AIN0 (+) analoge comparator, externe interrupt2 PB3 PortB.3 OTO/AIN1 (-)analoge comparator, uitgang timer 0 PB4 PortB.4 USB -communicatie PB5 PortB.5...
Pagina 19
Jumperposities bij uitlevering 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).
Hoofdstuk 4 Overzicht Het C-Control Pro gebruikersoppervlak (IDE) bestaat uit de volgende hoofdelementen: Sidebar voor projectbestanden Meerdere bestanden kunnen hier tot een project afgelegd worden. Editor venster Er kunnen zo veel editor vensters geopend worden als u maar wilt om bestanden te editen.
Projecten 4.2.1 Maken van een project Onder het menu Project kunt u met het oproepen van Nieuw de dialoogbox Project maken oproepen. Daar wordt voor het project een projectnaam aangegeven en het project wordt in de sidebar gemaakt. U dient vooraf te beslissen of u een CompactC of een Basic project wilt maken. In een project kunt u als projectbestanden CompactC en Basic gemengd aanleggen en daaruit een programma maken.
Projectbestanden Als u bestanden aan het project heeft toegevoegd, dan kunt u de bestanden met een dubbelklik op de bestandsnaam openen. Met een klik op de rechter muisknop verschijnen er nog meer opties: Umbenennen - De naam van het bestand wordt veranderd Entfernen - Het bestand wordt verwijderd uit het project Optionen...
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.
De cyclustijd is het aantal cycli (bytecode operaties) die een thread mag verwerken tot er omgeschakeld wordt naar een andere thread. Via het aantal cycli tot aan het wisselen van threads wordt ook de prioriteit van de threads gestuurd. Zie ook Threads. 4.2.5 Beheer van de bibliotheek In het bibliotheekbeheer kunnen de brontekst –bibliotheken gekozen worden die naast de...
Editor 4.3.1 Editorvenster U kunt in het C-Control Pro oppervlak meerdere editorvensters openen. Elk venster kan qua grootte en qua getoonde tekstgedeelte veranderd worden. Dubbelklikken op de titelregel maximaliseert het venster. Een klik op het bereik links naast het begin van de tekst plaatst daar een stop (breakpoint). Daartoe moet eerst de brontekst zonder fouten met “Debug info”...
• “Gehe zu” (Alt-G) – u kunt naar een bepaalde regel springen Zoeken/Vervangen dialoog • Zoektekst – invoerveld voer de te zoeken tekst • Vervangen met – de tekst die de te vervangen tekst vervangt • Hoofdletters/Kleine letters – onderscheidt hoofd – en kleine letters •...
Pagina 27
• Backspace rückt aus – met “Backspace” springt u naar de plaats waar de tekens van de vorige regel beginnen • Cursor geht durch Tabulatoren – u gaat door tabs zoals door spaties • Gruppen rückgängig – een Undo operatie wordt niet in kleine stappen, maar in blokken uitgevoerd •...
4.3.4 Reguliere uitdrukkingen De zoekfunctie in de editor ondersteunt reguliere uitdrukkingen. Daarmee kunnen tekenketens zeer flexibel gezocht of vervangen worden. Een circumflex aan het begin van een woord vindt het woord aan het begin van de regel Een dollarteken vertegenwoordigt het eind van een regel Een punt symboliseert een willekeurig teken Een sterretje staat voor het meervoudig voorkomen van een patroon.
Compiler 4.4.1 Instellingen vooraf van de compiler In de instellingen vooraf kunnen de standaardwaarden geconfigureerd worden, die bij het maken van een nieuw project opgeslagen worden. De keuzeboxen “Threads configureren” “Bibliotheek configureren” zijn identiek aan de instellingsparameters bij Projectopties. 4.4.2 Compileren Onder het menupunt Project...
Bij een geslaagde compilering wordt de bytecode als bestand met de uitgang “*.bc” in het projectregister afgelegd. Met een klik op de rechter muisknop in het bereik van de compilermeldingen kunnen de volgende procedures getriggerd worden: • wissen – wist de lijst van de compilermeldingen •...
Uitvoer 4.5.2 Om debug berichten te tonen is er een “Uitvoer” – vensterbereik. Hier wordt getoond wanneer de bytecode interpreter gestart en beëindigd is, en hoe lang (in milliseconden) de interpreter uitgevoerd werd. De uitvoeringstijd is natuurlijk niet geldig als de interpreter in de debug modus gestopt werd.
4.5.4 Versie controleren Omdat er gepland is om na de C-Control Pro MEGA 32 nog andere hardware platformen te ondersteunen, is het belangrijk de actuele versienummers van bootloader, interpreter en hardware –versie in het oog te houden. Dit is mogelijk met Hardware versie in C-Control.
In het Debugger menu vindt u alle debugger commando’s. Met Debug modus (Shift-F10) start u de debugger. Als er op dat moment geen breakpoint gezet is, stopt de debugger bij de eerste uitvoerbare aanwijzing. Als u zich in de Debug modus bevindt, springt u met starten (F10) naar de volgende stop.
Pagina 34
De andere variant gaat via het context –menu in de lijst van variabelen, dat u eveneens met een klik op de rechter muisknop kunt activeren: Als u daar variabele invoegen kiest, kunt u de te controleren variabele in de lijst invoeren als tekst.
Als er veel variabelen in de controlelijst ingevoerd zijn, dan kan het bij een singlestep lang duren voordat alle inhouden van variabelen uit de module opgevraagd zijn. In dat geval kunt u de optie Auto actualiseren voor aparte variabelen uitschakelen. Dan wordt de inhoud van deze variabelen pas getoond als het commando Variabelen actualiseren uitgevoerd wordt.
Pagina 36
Bovendien kunnen hier ook de lijsten van de “laatst geopende projecten”, alsmede de “laatst geopende bestanden” gewist worden. 4.7.1 Communicatie Via een keuzebox kunt u de verbinding met het Application Board instellen. USB verbindingen beginnen met de afkorting “USB” en worden dan doorgenummerd: USB0, USB1 …...
Internet update 4.7.2 Om te controleren of er door Conrad verbeteringen of correcties van fouten gepubliceerd zijn, kunt u de Internet update activeren. Als u de keuzebox “Alle dagen controleren op updates” kiest, dan wordt met een interval van dagen bij het starten van de IDE op internet naar een update gezocht.
Pagina 38
• Nebeneinander – ordent de vensters van links naar rechts naast elkaar • Alle Minimieren – verkleint de vensters tot symboolgrootte • Schliessen – sluit het actieve venster Hulp Onder het menupunt “Hilfe” (Hulp) kunt u met Inhalt (Inhoud - toets F1) het helpbestand oproepen.
Compiler Compact C 5.1.1 Programma Een programma bestaat uit een hoeveelheid aanwijzingen (zoals b.v. “a=5”), die over verschillende functies verdeeld zijn. De startfunctie die in elk programma aanwezig moet zijn, is de functie “main()”. Een minimalistisch programma dat een getal in het uitvoervenster drukt: void main...
Pagina 40
If(a>5) a=a+1; // Aanwijzingsblok b=a+2; Commentaren Er bestaan twee soorten commentaren, éénregelige en commentaren met meerdere regels. Daarbij wordt de tekst in de commentaren door de compiler genegeerd. • Eénregelige commentaren beginnen met “//” en stoppen bij het eind van de regel. •...
Constante termen Een term of delen van een term kan/kunnen constant zijn. Deze deeltermen kunnen al tijdens de compiler –looptijd berekend worden. Zo wordt b.v. – door de compiler samengevat tot Soms moeten termen constant zijn opdat ze geldig zijn. Zie b.v. declarering van array variabelen.
Pagina 42
term van een voorteken voorzien. D.w.z. de operatie wordt “signed” uitgevoerd. • Als één van beide operandi van het type float is, dan is het resultaat eveneens van het type float. Als één van de beide operandi een 8 bit of 16 bit datatype heeft, dan wordt deze voor de operatie omgevormd tot een float datatype.
Pagina 43
float f: s=sizeof(f); // de waarde van s = 4 Bij arrays wordt ook alleen de bytelengte van het basis –datatype als uitkomst gegeven. U moet de waarde met het aantal elementen vermenigvuldigen om het geheugenverbruik van de array te berekenen.
Pagina 44
int a,b; void func1 (void) int a,x,y; // globale b is toegankelijk // globale a is niet toegankelijk omdat deze door locale a afgedekt is // locale x,y zijn toegankelijk // u is niet toegankelijk omdat deze lokaal hoort tot functie main void main (void)
Pagina 45
(2+3)*4-5; // resultaat 15 => eerst 2+3, dan *4, daarna –5 Een opstelling van de prioriteiten vindt u in de prioriteitstabel. 5.1.5.1 Wiskundige operatoren Alle wiskundige operatoren met uitzondering van “modulo” zijn gedefinieerd voor integer en zwevende komma. Alleen modulo is beperkt tot één integer -type. [Afb.] U dient er op te letten dat in een term aan het cijfer een integer datatype toegewezen wordt.
Logische operatoren zijn alleen toegestaan voor Integer datatypes. Elke waarde ongelijk aan nul geldt als logisch 1. De nul geldt als logisch 0. Operator Verklaring Voorbeeld Resultaat && Logisch En 1 && 1 5 && 0 Logisch Of Logisch Niet 5.1.5.4 Bitschuif operatoren Bitschuif operatoren zijn alleen toegestaan voor Integer datatypes.
5.1.2.1 In –Decrement operatoren Increment (toename) en decrement (afname) operatoren zijn alleen toegestaan voor variabelen met Integer datatypes. Operator Verklaring Voorbeeld Resultaat variabele++ Waarde der variabelen, daarna variabele met één verhoogd (post- increment) Variabele - - Waarde der variabelen, daarna a - - variabele met één verlaagd (post- decrement)
Pagina 48
In plaats van een enkele aanwijzing kan ook een aanwijzingsblok gedefinieerd worden. Voorbeelden: if(x<y) c++; if(c==10) c=0; else if(x>y) a=b*5; else a=b*4; y++; 5.1.6.2 while Met een wile aanwijzing kunnen afhankelijk van een voorwaarde aanwijzingen in een lus herhaald worden. While( term ) aanwijzing;...
Pagina 49
continue aanwijzing Bij de uitvoering van continue binnen een lus volgt er onmiddellijk een nieuwe berekening van de term. Afhankelijk van het resultaat wordt bij niet gelijk aan de lus herhaald. Een uitkomst breekt de lus af. Voorbeeld: while(1) // eindeloze lus a++;...
Pagina 50
Voorbeeld: a++; if(a>10) break; // breekt lus af while(1); // eindeloze lus 5.1.6.4 Een for lus wordt normaalgesproken gebruikt om een bepaald aantal lusdoorlopen te programmeren. For(aanwijzing1; term; aanwijzing2) aanwijzing3; Als eerste wordt aanwijzing1 uitgevoerd, die normaalgesproken een initialisering bevat. Daarna volgt de evaluatie van de term.
Pagina 51
continue aanwijzing continue zorgt voor de directe nieuwe berekening van de term. Afhankelijk van het resultaat wordt bij niet gelijk aan aanwijzing2 uitgevoerd en de lus wordt herhaald. Een resultaat van breekt de lus af. Voorbeeld: for(i=0;i<10;i++) if(i==5) continue; 5.1.6.5 switch Als er, afhankelijk van de waarde van een term, verschillende commando’s uitgevoerd moeten worden, dan is een switch aanwijzing zeer elegant:...
Pagina 52
default: b=b+2; break aanwijzing Een break verlaat de switch aanwijzing. Als u voor case de break weglaat, dan worden de aanwijzingen ook uitgevoerd als er naar de vorige case gesprongen wordt: switch(a) case a++; case a++; // wordt ook uitgevoerd bij een waarde van a==1 case a++;...
Pagina 53
Parameteroverdracht Opdat functies flexibel gebruikt kunnen worden, kunt u ze parameteriseren. Hiervoor worden in de haakjes na de functienaam de parameters voor de functie gescheiden door komma’s doorgegeven. U geeft net als in de variabelendeclaratie eerst het datatype en daarna de parameternaam aan.
Pagina 54
int i; i=0; while(str[i]) i++; // herhaal zolang het teken niet nul is return(i); void main(void) int len; char text[15]; text=”hallo wereld”; len=Stringlength(text); In main wordt de referentie van tekst als parameter doorgegeven aan de functie Stringlength. Als u in een functie een normale parameter verandert, is deze verandering buiten deze functie niet zichtbaar.
Bitschuifoperatoren << Één bit naar links schuiven >> Eén bit naar rechts schuiven Toename-/Afname - operatoren ++ Post/Pre -toename -- Post/Pre –afname Logische operatoren && Logisch en Logisch of Logisch niet Bitoperatoren & En Exclusief of ~ Bit –invertering Preprocessor De Gnu Generic preprocessor die hier gebruikt wordt, heeft nog meer functies die onder http://nothingisreal.com/gpp/gpp.html gedocumenteerd zijn.
Omdat de preprocessor voor de compiler loopt, wordt bij elke keer dat symbol in de brontekst opduikt, symbol vervangen door tekstconstante. Een voorbeeld: #Define Pl 3.141 Voorwaardelijke compilering #ifdef symbol … #else // optie … #endif U kunt controleren welke delen van een brontekst werkelijk gecompileerd worden. Na een #ifdef symbol aanwijzing wordt de volgende tekst alleen gecompileerd als het symbol...
5.3.2 AbsDelay Algemene functies Syntax void AbsDelay (word ms); Beschrijving De functie AbsDelay() wacht een bepaald aantal milliseconden. [Afb.] De functie werkt weliswaar zeer nauwkeurig, maar onderbreekt niet alleen de bewerking van de actuele thread, maar laat de Bytecode interpreter in zijn geheel wachten. Interrupts worden weliswaar geregistreerd, maar de interruptroutines worden in deze tijd niet verwerkt, omdat ook daarvoor de Bytecode interpreter nodig is.
5.3.3.2 AComp voorbeeld Voorbeeld: gebruik van de analoge comparator // Acomp: analoge comparator // Ingang (+) PB2 resp. band gap reference 1,22V /// Ingang (-) PB3 // De functie Acomp geeft als resultaat de waarde van de comparator // De oproep kan met de parameter 0 (beide ingangen worden gebruikt) of // of 0x40 (interne referentiespanning op de (+) ingang, externe ingang PB3.
Pagina 61
Returnwaarde gemeten waarde van de ADC –poort . 5.3.4.3 ADC_ReadInt ADC –functies Syntax word ADC_ReadInt(void); Beschrijving Deze functie wordt gebruikt om na een ADC-Interrupt de meetwaarde te lezen. De ADC- Interrupt wordt getriggerd, als de AD_omvorming afgesloten is en er dus een nieuwe meting tot uw beschik-king staat.
Pagina 62
ADC functies Syntax word ADC_Int(byte v_ref,byte channel Beschrijving De functie ADC_SetInt initialiseert de analoog-digitaal_omvormer voor de interrupt -functie. De referentiespanning en het meetkanaal worden gekozen en de A/D omvormer wordt voorbereid voor de metingen. De interrupt-Service-Routine voor de ADC moet gedefinieerd zijn. Nadat de interrupt heeft plaatsgevonden kan de meetwaarde ReadInt() uitgelezen worden.
Pagina 63
5.3.5 DCF 77 Alle DCF –routines zijn in de bibliotheek “LCD_Lib.cc” gerealiseerd. Voor het gebruik van deze functies dient u de bibliotheek “DCF_Lib.cc” in het project te integreren. RTC met DCF77 tijdsynchronisatie Het DCF77 signaal De logische informatie (de tijdinformatie) wordt samen met de normale frequentie (de draag- frequentie van de zender, dus 77,5 kHz) verzonden.
Pagina 64
van het programma en dan dagelijks op een in het programma vastgelegde tijd (Update_uren, Update_minuten). Er worden twee bibliotheken gebruikt: DCF77_Lib.cc en LCD_Lib.cc. Voor de zendontvangst van het tijdsignaal is een DCF77 –ontvanger noodzakelijk. De uitgang van de DCF77 –ontvanger wordt aangesloten op Poort D7. Eerst moet het begin van een tijdinformatie gevonden worden.
Pagina 65
5.3.5.1 DCF_FRAME DCF -functies Syntax Void DCF_FRAME (void); Beschrijving Schakel de DCF Mode op 3 (“Data decoderen en opslaan, pariteitcontrole”). Parameters Geen 5.3.5.2 DCF_INIT DCF -functies Syntax Void DCF_INIT(void) Beschrijving DCF_INIT bereidt de DCF -functie voor. De ingang voor het DCF –signaal wordt ingesteld. DCF Mode = 0.
Pagina 66
5.3.5.4 DCF_START DCF -functies Syntax Void DCF_START(void); Beschrijving DCF_START initialiseert alle gebruikte variabelen en zet DCF Mode op 1. De DCF – tijdregistratie loopt nu automatisch. Parameters Geen 5.3.5.5 DCF_SYNC DCF -functies Syntax Void DCF_SYNC(void); Beschrijving DCF Mode op 2 schakelen (“synchronisatie op begin frame”). Parameters Geen 5.3.6...
Pagina 67
Er wordt een teken naar het uitvoervenster gestuurd. Een C/R (Carriage Return – waarde 13) triggert een sprong naar het begin van de volgende regel. Parameters c het uit te voeren teken 5.3.6.2 Msg_WriteFloat Debug Message functies Syntax void (Msg_WriteFloat (float val);...
5.3.6.4 Msg_WriteInt Debug Message functies Syntax void (Msg_WriteInt (int val); Beschrijving De doorgegeven integere wordt weergegeven in het uitvoervenster. Bij negatieve waarden wordt er een minteken voor geplaatst. Parameters val 16bit integere waarde 5.3.6.5 Msg_WriteText Debug Message functies Syntax void (Msg_WriteText (int char text[...
Pagina 69
5.3.7 EEPROM 5.3.7.1 EEPROM_Read EEPROM functies Syntax byte EEPROM_Read(word pos); Beschrijving Leest een byte van positie pos uit de EEPROM. De eerste 32 bytes zijn gereserveerd voor de C-Control Pro OS. Een waarde voor pos van 0 en groter heeft daarom betrekking op byte 32 en hoger in de EEPROM.
Pagina 70
void I2C_Init (byte I2C_BR); Beschrijving Deze functie initialiseert de I2C –interface. Parameters I2C_BR geeft de bitrate aan. De volgende waarden zijn al vooraf gedefinieerd: I2C_100kHz I2C_400kHz 5.3.8.2 I2C_Read_ACK I2C functies Syntax byte I2C_Read_ACK(void); Beschrijving Deze functie ontvangt een byte en bevestigt met ACK. Daarna kan met I2C_Status de status van de interface opgevraagd worden.
Pagina 71
Deze functie start de communicatie met een startsequentie. Daarna kan met I2C_Status de status van de interface opgevraagd worden. Parameters Geen 5.3.8.5 I2C_Status I2C functies Syntax byte I2C_Status(void); Beschrijving Met I2C_Status kan de status van de interface opgevraagd worden. De betekenis van de statusinformatie is weergegeven in de tabel. Returnwaarde actuele I2C status 5.3.8.6 I2C_Stop...
Pagina 72
Parameters Geen 5.3.8.7 I2C_Write I2C functies Voorbeeld Syntax void I2C_Write(void); Beschrijving Deze functie zendt een byte. Daarna kan met I2C_Status de status van de interface opgevraagd worden. Parameters data databyte 5.3.8.8 I2C Status Codes Tabel: Status Codes Master Transmitter Mode Status Code Beschrijving 0x08 Er is een START sequentie verzonden...
Pagina 73
5.3.8.9 I2C voorbeeld Voorbeeld: EEPROM 24C64 lezen en schrijven zonder I2C_status opvragen // I2C initialisatie, bit rate 100kHz main(void) word address; byte data,EEPROM_data; address=0x20; data=0x42; I2C_Init(12C_100kHz // write data to 24C64 (8k x 8) EEPROM I2C_Start(); I2C_Write(0xA0); // DEVICE ADDRESS : A0 I2C_Write(address>>8);...
Pagina 74
5.3.9 Interrupt De Controller stelt een veelvoud aan interrupts ter beschikking. Sommige daarvan worden gebruikt voor systeemfuncties en staan niet ter beschikking van de gebruiker. De volgende interrupts kunnen door de gebruiker benut worden: Tabel interrupts Interrupt naam Beschrijving INT_0 Externe interrupt0, ingang Poort D.2 INT_1 Externe interrupt1, ingang Poort D3...
Pagina 75
een stijgende flank triggert een interrupt 5.3.9.2 Ext_Int0Disable Interrupt functies Syntax void Ext_Int0Disable(void); Beschrijving De externe interrupt 0 wordt geblokkeerd. Parameters Geen 5.3.9.3 Ext_Int1 Interrupt functies Syntax void Ext_Int1(byte Mode); Beschrijving Deze functie schakelt de externe interrupt 1 vrij. De parameter Mode legt vast, wanneer een interrupt gemaakt moet worden.
Pagina 76
5.9.3.4 Ext_Int1Disable Interrupt functies Syntax void Ext_Int1Disable(void); Beschrijving De externe interrupt 1 wordt geblokkeerd. Parameters Geen 5.3.9.5 Ext_Int2 Interrupt functies Syntax void Ext_Int2(byte Mode); Beschrijving Deze functie schakelt de externe interrupt 0 vrij. De parameter Mode legt vast, wanneer er een interrupt gemaakt moet worden.
Pagina 77
Syntax byte Irq_GetCount(void); Beschrijving Signaleert dat de interrupt verwerkt is (interrupt acknowledge). Als de functie niet aan het eind van een interrupt routine wordt opgeroepen, wordt er ononderbroken in de interrupt gesprongen. Returnwaarde Geeft aan hoe vaak de interrupt vanaf de hardware tot aan het oproepen van Irq_GetCount() getriggerd is.
Pagina 79
5.3.10 Keyboard Een deel van deze routines is in de interpreter geïmplementeerd, een ander deel wordt opgeroepen door het toevoegen van de bibliotheek “Key_Lib.cc”. Omdat de functies in “Key_Lib.cc” door bytecodes gerealiseerd worden, zijn ze langzamer in de verwerking. Bibliotheekfuncties hebben echter het voordeel dat als u ze niet gebruikt, deze functies door weglaten van de bibliotheek uit het project gehaald worden.
Pagina 80
Parameters keys bitveld dat door Scan() teruggeleverd wordt. Returnwaarde ASCII waarde van de herkende toets -1 als er geen toets ingedrukt is 5.3.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”. Omdat de functies in “LCD_Lib.cc”...
Pagina 81
Beschrijving Schakelt de cursor van het display in. Parameter Geen 5.3.11.4 LCD_CursorPos LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_CursorPos(byte pos); Beschrijving Plaatst de cursor in de positie pos. Parameter pos cursorpositie Waarde van pos Positie op display 0x00-0x07 0 – 7 in de 1 regel 0x40-0x47 0 –...
Pagina 82
Beschrijving “High Level” initialisering van het LCD display. Roept als eerste InitDisplay() op. Parameters Geen 5.3.11.6 LCD_SubInit LCD functies Syntax void LCD_SubInit(void); Beschrijving Initialiseert de poort s voor de displaybesturing op assembler –niveau. Moet als eerste routine voor alle andere LCD uitvoerfuncties opgeroepen worden. Wordt gebruikt als eerste commando van Init() gebruikt.
Pagina 83
Parameter Geen 5.3.11.9 LCD_WriteCTRRegister LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_WriteCTRRegister(byte cmd); Beschrijving Stuurt een commando naar de Display Controller. Parameter Commando in byte –vorm 5.3.11.10 LCD_WriteDataRegister LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_WriteDataRegister(char x); Beschrijving Stuurt een databyte naar de Display Controller. Parameter databyte 5.3.11.11 LCD_WriteNibble...
Pagina 84
datanibble cmd commandonibble 5.3.11.12 LCD_WriteRegister LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_WriteRegister(byte byte x); Beschrijving LCD_WriteRegister splitst databyte y in twee nibbles en stuurt ze naar de display controller. Parameters databyte cmd commandonibble 5.3.11.13 LCD_WriteText LCD functies (bibliotheek ”LCD_Lib.cc”) Syntax void LCD_WriteText(char text[ Beschrijving...
Pagina 85
5.3.12 Poort De Atmel Mega 32 heeft 4 in - /uitgangspoorten van elk 8 bit. Elke bit van een aparte poort kan als ingang of als uitgang geconfigureerd worden. Omdat echter het aantal pins van de Mega 32 Risc CPU beperkt is, zijn extra functies aan aparte poorten toegewezen. U vindt hier een tabel van de pintoewijzing.
Pagina 86
Syntax void Port _DataDirBit(byte port bit,byte val); Beschrijving De functie Port _DataDirBit configureert een bit (pin) van een poort voor in - of uitvoer. Als de bit “1” is, dan wordt de pin op uitgang geschakeld. Een voorbeeld: als = 9 en val = 0, port bit dan wordt pin 2 van de Atmel Mega (komt overeen met PortB.1 –...
5.3.12.3 Port _Read Poortfuncties Syntax byte Port_Read(byte port Beschrijving Leest een byte van een specifieke poort . Alleen de pins van de poort die op ingang zijn ge- schakeld, leveren een geldige waarde naar de desbetreffende bitpositie in de gelezen byte terug.
Pagina 88
Definitie Poort bit PortA.0 … … PortA.7 PortB.0 … … PortB.7 Definitie Poort bit PortC.0 … … PortC.7 PortD.0 … … PortD.7 5.3.12.5 Port _Write Poortfuncties Voorbeeld Syntax void Port _Write(byte port ,byte val); Beschrijving Schrijft een byte op de gespecificeerde poort . Alleen de pins van de poort die op uitgang geschakeld zijn, nemen de bitwaarden van de doorgegeven parameters over.
Pagina 89
Tabel poortnummers Definitie Waarde PortA PortB PortC PortD 5.3.12.6 Port _WriteBit Poortfuncties Syntax void Poort _WriteBit(byte poort bit,byte val); Beschrijving De functie Port_WriteBit zet de waarde van een pin die op uitgang geschakeld is. Als een pin op ingang geschakeld is, dan kan de interne pull-up weerstand ingeschakeld (1) of uitgeschakeld (0) worden.
Pagina 90
Definitie Poortbit Poort C.0 … … Poort C.7 Poort D.0 … … Poort D.7 5.3.12.7 Poort voorbeeld // Programma laat afwisselend de beide LEDs op het // Application Board knipperen in een 1 seconde – ritme void main(void) Port _DataDir(Poort D,0xc0);...
Pagina 91
Interface –parameter (zie tabel) divider Baudrate –initialisering d.m.v. verdeler (zie tabel) 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 SR1_STOP 1 stop bit SR2_STOP 2 stop bit SR_NO_PAR No parity SR_EVEN_PAR Even parity...
Pagina 92
5.3.13.2 Serial_Read Seriële functies Syntax byte Serial_Read(void); Beschrijving Een byte wordt door de seriële interface gelezen. Als er zich geen byte in de seriële buffer bevindt, keert de functie pas terug als er een teken ontvangen is. Returnwaarde Ontvangen byte uit de seriële interface 5.3.13.3 Serial_ReadExt Seriële functies...
5.3.13.5 Serial_WriteText Seriële functies Syntax void Serial_WriteText(char text[ Beschrijving Alle tekens van de char array tot aan de laatste nul worden doorgegeven naar de seriële. Parameters Text char array 5.3.13.6 Serial voorbeeld // Stringuitgifte naar de seriële interface void main(void) int i;...
Pagina 94
Parameters str1 Cursor op char array 1 str2 Cursor op char array 2 Returnwaarde als beide strings gelijk zijn <0 als op het onderscheidingspunt de 1 string kleiner is >0 als op het onderscheidingspunt de 1 string groter is 5.3.14.2 Str_Copy String functies Syntax void Str_Copy(char...
Pagina 95
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.3.14.4 Str_Isalnum String functies (bibliotheek “String_Lib.cc” Syntax byte Str_Isalnum(char c); Beschrijving Een teken c wordt er op gecontroleerd, of het uit het alfabet stamt of een cijfer is. Parameters het te controleren teken Returnwaarde...
Pagina 96
Parameters cursor op string Returnwaarde Aantal tekens in string (zonder de nul aan het eind). 5.3.14.7 Str_Substr String functies (bibliotheek “String_Lib.cc” Syntax int Str_Substr(char source[ ],char search[ Beschrijving Een string search wordt gezocht in de string source. Als de gezochte tekens –ketting (char array) gevonden wordt, dan wordt de positie ervan teruggegeven.
Pagina 97
Parameters float getal decimal aantal decimale posities waarin n geconverteerd wordt text cursor op de doelstring offset aantal tekens waarmee de ASCII weergave van het float getal verschoven in de string gekopieerd wordt. Als offset de waarde STR_APPEND(0xffff) heeft, dan wordt als offset de lengte van de doelstring aangenomen.
Pagina 98
16 Bit woord base Basis van het talstelsel text Cursor op de doelstring offset Aantal tekens waarmee de ASCII weergave het getal verschoven in de tekststring gekopieerd wordt minwidth minimale breedte van de string Als offset de waarde STR_APPEND(0xffff) heeft, dan wordt als offset de lengte van de doelstring aangenomen.
Pagina 99
Een thread die moet wachten, voert de aanwijzing Thread_Wait uit met een signaalnummer. De toestand van de thread wordt op wachtend gezet. Dit betekent dat deze thread bij een mogelijke wisseling van thread overgeslagen wordt. Als de andere thread zijn kritische werk beëindigd heeft, geeft hij het commando Thread_Signal met hetzelfde signaalnummer dat de andere thread voor Thread_Wait gebruikt heeft.
Pagina 100
5.3.15.2 Thread_Delay Thread functies Voorbeeld Syntax void Thread_Delay(word delay); Beschrijving Hiermee wordt een thread voor een bepaalde tijd op “slapend” geschakeld. Na de aangegeven periode is hij weer klaar voor de verwerking. De periode wordt aangegeven in ticks, die door timer 2 geproduceerd worden. Als timer 2 uitgeschakeld wordt of voor een ander doel wordt gebruikt, is de functiewijze van Thread_Delay() ongedefinieerd.
Pagina 101
Met deze functie kan een thread zijn thread -wisseling verhinderen. Dit is zinvol als bij een serie poort - uitvoeren of andere hardware commando’s de tijdelijke scheiding door een thread -wisseling vermeden moet worden. Als er vergeten wordt het “Lock” (de vergrendeling) weer uit te schakelen, vindt er geen multithreading meer plaats.
Pagina 102
Syntax void Thread_Start(byte thread, word func); Beschrijving Er wordt een nieuwe thread gestart. Als startfunctie voor de thread kan een willekeurige functie gebruikt worden. Als er een functie uitgezocht wordt die overdracht –parameters bevat, dan is bij de start van de thread de inhoud van deze parameters niet gedefinieerd! Parameters thread (0-15) nummer van de thread...
5.3.16 Timer Er staan in de C-Control Pro Mega 32 twee onafhankelijke Timer-Counters tot uw beschikking: Timer_0 met 8 bit en Timer_1 met 16 Bit. Timer_2 wordt door de firmware als interne tijdbasis gebruikt, en is vast ingesteld op een 10ms interrupt. U kunt de interne timers voor veelvuldige opgaven inzetten: •...
Timer1(16 Bit) / / Voorbeeld: pulstelling met CNT1 Timer T1CNT(); pulse(n); n pulsen genereren count=Timer T1GetCNT(); 5.3.16.2 Produceren van frequenties Voor het produceren van frequenties kunnen Timer_0 en Timer_1 als volgt gebruikt worden: Timer0 (8 Bit) voorbeeld: µ µ Timer_T0FRQ(10, ps_8) / / Rechthoeksignaal met 10*1,085 s = 10,85 s periodeduur...
Timer1 (16 Bit) voorbeeld: produceren van frequenties met 125*4,34µ µ µ µ s = 1085µ µ µ µ s periode Timer_T1FRQ(125,ps_64); voorbeeld: produceren van frequenties met 10*1,085 µ µ µ µ s = 10,85 µ µ µ µ s periode en 2*1,085µ...
Port _WriteBit(0,0); / / PortA.0 uitgang = 0 Irq_SetVect(INT_TIM0MP,Timer0_ISR); / / Interrupt service routine definiëren TimerT0Time(100,ps_1024); / / Tijd vastleggen en timer0 starten / / verdere verloop programma … 5.3.16.5 Puls - & periodemeting Met Timer_1 kunnen pulsbreedtes of signaalperiodes gemeten worden. Met behulp van de Input Capture functie (speciaal register van de Controller) wordt de tijd tussen twee flanken gemeten.
5.3.16.6 Frequentiemeting Voor het direct meten van een frequentie kan de Timer1(16Bit) gebruikt worden. De pulsen binnen een seconde worden geteld en het resultaat is dan in Hertz. De maximale meetfrequentie is 64kHz en wordt geleverd door de 16Bit teller. Een voorbeeld van deze manier van frequentiemeting vindt u onder “Demo programma’s/Frequentiemeting”.
Pagina 108
5.3.16.9 Timer_T0FRQ Timer functies Syntax void Timer_T0FRQ(byte period, byte PS); Beschrijving Deze functie initialiseert de Timer0 met de aangegeven voordeler en periodeduur, zie tabel. Het uitgangssignaal verschijnt op Port B.3 (PIN4). Het produceren van de frequentie wordt automatisch gestart. Parameters period periodeduur voordeler Tabel prescaler:...
Pagina 109
5.3.16.11 TimerT0PW Timer functies Syntax void Timer_T0PW(byte PW); Beschrijving Deze functie stelt een nieuwe waarde voor Timer0 in, zonder de voordeler te veranderen. Parameters PM pulsbreedte 5.3.16.12 TimerT0PWM Timer functies Syntax void Timer_T0PWM(byte byte PS); Beschrijving Deze functie initialiseert deTimer0 met de aangegeven voordeler en pulsbreedte, zie tabel. Het uitgangssignaal verschijnt op Port B.3 (PIN4).
Pagina 110
Beschrijving Het produceren van de frequentie wordt met de bovenstaande instelling gestart. De voordeler moeit nieuw aangegeven worden. Parameters Prescaler voordeler (tabel prescaler) 5.3.16.14 Timer_T0Stop Timer functies Syntax void Timer_T0Stop(void); Beschrijving Het produceren van de frequentie wordt gestopt. Het uitgangssignaal kan 0 of 1 zijn, afhankelijk van de laatste toestand.
Pagina 111
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.3.16.16 Timer_T1CNT Timer functies Syntax void Timer_T1CNT(void); Beschrijving Deze functie initialiseert de Counter1. De Counter1 wordt bij een positieve signaalflank op de ingang T1 (PIN2) opgehoogd.
Pagina 112
Parameters Geen 5.3.16.19 Timer_T1FRQ Timer functies Syntax void Timer_T1FRQ(word period,byte PS); Beschrijving Deze functie initialiseert de Timer1 met de aangegeven voordeler en periodeduur, zie tabel. Het uitgangssignaal verschijnt op PortD.5 (PIN19). Het produceren van de frequentie wordt automatisch gestart. Parameters period periodeduur voordeler Tabel prescaler:...
Pagina 113
5.3.16.21 Timer_T1GetCNT Timer functies Syntax word Timer_T1GetCNT(void); Beschrijving De waarde van Counter1 wordt gelezen. Als er een overflow plaats vindt, dan wordt de waarde 0xFFFF doorgegeven. Returnwaarde De gemeten waarde van de teller 5.3.16.22 Timer_T1GetPM Timer functies Syntax word Timer_T1GetPM(byte Mode); Beschrijving Deze functie legt vast of er een pulsbreedte –...
Pagina 114
5.3.16.23 Timer_T1PM Timer functies Syntax void Timer_T1PM(byte PS); Beschrijving Deze functie initialiseert Timer_1 voor de meting en stelt de voordeler in. Parameters PS voordeler Tabel prescaler: Voordeler (prescaler) Tijdbasis (duur van een tick) PS_1 (1) 67,8 ns PS_8 (2) 542,5 ns PS_64 (3) 4,34 µs PS_256 (4)
Pagina 115
5.3.16.26 Timer_1PWM Timer functies Syntax void Timer_T1PWM(word period, word PW0, byte PS); Beschrijving: Deze functie initialiseert Timer1 met de aangegeven voordeler, pulsbreedte en periodeduur, zie tabel. Het uitgangssignaal verschijnt op PortD.5(PIN19). Parameters period periodeduur pulsbreedte voordeler (tabel prescaler) 5.3.16.27 Timer_T1PWMX Timer functies Syntax void Timer_T1PWMX(word...
Pagina 116
Geen 5.3.16.29 Timer_T1Time Timer functies Syntax void Timer_T1Time(word Time,byte PS); Beschrijving Deze functie initialiseert Timer1 met de aangegeven voordeler en de waarde (16Bit) voor de tijd, zie tabel. Als deze waarde wordt bereikt, dan wordt de Timer1-interrupt (INT_TIM1COMP) getriggerd. Parameters Time tijdswaarde waarbij de interrupt getriggerd wordt voordeler...
Hoofdstuk 6 Aanhangsel 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? •...