Das lernst du heute
- Ringpuffer im Stack
- Mittel der letzten Werte
- Trend anzeigen
Ein Temperaturwert allein sagt wenig. Steigt es gerade? Ist der Ausschlag eben ein Ausreißer? Dafür merkt sich der Chip die letzten Werte in einem Ringpuffer: zehn feste Plätze im Stack, die reihum überschrieben werden.
Der Ring
Ein Zeiger pos sagt, wohin der nächste Wert kommt. Nach jedem Schreiben rückt er eins weiter und springt hinter dem letzten Platz zurück auf 0:
poke pos temp
add pos pos 1
mod pos pos GROESSE # 9 -> 0
Der neueste Wert liegt also bei pos − 1, der älteste bei pos, sobald der Ring einmal voll ist. Bis dahin liegt der älteste bei 0. Ein Zähler anzahl merkt sich, wie viele Plätze schon gefüllt sind, höchstens GROESSE.
Teilziele
- Mittel der ersten Werte: Die LED „Mittel“ zeigt den Mittelwert der bisher gespeicherten Temperaturen in °C, auch wenn der Ring noch nicht voll ist.
- Nur die letzten zehn: Ist der Ring voll, überschreibt jeder neue Wert den ältesten. Das Mittel bezieht sich immer auf die letzten zehn Werte.
- Trend: Die LED „Trend“ zeigt neuester minus ältester Wert in K. Die Leuchte „Steigt“ leuchtet, wenn der Trend über 0,5 K liegt.
- Sensorausfall: Fehlt der Gassensor „Halle“, wird nichts gespeichert, das Blinklicht „Sensorfehler“ leuchtet, und die Anzeigen behalten ihren letzten Wert.
Mittel über die gefüllten Plätze
move summe 0
move i 0
summieren:
get wert db i
add summe summe wert
add i i 1
blt i anzahl summieren
div mittel summe anzahl
Weil der Ring von 0 an gefüllt wird, liegen die ersten anzahl Werte immer auf den Adressen 0 bis anzahl − 1. Ist er voll, ist anzahl gleich GROESSE, und die Schleife geht über alle Plätze.
Im Test wird jeden Takt gespeichert. Im Spiel reicht meist ein Wert pro Minute. Dafür setzt du einen Zähler davor, der nur alle 120 Takte einen Wert in den Ring lässt.
Speicher nie NaN in den Ring. Ein einziges NaN macht die Summe und damit das Mittel für zehn Durchläufe unbrauchbar. Prüf den Messwert, bevor du ihn mit poke ablegst.
Schaubild
Projektaufgabe
Aufgabe
Baue den Ringpuffer für den Gassensor „Halle“ mit zehn Plätzen auf den Adressen 0 bis 9. Ausgaben: LED „Mittel“ (°C), LED „Trend“ (K), Wandleuchte „Steigt“, Blinklicht „Sensorfehler“. Die Teilziele stehen über dem Editor.
Teilziele
- Teilziel 1: Mittel der ersten Werte
- Teilziel 2: nur die letzten zehn zählen
- Teilziel 3: Trend
- Teilziel 4: Sensorausfall
Hinweise
Hinweis 1
Bei NaN: Warnlampe an und mit bnez fehlt start zurück, bevor etwas gespeichert wird.
Hinweis 2
Ring: poke pos temp, pos weiterzählen und mit mod umbrechen, anzahl mit min auf GROESSE deckeln.
Hinweis 3
Neuester Wert bei pos − 1 (mit mod), ältester bei pos, wenn der Ring voll ist, sonst bei 0.
Quiz
2 Fragen. Ab 60 % ist das Quiz bestanden – die Auswertung macht der Server.
Tag abschließen
- Alle Teilziele des Projekts bestanden
- Quiz mit mindestens 60 % bestanden
Ohne Konto wird der Fortschritt nur in diesem Browser gespeichert.
Fehler in dieser Lektion melden
Zum Melden bitte anmelden. Anmelden