PEC Kurzreferenz (vereinfachter Auszug)
PEC steht für Portable Embedded Classes und ist eine Klassenbibliothek für Mikrocontrolleranwendungen.
Alle für den Anwendungsentwickler vorgesehenen Klassen und Templates beginnen mit dem Präfix Pec… Die ausschließliche Verwendung dieser Bibliotheksbausteine gewährleistet die Portabilität der erstellten Anwendung. Die folgende Kurzreferenz zeigt die wichtigsten PEC-Bibliotheksbausteine und deren wesentlichen Funktionen. Eine vollständige Dokumentation alles PEC Bausteine lässt sich aus dem jeweiligen Klassenmodell automatisch generieren.
Die Verwendung eines PEC-Bibliotheksbausteins folgt immer folgendem Muster:
- für jeden Systembaustein eine eigene Klasse anlegen
- einen geeigneten PEC-Bibliotheksbaustein suchen und zuweisen
- die konkret verwendete Hardware zuweisen oder konfigurieren.
- eine Instanz des Systembausteins erzeugen
Beispiel1: Eine LED für die Fehleranzeige ist an Pin B0 vorgesehen.
- Name des Systembausteins festlegen und Klasse anlegen: ErrorLED
- die Bibliothek bietet für solche Anwendungsfälle das High-Level Klassentemplate PecLed an, diese zuweisen
- das Template muss mit der Ressource pinB0 ergänzt werden
- die Anwendung braucht eine Instanz des Bausteins zum Beispiel als Aggregation in der Klasse Controller
Beispiel2: Für die Konfiguration des eingebetteten Systems ist ein RS232-Terminal an UART0 des Controllers vorgeshen.
- Name des Systembausteins festlegen und Klasse anlegen: Terminal
- die Bibliothek bietet für solche Anwendungsfälle das Klassentemplate PecUart an, diese zuweisen
- das Template muss mit der Ressource uart0xxx ergänzt werden
- die Anwendung braucht eine Instanz des Bausteins zum Beispiel als Aggregation in der Klasse Controller
BEACHTE: Die Bezeichner der verwendeten Hardware sind Controller-spezifisch!
elementare GPIO Bausteine
PecPinInput «template» benötigt als Parameter pinXn, [pullUp]bool getState() // lese aktuellen Zustand vom Pin 0/1
PecPinOutput «template» benötigt als Parameter pinXnbool getState() // lese aktuellen Zustand vom Pin 0/1 void setState(bool) // setze neuen Zustand des Pin 0/1 void on() // Pin anschalten 1 void off() // Pin ausschalten 0 void toggle() // Pin umschalten 0->1 / 1->0
PecPinInterrupt «template» benötigt als Parameter pinXn, [pullUp]bool getState() // lese aktuellen Zustand vom Pin 0/1 virtual void onPinEvent() // zum Überschreiben, Funktion zur Ereignisbehandlung
pinXn «parameter» für Templates#define %port% X #define %pin% n
pinPullUp «parameter» für Templates#define %pinLevel% 1!
anwendungsorientierte GPIO Bausteine
PecPinOutputTimed «template» benötigt Parameter pinXnvoid on(delay) // um x Millisek. verzögertes anschalten (10 ms Raster) void off(delay) // um x Millisek. verzögertes ausschalten (10 ms Raster) void toggle(delay) // um x Millisek. verzögertes umschalten (10 ms Raster) void pulse(delay,pulseMs) // ______/¯¯¯¯¯¯¯\ void pulse(delay,hiMs,loMs,count) // ______/¯¯¯¯¯¯¯\_______/¯¯¯¯¯¯¯\ ... bool isBusy() // liefert Status, true = noch beschäftigt
PecLED «template» benötigt Parameter pinXnvoid on() // LED anschalten void off() // LED ausschalten void toggle() // LED umschalteten void flash() // LED blitzt kurz auf void blink(code) // schaltet Blinkcode an code=3 |||_|||_|||_... uint8_t getBlinkCode() // liefert den aktuellen Blinkcode void nextBlinkCode() // aktueller Blinkcode +1 void slowBlink() // langsam blinken ... |__|__|__|__... void flicker() // schnell blinken ... ||||||||||||... void dim() // um 50% gedimmt leuchten
PecButtonClickAndHold «template» benötigt Parameter pinXnbool isPressed() // liefert den aktuellen Zustand des Button true=gedrückt virtual void onClick() // zum Überschreiben, Ereignisfunktion bei Klick virtual void onHoldStart() // zum Überschreiben, Ereignis bei Beginn Halten virtual void onHolding() // zum Überschreiben, Ereignis alle 10ms bei Halten virtual void onHoldEnd() // zum Überschreiben, Ereignis bei Festhalten Ende
elementare UART Bausteine
PecUart «template» benötigt Parameter baudrateXXX, uartN
void writeByte(byte) // sendet ein 8 Bit Wert (Byte) void writeString("String") // sendet einen Text bool dataAviable() // prüft ob Daten da sind uint8_t readByte() // liest ein Byte void write(WORD) // sendet einen 16 Bitwert void write(DWORD) // sendet einen 32 Bit Wert void writeData(buffer,count) // sendet n Bytes aus einem Buffer
uartEventRx «template» Erweiterung für das Template PecUart
void onEventRx(data) // Empfangsereignis // muss überschrieben werden
baudrateXXXX «parameter» für das Template PecUart
#define %baud% xxx
elementare ADC Bausteine
PecAdcSingle «template» benötigt Parameter adcX, resolutionX, channelN,unsigned int getValue() // liefert den aktuellen Analogwert
PecAdcChannel «template» benötigt Parameter adcX, resolutionX, channelN,unsigned int getValue() // liefert den letzten Analogwert des Kanals
adcX «parameter» wird für PecAdc… benötigt#define %adc% X // 0, 1, 2, ...
channelN «parameter» wird für PecAdc… benötigt#define %channel% N // 0, 1, 2, ...
adcResolutionX «parameter» wird für PecAdc… benötigt#define %resolution% X // 8, 10, 12
elementare TIMER Bausteine
PecTimer «template» benötigt Parameter timerN// grundlegendes Klassentemplate für benutzerdefinierte Timer void configHz(hz) // initialisiert und startet den Timer mit x Hz void configMs(ms) // initialisiert und startet den Timer mit x mS void configUs(us) // initialisiert und startet den Timer mit x µS void stop() // hält den Timer an virtual onTimerEvent() // zum überschreiben, Timer-Event-Funktion // bei Bedarf ist auch die Verarbeitung direkt im Interrupt möglich
PecCounterMs «template» benötigt Parameter timerN// Stoppuhr-Template, realisiert Zeit-Messungen in Millisekunden void start() // startet die Stoppuhr bei 0 unsigned int stop() // hält die Stoppuhr an und liefert den gemessenen Wert unsigned int getCount() // liefert den aktuellen Wert, Stoppuhr läuft weiter unsigned int reStart() // startet die Stoppuhr neu bei 0, liefert akt. Wert
PecCounterUs «template» benötigt Parameter timerN// Stoppuhr-Template, realisiert Zeit-Messungen in Mikrosekunden void start() // startet die Stoppuhr bei 0 unsigned int stop() // hält die Stoppuhr an und liefert den gemessenen Wert unsigned int getCount() // liefert den aktuellen Wert, Stoppuhr läuft weiter unsigned int reStart() // startet die Stoppuhr neu bei 0, liefert akt. Wert
PecPwmChannel «template» benötigt Parameter timerN und channelXvoid configHz() // konfiguriert die PWM-Frequenz void setDuty(duty) // setzt den pseudo-Analogwert 0...1000 void start() // startet die PWM Ausgabe void stop() // hält die PWM Ausgabe an
PecFrequencyChannel «template» benötigt Para. timerN und channelXvoid setHz(hz) // konfiguriert die Ausgabefrequenz void on() // startet die Frequenzausgabe void off() // hält die Frequenzausgabe an
timerN «parameter» für PecTimer…#define %timer% n // 0, 1, 2, ...
channelX «parameter» für Pec…Channel#define %channel% X // A, B, C, ...
anwendungsorientierte TIMER Bausteine
PecSimpleSound «template» benötigt Parameter timerN, channelXvoid play("SoundCode") // spielt die im String codierte Tonfolge (Melodie) void stop() // hält die aktuelle Tonausgabe an bool isPlaying() // prüft ob noch eine Tonausgabe läuft
// -------------------------------------------------------------- // Soundcodes: // Ton = Buchstabe, Großbuchstabe höhere Oktave // cdefgah = ton // c´ = cis (des) =w // e´ = es (dis) =x // f´ = fis (ges) =y // a´ = as (gis) =z // b = (ais) // Ton = Buchstabe, Großbuchstabe höhere Oktave // k...v = c...h inclusive cis,es,fis,as,b // / ab jetzt 1 oktave höher // \ ab jetzt 1 oktave tiefer // , kurze pause 1/4 Notenlänge // . lange pause 1/1 Notenlänge // Standard = 1/8-Note // ^ ab jetzt schneller 2x (z.B. 1/16 Note) // v ab jetzt langsamer 1/2 (z.B. 1/4 Note) // Leerzeichen = keine Bedeutung und keine Auswirkung //----------------------------------------------------------------- // Beispiel: ein kleines Kinderlied: speaker.play( "v d,e,f,g,aa,aa, h,h,h,h,aa,.. h,h,h,h,aa,.. g,g,g,g,ff,ff, a,a,a,a,dd" );