C / C++ für das Internet der Dinge und Hausautomatisierung Arduino Uno / Nano / … Input, Interrupts, Timer, Sleepmode Hochschule Fulda – FB AI Sommersemester.

Slides:



Advertisements
Ähnliche Präsentationen
Hochschule Fulda – FB ET Sommersemester 2010
Advertisements

4. Attiny-Veranstaltung
Hochschule Fulda – FB ET Sommersemester 2010
Mignon Game Kit Workshop
Steuerung externer Komponenten über ein USB-Interface.
Elektronischer Würfel
Embedded Systems Prof. Dr. H. Kristl
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Programmieren in C Dynamische Listen / Bäume
Programmieren in C Grundlagen C 5
Μ Version 1.0Seite 1µVision Start Debugger Set Breakpoint µVision Debugger.
Ultraschall Funktionsprinzip des Sensors (1)
Informatik II Grundlagen der Programmierung Programmieren in C Benutzerinteraktion / Ein- und Ausgabe Hochschule Fulda – FB ET Sommersemester
Programmieren in C Grundlagen C 2
Informatik II Grundlagen der Programmierung Programmieren in C printf() mit variabler Feldbreite Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ.
Programmieren in C Grundlagen C 2
Programmieren in C Sortieren, Suchen
Torsteuerung Marco Korrmann Dominik Sommer.
… erste Schritte mit einem programmierbaren Mikrocontroller
Mikrocomputertechnik Jürgen Walter
Basis Informationen, die man für Anfang braucht ! Hassan Tagharobi Dez 2007.
Mikrocomputertechnik 1 Einführung Prof. J. Walter Stand Oktober Mikrocomputertechnik Jürgen Walter „PWM-Quickie“ Pulsweitenmodulation.
Entfernungsmessung mit Ultraschall
Elektronik, Kommunikation, Regelung
Von Marcel Poppen & Oliver Lennartz
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Programmieren Hexenwerk oder Zauberspuk? Kinderuniversität Mittwoch, 16. März 2016 Kinder-Akademie Fulda & Hochschule Fulda Peter Klingebiel, HS Fulda,
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Ein- und Ausgabe (I/O) E. Eube, G. Heinrichs, U. Ihlefeldt (V 1.0 C 2016) 1 µC Aktoren o. Ä. LED Pieper Relais Motor … D/A-Wandler Ext. Speicher … Aus-
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Markus Heller, M.A. (DL8RDS)Datum: Folie Nummer 1 File: Einsatz von Mikrocontrollern in Amateurfunkprojekten Microcontroller in Selbstbauprojekten.
Programmieren in C / C++ Internet der Dinge Mikrocontroller ESP8266
Programmieren in C / C++ ESP8266-Boards und das Internet der Dinge
Programmieren in C / C++ Klassen und Vererbung, Templates
SPS auf dem Raspberry PI
Kompaktsteuerungen Logiksteuerung oder Kleinsteuerung.
Erste Schritte im Internet of Things
Mikrocontroller programmieren
Modulfest am International Departement in Karlsruhe
Programmieren in C Dynamische Listen / Bäume
ABB STOTZ-KONTAKT GmbH ABB i-bus® KNX Raum Master, Premium, RM/S 2.1
Programmieren in C / C++ Erste Schritte mit C++ Klassen und Objekte
Projektmodul DM Wearables
Programmieren in C Grundlagen C 2
Programmieren in C / C++ Software Serial, Bluetooth
Inhaltsverzeichnis Was ist Arduino? Hardwarekomponenten
Interrupts (
Mikrocontroller programmieren
Hochschule Fulda – FB AI Sommersemester 2017
Programmieren in C Wie speichert C
Projektarbeit 5. Semester Thomas Gulden
Schnittstellen und Datenaustausch / Inputs und Outputs
Hochschule Fulda – FB AI Wintersemester 2014/15
Interrupts Wozu Interrupts? Interruptmodell Einige Attiny-Interrupts
ABB i-bus® EIB / KNX AA/S 4.1 Analogaktor AAM/S 4.1 Analogaktormodul
IR -Empfänger SS 2017 Walter, Henrik Pudwell, Claas-Lennart.
Projektmodul DM Kurze Einführung Arduino und Arduino-Programmierung
Projektmodul DM Wearables
X Verwendungshinweise:
Universal E/A-Konzentrator UK/S 32.2
Vorgestern, gestern und heute
INVERSES PENDEL
Programmieren in C Module und Bibliotheken
Vom Prozessor zum System
Aufbau und Anwendungen von Mikrokontrollern
ESP32 Arduino Herzlich willkommen zum Edison Quickie. „ESP32-Blink“
2 Ein- / Ausgänge parametrierbar
 Präsentation transkript:

C / C++ für das Internet der Dinge und Hausautomatisierung Arduino Uno / Nano / … Input, Interrupts, Timer, Sleepmode Hochschule Fulda – FB AI Sommersemester 2017 http://c.rz.hs-fulda.de Peter Klingebiel, HS Fulda, FB AI

Arduino Nano V3.0 1 C / C++ - Peter Klingebiel - HS Fulda - FB AI 2

Arduino Nano V3.0 2 C / C++ - Peter Klingebiel - HS Fulda - FB AI 3

Arduino Nano Input/Output 1 C / C++ - Peter Klingebiel - HS Fulda - FB AI 4

Arduino Nano Input/Output 2 Mikroprozessor Atmel ATmega328P Clock 16 MHz Betriebsspannung 5 Volt Eingangsspannung 7 Volt bis 12 Volt Stromverbrauch 19 mA Speicher Flash 32 KB (davon 2KB für Bootloader) SRAM 2 KB EEPROM 1 KB 32 Pins, davon 22 Input- und Output-Pins maximale Last je IO-Pin 40 mA C / C++ - Peter Klingebiel - HS Fulda - FB AI

Arduino Nano Input/Output 3 22 digitale IO-Pins D0 und D1 (serielle Schnittstelle Serial, USB) D2 .. D13 (frei nutzbar) A0 .. A7 (analoge Eingänge auch digital nutzbar) externe Interrupts INT0 auf D2, INT1 auf D3 Pin Change Interrupts auf allen digitalen Pins SoftwareSerial auf allen digitalen Pins möglich analoge Ausgabe per PWM auf 6 Pins möglich 8 analoge IO-Pins A0 .. A7 auch als digitale Ausgänge nutzbar (Port C) analoger Input mit 10 Bit (Wertebereich 0 .. 1023) analoger Output 8 Bit auf D3, D5, D6, D9, D10 und D11 C / C++ - Peter Klingebiel - HS Fulda - FB AI

Arduino Nano Input/Output 4 C / C++ - Peter Klingebiel - HS Fulda - FB AI 7

IO-Programmierung 1 Pin auf Eingang oder Ausgang schalten void pinMode(int pin, int mode) Eingang p auf Modus INPUT oder OUTPUT einstellen digital schreiben und lesen void digitalWrite(int pin, int value) Wert value (0, 1) auf digitalen Ausgang pin schreiben int digitalRead(int pin) Wert (0, 1) vom digitalen Eingang pin lesen analog schreiben und lesen void analogWrite(int pin, int value) Wert value (8 Bit, 0..255) auf PWM-Ausgang pin schreiben int analogRead(int p) Wert (10 Bit, 0..1023) von analogen Eingang pin (A0..A7) lesen C / C++ - Peter Klingebiel - HS Fulda - FB AI

PWM - Pulsweitenmodulation 1 der Arduino bietet keine echt-analoge Ausgabe meist reicht eine quasi-analoge Ausgabe per PWM, die die Trägheit vieler Systeme ausnutzt Standard-PWM-Frequenzen: Pins D5 und D6: ~1 kHz Pins D3, D9, D10, D11: ~ 500 Hz C / C++ - Peter Klingebiel - HS Fulda - FB AI

PWM - Pulsweitenmodulation 2 PWM „selbstgebaut“ Frequenz: ~ 1 kHz, Output: 63 bzw. 25% #define PIN 12 // PWM auf Pin D12 void setup() { pinMode(PIN, OUTPUT); } void loop() { for(int i = 0; i < 1000; i++) { // 1 sec digitalWrite(PIN, HIGH); delayMicroseconds(250); // 0.25 ms digitalWrite(PIN, LOW); delayMicroseconds(750); // 0.75 ms } Besser: Verwendung von Timern und Interrupts C / C++ - Peter Klingebiel - HS Fulda - FB AI

Polling 1 oft: Abfragen von externen asynchronen Ereignissen, auf die angemessen reagiert werden soll Bsp: Taster schaltet eine LED void loop() { int s = digitalRead(schalter); if(s == HIGH) digitalWrite(led, HIGH); else digitalWrite(led, LOW); } ständiges Abfragen (Polling) ist sehr ungünstig! C / C++ - Peter Klingebiel - HS Fulda - FB AI

Interrupts 1 Besser: auf asynchrones Ereignis mit asynchronem Mittel reagieren: Interrupt Interrupt unterbricht den normalen Programmlauf und arbeitet einen sog. Interrupthandler ab C / C++ - Peter Klingebiel - HS Fulda - FB AI

Interrupts 2 für Reaktion auf und Behandlung von asynchronen Ereignissen sind drei Dinge notwendig: asynchrones Ereignis festlegen, Beispiel: Schalter betätigt  Pegel auf HIGH Interrupthandler installieren, Beispiel: bei Schalterdruck soll die Funktion handler() aufgerufen werden Interrupthandler programmieren wichtig: Interrupthandler sollen kurz sein und nur die notwendigsten Aktionen durchführen notwendig: volatile Variable C / C++ - Peter Klingebiel - HS Fulda - FB AI

Interrupts 3 Definition einer Zustandsvariablen als volatile volatile int ledstatus = LOW;  Compiler optimiert diese Variable nicht Interrupthandler schaltet LED void handler() { ledstatus = !ledstatus; digitalWrite(led, ledstatus); } Interrupthandler installieren: bei Schalterbetätigung  hier bei fallender Flanke (FALLING) attachInterrupt(digitalPinToInterrupt(swt), handler, FALLING); Interruptmodi: LOW, CHANGE, RISING, FALLING C / C++ - Peter Klingebiel - HS Fulda - FB AI

Sleep 1 oft sinnvoll: Mikrocontroller „schlafen“ legen, d.h. auf minimale Funktionalität reduzieren Ziel: Stromverbrauch senken, um lange Lebensdauer von Batterien/Akkus zu gewährleisten meist sind nur noch externe Events über Interrupts in Betrieb, um den Mikrocontroller aufzuwecken, d.h. wieder in den Normalbetrieb zu versetzen  Sleepmodus immer in Verbindung mit Interrupt wichtigster Sleepmodus: SLEEP_MODE_PWR_DOWN weitere Modi: IDLE, PWR_SAVE, STANDBY bei Nano/Uno usw. wegen USB nur geringe Wirkung! C / C++ - Peter Klingebiel - HS Fulda - FB AI

Sleep 2 Beispiel: in setup() Sleepmodus einstellen … set_sleep_mode(SLEEP_MODE_PWR_DOWN); … und ISR (Interrupthandler) installieren attachInterrupt(digitalPinToInterrupt(pin),..); an passender Stelle, z.B. in loop() oder in eigener Funktion gosleep() MC in den Schlafmodus versetzen ... sleep_enable(); // sleep modus ein sleep_mode(); // in sleep modus gehen // hier geht’s nur nach Interrupt weiter sleep_disable(); // sleep modus aus ... C / C++ - Peter Klingebiel - HS Fulda - FB AI

Timer 1 oft ist es notwendig, bestimmte Aktivitäten zeit- und interruptgesteuert, d.h. mit Timern und entsprechenden ISR durchzuführen dabei wird ein Timer so eingestellt, dass nach einer bestimmten Zeitdauer ein Interrupt ausgelöst wird im Interrupthandler werden dann die gewünschten Aktionen ausgeführt für Arduino bietet sich hierfür eine der Timerlibraries, z.B. die Library TimerOne an diese bietet eine einfach zu bedienende Schnittstelle für das Handling von Timern an C / C++ - Peter Klingebiel - HS Fulda - FB AI

Timer 2 Beispiel: blinkende LED mit Timer gesteuert #include <TimerOne.h> volatile int ledstatus = LOW; void blink() { digitalWrite(13, ledstatus = !ledstatus); } void setup() { pinMode(13, OUTPUT); Timer1.initialize(1000000); // 1 sec Timer1.attachInterrupt(blink); } void loop() { // mach was!!! } C / C++ - Peter Klingebiel - HS Fulda - FB AI