Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

синхронизация осциллограммы

Непрочитано 15.05.2018, 08:45  
фёдорыч
Временная регистрация
 
Регистрация: 20.05.2015
Адрес: Бишкек, Киргизия
Сообщений: 59
Сказал спасибо: 22
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
фёдорыч на пути к лучшему
По умолчанию синхронизация осциллограммы

Подскажите алгоритм синхронизации осциллограммы.
Мой вариант не работает.
Код:
int main(void)
{
	SystemInit();
	FSMC_Init();
	TFT9341_ini();
	TFT9341_FillScreen(BLACK);
	TFT9341_DrawRect(WHITE, 0, 0, 319, 201);
	TFT9341_DrawString("Проверка дисплея ILI9341",5,20,YELLOW,BLACK,0);
	TFT9341_DrawString("Нижняя строка ",5,210,YELLOW,BLACK,0);
	
	ADC_Config();		// ADC configuration
	ADC_SoftwareStartConv(ADC1);	// Start ADC1 Software Conversion

	while (1)
	{
		while(DMA_LISR_HTIF0==0) {}	//ждать половины передачи
		DMA2_Stream0 -› FCR |= DMA_LIFCR_CHTIF0 ;
		for(i=0; i‹255; i++)
		{
			Buf[i] = ADC_Data[i];
		}
		//распаковать данные из Buf[]
		j = 0;
		for(i=0; i‹256; i++)
		{
			DataBuf[j] = Buf[i];
			j++;
			DataBuf[j] = Buf[i] ›› 8;
			j++;
		}
		//синхронизация по переднему фронту
		//вычислить среднее значение амплитуды
		mediana = 0;
		for(i=0; i‹512; i++)
		{
			mediana = mediana + DataBuf[i];
		}
		mediana = mediana/512;
		//ищем "-" сигнала
		decline = -1;
		for(i=0; i‹512; i++)
		{
			if(DataBuf[i] ‹ (mediana-20)) decline = i;
			if(decline != -1) break;
		}
		//ищем "+" сигнала
		rise = -1;
		for(i=decline; i‹512; i++)
		{
			if(DataBuf[i] › (mediana+20)) rise = i-20;
			if(rise != -1) break;
		}
		//вывод на TFT
		for(i=0; i‹320; i++)
		{
			TFT9341_DrawPixel(i, DataTFT[i], BLACK);	//стираем предыдущюю точку
			DataTFT[i] = 200 - DataBuf[rise]*200/256;	//вычисляем и сохраняем новую точку
			rise++;
			TFT9341_DrawPixel(i, DataTFT[i], WHITE);	//рисуем новую точку
		}
	}
Реклама:
фёдорыч вне форума  
Непрочитано 15.05.2018, 11:13  
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 409
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию Re: синхронизация осциллограммы

А что за процик-то у Вас? И что делает это код?
Сообщение от фёдорыч Посмотреть сообщение
Код:
for(i=0; i‹255; i++)
{
    Buf[i] = ADC_Data[i];
}
//распаковать данные из Buf[]
j = 0;
for(i=0; i‹256; i++)
{
    DataBuf[j] = Buf[i];
    j++;
    DataBuf[j] = Buf[i] ›› 8;
    j++;
}
Почему i в первом цикле до 255, а во-втором цикле до 256? Ошибка?

Последний раз редактировалось Signalshik2; 15.05.2018 в 11:27. Причина: Совместил сообщения.
Signalshik2 вне форума  
Сказали "Спасибо" Signalshik2
mike-y-k (15.05.2018)
Непрочитано 15.05.2018, 11:31  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,134
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: синхронизация осциллограммы

обычно синхра снаружи на аналоговом компараторе сделана у многих.
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 15.05.2018, 11:33  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,285
Сказал спасибо: 11,860
Сказали Спасибо 4,159 раз(а) в 3,177 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: синхронизация осциллограммы

фёдорыч, таки лучше расписать ваш алгоритм сначала на словах, например формулировками из постановки, блок схемой,…
Выразить математически как работать с разными сигналами - периодическими, апериодическими, стохастическими,…
Выразить математически как обрабатывать условие синхронизации - порог, поведение на длине развёртки на экране, поведение в конце экрана, условие полного периода,…
После такого труда на бумаге многие вопросы в написанном коде отпадут…

индюк, на аналоговом компараторе определение Space для посылок RS232?
Или на нем же выделение нужной строки или кадра в AV?
В цифровом потоке это уже давно программного решается…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 15.05.2018 в 11:38.
mike-y-k вне форума  
Непрочитано 15.05.2018, 11:45  
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 409
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию Re: синхронизация осциллограммы

Сообщение от фёдорыч Посмотреть сообщение
Код:
if(DataBuf[i] › (mediana+20)) rise = i-20;
- а почему здесь rise = i-20,
если должно быть rise = i. Правильно? Точно?
Ничего не понял.
Сообщение от фёдорыч Посмотреть сообщение
Код:
DataTFT[i] = 200 - DataBuf[rise]*200/256;
- а вот это что означает?
В частности в части "*200/256"?
Мне кажется, что здесь только исправить rise = i-20 на rise = i - потому что там ошибка и вывод на TFT-дисплей нормальный сделать в последнем fore и все заработает!!!!!!!!!!

Последний раз редактировалось Signalshik2; 15.05.2018 в 12:00.
Signalshik2 вне форума  
Непрочитано 15.05.2018, 11:50  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,134
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: синхронизация осциллограммы

Сообщение от mike-y-k Посмотреть сообщение
индюк, на аналоговом компараторе определение Space для посылок RS232?
Или на нем же выделение нужной строки или кадра в AV?
В цифровом потоке это уже давно программного решается…
ну я исходил из того что наверно у человека маленькая плата гшде все и сразу собрано. по аналогии с китайцами.
поэтому я имел ввиду что компаратор мониторит аналоговый тракт и дает на отдельную ногу проца импульс. мошт на прерывание даже.

причем там компорт?? нигде про него у автора не увидел
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 15.05.2018, 11:56  
фёдорыч
Временная регистрация
 
Регистрация: 20.05.2015
Адрес: Бишкек, Киргизия
Сообщений: 59
Сказал спасибо: 22
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
фёдорыч на пути к лучшему
По умолчанию Re: синхронизация осциллограммы

stm32f407ve, с помощью FSMC подключен дисплей ILI9341, 320x240. Инициализация ADC и DMA - код из примера ADC_DualModeInterleaved, изменен только размер буфера(1-›512).
По коду: инициализация периферии, запуск ADC с передачей данных по DMA. В цикле: ожидание флага половины передачи, сброс флага, преобразование 16-битных данных в массив uint8_t Buf[].
Так как заранее неизвестна амплитуда входного сигнала, а также смещение отн-но нуля, вычисляется ср. арифметическое отсчетов и принимается "волевое" решение, что (mediana-20) и менее относятся к "-" сигнала, соответственно (mediana+20) и более - "+" сигнала.
Далее поиск перехода в "-", нашли, от этого значения ищется переход сигнала в "+", нашли, считается, что это фронт сигнала для вывода на дисплей.
На дисплей сначала выводятся 20 предыдущих значений, чтобы фронт сигнала сдвинуть от края экрана.
Скорость оцифровки(если верить описанию примера) 7Msps, тестовый сигнал - 100KHz.
фёдорыч вне форума  
Непрочитано 15.05.2018, 11:57  
Yuri222
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.02.2005
Адрес: Минск, Беларусь
Сообщений: 8,919
Сказал спасибо: 3,109
Сказали Спасибо 3,030 раз(а) в 2,258 сообщении(ях)
Yuri222 на пути к лучшему
По умолчанию Re: синхронизация осциллограммы

индюк, не, с аналоговым компаратором не комильфо. Удобная фича цифровых - можно посмотреть, что творилось до момента синхронизации.
Yuri222 вне форума  
Непрочитано 15.05.2018, 11:59  
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 409
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию Re: синхронизация осциллограммы

Федорыч, я там дописал еще в свое 5 сообщение. Почитайте, пожалуйста.
Сообщение от фёдорыч Посмотреть сообщение
Инициализация ADC и DMA - код из примера ADC_DualModeInterleaved, изменен только размер буфера(1-›512).
- вово, так и подумал, что откуда-то код стырили.
Отладчик есть нормальный? Типа как JTAG ICE MK2 на ATMega128.
И в коде неплохо бы разобраться.

Последний раз редактировалось Signalshik2; 15.05.2018 в 12:16.
Signalshik2 вне форума  
Непрочитано 15.05.2018, 12:05  
фёдорыч
Временная регистрация
 
Регистрация: 20.05.2015
Адрес: Бишкек, Киргизия
Сообщений: 59
Сказал спасибо: 22
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
фёдорыч на пути к лучшему
По умолчанию Re: синхронизация осциллограммы

Почему i в первом цикле до 255, а во-втором цикле до 256? Ошибка?
Да, ошибка, описАлся.
Счас исправлю, проверю, отпишусь.
фёдорыч вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синхронизация потоковой оцифровки в LPC2478. Oleg_IT ARM 0 28.08.2014 13:39
С1-73 синхронизация U~A Измерительное оборудование 9 18.01.2012 14:50
Осцилограф ОМЛ-2М синхронизация urisss Измерительное оборудование 6 24.12.2011 23:52
Пакетная синхронизация в SPI alberio Микроконтроллеры, АЦП, память и т.д 7 12.06.2010 17:41


Часовой пояс GMT +4, время: 06:43.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.