Inhaltsverzeichnis
Eingebettete Systeme sind elektronischer Rechner, die in einem technischen Kontext eingebettet sind. Dabei übernimmt der Rechner entweder Überwachungs-, Steuerungs- oder Regelfunktionen.
Elektrisches Widerstandsbauelement, dessen Widerstandswert mechanisch durch Drehen oder Schieben verändert werden kann. Die Funktionsweise entspricht einem reglbaren Spannungsteiler. (= analoge Eingabeschnittstelle)
Halbleiter-Bauelement, das Licht ausstrahlt, wenn elektrischer Strom in Durchlassrichtung fließt.
Begrenzt den Stromfluss in einem Schaltkreis. Beispielsweise als Vorwiderstand für LEDs.
Passives elektrisches Bauelement zur Speicherung elektrischer Ladungen in einem Magnetfeld. Werden in der Regel zum Glätten von Spannungen oder für Verzögerungsschaltungen eingesetzt.
Mechanisches Bauelement, zum zeitweisen Schließen/Öffnen eines Schaltkreises. (= Digitale Eingabeschnittstelle)
Elektromotor, der zusätzlich mit einem Sensor zur Positionsbestimmung ausgestattet ist. Die Ansteuerung erfolgt über ein PWM-Signal.
- Ultraschall-Distanzsensor
- Temperatursensor
- Piezo-Buzzer
- Infrarot-Bewegungsmelder
-
Ampermeter = Strommessgerät
$\rightarrow$ Messung elektrischer Stromstärke -
Voltmeter = Spannungsmessgerät
$\rightarrow$ Messung elektrischer Spannungen - Oszilloskop = Messgerät, dass eine oder mehrere elektrische Spannungen im zeitlichen Verlauf sichtbar macht
- Signalgeneratoren erzeugen elektrische Spannungen mit einem charakteristischen Zeitverlauf (z.B. Rechteck-, Sinusspannung)
- = PulseWidthModulation (Pulsbreitenmodulation)
- Schnelles Ein- und Ausschalten der Spannung (=Rechteckpuls)\rightarrow\rightarrow Verhältnis zwischen Ein- und Ausschaltzeit wird variiert
- Verwendung: z.B. Dimmen von LEDs, Ansteuerung von Servos
A | B | Z |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
- Code: ´if(a && b)´
- Elektrisch: Zwei Schalter in Reihe
- Anwendung: Schutzfunktion durch Erfüllung zweier Bedingungen
A | B | Z |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
- Code: ´if(a || b)´
- Elektrisch: Zwei Schalter in Parallel
- Anwendung (Steuerungstechnik): Innenlichtsteuerung KFZ
A | B | Z |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
- Code: ´if(a == b)´
- Elektrisch: Schalter mit mehreren Kontakten bzw. Digitalbausteine
- Anwendung (Steuerungstechnik): Vergleich von Sensorwerten
A | B | Z |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
- Code: ´if(a != b)´
- Elektrisch: Schalter mit mehreren Kontakten bzw. Digitalbausteine (XOR)
- Anwendung (Steuerungstechnik): Kryptografie, Prüfsummen
- = kurzfristige Unterbrechung der normalen Programmausführung
- tritt eine bestimmte Bedingung ein, wird sofort die gewünschte Interrupt Service Routine (ISR) ausgeführt
Interrupt Modi
Interupt | Trigger |
---|---|
RISING | ansteigende Flanke |
FALLING | absteigende Flanke |
CHANGE | ansteigende/abfallende Flanke (jede Änderung) |
LOW | wird getriggert, wenn der Pin LOW ist |
HIGH | wird getriggert, wenn der Pin HIGH ist |
- mit
attachInterrupt()
wird ein Interrupt initialisiert digitalPinToInterrupt()
wandelt die Pin-Nummer in die mikrocontrollerspezifische Interrupt-Nummer um (erhöht Plattformunabhängigkeit)
Achtung
Innerhalb der vom Interrupt ausgelösten Funktion wird delay() nicht funktionieren und millis() nicht hochzählen. Empfangene Serielle Daten in der Funktion können verloren gehen. Variablen, die innerhalb der Funktion verarbeitet werden, sollten als volatile gekennzeichnet werden. Quelle: Arduino Dokumentation
Anwendungsbeispiel
Es soll eine Schaltung mit einer blinkenden LED und einer LED, die über einen Schalter gesteuert wird. Damit die LED zeitnah geschaltet werden kann, soll dies über einen Interrupt realisiert werden.
#define INPUT_SWITCH 2
#define OUTPUT_SWITCH 13
#define OUTPUT_BLINK 12
void setup(){
pinMode(INPUT_SWITCH, INPUT);
pinMode(OUTPUT_SWITCH, OUTPUT);
pinMode(OUTPUT_BLINK, OUTPUT);
attachInterrupt(digitalPinToInterrupt(INPUT_SWITCH), input_button, CHANGE);
}
void loop(){
digitalWrite(OUTPUT_BLINK, !digitalRead(OUTPUT_BLINK));
delay(1000);
}
void input_button(){
digitalWrite(OUTPUT_SWITCH, digitalRead(INPUT_SWITCH));
}
- spezielle Hardware im Mikrocontroller
$\rightarrow$ Timer/Zähler - Uhren zum Warten auf Ereignise, Erzeugen von Frequenzen, Messen von Zeit
- Arduino Uno (ATmega328) besitzt drei Timer (1x 16bit; 2x 8bit)
- Register kann taktweise Zählen (16 MHz
$\rightarrow$ 62,5ns pro Takt)- 8bit-Timer
$\rightarrow$ $256 * 62,5ns = 16 µs$ - 16bit-Timer
$\rightarrow$ $65536 * 62,5ns = 4,096 ms$ -
$\rightarrow$ mit demPrescaler
kann die Schrittweite eingestellt werden (0, 1, 8, 64, 256, 1024) -
$\rightarrow$ mit Prescaler max. 0,016s bzw. 4,19s
- 8bit-Timer
- je nach Konfiguration kann der Zähler der Interrupt ausgelöst werden (= interne Interrupt-Quelle)
- laufen unabhängig vom normalen Programmablauf
- Definition durch Interrupt-Maske
Welcher Wert sollte nach 1ms bei 16 MHz und ein Prescaler von 64 im 8bit-Zähler stehen?
$$\text{OCRn} = [\frac{16\text{MHz}}{64}110^{-3}s]-1=\underline{\underline{249}}$$
void setup(){
TCCR0A = (0x1<<WGM01); //Compare-Modus (CTC) aktivieren -> Timer wird bei Match gecleart
OCR0A = 0xF9; //Vergleichswert für 1ms setzen
TCCR0B|=(0x1<<CS01); //Prescale auf 64 setzen
TCCR0B|=(0x1<<CS00); //^^
TIMSK0|=(0x1<<OCIE0A); //internen Interrupt aktivieren
sei(); //^^
}
ISR(TIMER0_COMPA_vect){
//ISR für den Timer
}