Пятница, 26.04.2024, 16:37
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | Модуль цифрового осцилографа - Страница 31 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » Модуль цифрового осцилографа (Пробуем свои силы в построении цифрового осциллографа)
Модуль цифрового осцилографа
vladimersДата: Среда, 27.03.2013, 20:43 | Сообщение # 451
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
мне надо пример как правильно вставить и куда именно ,например вот тут ?
/*******************************************************************************
* Function Name : MIN_MAX_MODEfunc
* Description : Очистка и вывод на экран осциллограммы в режиме макс./мин.
* Input : None
* Return : None
*******************************************************************************/
 
ВитГоДата: Среда, 27.03.2013, 20:44 | Сообщение # 452
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Sergi,

как тебе такая полоса пропускания ?

Прикрепления: 5760146.gif (14.9 Kb)


Виталий (аka ВитГо)
 
ВитГоДата: Среда, 27.03.2013, 20:47 | Сообщение # 453
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: 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
Репутация: 0
Статус: Offline
нече неизменилось ,это при обычной попали мы ,а с ней нормально.
надо в
* Description : Очистка и вывод на экран осциллограммы в режиме макс./мин. там вроде такоеж но какраз при нужной интерполяции .какраз где мусор .
при нормальной щас (что пример выше -нормально работает все и мусора нет вообще при зашкаливании )
 
ВитГоДата: Среда, 27.03.2013, 21:08 | Сообщение # 455
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
жаль что у меня нет этого железа..
можно было бы попробовать поколупаться...


Виталий (аka ВитГо)
 
vladimersДата: Среда, 27.03.2013, 21:18 | Сообщение # 456
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: 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
Репутация: 55
Статус: 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
Репутация: 0
Статус: 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
Репутация: 55
Статус: Offline
Я не зарисгвую весь прямоугольник. Сначала цветом фона рисую старый отрезок,потом цветом графика новый и перехожу к следующей точке по Х
 
vladimersДата: Четверг, 28.03.2013, 14:36 | Сообщение # 460
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
не незарисовать,а очистить -стирание ,и потом закрасить цветом ,какбы обновить, это как выход с положения.
я так понял что при максимальной -проц или система очистки несправляется с количеством данных,он просто неуспевает стереть все.
тут или стараться просто неподавать сигнал мощный на малых пределах ,или всеж ввести очистку.
попробую всеж какнить.
 
ВитГоДата: Четверг, 28.03.2013, 15:08 | Сообщение # 461
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
нет, загрузка проца вряд ли зависит от амплитуды сигнала...

нужно смотреть весь алгоритм...

к сожалению как то мудрено сделан вывод, помоему можно было сделать проще...


Виталий (аka ВитГо)
 
vladimersДата: Четверг, 28.03.2013, 20:47 | Сообщение # 462
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
но тогда это надо все перелопачивать ,мне это не посилам однозначно.
максимум это мелкие доработки возможно .
 
ВитГоДата: Четверг, 28.03.2013, 23:05 | Сообщение # 463
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну перелопачивать все может быть сразу и не стоит.

но вот разобраться как осуществляется выборка данных захвата и как выводятся на экран - думаю вполне вам по силам..

я бы делал сначала полностью рисование в буфере (в озу) и потом бы этот буфер выводил на экран..
таким образом как минимум мы уменьшаем время между моментом когда мы экран стерли, и временем когда еще не полностью на него вывели осциллограмму (из за вычислений на ходу)

плюс - переписав бы вывод на буфер - могли бы до вывода на экран проверить выход за границы диапазона

вообще больше такая ошибка похожа на ошибку в работе библиотеки - скорее всего на входе процедуры вывода точки (линии) не стоит проверка на допустимость координат для вывода - потому такие артефакты и вылазиют...


Виталий (аka ВитГо)
 
SergiДата: Пятница, 29.03.2013, 10:11 | Сообщение # 464
Подполковник
Группа: Проверенные
Сообщений: 540
Репутация: 55
Статус: Offline
Вот у меня inp -то что выдает ацп диапазон 0-255. out -буфер экрана. Получается делением на 2 из inp и проверкой на выход за границы. Сначала я обсчитывал все 160 точек по горизонтали и потом выводил,но было мерцание. Потом сделал вывод после каждой точки. Все стало плавным,без мерцания. Никаких артефактов, все точки из буфера не теряются. Поверх рисую только сетку и перекрестие.
 
lorddroidДата: Пятница, 29.03.2013, 14:44 | Сообщение # 465
Рядовой
Группа: Проверенные
Сообщений: 9
Репутация: 2
Статус: Offline
ВитГо, Привет , написал в личку. Сори за офтоп тоже вопросы и по р\у и AVR smile куда писать товарищи ?
сделал ветку соседнюю в этом разделе. надеюсь а ваши советы.


Сообщение отредактировал lorddroid - Пятница, 29.03.2013, 15:19
 
Форум » Разработка электронных устройств » Разрабатываю ! » Модуль цифрового осцилографа (Пробуем свои силы в построении цифрового осциллографа)
Поиск:


Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz