Jump to content

    

Просэмплировать по времени

3 hours ago, jenya7 said:

после 3 мили тригер поднялся и индекс изменился

Да, стормозил. Только к чему вообще такой костыль? Добавьте строб длительностью 1 такт на каждую миллисекунду.

Share this post


Link to post
Share on other sites
11 hours ago, Flip-fl0p said:

Вот решение задачи в лоб (код не проверял, но суть думаю ясна)

 

спасибо. но я не могу выставить adc_3ms_valid <= '1'; мне нужно запустить конвертацию и дождаться сигнал готовности данных.

Share this post


Link to post
Share on other sites

А мне мое решение нравиться

ST2.thumb.png.cd59b4f60a33c235f80f512975e828f2.png

вполне себе отработало. милисекунда конечно ужатая, иначе в сигнал тап всё не влезло бы.

Share this post


Link to post
Share on other sites

такая проблема. надо просемплировать несколько значений и взять среднее

 

when ST_ADC_AVG =>
    if (adc_idx <= ADC_SAMPLES) then
	    ADC_TRIG <= '1';
		if (ADC_READY = '1') then
		    ADC_TRIG <= '0'; 
			adc_average <= adc_average + ADC_VAL_IN;
			adc_idx := adc_idx + 1;
		end if;
	else
	    adc_average <= std_logic_vector( unsigned(adc_average) / unsigned(ADC_SAMPLES) );
        adc_average <= std_logic_vector( to_unsigned ( (to_integer( unsigned(adc_average) / unsigned(ADC_SAMPLES) ) ), 32 ) );
		ChargeState <= ST_SAMPLE;

оба варианта компилируются

adc_average <= std_logic_vector( unsigned(adc_average) / unsigned(ADC_SAMPLES) );

adc_average <= std_logic_vector( to_unsigned ( (to_integer( unsigned(adc_average) / unsigned(ADC_SAMPLES) ) ), 32 ) );

но я так понимаю можно пойти более коротким путем? двойная конвертация не нужна?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this