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

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

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

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

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

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


 
Опции темы
Непрочитано 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
Прописка
 
Регистрация: 11.08.2015
Сообщений: 168
Сказал спасибо: 14
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
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
Адрес: мурмурляндия
Сообщений: 7,289
Сказал спасибо: 101
Сказали Спасибо 2,071 раз(а) в 1,250 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: синхронизация осциллограммы

обычно синхра снаружи на аналоговом компараторе сделана у многих.
индюк вне форума  
Непрочитано 15.05.2018, 11:33  
mike-y-k
Почётный гражданин KAZUS.RU
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 6,065
Сказал спасибо: 5,422
Сказали Спасибо 1,723 раз(а) в 1,360 сообщении(ях)
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
Прописка
 
Регистрация: 11.08.2015
Сообщений: 168
Сказал спасибо: 14
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
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
Адрес: мурмурляндия
Сообщений: 7,289
Сказал спасибо: 101
Сказали Спасибо 2,071 раз(а) в 1,250 сообщении(ях)
индюк на пути к лучшему
По умолчанию 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.RU
 
Регистрация: 08.02.2005
Сообщений: 1,889
Сказал спасибо: 194
Сказали Спасибо 527 раз(а) в 384 сообщении(ях)
Yuri222 на пути к лучшему
По умолчанию Re: синхронизация осциллограммы

индюк, не, с аналоговым компаратором не комильфо. Удобная фича цифровых - можно посмотреть, что творилось до момента синхронизации.
Yuri222 вне форума  
Непрочитано 15.05.2018, 11:59  
Signalshik2
Прописка
 
Регистрация: 11.08.2015
Сообщений: 168
Сказал спасибо: 14
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
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
Синхронизация surgutw Делимся опытом 1 10.06.2005 15:32


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot