C-Control Pro Mega Series © 2008 Conrad Electronic
I C-Control Pro Mega Series Inhalt 2 Kapitel 1 Wichtige Hinweise 1 Einleitung ................................................................................................................................... 2 2 Lesen ................................................................................................................................... dieser Anleitung 2 3 Handhabung ......................................................................................................................
Inhalt II 1.5................................................................................................................................... Threadoptionen 57 1.6................................................................................................................................... Bibliotheksverwaltung 57 2 ................................................................................................................................... Editor 58 2.1..................................
III C-Control Pro Mega Series 3................................................................................................................................... BASIC 111 3.1 ................................................................................................................................... Programm 111 3.2 ................................................................................................................................... Anweisungen 111 3.3 ...........................
Inhalt IV 7.3 ................................................................................................................................... EEPROM_ReadFloat 145 7.4 ................................................................................................................................... EEPROM_Write 145 7.5 ................................................................................................................................... EEPROM_WriteWord 146 7.6 .......................
V C-Control Pro Mega Series 11.15 ................................................................................................................................... LCD_WriteWord 162 12 ................................................................................................................................... Mathematik 163 12.1 ................................................................................................................................... acos 163 12.2 ....................
Inhalt VI 15.9 ................................................................................................................................... Serial_WriteText 185 15.10 ................................................................................................................................... Serial Beispiel 186 15.11 ................................................................................................................................... Serial Beispiel (IRQ) 186 16 ...........
VII C-Control Pro Mega Series 19.10 ................................................................................................................................... Timer_T0GetCNT 206 19.11 ................................................................................................................................... Timer_T0PW 206 19.12 ................................................................................................................................... Timer_T0PWM 206 19.13 .....
Inhalt © 2008 Conrad Electronic VIII
Kapitel 1
Wichtige Hinweise 1 2 Wichtige Hinweise Dieses Kapitel behandelt wichtige Informationen zur Gewährleistung, und zum Support und Betrieb der C-Control-Pro Hardware und Software. 1.1 Einleitung Die C-Control Pro Systeme basieren auf dem Atmel Mega 32, bzw. dem Atmel Mega 128 RISC Mikrocontroller. Dieser Mikrocontroller wird in sehr vielen Geräten in großen Stückzahlen eingesetzt. Von der Unterhaltungselektronik, über Haushaltsmaschinen bis hin zu verschiedenen Einsatzmöglichkeiten in der Industrie.
3 1.3 C-Control Pro Mega Series Handhabung Die C-Control Pro Unit enthält empfindliche Bauteile. Diese können durch elektrostatische Entladungen zerstört werden! Beachten Sie die allgemeinen Regeln zur Handhabung elektronischer Bauelemente. Richten Sie Ihren Arbeitsplatz fachgerecht ein. Erden Sie Ihren Körper vor der Arbeit, z.B. durch Berühren eines geerdeten, leitenden Gegenstandes (z.B. Heizkörper). Vermeiden Sie die Berührung der Anschlußpins der C-Control Pro Unit. 1.
Wichtige Hinweise 4 Der Einsatz der C-Control Pro Unit in Systemen, die direkt oder indirekt medizinischen, gesundheits- oder lebenssichernden Zwecken dienen, ist nicht zulässig. Sollte die C-Control Pro Unit inklusive Software Ihre Ansprüche nicht befriedigen, oder sollten Sie mit den Gewährleistungs- und Haftungsbedingungen nicht einverstanden sein, nutzen Sie unsere 14tägige Geld-Zurück-Garantie.
5 1.8 C-Control Pro Mega Series Historie Version 1.71 vom 25.06.2008 neue Features · neuer Editor in der IDE · Editor hat Funktionsnamen Übersicht · Code folding · Internes Terminalprogramm · Werkzeugmenü mit Optional erweiterbarer Toolliste · Syntaxhervorhebung aller Standard Bibleotheksaufrufe · Konfiguration der Syntaxhervorhebung · Erweiterung von Select ..
Wichtige Hinweise 6 · Der Compiler gibt einen korrekten Syntaxfehler, wenn mehrere Klammerebenen geöffnet sind, und ein Operand fehlt · "Exit" funktionierte in BASIC For-Next Schleifen nicht immer korrekt · Man konnte nur 16mal das Array Fenster öffnen, auch wenn eines vorher geschlossen wurde · Aus dem Text "Compiler" unter Optionen wurde "Compiler Voreinstellungen" Version 1.60 vom 03.04.
7 C-Control Pro Mega Series · · · · · · · · · · · · · · · · · · Größen) Interruptroutinen für serielle Schnittstelle (bis zu 256 Byte Empfangspuffer / 256 Byte Sendepuffer) festverdrahtete IRQ Routinen um eine Periodenmessung kleiner Zeiträume zu ermöglichen Rekursionen sind nun uneingeschränkt nutzbar beliebig große Arrays können im Debugger in eigenem Fenster angezeigt werden Strings (character arrays) werden nun als Tooltip im Debugger gezeigt SPI kann ausgeschaltet werden um die Pins als I/O zu nutze
Kapitel 2
9 2 C-Control Pro Mega Series Installation In diesem Abschnitt wird die Installation von Hard- und Software erläutert. 2.1 Applicationboard Wichtiger Hinweis zum Ein-Ausbau eines Mega Moduls Für die Verbindung zwischen dem Modul und dem Application Board sind hochwertige Steckverbinder verwendet worden, die eine gute Kontaktierung sicherstellen.
Installation 10 Einbaurichtung Modul MEGA32 Das Modul Mega128 hat die Steckverbinder so angeordnet, daß ein falscher Einbau des Moduls nicht möglich ist. Der Ausbau erfolgt durch vorsichtiges Heraushebeln des Moduls mit einem geeigneten Werkzeug aus der Fassung. Um ein Verbiegen der Anschlüsse zu vermeiden sollte das Hebeln von mehreren Seiten erfolgen. Installation des USB Treibers Bitte verbinden Sie das Application Board mit einem Netzgerät.
11 C-Control Pro Mega Series Es ist hier dann "Software von einer Liste oder bestimmten Quelle installieren" anzuwählen und auf "Weiter" zu klicken.
Installation Danach ist der Pfad zum Verzeichnis des Treibers anzugeben. Hat man die Software nach "C: \Programme" installiert, ist der Pfad "C:\Programme\C-Control-Pro\FTDI USB Driver".
13 C-Control Pro Mega Series Die Nachricht "C-Control Pro USB Device hat den Windows-Logo-Test nicht bestanden...." ist ganz normal. Sie besagt nicht, daß der Treiber beim Windows-Logo-Test versagt hat, sondern daß der Treiber am (ziemlich kostspieligen) Test in Redmond nicht teilgenommen hat. An dieser Stelle einfach "Installation fortsetzen" drücken. Nach ein paar Sekunden sollte der USB Treiber dann fertig installiert sein.
Kapitel 3
15 3 C-Control Pro Mega Series Hardware Dieses Kapitel beschreibt die Hardware die bei der C-Control Pro Serie zur Anwendung kommt. Beschrieben werden die Module von C-Control Pro Mega32 und C-Control Pro Mega128. Weitere Abschnitte erklären Aufbau und Funktion der zugehörigen Application Boards, und die mitgelieferten LCD Module, sowie Tastatur. 3.
Hardware 16 · Anwenderfunktionen · RAM und EEPROM Schnittstelle In der Hauptsache arbeitet der Interpreter den Bytecode ab, der vom Compiler generiert wurde. Weiter sind die meisten Bibliotheksfunktionen in ihm integriert, damit das Bytecodeprogramm z.B. auf Hardwareports zugreifen kann. Die RAM und EEPROM Schnittstelle wird vom Debugger der IDE benutzt, um Zugang zu Variablen zu bekommen, wenn der Debugger bei einem Breakpoint angehalten hat.
17 3.2 C-Control Pro Mega Series LCD Matrix Die vollständigen Datenblätter finden sich auf der CD-ROM im Verzeichnis "Datasheets". CHARACTER MODULE FONT TABLE (Standard font) Character modules with built in controllers and Character Generator (CG) ROM & RAM will display 96 ASCII and special characters in a dot matrix format. Then first 16 locations are occupied by the character generator RAM.
Hardware 18 low-power Mikrocontroller mit Advanced RISC Architecture.
19 C-Control Pro Mega Series Ist x ein digitaler Messwert, dann errechnet sich der entsprechende Spannungswert u wie folgt: u = x * Referenzspannung / 1024 Takterzeugung Die Takterzeugung erfolgt durch einen 14,7456MHz-Quarzoszillator. Alle zeitlichen Abläufe des Controllers sind von dieser Taktfrequenz abgeleitet. Reset Ein Reset bewirkt die Rückkehr des Microcontrollersystems in einen definierten Anfangszustand.
Hardware 20 Entwicklungsumgebung keine Programme mehr zum C-Control Pro übertragen kann. Auch Ein- und Ausgänge der Timer, A/D Wandler, I2C und die serielle Schnittstelle sind mit einigen Port Pins verbunden. PLM-Ports Es stehen zwei Timer für PLM zur Verfügung. Timer_0 mit 8 bit und Timer_1 mit 16 bit. Diese können zur D/A-Wandlung, zur Ansteuerung von Servomotoren im Modellbau, oder zur Ausgabe von Tonfrequenzen benutzt werden.
21 C-Control Pro Mega Series Takt Taktfrequenz (Quarzoszillator) Mechanik äußere Abmessungen ohne Pins ca. Masse Pinraster Pinanzahl (zweireihig) Abstand der Reihen 14,7456MHz 53 mm x 21mm x 8 mm ca. 90g 2,54mm 40 15,24mm Ports Max. zulässiger Strom aus digitalen Ports Zulässige Summe der Ströme an digitalen Ports Zulässige Eingangsspannung an Portpins (digital und A/ D) Interne Pullup Widerstände (abschaltbar) 3.3.2 ± 20 mA 200mA –0,5V ...
Hardware 22 Leuchtdioden Es stehen 5 Leuchtdioden zur Verfügung. LD3 (grün) befindet sich an der Frontseite unter dem DCAnschluß und leuchtet, wenn die Versorgungsspannung vorhanden ist. LD4 und LD5 zeigen den Status der USB-Schnittstelle an (siehe Abschnitt USB). Die grünen Leuchtdioden LD1 und LD2 befinden sich neben den vier Tasten und stehen dem Anwender frei zur Verfügung. Sie sind über einen Vorwiderstand an VCC gelegt. Über Jumper kann LD1 an PortD.6 und LD2 an PortD.7 angeschlossen werden.
23 C-Control Pro Mega Series so können die 12 Eingänge als zusätzliche Digitaleingänge verwendet werden. Die Tastatur verfügt über einen 13-poligen Anschluß (einreihig) und wird an X15 so angesteckt, daß das Tastenfeld zum Application Board zeigt. Die einzelnen 12 Leitungen der Tastatur werden über PL(parallel load - KEY-E) in die Schieberegister der 74HC165 übernommen. Dann wird über einzelnes Triggern von CP (clock input EXT-SCK) die einzelnen Bits zu Q7 gelatched.
Hardware 24 einigen Volt gegen GND messen. RxD ist hochohmig. An der 9-poligen SUB-D Buchse des Application Boards liegt RxD an Pin 3 und TxD an Pin 2. Der GND-Anschluß liegt auf Pin 5. Es werden für die serielle Datenübertragung keine Handshakesignale verwendet. Eine Kabelverbindung mit Anschluß an die NRZ-Pins TxD, RxD, RTS darf bis zu 10 Metern lang sein. Es sind nach Möglichkeit geschirmte Normkabel zu verwenden.
25 C-Control Pro Mega Series 2,54 mm Pinraster Verdrahtungsfeld Umgebungsbedingungen 0°C … 70°C 20% … 60% Bereich der zulässigen Umgebungstemperatur Bereich der zulässigen relativen Umgebungsluftfeuchte Versorgungsspannung 8V … 24V Bereich der zulässigen Versorgungsspannung Stromaufnahme ohne externe Lasten max. zulässiger Dauerstrom aus der stabilisierten 5V-Spannung 3.3.3 ca. 125mA 200mA Pinzuordnung PortA bis PortD werden für direkte Pin-Funktionen (z.B.
Hardware 3.3.4 22 23 24 25 26 27 28 29 30 31 32 33 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 PortC.0 PortC.1 PortC.2 PortC.3 PortC.4 PortC.5 PortC.6 PortC.7 PA7 PortA.7 34 PA6 35 16 17 18 19 20 21 22 23 26 SCL SDA EXT-SCL EXT-SDA I2C-Interface I2C-Interface 7 AVCC GND AREF ADC7 RX_BUSY PortA.6 5 ADC6 TX_REQ PA5 PortA.5 5 ADC5 KEY_EN 36 PA4 PortA.4 4 ADC4 LCD_EN 37 PA3 PortA.3 3 ADC3 EXT_SCK 38 PA2 PortA.2 2 ADC2 EXT_DATA 39 40 PA1 PA0 PortA.1 PortA.
27 C-Control Pro Mega Series Jumperpositionen im Auslieferzustand JP4 JP4 dient zum Umschalten der Betriebsspannung (Netzteil oder USB). Das Application Board sollte mit Netzteil und Spannungsregler betrieben werden (Auslieferzustand). Der maximal entnehmbare Strom der USB Schnittstelle ist kleiner als der des Netzteils. Ein Überschreiten kann zu Schäden am USB Interface des Computers führen. JP6 Bei Verwendung des Displays kann mit JP6 die Beleuchtung (back light) abgeschaltet werden.
D C B 1 C3 10NF/16V * D1 BAS70 * GND VCC SCHUTZHAUBE-DIL40 * X1 R1 20K * VCC GND X1 40 41 42 43 44 1 2 3 9 10 11 12 13 14 15 16 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 4 AGND PA0 (ADC0) PA1 (ADC1) PA2 (ADC2) PA3 (ADC3) PA4 (ADC4) RESET PA5 (ADC5) PA6 (ADC6) PB0 (XCK/T0) PA7 (ADC7) PB1 (T1) PB2 (AIN0/INT2) PB3 (AIN1/OC0) PB4 (SS) PB5 (MOSI) PC0 (SCL) PB6 (MISO) PC1 (SDA) PB7 (SCK) PC2 (TCK) PC3 (TMS) PC4 (TDO) PD0 (RXD) PC5 (TDI) PD1 (TXD) PC6 (TOSC1) PD2 (INT0) PC7
RESET VCC H2 H3 TL36W000050 D3 1N4007 H4 6 5 SCL SDA IC2 VCC D4 1N4007 D2 1N4007 GND 7 1 2 3 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 GND C6 100NF/50V GND VCC GND VIN VOUT IC3 LM78M05 JP4 1 2 3 JUMPER 3 C7 10NF/50V GND 1 L1 GND 3 LED1 LED2 VUSB VCC LD3 PAD2 PAD1 GND LD2 GND C13 10UF/35V VREG LD1 C9 100NF/50V GND VCC C15 100NF/50V GND GND VCC R1 R2 R3 390E 390E 390E VCC C32 100NF/50V VCC BLM21A 102SPT AREF PAD3 AREF C14 100NF/50V VCC AV
KEY-E LCD-E EXT-SCK EXT-DATA KEY-E LCD-E R23 1K GND GND 8 EXT-SCK 7 9 15 1 2 10 7 9 15 1 2 10 9 1 2 EXT-DATA Q7 Q7 3 4 5 6 10 11 12 13 GND 74HC165 D0 D1 D2 D3 D4 D5 D6 D7 KEY03 KEY06 KEY09 KEY02 GND KEY02 KEY09 KEY06 KEY03 KEY12 KEY05 KEY01 KEY11 KEY04 KEY10 KEY08 VCC 11 12 13 14 3 4 5 6 KEY08 KEY10 KEY04 KEY11 KEY07 KEY01 KEY05 KEY12 KEY07 74HC165 D0 D1 D2 D3 D4 D5 D6 D7 11 12 13 14 3 4 5 6 GND CE PL CP DS IC9 Q7 Q7 CE PL CP DS IC8 VCC D0 D1
4X1 1 2 3 4 X16 RXD-USB TXD-USB GND VCC GND GND 0E R11 27E GND XF1 28 2K2 1 2 3 4 GND 31 EECS 32 1 EESK EEDATA 2 R19 XF2 33PF/16V C27 27 4 5 Q2 6.
Hardware 3.3.5.
33 3.4 C-Control Pro Mega Series Mega128 Mega128 Übersicht Der Mikrocontroller ATmega128 stammt aus der AVR-Familie von ATMEL. Es handelt sich um einen low-power Mikrocontroller mit Advanced RISC Architecture.
Hardware 34 External and Internal Interrupt Sources Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby, and Extended Standby 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.4.
35 C-Control Pro Mega Series ein SRAM mit 64kB Speichertiefe. Das EEPROM ist über eine I2C Schnittstelle ansprechbar. Hinweis: Detailliertere Informationen findet man in den PDF-Dateien der IC-Hersteller auf der CControl Pro Software CD. ADC-Referenzspannungserzeugung Der Mikrocontroller verfügt über einen Analog-Digital-Wandler mit einer Auflösung von 10 Bit. Das heißt, gemessene Spannungen können als ganze Zahlen von 0 bis 1023 dargestellt werden.
Hardware 36 Highpegel befindet. In der weiteren Verarbeitung im Programm werden die logischen Werte von einzelnen Eingangsports als 0 ("low") oder -1 ("high") dargestellt. Pins nehmen Werte von 0 oder 1 an, Byteports 0 bis 255. Ausgangsports können über eine interne Treiberschaltung digitale Spannungssignale ausgeben. Angeschlossene Schaltungen können einen bestimmten Strom aus den Ports ziehen (bei High-Pegel) bzw. in diesen speisen (bei Low-Pegel).
37 C-Control Pro Mega Series Hinweis: detailliertere Informationen findet man in den PDF-Dateien der IC-Hersteller auf der CControl Pro Software CD. Alle Spannungsangaben beziehen sich auf Gleichspannung (DC). Umgebungsbedingungen Bereich der zulässigen Umgebungstemperatur Bereich der zulässigen relativen Umgebungsluftfeuchte Versorgungsspannung 0°C … 70°C 20% … 60% Bereich der zulässigen Versorgungsspannung Stromaufnahme des Moduls ohne externe Lasten 4,5V … 5,5V ca.
Hardware 38 Datenübertragung, so leuchten beide LEDs. Das gilt auch für den Debugmodus. Ein Blinken der roten LED zeigt einen Fehlerzustand an. Für die USB-Kommunikation wird die SPI-Schnittstelle des Mega128 verwendet (PortB.0 bis PortB.4, PortE.5) und müssen über die entsprechenden Jumper verbunden sein. Hinweis: Detailliertere Informationen zum Mega 8 findet man in den PDF-Dateien der IC-Hersteller auf der C-Control Pro Software CD.
39 C-Control Pro Mega Series LCD-Kontrast (LCD ADJ) Die beste Sichtbarkeit der LCD-Zeichen ergibt sich bei frontaler Betrachtung. Gegebenenfalls muß der Kontrast etwas nachgeregelt werden. Der Kontrast kann über den Drehwiderstand PT1 eingestellt werden. Tastatur Für Benutzereingaben steht eine 12-er Tastatur (0..9,*,#) zur Verfügung. (X15: 13-poliger Stecker). Die Tastatur ist 1 aus 12 organisiert, d.h. jeder Taste ist eine Leitung zugeordnet.
Hardware 40 Das Application Board wird über ein Steckernetzteil (9V/250mA) versorgt. Je nach zusätzlicher Beschaltung des Application Boards kann es später notwendig sein ein Netzteil mit höherer Leistung zu verwenden. Ein Festspannungsregler erzeugt die interne stabilisierte Versorgungsspannung von 5V. Alle Schaltungsteile auf dem Application Board werden mit dieser Spannung versorgt. Durch die Leistungsreserven des Netzteils stehen diese 5V auch zur Versorgung externer ICs zur Verfügung.
41 C-Control Pro Mega Series liegt RxD0 an Pin 3 und TxD0 an Pin 2. Der GND-Anschluß liegt auf Pin 5. Es werden für die serielle Datenübertragung keine Handshakesignale verwendet. Die zweite serielle Schnittstelle ist auf eine 3polige Stiftleiste geführt. RxD1 liegt an Pin 2 und TxD1 an Pin 1, Pin3=GND. Eine Kabelverbindung mit Anschluß an die NRZ-Pins TxD, RxD, RTS darf bis zu 10 Metern lang sein. Es sind nach Möglichkeit geschirmte Normkabel zu verwenden.
Hardware 3.4.3 42 Pinzuordnung PortA bis PortG werden für direkte Pin-Funktionen (z.B. Port_WriteBit) von 0 bis 52 gezählt, siehe "PortBit".
43 3.4.
Hardware 44 Jumperpositionen im Auslieferzustand Ports A bis G Die dem Mega128 Modul zur Verfügung stehenden Ports sind in dieser Grafik eingezeichnet. Dabei ist die gelbe Seite dem Modul verbunden, die hellblaue Seite verbindet zu Bauteilen des Application Boards. Wird ein Jumper gezogen, so wird die Verbindung zum Application Board unterbrochen. Dies kann zur Störung von USB, RS232 etc. auf dem Board führen. Die grau eingezeichnete Markierung stellt den ersten Pin (Pin 0) des Ports dar.
45 C-Control Pro Mega Series JP7 Wird das SRAM auf dem Application Board nicht benötigt, dann kann es mit JP7 deaktiviert werden und diese Ports stehen dann dem Anwender zur Verfügung. Um das SRAM zu deaktivieren muss der Jumper nach links umgelegt werden (Orientierung: serielle Schnittstelle zeigt nach links), so das die linken beiden Stifte von JP7 verbunden sind. J4 Am Jumper J4 ist die 2. serielle Schnittstelle des Mega128 über einen Pegelwandler angeschlossen.
46 14 16 15 14 13 12 9 8 7 6 5 4 3 2 1 15 11 16 10 X3 Hardware IC1 PF0 PE1 PF1 PE2 PE3 PE4 9 7 PE5 8 8 PE6 9 PE7 10 PB0 11 5 12 4 13 3 14 15 2 16 1 17 X1 25 9 26 10 27 28 11 29 12 30 51 50 49 PA3 48 PB4 PA4 47 PB5 PA5 46 PB6 PA6 45 PB7 PA7 PD0 PC7 PD1 PC6 PD2 PC5 PD3 PC4 PD4 PC3 38 PD5 PC2 37 5 PD6 PC1 36 6 PD7 PC0 33 PG0 16 34 PG1 43 PG2 20 54 PA2 15 4 55 PA0 PB3 14 19 56 PF7 PB2 32 8 57 PF6 PA1
Applicationboard MOD3 X6 X6A 13 4 14 3 15 2 16 1 MOD4 12 5 13 6 14 7 15 8 16 11 7 9 8 PG0 PG1 PG2 PG3 PG4 4 5 6 7 8 b0805j GND 3 4 1 5 2 EXT-A2 b0805j GND VCC AVCC BLM21A 3 4 4 GND C6 b0805j 100nF C32 b0805j 10nF 16 1 VCC VUSB 4 X5A 1 1 2 2 3 3 4 4 5 5 6 6 7 7 EXT-RXD0 EXT-TXD0 EXT-T1 TX-REQ EXT-T2 EXT-DATA 8 X2 1 1 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 2 3 4 5 6 7 8 2 3 4 5 6 7 8 Project: MEGA128app_V2 PCB-Design: MEGA Appl.
Hardware 48 VCC b0805j 390R R9 b0805j 390R R8 b0805j 390R 0R b0805j SIWU LD6 $splname LD4 R27 0R 0R b0805j b0805j 2 GND $splname $splname LD5 4 3 R7 X16 2 1 LL4148 RES_FT R13 sod80 D5 R42 VCC VCC b0805j 22k R18 VCC 7 5 R17 b0805j 27 XTIN b0805j Q2 33pF 12 2 EEDATA GND R19 2 17 D6 D7 PB3 PB4 PB5 VCC AREF AGND 21 GND PC0 23 PD1 PC1 24 32 PD2 PC2 25 PD0 1 PD3 2 PC3 26 PD4 9 PD5 PC4 27 PD6 PC5 28 10 11 PD7 D0 D1 D2 D3 D4
49 3.4.5.
Hardware © 2008 Conrad Electronic 50
Kapitel 4
IDE 4 52 IDE Die C-Control Pro Benutzeroberfläche (IDE) besteht aus folgenden Hauptelementen: Sidebar für Projekt Dateien Editor Fenster Compiler Meldungen C-Control Ausgaben Variablenfenster © 2008 Conrad Electronic Mehrere Dateien können hier zu einem Projekt abgelegt werden. Es können beliebig viele Editor Fenster geöffnet werden, um Dateien zu editieren. Fehlermeldungen und allgemeine Compilerinformationen werden hier angezeigt. Ausgabe von Debug Nachrichten der CompactC Programme.
53 4.1 C-Control Pro Mega Series Projekte Jedes Programm für das C-Control Pro Modul wird durch ein Projekt konfiguriert. In einem Projekt steht, welche Quelldateien und Bibliotheken benutzt werden. Auch sind hier die Einstellungen des Compilers vermerkt. Ein Projekt besteht aus der Projektdatei mit der Endung ".cprj" und den dazugehörigen Quelldateien. 4.1.1 Projekterstellung Unter dem Menü Projekt kann man mit dem Aufruf von Neu die Projekt erstellen Dialogbox aufrufen.
IDE 54 Unter dem Menüpunkt Projekt kann mit Kompilieren (F9) das aktuelle Projekt vom Compiler übersetzt werden. Die Compiler Meldungen werden in einem eigenen Fensterbereich ausgegeben. Kommt es bei der Kompilierung zu Fehlern, so wird pro Zeile ein Fehler beschrieben. Die Form ist: Dateiname(Zeile,Spalte): Fehlerbeschreibung Man kann die Fehlerposition im Quelltext über die Befehle Nächster Fehler (F11) oder Vorheriger Fehler (Shift-F11) finden. Beide Befehle sind im Menüpunkt Projekt.
55 C-Control Pro Mega Series Projektdateien Hat man zum Projekt Dateien hinzugefügt, dann kann man die Dateien mit einem Doppelklick auf den Dateinamen öffnen. Mit einem Rechtsklick erscheinen weitere Optionen: · · · · · Nach Oben - Die Projektdatei wandert in der Liste nach oben (auch mit Strg - Pfeil rauf) Nach Unten - Die Projektdatei wandert unten (auch mit Strg - Pfeil runter) Umbenennen - Der Name der Projektdatei wird geändert Entfernen - Die Datei wird aus dem Projekt entfernt.
IDE 4.1.4 56 Projektoptionen . Für jedes Projekt können die Compilereinstellungen einzeln geändert werden. Die Einträge Autor, Version, Kommentar können frei beschriftet werden. Sie dienen nur als Erinnerungsstütze um sich später einmal besser an Einzelheiten des Projektes erinnern zu können. In "CPU Auswahl" legt man die Zielplattform des Projekts fest. Klickt man auf "Hardware Abfragen" dann wird das angeschlossene C-Control Pro Modul abgefragt und die CPU richtig ausgewählt.
57 C-Control Pro Mega Series Man kann in den Optionen auch wählen, ob eine Map Datei erzeugt werden soll. 4.1.5 Threadoptionen Um einen Thread zur Laufzeit aktivieren zu können, muß er in dieser Auswahlbox aktiviert werden und die Parameter Stackgröße und Zykluszeit eingestellt werden. Jedem zusätzlichen Thread, außer dem Hauptprogramm, wird ein Platz auf dem Stack zugewiesen, den er nicht überschreiten darf.
IDE 58 Es werden nur die Dateien zur Kompilierung hinzugezogen, deren CheckBox auch selektiert wurde. Die Liste kann mit Hilfe des Pfad Texteingabefeldes "Bibliotheksname" und den Buttons im Dialog geändert werden: · · · · 4.2 Einfügen - Der Pfad wird zur Liste hinzugefügt. Ersetzen - Der selektierte Eintrag in der Liste wird durch den Pfadnamen ersetzt. Löschen - Der selektierte Listeneintrag wird gelöscht.
59 C-Control Pro Mega Series Ein Klick auf den Bereich links neben den Textanfang setzt dort einen Haltepunkt (Breakpoint). Dazu muß vorher der Quelltext fehlerfrei mit "Debug Info" kompiliert worden sein, und in der entsprechenden Zeile tatsächlich ausführbarer Programmtext stehen (z.B. keine Kommentarzeile o. ä.). Funktionsübersicht Auf der linken Seite findet man eine Übersicht aller definierten syntaktisch korrekten Funktionen. Die Funktionsnamen samt Parameter werden dort dargestellt.
IDE 60 Code-Falten Um im Editor eine bessere Übersicht zu behalten, kann der Quelltext gefaltet werden. Sobald der im Editor enthaltene syntaktische Analyzer eine definierte Funktion erkennt, werden auf der linken Seite der Bereich der Funktion durch Balken signalisiert. Ein Klick auf das Minuszeichen im quadratischen Kästchen, und von der Funktion ist nur noch die erste Zeile zu sehen. Ein weiterer Klick auf das Pluszeichen, und der Quelltext entfaltet sich wieder.
61 C-Control Pro Mega Series Editor Ansicht Erneuern Sollte der syntaktische Analyzer einmal fehllaufen und definierte Funktionsblöcke nicht mehr erkennen (passiert selten mal bei Suchen - Ersetzen), dann kann man mit dem Befehl Erneuern aus dem Bearbeiten Pull-down Menü, die syntaktische Analyse wiederherstellen. 4.2.1 Editorfunktionen Unter dem Menüpunkt Bearbeiten sind die wichtigsten Editorfunktionen zu finden: · Rückgängig (Ctrl-Z) - führt eine Undo Operation aus.
IDE 62 Suchen/Ersetzen Dialog · · · · · · Text to find - Eingabefeld für den zu suchenden Text. Replace with - der Text der den gefunden Text ersetzt. Case Sensitive - unterscheidet Groß- und Kleinschreibung. Whole words only - findet nur ganze Wörter und keine Teilzeichenketten. Regular expressions - aktiviert die Eingabe von regulären Ausdrücken in der Suchmaske. Prompt on replace - vor dem Ersetzen wird beim Benutzer nachgefragt.
63 4.2.
IDE Shift + Down Shift + Ctrl + Left Shift + Ctrl + Right Shift + PgUp Shift + PgDn Shift + Ctrl + PgUp Shift + Ctrl + PgDn Shift + Ctrl + Home Shift + Ctrl + End Shift + Home Shift + End Alt + Shift + Left Alt + Shift + Right Alt + Shift + Up Alt + Shift + Down Alt + Shift + Ctrl + Left Alt + Shift + Ctrl + Right Alt + Shift + PgUp Alt + Shift + PgDn Alt + Shift + Ctrl + PgUp Alt + Shift + Ctrl + Alt + PgDn Alt + Shift + Ctrl + Home Alt + Shift + Ctrl + End Alt + Shift + Home Alt + Shift + End Ctrl + C; Ct
65 C-Control Pro Mega Series Esc Ctrl + digit (0-9) Shift + Ctrl + (0-9) Ctrl + Space 4.2.4 Reset selection Go to Bookmark digit (0-9) Set Bookmark digit (0-9) Auto completion popup Reguläre Ausdrücke Die Suchfunktion im Editor unterstützt reguläre Ausdrücke. Damit können Zeichenketten sehr flexibel gesucht oder ersetzt werden. ^ $ .
IDE 4.3 66 C-Control Hardware Unter dem Menüpunkt C-Control können die Hardware relevanten Funktionen ausgeführt werden. Dies beinhaltet Übertragen und Starten des Programms auf der Hardware, sowie Passwortfunktionen. 4.3.1 Programm starten Programmübertragung Ist ein Projekt fehlerfrei übersetzt worden, so muß der Bytecode erst auf den Mega 32 oder Mega 128 übertragen werden, bevor er ausgeführt werden kann. Dies geschieht mit dem Befehl Übertragen (Shift-F9) aus dem Menü C-Control.
67 4.3.2 C-Control Pro Mega Series Ausgaben Um Debug Nachrichten anzuzeigen, gibt es einen "Ausgaben" Fensterbereich. Es wird hier angezeigt, wann der Bytecode Interpreter gestartet und beendet worden ist, und wie lange (in Millisekunden) der Interpreter ausgeführt wurde. Die Ausführungszeit ist natürlich nicht aussagekräftig, wenn der Interpreter im Debug Modus angehalten wurde. Im Ausgaben Fenster kann aber auch der Benutzer seine eigenen Debugnachrichten anzeigen lassen.
IDE 68 der man PIN, Interpreter und Programm löschen kann. 4.3.4 Versionsüberprüfung Da die C-Control Pro Mega Serie mehrere Hardware Plattformen zu unterstützt, ist es wichtig, die aktuellen Versionsnummern von Bootloader, Interpreter und Hardwareversion im Auge zu behalten. Dies ist mit Hardware Version im Menü C-Control möglich. 4.4 Debugger Um den Debugger zu aktivieren, muß das Projekt erst fehlerfrei mit Debug Code kompiliert worden und zum Modul übertragen worden sein.
69 C-Control Pro Mega Series Ist man im Debug Modus, so springt man mit Starten (F10) zum nächsten Haltepunkt. Ist kein Breakpoint gesetzt, so wird das Programm normal abgearbeitet, mit der Ausnahme, daß der Programmlauf mit Programm Stoppen angehalten werden kann. Dies funktioniert aber nur wenn das Programm aus dem Debug Modus heraus gestartet wurde. Hat der Debugger im Programm angehalten (der grüne Balken ist sichtbar), so kann man das Programm im Einzelschritt (Singlestep) ausführen lassen.
IDE 70 Die Anzahl der Breakpoints ist auf 16 begrenzt, weil diese Information beim Lauf des Bytecode Interpreters im RAM mitgeführt wird. Andere Debugger setzen Haltepunkte direkt in den Programmcode. Dies ist hier nicht erwünscht, da es die Lebenszeit des Flashspeichers (ca. 10000 Schreibzugriffe) drastisch reduzieren würde. 4.4.2 Variablen Fenster Man kann sich im Debugger den Inhalt von Variablen anzeigen lassen. Dafür positioniert man den Mauszeiger über der Variablen, und nach ca.
71 C-Control Pro Mega Series Um eine Variable in die Liste der überwachten Variablen einzutragen, existieren zwei Möglichkeiten. Man kann zum einen den Cursor am Beginn einer Variable im Texteditor positionieren, und dann mit Rechtsklick Variable Einfügen anwählen. Die andere Variante geht über das Kontextmenü in der Variablenliste, das man auch über Rechtsklick aktivieren kann: Wählt man dort Variable Einfügen an, so kann man die zu überwachende Variable in der Liste als Text eintragen.
IDE 72 Unter bestimmten Bedingungen, wird anstatt einem Wert in der Liste, eine Fehlermeldung angezeigt: kein Debug Code falsche Syntax Funktion unbekannt Variable unbekannt nicht im Debug mode kein Kontext nicht aktuell es wurde kein Debug Code generiert bei der Texteingabe wurden ungültige Zeichen für die Variable eingegeben der Funktionsname ist nicht bekannt der Variablenname ist nicht bekannt der Debug Modus wurde nicht aktiviert lokale Variablen können nur angezeigt werden, wenn man sich in der Fun
73 C-Control Pro Mega Series Der Inhalt eines Array Fensters kann bei jedem Halt des Debuggers, oder bei einem Einzelschritt nicht mehr aktuell sein. Wird bei jedem Einzelschritt im Debugger mehrere Array Fenster neu aktualisiert, so können Verzögerungen auftreten, da die Daten immer vom Modul geladen werden müssen. Es gibt daher drei Arbeitsmodi: Auto Aktualisieren bei Haltepunkt Aktualisieren manuell Aktualisieren 4.
IDE 74 Empfangene Zeichen werden direkt im Terminalfenster dargestellt. Man kann Zeichen auf zwei verschiedene Arten senden. Zum einen kann man in das Fenster klicken und die Zeichen direkt über die Tastatur eingeben, oder man schreibt die Zeichen in die ASCII Eingabezeile und drückt den Senden Knopf. Die ASCII Zeichen können auch als Integerzahlen in die Integer Eingabezeile. Selektiert man Zeilenende, wird immer ein Carriage Return (13) mitgeschickt.
75 4.6.1 C-Control Pro Mega Series Editoreinstellungen · Auto indent mode - drückt man Enter wird der Cursor auf der nächsten Zeile bis zum Anfang der vorherigen Zeile eingerückt. · Overwrite mode - ist diese Option an, ist Überschreiben als Standard eingestellt. · Optimal fill - "Automatisches Einrücken" füllt zuerst mit Tabulatoren und den Rest mit Leerzeichen. · Backspace unindents - mit Backspace springt man an die Stelle an der die Zeichen der vorherigen Zeile beginnen.
IDE 76 · Enable text dragging - Selektierter Text kann mit der Maus "gedragged" (bei gedrückter linker Maustaste verschoben) werden. · Double click line - normalerweise selektiert ein Doppelklick ein Wort. Bei Block indent wird die Anzahl der Leerzeichen eingetragen, mit der ein selektierter Block mit der Tabulator Taste eingerückt bzw. ausgerückt wird. Das Eingabefeld Tab stops bestimmt wie viele Zeichen ein Tabulator breit ist.
77 C-Control Pro Mega Series In dem Dialog können die Fontattribute der Schrift, die Vordergrund und Hintergrundfarbe geändert werden. Mit Multiline border kann ein Rahmen um die entsprechenden Zeichen oder Wörter gesetzt werden. Auch ist es mit Capitalization Effect möglich auf die Groß-Kleinschreibung Einfluß zu nehmen.
IDE 78 Default, Line separator and Sub background werden nicht benutzt. Aufgrund technischer Einschränkungen, wird dieser Dialog immer auf englisch angezeigt! 4.6.3 Compilervoreinstellung In der Compilervoreinstellung können die Standardwerte konfiguriert werden, die beim Erzeugen eines neues Projektes gespeichert werden. Die Voreinstellung ist unter Compiler im Menü Optionen zu erreichen. Eine Beschreibung der Optionen befindet sich bei Projektoptionen.
79 4.6.4 C-Control Pro Mega Series IDE Einstellungen Man kann einzelne Aspekte der IDE konfigurieren. · Übertragung nach Kompilieren Abfrage - Wurde ein Programm kompiliert, aber nicht zum CControl Modul übertragen, erfolgt eine Nachfrage beim Benutzer ob das Programm gestartet werden soll. · Letztes Projekt wieder öffnen - Das letzte offene Projekt wird beim Starten der C-Control Pro IDE wieder geöffnet.
IDE 80 · Mehrere Instanzen von C-Control Pro zulassen - Wird die C-Control Pro Oberfläche mehrfach gestartet, kann es zu Konflikten bezüglich der USB Schnittstelle kommen.
81 C-Control Pro Mega Series Mit der Taste "Schnittstellensuche" werden alle Schnittstellen durchsucht, bis die Kommandozeilen Schnittstelle des C-Control Pro reagiert. Damit ein Application Board erkannt wird, muß der Strom eingeschaltet sein und die Firmware darf sich nicht aufgehangen haben. Am besten vor der Suchaktion einmal aus- und wieder einschalten.
IDE 82 Ist z.B. wegen einer Firewall, der Zugang auf das Internet durch einen Proxy beschränkt, so können die Proxy Einstellungen wie Adresse, Benutzername und Passwort in diesem Dialog angegeben werden. Sind im MS Internet Explorer Proxy Daten eingetragen, so haben diese eine höhere Priorität, und überschreiben die Einstellungen in diesem Dialog. 4.6.4.3 Terminal Hier lassen sich die seriellen Parameter des eingebauten Terminalprogramms einstellen.
83 4.6.4.4 C-Control Pro Mega Series Werkzeuge In den Werkzeug Einstellungen lassen sich die Einträge einfügen, löschen und verändern, mit denen man beliebige Programm aus der IDE schnell und einfach starten kann. Die Namen der Programme sind dann im "Werkzeug" Pulldown Menü zu finden und können mit einem Klick gestartet werden.
IDE 84 Für jedes Programm das hinzugefügt wird, kann man einen eigenen Namen, den Ausführungspfad zur Datei, sowie die zu übergebenden Parameter einstellen. 4.7 Fenster Sind im Editorbereich mehrere Fenster geöffnet, so kann man über Kommandos im Fenster Menü, die Editorfenster automatisch anordnen lassen. · Überlappend - die Fenster werden übereinander angeordnet, jedes Fenster ist dabei etwas weiter nach unten rechts verschoben als das vorhergehende.
85 4.8 C-Control Pro Mega Series Hilfe Unter dem Menüpunkt Hilfe kann man sich mit Inhalt (Taste F1) die Hilfedatei aufrufen. Der Menüpunkt Programmversion öffnet folgendes "Versionsinformations" Fenster und kopiert gleichzeitig den Inhalt in die Ablage. Soll eine Support email an Conrad geschrieben werden, so sind diese Informationen wichtig. Da sie beim Aufruf von Programmversion auch gleich in der Ablage sind, kann man diese Daten bequem an das Ende einer email einfügen.
Kapitel 5
87 C-Control Pro Mega Series 5 Compiler 5.1 Allgemeine Features Dieser Bereich gibt Auskunft über Compiler Eigenschaften und Features die unabhängig von der benutzten Programmiersprache sind. 5.1.1 externes RAM Auf dem Application Board des Mega128 ist externes RAM vorhanden. Dieses RAM wird vom Interpreter automatisch erkannt und für das auszuführende Programm genutzt. Statt ca. 2665 Bytes stehen dann ca. 63848 Bytes als Programmspeicher zur Verfügung.
Compiler 88 Bedingte Kompilierung #ifdef symbol ... #else // optional ... #endif Man kann kontrollieren, welche Teile eines Quelltextes wirklich kompiliert werden. Nach einer #ifdef symbol Anweisung wird der folgende Text nur kompiliert, wenn das symbol auch durch #define symbol definiert wurde. Ist eine optionale #else Anweisung angegeben, so wird der Quelltext nach #else bearbeitet, wenn das symbol nicht definiert ist.
89 C-Control Pro Mega Series __FILE__ __FUNCTION__ Name der aktuellen Quelldatei aktueller Funktionsname Beispiel Es werden Zeilennummer, Dateiname und Funktionsname ausgegeben. Da der Dateiname lang werden kann, bitte das character Array großzügig dimensionieren: char txt[60]; txt=__LINE__; Msg_WriteText(txt); Msg_WriteChar(13); txt=__FILE__; Msg_WriteText(txt); Msg_WriteChar(13); txt=__FUNCTION__; Msg_WriteText(txt); Msg_WriteChar(13); 5.1.
Compiler 90 Globale Variablen Laenge Position (RAM Anfang) --------------------------------------------------------------Gesamtlaenge: 0 bytes Lokale Variablen Laenge Position (Stackrelativ) ----------------------------------------------------------------Funktion Pulse() count 2 4 i 2 0 Gesamtlaenge: 4 bytes Funktion main() count n Gesamtlaenge: 4 bytes 2 2 2 0 Aus dieser Liste ist ersichtlich, daß keine globalen Variablen benutzt werden. Weit existieren zwei Funktionen, "Pulse()" und "main()".
91 C-Control Pro Mega Series druckt: void main(void) { Msg_WriteInt(42); } // die Antwort auf alles Projekte Man kann ein Programm auf mehrere Dateien aufteilen, die in einem Projekt (siehe Projektverwaltung) zusammengefasst sind. Zusätzlich zu diesen Projektdateien kann man zu einem Projekt Bibliotheken hinzufügen, die Funktionen bereitstellen, die vom Programm genutzt werden. 5.2.
Compiler 92 Kommentare Es existieren zwei Arten von Kommentaren, einzeilige und mehrzeilige Kommentare. Dabei wird der Text in den Kommentaren vom Compiler ignoriert. · Einzeilige Kommentare beginnen mit "//" und hören mit dem Zeilenende auf. · Mehrzeilige Kommentare beginnen mit "/*" und hören mit "*/" auf. /* Ein mehrzeiliger Kommentar */ // Ein einzeiliger Kommentar Bezeichner Bezeichner sind die Namen von Funktionen oder Variablen.
93 C-Control Pro Mega Series 5" liefert den Wert "1" (wahr; true). konstante Ausdrücke Ein Ausdruck oder Teile eines Ausdrucks können konstant sein. Diese Teilausdrücke können schon zu Compilerlaufzeit berechnet werden. So wird z.B. 12 + 123 - 15 vom Compiler zu 120 zusammengefaßt. Manchmal müssen Ausdrücke konstant sein, damit sie gültig sind. Siehe z.B. Deklarierung von Array Variablen. 5.2.3 Datentypen Werte haben immer einen bestimmten Datentyp.
Compiler 94 Bei arithmetischen Ausdrücken passiert es sehr oft, daß einzelne Werte nicht vom gleichen Typ sind. So sind die Datentypen im folgenden Ausdruck gemischt (a ist integer variable). a + 5.5 In diesem Fall wird a zuerst in den Datentyp float konvertiert und danach 5.5 addiert. Der Datentyp des Ergebnisses ist auch float.
95 C-Control Pro Mega Series Fließkommazahlen (Datentyp float) dürfen ein Dezimalpunkt und einen Exponenten beinhalten: float x,y; x=5.70; y=2.3e+2; x=-5.33e-1; sizeof Operator Mit dem Operator sizeof() kann die Anzahl der Bytes bestimmt werden, die eine Variable im Speicher belegt. Beispiel: int s; float f: s=sizeof(f); // der Wert von s ist 4 Bei Arrays wird auch nur die Bytelänge des Grunddatentyps zurückgegeben.
Compiler 96 Strings Es existiert kein expliziter "String" Datentyp. Ein String basiert auf einem Array vom Datentyp char. Man muß die Größe des Arrays so wählen, daß alle Zeichen des Strings in das character Array passen. Zusätzlich wird Platz für ein Terminierungszeichen (dezimal Null) benötigt, um das Ende der Zeichenkette anzuzeigen. Beispiel für eine Zeichenkette mit maximal 20 Zeichen: char str1[21]; Als Ausnahme darf man char Arrays Zeichenketten zuweisen.
97 C-Control Pro Mega Series // lokale u ist zugreifbar // x,y nicht zugreifbar da lokal zu Funktion func1 } Globale Variablen haben einen definierten Speicherbereich, der während des gesamten Programmlaufs zur Verfügung steht. Bei Programmstart werden die globalen Variablen mit null initialisiert. Lokale Variablen werden, während der Berechnung einer Funktion, auf dem Stack angelegt. Das heißt, lokale Variablen existieren im Speicher nur während des Zeitraums, in der die Funktion abgearbeitet wird.
Compiler 5.2.5.1 98 Arithmetische Operatoren Alle arithmetischen Operatoren, mit Ausnahme von Modulo, sind für Integer und Fließkomma Datentypen definiert. Nur Modulo ist auf einen Integerdatentyp beschränkt. Es ist zu beachten, daß in einem Ausdruck die Zahl 7 einen Integer Datentyp zugewiesen bekommt. Möchte man explizit eine Zahl vom Datentyp float erzeugen, so ist ein Dezimalpunkt einzufügen: 7.0 Operator 5.2.5.
99 5.2.5.4 C-Control Pro Mega Series << um ein Bit nach links schieben >> um ein Bit nach rechts schieben 1 << 2 3 << 3 0xff >> 6 16 >> 2 4 24 3 4 In- Dekrement Operatoren Inkrement und Dekrement Operatoren sind nur für Variablen mit Integer Datentypen erlaubt. Operator variable++ variable-++variable --variable 5.2.5.
Compiler 5.2.5.6 100 Logische Operatoren Logische Operatoren sind nur für Integer Datentypen erlaubt. Jeder Wert ungleich null gilt als logisch 1. Die null gilt als logisch 0. Operator 5.2.6 Erklärung && logisches Und || logisches Oder ! logisches Nicht Beispiel Ergebnis 1 && 1 5 && 0 0 || 0 1 || 0 !2 !0 1 0 0 1 0 1 Kontrollstrukturen Kontrollstrukturen erlauben es den Programmablauf in Abhängigkeit von Ausdrücken, Variablen oder äußeren Einflüssen zu ändern. 5.2.6.
101 C-Control Pro Mega Series Der ganze Vorgang wiederholt sich solange, bis der Ausdruck den Wert 0 annimmt. Beispiele: do a=a+2; while(a<10); do { a=a*2; x=a; } while(a); Der wesentliche Unterschied der do .. while Schleife zur normalen while Schleife ist der Umstand, daß in einer do .. while Schleife die Anweisung mindestens einmal ausgeführt wird. break Anweisung Eine break Anweisung verläßt die Schleife, und die Programmausführung startet mit der nächsten Anweisung hinter der do .. while Schleife.
Compiler 102 es zum Schleifenabbruch. Wie bei anderen Schleifentypen kann bei Anweisung3, statt einer einzelnen Anweisung, ein Anweisungsblock benutzt werden.
103 C-Control Pro Mega Series a=0; label0: a++; if(a<10) goto label0; } 5.2.6.5 if .. else Eine if Anweisung hat folgende Syntax: if( Ausdruck ) Anweisung1; else Anweisung2; Hinter der if Anweisung folgt in Klammern ein arithmetischer Ausdruck. Wird dieser Ausdruck zu ungleich 0 ausgewertet, dann wird die Anweisung1 ausgeführt. Man kann mit Hilfe des else Befehlswortes eine alternative Anweisung2 definieren, die dann ausgeführt wird, wenn der Ausdruck zu 0 berechnet wurde.
Compiler 5.2.6.6 104 switch Sollen in Abhängigkeit vom Wert eines Ausdrucks verschiedene Befehle ausgeführt werden, so ist eine switch Anweisung sehr elegant: switch( Ausdruck ) { case konstante_1: Anweisung_1; break; case konstante_2: Anweisung_2; break; . . case konstante_n: Anweisung_n; break; default: // default ist optional Anweisung_0; }; Der Wert von Ausdruck wird berechnet. Danach springt die Programmausführung zur Konstante die dem Wert des Ausdrucks entspricht, und führt das Programm dort fort.
105 C-Control Pro Mega Series break Anweisung Ein break verläßt die switch Anweisung. Läßt man vor case das break weg, so werden die Anweisungen auch ausgeführt, wenn zum vorherigen case gesprungen wird: switch(a) { case 1: a++; case 2: a++; // wird auch bei einem Wert von a==1 ausgeführt case 3: a++; // wird auch bei einem Wert von a==1 oder a==2 ausgeführt } In diesem Beispiel werden alle drei "a++" Anweisungen ausgeführt, wenn a gleich 1 ist. 5.2.6.
Compiler 106 continue Anweisung Bei der Ausführung von continue innerhalb einer Schleife kommt es sofort zur erneuten Berechnung des Ausdrucks. In Abhängigkeit vom Ergebnis wird bei ungleich 0 die Schleife wiederholt. Ein Ergebnis von 0 bricht die Schleife ab. Beispiel: while(1) // Endlosschleife { a++; if(a>10) break; // bricht Schleife ab } 5.2.7 Funktionen Um größere Programme zu strukturieren, teilt man sie in mehrere Unterfunktionen auf.
107 C-Control Pro Mega Series } Wie lokale Variablen sind übergebene Parameter nur in der Funktion selber sichtbar. Um die Funktion func1 mit den Parametern aufzurufen, schreibt man beim Aufruf die Parameter in der gleichen Reihenfolge, wie sie bei func1 definiert wurden. Bekommt die Funktion keine Parameter, läßt man die Klammer leer. void main(void) { word a; float f; func1(128,12.0); // man kann numerische Konstanten übergeben ... a=100; f=12.
Compiler i=0; while(str[i]) i++; return(i); 108 // wiederhole solange Zeichen nicht null } void main(void) { int len; char text[15]; text="hallo welt"; len=StringLength(text); } In main wird die Referenz von Text als Parameter an die Funktion StringLength übergeben. Ändert man in einer Funktion einen normalen Parameter, so ist die Änderung außerhalb dieser Funktion nicht sichtbar. Bei Referenzen ist dies anders.
109 C-Control Pro Mega Series + * / % - Addition Subtraktion Multiplikation Division Modulo negatives Vorzeichen Vergleichsoperatoren < > <= >= == != kleiner größer kleiner gleich größer gleich gleich ungleich Bitschiebeoperatoren << >> um ein Bit nach links schieben um ein Bit nach rechts schieben Inkrement/Dekrement Operatoren ++ -- Post/Pre Inkrement Post/Pre Dekrement Logische Operatoren && || ! logisches Und logisches Oder logisches Nicht Bitoperatoren & | ^ ~ 5.2.8.
Compiler default for signed void © 2008 Conrad Electronic do goto static while else if switch word false int true float return unsigned 110
111 5.3 C-Control Pro Mega Series BASIC Die zweite Programmiersprache für das C-Control Pro Mega Modul ist BASIC. Der Compiler übersetzt die BASIC Befehle in einen Bytecode, der vom Interpreter des C-Control Pro abgearbeitet wird. Der Sprachumfang, des hier verwendeten BASIC Dialektes, entspricht in großen Teilen dem Industriestandard der großen Softwareanbieter.
Compiler 112 und LF"). Dabei ist es egal, ob ein oder mehrere "Whitespaces" den Zwischenraum bilden. Einfache Anweisung: a= 5 Eine Anweisung muß nicht notwendigerweise komplett in einer Zeile stehen. Mit dem "_" (Unterstrich) Zeichen ist es möglich, eine Anweisung auf die nächste Zeile auszudehnen. If a=5 _ ' Anweisung über 2 Zeilen a=a+10 Auch ist es möglich mehr als eine Anweisung in einer Zeile zu platzieren. Das ":" (Doppelpunkt) Zeichen trennt dann die einzelnen Anweisungen.
113 C-Control Pro Mega Series Hier werden die Zahlenwerte 2 und 3 mit dem Operator "+" verknüpft. Ein arithmetischer Ausdruck repräsentiert wieder einen Wert. Hier ist der Wert 5. Weitere Beispiele: a - 3 b + f(5) 2 + 3 * 6 Nach "Punkt vor Strich" wird hier erst 3 mal 6 gerechnet und danach 2 addiert. Dieser Vorrang von Operatoren heißt bei Operatoren Präzedenz. Eine Aufstellung der Prioritäten findet sich in der Präzedenz Tabelle. Auch Vergleiche sind arithmetische Ausdrücke.
Compiler 114 Strings Es existiert kein expliziter "String" Datentyp. Ein String basiert auf einem character array. Man muß die Größe des arrays so wählen, daß alle Zeichen des Strings in das character array passen. Zusätzlich wird Platz für ein Terminierungszeichen (dezimal Null) benötigt, um das Ende der Zeichenkette anzuzeigen. Typkonvertierung Bei arithmetischen Ausdrücken passiert es sehr oft, daß einzelne Werte nicht vom gleichen Typ sind.
115 C-Control Pro Mega Series vorzeichenbehaftetem Datentyp lassen sich negative Dezimalzahlen zuweisen, indem ein Minuszeichen vor die Zahl geschrieben wird. Beispiele: Dim a As Word Dim i,j As Integer a=&H3ff i=15 j=-22 a=0x3ff Fließkommazahlen (Datentyp Single) dürfen ein Dezimalpunkt und einen Exponenten beinhalten: Dim x,y As Single x=5.70 y=2.3e+2 x=-5.33e-1 SizeOf Operator Mit dem Operator SizeOf() kann die Anzahl der Bytes bestimmt werden, die eine Variable im Speicher belegt.
Compiler 116 getrennt, bei der Variablendefinition angefügt werden: Dim x(3,4) As Integer ' Array mit 3*4 Einträgen Dim y(2,2,2) As Integer ' Array mit 2*2*2 Einträgen Arrays dürfen in BASIC bis zu 16 Indizes (Dimensionen) haben. Der Maximalwert für einen Index ist 65535. Die Indizes der Arrays sind immer nullbasiert, d.h., jeder Index beginnt mit 0. Es findet während des Programmlaufs keine Überprüfung statt, ob die definierte Indexgrenze eines Arrays überschritten wurde.
117 C-Control Pro Mega Series // globale b ist zugreifbar // globale a ist nicht zugreifbar da durch lokale a verdeckt // lokale x,y sind zugreifbar // u ist nicht zugreifbar da lokal zu Funktion main End Sub Sub main() Dim u As Integer // globale a,b sind zugreifbar // lokale u ist zugreifbar // x,y nicht zugreifbar da lokal zu Funktion func1 End Sub Globale Variablen haben einen definierten Speicherbereich, der während des gesamten Programmlaufs zur Verfügung steht.
Compiler 118 Mann kann die Reihenfolge der Abarbeitung beinflußen, in dem man Klammern setzt. Klammern haben die größte Priorität. Möchte man das letzte Beispiel strikt von links nach rechts auswerten: i= (2+3)*4-5 ' Ergebnis 15 => erst 2+3, dann *4, danach -5 Eine Aufstellung der Prioritäten findet sich in der Präzedenz Tabelle. 5.3.5.1 Arithmetische Operatoren Alle arithmetischen Operatoren, mit Ausnahme von Modulo, sind für Integer und Fließkomma Datentypen definiert.
119 C-Control Pro Mega Series 5.3.5.3 Bitschiebe Operatoren Bitschiebe Operatoren sind nur für Integer Datentypen erlaubt. Bei einer Bit-Shift Operation wird immer eine 0 an einem Ende hineingeschoben. Operator << >> 5.3.5.4 Erklärung um ein Bit nach links schieben um ein Bit nach rechts schieben Beispiel Ergebnis 1 << 2 3 << 3 &Hff >> 6 16 >> 2 4 24 3 4 Vergleichsoperatoren Vergleichsoperatoren sind für Single und Integer Datentypen erlaubt. Operator 5.3.
Compiler 120 Die Anweisungen werden ausgeführt. Am Ende wird der Ausdruck ausgewertet. Ist das Ergebnis ungleich 0 kommt es zur wiederholten Ausführung der Anweisungen. Der ganze Vorgang wiederholt sich solange, bis der Ausdruck den Wert 0 annimmt. Beispiele: Do a=a+2 Loop While a<10 Do a=a*2 x=a Loop While a Der wesentliche Unterschied der Do Loop while Schleife zur normalen Do While Schleife ist der Umstand, daß in einer Do Loop While Schleife, die Anweisung mindestens einmal ausgeführt wird.
121 C-Control Pro Mega Series Beispiele: Do While a<10 a=a+2 End While Do While a a=a*2 x=a End While Exit Anweisung Wird innerhalb der Schleife ein Exit ausgeführt, so wird die Schleife verlassen, und die Programmausführung startet mit der nächsten Anweisung hinter der While Schleife. Beispiel: Do While 1 ' Endlosschleife a=a+1 If a>10 Then Exit ' bricht Schleife ab End If End While 5.3.6.
Compiler 122 a=a-1 Next For i=1 To 10 Step 3 If i>3 Then a=i End If a=a-1 Next ' Erhöhe i in 3er Schritten An dieser Stelle nochmal der Hinweis, Arrays sind immer nullbasiert. Eine For Next Schleife, sollte daher bei einem Array Zugriff, eher von 0 nach 9 laufen. Exit Anweisung Eine Exit Anweisung verläßt die Schleife, und die Programmausführung startet mit der nächsten Anweisung hinter der For Schleife. Beispiel: For i=1 To 10 If i=6 Then Exit End If Next 5.3.6.
123 5.3.6.5 C-Control Pro Mega Series If .. Else Eine If Anweisung hat folgende Syntax: If Ausdruck1 Then Anweisungen1 ElseIf Ausdruck2 Then Anweisungen2 Else Anweisungen3 End If Hinter der If Anweisung folgt ein arithmetischer Ausdruck. Wird dieser Ausdruck zu ungleich 0 ausgewertet, dann werden die Anweisungen1 ausgeführt. Man kann mit Hilfe des Else Befehlswortes alternative Anweisungen2 definieren, die dann ausgeführt wird, wenn der Ausdruck zu 0 berechnet wurde.
Compiler 124 Case konstanten_vergleich2 Anweisungen_2 . . Case konstanten_vergleich_x Anweisungen_x Else ' Else ist optional Anweisungen End Case Für den Konstantenvergleich können spezielle Vergleiche oder ganze Bereiche angeben werden.
125 C-Control Pro Mega Series b=13 Case >= 100 b=14 Case <> 25 b=15 Else b=b+2 End Case In CompactC werden die Anweisungen hinter einer case Anweisung weitergeführt, bis ein break auftritt oder die switch Anweisung verlassen wird. Dies ist in BASIC anders: Hier bricht die Abarbeitung der Befehle hinter einem Case ab, wenn man bis zur nächsten Case Anweisung gelangt. 5.3.7 Funktionen Um größere Programme zu strukturieren, teilt man sie in mehrere Unterfunktionen auf.
Compiler 126 der gleichen Reihenfolge, wie sie bei func1 definiert wurden. Bekommt die Funktion keine Parameter, läßt man die Klammer leer. Sub main() Dim a As Word Dim f As Single func1(128,12.0) ' man kann numerische Konstanten übergeben ... a=100 f=12.0 func1(a+28,f) ' oder aber auch Variablen und sogar numerische Ausdrücke End Sub Man muß bei dem Aufruf einer Funktion immer alle Parameter angeben.
127 C-Control Pro Mega Series Dim Text(15) As Char Text="hallo welt" Len=StringLength(Text) End Sub In main wird die Referenz von Text als Parameter an die Funktion StringLength übergeben. Ändert man in einer Funktion einen normalen Parameter, so ist die Änderung außerhalb dieser Funktion nicht sichtbar. Bei Referenzen ist dies anders. Über den Parameter str kann man in StringLength den Inhalt von text ändern, da str nur eine Referenz (ein Zeiger) auf die Array Variable text ist.
Compiler > <= >= = <> 128 größer kleiner gleich größer gleich gleich ungleich Bitschiebeoperatoren << >> um ein Bit nach links schieben um ein Bit nach rechts schieben Bitoperatoren And Or Xor Not 5.3.8.3 Und Oder exclusives Oder Bitinvertierung reservierte Worte Folgende Worte sind reserviert und können nicht als Namen für Bezeichner benutzt werden: And Char End If Next Select Sub Word 5.
129 C-Control Pro Mega Series 6 6 ACK 38 26 & 70 46 F 102 66 f 7 7 BEL 39 27 ' 71 47 G 103 67 g 8 8 BS 40 28 ( 72 48 H 104 68 h 9 9 TAB 41 29 ) 73 49 I 105 69 i 10 A LF 42 2A * 74 4A J 106 6A j 11 B VT 43 2B + 75 4B K 107 6B k 12 C FF 44 2C + 76 4C L 108 6C l 13 D CR 45 2D - 77 4D M 109 6D m 14 E SO 46 2E .
Kapitel 6
131 6 C-Control Pro Mega Series Bibliotheken In diesem Teil der Dokumentation sind alle mitgelieferten Hilfsfunktionen beschrieben, die es dem Benutzer ermöglichen komfortabel auf die Hardware zuzugreifen. Am Anfang wird für jede Funktion die Syntax für CompactC und BASIC dargestellt. Dann folgt eine Beschreibung der Funktion und der beteiligten Parameter. 6.
Bibliotheken 132 Parameter ms 6.3 Wartezeit in ms Analog-Comparator Der Analog-Comparator ermöglicht, zwei analoge Signale zu vergleichen. Das Ergebnis dieses Vergleichs wird entweder als „0" oder „1" zurückgegeben. 6.3.1 AComp AComp Funktionen Beispiel Syntax void AComp(byte mode); Sub AComp(mode As Byte); Beschreibung Der Analog-Comparator ermöglicht, zwei analoge Signale zu vergleichen. Das Ergebnis dieses Vergleichs wird entweder als „0" oder „1" zurückgegeben (Ausgang des Komparators).
133 C-Control Pro Mega Series // // // // // // // // // // Die Funktion AComp gibt den Wert des Komparators zurück. Ist die Spannung am Eingang PB2/PE2 größer als am Eingang PB3/PE3 hat die Funktion AComp den Wert 1.
Bibliotheken 134 F.7 bei Mega128), eine interne Bandgap (1,22V) oder GND (0V) zur Verfügung. ADC_BG und ADC_GND können zur Überprüfung des ADC verwendet werden. Ist x ein digitaler Meßwert, dann errechnet sich der entsprechende Spannungswert u wie folgt: u = x * Referenzspannung / 1024 Beträgt die externe Referenzspannung 4,096V, erzeugt durch z.B.
135 C-Control Pro Mega Series Keine 6.4.2 ADC_Read ADC Funktionen Syntax word ADC_Read(void); Sub ADC_Read() As Word Beschreibung Die Funktion ADC_Read liefert den digitalisierten Meßwert von einem der 8 ADC-Ports. Die Nummer des Ports (0..7) wurde beim Aufruf von ADC_Set() als Parameter übergeben. Das Ergebnis ist im Bereich von 0 bis 1023 - entsprechend der 10bit-Auflösung des A/D-Wandlers.
Bibliotheken 6.4.4 136 ADC_Set ADC Funktionen Syntax word ADC_Set(byte v_ref,byte channel); Sub ADC_Set(v_ref As Byte,channel As Byte) As Word Beschreibung Die Funktion ADC_Set initialisiert den Analog-Digital_Wandler. Die Referenzspannung und der Messkanal werden ausgewählt, und der A/D Wandler für die Messungen vorbereitet. Der Meßwert wird danach mit ADC_Read() ausgelesen. Parameter Portnummer (0..7) des ADC (Port A.0 bis A.7 bei Mega32, Port F.0 bis F.
137 C-Control Pro Mega Series v_ref Referenzspannung (siehe Tabelle) Name Wert ADC_VREF_BG ADC_VREF_VCC ADC_VREF_EXT 0xC0 0x40 0x00 Beschreibung 2,56V interne Referenzspannung Versorgungsspannung (5V) externe Referenzspannung an PAD3 Für den Standort von PAD3 siehe Jumper Application Board M32 oder M128. 6.4.
Bibliotheken 138 Von der 20. bis zur 58.
139 C-Control Pro Mega Series 0 1 2 3 kein DCF77-Betrieb Puls suchen Synchronisation auf Frameanfang Daten dekodieren und speichern, Paritätsprüfung RTC (Real Time Clock) Die RTC wird mit einem 10ms Interrupt gesteuert und läuft im Hintergrund unabhängig vom Anwenderprogramm. Jede Sekunde wird die Anzeige auf dem LCD-Display ausgegeben. Das Anzeigeformat ist 1. Zeile: Stunde : Minute : Sekunde 2. Zeile: Tag . Monat . Jahr Die LED1 blinkt einmal pro Sekunde.
Bibliotheken 140 Sub DCF_INIT() Beschreibung DCF_INIT bereitet den DCF-Betrieb vor. Es wird der Eingang für das DCF-Signal eingestellt. DCF_Mode =0. Parameter Keine 6.5.3 DCF_PULS DCF Funktionen Syntax void DCF_PULS(void); Sub DCF_PULS() Beschreibung DCF_Mode auf 1 schalten ("Puls suchen"). Parameter Keine 6.5.4 DCF_START DCF Funktionen Syntax void DCF_START(void); Sub DCF_START() Beschreibung DCF_START initialisiert alle verwendeten Variablen und setzt DCF_Mode auf 1.
141 C-Control Pro Mega Series Parameter Keine 6.5.5 DCF_SYNC DCF Funktionen Syntax void DCF_SYNC(void); Sub DCF_SYNC() Beschreibung DCF_Mode auf 2 schalten ("Synchronisation auf Frameanfang"). Parameter Keine 6.6 Debug Die Debug Message Funktionen erlauben es, formatierten Text auf das Ausgabefenster der IDE zu senden. Diese Funktionen sind interruptgetrieben mit einem Puffer von bis zu 128 Byte. D.h.
Bibliotheken c 6.6.2 142 das auszugebende Zeichen Msg_WriteFloat Debug Message Funktionen Syntax void Msg_WriteFloat(float val); Sub Msg_WriteFloat(val As Single) Beschreibung Die übergebene floating point Zahl wird im Ausgabenfenster mit Vorzeichen dargestellt. Parameter val float Wert 6.6.3 Msg_WriteHex Debug Message Funktionen Syntax void Msg_WriteHex(word val); Sub Msg_WriteHex(val As Word) Beschreibung Der übergebene 16bit Wert wird im Ausgabenfenster dargestellt.
143 6.6.4 C-Control Pro Mega Series Msg_WriteInt Debug Message Funktionen Syntax void Msg_WriteInt(int val); Sub Msg_WriteInt(val As Integer) Beschreibung Der übergebene Integer wird im Ausgabenfenster dargestellt. Negativen Werten wird ein Minuszeichen vorangestellt. Parameter val 16bit integer Wert 6.6.
Bibliotheken 144 Der Parameter val wird als vorzeichenlose Zahl in das Ausgabenfenster geschrieben. Parameter val 16bit unsigned integer Wert 6.7 EEPROM Auf dem C-Control Pro Modul sind M32:1kB M128:4kB EEPROM integriert. Diese Bibliotheksfunktionen ermöglichen den Zugriff auf das EEPROM vom Interpreter. 32 Byte des EEPROM Bereichs werden für interne Zwecke benutzt, und sind daher nicht zugreifbar. 6.7.
145 C-Control Pro Mega Series Liest ein word von Position pos aus dem EEPROM. Die ersten 32 byte sind für das C-Control Pro OS reserviert. Ein Wert für pos von 0 und größer greift deshalb auf byte 32 und aufwärts im EEPROM zu. Der Wert von pos ist eine Byte Position im EEPROM. Dies sollte bei word oder Fließkommazugriffen beachtet werden. Parameter pos Byte Position im EEPROM Rückgabewert der Wert des word an Position pos im EEPROM 6.7.
Bibliotheken 146 Beschreibung Schreibt ein byte an Position pos in das EEPROM. Die ersten 32 byte sind für das C-Control Pro OS reserviert. Ein Wert für pos von 0 und größer greift deshalb auf byte 32 und aufwärts im EEPROM zu. Parameter pos Position im EEPROM val der ins EEPROM zu schreibende Wert 6.7.5 EEPROM_WriteWord EEPROM Funktionen Syntax void EEPROM_WriteWord(word pos,word val); Sub EEPROM_WriteWord(pos As Word,val As Word) Beschreibung Schreibt ein word an Position pos in das EEPROM.
147 C-Control Pro Mega Series Schreibt einen Fließkommawert an Position pos in das EEPROM. Die ersten 32 byte sind für das CControl Pro OS reserviert. Ein Wert für pos von 0 und größer greift deshalb auf byte 32 und aufwärts im EEPROM zu. Der Wert von pos ist eine Byte Position im EEPROM. Dies sollte bei word oder Fließkommazugriffen beachtet werden. Parameter pos Byte Position im EEPROM val der ins EEPROM zu schreibende Wert 6.
Bibliotheken 148 Beschreibung Diese Funktion empfängt ein Byte und quittiert mit ACK. Danach kann mit I2C_Status, der Status der Schnittstelle abgefragt werden. Rückgabewert gelesener Wert vom I2C Bus 6.8.3 I2C_Read_NACK I2C Funktionen Beispiel Syntax byte I2C_Read_NACK(void); Sub I2C_Read_NACK() As Byte Beschreibung Diese Funktion empfängt ein Byte und quittiert mit NACK. Danach kann mit I2C_Status, der Status der Schnittstelle abgefragt werden. Rückgabewert gelesener Wert vom I2C Bus 6.8.
149 6.8.5 C-Control Pro Mega Series I2C_Status I2C Funktionen Syntax byte I2C_Status(void); Sub I2C_Status() Beschreibung Mit I2C_Status kann der Status der Schnittstelle abgefragt werden. Die Bedeutung der Statusinformation ist in der Tabelle dargestellt. Rückgabewert aktueller I2C Status 6.8.6 I2C_Stop I2C Funktionen Beispiel Syntax void I2C_Stop(void); Sub I2C_Stop() Beschreibung Diese Funktion beendet die Kommunikation mit einer Stopsequenz.
Bibliotheken Beschreibung Diese Funktion sendet ein Byte. Danach kann mit I2C_Status, der Status der Schnittstelle abgefragt werden. Parameter data Datenbyte 6.8.
151 C-Control Pro Mega Series 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); I2C_Write(address>>8); I2C_Write(address); I2C_Write(data); I2C_Stop(); AbsDelay(5); // read data from 24C64 (8k x 8) EEPROM I2C_Start(); I2C_Write(0xA0); I2C_Write(address>>8); I2C_Write(address); I2C_Start(); I2C_Write(0xA1); EEPROM_data=I2C_Read_NACK(); I2C_Stop(); Msg_WriteHex(EEPROM_data); // // // // DEVI
Bibliotheken INT_TIM1CMPB INT_TIM1OVF INT_TIM0COMP INT_TIM0OVF INT_ANA_COMP INT_ADC INT_TIM2COMP INT_TIM2OVF INT_TIM3CAPT INT_TIM3CMPA INT_TIM3CMPB INT_TIM3CMPC INT_TIM3OVF 152 Timer1 CompareB Timer1 Overflow Timer0 Compare Timer0 Overflow Analog Comparator ADC Timer2 Compare Timer2 Overflow Timer3 Capture (nur Mega128) Timer3 CompareA (nur Mega128) Timer3 CompareB (nur Mega128) Timer3 CompareC (nur Mega128) Timer3 Overflow (nur Mega128) Der betreffende Interrupt muß in einer Interrupt Service Routine (I
153 6.9.2 C-Control Pro Mega Series Ext_IntDisable Interrupt Funktionen Syntax void Ext_IntDisable(byte IRQ); Sub Ext_IntDisable(IRQ As Byte) Beschreibung Der externe Interrupt IRQ wird gesperrt. Der Parameter IRQ hat Werte zwischen 0 und 2 auf dem Mega32 und zwischen 0 und 7 auf dem Mega128. Nicht verwechseln mit dem irqnr Parameter von Irq_SetVect(). Parameter IRQ Nummer des zu sperrenden Interrupts Mega32 (0-2) bzw. Mega128 (0-7) 6.9.
Bibliotheken 6.9.4 154 Irq_SetVect Interrupt Funktionen Beispiel Syntax void Irq_SetVect(byte irqnr,float vect); Sub Irq_SetVect(irqnr As Byte,vect As Single) Beschreibung Setzt die aufzurufende Interrupt Funktion für einen bestimmten Interrupt. Am Ende der Interruptroutine muß die Funktion Irq_GetCount() aufgerufen werden, ansonsten wird ununterbrochen in die Interrupt Funktion gesprungen.
155 C-Control Pro Mega Series } 6.10 Keyboard Ein Teil dieser Routinen sind im Interpreter implementiert, ein anderer Teil wird durch Hinzufügen der Bibliothek "Key_Lib.cc" aufrufbar. Da die Funktionen in "LCD_Lib.cc" durch Bytecode realisiert werden, sind sie langsamer in der Abarbeitung. Bibliotheksfunktionen haben allerdings den Vorteil, daß man bei Nichtgebrauch, diese Funktionen durch Weglassen der Bibliothek aus dem Projekt nimmt.
Bibliotheken 156 6.10.3 Key_TranslateKey Keyboard Funktionen (Bibliothek "Key_Lib.cc") Syntax char Key_TranslateKey(word keys); Sub Key_TranslateKey(keys As Word) As Char Beschreibung Diese Hilfsfunktion liefert das Zeichen zurück, das dem ersten Auftauchen einer "1" im Bitfeld des Eingabeparameters entspricht. Parameter keys Bitfeld das von Key_Scan() zurückgeliefert wird Rückgabewert ASCII Wert der erkannten Taste -1 wenn keine Taste gedrückt wird 6.
157 C-Control Pro Mega Series 6.11.2 LCD_CursorOff LCD Funktionen (Bibliothek "LCD_Lib.cc") Syntax void LCD_CursorOff(void); Sub LCD_CursorOff() Beschreibung Schaltet den Cursor des Display aus. Parameter Keine 6.11.3 LCD_CursorOn LCD Funktionen (Bibliothek "LCD_Lib.cc") Syntax void LCD_CursorOn(void); Sub LCD_CursorOn() Beschreibung Schaltet den Cursor des Display ein. Parameter Keine 6.11.4 LCD_CursorPos LCD Funktionen (Bibliothek "LCD_Lib.
Bibliotheken Beschreibung Setzt den Cursor auf Position pos. Parameter pos Cursorposition Wert von pos Position im Display 0x00-0x07 0x40-0x47 0-7 in der 1. Zeile 0-7 in der 2. Zeile Für Display mit mehr als 2 Zeilen und bis zu 32 Zeichen pro Zeile gilt folgendes Schema: Wert von pos 0x00-0x1f 0x40-0x5f 0x20-0x3f 0x60-0x6f Position im Display 0-31in 0-31in 0-31in 0-31in der der der der 1. 2. 3. 4. Zeile Zeile Zeile Zeile 6.11.5 LCD_Init LCD Funktionen (Bibliothek "LCD_Lib.
159 C-Control Pro Mega Series Sub LCD_Locate(row As Integer, column As Integer) Beschreibung Setzt den Cursor des LCD Displays auf ein bestimmte Zeile und Spalte. Parameter row Zeile column Spalte 6.11.7 LCD_SubInit LCD Funktionen Syntax void LCD_SubInit(void); Sub LCD_SubInit() Beschreibung Initialisiert die Ports für die Displaysteuerung auf Assemblerebene. Muß als erste Routine vor allen anderen LCD Ausgabefunktionen aufgerufen werden. Wird als erstes Kommando von LCD_Init() benutzt.
Bibliotheken Parameter Keine 6.11.9 LCD_WriteChar LCD Funktionen (Bibliothek "LCD_Lib.cc") Syntax void LCD_WriteChar(char c); Sub LCD_WriteChar(c As Char) Beschreibung Schreibt ein Zeichen an die Cursorposition im LCD Display. Parameter c ASCII Wert des Zeichens 6.11.10 LCD_WriteCTRRegister LCD Funktionen (Bibliothek "LCD_Lib.cc") Syntax void LCD_WriteCTRRegister(byte cmd); Sub LCD_WriteCTRRegister(cmd As Byte) Beschreibung Schickt ein Kommando zum Display Controller.
161 C-Control Pro Mega Series Sub LCD_WriteDataRegister(x As Char) Beschreibung Schickt ein Datenbyte zum Display Controller. Parameter x Datenbyte 6.11.12 LCD_WriteFloat LCD Funktionen Syntax void LCD_WriteFloat(float value, byte length); Sub LCD_WriteFloat(value As Single, length As Byte) Beschreibung Schreibt eine Fließkommazahl mit angegebener Länge auf das LCD Display. Parameter value Fließkommawert length Ausgabelänge 6.11.13 LCD_WriteRegister LCD Funktionen (Bibliothek "LCD_Lib.
Bibliotheken 162 y Datenbyte x Kommandonibble 6.11.14 LCD_WriteText LCD Funktionen (Bibliothek "LCD_Lib.cc") Syntax void LCD_WriteText(char text[]); Sub LCD_WriteText(ByRef Text As Char) Beschreibung Es werden alle Zeichen des char array bis zur terminierenden Null ausgegeben. Parameter text char array 6.11.
163 6.12 C-Control Pro Mega Series Mathematik Im folgenden sind die mathematischen Funktionen aufgeführt, die der C-Control Pro 128 in einfacher Fließkommagenauigkeit (32 Bit) beherrscht. Diese Funktionen sind nicht in der Bibliothek des CControl Pro 32, da sonst zu wenig Flash Speicher für Benutzerprogramme bleiben würden. 6.12.1 acos Mathematische Funktionen Syntax float acos(float val); Sub acos(val As Single) As Single Beschreibung Der Arcus Cosinus wird berechnet.
Bibliotheken 164 Arcus Sinus des Eingabewertes. 6.12.3 atan Mathematische Funktionen Syntax float atan(float val); Sub atan(val As Single) As Single Beschreibung Der Arcus Tangens wird berechnet. Der Winkel wird in Radiant angegeben. Ein- und Ausgabewerte liegen zwischen -pi/2 und +pi/2. Parameter val Wert von dem die Funktion berechnet wird Rückgabewert Arcus Tangens des Eingabewertes. 6.12.
165 C-Control Pro Mega Series 6.12.5 cos Mathematische Funktionen Syntax float cos(float val); Sub cos(val As Single) As Single Beschreibung Der Cosinus wird berechnet. Der Winkel wird in Radiant angegeben. Parameter val Wert von dem die Funktion berechnet wird Rückgabewert Cosinus des Eingabewertes (-1 bis 1) 6.12.
Bibliotheken Beschreibung Der Absolutwert der Fließkommazahl wird berechnet. Parameter val Eingabewert Rückgabewert Ergebnis der Funktion 6.12.8 floor Mathematische Funktionen Syntax float floor(float val); Sub floor(val As Single) As Single Beschreibung Die nächst kleinere Integerzahl zu der Fließkommazahl val wird berechnet. Parameter val Wert von dem der Integer berechnet wird Rückgabewert Ergebnis der Funktion 6.12.
167 C-Control Pro Mega Series val Multiplikator expn Exponent Rückgabewert Ergebnis der Funktion 6.12.10 ln Mathematische Funktionen Syntax float ln(float val); Sub ln(val As Single) As Single Beschreibung Der natürliche Logarithmus wird berechnet. Parameter val Eingabewert Rückgabewert Ergebnis der Funktion 6.12.11 log Mathematische Funktionen Syntax float log(float val); Sub log(val As Single) As Single Beschreibung Der Logarithmus zur Basis 10 wird berechnet.
Bibliotheken 6.12.12 pow Mathematische Funktionen Syntax float pow(float x,float y); Sub pow(x As Single,y As Single) As Single Beschreibung Potenzfunktion. Die Funktion x ^ y wird berechnet Parameter x Basis y Exponent Rückgabewert Ergebnis der Funktion 6.12.13 sin Mathematische Funktionen Syntax float sin(float val); Sub sin(val As Single) As Single Beschreibung Der Sinus wird berechnet. Der Winkel wird in Radiant angegeben.
169 C-Control Pro Mega Series Sub sqrt(val As Single) As Single Beschreibung Die Quadratwurzel wird berechnet. Parameter val Wert von dem die Quadratwurzel berechnet wird 6.12.15 tan Mathematische Funktionen Syntax float tan(float val); Sub tan(val As Single) As Single Beschreibung Der Tangens wird berechnet. Der Winkel wird in Radiant angegeben. Parameter val Wert von dem die Funktion berechnet wird Rückgabewert Tangens des Eingabewertes. 6.13 OneWire 1-Wire bzw.
Bibliotheken 170 6.13.1 Onewire_Read 1-Wire Funktionen Syntax byte Onewire_Read(void); Sub Onewire_Read() As Byte Beschreibung Ein Byte wird vom Eindraht-Bus gelesen. Rückgabewert gelesener Wert vom One-Wire Bus 6.13.2 Onewire_Reset 1-Wire Funktionen Syntax void Onewire_Reset(byte portbit); Sub Onewire_Reset(portbit As Byte) Beschreibung Es wird auf dem Eindraht-Bus ein Reset ausgelöst. Es wird die Bitnummer des Ports angegeben, über den die Eindraht-Kommunikation geführt wird.
171 C-Control Pro Mega Series PortC.7 PortD.0 ... PortD.7 ab hier nur Mega128 PortE.0 ... PortE.7 PortF.0 ... PortF.7 PortG.0 ... PortG.4 23 24 ... 31 32 ... 39 40 ... 47 48 ... 52 6.13.3 Onewire_Write 1-Wire Funktionen Syntax void Onewire_Write(byte data); Sub Onewire_Write(data As Byte) Beschreibung Es wird ein Byte auf den Eindraht-Bus geschrieben. Parameter data Datenbyte 6.13.
Bibliotheken 172 } OneWire_Write(0xcc); // ROM überspringen Kommando OneWire_Write(0x44); // starte Temperatur Messung Kommando AbsDelay(3000); OneWire_Reset(7); // PortA.7 OneWire_Write(0xcc); // ROM überspringen OneWire_Write(0xbe); // lese scratch_pad Kommando for(i=0;i<9;i++) // komplettes scratchpad lesen { scratch_pad[i]= OneWire_Read(); Msg_WriteHex(scratch_pad[i]); } Msg_WriteChar('\r'); text= "Temperatur: "; Msg_WriteText(text); temp= scratch_pad[1]*256 + scratch_pad[0]; Msg_WriteFloat(temp* 0.
173 C-Control Pro Mega Series OneWire_Reset(7) OneWire_Write(0xcc) OneWire_Write(0xbe) ' PortA.7 ' ROM überspringen Kommando ' lese scratch_pad Kommando For i = 0 To 9 ' komplettes scratchpad lesen scratch_pad(i)= OneWire_Read() Msg_WriteHex(scratch_pad(i)) Next Msg_WriteChar(13) Text = "Temperatur: " Msg_WriteText(Text) temp = scratch_pad(1) * 256 + scratch_pad(0) Msg_WriteFloat(temp * 0.5) Msg_WriteChar(99) Msg_WriteChar(13) Lab Ende End Sub 6.
Bibliotheken 174 6.14.1 Port_DataDir Port Funktionen Beispiel Syntax void Port_DataDir(byte port,byte val); Sub Port_DataDir(port As Byte,val As Byte) Beschreibung Die Funktion Port_DataDir konfiguriert die Bits des Ports zur Ein- oder Ausgabe. Ist das Bit '1', dann wird der Pin der entsprechenden Bitposition auf Ausgang geschaltet. Ein Beispiel: Ist port = PortB und val = 0x02, dann wird der Pin 2 des Atmel Mega (gleich PortB.1 - siehe Pinzuordnung von M32 und M128 ) auf Ausgang konfiguriert.
175 C-Control Pro Mega Series Eingang konfiguriert. Parameter portbit Bitnummer des Ports (siehe Tabelle) val 0=Eingang, 1= Ausgang Portbits Tabelle Definition Portbit PortA.0 ... PortA.7 PortB.0 0 ... 7 ... PortB.7 PortC.0 ... PortC.7 PortD.0 ... PortD.7 ab hier nur Mega128 PortE.0 ... PortE.7 PortF.0 ... PortF.7 PortG.0 ... PortG.4 8 ... 15 16 ... 23 24 ... 31 32 ... 39 40 ... 47 48 ... 52 6.14.
Bibliotheken 176 Parameter port Portnummer (siehe Tabelle) Rückgabewert Wert des Ports Portnummern Tabelle Definition Wert PortA PortB PortC PortD PortE (Mega128) PortF (Mega128) PortG (Mega128) 0 1 2 3 4 5 6 6.14.4 Port_ReadBit Port Funktionen Syntax byte Port_ReadBit(byte port); Sub Port_ReadBit(port As Byte) As Byte Beschreibung Liest einen Bitwert des spezifizierten Ports. Der entsprechende Pin des Ports muß auf Eingang geschaltet sein.
177 C-Control Pro Mega Series Definition Portbit PortA.0 ... PortA.7 PortB.0 0 ... 7 ... PortB.7 PortC.0 ... PortC.7 PortD.0 ... PortD.7 ab hier nur Mega128 PortE.0 ... PortE.7 PortF.0 ... PortF.7 PortG.0 ... PortG.4 8 ... 15 16 ... 23 24 ... 31 32 ... 39 40 ... 47 48 ... 52 6.14.5 Port_Write Port Funktionen Beispiel Syntax void Port_Write(byte port,byte val); Sub Port_Write(port As Byte,val As Byte) Beschreibung Schreibt ein Byte auf den spezifizierten Port.
Bibliotheken Definition Wert PortA PortB PortC PortD PortE (Mega128) PortF (Mega128) PortG (Mega128) 0 1 2 3 4 5 6 178 6.14.6 Port_WriteBit Port Funktionen Syntax void Port_WriteBit(byte portbit,byte val); Sub Port_WriteBit(portbit As Byte,val As Byte) Beschreibung Die Funktion Port_WriteBit setzt den Wert eines Pins, der auf Ausgang geschaltet ist. Ist ein Pin auf Eingang geschaltet, so kann der interne Pullup Widerstand eingeschaltet (1) oder abgeschaltet (0) werden.
179 C-Control Pro Mega Series ab hier nur Mega128 PortE.0 ... PortE.7 PortF.0 ... PortF.7 PortG.0 ... PortG.4 32 ... 39 40 ... 47 48 ... 52 6.14.
Bibliotheken 180 Laut dem Atmel Prozessor Handbuch wird folgende Formel angewendet um einen divider für eine Baudrate zu ermitteln: divider = (14745600 / Baudrate / 16 ) -1 Beispiel: 15 = (14745600 / 57600 / 16 ) -1 DoubleClock Modus Wenn man das High-Bit setzt, wird der DoubleClock Modus eingeschaltet. Man muß dann denn doppelten Wert als divider eintragen. Für 57600 Baud kann man z.B. statt 0x0f (dezimal 15) auch 0x801e benutzen.
181 C-Control Pro Mega Series serport Schnittstellennummer (0 = 1.serielle, 1 = 2.serielle etc..) 6.15.3 Serial_Init Serielle Funktionen Beispiel Syntax void Serial_Init(byte serport,byte par,word divider); Sub Serial_Init(serport As Byte,par As Byte,divider As Word) Beschreibung Die serielle Schnittstelle wird initialisiert. Der Wert par wird durch Oderieren der vordefinierten Bitwerte zusammengestellt. Man oderiert erst Zeichenlänge, dann Anzahl der Stopbits und dann Parity. Z.B.
Bibliotheken 182 Tabelle par Definitionen: Definition Funktion SR_5BIT SR_6BIT SR_7BIT SR_8BIT 5 Bit Zeichenlänge 6 Bit Zeichenlänge 7 Bit Zeichenlänge 8 Bit Zeichenlänge SR_1STOP SR_2STOP 1 Stop Bit 2 Stop Bit SR_NO_PAR SR_EVEN_PAR SR_ODD_PAR no Parity even Parity odd Parity 6.15.
183 C-Control Pro Mega Series funktioniert nur im normalen (polled) Modus. Parameter serport ramaddr recvlen sendlen par div Schnittstellennummer (0 = 1.serielle, 1 = 2.serielle etc..
Bibliotheken RS232_FIFO_RECV (0) RS232_FIFO_Send (1) 184 Zeichen im Empfangspuffer Zeichen in den Sendepuffer geschrieben Rückgabewert in Bytes 6.15.6 Serial_Read Serielle Funktionen Syntax byte Serial_Read(byte serport); Sub Serial_Read(serport As Byte) As Byte Beschreibung Ein byte wird von der seriellen Schnittstelle gelesen. Ist kein byte im seriellen Puffer, kehrt die Funktion erst dann zurück, wenn ein Zeichen empfangen wurde.
185 C-Control Pro Mega Series Parameter serport Schnittstellennummer (0 = 1.serielle, 1 = 2.serielle etc..) Rückgabewert empfangenes byte aus der seriellen Schnittstelle 256 (0x100) kein Zeichen in der Schnittstelle 6.15.8 Serial_Write Serielle Funktionen Beispiel Syntax void Serial_Write(byte serport, byte val); Sub Serial_Write(serport As Byte, val As Byte) Beschreibung Ein byte wird zur seriellen Schnittstelle geschickt. Parameter serport Schnittstellennummer (0 = 1.serielle, 1 = 2.serielle etc..
Bibliotheken 186 6.15.10 Serial Beispiel // Stringausgabe auf der seriellen Schnittstelle void main(void) { int i; char str[10]; str="test"; i=0; // Initialisiere Schnittstelle mit 19200baud, 8 Bit, 1 Stop Bit, keine Parität Serial_Init(0,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD19200); while(str[i]) Serial_Write(0,str[i++]); // Gib den String aus } 6.15.
187 C-Control Pro Mega Series Sub SPI_Disable() Beschreibung Die SPI Schnittstelle wird abgeschaltet und die dazugehörigen Ports können anders verwendet werden. Das deaktivieren der SPI Schnittstelle verhindert die Benutzung USB Schnittstelle auf dem Application Board. Andererseits, wenn man die USB Schnittstelle nicht benötigt, kann man mit SPI_Disable() die Ports für andere Zwecke einsetzen. Parameter Keine 6.
Bibliotheken 0 <0 >0 188 wenn beide Strings gleich sind wenn an der Unterscheidungsstelle der 1. String kleiner ist wenn an der Unterscheidungsstelle der 1. String größer ist 6.17.2 Str_Copy String Funktionen Syntax void Str_Copy(char destination[],char source[],word offset); Sub Str_Copy(ByRef destination As Char,ByRef source As Char,offset As Word) Beschreibung Der Quellstring (source) wird auf den Zielstring (destination) kopiert.
189 C-Control Pro Mega Series 6.17.4 Str_Isalnum String Funktionen (Bibliothek "String_Lib.cc") Syntax byte Str_Isalnum(char c); Sub Str_Isalnum(c As Char) As Byte Beschreibung Ein Zeichen c wird darauf überprüft, ob es aus dem Alphabet stammt, oder eine Ziffer ist. Parameter c das zu überprüfende Zeichen Rückgabewert 1 wenn das Zeichen numerisch oder alphabetisch ist (in Groß- oder Kleinschreibung) 0 sonst 6.17.5 Str_Isalpha String Funktionen (Bibliothek "String_Lib.
Bibliotheken 190 6.17.6 Str_Len String Funktionen Syntax word Str_Len(char str[]); Sub Str_Len(ByRef str As Char) As Word Beschreibung Die Länge der Zeichenkette (des character arrays) wird zurückgegeben. Parameter str Zeiger auf String Rückgabewert Anzahl der Zeichen im String (ohne die terminierende Null). 6.17.7 Str_Substr String Funktionen (Bibliothek "String_Lib.
191 C-Control Pro Mega Series 6.17.8 Str_WriteFloat String Funktionen 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) Beschreibung Die float Zahl n wird in einen ASCII String mit decimal Dezimalstellen konvertiert. Das Ergebnis wird im String text mit einem Versatz von offset abgespeichert. Mit Hilfe von offset kann man den Anfang eines Strings intakt lassen.
Bibliotheken 192 In diesem Fall wird die Integer Zahl an den Text String angehängt. 6.17.10 Str_WriteWord String Funktionen 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) Beschreibung Das Wort n wird in einen ASCII String konvertiert. Das Ergebnis wird im String text mit einem Versatz von offset abgespeichert.
193 C-Control Pro Mega Series Instruktionen der aktuelle Thread auf den Status "inaktiv" gesetzt und der nächste ausführbare Thread wird gesucht. Danach startet die Abarbeitung des neuen Threads. Der neue Thread kann wieder derselbe wie vorher sein, je nachdem wie viele Threads aktiviert wurden oder für eine Ausführung bereit sind. Das Hauptprogramm gilt als erster Thread. Daher ist Thread "0" immer aktiv, auch wenn explizit keine Threads gestartet worden sind.
Bibliotheken 194 Tabelle Threadzustände: Zustand Bedeutung aktiv inaktiv Der Thread wird momentan abgearbeitet Kann nach einem Threadwechsel wieder aktiviert werden Wird nach einer Anzahl von Ticks wieder auf "inaktiv" gesetzt Der Thread wartet auf ein Signal schlafend wartend 6.18.
195 C-Control Pro Mega Series Zeitraum ist er wieder für die Abarbeitung bereit. Der Zeitraum wird in Ticks angegeben, die von Timer 2 erzeugt werden. Wird Timer 2 abgeschaltet oder für einen anderen Zweck gebraucht, ist die Funktionsweise von Thread_Delay() undefiniert. Auch wenn Thread_Delay() normalerweise wie eine Wartefunktion arbeitet, so muß man doch beachten, daß nach der Wartezeit der Thread nicht immer automatisch wieder ausgeführt wird.
Bibliotheken 196 Beendet die Abarbeitung eines Threads. Wird als Threadnummer 0 übergeben, wird das Hauptprogramm und damit der ganze Interpreterlauf angehalten. Parameter thread (0-13) Nummer des Threads 6.18.5 Thread_Lock Thread Funktionen Syntax void Thread_Lock(byte lock); Sub Thread_Lock(lock As Byte) Beschreibung Mit dieser Funktion kann ein Thread seinen Threadwechsel unterbinden.
197 C-Control Pro Mega Series Rückgabewert freier Speicher in bytes 6.18.7 Thread_Resume Thread Funktionen Syntax void Thread_Resume(byte thread); Sub Thread_Resume(thread As Byte) Beschreibung Hat ein Thread den Zustand "wartend", kann er mit der Resume Funktion wieder auf "inaktiv" gesetzt werden. Der Status "inaktiv" bedeutet, das der Thread bereit ist, bei einem Threadwechsel wieder aktiviert zu werden. Parameter thread (0-13) Nummer des Threads 6.18.
Bibliotheken 198 6.18.9 Thread_Start Thread Funktionen Beispiel Syntax void Thread_Start(byte thread,float func); Sub Thread_Start(thread As Byte,func As Single) Beschreibung Ein neuer Thread wird gestartet. Als Startfunktion für den Thread kann eine beliebige Funktion genutzt werden.
199 C-Control Pro Mega Series 6.18.
Bibliotheken // void main(void) { str1="Thread1"; str2="Thread2"; Thread_Start(1,thread1); } 6.19 200 // Variablendeklaration // Variablendeklaration // Funktionsaufruf mit Angabe der // Threadnummer. // Endlosschleife while(true) { Thread_Delay(100); Msg_WriteText(str1); } // Der Thread ist für 100ms "schlafend". // Danach wird "Thread1" ausgegeben. Timer Es stehen im C-Control Pro Mega 32 zwei, Mega128 drei unabhängige Timer-Counter zur Verfügung.
201 C-Control Pro Mega Series 6.19.2 Frequenzerzeugung Zur Frequenzerzeugung können Timer_0, Timer_1 und Timer_3 folgendermaßen eingesetzt werden: Timer0 (8 Bit) 1. Beispiel: // Rechtecksignal mit 10*1,085 µs = 10,85 µs Periodendauer Timer_T0FRQ(10, PS0_8) 2.
Bibliotheken 202 6.19.3 Frequenzmessung Zur direkten Messung einer Frequenz, kann Timer_1 (16Bit) bzw. Timer_3 (16Bit) (nur Mega128) verwendet werden. Es werden die Pulse innerhalb einer Sekunde gezählt, und das Ergebnis ist dann in Herz. Die maximale Meßfrequenz ist 64kHz und ergibt sich durch den 16Bit Zähler. Ein Beispiel für diese Art der Frequenzmessung findet man unter "Demo Programme/FreqMessung". Durch Verkürzen der Meßzeit lassen sich auch höhere Frequenzen messen.
203 C-Control Pro Mega Series void Timer1_ISR(void) { int irqcnt; PM_Wert=Timer_T1GetPM(); // Pulsweite auslesen irqcnt=Irq_GetCount(INT_TIM1CAPT); } void main(void) { byte n; // Interrupt Service Routine definieren Irq_SetVect(INT_TIM1CAPT,Timer1_ISR); Timer_T0PWM(100,PS0_64); // Pulsgenerator Timer 0 starten // die Messung beginnt hier // Output Timer0 OC0(PortB.3) verbinden mit ICP(input capture pin, PortD.
Bibliotheken 204 irqcnt=Irq_GetCount(INT_TIM0COMP); } void main(void) { Port_DataDirBit(0,0); // Port_WriteBit(0,0); // Irq_SetVect(INT_TIM0COMP,Timer0_ISR);// Timer_T0Time(100,PS0_1024); // // weiterer Programmablauf... } PortA.0 Ausgang PortA.0 Ausgang=0 Interrupt Routine definieren Zeit festlegen und Timer0 starten 6.19.7 Timer_Disable Timer Funktionen Syntax void Timer_Disable(byte timer); Sub Timer_Disable(timer As Byte) Beschreibung Die Funktion schaltet den selektierten Timer ab.
205 C-Control Pro Mega Series Beim Mega128 ist aus Hardwaregründen die Benutzung von Timer_0 als Zähler nicht möglich! Parameter Keine 6.19.9 Timer_T0FRQ Timer Funktionen Syntax void Timer_T0FRQ(byte period,byte PS); Sub Timer_T0FRQ(period As Byte,PS As Byte) Beschreibung Diese Funktion initialisiert den Timer0, mit dem angegebenen Vorteiler und Periodendauer, siehe Tabelle . Das Ausgangssignal erscheint an Mega32: PortB.3 (PIN4), Mega128: PortB.4 (X1_4).
Bibliotheken PS0_256 (6) PS0_1024 (7) 34,72 µs 138,9 µs 6.19.10 Timer_T0GetCNT Timer Funktionen Syntax byte Timer_T0GetCNT(void); Sub Timer_T0GetCNT() As Byte Beschreibung Der Wert des Counter0 wird gelesen. Erfolgte ein Überlauf, dann wird der Wert 0xFF übergeben. Beim Mega128 ist aus Hardwaregründen die Benutzung von Timer_0 als Zähler nicht möglich! Rückgabewert der gemessene Zählerwert 6.19.
207 C-Control Pro Mega Series Beschreibung Diese Funktion initialisiert den Timer0, mit dem angegebenen Vorteiler und Pulsweite, siehe Tabelle . Das Ausgangssignal erscheint an Mega32: PortB.3 (PIN4) Mega128: PortB.4(X1_4). Der Mega128 verfügt über erweiterte Vorteilerdefinitionen siehe Tabelle.
Bibliotheken 208 Parameter prescaler Vorteiler (Tabelle prescaler) 6.19.14 Timer_T0Stop Timer Funktionen Syntax void Timer_T0Stop(void); Sub Timer_T0Stop() Beschreibung Die Frequenzerzeugung wird angehalten. Das Ausgangssignal kann 0 oder 1 sein, entsprechend dem letzten Zustand. Es wird nur der Takt für den Timer angehalten. Sonstige Einstellungen bleiben erhalten. Parameter Keine 6.19.
209 C-Control Pro Mega Series Vorteiler (prescaler) PS0_1 (1) PS0_8 (2) PS0_64 (3) PS0_256 (4) PS0_1024 (5) Zeitbasis (Dauer eines Ticks) 67,8 ns 542,5 ns 4,34 µs 17,36 µs 69,44 µs Mega128 Vorteiler (prescaler) PS0_1 (1) PS0_8 (2) PS0_32 (3) PS0_64 (4) PS0_128 (5) PS0_256 (6) PS0_1024 (7) Zeitbasis (Dauer eines Ticks) 67,8 ns 542,5 ns 2,17 µs 4,34 µs 8,68 µs 17,36 µs 69,44 µs 6.19.
Bibliotheken 210 Beschreibung Diese Funktion initialisiert den Counter1. Der Counter1 wird bei einer positiven Signalflanke an Eingang Mega32: PortB.1 (PIN2) Mega128: PortD.6 (X2_15). inkrementiert. Wenn das Limit erreicht ist, wird ein Interrupt ("Timer1 CompareA" - define: INT_TIM1CMPA ) ausgelöst. Die entsprechende Interrupt_Service_Routine muß vorher definiert sein. Parameter limit 6.19.
211 C-Control Pro Mega Series PS0_32 (3) PS0_64 (4) PS0_128 (5) PS0_256 (6) PS0_1024 (7) 4,340 8,681 17,36 34,72 138,9 µs µs µs µs µs 6.19.19 Timer_T1FRQX Timer Funktionen Syntax void Timer_T1FRQX(word period,word skew,byte PS); Sub Timer_T1FRQX(period As Word,skew As Word,PS As Byte) Beschreibung Diese Funktion initialisiert den Timer1, mit dem angegebenen Vorteiler, Periodendauer und Phasenverschiebung der beiden Ausgangssignale, siehe Tabelle . Die Ausgangssignale erscheinen an Mega32: PortD.
Bibliotheken 212 6.19.21 Timer_T1GetPM Timer Funktionen Syntax word Timer_T1GetPM(void); Sub Timer_T1GetPM() As Word Beschreibung Diese Funktion liefert das Messergebnis zurück. Parameter Keine Rückgabewert Ergebnis der Messung Um das Meßergebnis zu errechnen, wird der zurückgegebene 16bit Wert mit dem Eintrag aus der prescaler Tabelle multipliziert, der beim Aufruf von Timer_T1PM angegeben wurde (siehe auch Beispiel). 6.19.
213 C-Control Pro Mega Series void Timer_T1PM(Mode As Byte,PS As Byte) Beschreibung Diese Funktion legt fest, ob eine Pulsbreiten- oder Periodenmessung durchgeführt werden soll, initialisiert den Timer_1 für die Messung und setzt den Vorteiler. Parameter Mode 0 = Pulsweitenmessung, 1 = Periodenmessung PS Vorteiler Tabelle prescaler: Vorteiler (prescaler) Zeitbasis (Dauer eines Ticks) PS_1 (1) PS_8 (2) PS_64 (3) PS_256 (4) PS_1024 (5) 67,8 ns 542,5 ns 4,34 µs 17,36 µs 69,44 µs 6.19.
Bibliotheken 214 6.19.25 Timer_T1PWM Timer Funktionen Syntax void Timer_T1PWM(word period,word PW0,byte PS); Sub Timer_T1PWM(period As Word,PW0 As Word,PS As Byte) Beschreibung Diese Funktion initialisiert den Timer1 mit dem angegebenen Vorteiler, Pulsweite und Periodendauer, siehe Tabelle . Die Ausgangssignale erscheinen an Mega32: PortD.4 (PIN18) und PortD.5 (PIN19). Mega128: PortB.5 (X1_3) und PortB.6 (X1_2).
215 C-Control Pro Mega Series PW1 Pulsweite Kanal B PS Vorteiler (Tabelle prescaler) 6.19.27 Timer_T1PWMY Timer Funktionen Syntax void Timer_T1PWMY(word period,word PW0,word PW1,word PW2,byte PS); Sub Timer_T1PWMY(period As Word,PW0 As Word,PW1 As Word,PW2 As Word,PS As Byte) Beschreibung Diese Funktion initialisiert den Timer1 mit dem angegebenen Vorteiler, Pulsweite für Kanal A ,B und C und Periodendauer, siehe Tabelle . Die Ausgangssignale erscheinen an PortB.5 (X1_3) , PortB.6 (X1_2) und PortB.
Bibliotheken 216 6.19.29 Timer_T1Stop Timer Funktionen Syntax void Timer_T1Stop(void); Sub Timer_T1Stop() Beschreibung Die Frequenzerzeugung wird angehalten. Das Ausgangssignal kann 0 oder 1 sein, entsprechend dem letzten Zustand. Es wird nur der Takt für den Timer angehalten. Sonstige Einstellungen bleiben erhalten. Parameter Keine 6.19.
217 C-Control Pro Mega Series 6.19.31 Timer_T3CNT Timer Funktionen Syntax void Timer_T3CNT(void); Sub Timer_T3CNT() Beschreibung Diese Funktion initialisiert den Counter3. Der Counter3 wird bei einer positiven Signalflanke an Eingang PortE.6 (X1_10) inkrementiert. Parameter Keine 6.19.32 Timer_T3CNT_Int Timer Funktionen Syntax void Timer_T3CNT_Int(word limit); Sub Timer_T3CNT_Int(limit As Word) Beschreibung Diese Funktion initialisiert den Counter_3.
Bibliotheken 218 Beschreibung Diese Funktion initialisiert den Timer3, mit dem angegebenen Vorteiler und Periodendauer, siehe Tabelle . Das Ausgangssignal erscheint an PortE.3 (X1_13). Die Frequenzerzeugung wird automatisch gestartet. Parameter period Periodendauer PS Vorteiler Tabelle prescaler: Vorteiler (prescaler) PS0_1 (1) PS0_8 (2) PS0_32 (3) PS0_64 (4) PS0_128 (5) PS0_256 (6) PS0_1024 (7) Zeitbasis (Dauer eines Ticks) 135,6 1,085 4,340 8,681 17,36 34,72 138,9 ns µs µs µs µs µs µs 6.19.
219 C-Control Pro Mega Series 6.19.35 Timer_T3GetCNT Timer Funktionen Syntax word Timer_T3GetCNT(void); Sub Timer_T3GetCNT() As Word Beschreibung Der Wert des Counter3 wird gelesen. Erfolgte ein Überlauf, dann wird der Wert 0xFFFF übergeben. Rückgabewert der gemessene Zählerwert 6.19.36 Timer_T3GetPM Timer Funktionen Syntax word Timer_T3GetPM(void); Sub Timer_T3GetPM() As Word Beschreibung Diese Funktion liefert das Messergebnis zurück.
Bibliotheken 220 Sub Timer_T3PWA(PW0 As Word) Beschreibung Diese Funktion stellt eine neue Pulsweite (Kanal_A) für den Timer3 ein, ohne den Vorteiler zu verändern. Parameter PW0 Pulsweite 6.19.38 Timer_T3PM Timer Funktionen Syntax void Timer_T3PM(byte Mode,byte PS); void Timer_T3PM(Mode As Byte,PS As Byte) Beschreibung Diese Funktion legt fest, ob eine Pulsbreiten- oder Periodenmessung durchgeführt werden soll, initialisiert den Timer_3 für die Messung und setzt den Vorteiler.
221 C-Control Pro Mega Series 6.19.39 Timer_T3PWB Timer Funktionen Syntax void Timer_T3PWB(word PW1); Sub Timer_T3PWB(PW1 As Word) Beschreibung Diese Funktion stellt eine neue Pulsweite (Kanal_B) für den Timer3 ein, ohne den Vorteiler zu verändern. Parameter PW1 Pulsweite 6.19.
Bibliotheken 222 6.19.41 Timer_T3PWMX Timer Funktionen Syntax void Timer_T3PWMX(word period,word PW0,word PW1,byte PS); Sub Timer_T3PWMX(period As Word,PW0 As Word,PW1 As Word,PS As Byte) Beschreibung Diese Funktion initialisiert den Timer3 mit dem angegebenen Vorteiler, Pulsweite für Kanal A und B und Periodendauer, siehe Tabelle . Die Ausgangssignale erscheinen an PortE.3 (X1_13) und PortE.4 (X1_12).
223 C-Control Pro Mega Series 6.19.43 Timer_T3Start Timer Funktionen Syntax void Timer_T3Start(byte prescaler); Sub Timer_T3Start(prescaler As Byte) Beschreibung Die Frequenzerzeugung wird mit der vorherigen Einstellung gestartet. Der Vorteiler muß neu angegeben werden. Parameter prescaler Vorteiler (Tabelle prescaler) 6.19.44 Timer_T3Stop Timer Funktionen Syntax void Timer_T3Stop(void); Sub Timer_T3Stop() Beschreibung Die Frequenzerzeugung wird angehalten.
Bibliotheken 224 Beschreibung Diese Funktion initialisiert den Timer_3 mit dem angegebenen Vorteiler, und dem Wert (16 Bit) für die Zeit, siehe Tabelle . Ist der Wert erreicht, dann wird der Timer3- Interrupt (INT_TIM3CMPA) ausgelöst. Parameter Time Zeitwert, bei dem Interrupt ausgelöst wird PS Vorteiler Tabelle prescaler: Vorteiler (prescaler) Zeitbasis (Dauer eines Ticks) PS_1 (1) PS_8 (2) PS_64 (3) PS_256 (4) PS_1024 (5) 67,8 ns 542,5 ns 4,34 µs 17,36 µs 69,44 µs 6.19.
225 C-Control Pro Mega Series Timer_TickCount(); AbsDelay(500); // 500 ms warten time=Timer_TickCount(); // der Wert von time sollte 50 sein } © 2008 Conrad Electronic
Kapitel 7
227 7 C-Control Pro Mega Series FAQ Probleme 1. Es existiert keine USB Verbindung zum Application Board. · Ist der FTDI USB Treiber auf dem PC geladen? Oder erscheint vielleicht beim Einstecken des USB Steckers ein "unbekanntes Gerät" im Hardware Manager? · Ist in Optionen->IDE->Schnittstellen der richtige Kommunikationsport eingestellt? · Wird eine Windowsversion vor Windows 98 SE ("Second Edition") benutzt? Die USB Treiber von Microsoft funktionieren erst ab Win98SE zuverlässig mit USB Geräten.
FAQ 228 7. Wo bestimmt man, ob das neue Projekt ein BASIC oder C Projekt ist? Es gibt keine Unterschiede im Projekttyp. Die Quelltext Dateien in einem Projekt bestimmen welche Programmiersprache zum Einsatz kommt. Dateien mit der Endung *.cc laufen in einem CompactC Kontext, Dateien mit der Endung *.cbas werden mit BASIC übersetzt. Man kann in einem Project auch C und BASIC mischen. 8. Ich benutze ein andere LCD-Anzeige als die mitgelieferte mit aber demselben Controller.
229 C-Control Pro Mega Series · Schaut man sich die Pinzuordnung von M32 und M128 an, so können die Ports genutzt werden, deren Funktionalität man nicht braucht. Bei Pins die beim Application Board mit Peripherie verbunden sind ( SPI, RS232, LCD, Keyboard etc.) nicht vergessen die Jumper am Application Board abzuziehen. Ansonsten wird das Portverhalten beeinträchtigt. 14. Wie schalte ich den Pull-Up Widerstand eines Porteingangs ein? · Erst den Port mit PortDataDir() (bzw.
Sachverzeichnis Sachverzeichnis - B ---- 99 -##define 87 #endif 87 #ifdef 87 #include 87 -+++ 99 -AAbsDelay 131 AComp 132 acos 163 ADC_Disable 134 ADC_Read 135 ADC_ReadInt 135 ADC_Set 136 ADC_SetInt 136 ADC_StartInt 137 Addition 98, 118 Analog-Comparator 132 Anweisungen 91, 111 Anweisungsblock 91 ApplicationBoard 21, 29, 37, 47 Arithmetische Operatoren 98, 118 Array 94, 114 Array Fenster 72 ASCII 128 asin 163 atan 164 Ausdrücke 91, 111 Ausgaben 67 Auto Aktualisieren 70 Autostart 15, 66 © 2008 Conrad
231 C-Control Pro Mega Series do while 100 Druckvorschau 62 -EEditor Ansicht Erneuern 58 Editoreinstellungen 75 EEPROM 144, 145, 146 EEPROM_Read 144 EEPROM_ReadFloat 145 EEPROM_ReadWord 144 EEPROM_Write 145 EEPROM_WriteFLoat 146 EEPROM_WriteWord 146 Einleitung 2 else 103, 123 email 4 Ereigniszähler 200 Ersetzen 61 exclusives Oder 98, 118 Exit 119, 120, 121 exp 165 Ext 151 Ext_IntDisable 153 Ext_IntEnable 152 externes RAM 39, 87 -Ffabs 165 FAQ 227 Fax 4 Fehlerkorrekturen 5 Fenster 84 Firewall 81 Firmwar
Sachverzeichnis -KKey_Init 155 Key_Scan 155 Key_TranslateKey 156 kleiner 99, 119 kleiner gleich 99, 119 Kommentare 91, 111 Kompilieren 53 Kontexthilfe 85 -LLCD Matrix 17 LCD_ClearLCD 156 LCD_CursorOff 157 LCD_CursorOn 157 LCD_CursorPos( 157 LCD_Init 158 LCD_Locate 158 LCD_SubInit 159 LCD_TestBusy 159 LCD_WriteChar 160 LCD_WriteCTRRegister 160 LCD_WriteDataRegister 160 LCD_WriteFloat 161 LCD_WriteRegister 161 LCD_WriteText 162 LCD_WriteWord 162 ldexp 166 links schieben 98, 119 ln 167 log 167 Logische Opera
233 C-Control Pro Mega Series Projekt 53 Projektdateien 54 Projekte Kompilieren Projektname 53 Projektoptionen 56 Proxy 81 Pulsmessung 202 Pulsweitenmodulation 53 202 -QQuadratwurzel 168 -Rrechts schieben 98, 119 Rechtschreibprüfung 79 Referenzspannung 136 Reguläre Ausdrücke 65 reserviert 109, 128 reservierte Worte 109, 128 -SSchaltplan 28, 29, 45, 47 Schnittstelle 80 Schnittstellensuche 80 Select 123 Serial Beispiel 186 Serial Beispiel (IRQ) 186 Serial_Disable 180 Serial_Init 181 Serial_Init_IRQ 18
Sachverzeichnis Timer_T0Disable 204 Timer_T0FRQ 205 Timer_T0GetCNT 206 Timer_T0PW 206 Timer_T0PWM 206 Timer_T0Start 207 Timer_T0Stop 208 Timer_T0Time 208 Timer_T1CNT 209 Timer_T1CNT_Int 209 Timer_T1FRQ 210 Timer_T1FRQX 211 Timer_T1GetCNT 211 Timer_T1GetPM 212 Timer_T1PM 212 Timer_T1PWA 212 Timer_T1PWB 213 Timer_T1PWM 214 Timer_T1PWMX 214 Timer_T1PWMY 215 Timer_T1Start 215 Timer_T1Stop 216 Timer_T1Time 216 Timer_T3CNT 217 Timer_T3CNT_Int 217 Timer_T3FRQ 217 Timer_T3FRQX 218 Timer_T3GetCNT 219 Timer_T3GetPM 2