Hallo,
ich habe einen ADC und will sobald der Wert davon über ein Schwellwert
geht alle Werte aufsummieren bis der Wert wieder kleiner wie der
Schwellwert wird. Also quasi die Fläche unter einem Peak bestimmen.
Ich bin mir sehr unsicher wie man das richtig rechnet in VHDL.
Der ADC ist 9-Bit Unsigned, der einstellbare Schwellwert ist auch 9-Bit
Unsigned, und die Summe ist 16Bit Unsigned. Da ich keinen Überlauf haben
will habe ich folgendes gemacht:
1 | if ADC > Schwellwert and Summe /= "1111111111111111" then
|
2 | Summe <= Summe + ADC - Schwellwert;
|
3 | end if;
|
- Schwellwert, weil ich nur die Fläche über dem Untergrund/Schwellwert
haben will.
Ich habe auch schon ausprobiert:
1 | if ADC > Schwellwert and Summe /= "1111111111111111" then
|
2 | Summe <= to_unsigned(to_integer(Summe) + to_integer(ADC) - to_integer(Schwellwert),16);
|
3 | end if;
|
Den Fehler den ich sehe ist, dass die Summe die ich zum PC schicke,
nicht größer wird wenn ich den analogen Peak größer einstelle, sondern
trotz der Summe /= "1111111111111111" Bedingung weiterhin überläuft.
Sprich wenn ich das analoge Signal groß mache bekomme ich irgendwann
wieder kleine Summen.
Ist da ein Fehler in dem Code oder muss ich wo anders suchen?
Vielen Dank!