Arduino Forum

International => Deutsch => Topic started by: Donaufisch on Oct 11, 2017, 01:57 pm

Title: Zeitkritische senden und Sensor Mittelwert
Post by: Donaufisch on Oct 11, 2017, 01:57 pm
Hallo,
Ich möchte auf einen seriellen half duplex Bus Sensordaten schicken.
Ein Master schickt Anfragen (ein Byte gefolgt von 1500us Pause) auf den Bus. Kommt die richtige Anfrage, möchte ich 3 Byte als Antwort schicken.
Byte1 ist bus spezifisch und identifiziert den Wert, byte2und3 beinhaltet den tatsächlichen Wert.
Ich möchte einen Sensorwert übertragen.
Der Sensor rauscht stark, daher muss ich mehrere Werte mitteln.
Die 3 Antwortbytes sind zeitkritisch.

Ich hätte gerne, dass der Sensorwert kontinuierlich im Hintergrund aus analogA0 ausgelesen und laufend geglättet/gemittelt wird.

Gleichzeitig soll kontinuierlich auf RX gelauscht werden und analysiert bis das entsprechende Byte, gefolgt von der gesuchten Pause, gesendet wird.
Dann soll der jeweils aktuell geglättete Sensorwert in 2 Byte zerlegt und auf den Bus gesendet werden.

In meinem Sketch erfolgen beide Aufgaben hintereinander.
Das geht natürlich nicht, da die för Schleife zur Mitteilung viel zu lange dauert. Selbst wenn ich die Anzahl verringere.

Kann mir jemand erklären wie man 2 solche Aufgaben parallel laufen lassen kann?

Anbei mein Sketch.
In meinem Sketch wird im Loop der Bus abgehört und in der Funktion Sensorwert() wird der Sensorwert berechnet.
In meinem Sketch erfolgt die Berechnung erst nach dem Loop.
Ich bräuchte die Sensorwert Berechnung und Bus Anhörung gleichzeitig.
Geht das? Wenn ja, wie?
Für Tipps oder links zu passenden Anleitungen wäre ich sehr dankbar.


Zusätzlich arbeite ich aktuell mit einer transitor Schaltung, die TX und RX des Arduino auf ein Kabel des half duplex Buses zusammenlegt.
Sollte es dafür eine einfache Softwarelösung geben wäre es perfekt. Dieses Thema hat aktuell keine Priorität.


LG Roland



Title: Re: Zeitkritische senden und Sensor Mittelwert
Post by: guntherb on Oct 11, 2017, 02:27 pm
Dazu Zauberwort heißt "Gleitender Mittelwert"


Mittelwert = (analogread() + Mittelwert * (Filter-1)) / Filter

Jedes mal, wenn du den AD ausliest (am besten mit festen Zeitabständen) wird der wert sofort zur Mittelwertbildung verrechnet.

"Filter" ist der Wert, der bestimmt, wie stark der Messwert gefiltert wird.
Title: Re: Zeitkritische senden und Sensor Mittelwert
Post by: ElEspanol on Oct 11, 2017, 03:10 pm
Schau dir mal die Lib RunningMedian an.
Title: Re: Zeitkritische senden und Sensor Mittelwert
Post by: Donaufisch on Oct 12, 2017, 11:12 am
Danke,
Werde mir beide Optionen ansehen.