Модуль цифрового осцилографа
| |
vladimers | Дата: Среда, 27.03.2013, 20:43 | Сообщение # 451 |
Сержант
Группа: Проверенные
Сообщений: 45
Статус: Offline
| мне надо пример как правильно вставить и куда именно ,например вот тут ? /******************************************************************************* * Function Name : MIN_MAX_MODEfunc * Description : Очистка и вывод на экран осциллограммы в режиме макс./мин. * Input : None * Return : None *******************************************************************************/
|
|
| |
ВитГо | Дата: Среда, 27.03.2013, 20:44 | Сообщение # 452 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Sergi,
как тебе такая полоса пропускания ?
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Среда, 27.03.2013, 20:47 | Сообщение # 453 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Цитата (vladimers) мне надо пример как правильно вставить и куда именно ,например вот тут ? /******************************************************************************* * Function Name : MIN_MAX_MODEfunc * Description : Очистка и вывод на экран осциллограммы в режиме макс./мин. * Input : None * Return : None *******************************************************************************/
нет !!!!
вот эту процедуру замени на то что я даю ниже
Код /******************************************************************************* * Function Name : DrawClear_iLine * Description : отрисовка или очистка одной линии при линейной интерполяции * Input : X0pos, Y0pos, X1pos, Y1pos, clear * Return : None *******************************************************************************/ static __inline void DrawClear_iLine(uint16_t X0pos, uint16_t Y0pos, uint16_t Y1pos, DrawState NewDrawState) { uint16_t clrColor; uint16_t i, j; uint16_t tmpY; if (Y0pos>220) Y0pos=220; if (Y0pos<20) Y0pos=20;
if (Y1pos>220) Y1pos=220; if (Y1pos<20) Y1pos=20; if(Y1pos < Y0pos) { tmpY = Y0pos; Y0pos = Y1pos; Y1pos = tmpY; } if(Y1pos - Y0pos == 0) j = 1; else j = Y1pos - Y0pos; Set_LCD_CS(); LCD_SetCursor(X0pos,Y0pos); // Установка курсора в нужную позицию if(NewDrawState == CLEAR) { for (i = 0; i < j; i++) { /* Проверяем на совпадение координат очистки с сеткой, если совпало то очищаем цветом сетки */ clrColor = Verify_Grid_Match(X0pos, Y0pos); LCD_PutPixel(clrColor); // очистить точку на установленной позиции Y0pos++; } } else // if(NewDrawState == DRAW) { for (i = 0; i < j; i++) LCD_PutPixel(pINFO->Color); // Нарисовать точку на установленной позиции }
Reset_LCD_CS(); }
Виталий (аka ВитГо)
|
|
| |
vladimers | Дата: Среда, 27.03.2013, 21:04 | Сообщение # 454 |
Сержант
Группа: Проверенные
Сообщений: 45
Статус: Offline
| нече неизменилось ,это при обычной попали мы ,а с ней нормально. надо в * Description : Очистка и вывод на экран осциллограммы в режиме макс./мин. там вроде такоеж но какраз при нужной интерполяции .какраз где мусор . при нормальной щас (что пример выше -нормально работает все и мусора нет вообще при зашкаливании )
|
|
| |
ВитГо | Дата: Среда, 27.03.2013, 21:08 | Сообщение # 455 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| жаль что у меня нет этого железа.. можно было бы попробовать поколупаться...
Виталий (аka ВитГо)
|
|
| |
vladimers | Дата: Среда, 27.03.2013, 21:18 | Сообщение # 456 |
Сержант
Группа: Проверенные
Сообщений: 45
Статус: Offline
| вот какраз заметил особенность. мусор несколько при вылете а ещо при отсутствии синхронизации . тоесть получается несправляется функцыя очистки старой осцелограммы .просто какбы пропускает .невсостоянии все стереть тоесть вроде как тутКод /******************************************************************************* * Function Name : Clear_OLD_Data_MIN_MAX * Description : очистка, режим максимумов/минимумов * Input : None * Return : None тоесть какбы шире зделать полосу оистки чем сама осцелограмма ,возможно такое ?
Сообщение отредактировал vladimers - Среда, 27.03.2013, 21:27 |
|
| |
Sergi | Дата: Среда, 27.03.2013, 21:34 | Сообщение # 457 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| я вот так рисую график
drawLine(out[1],z[kt][0],out[2],2*z[kt][0],colr[0]); out[1]=inp[xn+1]>>1; if (out[1]>111) out[1]=111; if (out[1]<1) out[1]=1; for (y=2;y<(ik);y++) { if(inp[y]>vmax) vmax=inp[y]; drawLine(out[y],y*z[kt][0],out[y+1],(y+1)*z[kt][0],colr[0]); out[y]=inp[y+xn]>>1; if (out[y]>111) out[y]=111; if (out[y]<1) out[y]=1; drawLine(out[y-1],(y-1)*z[kt][0],out[y],y*z[kt][0],colr[2]); }; out[ik]=inp[xn+ik]>>1; if (out[ik]>111) out[ik]=111; if (out[ik]<1) out[ik]=1; drawLine(out[ik-1],(ik-1)*z[kt][0],out[ik],ik*z[kt][0],colr[2]);
grid(colr[4]); krest(colr[5]);
inp - входной массив, out - выходной, z[kt][0] - шаг по Х, 111- максимум по вертикали, 1-минимум, ik,y- указатель на точку (максимум 160 штук по горизонтали), xn - последняя точка grid - рисование сетки, krest - центральный крест
и так по кругу с опросом кнопок по прерыванию
это все есть в http://radiokot.ru/forum/viewtopic.php?f=20&t=61626
Сообщение отредактировал Sergi - Среда, 27.03.2013, 21:39 |
|
| |
vladimers | Дата: Среда, 27.03.2013, 21:45 | Сообщение # 458 |
Сержант
Группа: Проверенные
Сообщений: 45
Статус: Offline
| возможно просто прицепить такую примочку (как ранее писал ) - LCD_ClearArea(12, 20, 398,220, Active_BackColor); LCD_DrawGrid(&activeAreaGrid, DRAW); но только правельно к кнопке переключения режимов вольт\деления . таже очистка всего с прорисовкой сетки (ведь всеравно если неправельно выбрал режим,и пошл вылет луча ,тоесть уровень сигнала большой - переключают на уровень выше ) я цеплял но грубо,в итоге чистит все но идет при переключение передергивание экрана какбы . а както мягче возможно ,тоесть невте строки я попал. просто похоже очистка старых осцелограм несправляется при максимальной
Сообщение отредактировал vladimers - Среда, 27.03.2013, 21:47 |
|
| |
Sergi | Дата: Четверг, 28.03.2013, 08:54 | Сообщение # 459 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| Я не зарисгвую весь прямоугольник. Сначала цветом фона рисую старый отрезок,потом цветом графика новый и перехожу к следующей точке по Х
|
|
| |
vladimers | Дата: Четверг, 28.03.2013, 14:36 | Сообщение # 460 |
Сержант
Группа: Проверенные
Сообщений: 45
Статус: Offline
| не незарисовать,а очистить -стирание ,и потом закрасить цветом ,какбы обновить, это как выход с положения. я так понял что при максимальной -проц или система очистки несправляется с количеством данных,он просто неуспевает стереть все. тут или стараться просто неподавать сигнал мощный на малых пределах ,или всеж ввести очистку. попробую всеж какнить.
|
|
| |
ВитГо | Дата: Четверг, 28.03.2013, 15:08 | Сообщение # 461 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| нет, загрузка проца вряд ли зависит от амплитуды сигнала...
нужно смотреть весь алгоритм...
к сожалению как то мудрено сделан вывод, помоему можно было сделать проще...
Виталий (аka ВитГо)
|
|
| |
vladimers | Дата: Четверг, 28.03.2013, 20:47 | Сообщение # 462 |
Сержант
Группа: Проверенные
Сообщений: 45
Статус: Offline
| но тогда это надо все перелопачивать ,мне это не посилам однозначно. максимум это мелкие доработки возможно .
|
|
| |
ВитГо | Дата: Четверг, 28.03.2013, 23:05 | Сообщение # 463 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну перелопачивать все может быть сразу и не стоит.
но вот разобраться как осуществляется выборка данных захвата и как выводятся на экран - думаю вполне вам по силам..
я бы делал сначала полностью рисование в буфере (в озу) и потом бы этот буфер выводил на экран.. таким образом как минимум мы уменьшаем время между моментом когда мы экран стерли, и временем когда еще не полностью на него вывели осциллограмму (из за вычислений на ходу)
плюс - переписав бы вывод на буфер - могли бы до вывода на экран проверить выход за границы диапазона
вообще больше такая ошибка похожа на ошибку в работе библиотеки - скорее всего на входе процедуры вывода точки (линии) не стоит проверка на допустимость координат для вывода - потому такие артефакты и вылазиют...
Виталий (аka ВитГо)
|
|
| |
Sergi | Дата: Пятница, 29.03.2013, 10:11 | Сообщение # 464 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| Вот у меня inp -то что выдает ацп диапазон 0-255. out -буфер экрана. Получается делением на 2 из inp и проверкой на выход за границы. Сначала я обсчитывал все 160 точек по горизонтали и потом выводил,но было мерцание. Потом сделал вывод после каждой точки. Все стало плавным,без мерцания. Никаких артефактов, все точки из буфера не теряются. Поверх рисую только сетку и перекрестие.
|
|
| |
lorddroid | Дата: Пятница, 29.03.2013, 14:44 | Сообщение # 465 |
Рядовой
Группа: Проверенные
Сообщений: 9
Статус: Offline
| ВитГо, Привет , написал в личку. Сори за офтоп тоже вопросы и по р\у и AVR куда писать товарищи ? сделал ветку соседнюю в этом разделе. надеюсь а ваши советы.
Сообщение отредактировал lorddroid - Пятница, 29.03.2013, 15:19 |
|
| |
|